mirror of
https://github.com/zeldaret/oot.git
synced 2025-08-11 09:20:17 +00:00
[Audio 5/?] Build the Samplebank Table (#2044)
This commit is contained in:
parent
56ca23663a
commit
ba5574be6d
24 changed files with 343 additions and 68 deletions
|
@ -1265,7 +1265,7 @@ void AudioHeap_DiscardSampleCacheEntry(SampleCacheEntry* entry) {
|
|||
s32 sampleBankId2;
|
||||
s32 fontId;
|
||||
|
||||
numFonts = gAudioCtx.soundFontTable->numEntries;
|
||||
numFonts = gAudioCtx.soundFontTable->header.numEntries;
|
||||
for (fontId = 0; fontId < numFonts; fontId++) {
|
||||
sampleBankId1 = gAudioCtx.soundFontList[fontId].sampleBankId1;
|
||||
sampleBankId2 = gAudioCtx.soundFontList[fontId].sampleBankId2;
|
||||
|
@ -1322,7 +1322,7 @@ void AudioHeap_DiscardSampleCaches(void) {
|
|||
s32 fontId;
|
||||
s32 j;
|
||||
|
||||
numFonts = gAudioCtx.soundFontTable->numEntries;
|
||||
numFonts = gAudioCtx.soundFontTable->header.numEntries;
|
||||
for (fontId = 0; fontId < numFonts; fontId++) {
|
||||
sampleBankId1 = gAudioCtx.soundFontList[fontId].sampleBankId1;
|
||||
sampleBankId2 = gAudioCtx.soundFontList[fontId].sampleBankId2;
|
||||
|
@ -1392,7 +1392,7 @@ void AudioHeap_ApplySampleBankCacheInternal(s32 apply, s32 sampleBankId) {
|
|||
s32 pad[4];
|
||||
|
||||
sampleBankTable = gAudioCtx.sampleBankTable;
|
||||
numFonts = gAudioCtx.soundFontTable->numEntries;
|
||||
numFonts = gAudioCtx.soundFontTable->header.numEntries;
|
||||
change.oldAddr = (u32)AudioHeap_SearchCaches(SAMPLE_TABLE, CACHE_EITHER, sampleBankId);
|
||||
if (change.oldAddr == 0) {
|
||||
return;
|
||||
|
|
|
@ -338,10 +338,10 @@ void AudioLoad_SetSampleFontLoadStatus(s32 sampleBankId, s32 loadStatus) {
|
|||
void AudioLoad_InitTable(AudioTable* table, u32 romAddr, u16 unkMediumParam) {
|
||||
s32 i;
|
||||
|
||||
table->unkMediumParam = unkMediumParam;
|
||||
table->romAddr = romAddr;
|
||||
table->header.unkMediumParam = unkMediumParam;
|
||||
table->header.romAddr = romAddr;
|
||||
|
||||
for (i = 0; i < table->numEntries; i++) {
|
||||
for (i = 0; i < table->header.numEntries; i++) {
|
||||
if ((table->entries[i].size != 0) && (table->entries[i].medium == MEDIUM_CART)) {
|
||||
table->entries[i].romAddr += romAddr;
|
||||
}
|
||||
|
@ -401,7 +401,7 @@ s32 AudioLoad_SyncLoadSample(Sample* sample, s32 fontId) {
|
|||
|
||||
if (sample->medium == MEDIUM_UNK) {
|
||||
AudioLoad_SyncDmaUnkMedium((u32)sample->sampleAddr, sampleAddr, sample->size,
|
||||
gAudioCtx.sampleBankTable->unkMediumParam);
|
||||
gAudioCtx.sampleBankTable->header.unkMediumParam);
|
||||
} else {
|
||||
AudioLoad_SyncDma((u32)sample->sampleAddr, sampleAddr, sample->size, sample->medium);
|
||||
}
|
||||
|
@ -707,7 +707,7 @@ void* AudioLoad_SyncLoad(u32 tableType, u32 id, s32* didAllocate) {
|
|||
|
||||
*didAllocate = true;
|
||||
if (medium == MEDIUM_UNK) {
|
||||
AudioLoad_SyncDmaUnkMedium(romAddr, ramAddr, size, (s16)table->unkMediumParam);
|
||||
AudioLoad_SyncDmaUnkMedium(romAddr, ramAddr, size, (s16)table->header.unkMediumParam);
|
||||
} else {
|
||||
AudioLoad_SyncDma(romAddr, ramAddr, size, medium);
|
||||
}
|
||||
|
@ -1066,8 +1066,8 @@ void* AudioLoad_AsyncLoadInner(s32 tableType, s32 id, s32 nChunks, s32 retData,
|
|||
}
|
||||
|
||||
if (medium == MEDIUM_UNK) {
|
||||
AudioLoad_StartAsyncLoadUnkMedium((s16)table->unkMediumParam, devAddr, ramAddr, size, medium, nChunks,
|
||||
retQueue, MK_ASYNC_MSG(retData, tableType, id, loadStatus));
|
||||
AudioLoad_StartAsyncLoadUnkMedium((s16)table->header.unkMediumParam, devAddr, ramAddr, size, medium,
|
||||
nChunks, retQueue, MK_ASYNC_MSG(retData, tableType, id, loadStatus));
|
||||
} else {
|
||||
AudioLoad_StartAsyncLoad(devAddr, ramAddr, size, medium, nChunks, retQueue,
|
||||
MK_ASYNC_MSG(retData, tableType, realId, loadStatus));
|
||||
|
@ -1215,10 +1215,10 @@ void AudioLoad_Init(void* heap, u32 heapSize) {
|
|||
// Set audio tables pointers
|
||||
gAudioCtx.sequenceTable = (AudioTable*)gSequenceTable;
|
||||
gAudioCtx.soundFontTable = (AudioTable*)gSoundFontTable;
|
||||
gAudioCtx.sampleBankTable = (AudioTable*)gSampleBankTable;
|
||||
gAudioCtx.sampleBankTable = &gSampleBankTable;
|
||||
gAudioCtx.sequenceFontTable = gSequenceFontTable;
|
||||
|
||||
gAudioCtx.numSequences = gAudioCtx.sequenceTable->numEntries;
|
||||
gAudioCtx.numSequences = gAudioCtx.sequenceTable->header.numEntries;
|
||||
|
||||
gAudioCtx.specId = 0;
|
||||
gAudioCtx.resetStatus = 1; // Set reset to immediately initialize the audio heap
|
||||
|
@ -1229,7 +1229,7 @@ void AudioLoad_Init(void* heap, u32 heapSize) {
|
|||
AudioLoad_InitTable(gAudioCtx.sequenceTable, (u32)_AudioseqSegmentRomStart, 0);
|
||||
AudioLoad_InitTable(gAudioCtx.soundFontTable, (u32)_AudiobankSegmentRomStart, 0);
|
||||
AudioLoad_InitTable(gAudioCtx.sampleBankTable, (u32)_AudiotableSegmentRomStart, 0);
|
||||
numFonts = gAudioCtx.soundFontTable->numEntries;
|
||||
numFonts = gAudioCtx.soundFontTable->header.numEntries;
|
||||
gAudioCtx.soundFontList = AudioHeap_Alloc(&gAudioCtx.initPool, numFonts * sizeof(SoundFont));
|
||||
|
||||
for (i = 0; i < numFonts; i++) {
|
||||
|
@ -1295,7 +1295,7 @@ s32 AudioLoad_SlowLoadSample(s32 fontId, s32 instId, s8* status) {
|
|||
slowLoad->seqOrFontId = fontId;
|
||||
slowLoad->instId = instId;
|
||||
if (slowLoad->medium == MEDIUM_UNK) {
|
||||
slowLoad->unkMediumParam = gAudioCtx.sampleBankTable->unkMediumParam;
|
||||
slowLoad->unkMediumParam = gAudioCtx.sampleBankTable->header.unkMediumParam;
|
||||
}
|
||||
|
||||
gAudioCtx.slowLoadPos ^= 1;
|
||||
|
@ -1439,7 +1439,7 @@ s32 AudioLoad_SlowLoadSeq(s32 seqId, u8* ramAddr, s8* status) {
|
|||
slowLoad->seqOrFontId = seqId;
|
||||
|
||||
if (slowLoad->medium == MEDIUM_UNK) {
|
||||
slowLoad->unkMediumParam = seqTable->unkMediumParam;
|
||||
slowLoad->unkMediumParam = seqTable->header.unkMediumParam;
|
||||
}
|
||||
|
||||
gAudioCtx.slowLoadPos ^= 1;
|
||||
|
@ -1616,7 +1616,7 @@ void AudioLoad_ProcessAsyncLoad(AudioAsyncLoad* asyncLoad, s32 resetStatus) {
|
|||
if (asyncLoad->bytesRemaining < asyncLoad->chunkSize) {
|
||||
if (asyncLoad->medium == MEDIUM_UNK) {
|
||||
AudioLoad_AsyncDmaUnkMedium(asyncLoad->curDevAddr, asyncLoad->curRamAddr, asyncLoad->bytesRemaining,
|
||||
sampleBankTable->unkMediumParam);
|
||||
sampleBankTable->header.unkMediumParam);
|
||||
} else {
|
||||
AudioLoad_AsyncDma(asyncLoad, asyncLoad->bytesRemaining);
|
||||
}
|
||||
|
@ -1626,7 +1626,7 @@ void AudioLoad_ProcessAsyncLoad(AudioAsyncLoad* asyncLoad, s32 resetStatus) {
|
|||
|
||||
if (asyncLoad->medium == MEDIUM_UNK) {
|
||||
AudioLoad_AsyncDmaUnkMedium(asyncLoad->curDevAddr, asyncLoad->curRamAddr, asyncLoad->chunkSize,
|
||||
sampleBankTable->unkMediumParam);
|
||||
sampleBankTable->header.unkMediumParam);
|
||||
} else {
|
||||
AudioLoad_AsyncDma(asyncLoad, asyncLoad->chunkSize);
|
||||
}
|
||||
|
@ -1783,7 +1783,7 @@ void AudioLoad_RelocateFontAndPreloadSamples(s32 fontId, SoundFontData* fontData
|
|||
case false:
|
||||
if (sample->medium == MEDIUM_UNK) {
|
||||
AudioLoad_SyncDmaUnkMedium((u32)sample->sampleAddr, sampleRamAddr, sample->size,
|
||||
gAudioCtx.sampleBankTable->unkMediumParam);
|
||||
gAudioCtx.sampleBankTable->header.unkMediumParam);
|
||||
sample->sampleAddr = sampleRamAddr;
|
||||
sample->medium = MEDIUM_RAM;
|
||||
} else {
|
||||
|
@ -2039,7 +2039,7 @@ void AudioLoad_PreloadSamplesForFont(s32 fontId, s32 async, SampleBankRelocInfo*
|
|||
case false:
|
||||
if (sample->medium == MEDIUM_UNK) {
|
||||
AudioLoad_SyncDmaUnkMedium((u32)sample->sampleAddr, addr, sample->size,
|
||||
gAudioCtx.sampleBankTable->unkMediumParam);
|
||||
gAudioCtx.sampleBankTable->header.unkMediumParam);
|
||||
sample->sampleAddr = addr;
|
||||
sample->medium = MEDIUM_RAM;
|
||||
} else {
|
||||
|
|
50
src/audio/tables/samplebank_table.c
Normal file
50
src/audio/tables/samplebank_table.c
Normal file
|
@ -0,0 +1,50 @@
|
|||
#include "attributes.h"
|
||||
#include "z64audio.h"
|
||||
|
||||
// Symbol definition
|
||||
|
||||
extern AudioTable gSampleBankTable;
|
||||
#pragma weak gSampleBankTable = sSampleBankTableHeader
|
||||
|
||||
// Externs for table
|
||||
|
||||
#define DEFINE_SAMPLE_BANK(name, medium, cachePolicy) \
|
||||
extern u8 name##_Start[]; \
|
||||
extern u8 name##_Size[];
|
||||
#define DEFINE_SAMPLE_BANK_PTR(index, medium, cachePolicy) /*empty*/
|
||||
|
||||
#include "assets/audio/samplebank_table.h"
|
||||
|
||||
#undef DEFINE_SAMPLE_BANK
|
||||
#undef DEFINE_SAMPLE_BANK_PTR
|
||||
|
||||
// Table header
|
||||
|
||||
NO_REORDER AudioTableHeader sSampleBankTableHeader = {
|
||||
// The table contains the number of samplebanks, count them with the preprocessor
|
||||
#define DEFINE_SAMPLE_BANK(name, medium, cachePolicy) 1 +
|
||||
#define DEFINE_SAMPLE_BANK_PTR(index, medium, cachePolicy) 1 +
|
||||
|
||||
#include "assets/audio/samplebank_table.h"
|
||||
0,
|
||||
|
||||
#undef DEFINE_SAMPLE_BANK
|
||||
#undef DEFINE_SAMPLE_BANK_PTR
|
||||
|
||||
0,
|
||||
0x00000000,
|
||||
{ 0, 0, 0, 0, 0, 0, 0, 0 },
|
||||
};
|
||||
|
||||
// Table body
|
||||
|
||||
NO_REORDER AudioTableEntry sSampleBankTableEntries[] = {
|
||||
#define DEFINE_SAMPLE_BANK(name, medium, cachePolicy) \
|
||||
{ (u32)name##_Start, (u32)name##_Size, (medium), (cachePolicy), 0, 0, 0 },
|
||||
#define DEFINE_SAMPLE_BANK_PTR(index, medium, cachePolicy) { (index), 0, (medium), (cachePolicy), 0, 0, 0 },
|
||||
|
||||
#include "assets/audio/samplebank_table.h"
|
||||
|
||||
#undef DEFINE_SAMPLE_BANK
|
||||
#undef DEFINE_SAMPLE_BANK_PTR
|
||||
};
|
Loading…
Add table
Add a link
Reference in a new issue