From 66922ccd7f16a1c6cf88766cc340a5a411890326 Mon Sep 17 00:00:00 2001 From: scawful Date: Wed, 24 Apr 2024 23:35:07 -0400 Subject: [PATCH] Add Dsp last frame boundary --- src/app/emu/audio/dsp.cc | 6 +++++- src/app/emu/audio/dsp.h | 3 +++ 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/src/app/emu/audio/dsp.cc b/src/app/emu/audio/dsp.cc index 1c93aef0..2bef50d5 100644 --- a/src/app/emu/audio/dsp.cc +++ b/src/app/emu/audio/dsp.cc @@ -129,6 +129,10 @@ void Dsp::Reset() { sampleOffset = 0; } +void Dsp::NewFrame() { + lastFrameBoundary = sampleOffset; +} + void Dsp::Cycle() { sampleOutL = 0; sampleOutR = 0; @@ -619,7 +623,7 @@ void Dsp::GetSamples(int16_t* sample_data, int samples_per_frame, // resample from 534 / 641 samples per frame to wanted value float wantedSamples = (pal_timing ? 641.0 : 534.0); double adder = wantedSamples / samples_per_frame; - double location = sample_offset_ - wantedSamples; + double location = lastFrameBoundary - wantedSamples; for (int i = 0; i < samples_per_frame; i++) { sample_data[i * 2] = sample_buffer_[(((int)location) & 0x3ff) * 2]; sample_data[i * 2 + 1] = sample_buffer_[(((int)location) & 0x3ff) * 2 + 1]; diff --git a/src/app/emu/audio/dsp.h b/src/app/emu/audio/dsp.h index 2bb08800..762692c9 100644 --- a/src/app/emu/audio/dsp.h +++ b/src/app/emu/audio/dsp.h @@ -87,6 +87,8 @@ class Dsp { public: Dsp(std::vector& aram) : aram_(aram) {} + void NewFrame(); + void Reset(); void Cycle(); @@ -150,6 +152,7 @@ class Dsp { // sample ring buffer (1024 samples, *2 for stereo) int16_t sampleBuffer[0x400 * 2]; uint16_t sampleOffset; // current offset in samplebuffer + uint32_t lastFrameBoundary; }; } // namespace audio