summaryrefslogtreecommitdiff
path: root/src/audio_core/stream.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/audio_core/stream.cpp')
-rw-r--r--src/audio_core/stream.cpp13
1 files changed, 7 insertions, 6 deletions
diff --git a/src/audio_core/stream.cpp b/src/audio_core/stream.cpp
index abd8576e2..f80ab92e4 100644
--- a/src/audio_core/stream.cpp
+++ b/src/audio_core/stream.cpp
@@ -38,7 +38,7 @@ Stream::Stream(Core::Timing::CoreTiming& core_timing, u32 sample_rate, Format fo
38 sink_stream{sink_stream}, core_timing{core_timing}, name{std::move(name_)} { 38 sink_stream{sink_stream}, core_timing{core_timing}, name{std::move(name_)} {
39 39
40 release_event = Core::Timing::CreateEvent( 40 release_event = Core::Timing::CreateEvent(
41 name, [this](u64 userdata, s64 cycles_late) { ReleaseActiveBuffer(cycles_late); }); 41 name, [this](u64, std::chrono::nanoseconds ns_late) { ReleaseActiveBuffer(ns_late); });
42} 42}
43 43
44void Stream::Play() { 44void Stream::Play() {
@@ -78,7 +78,7 @@ static void VolumeAdjustSamples(std::vector<s16>& samples, float game_volume) {
78 } 78 }
79} 79}
80 80
81void Stream::PlayNextBuffer(s64 cycles_late) { 81void Stream::PlayNextBuffer(std::chrono::nanoseconds ns_late) {
82 if (!IsPlaying()) { 82 if (!IsPlaying()) {
83 // Ensure we are in playing state before playing the next buffer 83 // Ensure we are in playing state before playing the next buffer
84 sink_stream.Flush(); 84 sink_stream.Flush();
@@ -103,17 +103,18 @@ void Stream::PlayNextBuffer(s64 cycles_late) {
103 103
104 sink_stream.EnqueueSamples(GetNumChannels(), active_buffer->GetSamples()); 104 sink_stream.EnqueueSamples(GetNumChannels(), active_buffer->GetSamples());
105 105
106 const auto time_stretch_delta = std::chrono::nanoseconds{ 106 const auto time_stretch_delta = Settings::values.enable_audio_stretching.GetValue()
107 Settings::values.enable_audio_stretching.GetValue() ? 0 : cycles_late}; 107 ? std::chrono::nanoseconds::zero()
108 : ns_late;
108 const auto future_time = GetBufferReleaseNS(*active_buffer) - time_stretch_delta; 109 const auto future_time = GetBufferReleaseNS(*active_buffer) - time_stretch_delta;
109 core_timing.ScheduleEvent(future_time, release_event, {}); 110 core_timing.ScheduleEvent(future_time, release_event, {});
110} 111}
111 112
112void Stream::ReleaseActiveBuffer(s64 cycles_late) { 113void Stream::ReleaseActiveBuffer(std::chrono::nanoseconds ns_late) {
113 ASSERT(active_buffer); 114 ASSERT(active_buffer);
114 released_buffers.push(std::move(active_buffer)); 115 released_buffers.push(std::move(active_buffer));
115 release_callback(); 116 release_callback();
116 PlayNextBuffer(cycles_late); 117 PlayNextBuffer(ns_late);
117} 118}
118 119
119bool Stream::QueueBuffer(BufferPtr&& buffer) { 120bool Stream::QueueBuffer(BufferPtr&& buffer) {