mirror of
https://github.com/HarbourMasters/Starship
synced 2026-08-31 02:00:44 -04:00
We are so fucking close omg
This commit is contained in:
@@ -233,9 +233,9 @@ AudioSpec gAudioSpecs[] = {
|
||||
};
|
||||
s32 D_800C7C28 = 0x20000000; // unused?
|
||||
s16 gSeqTicksPerBeat = 0x30;
|
||||
s32 gAudioHeapSize = 0xAFE00;
|
||||
s32 gInitPoolSize = 0x26000;
|
||||
u32 gPermanentPoolSize = 0x21000;
|
||||
s32 gAudioHeapSize = 0xAFE00 * 2;
|
||||
s32 gInitPoolSize = 0x26000 * 2;
|
||||
u32 gPermanentPoolSize = 0x21000 * 2;
|
||||
u16 gSequenceMedium = 0;
|
||||
u16 gSoundFontMedium = 0;
|
||||
u16 gSampleBankMedium = 0;
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
#include "sys.h"
|
||||
#include "sf64audio_provisional.h"
|
||||
#include "endianness.h"
|
||||
|
||||
static const char devstr[] = "Audio:Envp: overflow %f\n";
|
||||
|
||||
@@ -199,7 +200,7 @@ f32 func_80013B90(AdsrState* adsr) {
|
||||
adsr->state = ADSR_STATE_LOOP;
|
||||
case_ADSR_STATE_LOOP:
|
||||
case ADSR_STATE_LOOP:
|
||||
adsr->delay = adsr->envelope[adsr->envIndex].delay;
|
||||
adsr->delay = BSWAP16(adsr->envelope[adsr->envIndex].delay);
|
||||
switch (adsr->delay) {
|
||||
case ADSR_DISABLE:
|
||||
adsr->state = ADSR_STATE_DISABLED;
|
||||
@@ -208,7 +209,7 @@ f32 func_80013B90(AdsrState* adsr) {
|
||||
adsr->state = ADSR_STATE_HANG;
|
||||
break;
|
||||
case ADSR_GOTO:
|
||||
adsr->envIndex = adsr->envelope[adsr->envIndex].arg;
|
||||
adsr->envIndex = BSWAP16(adsr->envelope[adsr->envIndex].arg);
|
||||
goto case_ADSR_STATE_LOOP;
|
||||
case ADSR_RESTART:
|
||||
adsr->state = ADSR_STATE_INITIAL;
|
||||
@@ -221,7 +222,7 @@ f32 func_80013B90(AdsrState* adsr) {
|
||||
adsr->delay = 1;
|
||||
}
|
||||
|
||||
adsr->target = adsr->envelope[adsr->envIndex].arg / 32767.0f;
|
||||
adsr->target = (s16)BE16SWAP(adsr->envelope[adsr->envIndex].arg) / 32767.0f;
|
||||
adsr->target = SQ(adsr->target);
|
||||
adsr->velocity = (adsr->target - adsr->current) / adsr->delay;
|
||||
adsr->state = ADSR_STATE_FADE;
|
||||
|
||||
@@ -637,7 +637,7 @@ void Audio_ResetSfxChannelState(void) {
|
||||
}
|
||||
|
||||
void Audio_StartSequence(u8 seqPlayId, u8 seqId, u8 seqArgs, u16 fadeInTime) {
|
||||
u8 i;
|
||||
u8 i = 0;
|
||||
s32 pad;
|
||||
|
||||
if (!sStartSeqDisabled || (seqPlayId == SEQ_PLAYER_SFX)) {
|
||||
@@ -2644,8 +2644,7 @@ void Audio_RestoreVolumeSettings(u8 audioType) {
|
||||
}
|
||||
}
|
||||
|
||||
void Audio_SetVolume(u8 audioType, u8 volume) {
|
||||
return;
|
||||
void Audio_SetVolume(u8 audioType, u8 volume) {
|
||||
if (volume > 99) {
|
||||
volume = 99;
|
||||
}
|
||||
|
||||
@@ -148,6 +148,7 @@ void* AudioHeap_Alloc(AudioAllocPool* pool, u32 size) {
|
||||
|
||||
void AudioHeap_InitPool(AudioAllocPool* pool, void* ramAddr, u32 size) {
|
||||
pool->curRamAddr = pool->startRamAddr = (u8*) ramAddr;
|
||||
size *= 4;
|
||||
pool->size = size - ((uintptr_t) ramAddr & 0xF);
|
||||
pool->numEntries = 0;
|
||||
}
|
||||
|
||||
+73
-87
@@ -1,8 +1,12 @@
|
||||
#include <stdlib.h>
|
||||
#include "sys.h"
|
||||
#include "sf64dma.h"
|
||||
#include "sf64audio_provisional.h"
|
||||
#include "assets/ast_audio.h"
|
||||
#include "port/Engine.h"
|
||||
#include "endianness.h"
|
||||
#include "port/Engine.h"
|
||||
#include "port/resource/loaders/AudioLoader.h"
|
||||
|
||||
s32 D_80146D80;
|
||||
s32 PAD_80146D88[2];
|
||||
@@ -33,8 +37,8 @@ void AudioLoad_ProcessAsyncLoads(s32 resetStatus);
|
||||
void AudioLoad_ProcessAsyncLoad(AudioAsyncLoad* asyncLoad, s32 resetStatus);
|
||||
void AudioLoad_AsyncDma(AudioAsyncLoad* asyncLoad, u32 size);
|
||||
void AudioLoad_AsyncDmaUnkMedium(uintptr_t devAddr, u8* ramAddr, u32 size, s32 unkMediumParam);
|
||||
void AudioLoad_RelocateSample(TunedSample* tSample, u32 fontDataAddr, SampleBankRelocInfo* relocInfo);
|
||||
s32 AudioLoad_RelocateFontAndPreloadSamples(s32 fontId, u32 fontDataAddr, SampleBankRelocInfo* relocData, s32 isAsync);
|
||||
void AudioLoad_RelocateSample(TunedSample* sample, TunedSample32Bit* tSample, uintptr_t fontDataAddr, SampleBankRelocInfo* relocInfo);
|
||||
s32 AudioLoad_RelocateFontAndPreloadSamples(s32 fontId, uintptr_t fontDataAddr, SampleBankRelocInfo* relocData, s32 isAsync);
|
||||
s32 AudioLoad_ProcessSamplePreloads(s32 resetStatus);
|
||||
|
||||
void AudioLoad_DecreaseSampleDmaTtls(void) {
|
||||
@@ -386,13 +390,12 @@ void AudioLoad_SyncInitSeqPlayerInternal(s32 playerIdx, s32 seqId, s32 arg2) {
|
||||
|
||||
func_800144E4(&gSeqPlayers[playerIdx]);
|
||||
|
||||
index = *((u16*) gSeqFontTable + seqId);
|
||||
numFonts = gSeqFontTable[index++];
|
||||
index = BSWAP16(*((u16*) gSeqFontTable + seqId));
|
||||
fontId = 0xFF;
|
||||
|
||||
for (numFonts; numFonts > 0; numFonts--) {
|
||||
for (numFonts = gSeqFontTable[index++]; numFonts > 0; numFonts--) {
|
||||
fontId = gSeqFontTable[index++];
|
||||
AudioLoad_SyncLoadFont(fontId);
|
||||
// AudioLoad_SyncLoadFont(fontId);
|
||||
}
|
||||
|
||||
seqData = AudioLoad_SyncLoadSeq(seqId);
|
||||
@@ -401,23 +404,17 @@ void AudioLoad_SyncInitSeqPlayerInternal(s32 playerIdx, s32 seqId, s32 arg2) {
|
||||
|
||||
gSeqPlayers[playerIdx].seqId = seqId;
|
||||
gSeqPlayers[playerIdx].defaultFont = fontId;
|
||||
gSeqPlayers[playerIdx].enabled = true;
|
||||
gSeqPlayers[playerIdx].enabled = 1;
|
||||
gSeqPlayers[playerIdx].seqData = seqData;
|
||||
gSeqPlayers[playerIdx].scriptState.pc = seqData;
|
||||
gSeqPlayers[playerIdx].scriptState.depth = 0;
|
||||
gSeqPlayers[playerIdx].delay = 0;
|
||||
gSeqPlayers[playerIdx].finished = false;
|
||||
|
||||
for (i = 0; i < 16; i++) {
|
||||
;
|
||||
}
|
||||
gSeqPlayers[playerIdx].finished = 0;
|
||||
}
|
||||
|
||||
void* AudioLoad_SyncLoadSeq(s32 seqId) {
|
||||
s32 seqIdx = AudioLoad_GetLoadTableIndex(SEQUENCE_TABLE, seqId);
|
||||
s32 didAllocate;
|
||||
|
||||
return AudioLoad_SyncLoad(0, seqIdx, &didAllocate);
|
||||
AudioTable* table = AudioLoad_GetLoadTable(SEQUENCE_TABLE);
|
||||
return Audio_LoadBlob(gAudioTable, table->entries[seqId].romAddr);
|
||||
}
|
||||
|
||||
void* AudioLoad_SyncLoadSampleBank(u32 sampleBankId, s32* outMedium) {
|
||||
@@ -498,7 +495,7 @@ void* AudioLoad_SyncLoad(u32 tableType, u32 id, s32* didAllocate) {
|
||||
u8* ramAddr;
|
||||
u32 medium;
|
||||
s32 loadStatus;
|
||||
u32 romAddr;
|
||||
uintptr_t romAddr;
|
||||
s32 pad;
|
||||
s32 cachePolicy;
|
||||
|
||||
@@ -621,12 +618,10 @@ AudioTable* AudioLoad_GetLoadTable(s32 tableType) {
|
||||
return table;
|
||||
}
|
||||
|
||||
void AudioLoad_RelocateFont(s32 fontId, u32 fontBaseAddr, void* relocData) {
|
||||
u32* fontDataPtrs = fontBaseAddr;
|
||||
u32** drumDataPtrs = fontBaseAddr;
|
||||
void AudioLoad_RelocateFont(s32 fontId, uintptr_t fontBaseAddr, SampleBankRelocInfo* relocData) {
|
||||
uint32_t* fontDataPtrs = fontBaseAddr;
|
||||
uint32_t** drumDataPtrs = fontBaseAddr;
|
||||
s32 numDrums;
|
||||
Drum* drum;
|
||||
Instrument* instrument;
|
||||
u32 offset;
|
||||
s32 i;
|
||||
s32 numInstruments;
|
||||
@@ -634,53 +629,41 @@ void AudioLoad_RelocateFont(s32 fontId, u32 fontBaseAddr, void* relocData) {
|
||||
numDrums = gSoundFontList[fontId].numDrums;
|
||||
numInstruments = gSoundFontList[fontId].numInstruments;
|
||||
|
||||
if ((fontDataPtrs[0] != 0) && (numDrums != 0)) {
|
||||
fontDataPtrs[0] += fontBaseAddr;
|
||||
Drum** relocatedDrums = memalloc(numDrums * sizeof(Drum*));
|
||||
Instrument** relocatedInstruments = memalloc((numInstruments + 1) * sizeof(Instrument*));
|
||||
|
||||
if ((fontDataPtrs[0] != 0) && (numDrums != 0)) {
|
||||
for (i = 0; i < numDrums; i++) {
|
||||
offset = *(*drumDataPtrs + i);
|
||||
if (offset != 0) {
|
||||
drum = offset += fontBaseAddr;
|
||||
*(*drumDataPtrs + i) = drum;
|
||||
|
||||
if (!drum->isRelocated) {
|
||||
AudioLoad_RelocateSample(&drum->tunedSample, fontBaseAddr, relocData);
|
||||
offset = (u32) drum->envelope;
|
||||
drum->envelope = offset + fontBaseAddr;
|
||||
drum->isRelocated = true;
|
||||
}
|
||||
relocatedDrums[i] = Audio_LoadDrum(BSWAP32(offset) + fontBaseAddr, 0, 0);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
for (i = 1; i <= numInstruments; i++) {
|
||||
if (fontDataPtrs[i] != 0) {
|
||||
Instrument* instrument = Audio_LoadInstrument(BSWAP32(fontDataPtrs[i]) + fontBaseAddr, 0);
|
||||
Instrument32Bit* base = fontBaseAddr + BSWAP32(fontDataPtrs[i]);
|
||||
|
||||
fontDataPtrs[i] += fontBaseAddr;
|
||||
|
||||
instrument = fontDataPtrs[i];
|
||||
if (!instrument->isRelocated) {
|
||||
if (instrument->normalRangeLo != 0) {
|
||||
AudioLoad_RelocateSample(&instrument->lowPitchTunedSample, fontBaseAddr, relocData);
|
||||
}
|
||||
AudioLoad_RelocateSample(&instrument->normalPitchTunedSample, fontBaseAddr, relocData);
|
||||
if (instrument->normalRangeHi != 0x7F) {
|
||||
AudioLoad_RelocateSample(&instrument->highPitchTunedSample, fontBaseAddr, relocData);
|
||||
}
|
||||
offset = (u32) instrument->envelope;
|
||||
instrument->envelope = offset + fontBaseAddr;
|
||||
instrument->isRelocated = true;
|
||||
if (instrument->normalRangeLo != 0) {
|
||||
AudioLoad_RelocateSample(&instrument->lowPitchTunedSample, &base->lowPitchTunedSample, fontBaseAddr, relocData);
|
||||
}
|
||||
AudioLoad_RelocateSample(&instrument->normalPitchTunedSample, &base->normalPitchTunedSample, fontBaseAddr, relocData);
|
||||
if (instrument->normalRangeHi != 0x7F) {
|
||||
AudioLoad_RelocateSample(&instrument->highPitchTunedSample, &base->highPitchTunedSample, fontBaseAddr, relocData);
|
||||
}
|
||||
|
||||
relocatedInstruments[i] = instrument;
|
||||
}
|
||||
}
|
||||
|
||||
gSoundFontList[fontId].drums = fontDataPtrs[0];
|
||||
gSoundFontList[fontId].instruments = (u32) &fontDataPtrs[1];
|
||||
gSoundFontList[fontId].drums = relocatedDrums;
|
||||
gSoundFontList[fontId].instruments = relocatedInstruments;
|
||||
}
|
||||
|
||||
void AudioLoad_SyncDma(uintptr_t devAddr, u8* ramAddr, u32 size, s32 medium) {
|
||||
size = ALIGN16(size);
|
||||
|
||||
osInvalDCache(ramAddr, size);
|
||||
|
||||
while (true) {
|
||||
@@ -738,7 +721,7 @@ s32 AudioLoad_Dma(OSIoMesg* mesg, u32 priority, s32 direction, uintptr_t devAddr
|
||||
mesg->devAddr = devAddr;
|
||||
mesg->size = size;
|
||||
|
||||
handle->transferInfo.cmdType = 2;
|
||||
// handle->transferInfo.cmdType = 2;
|
||||
// osEPiStartDma(handle, mesg, direction);
|
||||
memcpy(ramAddr, (void*) devAddr, size);
|
||||
|
||||
@@ -941,19 +924,17 @@ void AudioLoad_Init(void) {
|
||||
gSeqFontTable = gSeqFontTableInit;
|
||||
gNumSequences = gSequenceTable->base.numEntries;
|
||||
|
||||
AudioLoad_InitTable(gSequenceTable, LOAD_ASSET(gAudioSeq), gSequenceMedium);
|
||||
AudioLoad_InitTable(gSoundFontTable, LOAD_ASSET(gAudioBank), gSoundFontMedium);
|
||||
AudioLoad_InitTable(gSampleBankTable, LOAD_ASSET(gAudioTable), gSampleBankMedium);
|
||||
// AudioLoad_InitTable(gSequenceTable, LOAD_ASSET(gAudioSeq), gSequenceMedium);
|
||||
// AudioLoad_InitTable(gSoundFontTable, LOAD_ASSET(gAudioBank), gSoundFontMedium);
|
||||
// AudioLoad_InitTable(gSampleBankTable, LOAD_ASSET(gAudioTable), gSampleBankMedium);
|
||||
|
||||
numFonts = gSoundFontTable->base.numEntries;
|
||||
|
||||
gSoundFontList = AudioHeap_Alloc(&gInitPool, numFonts * sizeof(SoundFont));
|
||||
|
||||
for (i = 0; i < numFonts; i++) {
|
||||
gSoundFontList[i].sampleBankId1 = (gSoundFontTable->entries[i].shortData1 >> 8) & 0xFF;
|
||||
gSoundFontList[i].sampleBankId2 = gSoundFontTable->entries[i].shortData1 & 0xFF;
|
||||
gSoundFontList[i].numInstruments = (gSoundFontTable->entries[i].shortData2 >> 8) & 0xFF;
|
||||
gSoundFontList[i].numDrums = gSoundFontTable->entries[i].shortData2 & 0xFF;
|
||||
gSoundFontList[i] = Audio_LoadFont(gSoundFontTable->entries[i]);
|
||||
gFontLoadStatus[i] = 2;
|
||||
}
|
||||
|
||||
ramAddr = AudioHeap_Alloc(&gInitPool, gPermanentPoolSize);
|
||||
@@ -1277,35 +1258,40 @@ void AudioLoad_AsyncDmaUnkMedium(uintptr_t devAddr, u8* ramAddr, u32 size, s32 u
|
||||
static const char devstr50[] = "Error: Already wavetable is touched %x.\n";
|
||||
static const char devstr51[] = "Touch Warning: Length zero %x\n";
|
||||
|
||||
void AudioLoad_RelocateSample(TunedSample* tSample, u32 fontDataAddr, SampleBankRelocInfo* relocInfo) {
|
||||
void* reloc;
|
||||
Sample* sample;
|
||||
void AudioLoad_RelocateSample(TunedSample* tunedSample, TunedSample32Bit* tSample, uintptr_t fontDataAddr, SampleBankRelocInfo* relocInfo) {
|
||||
Sample32Bit* baseSample = fontDataAddr + BSWAP32(tSample->sample);
|
||||
|
||||
// "Error: Already wavetable is touched %x.\n";
|
||||
if ((u32) tSample->sample <= AUDIO_RELOCATED_ADDRESS_START) {
|
||||
sample = tSample->sample = reloc = (u32) tSample->sample + fontDataAddr;
|
||||
// "Touch Warning: Length zero %x\n";
|
||||
if ((sample->size != 0) && (sample->isRelocated != 1)) {
|
||||
sample->loop = reloc = (u32) sample->loop + fontDataAddr;
|
||||
sample->book = reloc = (u32) sample->book + fontDataAddr;
|
||||
switch (sample->medium) {
|
||||
case MEDIUM_RAM:
|
||||
sample->sampleAddr = reloc = sample->sampleAddr + relocInfo->baseAddr1;
|
||||
sample->medium = relocInfo->medium1;
|
||||
break;
|
||||
case MEDIUM_UNK:
|
||||
sample->sampleAddr = reloc = sample->sampleAddr + relocInfo->baseAddr2;
|
||||
sample->medium = relocInfo->medium2;
|
||||
break;
|
||||
case MEDIUM_CART:
|
||||
case MEDIUM_DISK_DRIVE:
|
||||
break;
|
||||
}
|
||||
// "Touch Warning: Length zero %x\n";
|
||||
if ((baseSample->size != 0) && (baseSample->isRelocated != 1)) {
|
||||
Sample* output = memalloc(sizeof(Sample));
|
||||
|
||||
sample->isRelocated = true;
|
||||
if (sample->unk_bit26 && (sample->medium != 0)) {
|
||||
gUsedSamples[gNumUsedSamples++] = sample;
|
||||
}
|
||||
output->loop = Audio_LoadLoop(fontDataAddr + BSWAP32(baseSample->loop));
|
||||
output->book = Audio_LoadBook(fontDataAddr + BSWAP32(baseSample->book));
|
||||
output->codec = baseSample->codec;
|
||||
output->medium = baseSample->medium;
|
||||
output->unk_bit26 = baseSample->unk_bit26;
|
||||
output->isRelocated = baseSample->isRelocated;
|
||||
output->size = baseSample->size;
|
||||
|
||||
output->isRelocated = 1;
|
||||
switch (baseSample->medium) {
|
||||
case MEDIUM_RAM:
|
||||
// baseSample->sampleAddr = Audio_LoadCopy(relocInfo->baseAddr1 + BSWAP32(baseSample->sampleAddr), BSWAP32(baseSample->size));
|
||||
baseSample->medium = relocInfo->medium1;
|
||||
break;
|
||||
case MEDIUM_UNK:
|
||||
// baseSample->sampleAddr = Audio_LoadCopy(relocInfo->baseAddr2 + BSWAP32(baseSample->sampleAddr), BSWAP32(baseSample->size));
|
||||
baseSample->medium = relocInfo->medium2;
|
||||
break;
|
||||
case MEDIUM_CART:
|
||||
case MEDIUM_DISK_DRIVE:
|
||||
output->sampleAddr = fontDataAddr + BSWAP32(baseSample->sampleAddr);
|
||||
break;
|
||||
}
|
||||
|
||||
baseSample->isRelocated = true;
|
||||
if (baseSample->unk_bit26 && (baseSample->medium != 0)) {
|
||||
gUsedSamples[gNumUsedSamples++] = output;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1316,7 +1302,7 @@ static const char devstr54[] = "Warning: Length zero %x\n";
|
||||
static const char devstr55[] = "Wave Load %d \n";
|
||||
static const char devstr56[] = "Total Bg Wave Load %d \n";
|
||||
|
||||
s32 AudioLoad_RelocateFontAndPreloadSamples(s32 fontId, u32 fontDataAddr, SampleBankRelocInfo* relocData, s32 isAsync) {
|
||||
s32 AudioLoad_RelocateFontAndPreloadSamples(s32 fontId, uintptr_t fontDataAddr, SampleBankRelocInfo* relocData, s32 isAsync) {
|
||||
s32 i;
|
||||
Sample* sample;
|
||||
u8* sampleRamAddr;
|
||||
@@ -1534,4 +1520,4 @@ s32 AudioLoad_GetSamplesForFont(s32 fontId, Sample** sampleSet) {
|
||||
}
|
||||
|
||||
return numLoaded;
|
||||
}
|
||||
}
|
||||
@@ -248,10 +248,6 @@ void func_80011FA8(void) {
|
||||
|
||||
playbackState = ¬e->playbackState;
|
||||
if ((playbackState->parentLayer != NO_LAYER)) {
|
||||
if ((u32) playbackState->parentLayer < 0x7FFFFFFF) {
|
||||
continue;
|
||||
}
|
||||
|
||||
if ((note != playbackState->parentLayer->note) && (playbackState->unk_04 == 0)) {
|
||||
playbackState->adsr.action.asByte |= 0x10;
|
||||
playbackState->adsr.fadeOutVel = gAudioBufferParams.ticksPerUpdateInv;
|
||||
@@ -284,7 +280,6 @@ void func_80011FA8(void) {
|
||||
block_21:
|
||||
|
||||
if (playbackState->priority != 0) {
|
||||
if (1) {}
|
||||
noteSub = ¬e->noteSubEu;
|
||||
if ((playbackState->unk_04 > 0) || noteSub->bitField0.finished) {
|
||||
if ((playbackState->adsr.state == 0) || noteSub->bitField0.finished) {
|
||||
|
||||
@@ -268,7 +268,7 @@ void* func_800145FC(AudioListItem* list) {
|
||||
list->prev = item->prev;
|
||||
item->prev = NULL;
|
||||
list->u.count--;
|
||||
return (void*) item->u.count;
|
||||
return (void*) item->u.value;
|
||||
}
|
||||
|
||||
void func_8001463C(void) {
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
#include "sys.h"
|
||||
#include "sf64audio_provisional.h"
|
||||
#include "audio/mixer.h"
|
||||
#include "endianness.h"
|
||||
|
||||
s32 D_80145D40; // unused
|
||||
|
||||
@@ -745,8 +746,8 @@ Acmd* func_8000A25C(s16* aiBuf, s32 aiBufLen, Acmd* aList, s32 updateIndex) {
|
||||
u8 sp84[0x3C];
|
||||
NoteSubEu* temp_v0;
|
||||
s16 var_s2;
|
||||
s16 i;
|
||||
s32 j;
|
||||
s16 i = 0;
|
||||
s32 j = 0;
|
||||
|
||||
var_s2 = 0;
|
||||
if (gNumSynthReverbs == 0) {
|
||||
@@ -832,7 +833,7 @@ Acmd* func_8000A700(s32 noteIndex, NoteSubEu* noteSub, NoteSynthesisState* synth
|
||||
s32 padD8;
|
||||
s32 padD4;
|
||||
s32 padD0;
|
||||
u32 sampleAddr; // spCC
|
||||
uintptr_t sampleAddr; // spCC
|
||||
s32 padC8;
|
||||
s32 samplesLenAdjusted; // spC4
|
||||
s32 nAdpcmSamplesProcessed; // spC0
|
||||
@@ -1011,7 +1012,7 @@ Acmd* func_8000A700(s32 noteIndex, NoteSubEu* noteSub, NoteSynthesisState* synth
|
||||
flags, &synthState->sampleDmaIndex, bookSample->medium);
|
||||
}
|
||||
// if (1){}
|
||||
sampleDataStartPad = (u32) sampleData & 0xF;
|
||||
sampleDataStartPad = (uintptr_t) sampleData & 0xF;
|
||||
aLoadBuffer(aList++, OS_K0_TO_PHYSICAL(sampleData - sampleDataStartPad), addr, aligned);
|
||||
} else {
|
||||
nSamplesToDecode = 0;
|
||||
|
||||
+30
-40
@@ -42,68 +42,58 @@ static const char devstr14[] = "Error : Queue is not empty ( %x ) \n";
|
||||
void AudioThread_CreateNextAudioBuffer(s16 *samples, u32 num_samples) {
|
||||
static s32 gMaxAbiCmdCnt = 128;
|
||||
static SPTask* gWaitingAudioTask = NULL;
|
||||
u32 sp54;
|
||||
s32 sp50;
|
||||
s32 sp4C;
|
||||
s32 pad48;
|
||||
OSTask_t* task;
|
||||
u16* sp40;
|
||||
s32 pad3C;
|
||||
OSMesg sp38;
|
||||
OSMesg sp34;
|
||||
s32 pad30;
|
||||
s32 abiCmdCount;
|
||||
u32 specId;
|
||||
OSMesg msg;
|
||||
|
||||
gAudioTaskCountQ++;
|
||||
if ((gAudioTaskCountQ % gAudioBufferParams.count) != 0) {
|
||||
return;
|
||||
return gWaitingAudioTask;
|
||||
}
|
||||
osSendMesg(gAudioTaskStartQueue, OS_MESG_32(gAudioTaskCountQ), 0);
|
||||
osSendMesg(gAudioTaskStartQueue, OS_MESG_32(gAudioTaskCountQ), OS_MESG_NOBLOCK);
|
||||
gAudioTaskIndexQ ^= 1;
|
||||
gCurAiBuffIndex++;
|
||||
gCurAiBuffIndex %= 3;
|
||||
sp4C = (gCurAiBuffIndex + 1) % 3;
|
||||
sp54 = osAiGetLength() >> 2;
|
||||
if ((gAudioResetTimer < 16) && (gAiBuffLengths[sp4C] != 0)) {
|
||||
osAiSetNextBuffer(gAiBuffers[sp4C], gAiBuffLengths[sp4C] * 4);
|
||||
}
|
||||
if (gCurAudioFrameDmaCount && gCurAudioFrameDmaCount) {}
|
||||
|
||||
gCurAudioFrameDmaCount = 0;
|
||||
AudioLoad_DecreaseSampleDmaTtls();
|
||||
AudioLoad_ProcessLoads(gAudioResetStep);
|
||||
if (osRecvMesg(&gAudioTaskMesgQueue, &sp38, 0) != -1) {
|
||||
// AudioLoad_ProcessLoads(gAudioResetStep);
|
||||
|
||||
if (MQ_GET_MESG(gAudioSpecQueue, &specId)) {
|
||||
if (gAudioResetStep == 0) {
|
||||
gAudioResetStep = 5;
|
||||
}
|
||||
gAudioSpecId = sp38.data32;
|
||||
gAudioSpecId = specId;
|
||||
}
|
||||
|
||||
if ((gAudioResetStep != 0) && (AudioHeap_ResetStep() == 0)) {
|
||||
if (gAudioResetStep == 0) {
|
||||
osSendMesg(gAudioResetQueue, OS_MESG_32((s32) gAudioSpecId), 0);
|
||||
osSendMesg(gAudioResetQueue, OS_MESG_32((s32) gAudioSpecId), OS_MESG_NOBLOCK);
|
||||
}
|
||||
gWaitingAudioTask = NULL;
|
||||
return;
|
||||
return NULL;
|
||||
}
|
||||
|
||||
if (gAudioResetTimer > 16) {
|
||||
return;
|
||||
return NULL;
|
||||
}
|
||||
if (gAudioResetTimer != 0) {
|
||||
gAudioResetTimer++;
|
||||
}
|
||||
|
||||
gAudioCurTask = &gAudioRspTasks[gAudioTaskIndexQ];
|
||||
gCurAbiCmdBuffer = gAbiCmdBuffs[gAudioTaskIndexQ];
|
||||
sp4C = gCurAiBuffIndex;
|
||||
sp40 = gAiBuffers[sp4C];
|
||||
gAiBuffLengths[sp4C] = num_samples;
|
||||
if (gAiBuffLengths[sp4C] < gAudioBufferParams.minAiBufferLength) {
|
||||
gAiBuffLengths[sp4C] = gAudioBufferParams.minAiBufferLength;
|
||||
|
||||
while (MQ_GET_MESG(gThreadCmdProcQueue, &msg)) {
|
||||
AudioThread_ProcessCmds(msg.data32);
|
||||
}
|
||||
if (gAiBuffLengths[sp4C] > gAudioBufferParams.maxAiBufferLength) {
|
||||
gAiBuffLengths[sp4C] = gAudioBufferParams.maxAiBufferLength;
|
||||
}
|
||||
while (osRecvMesg(gThreadCmdProcQueue, &sp34, 0) != -1) {
|
||||
AudioThread_ProcessCmds(sp34.data32);
|
||||
}
|
||||
gCurAbiCmdBuffer = func_80009B64(gCurAbiCmdBuffer, &sp50, samples, num_samples);
|
||||
|
||||
gCurAbiCmdBuffer = func_80009B64(gCurAbiCmdBuffer, &abiCmdCount, samples, num_samples);
|
||||
gAudioRandom = osGetCount() * (gAudioRandom + gAudioTaskCountQ);
|
||||
|
||||
gAudioCurTask->msg = OS_MESG_PTR(NULL);
|
||||
|
||||
if (gMaxAbiCmdCnt < abiCmdCount) {
|
||||
gMaxAbiCmdCnt = abiCmdCount;
|
||||
}
|
||||
}
|
||||
|
||||
SPTask* AudioThread_CreateTask() {
|
||||
@@ -233,7 +223,7 @@ void AudioThread_ProcessGlobalCmd(AudioCmd* cmd) {
|
||||
case AUDIOCMD_OP_GLOBAL_INIT_SEQPLAYER:
|
||||
case AUDIOCMD_OP_GLOBAL_INIT_SEQPLAYER_ALT:
|
||||
AudioLoad_SyncInitSeqPlayer(cmd->arg0, cmd->arg1, cmd->arg2);
|
||||
AudioThread_SetFadeInTimer(cmd->arg0, (s32) cmd->data);
|
||||
AudioThread_SetFadeInTimer(cmd->arg0, (uintptr_t) cmd->data);
|
||||
break;
|
||||
case AUDIOCMD_OP_GLOBAL_DISABLE_SEQPLAYER:
|
||||
if (gSeqPlayers[cmd->arg0].enabled) {
|
||||
@@ -355,7 +345,7 @@ void AudioThread_ScheduleProcessCmds(void) {
|
||||
D_800C7C70 = (u8) (gThreadCmdWritePos - gThreadCmdReadPos + 0x100);
|
||||
}
|
||||
msg = (((gThreadCmdReadPos & 0xFF) << 8) | (gThreadCmdWritePos & 0xFF));
|
||||
osSendMesg(gThreadCmdProcQueue, OS_MESG_32(msg), OS_MESG_NOBLOCK);
|
||||
osSendMesg32(gThreadCmdProcQueue, msg, OS_MESG_NOBLOCK);
|
||||
gThreadCmdReadPos = gThreadCmdWritePos;
|
||||
}
|
||||
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
#include "sys.h"
|
||||
#include "endianness.h"
|
||||
#include "sf64audio_provisional.h"
|
||||
|
||||
f32 gBendPitchOneOctaveFrequencies[] = {
|
||||
@@ -197,6 +198,7 @@ u8 gDefaultShortNoteVelocityTable[] = {
|
||||
u8 gDefaultShortNoteGateTimeTable[] = {
|
||||
229, 203, 177, 151, 139, 126, 113, 100, 87, 74, 61, 48, 36, 23, 10, 0,
|
||||
};
|
||||
|
||||
EnvelopePoint gDefaultEnvelope[] = {
|
||||
{ 4, 32000 },
|
||||
{ 1000, 32000 },
|
||||
|
||||
Reference in New Issue
Block a user