1
0
Fork 0
mirror of https://github.com/zeldaret/oot.git synced 2025-07-04 15:04:31 +00:00

Match some audio functions (#896)

* cleanups

* Improve Audio_SequencePlayerProcessSequence

* cleanup

* labeling

* progress on func_800E5000

* func_800F6268

* func_800ECDF8

* Improve func_800F2464

* reorder variables

* labelling

* non-equivalent func_800EEA50

* minor doc

* func_800E6590

* minor doc

* Reformat abi.h

* Very slight improvements

* func_800DC384

* func_800E1618

* formatting

Co-authored-by: zelda2774 <zelda2774@invalid>
This commit is contained in:
zelda2774 2021-08-12 21:37:37 +02:00 committed by GitHub
parent 1b1487a504
commit a0d2cceeca
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
23 changed files with 1321 additions and 1813 deletions

View file

@ -45,8 +45,8 @@ void Audio_ResetLoadStatus(void) {
}
for (i = 0; i < 0x80; i++) {
if (gAudioContext.seqLoadstatus[i] != 5) {
gAudioContext.seqLoadstatus[i] = 0;
if (gAudioContext.seqLoadStatus[i] != 5) {
gAudioContext.seqLoadStatus[i] = 0;
}
}
}
@ -207,7 +207,7 @@ void func_800DE4B0(s32 poolIdx) {
switch (poolIdx) {
case 0:
loadedPool = &gAudioContext.seqLoadedPool;
table = gAudioContext.seqLoadstatus;
table = gAudioContext.seqLoadStatus;
break;
case 1:
loadedPool = &gAudioContext.bankLoadedPool;
@ -304,7 +304,7 @@ void* Audio_AllocBankOrSeq(s32 poolIdx, s32 size, s32 arg2, s32 id) {
switch (poolIdx) {
case 0:
loadedPool = &gAudioContext.seqLoadedPool;
table = gAudioContext.seqLoadstatus;
table = gAudioContext.seqLoadStatus;
break;
case 1:
loadedPool = &gAudioContext.bankLoadedPool;

View file

@ -74,19 +74,19 @@ void func_800E11F0(void) {
#pragma GLOBAL_ASM("asm/non_matchings/code/audio_load/func_800E12DC.s")
#ifdef NON_MATCHING
void func_800E1618(s32 arg0) {
SampleDmaReq* temp_s0;
s32 i;
s32 t2;
s32 j;
gAudioContext.unk_288C = gAudioContext.unk_2874;
gAudioContext.sampleDmaReqs =
Audio_Alloc(&gAudioContext.notesAndBuffersPool,
(gAudioContext.maxSimultaneousNotes * 0x40) * gAudioContext.audioBufferParameters.presetUnk4);
t2 = gAudioContext.maxSimultaneousNotes * 3 * gAudioContext.audioBufferParameters.presetUnk4;
4 * gAudioContext.maxSimultaneousNotes * sizeof(SampleDmaReq) * gAudioContext.audioBufferParameters.presetUnk4);
t2 = 3 * gAudioContext.maxSimultaneousNotes * gAudioContext.audioBufferParameters.presetUnk4;
for (i = 0; i < t2; i++) {
SampleDmaReq* temp_s0 = &gAudioContext.sampleDmaReqs[gAudioContext.sampleDmaReqCnt];
temp_s0 = &gAudioContext.sampleDmaReqs[gAudioContext.sampleDmaReqCnt];
temp_s0->ramAddr = func_800DE2B0(&gAudioContext.notesAndBuffersPool, gAudioContext.unk_288C);
if (temp_s0->ramAddr == NULL) {
break;
@ -115,8 +115,8 @@ void func_800E1618(s32 arg0) {
gAudioContext.unk_2624 = gAudioContext.sampleDmaReqCnt;
gAudioContext.unk_288C = gAudioContext.unk_2878;
for (i = 0; i < gAudioContext.maxSimultaneousNotes; i++) {
SampleDmaReq* temp_s0 = &gAudioContext.sampleDmaReqs[gAudioContext.sampleDmaReqCnt];
for (j = 0; j < gAudioContext.maxSimultaneousNotes; j++) {
temp_s0 = &gAudioContext.sampleDmaReqs[gAudioContext.sampleDmaReqCnt];
temp_s0->ramAddr = func_800DE2B0(&gAudioContext.notesAndBuffersPool, gAudioContext.unk_288C);
if (temp_s0->ramAddr == NULL) {
break;
@ -132,9 +132,8 @@ void func_800E1618(s32 arg0) {
}
for (i = gAudioContext.unk_2624; i < gAudioContext.sampleDmaReqCnt; i++) {
SampleDmaReq* temp_s0 = &gAudioContext.sampleDmaReqs[i + gAudioContext.unk_2624];
gAudioContext.unk_272C[i - gAudioContext.unk_2624] = gAudioContext.unk_2624;
temp_s0->unk_0D = i - gAudioContext.unk_2624;
gAudioContext.unk_272C[i - gAudioContext.unk_2624] = i;
gAudioContext.sampleDmaReqs[i].unk_0D = i - gAudioContext.unk_2624;
}
for (i = gAudioContext.sampleDmaReqCnt; i < 0x100; i++) {
@ -144,9 +143,6 @@ void func_800E1618(s32 arg0) {
gAudioContext.unk_282D = 0;
gAudioContext.unk_282F = gAudioContext.sampleDmaReqCnt - gAudioContext.unk_2624;
}
#else
#pragma GLOBAL_ASM("asm/non_matchings/code/audio_load/func_800E1618.s")
#endif
s32 Audio_IsBankLoadComplete(s32 bankId) {
if (bankId == 0xFF) {
@ -162,10 +158,10 @@ s32 Audio_IsBankLoadComplete(s32 bankId) {
s32 Audio_IsSeqLoadComplete(s32 seqId) {
if (seqId == 0xFF) {
return 1;
} else if (gAudioContext.seqLoadstatus[seqId] >= 2) {
return 1;
} else if (gAudioContext.seqLoadstatus[Audio_GetTableIndex(SEQUENCE_TABLE, seqId)] >= 2) {
return true;
} else if (gAudioContext.seqLoadStatus[seqId] >= 2) {
return true;
} else if (gAudioContext.seqLoadStatus[Audio_GetTableIndex(SEQUENCE_TABLE, seqId)] >= 2) {
return true;
} else {
return false;
@ -191,8 +187,8 @@ void Audio_SetBankLoadStatus(s32 bankId, s32 status) {
}
void Audio_SetSeqLoadStatus(s32 seqId, s32 status) {
if ((seqId != 0xFF) && (gAudioContext.seqLoadstatus[seqId] != 5)) {
gAudioContext.seqLoadstatus[seqId] = status;
if ((seqId != 0xFF) && (gAudioContext.seqLoadStatus[seqId] != 5)) {
gAudioContext.seqLoadStatus[seqId] = status;
}
}
@ -208,7 +204,7 @@ void func_800E1A78(s32 arg0, s32 arg1) {
}
}
void Aduio_SetAudtabLoadstatus(s32 tabId, s32 status) {
void Audio_SetAudtabLoadStatus(s32 tabId, s32 status) {
if ((tabId != 0xFF) && (gAudioContext.audioTableLoadStatus[tabId] != 5)) {
gAudioContext.audioTableLoadStatus[tabId] = status;
}
@ -451,7 +447,7 @@ u8* func_800E22C4(s32 seqId) {
s32 pad;
s32 sp20;
if (gAudioContext.seqLoadstatus[Audio_GetTableIndex(0, seqId)] == 1) {
if (gAudioContext.seqLoadStatus[Audio_GetTableIndex(0, seqId)] == 1) {
return NULL;
}
@ -472,7 +468,7 @@ u32 func_800E2338(u32 arg0, u32* arg1, s32 arg2) {
audioTable = Audio_GetLoadTable(2);
if (temp_v0 = func_800E27A4(2, temp_s0), temp_v0 != NULL) {
if (gAudioContext.audioTableLoadStatus[temp_s0] != 1) {
Aduio_SetAudtabLoadstatus(temp_s0, 2);
Audio_SetAudtabLoadStatus(temp_s0, 2);
}
*arg1 = 0;
return temp_v0;
@ -829,7 +825,7 @@ void* Audio_AsyncLoadInner(s32 tableType, s32 arg1, s32 arg2, s32 arg3, OSMesgQu
sp34 = Audio_GetTableIndex(tableType, arg1);
switch (tableType) {
case SEQUENCE_TABLE:
if (gAudioContext.seqLoadstatus[sp34] == 1) {
if (gAudioContext.seqLoadStatus[sp34] == 1) {
return NULL;
}
break;
@ -991,9 +987,9 @@ void Audio_ContextInit(void* heap, u32 heapSize) {
gAudioContext.rspTask[0].task.t.data_size = 0;
gAudioContext.rspTask[1].task.t.data_size = 0;
osCreateMesgQueue(&gAudioContext.unk_25E8, &gAudioContext.unk_2600, 1);
osCreateMesgQueue(&gAudioContext.unk_1ED0, &gAudioContext.unk_1EE8, 0x40);
osCreateMesgQueue(&gAudioContext.unk_1E20, &gAudioContext.unk_1E38, 0x10);
osCreateMesgQueue(&gAudioContext.unk_1E78, &gAudioContext.unk_1E90, 0x10);
osCreateMesgQueue(&gAudioContext.unk_1ED0, gAudioContext.unk_1EE8, 0x40);
osCreateMesgQueue(&gAudioContext.unk_1E20, gAudioContext.unk_1E38, 0x10);
osCreateMesgQueue(&gAudioContext.unk_1E78, gAudioContext.unk_1E90, 0x10);
gAudioContext.sampleIoReqIdx = 0;
gAudioContext.sampleDmaReqCnt = 0;
gAudioContext.cartHandle = osCartRomInit();

View file

@ -121,7 +121,7 @@ void Audio_SequenceChannelInit(SequenceChannel* seqChannel) {
seqChannel->largeNotes = false;
seqChannel->bookOffset = 0;
seqChannel->reverbBits.asByte = 0;
seqChannel->changes.asByte = 0xff;
seqChannel->changes.asByte = 0xFF;
seqChannel->scriptState.depth = 0;
seqChannel->newPan = 0x40;
seqChannel->panChannelWeight = 0x80;
@ -135,7 +135,7 @@ void Audio_SequenceChannelInit(SequenceChannel* seqChannel) {
seqChannel->someOtherPriority = 1;
seqChannel->delay = 0;
seqChannel->adsr.envelope = gDefaultEnvelope;
seqChannel->adsr.releaseRate = 0xf0;
seqChannel->adsr.releaseRate = 0xF0;
seqChannel->adsr.sustain = 0;
seqChannel->vibratoRateTarget = 0x800;
seqChannel->vibratoRateStart = 0x800;
@ -200,7 +200,7 @@ s32 Audio_SeqChannelSetLayer(SequenceChannel* seqChannel, s32 layerIdx) {
layer->freqScale = 1.0f;
layer->unk_34 = 1.0f;
layer->velocitySquare2 = 0.0f;
layer->instOrWave = 0xff;
layer->instOrWave = 0xFF;
return 0;
}
@ -287,7 +287,7 @@ void Audio_SequencePlayerDisableAsFinished(SequencePlayer* seqPlayer) {
}
void Audio_SequencePlayerDisable(SequencePlayer* seqPlayer) {
Audio_SequencePlayerDisableChannels(seqPlayer, 0xffff);
Audio_SequencePlayerDisableChannels(seqPlayer, 0xFFFF);
Audio_NotePoolClear(&seqPlayer->notePool);
if (!seqPlayer->enabled) {
return;
@ -363,7 +363,7 @@ s16 Audio_M64ReadS16(M64ScriptState* state) {
u16 Audio_M64ReadCompressedU16(M64ScriptState* state) {
u16 ret = *(state->pc++);
if (ret & 0x80) {
ret = (ret << 8) & 0x7f00;
ret = (ret << 8) & 0x7F00;
ret = *(state->pc++) | ret;
}
return ret;
@ -1640,9 +1640,9 @@ void Audio_SequencePlayerProcessSequence(SequencePlayer* seqPlayer) {
case 0xCE:
command = Audio_M64ReadU8(seqScript);
if (command == 0) {
seqScript->value = gAudioContext.audioRandom / 4;
seqScript->value = (gAudioContext.audioRandom >> 2) & 0xFF;
} else {
seqScript->value = (gAudioContext.audioRandom / 4) % command;
seqScript->value = (gAudioContext.audioRandom >> 2) % command;
}
break;
case 0xCD: {

View file

@ -12,6 +12,8 @@ Acmd* func_800DDB64(Acmd* cmd, NoteSubEu* noteSubEu, NoteSynthesisState* synthSt
Acmd* func_800DD6CC(Acmd* cmd, NoteSubEu* noteSubEu, NoteSynthesisState* synthState, s32 aiBufLen, u16, s32, s32);
Acmd* func_800DD62C(Acmd* cmd, NoteSynthesisState* synthState, s32 count, u16 pitch, u16 inpDmem, s32 resampleFlags);
extern s16 D_8012FBAA[];
// 4 nops, part of ucode_disas?
#pragma GLOBAL_ASM("asm/non_matchings/code/audio_synthesis/pad_800DACB0.s")
void AudioSynth_InitNextRingBuf(s32 chunkSize, s32 bufIdx, s32 reverbIdx) {
@ -512,29 +514,26 @@ Acmd* func_800DC2DC(Acmd* cmd, SynthesisReverb* reverb, s16 bufIdx) {
return cmd;
}
#ifdef NON_MATCHING
Acmd* func_800DC384(s16* aiBuf, s32 aiBufLen, Acmd* cmd, s32 updateIdx) {
NoteSubEu* phi_v0;
u8 sp9C[88];
u8 sp9C[0x5C];
s16 phi_s2;
s16 phi_s4;
s32 t;
s32 useReverb;
SynthesisReverb* temp_t8;
u8 t2;
s32 useReverb;
s32 t;
s32 i;
NoteSubEu* phi_v0;
NoteSubEu* phi_v0_2;
s32 unk14;
t = gAudioContext.maxSimultaneousNotes * updateIdx;
phi_s2 = 0;
if (gAudioContext.numSynthesisReverbs == 0) {
for (i = 0; i < gAudioContext.maxSimultaneousNotes; i++) {
phi_v0 = &gAudioContext.noteSubsEu[t + i];
if (phi_v0->bitField0.s.enabled) {
if (gAudioContext.noteSubsEu[t + i].bitField0.s.enabled) {
sp9C[phi_s2++] = i;
}
}
i = 0;
} else {
for (phi_s4 = 0; phi_s4 < gAudioContext.numSynthesisReverbs; phi_s4++) {
for (i = 0; i < gAudioContext.maxSimultaneousNotes; i++) {
@ -551,10 +550,10 @@ Acmd* func_800DC384(s16* aiBuf, s32 aiBufLen, Acmd* cmd, s32 updateIdx) {
sp9C[phi_s2++] = i;
}
}
i = 0;
}
aClearBuffer(cmd++, 0x940, 0x340);
i = 0;
for (phi_s4 = 0; phi_s4 < gAudioContext.numSynthesisReverbs; phi_s4++) {
temp_t8 = &gAudioContext.synthesisReverbs[phi_s4];
useReverb = temp_t8->useReverb;
@ -582,10 +581,10 @@ Acmd* func_800DC384(s16* aiBuf, s32 aiBufLen, Acmd* cmd, s32 updateIdx) {
}
while (i < phi_s2) {
phi_v0 = &gAudioContext.noteSubsEu[sp9C[i] + t];
if (phi_v0->bitField1.s.reverbIndex == phi_s4) {
cmd = func_800DC910(sp9C[i], phi_v0, &gAudioContext.notes[sp9C[i]].synthesisState, aiBuf, aiBufLen, cmd,
updateIdx);
phi_v0_2 = &gAudioContext.noteSubsEu[sp9C[i] + t];
if (phi_v0_2->bitField1.s.reverbIndex == phi_s4) {
cmd = func_800DC910(sp9C[i], phi_v0_2, &gAudioContext.notes[sp9C[i]].synthesisState, aiBuf, aiBufLen,
cmd, updateIdx);
} else {
break;
}
@ -619,9 +618,6 @@ Acmd* func_800DC384(s16* aiBuf, s32 aiBufLen, Acmd* cmd, s32 updateIdx) {
return cmd;
}
#else
#pragma GLOBAL_ASM("asm/non_matchings/code/audio_synthesis/func_800DC384.s")
#endif
#ifdef NON_EQUIVALENT
Acmd* func_800DC910(s32 noteIdx, NoteSubEu* noteSubEu, NoteSynthesisState* synthState, s16* aiBuf, s32 aiBufLen,
@ -1151,18 +1147,18 @@ Acmd* func_800DDB64(Acmd* cmd, NoteSubEu* noteSubEu, NoteSynthesisState* synthSt
switch (arg5) {
case 1:
phi_t0 = 0x940;
phi_v1 = noteSubEu->headsetPanRight;
phi_v0 = synthState->prevHeadsetPanRight;
synthState->prevHeadsetPanLeft = 0;
synthState->prevHeadsetPanRight = noteSubEu->headsetPanRight;
phi_t0 = 0x940;
synthState->prevHeadsetPanRight = phi_v1;
break;
case 2:
phi_t0 = 0xAE0;
phi_v1 = noteSubEu->headsetPanLeft;
phi_v0 = synthState->prevHeadsetPanLeft;
synthState->prevHeadsetPanLeft = noteSubEu->headsetPanLeft;
synthState->prevHeadsetPanLeft = phi_v1;
synthState->prevHeadsetPanRight = 0;
phi_t0 = 0xAE0;
break;
default:
return cmd;
@ -1170,26 +1166,26 @@ Acmd* func_800DDB64(Acmd* cmd, NoteSubEu* noteSubEu, NoteSynthesisState* synthSt
if (arg4 != 1) {
if (phi_v0 != phi_v1) {
aSetBuffer(cmd++, 0, 0x5C0, 0x3C0, (arg3 + phi_v1) - phi_v0);
aResampleZOH(cmd++, (u16)((((arg3 << 0xF) / 2) - 1) / ((((arg3 + phi_v1) - phi_v0) - 2) / 2)), 0);
aSetBuffer(cmd++, 0, 0x5C0, 0x3C0, arg3 + phi_v1 - phi_v0);
aResampleZOH(cmd++, (u16)((((arg3 << 0xF) / 2) - 1) / ((arg3 + phi_v1 - phi_v0 - 2) / 2)), 0);
} else {
aDMEMMove(cmd++, 0x5C0, 0x3C0, arg3);
}
if (phi_v0 != 0) {
aLoadBuffer(cmd++, &synthState->synthesisBuffers->panResampleState[0x8], 0x5C0, ALIGN16(phi_v0));
aDMEMMove(cmd++, 0x3C0, phi_v0 + 0x5C0, (arg3 + phi_v1) - phi_v0);
aDMEMMove(cmd++, 0x3C0, 0x5C0 + phi_v0, arg3 + phi_v1 - phi_v0);
} else {
aDMEMMove(cmd++, 0x3C0, 0x5C0, (arg3 + phi_v1));
aDMEMMove(cmd++, 0x3C0, 0x5C0, arg3 + phi_v1);
}
} else {
aDMEMMove(cmd++, 0x5C0, 0x3C0, arg3);
aClearBuffer(cmd++, 0x5C0, phi_v1);
aDMEMMove(cmd++, 0x3C0, phi_v1 + 0x5C0, arg3);
aDMEMMove(cmd++, 0x3C0, 0x5C0 + phi_v1, arg3);
}
if (phi_v1 != 0) {
aSaveBuffer(cmd++, arg3 + 0x5C0, &synthState->synthesisBuffers->panResampleState[0x8], ALIGN16(phi_v1));
aSaveBuffer(cmd++, 0x5C0 + arg3, &synthState->synthesisBuffers->panResampleState[0x8], ALIGN16(phi_v1));
}
aAddMixer(cmd++, ((arg3 + 0x3F) & ~0x3F), 0x5C0, phi_t0, 0x7FFF);
return cmd;

View file

@ -1,5 +1,8 @@
#include "global.h"
#define SAMPLES_TO_OVERPRODUCE 0x10
#define EXTRA_BUFFERED_AI_SAMPLES_TARGET 0x80
typedef enum {
CHAN_UPD_UNK_0, // 0
CHAN_UPD_VOL_SCALE, // 1
@ -32,90 +35,50 @@ AudioTask* func_800E4FE0(void) {
return func_800E5000();
}
u32 D_801304E0 = 0x80;
AudioTask* D_801304E4 = NULL;
extern u64 rspAspMainDataStart[];
extern u64 rspAspMainDataEnd[];
extern u8 D_80155C70[];
#ifdef NON_EQUIVALENT
// haven't verified Equivalency yet.
#ifdef NON_MATCHING
AudioTask* func_800E5000(void) {
u32 sp6C;
static s32 sMaxAbiCmdCnt = 0x80;
static AudioTask* sWaitingAudioTask = NULL;
u32 samplesRemainingInAi;
s32 abiCmdCnt;
s32 pad;
s32 j;
s32 sp5C;
s16* sp58;
s16* currAiBuffer; // sp58
OSTask_t* task;
s32 index;
u32 sp4C;
s32 sp48;
void* sp3C;
void* sp34;
OSTask_t* temp_v1_10;
OSMesgQueue* temp_s1;
s16 temp_a0_2;
s16 temp_v0_2;
s16 temp_v1;
s16 temp_v1_2;
s16 temp_v1_9;
s32 temp_a0;
s32 temp_a3;
s32 temp_a3_2;
s32 temp_hi;
s32 temp_s0;
s32 temp_s0_2;
s32 temp_s0_3;
s32 temp_s0_4;
s32 temp_s0_5;
s32 temp_t4;
s32 temp_t6;
s32 temp_t7;
s32 temp_v1_6;
s32 temp_v1_7;
s32 temp_v1_8;
u32 temp_t3;
u32 temp_t4_2;
void* temp_t0;
void* temp_v1_3;
void* temp_v1_4;
void* temp_v1_5;
s16 phi_v1;
s32 phi_a0;
void* phi_v1_2;
s32 phi_s0;
s32 phi_v1_3;
void* phi_v1_4;
s32 phi_s0_2;
s32 phi_v1_5;
s32 phi_s0_3;
s32 phi_s0_4;
void* phi_v1_6;
s32 phi_s0_5;
s32 i;
gAudioContext.totalTaskCnt++;
if (gAudioContext.totalTaskCnt % (gAudioContext.audioBufferParameters.presetUnk4) != 0) {
if (D_801755D0 != 0) {
if (D_801755D0 != NULL) {
D_801755D0();
}
if (gAudioContext.audioBufferParameters.presetUnk4 ==
((gAudioContext.totalTaskCnt % (gAudioContext.audioBufferParameters.presetUnk4)) + 1)) {
return D_801304E4;
if ((gAudioContext.totalTaskCnt % gAudioContext.audioBufferParameters.presetUnk4) + 1 ==
gAudioContext.audioBufferParameters.presetUnk4) {
return sWaitingAudioTask;
} else {
return NULL;
}
}
osSendMesg(gAudioContext.taskStartQueueP, gAudioContext.totalTaskCnt, 0);
temp_t4 = gAudioContext.curAIBufIdx + 1;
temp_t6 = (gAudioContext.curAIBufIdx + 1) % 3;
osSendMesg(gAudioContext.taskStartQueueP, gAudioContext.totalTaskCnt, OS_MESG_NOBLOCK);
gAudioContext.rspTaskIdx ^= 1;
gAudioContext.curAIBufIdx++;
gAudioContext.curAIBufIdx %= 3;
temp_hi = (gAudioContext.curAIBufIdx - 2 + 3) % 3;
sp6C = osAiGetLength() / 4;
index = (gAudioContext.curAIBufIdx - 2 + 3) % 3;
samplesRemainingInAi = osAiGetLength() / 4;
if (gAudioContext.resetTimer < 16) {
if (gAudioContext.aiBufLengths[temp_hi] != 0) {
sp34 = &gAudioContext + (temp_hi * 4);
sp3C = &gAudioContext + (temp_hi * 2);
osAiSetNextBuffer(gAudioContext.aiBuffers[temp_hi], gAudioContext.aiBufLengths[temp_hi] * 4);
if (gAudioContext.aiBufLengths[index] != 0) {
// &gAudioContext + index*{2,4} should be saved across here
osAiSetNextBuffer(gAudioContext.aiBuffers[index], gAudioContext.aiBufLengths[index] * 4);
}
}
@ -125,105 +88,124 @@ AudioTask* func_800E5000(void) {
sp5C = gAudioContext.sampleIoReqIdx;
for (i = 0; i < gAudioContext.sampleIoReqIdx; i++) {
if (osRecvMesg(&gAudioContext.unk_1ED0, NULL, 0) == 0) {
if (osRecvMesg(&gAudioContext.unk_1ED0, NULL, OS_MESG_NOBLOCK) == 0) {
sp5C--;
}
}
if (sp5C != 0) {
for (i = 0; i < sp5C; i++) {
osRecvMesg(&gAudioContext.unk_1ED0, NULL, 1);
osRecvMesg(&gAudioContext.unk_1ED0, NULL, OS_MESG_BLOCK);
}
}
sp48 = gAudioContext.unk_1ED0.validCount;
if (gAudioContext.unk_1ED0.validCount != 0) {
if (sp48 != 0) {
for (i = 0; i < sp48; i++) {
osRecvMesg(&gAudioContext.unk_1ED0, NULL, 0);
osRecvMesg(&gAudioContext.unk_1ED0, NULL, OS_MESG_NOBLOCK);
}
}
gAudioContext.sampleIoReqIdx = 0;
func_800E11F0();
Audio_ProcessLoads(gAudioContext.resetStatus);
func_800E4F58();
if ((gAudioContext.resetStatus != 0) && (Audio_ResetStep() == 0)) {
if (gAudioContext.resetStatus == 0) {
osSendMesg(gAudioContext.audioResetQueueP, gAudioContext.audioResetPresetIdToLoad, 0);
}
D_801304E4 = NULL;
return NULL;
if (gAudioContext.resetStatus != 0) {
if (Audio_ResetStep() == 0) {
if (gAudioContext.resetStatus == 0) {
osSendMesg(gAudioContext.audioResetQueueP, gAudioContext.audioResetPresetIdToLoad, OS_MESG_NOBLOCK);
}
sWaitingAudioTask = NULL;
return NULL;
}
}
if (gAudioContext.resetTimer > 16) {
return NULL;
} else if (gAudioContext.resetTimer != 0) {
}
if (gAudioContext.resetTimer != 0) {
gAudioContext.resetTimer++;
}
gAudioContext.currTask = &gAudioContext.rspTask[gAudioContext.rspTaskIdx];
gAudioContext.curAbiCmdBuf = gAudioContext.abiCmdBufs[gAudioContext.rspTaskIdx];
gAudioContext.aiBufLengths[gAudioContext.curAIBufIdx] =
(s16)((((gAudioContext.audioBufferParameters.samplesPerFrameTarget - sp6C) + 0x80) & 0xFFF0) + 0x10);
if (gAudioContext.aiBufLengths[gAudioContext.curAIBufIdx] < gAudioContext.audioBufferParameters.minAiBufferLength) {
gAudioContext.aiBufLengths[gAudioContext.curAIBufIdx] = gAudioContext.audioBufferParameters.minAiBufferLength;
index = gAudioContext.curAIBufIdx;
currAiBuffer = gAudioContext.aiBuffers[index];
gAudioContext.aiBufLengths[index] =
(s16)((((gAudioContext.audioBufferParameters.samplesPerFrameTarget - samplesRemainingInAi) +
EXTRA_BUFFERED_AI_SAMPLES_TARGET) &
~0xF) +
SAMPLES_TO_OVERPRODUCE);
if (gAudioContext.aiBufLengths[index] < gAudioContext.audioBufferParameters.minAiBufferLength) {
gAudioContext.aiBufLengths[index] = gAudioContext.audioBufferParameters.minAiBufferLength;
}
if (gAudioContext.audioBufferParameters.maxAiBufferLength < gAudioContext.aiBufLengths[gAudioContext.curAIBufIdx]) {
gAudioContext.aiBufLengths[gAudioContext.curAIBufIdx] = gAudioContext.audioBufferParameters.maxAiBufferLength;
if (gAudioContext.aiBufLengths[index] > gAudioContext.audioBufferParameters.maxAiBufferLength) {
gAudioContext.aiBufLengths[index] = gAudioContext.audioBufferParameters.maxAiBufferLength;
}
j = 0;
if (gAudioContext.resetStatus == 0) {
i = 0;
// msg = 0000RREE R = read pos, E = End Pos
while (osRecvMesg(gAudioContext.cmdProcQueueP, &sp4C, 0) != -1) {
while (osRecvMesg(gAudioContext.cmdProcQueueP, (OSMesg*)&sp4C, OS_MESG_NOBLOCK) != -1) {
if (1) {}
if (1) {}
if (1) {}
Audio_ProcessCmds(sp4C);
i++;
j++;
}
if ((i == 0) && (gAudioContext.cmdQueueFinished)) {
if ((j == 0) && (gAudioContext.cmdQueueFinished)) {
Audio_ScheduleProcessCmds();
}
}
gAudioContext.curAbiCmdBuf =
AudioSynth_Update(gAudioContext.curAbiCmdBuf, &abiCmdCnt, gAudioContext.aiBuffers[gAudioContext.curAIBufIdx],
gAudioContext.aiBufLengths[gAudioContext.curAIBufIdx]);
gAudioContext.audioRandom = osGetCount() * (gAudioContext.audioRandom + gAudioContext.totalTaskCnt);
gAudioContext.audioRandom = gAudioContext.aiBuffers[gAudioContext.curAIBufIdx][gAudioContext.totalTaskCnt & 0xFF] +
gAudioContext.audioRandom;
;
gWaveSamples[8] = (s16*)((((u8*)func_800E4FE0)) + (gAudioContext.audioRandom & 0xFFF0));
AudioSynth_Update(gAudioContext.curAbiCmdBuf, &abiCmdCnt, currAiBuffer, gAudioContext.aiBufLengths[index]);
gAudioContext.audioRandom = (gAudioContext.audioRandom + gAudioContext.totalTaskCnt) * osGetCount();
gAudioContext.audioRandom =
gAudioContext.aiBuffers[index][gAudioContext.totalTaskCnt & 0xFF] + gAudioContext.audioRandom;
gWaveSamples[8] = (s16*)(((u8*)func_800E4FE0) + (gAudioContext.audioRandom & 0xFFF0));
index = gAudioContext.rspTaskIdx;
gAudioContext.currTask->taskQueue = NULL;
gAudioContext.currTask->unk_44 = NULL;
temp_v1_10 = &gAudioContext.currTask->task.t;
temp_v1_10->type = 2U;
temp_v1_10->flags = 0U;
temp_v1_10->ucode_boot = D_801120C0;
temp_v1_10->ucode_boot_size = 0x1000;
temp_v1_10->ucode_data_size = (((s32)(D_80155F50 - D_80155C70) >> 3) * 8) - 1;
temp_v1_10->ucode = D_801120C0;
temp_v1_10->ucode_data = D_80155C70;
temp_v1_10->ucode_size = 0x1000;
temp_v1_10->dram_stack = NULL;
temp_v1_10->dram_stack_size = 0;
temp_v1_10->output_buff = NULL;
temp_v1_10->output_buff_size = NULL;
temp_v1_10->data_ptr = gAudioContext.abiCmdBufs[gAudioContext.rspTaskIdx];
temp_v1_10->yield_data_ptr = NULL;
temp_v1_10->yield_data_size = 0;
temp_v1_10->data_size = abiCmdCnt * sizeof(ACmd);
if (D_801304E0 < abiCmdCnt) {
D_801304E0 = abiCmdCnt;
task = &gAudioContext.currTask->task.t;
task->type = M_AUDTASK;
task->flags = 0;
task->ucode_boot = D_801120C0;
task->ucode_boot_size = 0x1000;
task->ucode_data_size = ((rspAspMainDataEnd - rspAspMainDataStart) * sizeof(u64)) - 1;
task->ucode = D_801120C0;
task->ucode_data = rspAspMainDataStart;
task->ucode_size = 0x1000;
task->dram_stack = NULL;
task->dram_stack_size = 0;
task->output_buff = NULL;
task->output_buff_size = NULL;
task->data_ptr = (u64*)gAudioContext.abiCmdBufs[index];
task->data_size = abiCmdCnt * sizeof(Acmd);
task->yield_data_ptr = NULL;
task->yield_data_size = 0;
if (sMaxAbiCmdCnt < abiCmdCnt) {
sMaxAbiCmdCnt = abiCmdCnt;
}
if (gAudioContext.audioBufferParameters.presetUnk4 == 1) {
return gAudioContext.currTask;
} else {
sWaitingAudioTask = gAudioContext.currTask;
return NULL;
}
D_801304E4 = gAudioContext.currTask;
return NULL;
}
#else
s32 sMaxAbiCmdCnt = 0x80;
AudioTask* sWaitingAudioTask = NULL;
#pragma GLOBAL_ASM("asm/non_matchings/code/code_800E4FE0/func_800E5000.s")
#endif
@ -271,7 +253,7 @@ void func_800E5584(AudioCmd* cmd) {
if (cmd->asUInt == 1) {
for (i = 0; i < gAudioContext.maxSimultaneousNotes; i++) {
Note* note = &gAudioContext.notes[i];
NoteSubEu* subEu = &note->noteSubEu.bitField0;
NoteSubEu* subEu = &note->noteSubEu;
if (subEu->bitField0.s.enabled && note->playbackState.unk_04 == 0) {
if (note->playbackState.parentLayer->seqChannel->muteBehavior & 8) {
subEu->bitField0.s.finished = 1;
@ -310,7 +292,7 @@ void func_800E5584(AudioCmd* cmd) {
gAudioContext.audioResetPresetIdToLoad = cmd->asUInt;
return;
case 0xFB:
D_801755D0 = cmd->asUInt;
D_801755D0 = (void (*)(void))cmd->asUInt;
return;
case 0xE0:
case 0xE1:
@ -503,7 +485,7 @@ void Audio_ProcessCmds(u32 msg) {
u32 func_800E5E20(u32* arg0) {
u32 sp1C;
if (osRecvMesg(&gAudioContext.unk_1E20, &sp1C, 0) == -1) {
if (osRecvMesg(&gAudioContext.unk_1E20, (OSMesg*)&sp1C, OS_MESG_NOBLOCK) == -1) {
*arg0 = 0;
return 0;
}
@ -524,7 +506,7 @@ s32 func_800E5EDC(void) {
s32 pad;
s32 sp18;
if (osRecvMesg(gAudioContext.audioResetQueueP, &sp18, OS_MESG_NOBLOCK) == -1) {
if (osRecvMesg(gAudioContext.audioResetQueueP, (OSMesg*)&sp18, OS_MESG_NOBLOCK) == -1) {
return 0;
} else if (gAudioContext.audioResetPresetIdToLoad != sp18) {
return -1;
@ -536,7 +518,7 @@ s32 func_800E5EDC(void) {
void func_800E5F34(void) {
// macro?
// clang-format off
s32 chk = -1; s32 sp28; do { } while (osRecvMesg(gAudioContext.audioResetQueueP, &sp28, 0) != chk);
s32 chk = -1; s32 sp28; do {} while (osRecvMesg(gAudioContext.audioResetQueueP, (OSMesg*)&sp28, OS_MESG_NOBLOCK) != chk);
// clang-format on
}
@ -745,47 +727,45 @@ void Audio_WaitForAudioTask(void) {
osRecvMesg(gAudioContext.taskStartQueueP, NULL, OS_MESG_BLOCK);
}
#ifdef NON_MATCHING
s32 func_800E6590(s32 arg0, s32 arg1, s32 arg2) {
u32 temp_v1_2;
AudioBankSound* temp_a0;
Note* temp_a0_2;
SequenceChannelLayer* temp_v0;
SequenceChannel* temp_v1;
SequencePlayer* seqPlayer;
SequenceChannelLayer* layer;
Note* note;
AudioBankSound* sound;
s32 loopEnd;
s32 samplePos;
seqPlayer = &gAudioContext.seqPlayers[arg0];
if (seqPlayer->enabled && seqPlayer->channels[arg1]->enabled) {
temp_v0 = seqPlayer->channels[arg1]->layers[arg2];
if (temp_v0 == NULL) {
layer = seqPlayer->channels[arg1]->layers[arg2];
if (layer == NULL) {
return 0;
}
if (temp_v0->enabled) {
temp_a0_2 = temp_v0->note;
if (temp_a0_2 == NULL) {
if (layer->enabled) {
if (layer->note == NULL) {
return 0;
}
if (!temp_v0->bit3) {
if (!layer->bit3) {
return 0;
}
if (temp_v0 == temp_a0_2->playbackState.parentLayer) {
temp_a0 = temp_a0_2->noteSubEu.sound.audioBankSound;
if (temp_a0 == 0) {
note = layer->note;
if (layer == note->playbackState.parentLayer) {
sound = note->noteSubEu.sound.audioBankSound;
if (sound == NULL) {
return 0;
}
return temp_a0->sample->loop->end - temp_a0_2->synthesisState.samplePosInt;
loopEnd = sound->sample->loop->end;
samplePos = note->synthesisState.samplePosInt;
return loopEnd - samplePos;
}
return 0;
}
}
return 0;
}
#else
#pragma GLOBAL_ASM("asm/non_matchings/code/code_800E4FE0/func_800E6590.s")
#endif
s32 func_800E6680(void) {
return func_800E66C0(0);

File diff suppressed because it is too large Load diff

View file

@ -18,27 +18,20 @@ typedef struct {
/* 0x0C */ u16 unk_C;
} Struct_800F8EA0; // size = 0x10
u8 D_80133340[4] = {
0x53,
0x45,
0x00,
0x00,
};
// rodata for func_800F7680 (this file)
char D_80133340[] = "SE";
// rodata for func_800F7CEC (this file)
char D_80133344[] = VT_COL(RED, WHITE) "<INAGAKI CHECK> dist over! flag:%04X ptr:%08X pos:%f-%f-%f" VT_RST "\n";
// file padding
s32 D_8013338C = 0;
UNK_TYPE D_80133390[] = {
0x53455120,
0x48000000,
};
UNK_TYPE D_80133398[] = {
0x20202020,
0x4C000000,
};
// rodata for Audio_ProcessSeqCmd (code_800F9280.c)
char D_80133390[] = "SEQ H";
char D_80133398[] = " L";
// data
u8 D_801333A0 = 0;
u8 D_801333A4 = 0;
@ -114,6 +107,8 @@ void Audio_ClearBGMMute(u8 arg0) {
}
}
// a3 = freq scale factor for ocarina
// a5 = reverb add
void Audio_PlaySoundGeneral(u16 sfxId, Vec3f* a1, u8 a2, f32* a3, f32* a4, s8* a5) {
u8 i;
Struct_800F738C* phi_v0;
@ -559,7 +554,7 @@ void func_800F87A0(u8 bankId) {
}
bankIndex = gSoundBanks[bankId][0].next;
}
sp48.unk_28 = bankId << 0xC;
sp48.unk_28 = bankId << 12;
func_800F74E0(0, &sp48);
}
@ -588,7 +583,7 @@ void func_800F89A0(u8 bankId, Vec3f* pos) {
SoundBankEntry sp18;
func_800F8884(bankId, pos);
sp18.unk_28 = bankId << 0xC;
sp18.unk_28 = bankId << 12;
sp18.posX = &pos->x;
func_800F74E0(1, &sp18);
}

View file

@ -48,7 +48,6 @@ void func_800F9280(u8 seqIdx, u8 seqId, u8 arg2, u16 fadeTimer) {
}
}
#else
void func_800F9280(u8 seqIdx, u8 seqId, u8 arg2, u16 fadeTimer);
#pragma GLOBAL_ASM("asm/non_matchings/code/code_800F9280/func_800F9280.s")
#endif