Qt: Ensure proper audio sample rate is used when resampling audio

This commit is contained in:
Jeffrey Pfau 2015-07-12 00:19:17 -07:00
parent 9d7b79db27
commit 712b0ccb84
6 changed files with 18 additions and 1 deletions

View File

@ -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; }

View File

@ -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();
}

View File

@ -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;

View File

@ -54,3 +54,7 @@ void AudioProcessorSDL::setBufferSamples(int samples) {
void AudioProcessorSDL::inputParametersChanged() {
}
unsigned AudioProcessorSDL::sampleRate() const {
return m_audio.obtainedSpec.freq;
}

View File

@ -29,6 +29,8 @@ public slots:
virtual void setBufferSamples(int samples);
virtual void inputParametersChanged();
virtual unsigned sampleRate() const override;
private:
GBASDLAudio m_audio;
};

View File

@ -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;