From fb47035f97ab196dbc3e5a38791898eb90fb71a8 Mon Sep 17 00:00:00 2001 From: "Admiral H. Curtiss" Date: Wed, 5 Jan 2022 23:22:07 +0100 Subject: Config: Port emulation speed setting to new config system. --- Source/Core/AudioCommon/Mixer.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'Source/Core/AudioCommon/Mixer.cpp') diff --git a/Source/Core/AudioCommon/Mixer.cpp b/Source/Core/AudioCommon/Mixer.cpp index 6888d9520b..21cbb7ea2e 100644 --- a/Source/Core/AudioCommon/Mixer.cpp +++ b/Source/Core/AudioCommon/Mixer.cpp @@ -71,7 +71,7 @@ unsigned int Mixer::MixerFifo::Mix(short* samples, unsigned int numSamples, // advance indexR with sample position // remember fractional offset - float emulationspeed = SConfig::GetInstance().m_EmulationSpeed; + float emulationspeed = Config::Get(Config::MAIN_EMULATION_SPEED); float aid_sample_rate = static_cast(m_input_sample_rate); if (consider_framelimit && emulationspeed > 0.0f) { -- cgit v1.2.3 From 2aa44b10bae4db2862f9f7e59549da1b720975f9 Mon Sep 17 00:00:00 2001 From: "Admiral H. Curtiss" Date: Thu, 6 Jan 2022 02:01:39 +0100 Subject: Config: Port TimingVariance setting to new config system. --- Source/Core/AudioCommon/Mixer.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'Source/Core/AudioCommon/Mixer.cpp') diff --git a/Source/Core/AudioCommon/Mixer.cpp b/Source/Core/AudioCommon/Mixer.cpp index 21cbb7ea2e..cf698eab84 100644 --- a/Source/Core/AudioCommon/Mixer.cpp +++ b/Source/Core/AudioCommon/Mixer.cpp @@ -77,7 +77,7 @@ unsigned int Mixer::MixerFifo::Mix(short* samples, unsigned int numSamples, { float numLeft = static_cast(((indexW - indexR) & INDEX_MASK) / 2); - u32 low_waterwark = m_input_sample_rate * SConfig::GetInstance().iTimingVariance / 1000; + u32 low_waterwark = m_input_sample_rate * Config::Get(Config::MAIN_TIMING_VARIANCE) / 1000; low_waterwark = std::min(low_waterwark, MAX_SAMPLES / 2); m_numLeftI = (numLeft + m_numLeftI * (CONTROL_AVG - 1)) / CONTROL_AVG; -- cgit v1.2.3 From eb5bb2993ef1d11564f1117247ac5106d7a5e78c Mon Sep 17 00:00:00 2001 From: "Admiral H. Curtiss" Date: Thu, 6 Jan 2022 16:43:43 +0100 Subject: Core/AudioCommon: Add config caching to Mixer. --- Source/Core/AudioCommon/Mixer.cpp | 43 ++++++++++++++++++++++++++++----------- 1 file changed, 31 insertions(+), 12 deletions(-) (limited to 'Source/Core/AudioCommon/Mixer.cpp') diff --git a/Source/Core/AudioCommon/Mixer.cpp b/Source/Core/AudioCommon/Mixer.cpp index cf698eab84..f6bebb60cc 100644 --- a/Source/Core/AudioCommon/Mixer.cpp +++ b/Source/Core/AudioCommon/Mixer.cpp @@ -35,11 +35,15 @@ Mixer::Mixer(unsigned int BackendSampleRate) m_surround_decoder(BackendSampleRate, DPL2QualityToFrameBlockSize(Config::Get(Config::MAIN_DPL2_QUALITY))) { + m_config_changed_callback_id = Config::AddConfigChangedCallback([this] { RefreshConfig(); }); + RefreshConfig(); + INFO_LOG_FMT(AUDIO_INTERFACE, "Mixer is initialized"); } Mixer::~Mixer() { + Config::RemoveConfigChangedCallback(m_config_changed_callback_id); } void Mixer::DoState(PointerWrap& p) @@ -53,7 +57,8 @@ void Mixer::DoState(PointerWrap& p) // Executed from sound stream thread unsigned int Mixer::MixerFifo::Mix(short* samples, unsigned int numSamples, - bool consider_framelimit) + bool consider_framelimit, float emulationspeed, + int timing_variance) { unsigned int currentSample = 0; @@ -71,13 +76,12 @@ unsigned int Mixer::MixerFifo::Mix(short* samples, unsigned int numSamples, // advance indexR with sample position // remember fractional offset - float emulationspeed = Config::Get(Config::MAIN_EMULATION_SPEED); float aid_sample_rate = static_cast(m_input_sample_rate); if (consider_framelimit && emulationspeed > 0.0f) { float numLeft = static_cast(((indexW - indexR) & INDEX_MASK) / 2); - u32 low_waterwark = m_input_sample_rate * Config::Get(Config::MAIN_TIMING_VARIANCE) / 1000; + u32 low_waterwark = m_input_sample_rate * timing_variance / 1000; low_waterwark = std::min(low_waterwark, MAX_SAMPLES / 2); m_numLeftI = (numLeft + m_numLeftI * (CONTROL_AVG - 1)) / CONTROL_AVG; @@ -154,18 +158,26 @@ unsigned int Mixer::Mix(short* samples, unsigned int num_samples) memset(samples, 0, num_samples * 2 * sizeof(short)); - if (Config::Get(Config::MAIN_AUDIO_STRETCH)) + const float emulation_speed = m_config_emulation_speed; + const int timing_variance = m_config_timing_variance; + if (m_config_audio_stretch) { unsigned int available_samples = std::min(m_dma_mixer.AvailableSamples(), m_streaming_mixer.AvailableSamples()); m_scratch_buffer.fill(0); - m_dma_mixer.Mix(m_scratch_buffer.data(), available_samples, false); - m_streaming_mixer.Mix(m_scratch_buffer.data(), available_samples, false); - m_wiimote_speaker_mixer.Mix(m_scratch_buffer.data(), available_samples, false); + m_dma_mixer.Mix(m_scratch_buffer.data(), available_samples, false, emulation_speed, + timing_variance); + m_streaming_mixer.Mix(m_scratch_buffer.data(), available_samples, false, emulation_speed, + timing_variance); + m_wiimote_speaker_mixer.Mix(m_scratch_buffer.data(), available_samples, false, emulation_speed, + timing_variance); for (auto& mixer : m_gba_mixers) - mixer.Mix(m_scratch_buffer.data(), available_samples, false); + { + mixer.Mix(m_scratch_buffer.data(), available_samples, false, emulation_speed, + timing_variance); + } if (!m_is_stretching) { @@ -177,11 +189,11 @@ unsigned int Mixer::Mix(short* samples, unsigned int num_samples) } else { - m_dma_mixer.Mix(samples, num_samples, true); - m_streaming_mixer.Mix(samples, num_samples, true); - m_wiimote_speaker_mixer.Mix(samples, num_samples, true); + m_dma_mixer.Mix(samples, num_samples, true, emulation_speed, timing_variance); + m_streaming_mixer.Mix(samples, num_samples, true, emulation_speed, timing_variance); + m_wiimote_speaker_mixer.Mix(samples, num_samples, true, emulation_speed, timing_variance); for (auto& mixer : m_gba_mixers) - mixer.Mix(samples, num_samples, true); + mixer.Mix(samples, num_samples, true, emulation_speed, timing_variance); m_is_stretching = false; } @@ -385,6 +397,13 @@ void Mixer::StopLogDSPAudio() } } +void Mixer::RefreshConfig() +{ + m_config_emulation_speed = Config::Get(Config::MAIN_EMULATION_SPEED); + m_config_timing_variance = Config::Get(Config::MAIN_TIMING_VARIANCE); + m_config_audio_stretch = Config::Get(Config::MAIN_AUDIO_STRETCH); +} + void Mixer::MixerFifo::DoState(PointerWrap& p) { p.Do(m_input_sample_rate); -- cgit v1.2.3