diff options
Diffstat (limited to 'src/audio_core/time_stretch.cpp')
| -rw-r--r-- | src/audio_core/time_stretch.cpp | 10 |
1 files changed, 6 insertions, 4 deletions
diff --git a/src/audio_core/time_stretch.cpp b/src/audio_core/time_stretch.cpp index ea38f40d0..f44807c84 100644 --- a/src/audio_core/time_stretch.cpp +++ b/src/audio_core/time_stretch.cpp | |||
| @@ -26,8 +26,8 @@ static double ClampRatio(double ratio) { | |||
| 26 | return MathUtil::Clamp(ratio, MIN_RATIO, MAX_RATIO); | 26 | return MathUtil::Clamp(ratio, MIN_RATIO, MAX_RATIO); |
| 27 | } | 27 | } |
| 28 | 28 | ||
| 29 | constexpr double MIN_DELAY_TIME = 0.05; // Units: seconds | 29 | constexpr double MIN_DELAY_TIME = 0.05; // Units: seconds |
| 30 | constexpr double MAX_DELAY_TIME = 0.25; // Units: seconds | 30 | constexpr double MAX_DELAY_TIME = 0.25; // Units: seconds |
| 31 | constexpr size_t DROP_FRAMES_SAMPLE_DELAY = 16000; // Units: samples | 31 | constexpr size_t DROP_FRAMES_SAMPLE_DELAY = 16000; // Units: samples |
| 32 | 32 | ||
| 33 | constexpr double SMOOTHING_FACTOR = 0.007; | 33 | constexpr double SMOOTHING_FACTOR = 0.007; |
| @@ -48,7 +48,8 @@ std::vector<s16> TimeStretcher::Process(size_t samples_in_queue) { | |||
| 48 | 48 | ||
| 49 | double ratio = CalculateCurrentRatio(); | 49 | double ratio = CalculateCurrentRatio(); |
| 50 | ratio = CorrectForUnderAndOverflow(ratio, samples_in_queue); | 50 | ratio = CorrectForUnderAndOverflow(ratio, samples_in_queue); |
| 51 | impl->smoothed_ratio = (1.0 - SMOOTHING_FACTOR) * impl->smoothed_ratio + SMOOTHING_FACTOR * ratio; | 51 | impl->smoothed_ratio = |
| 52 | (1.0 - SMOOTHING_FACTOR) * impl->smoothed_ratio + SMOOTHING_FACTOR * ratio; | ||
| 52 | impl->smoothed_ratio = ClampRatio(impl->smoothed_ratio); | 53 | impl->smoothed_ratio = ClampRatio(impl->smoothed_ratio); |
| 53 | 54 | ||
| 54 | // SoundTouch's tempo definition the inverse of our ratio definition. | 55 | // SoundTouch's tempo definition the inverse of our ratio definition. |
| @@ -100,7 +101,8 @@ double TimeStretcher::CalculateCurrentRatio() { | |||
| 100 | const steady_clock::time_point now = steady_clock::now(); | 101 | const steady_clock::time_point now = steady_clock::now(); |
| 101 | const std::chrono::duration<double> duration = now - impl->frame_timer; | 102 | const std::chrono::duration<double> duration = now - impl->frame_timer; |
| 102 | 103 | ||
| 103 | const double expected_time = static_cast<double>(impl->samples_queued) / static_cast<double>(native_sample_rate); | 104 | const double expected_time = |
| 105 | static_cast<double>(impl->samples_queued) / static_cast<double>(native_sample_rate); | ||
| 104 | const double actual_time = duration.count(); | 106 | const double actual_time = duration.count(); |
| 105 | 107 | ||
| 106 | double ratio; | 108 | double ratio; |