summaryrefslogtreecommitdiff
path: root/Source/Core/AudioCommon/Mixer.cpp
diff options
context:
space:
mode:
authorMerryMage <MerryMage@users.noreply.github.com>2017-04-10 17:56:24 +0100
committerMerryMage <MerryMage@users.noreply.github.com>2017-04-12 13:56:29 +0100
commit26514358f40fd110d5d55d033fad16064a4db27b (patch)
tree89093c1eedc056c6b5a3aaf4012e4c088219d636 /Source/Core/AudioCommon/Mixer.cpp
parentb8c867dd7a14ed9e96dfd8f8bc01170dacea9018 (diff)
Add audio stretching as a configuration option
Diffstat (limited to 'Source/Core/AudioCommon/Mixer.cpp')
-rw-r--r--Source/Core/AudioCommon/Mixer.cpp26
1 files changed, 17 insertions, 9 deletions
diff --git a/Source/Core/AudioCommon/Mixer.cpp b/Source/Core/AudioCommon/Mixer.cpp
index bebdd2abbe..5030e5d492 100644
--- a/Source/Core/AudioCommon/Mixer.cpp
+++ b/Source/Core/AudioCommon/Mixer.cpp
@@ -122,18 +122,26 @@ unsigned int CMixer::MixerFifo::Mix(short* samples, unsigned int numSamples,
return actual_sample_count;
}
-unsigned int CMixer::Mix(short* samples, unsigned int num_samples, bool consider_framelimit)
+unsigned int CMixer::Mix(short* samples, unsigned int num_samples)
{
if (!samples)
return 0;
memset(samples, 0, num_samples * 2 * sizeof(short));
- unsigned int actual_samples = m_dma_mixer.Mix(samples, num_samples, false);
- m_streaming_mixer.Mix(samples, num_samples, false);
- m_wiimote_speaker_mixer.Mix(samples, num_samples, false);
+ const bool stretch = SConfig::GetInstance().m_audio_stretch;
- StretchAudio(samples, actual_samples, num_samples);
+ unsigned int actual_samples = m_dma_mixer.Mix(samples, num_samples, !stretch);
+ m_streaming_mixer.Mix(samples, num_samples, !stretch);
+ m_wiimote_speaker_mixer.Mix(samples, num_samples, !stretch);
+
+ if (stretch)
+ {
+ if (m_is_stretching != stretch)
+ m_sound_touch.clear();
+ StretchAudio(samples, actual_samples, num_samples);
+ }
+ m_is_stretching = stretch;
return num_samples;
}
@@ -144,10 +152,10 @@ void CMixer::StretchAudio(short* samples, unsigned int actual_samples, unsigned
// We were given actual_samples number of samples, and num_samples were requested from us.
double current_ratio = static_cast<double>(actual_samples) / static_cast<double>(num_samples);
-
- constexpr double MAXIMUM_LATENCY = 0.080; // seconds
- const double max_backlog = m_sampleRate * MAXIMUM_LATENCY;
- double backlog_fullness = m_sound_touch.numSamples() / max_backlog;
+
+ const double max_latency = SConfig::GetInstance().m_audio_stretch_max_latency;
+ const double max_backlog = m_sampleRate * max_latency / 1000.0;
+ const double backlog_fullness = m_sound_touch.numSamples() / max_backlog;
if (backlog_fullness > 1.0)
{
// Exceeded latency budget: Do not add more samples into FIFO.