From ad09ed4e509171910b1a3675294c85f4fb6f4485 Mon Sep 17 00:00:00 2001 From: Aikku93 Date: Sat, 3 Sep 2022 14:40:14 +1000 Subject: [PATCH] Ensure capture is always processed If the buffer is still being filled, it should move the DAD forward anyway or it will fall out of sync. --- desmume/src/SPU.cpp | 13 +++---------- 1 file changed, 3 insertions(+), 10 deletions(-) diff --git a/desmume/src/SPU.cpp b/desmume/src/SPU.cpp index 4045be3c6..5a3288547 100644 --- a/desmume/src/SPU.cpp +++ b/desmume/src/SPU.cpp @@ -1465,22 +1465,15 @@ static void SPU_MixAudio_Advanced(bool actuallyMix, SPU_struct *SPU, int length) //Instead, what we do here is delay the capture by 16 samples to create a similar effect. //Subjectively, it seems to be working. - //Don't do anything until the fifo is filled, so as to delay it - if (cap.runtime.fifo.size < 16) - { - cap.runtime.fifo.enqueue(capout[capchan]); - continue; - } - - //(actually capture sample from fifo instead of most recently generated) - u32 multiplier; - s32 sample = cap.runtime.fifo.dequeue(); + //Fetch the FIFO-buffered sample and enqueue the most recently generated sample + s32 sample = (cap.runtime.fifo.size >= 16) ? cap.runtime.fifo.dequeue() : 0; cap.runtime.fifo.enqueue(capout[capchan]); //static FILE* fp = NULL; //if(!fp) fp = fopen("d:\\capout.raw","wb"); //fwrite(&sample,2,1,fp); + u32 multiplier; if (cap.bits8) { s8 sample8 = sample >> 8;