From 4fc278eb4639486ba6520c3b66f8c385dea82985 Mon Sep 17 00:00:00 2001 From: tildearrow Date: Mon, 12 May 2025 17:23:25 -0500 Subject: [PATCH] fix audio problems in SDL audio backend this was a Furnace bug issue #2503 --- src/audio/sdlAudio.cpp | 24 ++++++++++++++++++++++-- 1 file changed, 22 insertions(+), 2 deletions(-) diff --git a/src/audio/sdlAudio.cpp b/src/audio/sdlAudio.cpp index feb99657c..bcf7f9212 100644 --- a/src/audio/sdlAudio.cpp +++ b/src/audio/sdlAudio.cpp @@ -27,16 +27,36 @@ void taSDLProcess(void* inst, unsigned char* buf, int nframes) { } void TAAudioSDL::onProcess(unsigned char* buf, int nframes) { + unsigned int unframes=nframes/(sizeof(float)*desc.outChans); + if (nframes<0) { + logE("nframes is negative! (%d)",nframes); + return; + } + for (int i=0; idesc.bufsize) { + delete[] inBufs[i]; + inBufs[i]=new float[unframes]; + } + } + for (int i=0; idesc.bufsize) { + delete[] outBufs[i]; + outBufs[i]=new float[unframes]; + } + } if (audioProcCallback!=NULL) { if (midiIn!=NULL) midiIn->gather(); - audioProcCallback(audioProcCallbackUser,inBufs,outBufs,desc.inChans,desc.outChans,desc.bufsize); + audioProcCallback(audioProcCallbackUser,inBufs,outBufs,desc.inChans,desc.outChans,unframes); } float* fbuf=(float*)buf; - for (size_t j=0; j