summaryrefslogtreecommitdiff
path: root/src/audio_core/hle/dsp.cpp
diff options
context:
space:
mode:
authorGravatar Maribel2016-05-15 03:04:03 +0100
committerGravatar bunnei2016-05-14 22:04:03 -0400
commit6f6af6928fdff8c807e4a4d03cfd8906e0c7c7cd (patch)
treec857bb669cb13a0358ec6f5bee504963254534c6 /src/audio_core/hle/dsp.cpp
parentMerge pull request #1794 from Subv/regression_fix (diff)
downloadyuzu-6f6af6928fdff8c807e4a4d03cfd8906e0c7c7cd.tar.gz
yuzu-6f6af6928fdff8c807e4a4d03cfd8906e0c7c7cd.tar.xz
yuzu-6f6af6928fdff8c807e4a4d03cfd8906e0c7c7cd.zip
AudioCore: Implement time stretcher (#1737)
* AudioCore: Implement time stretcher * fixup! AudioCore: Implement time stretcher * fixup! fixup! AudioCore: Implement time stretcher * fixup! fixup! fixup! AudioCore: Implement time stretcher * fixup! fixup! fixup! fixup! AudioCore: Implement time stretcher * fixup! fixup! fixup! fixup! fixup! AudioCore: Implement time stretcher
Diffstat (limited to 'src/audio_core/hle/dsp.cpp')
-rw-r--r--src/audio_core/hle/dsp.cpp16
1 files changed, 16 insertions, 0 deletions
diff --git a/src/audio_core/hle/dsp.cpp b/src/audio_core/hle/dsp.cpp
index 0cdbdb06a..5113ad8ca 100644
--- a/src/audio_core/hle/dsp.cpp
+++ b/src/audio_core/hle/dsp.cpp
@@ -9,6 +9,7 @@
9#include "audio_core/hle/pipe.h" 9#include "audio_core/hle/pipe.h"
10#include "audio_core/hle/source.h" 10#include "audio_core/hle/source.h"
11#include "audio_core/sink.h" 11#include "audio_core/sink.h"
12#include "audio_core/time_stretch.h"
12 13
13namespace DSP { 14namespace DSP {
14namespace HLE { 15namespace HLE {
@@ -48,15 +49,29 @@ static std::array<Source, num_sources> sources = {
48}; 49};
49 50
50static std::unique_ptr<AudioCore::Sink> sink; 51static std::unique_ptr<AudioCore::Sink> sink;
52static AudioCore::TimeStretcher time_stretcher;
51 53
52void Init() { 54void Init() {
53 DSP::HLE::ResetPipes(); 55 DSP::HLE::ResetPipes();
56
54 for (auto& source : sources) { 57 for (auto& source : sources) {
55 source.Reset(); 58 source.Reset();
56 } 59 }
60
61 time_stretcher.Reset();
62 if (sink) {
63 time_stretcher.SetOutputSampleRate(sink->GetNativeSampleRate());
64 }
57} 65}
58 66
59void Shutdown() { 67void Shutdown() {
68 time_stretcher.Flush();
69 while (true) {
70 std::vector<s16> residual_audio = time_stretcher.Process(sink->SamplesInQueue());
71 if (residual_audio.empty())
72 break;
73 sink->EnqueueSamples(residual_audio);
74 }
60} 75}
61 76
62bool Tick() { 77bool Tick() {
@@ -77,6 +92,7 @@ bool Tick() {
77 92
78void SetSink(std::unique_ptr<AudioCore::Sink> sink_) { 93void SetSink(std::unique_ptr<AudioCore::Sink> sink_) {
79 sink = std::move(sink_); 94 sink = std::move(sink_);
95 time_stretcher.SetOutputSampleRate(sink->GetNativeSampleRate());
80} 96}
81 97
82} // namespace HLE 98} // namespace HLE