summaryrefslogtreecommitdiff
path: root/src/audio_core
diff options
context:
space:
mode:
Diffstat (limited to 'src/audio_core')
-rw-r--r--src/audio_core/stream.cpp14
-rw-r--r--src/audio_core/stream.h6
2 files changed, 8 insertions, 12 deletions
diff --git a/src/audio_core/stream.cpp b/src/audio_core/stream.cpp
index aab3e979a..abd8576e2 100644
--- a/src/audio_core/stream.cpp
+++ b/src/audio_core/stream.cpp
@@ -59,11 +59,9 @@ Stream::State Stream::GetState() const {
59 return state; 59 return state;
60} 60}
61 61
62s64 Stream::GetBufferReleaseNS(const Buffer& buffer) const { 62std::chrono::nanoseconds Stream::GetBufferReleaseNS(const Buffer& buffer) const {
63 const std::size_t num_samples{buffer.GetSamples().size() / GetNumChannels()}; 63 const std::size_t num_samples{buffer.GetSamples().size() / GetNumChannels()};
64 const auto ns = 64 return std::chrono::nanoseconds((static_cast<u64>(num_samples) * 1000000000ULL) / sample_rate);
65 std::chrono::nanoseconds((static_cast<u64>(num_samples) * 1000000000ULL) / sample_rate);
66 return ns.count();
67} 65}
68 66
69static void VolumeAdjustSamples(std::vector<s16>& samples, float game_volume) { 67static void VolumeAdjustSamples(std::vector<s16>& samples, float game_volume) {
@@ -105,10 +103,10 @@ void Stream::PlayNextBuffer(s64 cycles_late) {
105 103
106 sink_stream.EnqueueSamples(GetNumChannels(), active_buffer->GetSamples()); 104 sink_stream.EnqueueSamples(GetNumChannels(), active_buffer->GetSamples());
107 105
108 core_timing.ScheduleEvent( 106 const auto time_stretch_delta = std::chrono::nanoseconds{
109 GetBufferReleaseNS(*active_buffer) - 107 Settings::values.enable_audio_stretching.GetValue() ? 0 : cycles_late};
110 (Settings::values.enable_audio_stretching.GetValue() ? 0 : cycles_late), 108 const auto future_time = GetBufferReleaseNS(*active_buffer) - time_stretch_delta;
111 release_event, {}); 109 core_timing.ScheduleEvent(future_time, release_event, {});
112} 110}
113 111
114void Stream::ReleaseActiveBuffer(s64 cycles_late) { 112void Stream::ReleaseActiveBuffer(s64 cycles_late) {
diff --git a/src/audio_core/stream.h b/src/audio_core/stream.h
index 524376257..2febd647c 100644
--- a/src/audio_core/stream.h
+++ b/src/audio_core/stream.h
@@ -4,6 +4,7 @@
4 4
5#pragma once 5#pragma once
6 6
7#include <chrono>
7#include <functional> 8#include <functional>
8#include <memory> 9#include <memory>
9#include <string> 10#include <string>
@@ -96,10 +97,7 @@ private:
96 void ReleaseActiveBuffer(s64 cycles_late = 0); 97 void ReleaseActiveBuffer(s64 cycles_late = 0);
97 98
98 /// Gets the number of core cycles when the specified buffer will be released 99 /// Gets the number of core cycles when the specified buffer will be released
99 s64 GetBufferReleaseNS(const Buffer& buffer) const; 100 std::chrono::nanoseconds GetBufferReleaseNS(const Buffer& buffer) const;
100
101 /// Gets the number of core cycles when the specified buffer will be released
102 s64 GetBufferReleaseNSHostTiming(const Buffer& buffer) const;
103 101
104 u32 sample_rate; ///< Sample rate of the stream 102 u32 sample_rate; ///< Sample rate of the stream
105 Format format; ///< Format of the stream 103 Format format; ///< Format of the stream