diff options
| author | 2018-08-23 14:33:03 +0200 | |
|---|---|---|
| committer | 2018-09-08 18:26:23 +0100 | |
| commit | a6efff8b02986daf6d3660c4f33c5f39cf3f3830 (patch) | |
| tree | af15627fd0a02ae74b222e1d02e689185062f1a9 /src/audio_core | |
| parent | Merge pull request #1246 from degasus/instanced_rendering (diff) | |
| download | yuzu-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.txt | 1 | ||||
| -rw-r--r-- | src/audio_core/cubeb_sink.cpp | 7 | ||||
| -rw-r--r-- | src/audio_core/null_sink.h | 4 | ||||
| -rw-r--r-- | src/audio_core/sink_stream.h | 2 | ||||
| -rw-r--r-- | src/audio_core/stream.cpp | 1 |
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 | |||
| 24 | create_target_directory_groups(audio_core) | 24 | create_target_directory_groups(audio_core) |
| 25 | 25 | ||
| 26 | target_link_libraries(audio_core PUBLIC common core) | 26 | target_link_libraries(audio_core PUBLIC common core) |
| 27 | target_link_libraries(audio_core PRIVATE SoundTouch) | ||
| 27 | 28 | ||
| 28 | if(ENABLE_CUBEB) | 29 | if(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: | |||
| 21 | private: | 21 | private: |
| 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 | ||
| 30 | using SinkStreamPtr = std::unique_ptr<SinkStream>; | 32 | using 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, {}); |