From 712b0ccb84a9e532b8725276365de7780a875d0f Mon Sep 17 00:00:00 2001 From: Jeffrey Pfau Date: Sun, 12 Jul 2015 00:19:17 -0700 Subject: [PATCH] Qt: Ensure proper audio sample rate is used when resampling audio --- src/platform/qt/AudioProcessor.h | 2 ++ src/platform/qt/AudioProcessorQt.cpp | 7 +++++++ src/platform/qt/AudioProcessorQt.h | 2 ++ src/platform/qt/AudioProcessorSDL.cpp | 4 ++++ src/platform/qt/AudioProcessorSDL.h | 2 ++ src/platform/qt/GameController.cpp | 2 +- 6 files changed, 18 insertions(+), 1 deletion(-) diff --git a/src/platform/qt/AudioProcessor.h b/src/platform/qt/AudioProcessor.h index a29763c23..abbca9395 100644 --- a/src/platform/qt/AudioProcessor.h +++ b/src/platform/qt/AudioProcessor.h @@ -39,6 +39,8 @@ public slots: virtual void setBufferSamples(int samples) = 0; virtual void inputParametersChanged() = 0; + virtual unsigned sampleRate() const = 0; + protected: GBAThread* input() { return m_context; } diff --git a/src/platform/qt/AudioProcessorQt.cpp b/src/platform/qt/AudioProcessorQt.cpp index 23a3f8e7f..281ca6bba 100644 --- a/src/platform/qt/AudioProcessorQt.cpp +++ b/src/platform/qt/AudioProcessorQt.cpp @@ -83,3 +83,10 @@ void AudioProcessorQt::inputParametersChanged() { m_device->setFormat(m_audioOutput->format()); } } + +unsigned AudioProcessorQt::sampleRate() const { + if (!m_audioOutput) { + return 0; + } + return m_audioOutput->format().sampleRate(); +} diff --git a/src/platform/qt/AudioProcessorQt.h b/src/platform/qt/AudioProcessorQt.h index 38edf28d7..ee9dde24d 100644 --- a/src/platform/qt/AudioProcessorQt.h +++ b/src/platform/qt/AudioProcessorQt.h @@ -28,6 +28,8 @@ public slots: virtual void setBufferSamples(int samples); virtual void inputParametersChanged(); + virtual unsigned sampleRate() const override; + private: QAudioOutput* m_audioOutput; AudioDevice* m_device; diff --git a/src/platform/qt/AudioProcessorSDL.cpp b/src/platform/qt/AudioProcessorSDL.cpp index ce6e66bd4..0caa9765c 100644 --- a/src/platform/qt/AudioProcessorSDL.cpp +++ b/src/platform/qt/AudioProcessorSDL.cpp @@ -54,3 +54,7 @@ void AudioProcessorSDL::setBufferSamples(int samples) { void AudioProcessorSDL::inputParametersChanged() { } + +unsigned AudioProcessorSDL::sampleRate() const { + return m_audio.obtainedSpec.freq; +} diff --git a/src/platform/qt/AudioProcessorSDL.h b/src/platform/qt/AudioProcessorSDL.h index 9a918f6b6..002dcd839 100644 --- a/src/platform/qt/AudioProcessorSDL.h +++ b/src/platform/qt/AudioProcessorSDL.h @@ -29,6 +29,8 @@ public slots: virtual void setBufferSamples(int samples); virtual void inputParametersChanged(); + virtual unsigned sampleRate() const override; + private: GBASDLAudio m_audio; }; diff --git a/src/platform/qt/GameController.cpp b/src/platform/qt/GameController.cpp index 8440cd284..24cd47ab2 100644 --- a/src/platform/qt/GameController.cpp +++ b/src/platform/qt/GameController.cpp @@ -746,7 +746,7 @@ void GameController::redoSamples(int samples) { if (m_threadContext.gba) { sampleRate = m_threadContext.gba->audio.sampleRate; } - ratio = GBAAudioCalculateRatio(sampleRate, m_threadContext.fpsTarget, 44100); + ratio = GBAAudioCalculateRatio(sampleRate, m_threadContext.fpsTarget, m_audioProcess->sampleRate()); m_threadContext.audioBuffers = ceil(samples / ratio); #else m_threadContext.audioBuffers = samples;