mirror of
https://github.com/HarbourMasters/Starship.git
synced 2025-02-02 16:23:57 +03:00
Ported some code from 2ship and documented codec macros on ProcessNote
This commit is contained in:
parent
cfc24c205f
commit
090f31cc5a
@ -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);
|
||||||
|
Loading…
Reference in New Issue
Block a user