From 518f8eb5bd9ec545c0aa34574ea4bd0e4e895dd2 Mon Sep 17 00:00:00 2001 From: Stephen Anthony Date: Mon, 19 Sep 2022 01:33:36 -0230 Subject: [PATCH] Fixed crash in resampling WAV playing; forgot to create an array. Make WAV resampling default behaviour. --- src/common/SoundSDL2.cxx | 13 ++++--------- src/common/SoundSDL2.hxx | 10 +++------- 2 files changed, 7 insertions(+), 16 deletions(-) diff --git a/src/common/SoundSDL2.cxx b/src/common/SoundSDL2.cxx index f44760de6..e9cede687 100644 --- a/src/common/SoundSDL2.cxx +++ b/src/common/SoundSDL2.cxx @@ -175,9 +175,7 @@ void SoundSDL2::open(shared_ptr audioQueue, openDevice(); myEmulationTiming = emulationTiming; -#ifdef RESAMPLE_WAV myWavSpeed = 262 * 60 * 2. / myEmulationTiming->audioSampleRate(); -#endif Logger::debug("SoundSDL2::open started ..."); mute(true); @@ -493,12 +491,12 @@ void SoundSDL2::wavCallback(void* udata, uInt8* stream, int len) SDL_memset(stream, myWavSpec.silence, len); if(myWavLen) { -#ifdef RESAMPLE_WAV if(myWavSpeed != 1.0) { const int origLen = len; len = std::round(len / myWavSpeed); - const int newFreq = std::round(static_cast(myWavSpec.freq) * origLen / len); + const int newFreq = + std::round(static_cast(myWavSpec.freq) * origLen / len); if(static_cast(len) > myWavLen) len = myWavLen; @@ -513,7 +511,7 @@ void SoundSDL2::wavCallback(void* udata, uInt8* stream, int len) myWavCvtBufferSize < static_cast(cvt.len * cvt.len_mult)) { myWavCvtBufferSize = cvt.len * cvt.len_mult; - myWavCvtBuffer = make_unique(myWavCvtBufferSize); + myWavCvtBuffer = make_unique(myWavCvtBufferSize); } cvt.buf = myWavCvtBuffer.get(); @@ -525,7 +523,6 @@ void SoundSDL2::wavCallback(void* udata, uInt8* stream, int len) SDL_MIX_MAXVOLUME * myWavVolumeFactor); } else -#endif { if(static_cast(len) > myWavLen) len = myWavLen; @@ -544,10 +541,8 @@ float SoundSDL2::myWavVolumeFactor = 0xffff; SDL_AudioSpec SoundSDL2::myWavSpec; // audio output format uInt8* SoundSDL2::myWavPos = nullptr; // pointer to the audio buffer to be played uInt32 SoundSDL2::myWavLen = 0; // remaining length of the sample we have to play -#ifdef RESAMPLE_WAV double SoundSDL2::myWavSpeed = 1.0; -unique_ptr SoundSDL2::myWavCvtBuffer = nullptr; +unique_ptr SoundSDL2::myWavCvtBuffer; uInt32 SoundSDL2::myWavCvtBufferSize = 0; -#endif #endif // SOUND_SUPPORT diff --git a/src/common/SoundSDL2.hxx b/src/common/SoundSDL2.hxx index 0e6531d46..ce398d4b5 100644 --- a/src/common/SoundSDL2.hxx +++ b/src/common/SoundSDL2.hxx @@ -20,8 +20,6 @@ #ifndef SOUND_SDL2_HXX #define SOUND_SDL2_HXX -#define RESAMPLE_WAV - class OSystem; class AudioQueue; class EmulationTiming; @@ -194,12 +192,10 @@ class SoundSDL2 : public Sound uInt32 myWavLength{0}; SDL_AudioDeviceID myWavDevice{0}; uInt8* myWavBuffer{nullptr}; -#ifdef RESAMPLE_WAV - static double myWavSpeed; - static unique_ptr myWavCvtBuffer; - static uInt32 myWavCvtBufferSize; -#endif + static double myWavSpeed; + static unique_ptr myWavCvtBuffer; + static uInt32 myWavCvtBufferSize; static float myWavVolumeFactor; static SDL_AudioSpec myWavSpec; // audio output format static uInt8* myWavPos; // pointer to the audio buffer to be played