Ported some code from 2ship and documented codec macros on ProcessNote

This commit is contained in:
KiritoDv 2024-11-17 19:41:45 -06:00
parent cfc24c205f
commit 090f31cc5a

View File

@ -1026,27 +1026,44 @@ Acmd* AudioSynth_ProcessNote(s32 noteIndex, NoteSubEu* noteSub, NoteSynthesisSta
} }
} }
switch (bookSample->codec) { switch (bookSample->codec) {
case 0: case CODEC_ADPCM:
frameSize = 9; frameSize = 9;
skipInitialSamples = 0x10; skipInitialSamples = 0x10;
sampleDmaStart = 0; sampleDmaStart = 0;
break; break;
case 1: case CODEC_S8:
frameSize = 0x10; frameSize = 0x10;
skipInitialSamples = 0x10; skipInitialSamples = 0x10;
sampleDmaStart = 0; sampleDmaStart = 0;
break; break;
case 2: case CODEC_S16_INMEMORY:
temp = func_800097A8(bookSample, numSamplesToLoadAdj, flags,
&synthState->synthesisBuffers->unk_40);
aLoadBuffer(aList++, OS_K0_TO_PHYSICAL(temp), 0x5F0, (numSamplesToLoadAdj + 0x10) * 2);
flags = 0;
skipBytes = 0; skipBytes = 0;
numSamplesProcessed = numSamplesToLoadAdj; numSamplesProcessed = numSamplesToLoadAdj;
dmemUncompressedAddrOffset1 = numSamplesToLoadAdj; dmemUncompressedAddrOffset1 = numSamplesToLoadAdj;
goto skip; goto skip;
case CODEC_S16:
skipBytes = 0;
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;
} else {
bytesToRead = bookSample->size - (synthState->samplePosInt * 2);
}
// @port [Custom audio]
// TLDR samples are loaded async and might be null the first time they are played.
// See note in AudioSampleFactory.cpp
if (sampleAddr != NULL) {
aLoadBuffer(cmd++, sampleAddr + (synthState->samplePosInt * 2), DMEM_UNCOMPRESSED_NOTE,
bytesToRead);
}
goto skip;
} }
aligned = ALIGN16((nFramesToDecode * frameSize) + 0x10); aligned = ALIGN16((nFramesToDecode * frameSize) + 0x10);