diff --git a/src/audio/audio_synthesis.c b/src/audio/audio_synthesis.c index af3348c0..7be193d7 100644 --- a/src/audio/audio_synthesis.c +++ b/src/audio/audio_synthesis.c @@ -1036,13 +1036,24 @@ Acmd* AudioSynth_ProcessNote(s32 noteIndex, NoteSubEu* noteSub, NoteSynthesisSta goto skip; case CODEC_S16: - aLoadBuffer(aList++, OS_K0_TO_PHYSICAL(bookSample->sampleAddr + synthState->samplePosInt * 2), DMEM_UNCOMPRESSED_NOTE, - (numSamplesToLoadAdj + SAMPLES_PER_FRAME) * 2); + aClearBuffer(aList++, DMEM_UNCOMPRESSED_NOTE, + (numSamplesToLoadAdj + SAMPLES_PER_FRAME) * SAMPLE_SIZE); + flags = A_CONTINUE; skipBytes = 0; - numSamplesProcessed = numSamplesToLoadAdj; + size_t bytesToRead; + numSamplesProcessed += numSamplesToLoadAdj; dmemUncompressedAddrOffset1 = numSamplesToLoadAdj; + if (((synthState->samplePosInt * 2) + (numSamplesToLoadAdj)*SAMPLE_SIZE) < bookSample->size) { + bytesToRead = (numSamplesToLoadAdj)*SAMPLE_SIZE; + } else { + bytesToRead = bookSample->size - (synthState->samplePosInt * 2); + } + // 2S2H [Port] [Custom audio] Handle decoding OPUS data + aLoadBuffer(cmd++, sampleAddr + (synthState->samplePosInt * 2), DMEM_UNCOMPRESSED_NOTE, + bytesToRead); + goto skip; }