From db4b5e66c9ebd80cfaa2457423683a08f833fb6c Mon Sep 17 00:00:00 2001
From: KiritoDv <kiritodev01@gmail.com>
Date: Wed, 25 Dec 2024 13:28:04 -0600
Subject: [PATCH] Fixed CODEC_S16

---
 src/audio/audio_synthesis.c | 16 +++++++++++-----
 1 file changed, 11 insertions(+), 5 deletions(-)

diff --git a/src/audio/audio_synthesis.c b/src/audio/audio_synthesis.c
index 1e422c17..008c3b3b 100644
--- a/src/audio/audio_synthesis.c
+++ b/src/audio/audio_synthesis.c
@@ -1030,13 +1030,12 @@ Acmd* AudioSynth_ProcessNote(s32 noteIndex, NoteSubEu* noteSub, NoteSynthesisSta
 
                     case CODEC_S16:
                         skipBytes = 0;
+                        size_t bytesToRead;
                         numSamplesProcessed += numSamplesToLoadAdj;
                         dmemUncompressedAddrOffset1 = numSamplesToLoadAdj;
-                        size_t bytesToRead;
 
-                        if (((synthState->samplePosInt * 2) + (numSamplesToLoadAdj + SAMPLES_PER_FRAME) * SAMPLE_SIZE) <
-                            bookSample->size) {
-                            bytesToRead = (numSamplesToLoadAdj + SAMPLES_PER_FRAME) * SAMPLE_SIZE;
+                        if (((synthState->samplePosInt * 2) + (numSamplesToLoadAdj)*SAMPLE_SIZE) < bookSample->size) {
+                            bytesToRead = (numSamplesToLoadAdj)*SAMPLE_SIZE;
                         } else {
                             bytesToRead = bookSample->size - (synthState->samplePosInt * 2);
                         }
@@ -1052,8 +1051,15 @@ Acmd* AudioSynth_ProcessNote(s32 noteIndex, NoteSubEu* noteSub, NoteSynthesisSta
                 }
 
                 aligned = ALIGN16((nFramesToDecode * frameSize) + 0x10);
-                addr = 0x990 - aligned;
+                addr = DMEM_COMPRESSED_ADPCM_DATA - aligned;
 
+#if __SANITIZE_ADDRESS__
+                uintptr_t actualAddrLoaded = samplesToLoadAddr - sampleDataChunkAlignPad;
+                uintptr_t offset = actualAddrLoaded - (uintptr_t)sampleAddr;
+                if (offset + aligned > bookSample->size) {
+                    aligned -= (offset + aligned - bookSample->size);
+                }
+#endif
                 if (nFramesToDecode != 0) {
                     if (1) {}
                     frameIndex = (synthState->samplePosInt + skipInitialSamples - nFirstFrameSamplesToIgnore) / 16;