summaryrefslogtreecommitdiff
path: root/src/audio_core
diff options
context:
space:
mode:
authorGravatar fearlessTobi2018-08-23 14:33:03 +0200
committerGravatar MerryMage2018-09-08 18:26:23 +0100
commita6efff8b02986daf6d3660c4f33c5f39cf3f3830 (patch)
treeaf15627fd0a02ae74b222e1d02e689185062f1a9 /src/audio_core
parentMerge pull request #1246 from degasus/instanced_rendering (diff)
downloadyuzu-a6efff8b02986daf6d3660c4f33c5f39cf3f3830.tar.gz
yuzu-a6efff8b02986daf6d3660c4f33c5f39cf3f3830.tar.xz
yuzu-a6efff8b02986daf6d3660c4f33c5f39cf3f3830.zip
Add audio stretching support
Diffstat (limited to 'src/audio_core')
-rw-r--r--src/audio_core/CMakeLists.txt1
-rw-r--r--src/audio_core/cubeb_sink.cpp7
-rw-r--r--src/audio_core/null_sink.h4
-rw-r--r--src/audio_core/sink_stream.h2
-rw-r--r--src/audio_core/stream.cpp1
5 files changed, 15 insertions, 0 deletions
diff --git a/src/audio_core/CMakeLists.txt b/src/audio_core/CMakeLists.txt
index 82e4850f7..de5c291ce 100644
--- a/src/audio_core/CMakeLists.txt
+++ b/src/audio_core/CMakeLists.txt
@@ -24,6 +24,7 @@ add_library(audio_core STATIC
24create_target_directory_groups(audio_core) 24create_target_directory_groups(audio_core)
25 25
26target_link_libraries(audio_core PUBLIC common core) 26target_link_libraries(audio_core PUBLIC common core)
27target_link_libraries(audio_core PRIVATE SoundTouch)
27 28
28if(ENABLE_CUBEB) 29if(ENABLE_CUBEB)
29 target_link_libraries(audio_core PRIVATE cubeb) 30 target_link_libraries(audio_core PRIVATE cubeb)
diff --git a/src/audio_core/cubeb_sink.cpp b/src/audio_core/cubeb_sink.cpp
index 5a1177d0c..0f77fd162 100644
--- a/src/audio_core/cubeb_sink.cpp
+++ b/src/audio_core/cubeb_sink.cpp
@@ -85,6 +85,13 @@ public:
85 } 85 }
86 } 86 }
87 87
88 size_t SamplesInQueue(u32 num_channels) const {
89 if (!ctx)
90 return 0;
91
92 return queue.size() / num_channels;
93 }
94
88 u32 GetNumChannels() const { 95 u32 GetNumChannels() const {
89 return num_channels; 96 return num_channels;
90 } 97 }
diff --git a/src/audio_core/null_sink.h b/src/audio_core/null_sink.h
index f235d93e5..fbb1bc225 100644
--- a/src/audio_core/null_sink.h
+++ b/src/audio_core/null_sink.h
@@ -21,6 +21,10 @@ public:
21private: 21private:
22 struct NullSinkStreamImpl final : SinkStream { 22 struct NullSinkStreamImpl final : SinkStream {
23 void EnqueueSamples(u32 /*num_channels*/, const std::vector<s16>& /*samples*/) override {} 23 void EnqueueSamples(u32 /*num_channels*/, const std::vector<s16>& /*samples*/) override {}
24
25 size_t SamplesInQueue(u32 /*num_channels*/) const override {
26 return 0;
27 }
24 } null_sink_stream; 28 } null_sink_stream;
25}; 29};
26 30
diff --git a/src/audio_core/sink_stream.h b/src/audio_core/sink_stream.h
index 41b6736d8..743a743a3 100644
--- a/src/audio_core/sink_stream.h
+++ b/src/audio_core/sink_stream.h
@@ -25,6 +25,8 @@ public:
25 * @param samples Samples in interleaved stereo PCM16 format. 25 * @param samples Samples in interleaved stereo PCM16 format.
26 */ 26 */
27 virtual void EnqueueSamples(u32 num_channels, const std::vector<s16>& samples) = 0; 27 virtual void EnqueueSamples(u32 num_channels, const std::vector<s16>& samples) = 0;
28
29 virtual std::size_t SamplesInQueue(u32 num_channels) const = 0;
28}; 30};
29 31
30using SinkStreamPtr = std::unique_ptr<SinkStream>; 32using SinkStreamPtr = std::unique_ptr<SinkStream>;
diff --git a/src/audio_core/stream.cpp b/src/audio_core/stream.cpp
index dbae75d8c..49c6efc85 100644
--- a/src/audio_core/stream.cpp
+++ b/src/audio_core/stream.cpp
@@ -90,6 +90,7 @@ void Stream::PlayNextBuffer() {
90 queued_buffers.pop(); 90 queued_buffers.pop();
91 91
92 VolumeAdjustSamples(active_buffer->Samples()); 92 VolumeAdjustSamples(active_buffer->Samples());
93
93 sink_stream.EnqueueSamples(GetNumChannels(), active_buffer->GetSamples()); 94 sink_stream.EnqueueSamples(GetNumChannels(), active_buffer->GetSamples());
94 95
95 CoreTiming::ScheduleEventThreadsafe(GetBufferReleaseCycles(*active_buffer), release_event, {}); 96 CoreTiming::ScheduleEventThreadsafe(GetBufferReleaseCycles(*active_buffer), release_event, {});