Cumulative docs update (#221)

* lights fix

* names

* remove header

* so many names

* format

* more docs

* makefile
This commit is contained in:
petrie911
2024-04-24 23:14:49 -05:00
committed by GitHub
parent a6b80a5825
commit 0c9be776da
62 changed files with 1051 additions and 1028 deletions
+203 -196
View File
@@ -4,15 +4,15 @@
#include "audiothread_cmd.h"
#include "audioseq_cmd.h"
void func_8001D0B4(f32* sfxSource, u32 sfxId, f32 freqMod);
void Audio_SetModulationAndPlaySfx(f32* sfxSource, u32 sfxId, f32 freqMod);
s32 Audio_GetCurrentVoice(void);
void Audio_PlaySequence(u8, u16, u8, u8);
void Audio_PlayFanfare(u16, u8, u8, u8);
void Audio_PlaySequenceDistorted(u8, u16, u16, u8, u8);
void func_8001DD40(void);
void func_8001D6DC(u8);
void func_8001DE1C(u8);
void Audio_RestartSeqPlayers(void);
void Audio_PlayMapMenuSfx(u8);
void Audio_StartReset(u8);
static const char devstr1[] = "preload start (%d): ";
static const char devstr2[] = "%d ";
@@ -45,11 +45,11 @@ ActiveSfx sActiveSfx[5][8];
u8 sCurSfxPlayerChannelIndex;
u8 sSfxBankMuted[5];
Modulation sSfxVolumeMods[5];
f32 D_80149AD8[256];
f32 D_80149ED8[256];
f32 D_8014A2D8[384];
f32 D_8014A8D8[32];
u8 D_8014A958[32];
f32 sAudioAnalyzerData[256];
f32 sAnalyzerBuffer1[256];
f32 sAnalyzerBuffer2[384];
f32 sNewFreqAmplitudes[32];
u8 sFreqAnalyzerBars[32];
SeqRequest sSeqRequests[4][5];
u8 sNumSeqRequests[4];
s32 sAudioSeqCmds[256];
@@ -58,10 +58,10 @@ u16 sDelayedSeqCmdFlags;
DelayedSeqCmd sDelayedSeqCmds[16];
SfxChannelState sSfxChannelState[16];
PlayerNoiseModulation sPlayerNoise[4];
f32 D_8014BA10[4];
u8 D_8014BA20[4];
u8 D_8014BA24[4];
s32 D_8014BA28[4];
f32 sBombFreqMod[4];
u8 sBombType[4];
u8 sBombState[4];
s32 sBombStartFrame[4];
u8 sChannelsPerBank[5][5] = {
{ 3, 2, 2, 2, 2 }, { 3, 1, 2, 2, 2 }, { 3, 2, 2, 2, 3 }, { 6, 0, 2, 0, 4 }, { 0, 0, 0, 0, 0 },
@@ -82,13 +82,13 @@ u8 sSeqCmdWritePos = 0;
u8 sSeqCmdReadPos = 0;
u8 sStartSeqDisabled = 0;
u8 sSoundModeList[4] = { SOUNDMODE_STEREO, SOUNDMODE_HEADSET, SOUNDMODE_SURROUND, SOUNDMODE_MONO };
u8 sNewAudioSpecId = AUDIOSPEC_0;
u8 D_800C5D58 = 0;
u8 sAudioSpecId = AUDIOSPEC_0;
u8 sAudioResetStatus = AUDIORESET_READY;
s32 D_800C5D5C = 0; // unused. file split?
s8 sBaseReverb = 0;
s8 sEnvReverb = 0;
s8 sAudioSpecReverb = 0;
u8 sVolumeSettings[3] = { 99, 99, 99 };
u8 D_800C5D6C[29][7] = {
u8 sAudioSpecInstrumentSets[29][7] = {
{ 0, 3, 4, 80, 12, 21, 255 }, { 17, 18, 15, 96, 20, 22, 255 }, { 0, 3, 5, 80, 16, 255, 0 },
{ 17, 18, 15, 96, 20, 22, 255 }, { 0, 3, 4, 80, 12, 21, 255 }, { 17, 18, 15, 96, 20, 22, 255 },
{ 0, 3, 4, 80, 12, 21, 255 }, { 17, 18, 15, 96, 20, 22, 255 }, { 0, 3, 4, 80, 12, 21, 255 },
@@ -100,10 +100,10 @@ u8 D_800C5D6C[29][7] = {
{ 255, 0, 0, 0, 0, 0, 0 }, { 255, 0, 0, 0, 0, 0, 0 }, { 255, 0, 0, 0, 0, 0, 0 },
{ 255, 0, 0, 0, 0, 0, 0 }, { 0, 3, 4, 80, 12, 21, 255 },
};
s8 D_800C5E38[29] = {
s8 sAudioSpecReverbAdd[29] = {
10, 0, 25, 0, 25, 0, 10, 0, 10, 35, 0, 10, 40, 0, 25, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
};
u32 D_800C5E58[5] = { 20, 16, 10, 10, 20 };
u32 sPlayerNoiseTimes[5] = { 20, 16, 10, 10, 20 };
s32 D_800C5E6C = 0; // unused. file split?
u8 D_800C5E70 = 0;
f32 sSfxFreqMod = 1.0f;
@@ -111,7 +111,7 @@ f32 sSfxVolMod = 1.0f; // never modified
u8 sPlaylistIndex = 255;
s32 sPlaylistTimer = 0;
u8 sPlaylistCmdIndex = 0;
u32 D_800C5E88[] = {
u32 sEventSfx[] = {
0x1903000D, 0x1903000E, 0x19500015, 0x2903A021, 0x4900000C, 0x19122005, 0x1913204A, 0x2900306A,
0x29034024, 0x2902306C, 0x19032056, 0x19030057, 0x19033058, 0x19030006, 0x29503032, 0x1903407D,
0x4900402E, 0x19038072, 0x1903807E, 0x1903807F, 0x19038080, 0x11032081, 0x19031082,
@@ -508,12 +508,12 @@ PlaylistCmd sPlaylists[][100] = {
},
};
s32 D_800C737C = 0; // unused. file split?
f32 D_800C7380 = 1.0f;
s32 D_800C737C = 0; // unused. file split?
f32 D_800C7380 = 1.0f; // unused/
u32 sNextVoiceId = 0;
u32 sCurrentVoiceId = 0;
u8 sSetNextVoiceId = 0;
u8 D_800C7390 = 0;
u8 sUnkVoiceParam = 0;
u8 sMuteBgmForVoice = 0;
void func_80016A50(void) {
@@ -581,7 +581,7 @@ s8 Audio_GetSfxReverb(u8 bankId, u8 entryIndex, u8 channelId) {
if (scriptReverb == -1) {
scriptReverb = 0;
}
totalReverb = *sSfxBanks[bankId][entryIndex].reverbAdd + distReverb + scriptReverb + sBaseReverb + sAudioSpecReverb;
totalReverb = *sSfxBanks[bankId][entryIndex].reverbAdd + distReverb + scriptReverb + sEnvReverb + sAudioSpecReverb;
totalReverb = MIN(127, totalReverb);
return totalReverb;
}
@@ -688,6 +688,7 @@ void Audio_SetSfxProperties(u8 bankId, u8 entryIndex, u8 channelId) {
sSfxChannelState[channelId].pan = pan;
}
}
f32 Audio_UpdateDopplerShift(f32* srcPos, f32* srcVel, f32 soundSpeed, f32* curDopplerShift) {
f32 xVel;
f32 zVel;
@@ -742,25 +743,25 @@ f32 Audio_UpdateDopplerShift(f32* srcPos, f32* srcVel, f32 soundSpeed, f32* curD
return newShift;
}
void func_80017494(void) {
void Audio_LoadInstruments(void) {
u8 i;
for (i = 0; D_800C5D6C[sNewAudioSpecId][i] != 0xFF; i++) {
AUDIOCMD_GLOBAL_SYNC_LOAD_INSTRUMENT(0, D_800C5D6C[sNewAudioSpecId][i], 0);
for (i = 0; sAudioSpecInstrumentSets[sAudioSpecId][i] != 0xFF; i++) {
AUDIOCMD_GLOBAL_SYNC_LOAD_INSTRUMENT(0, sAudioSpecInstrumentSets[sAudioSpecId][i], 0);
}
}
void func_80017550(void) {
if (sNewAudioSpecId == AUDIOSPEC_12) {
AUDIOCMD_GLOBAL_SYNC_LOAD_SEQ_PARTS(14, 0);
void Audio_LoadAquasSequence(void) {
if (sAudioSpecId == AUDIOSPEC_12) {
AUDIOCMD_GLOBAL_SYNC_LOAD_SEQ_PARTS(SEQ_ID_AQUAS, 0);
}
}
void Audio_ResetSfxChannelState(void) {
u8 i;
sBaseReverb = 0;
sAudioSpecReverb = D_800C5E38[sNewAudioSpecId];
sEnvReverb = 0;
sAudioSpecReverb = sAudioSpecReverbAdd[sAudioSpecId];
for (i = 0; i < 16; i++) {
sSfxChannelState[i].volMod = 1.0f;
sSfxChannelState[i].freqMod = 1.0f;
@@ -805,7 +806,7 @@ void Audio_ProcessSeqCmd(u32 seqCmd) {
s32 priority;
u8 i; // sp63
u8 specId;
u8 sp61;
u8 oldSpecId;
u8 ioPort;
u8 channel;
u8 found;
@@ -1018,12 +1019,12 @@ void Audio_ProcessSeqCmd(u32 seqCmd) {
case SEQCMD_OP_RESET_AUDIO_HEAP:
specId = seqCmd & 0xFF;
sSfxChannelLayout = (seqCmd & 0xFF00) >> 8;
sp61 = sNewAudioSpecId;
sNewAudioSpecId = specId;
oldSpecId = sAudioSpecId;
sAudioSpecId = specId;
if (sp61 != specId) {
if (oldSpecId != specId) {
AudioThread_ResetAudioHeap(specId);
func_8001DE1C(sp61);
Audio_StartReset(oldSpecId);
AUDIOCMD_GLOBAL_STOP_AUDIOCMDS();
} else {
@@ -1082,14 +1083,15 @@ void Audio_ResetSequenceRequests(u8 seqPlayId) {
sNumSeqRequests[seqPlayId] = 0;
}
void func_800184EC(u8 seqPlayId, u8 setupOpDisable) {
// unused
void Audio_DisableSetupOp(u8 seqPlayId, u8 opcode) {
u8 i;
for (i = 0; i < sActiveSequences[seqPlayId].setupCmdNum; i++) {
u8 setupOp = ((sActiveSequences[seqPlayId].setupCmd[i] & 0xF00000) >> 20);
if (setupOp == setupOpDisable) {
sActiveSequences[seqPlayId].setupCmd[i] = 0xFF000000;
if (setupOp == opcode) {
sActiveSequences[seqPlayId].setupCmd[i] = 0xFF000000; // 0 duration volume reset on SEQ_PLAYER_BGM
}
}
}
@@ -1246,7 +1248,7 @@ void Audio_UpdateActiveSequences(void) {
if (sActiveSequences[seqPlayId].setupCmdNum == 0) {
continue;
}
if (!Audio_SeqCmdValueNotQueued(SEQCMD_OP_MASK, SEQCMD_OP_RESET_AUDIO_HEAP << 28)) {
if (!Audio_SeqCmdValueNotQueued(SEQCMD_OP_RESET_AUDIO_HEAP << 28, SEQCMD_OP_MASK)) {
sActiveSequences[seqPlayId].setupCmdNum = 0;
break;
}
@@ -1254,9 +1256,9 @@ void Audio_UpdateActiveSequences(void) {
sActiveSequences[seqPlayId].setupCmdTimer--;
} else if (!gSeqPlayers[seqPlayId].enabled) {
for (i = 0; i < sActiveSequences[seqPlayId].setupCmdNum; i++) {
setupOp = (sActiveSequences[seqPlayId].setupCmd[i] & 0xF00000) >> 0x14;
setupOp = (sActiveSequences[seqPlayId].setupCmd[i] & 0xF00000) >> 20;
setupSeqPlayId = (sActiveSequences[seqPlayId].setupCmd[i] & 0xF0000) >> 0x10;
setupSeqPlayId = (sActiveSequences[seqPlayId].setupCmd[i] & 0xF0000) >> 16;
val2 = (sActiveSequences[seqPlayId].setupCmd[i] & 0xFF00) >> 8;
val1 = sActiveSequences[seqPlayId].setupCmd[i] & 0xFF;
switch (setupOp) {
@@ -1321,24 +1323,24 @@ void Audio_UpdateDelayedSeqCmds(void) {
}
}
u8 func_80018FA4(void) {
if (D_800C5D58 != 0) {
if (D_800C5D58 == 1) {
if (func_8001ED34() == 1) {
D_800C5D58 = 0;
u8 Audio_HandleReset(void) {
if (sAudioResetStatus != AUDIORESET_READY) {
if (sAudioResetStatus == AUDIORESET_WAIT) {
if (AudioThread_ResetComplete() == true) {
sAudioResetStatus = AUDIORESET_READY;
AUDIOCMD_SEQPLAYER_SET_IO(SEQ_PLAYER_SFX, 0, sSfxChannelLayout);
func_8001DD40();
Audio_RestartSeqPlayers();
}
} else if (D_800C5D58 == 2) {
while (func_8001ED34() != 1) {
} else if (sAudioResetStatus == AUDIORESET_BLOCK) {
while (AudioThread_ResetComplete() != true) {
;
}
D_800C5D58 = 0;
sAudioResetStatus = AUDIORESET_READY;
AUDIOCMD_SEQPLAYER_SET_IO(SEQ_PLAYER_SFX, 0, sSfxChannelLayout);
func_8001DD40();
Audio_RestartSeqPlayers();
}
}
return D_800C5D58;
return sAudioResetStatus;
}
void Audio_ResetActiveSequences(void) {
@@ -2008,14 +2010,14 @@ s32 Audio_GetCurrentVoiceStatus(void) {
return 0;
}
void func_8001AF40(u8 unkVoiceParam) {
D_800C7390 = unkVoiceParam;
void Audio_SetUnkVoiceParam(u8 unkVoiceParam) {
sUnkVoiceParam = unkVoiceParam;
}
void func_8001AF50(void) {
if (D_800C7390 != 0xFF) {
AUDIOCMD_CHANNEL_SET_IO(SEQ_PLAYER_VOICE, 14, 0, D_800C7390);
D_800C7390 = 0xFF;
void Audio_UpdateUnkVoiceParam(void) {
if (sUnkVoiceParam != 0xFF) {
AUDIOCMD_CHANNEL_SET_IO(SEQ_PLAYER_VOICE, 14, 0, sUnkVoiceParam);
sUnkVoiceParam = 0xFF;
}
}
@@ -2093,9 +2095,9 @@ void Audio_UpdateArwingNoise(u8 playerId) {
sPlayerNoise[playerId].freqMod[i].value += sPlayerNoise[playerId].freqMod[i].step;
if ((sPlayerNoise[playerId].freqMod[i].timer == 0) && (sPlayerNoise[playerId].freqMod[i].target != 1.0f)) {
sPlayerNoise[playerId].freqMod[i].target = 1.0f;
sPlayerNoise[playerId].freqMod[i].timer = D_800C5E58[i];
sPlayerNoise[playerId].freqMod[i].timer = sPlayerNoiseTimes[i];
sPlayerNoise[playerId].freqMod[i].step =
(1.0f - sPlayerNoise[playerId].freqMod[i].value) / D_800C5E58[i];
(1.0f - sPlayerNoise[playerId].freqMod[i].value) / sPlayerNoiseTimes[i];
}
}
}
@@ -2138,9 +2140,9 @@ void Audio_UpdateLandmasterNoise(u8 playerId) {
sPlayerNoise[playerId].freqMod[i].value += sPlayerNoise[playerId].freqMod[i].step;
if ((sPlayerNoise[playerId].freqMod[i].timer == 0) && (sPlayerNoise[playerId].freqMod[i].target != 1.0f)) {
sPlayerNoise[playerId].freqMod[i].target = 1.0f;
sPlayerNoise[playerId].freqMod[i].timer = D_800C5E58[i];
sPlayerNoise[playerId].freqMod[i].timer = sPlayerNoiseTimes[i];
sPlayerNoise[playerId].freqMod[i].step =
(1.0f - sPlayerNoise[playerId].freqMod[i].value) / D_800C5E58[i];
(1.0f - sPlayerNoise[playerId].freqMod[i].value) / sPlayerNoiseTimes[i];
}
}
}
@@ -2196,9 +2198,9 @@ void Audio_UpdateBlueMarineNoise(u8 playerId) {
sPlayerNoise[playerId].freqMod[i].value += sPlayerNoise[playerId].freqMod[i].step;
if ((sPlayerNoise[playerId].freqMod[i].timer == 0) && (sPlayerNoise[playerId].freqMod[i].target != 1.0f)) {
sPlayerNoise[playerId].freqMod[i].target = 1.0f;
sPlayerNoise[playerId].freqMod[i].timer = D_800C5E58[i];
sPlayerNoise[playerId].freqMod[i].timer = sPlayerNoiseTimes[i];
sPlayerNoise[playerId].freqMod[i].step =
(1.0f - sPlayerNoise[playerId].freqMod[i].value) / D_800C5E58[i];
(1.0f - sPlayerNoise[playerId].freqMod[i].value) / sPlayerNoiseTimes[i];
}
}
}
@@ -2268,8 +2270,8 @@ void Audio_ResetVoicesAndPlayers(void) {
sPlayerNoise[playerId].reverbAdd = 0;
sPlayerNoise[playerId].totalMod = 1.0f;
sPlayerNoise[playerId].dopplerShift = 1.0f;
D_8014BA24[playerId] = 0;
D_8014BA28[playerId] = 0;
sBombState[playerId] = 0;
sBombStartFrame[playerId] = 0;
}
sSfxFreqMod = 1.0f;
sSfxVolMod = 1.0f;
@@ -2321,7 +2323,7 @@ void Audio_ProcessPlaylist(void) {
}
}
void func_8001BFC0(f32* buffer0, f32* buffer1, s32 length, f32* buffer2) {
void Audio_AnalyzeFrequencies(f32* buffer0, f32* buffer1, s32 length, f32* buffer2) {
f32 temp_ft0;
f32 var_fs0;
f32* buff0fromStart;
@@ -2399,14 +2401,14 @@ void func_8001BFC0(f32* buffer0, f32* buffer1, s32 length, f32* buffer2) {
}
u8* Audio_UpdateFrequencyAnalysis(void) {
s32 temp2;
s32 i;
s32 j;
s32 k;
s32 l;
s32 m;
s16* temp;
f32* test;
s32 fmax;
s32 i1;
s32 fmin;
s32 i2;
s32 i3;
s32 fbin;
s16* aiData;
s32 pad;
static s32 sFreqBins[] = {
0, 1, 2, 3, 4, 6, 7, 8, 9, 10, 11, 12, 14, 16, 19, 22,
26, 31, 37, 44, 54, 68, 88, 108, 138, 163, 188, 208, 222, 234, 242, 246,
@@ -2419,36 +2421,36 @@ u8* Audio_UpdateFrequencyAnalysis(void) {
Audio_ProcessPlaylist();
// clang-format off
temp = gAiBuffers[gCurAiBuffIndex];\
for(l = 0; l < 256; l++) {\
D_80149AD8[l] = *temp++;
aiData = gAiBuffers[gCurAiBuffIndex];\
for(i3 = 0; i3 < 256; i3++) {\
sAudioAnalyzerData[i3] = *aiData++;
}
// clang-format on
func_8001BFC0(D_80149AD8, D_80149ED8, 8, D_8014A2D8);
j = 0;
for (i = 0; i < 32; i++) {
temp2 = sFreqBins[i] + 1;
for (m = j; m < temp2; m++) {
if (D_80149AD8[m] > 0.0f) {
D_8014A8D8[i] += D_80149AD8[m];
Audio_AnalyzeFrequencies(sAudioAnalyzerData, sAnalyzerBuffer1, 8, sAnalyzerBuffer2);
fmin = 0;
for (i1 = 0; i1 < 32; i1++) {
fmax = sFreqBins[i1] + 1;
for (fbin = fmin; fbin < fmax; fbin++) {
if (sAudioAnalyzerData[fbin] > 0.0f) {
sNewFreqAmplitudes[i1] += sAudioAnalyzerData[fbin];
} else {
D_8014A8D8[i] -= D_80149AD8[m];
sNewFreqAmplitudes[i1] -= sAudioAnalyzerData[fbin];
}
}
j = m;
fmin = fbin;
}
for (k = 0; k < 32; k++) {
D_8014A8D8[k] /= 8;
for (i2 = 0; i2 < 32; i2++) {
sNewFreqAmplitudes[i2] /= 8;
}
for (l = 0; l < 32; l++) {
D_8014A8D8[l] = (D_8014A8D8[l] / 32768.0f) * sFreqGain;
if (D_8014A8D8[l] > 1.0f) {
D_8014A8D8[l] = 1.0f;
for (i3 = 0; i3 < 32; i3++) {
sNewFreqAmplitudes[i3] = (sNewFreqAmplitudes[i3] / 32768.0f) * sFreqGain;
if (sNewFreqAmplitudes[i3] > 1.0f) {
sNewFreqAmplitudes[i3] = 1.0f;
}
sFreqAmplitudes[l] = sFreqAmplitudes[l] * 0.75f + 0.25f * D_8014A8D8[l];
D_8014A958[l] = sFreqAmplitudes[l] * 255.0f;
sFreqAmplitudes[i3] = sFreqAmplitudes[i3] * 0.75f + 0.25f * sNewFreqAmplitudes[i3];
sFreqAnalyzerBars[i3] = sFreqAmplitudes[i3] * 255.0f;
}
return D_8014A958;
return sFreqAnalyzerBars;
}
void Audio_StartPlayerNoise(u8 playerId) {
@@ -2479,7 +2481,7 @@ void Audio_StartPlayerNoise(u8 playerId) {
}
}
void func_8001CA24(u8 playerId) {
void Audio_StopPlayerNoise(u8 playerId) {
u32 sfxId = 0x00000000;
switch (sPlayerNoise[playerId].form) {
@@ -2505,56 +2507,56 @@ void func_8001CA24(u8 playerId) {
}
}
void func_8001CB80(u8 playerId, u8 arg1) {
D_8014BA28[playerId] = sAudioFrameCounter;
switch (arg1) {
void Audio_InitBombSfx(u8 playerId, u8 type) {
sBombStartFrame[playerId] = sAudioFrameCounter;
switch (type) {
case 1:
D_8014BA10[playerId] = 1.0f;
D_8014BA20[playerId] = 1;
sBombFreqMod[playerId] = 1.0f;
sBombType[playerId] = 1;
break;
case 2:
D_8014BA10[playerId] = 1.5f;
D_8014BA20[playerId] = 2;
sBombFreqMod[playerId] = 1.5f;
sBombType[playerId] = 2;
break;
default:
case 0:
D_8014BA10[playerId] = 0.75f;
D_8014BA20[playerId] = 0;
sBombFreqMod[playerId] = 0.75f;
sBombType[playerId] = 0;
break;
}
if (D_8014BA24[playerId] != 1) {
Audio_PlaySfx(0x01008008, gPlayer[playerId].sfx.srcPos, playerId, &D_8014BA10[playerId], &gDefaultMod,
if (sBombState[playerId] != 1) {
Audio_PlaySfx(0x01008008, gPlayer[playerId].sfx.srcPos, playerId, &sBombFreqMod[playerId], &gDefaultMod,
&sPlayerNoise[playerId].reverbAdd);
D_8014BA24[playerId] = 1;
sBombState[playerId] = 1;
}
}
void func_8001CCDC(u8 playerId, f32* sfxSource) {
if (D_8014BA24[playerId] != 0) {
switch (D_8014BA20[playerId]) {
void Audio_PlayBombFlightSfx(u8 playerId, f32* sfxSource) {
if (sBombState[playerId] != 0) {
switch (sBombType[playerId]) {
case 1:
D_8014BA10[playerId] = 1.2f;
sBombFreqMod[playerId] = 1.2f;
break;
case 2:
D_8014BA10[playerId] = 1.5f;
sBombFreqMod[playerId] = 1.5f;
break;
default:
case 0:
D_8014BA10[playerId] = 1.0f;
sBombFreqMod[playerId] = 1.0f;
break;
}
Audio_KillSfxBySourceAndId(gPlayer[playerId].sfx.srcPos, 0x01008008);
Audio_PlaySfx(0x09001001, sfxSource, playerId, &D_8014BA10[playerId], &gDefaultMod,
Audio_PlaySfx(0x09001001, sfxSource, playerId, &sBombFreqMod[playerId], &gDefaultMod,
&sPlayerNoise[playerId].reverbAdd);
D_8014BA24[playerId] = 2;
sBombState[playerId] = 2;
}
}
void func_8001CE28(u8 playerId, f32* sfxSource) {
void Audio_PlayBombExplodeSfx(u8 playerId, f32* sfxSource) {
u32 sfxId;
if (D_8014BA24[playerId] != 0) {
switch (D_8014BA20[playerId]) {
if (sBombState[playerId] != 0) {
switch (sBombType[playerId]) {
case 1:
sfxId = 0x0903A00A;
break;
@@ -2568,35 +2570,35 @@ void func_8001CE28(u8 playerId, f32* sfxSource) {
}
Audio_KillSfxByTokenAndId(playerId, 0x09001001);
AUDIO_PLAY_SFX(sfxId, sfxSource, playerId);
D_8014BA24[playerId] = 0;
sBombState[playerId] = 0;
}
}
void func_8001CEFC(f32* sfxSource) {
void Audio_StartEngineNoise(f32* sfxSource) {
u32 sfxId = (gPlayer[0].sfx.levelType == LEVELTYPE_SPACE) ? 0x31000040 : 0x3100000C;
AUDIO_PLAY_SFX(sfxId, sfxSource, 0);
}
void func_8001CF60(f32* sfxSource) {
void Audio_StopEngineNoise(f32* sfxSource) {
u32 sfxId = (gPlayer[0].sfx.levelType == LEVELTYPE_SPACE) ? 0x31000040 : 0x3100000C;
Audio_KillSfxBySourceAndId(sfxSource, sfxId);
}
void func_8001CFA8(f32 arg0) {
f32 var_fv0 = ABS(arg0);
void Audio_SetSfxSpeedModulation(f32 vel) {
f32 speed = ABS(vel);
if (var_fv0 < 6.0f) {
var_fv0 = 6.0f;
} else if (var_fv0 > 30.0f) {
var_fv0 = 30.0f;
if (speed < 6.0f) {
speed = 6.0f;
} else if (speed > 30.0f) {
speed = 30.0f;
}
sSfxFreqMod = ((var_fv0 - 18.0f) / 24.0f) + 1.0f;
sSfxFreqMod = ((speed - 18.0f) / 24.0f) + 1.0f;
}
void func_8001D034(f32* sfxSource, u32 sfxId, u8 semitones) {
void Audio_SetTransposeAndPlaySfx(f32* sfxSource, u32 sfxId, u8 semitones) {
f32 semitoneMods[] = {
1.0f, 1.059f, 1.122f, 1.189f, 1.26f, 1.335f, 1.414f, 1.498f, 1.587f, 1.682f, 1.782f, 1.888f, 2.0f,
};
@@ -2604,64 +2606,69 @@ void func_8001D034(f32* sfxSource, u32 sfxId, u8 semitones) {
if (semitones > 12) {
semitones = 12;
}
func_8001D0B4(sfxSource, sfxId, semitoneMods[semitones]);
Audio_SetModulationAndPlaySfx(sfxSource, sfxId, semitoneMods[semitones]);
}
void func_8001D0B4(f32* sfxSource, u32 sfxId, f32 freqMod) {
void Audio_SetModulationAndPlaySfx(f32* sfxSource, u32 sfxId, f32 freqMod) {
sSfxFreqMod = freqMod;
Audio_PlaySfx(sfxId, sfxSource, 0, &sSfxFreqMod, &gDefaultMod, &gDefaultReverb);
}
void func_8001D10C(f32* sfxSource, u32 sfxId) {
void Audio_PlaySfxModulated(f32* sfxSource, u32 sfxId) {
Audio_PlaySfx(sfxId, sfxSource, 0, &sSfxFreqMod, &sSfxVolMod, &gDefaultReverb);
}
void func_8001D15C(u8 arg0) {
if (arg0 < 12) {
sSfxFreqMod = (arg0 / 11.0f) + 0.5f;
void Audio_SetSfxMapModulation(u8 fMod) {
if (fMod < 12) {
sSfxFreqMod = (fMod / 11.0f) + 0.5f;
} else {
sSfxFreqMod = 1.5f;
}
}
void func_8001D1C8(u8 arg0, u8 arg1) {
u8 temp1;
u8 temp2;
void Audio_SetHeatAlarmParams(u8 shields, u8 heightParam) {
// height param is (s32) height / 100 - 1, clamped to [0, 5]
u8 alarmVolume;
u8 heightVolume;
AUDIOCMD_CHANNEL_SET_IO(SEQ_PLAYER_SFX, 9, 2, 8 + (arg0 >> 2));
AUDIOCMD_CHANNEL_SET_IO(SEQ_PLAYER_SFX, 10, 2, 8 + (arg0 >> 2));
AUDIOCMD_CHANNEL_SET_IO(SEQ_PLAYER_SFX, 11, 2, 8 + (arg0 >> 2));
AUDIOCMD_CHANNEL_SET_IO(SEQ_PLAYER_SFX, 9, 1, 19 - (arg1 * 3));
AUDIOCMD_CHANNEL_SET_IO(SEQ_PLAYER_SFX, 10, 1, 19 - (arg1 * 3));
AUDIOCMD_CHANNEL_SET_IO(SEQ_PLAYER_SFX, 11, 1, 19 - (arg1 * 3));
temp1 = 68 - (arg0 >> 3);
temp2 = 80 - (arg1 * 10);
if (temp1 < temp2) {
temp1 = temp2;
// modifies tempo
AUDIOCMD_CHANNEL_SET_IO(SEQ_PLAYER_SFX, 9, 2, 8 + (shields >> 2));
AUDIOCMD_CHANNEL_SET_IO(SEQ_PLAYER_SFX, 10, 2, 8 + (shields >> 2));
AUDIOCMD_CHANNEL_SET_IO(SEQ_PLAYER_SFX, 11, 2, 8 + (shields >> 2));
// modifies frequency
AUDIOCMD_CHANNEL_SET_IO(SEQ_PLAYER_SFX, 9, 1, 19 - (heightParam * 3));
AUDIOCMD_CHANNEL_SET_IO(SEQ_PLAYER_SFX, 10, 1, 19 - (heightParam * 3));
AUDIOCMD_CHANNEL_SET_IO(SEQ_PLAYER_SFX, 11, 1, 19 - (heightParam * 3));
alarmVolume = 68 - (shields >> 3);
heightVolume = 80 - (heightParam * 10);
if (heightVolume > alarmVolume) {
alarmVolume = heightVolume;
}
AUDIOCMD_CHANNEL_SET_IO(SEQ_PLAYER_SFX, 9, 3, temp1);
AUDIOCMD_CHANNEL_SET_IO(SEQ_PLAYER_SFX, 10, 3, temp1);
AUDIOCMD_CHANNEL_SET_IO(SEQ_PLAYER_SFX, 11, 3, temp1);
AUDIOCMD_CHANNEL_SET_IO(SEQ_PLAYER_SFX, 9, 3, alarmVolume);
AUDIOCMD_CHANNEL_SET_IO(SEQ_PLAYER_SFX, 10, 3, alarmVolume);
AUDIOCMD_CHANNEL_SET_IO(SEQ_PLAYER_SFX, 11, 3, alarmVolume);
}
void Audio_PlayEventSfx(f32* sfxSource, u16 arg1) {
if ((D_800C5E88[arg1] & 0xF0000000) != 0x40000000) {
AUDIO_PLAY_SFX(D_800C5E88[arg1], sfxSource, 0);
void Audio_PlayEventSfx(f32* sfxSource, u16 eventSfxId) {
if ((sEventSfx[eventSfxId] & 0xF0000000) != 0x40000000) {
AUDIO_PLAY_SFX(sEventSfx[eventSfxId], sfxSource, 0);
} else {
AUDIO_PLAY_SFX(D_800C5E88[arg1], gDefaultSfxSource, 0);
AUDIO_PLAY_SFX(sEventSfx[eventSfxId], gDefaultSfxSource, 0);
}
}
void Audio_StopEventSfx(f32* sfxSource, u16 arg1) {
if ((D_800C5E88[arg1] & 0xF0000000) != 0x40000000) {
Audio_KillSfxBySourceAndId(sfxSource, D_800C5E88[arg1]);
void Audio_StopEventSfx(f32* sfxSource, u16 eventSfxId) {
if ((sEventSfx[eventSfxId] & 0xF0000000) != 0x40000000) {
Audio_KillSfxBySourceAndId(sfxSource, sEventSfx[eventSfxId]);
} else {
Audio_KillSfxBySourceAndId(gDefaultSfxSource, D_800C5E88[arg1]);
Audio_KillSfxBySourceAndId(gDefaultSfxSource, sEventSfx[eventSfxId]);
}
}
void Audio_SetBaseSfxReverb(s8 reverb) {
sBaseReverb = reverb;
void Audio_SetEnvSfxReverb(s8 reverb) {
sEnvReverb = reverb;
}
void Audio_SetBgmParam(s8 bgmParam) {
@@ -2681,16 +2688,16 @@ void Audio_PlayFanfare(u16 seqId, u8 bgmVolume, u8 bgmFadeoutTime, u8 bgmFadeinT
}
}
void func_8001D520(void) {
void Audio_PlayDeathSequence(void) {
u8 i;
if (sNewAudioSpecId == AUDIOSPEC_24) {
if (sAudioSpecId == AUDIOSPEC_24) {
Audio_ClearVoice();
func_8001D6DC(0);
Audio_PlayMapMenuSfx(0);
AUDIO_PLAY_SFX(0x0903F004, gDefaultSfxSource, 4);
SEQCMD_SET_SEQPLAYER_VOLUME(SEQ_PLAYER_BGM, 5, 30);
SEQCMD_SETUP_RESTORE_SEQPLAYER_VOLUME(SEQ_PLAYER_FANFARE, SEQ_PLAYER_BGM, 30);
SEQCMD_PLAY_SEQUENCE(SEQ_PLAYER_FANFARE, 0, 0, 39);
SEQCMD_PLAY_SEQUENCE(SEQ_PLAYER_FANFARE, 0, 0, SEQ_ID_DEATH);
} else {
for (i = 0; i < 5; i++) {
Audio_KillSfxByBank(i);
@@ -2699,12 +2706,12 @@ void func_8001D520(void) {
AUDIO_PLAY_SFX(0x0903F004, gDefaultSfxSource, 4);
SEQCMD_STOP_SEQUENCE(SEQ_PLAYER_BGM, 0);
SEQCMD_STOP_SEQUENCE(SEQ_PLAYER_FANFARE, 0);
SEQCMD_PLAY_SEQUENCE(SEQ_PLAYER_BGM, 0, 0, 39);
SEQCMD_PLAY_SEQUENCE(SEQ_PLAYER_BGM, 0, 0, SEQ_ID_DEATH);
}
}
void func_8001D638(u8 arg0) {
if (arg0) {
void Audio_PlayPauseSfx(u8 active) {
if (active) {
AUDIO_PLAY_SFX(0x4900F000, gDefaultSfxSource, 4);
AUDIOCMD_GLOBAL_MUTE();
} else {
@@ -2713,8 +2720,8 @@ void func_8001D638(u8 arg0) {
}
}
void func_8001D6DC(u8 arg0) {
if (arg0) {
void Audio_PlayMapMenuSfx(u8 active) {
if (active) {
AUDIO_PLAY_SFX(0x49000019, gDefaultSfxSource, 4);
AUDIOCMD_GLOBAL_MUTE();
} else {
@@ -2723,7 +2730,7 @@ void func_8001D6DC(u8 arg0) {
}
}
void func_8001D780(u8 audioType) {
void Audio_RestoreVolumeSettings(u8 audioType) {
s8 volume = ((sVolumeSettings[audioType] * 127) / 99) % 128U;
u8 i;
@@ -2748,7 +2755,7 @@ void Audio_SetVolume(u8 audioType, u8 volume) {
volume = 99;
}
sVolumeSettings[audioType] = volume;
func_8001D780(audioType);
Audio_RestoreVolumeSettings(audioType);
}
void Audio_PlaySoundTest(u8 enable) {
@@ -2834,40 +2841,40 @@ void Audio_InitSounds(void) {
Audio_StartSequence(SEQ_PLAYER_SFX, SEQ_ID_SFX, 0xFF, 10);
}
void func_8001DD40(void) {
void Audio_RestartSeqPlayers(void) {
s32 pad1;
s32 pad2;
u16 sp1E = 1;
u16 fadeIn = 1;
Audio_StartSequence(SEQ_PLAYER_VOICE, SEQ_ID_VOICE, 0xFF, 1);
if (sNewAudioSpecId == AUDIOSPEC_12) {
sp1E = 360;
} else if (sNewAudioSpecId < AUDIOSPEC_23) {
sp1E = 90;
if (sAudioSpecId == AUDIOSPEC_12) {
fadeIn = 360;
} else if (sAudioSpecId < AUDIOSPEC_23) {
fadeIn = 90;
}
Audio_StartSequence(SEQ_PLAYER_SFX, SEQ_ID_SFX, 0xFF, sp1E);
func_80017494();
func_80017550();
Audio_StartSequence(SEQ_PLAYER_SFX, SEQ_ID_SFX, 0xFF, fadeIn);
Audio_LoadInstruments();
Audio_LoadAquasSequence();
SEQCMD_SET_SEQPLAYER_VOLUME(SEQ_PLAYER_SFX, 0, 127);
SEQCMD_SET_SEQPLAYER_VOLUME(SEQ_PLAYER_VOICE, 0, 127);
AudioThread_ScheduleProcessCmds();
AUDIOCMD_GLOBAL_STOP_AUDIOCMDS();
AUDIOCMD_GLOBAL_STOP_AUDIOCMDS();
AUDIOCMD_GLOBAL_STOP_AUDIOCMDS();
func_8001D780(0);
func_8001D780(2);
func_8001D780(1);
Audio_RestoreVolumeSettings(0);
Audio_RestoreVolumeSettings(2);
Audio_RestoreVolumeSettings(1);
}
void func_8001DE1C(u8 oldSpecId) {
void Audio_StartReset(u8 oldSpecId) {
if (oldSpecId == AUDIOSPEC_16) {
if ((sNewAudioSpecId == AUDIOSPEC_22) || (sNewAudioSpecId == AUDIOSPEC_23)) {
D_800C5D58 = 2;
if ((sAudioSpecId == AUDIOSPEC_22) || (sAudioSpecId == AUDIOSPEC_23)) {
sAudioResetStatus = AUDIORESET_BLOCK;
}
} else if ((oldSpecId == AUDIOSPEC_28) && (sNewAudioSpecId == AUDIOSPEC_23)) {
D_800C5D58 = 2;
} else if ((oldSpecId == AUDIOSPEC_28) && (sAudioSpecId == AUDIOSPEC_23)) {
sAudioResetStatus = AUDIORESET_BLOCK;
} else {
D_800C5D58 = 1;
sAudioResetStatus = AUDIORESET_WAIT;
}
AUDIOCMD_GLOBAL_UNMUTE(true);
Audio_ResetVoicesAndPlayers();
@@ -2877,13 +2884,13 @@ void func_8001DE1C(u8 oldSpecId) {
}
void Audio_Update(void) {
if (func_80018FA4() == 0) {
if (Audio_HandleReset() == AUDIORESET_READY) {
Audio_ProcessSfxRequests();
Audio_ProcessSeqCmds();
Audio_PlayAllSfx();
Audio_UpdatePlayerNoise();
Audio_UpdateVoice();
func_8001AF50();
Audio_UpdateUnkVoiceParam();
Audio_UpdateActiveSequences();
Audio_UpdateDelayedSeqCmds();
AudioThread_ScheduleProcessCmds();
+15 -15
View File
@@ -291,7 +291,7 @@ s32 AudioLoad_SyncLoadInstrument(s32 fontId, s32 instId, s32 drumId) {
void AudioLoad_AsyncLoadSampleBank(s32 sampleBankId, s32 nChunks, s32 retData, OSMesgQueue* retQueue) {
if (AudioLoad_AsyncLoadInner(2, AudioLoad_GetLoadTableIndex(2, sampleBankId), nChunks, retData, retQueue) == NULL) {
osSendMesg(retQueue, NULL, 0);
osSendMesg(retQueue, NULL, OS_MESG_NOBLOCK);
}
}
@@ -642,14 +642,14 @@ void AudioLoad_SyncDma(u32 devAddr, u8* ramAddr, u32 size, s32 medium) {
break;
}
AudioLoad_Dma(&gSyncDmaIoMsg, 1, 0, devAddr, ramAddr, 0x400, &gSyncDmaQueue, medium, D_800C50E8);
osRecvMesg(&gSyncDmaQueue, NULL, 1);
MQ_WAIT_FOR_MESG(&gSyncDmaQueue, NULL);
size -= 0x400;
devAddr += 0x400;
ramAddr += 0x400;
}
if (size != 0) {
AudioLoad_Dma(&gSyncDmaIoMsg, 1, 0, devAddr, ramAddr, size, &gSyncDmaQueue, medium, D_800C50F4);
osRecvMesg(&gSyncDmaQueue, NULL, 1);
MQ_WAIT_FOR_MESG(&gSyncDmaQueue, NULL);
}
}
@@ -737,7 +737,7 @@ void* AudioLoad_AsyncLoadInner(s32 tableType, s32 id, s32 nChunks, s32 retData,
ramAddr = AudioLoad_SearchCaches(tableType, id);
if (ramAddr != NULL) {
loadStatus = 2;
osSendMesg(retQueue, (void*) (retData << 0x18), 0);
osSendMesg(retQueue, (void*) (retData << 0x18), OS_MESG_NOBLOCK);
} else {
table = AudioLoad_GetLoadTable(tableType);
size = table->entries[id].size;
@@ -990,7 +990,7 @@ void AudioLoad_ProcessSlowLoads(s32 resetStatus) {
slowLoad = &gSlowLoads.slowLoad[i];
switch (slowLoad->state) {
case 2:
osRecvMesg(&slowLoad->msgQueue, NULL, 1);
MQ_WAIT_FOR_MESG(&slowLoad->mesgQueue, NULL);
if (resetStatus != 0) {
slowLoad->state = 3;
break;
@@ -1035,8 +1035,8 @@ static char devstr47[] = "Other Type: Not Write ID.\n";
void AudioLoad_DmaSlowCopy(AudioSlowLoad* slowLoad, s32 size) {
osInvalDCache(slowLoad->curRamAddr, size);
osCreateMesgQueue(&slowLoad->msgQueue, &slowLoad->msg, 1);
AudioLoad_Dma(&slowLoad->ioMesg, 0, 0, slowLoad->curDevAddr, slowLoad->curRamAddr, size, &slowLoad->msgQueue,
osCreateMesgQueue(&slowLoad->mesgQueue, &slowLoad->msg, 1);
AudioLoad_Dma(&slowLoad->ioMesg, 0, 0, slowLoad->curDevAddr, slowLoad->curRamAddr, size, &slowLoad->mesgQueue,
slowLoad->medium, D_800C52F4);
}
@@ -1081,7 +1081,7 @@ AudioAsyncLoad* AudioLoad_StartAsyncLoad(u32 devAddr, u8* ramAddr, u32 size, s32
asyncLoad->medium = medium;
asyncLoad->retMsg = retMesg;
osCreateMesgQueue(&asyncLoad->msgQueue, &asyncLoad->msg, 1);
osCreateMesgQueue(&asyncLoad->mesgQueue, &asyncLoad->msg, 1);
return asyncLoad;
}
@@ -1114,11 +1114,11 @@ void AudioLoad_ProcessAsyncLoad(AudioAsyncLoad* asyncLoad, s32 resetStatus) {
asyncLoad->delay = 0;
} else {
if (resetStatus != 0) {
osRecvMesg(&asyncLoad->msgQueue, NULL, 1);
MQ_WAIT_FOR_MESG(&asyncLoad->mesgQueue, NULL);
asyncLoad->status = 0;
return;
}
if (osRecvMesg(&asyncLoad->msgQueue, NULL, 0) == -1) {
if (!MQ_GET_MESG(&asyncLoad->mesgQueue, NULL)) {
return;
}
}
@@ -1160,7 +1160,7 @@ void AudioLoad_ProcessAsyncLoad(AudioAsyncLoad* asyncLoad, s32 resetStatus) {
break;
}
asyncLoad->status = 0;
osSendMesg(asyncLoad->retQueue, asyncLoad->retMsg, 0);
osSendMesg(asyncLoad->retQueue, asyncLoad->retMsg, OS_MESG_NOBLOCK);
} else {
if (asyncLoad->bytesRemaining < asyncLoad->chunkSize) {
if (asyncLoad->medium == MEDIUM_UNK) {
@@ -1190,9 +1190,9 @@ static char D_800C53AC[] = "BGCOPY";
void AudioLoad_AsyncDma(AudioAsyncLoad* asyncLoad, u32 size) {
size = ALIGN16(size);
osInvalDCache(asyncLoad->curRamAddr, size);
osCreateMesgQueue(&asyncLoad->msgQueue, &asyncLoad->msg, 1);
osCreateMesgQueue(&asyncLoad->mesgQueue, &asyncLoad->msg, 1);
if (size) {}
AudioLoad_Dma(&asyncLoad->ioMesg, 0, 0, asyncLoad->curDevAddr, asyncLoad->curRamAddr, size, &asyncLoad->msgQueue,
AudioLoad_Dma(&asyncLoad->ioMesg, 0, 0, asyncLoad->curDevAddr, asyncLoad->curRamAddr, size, &asyncLoad->mesgQueue,
asyncLoad->medium, D_800C53AC);
}
@@ -1353,11 +1353,11 @@ s32 AudioLoad_ProcessSamplePreloads(s32 resetStatus) {
if (gPreloadSampleStackTop > 0) {
if (resetStatus != 0) {
if (osRecvMesg(&gPreloadSampleQueue, (OSMesg) &preloadIndex, 0)) {}
if (!MQ_GET_MESG(&gPreloadSampleQueue, &preloadIndex)) {}
gPreloadSampleStackTop = 0;
return false;
}
if (osRecvMesg(&gPreloadSampleQueue, (OSMesg) &preloadIndex, 0) == -1) {
if (!MQ_GET_MESG(&gPreloadSampleQueue, &preloadIndex)) {
return false;
}
// "Receive %d\n"
+46 -46
View File
@@ -165,44 +165,44 @@ TunedSample* func_80011D10(Instrument* instrument, s32 arg1) {
return sample;
}
Instrument* Audio_GetInstrument(s32 arg0, s32 arg1) {
Instrument* temp_v1;
Instrument* Audio_GetInstrument(s32 fontId, s32 instId) {
Instrument* instrument;
if ((gFontLoadStatus[arg0] < 2) != 0) {
D_80155D88 = arg0 + 0x10000000;
if ((gFontLoadStatus[fontId] < 2) != 0) {
D_80155D88 = fontId + 0x10000000;
return NULL;
}
if (arg1 >= gSoundFontList[arg0].numInstruments) {
D_80155D88 = (arg0 << 8) + arg1 + 0x03000000;
if (instId >= gSoundFontList[fontId].numInstruments) {
D_80155D88 = (fontId << 8) + instId + 0x03000000;
return NULL;
}
temp_v1 = gSoundFontList[arg0].instruments[arg1];
if (temp_v1 == NULL) {
D_80155D88 = (arg0 << 8) + arg1 + 0x01000000;
return temp_v1;
instrument = gSoundFontList[fontId].instruments[instId];
if (instrument == NULL) {
D_80155D88 = (fontId << 8) + instId + 0x01000000;
return instrument;
}
return temp_v1;
return instrument;
}
Drum* Audio_GetDrum(s32 arg0, s32 arg1) {
Drum* temp;
Drum* Audio_GetDrum(s32 fontId, s32 drumId) {
Drum* drum;
if ((gFontLoadStatus[arg0] < 2) != 0) {
D_80155D88 = arg0 + 0x10000000;
if ((gFontLoadStatus[fontId] < 2) != 0) {
D_80155D88 = fontId + 0x10000000;
return NULL;
}
if (arg1 >= gSoundFontList[arg0].numDrums) {
D_80155D88 = (arg0 << 8) + arg1 + 0x04000000;
if (drumId >= gSoundFontList[fontId].numDrums) {
D_80155D88 = (fontId << 8) + drumId + 0x04000000;
return NULL;
}
if ((u32) gSoundFontList[arg0].drums < AUDIO_RELOCATED_ADDRESS_START) {
if ((u32) gSoundFontList[fontId].drums < AUDIO_RELOCATED_ADDRESS_START) {
return NULL;
}
temp = gSoundFontList[arg0].drums[arg1];
if (gSoundFontList[arg0].drums[arg1] == NULL) {
D_80155D88 = (arg0 << 8) + arg1 + 0x05000000;
drum = gSoundFontList[fontId].drums[drumId];
if (gSoundFontList[fontId].drums[drumId] == NULL) {
D_80155D88 = (fontId << 8) + drumId + 0x05000000;
}
return temp;
return drum;
}
void func_80011EB8(Note* note) {
@@ -428,35 +428,35 @@ void func_8001268C(SequenceLayer* layer) {
func_80012438(layer, 7);
}
s32 func_800126AC(Note* note, SequenceLayer* layer, s32 arg2) {
f32 var_fv0;
u8 var_v1 = 0;
s32 func_800126AC(Note* note, SequenceLayer* layer, s32 waveId) {
f32 freqMod;
u8 harmonicIndex = 0;
if (arg2 < 128) {
arg2 = 128;
if (waveId < 128) {
waveId = 128;
}
var_fv0 = layer->freqMod;
freqMod = layer->freqMod;
if ((layer->portamento.mode != 0) && (layer->portamento.extent > 0.0f)) {
var_fv0 *= layer->portamento.extent + 1.0f;
freqMod *= layer->portamento.extent + 1.0f;
}
if (var_fv0 < 1.0f) {
var_fv0 = 1.0465f;
} else if (var_fv0 < 2.0f) {
var_v1 = 1;
var_fv0 = 0.52325f;
} else if (var_fv0 < 4.0f) {
var_v1 = 2;
var_fv0 = 0.26263f;
if (freqMod < 1.0f) {
freqMod = 1.0465f;
} else if (freqMod < 2.0f) {
harmonicIndex = 1;
freqMod = 0.52325f;
} else if (freqMod < 4.0f) {
harmonicIndex = 2;
freqMod = 0.26263f;
} else {
var_v1 = 3;
var_fv0 = 0.13081f;
harmonicIndex = 3;
freqMod = 0.13081f;
}
layer->freqMod *= var_fv0;
note->playbackState.waveId = arg2;
note->playbackState.harmonicIndex = var_v1;
note->noteSubEu.waveSampleAddr = &gWaveSamples[arg2 - 128][var_v1 * 64];
return var_v1;
layer->freqMod *= freqMod;
note->playbackState.waveId = waveId;
note->playbackState.harmonicIndex = harmonicIndex;
note->noteSubEu.waveSampleAddr = &gWaveSamples[waveId - 128][harmonicIndex * 64];
return harmonicIndex;
}
void func_800127B0(Note* note, SequenceLayer* layer) {
@@ -601,7 +601,7 @@ void func_80012C40(Note* note) {
}
}
Note* func_80012C6C(AudioListItem* item, s32 arg1) {
Note* func_80012C6C(AudioListItem* item, s32 priority) {
AudioListItem* var_v0;
AudioListItem* var_v1;
void* temp_a0;
@@ -620,7 +620,7 @@ Note* func_80012C6C(AudioListItem* item, s32 arg1) {
return NULL;
}
if (((Note*) var_v1->u.value)->playbackState.priority >= arg1) {
if (((Note*) var_v1->u.value)->playbackState.priority >= priority) {
return NULL;
}
return (Note*) var_v1->u.value;
+103 -103
View File
@@ -349,25 +349,25 @@ void func_80014748(SequenceLayer* layer) {
break;
}
switch (cmd) { /* switch 5; irregular */
case 0xFF: /* switch 5 */
case 0xFF:
if (state->depth == 0) {
func_800140D0(layer);
return;
}
state->pc = state->stack[--state->depth];
break;
case 0xFC: /* switch 5 */
case 0xFC:
sp44 = func_800146D4(state);
state->stack[state->depth] = state->pc;
state->depth++;
state->pc = &seqPlayer->seqData[sp44];
break;
case 0xF8: /* switch 5 */
case 0xF8:
state->remLoopIters[state->depth] = func_800146C0(state);
state->stack[state->depth] = state->pc;
state->depth++;
break;
case 0xF7: /* switch 5 */
case 0xF7:
state->remLoopIters[state->depth - 1]--;
if (state->remLoopIters[state->depth - 1] != 0) {
state->pc = state->stack[state->depth - 1];
@@ -375,15 +375,15 @@ void func_80014748(SequenceLayer* layer) {
state->depth--;
}
break;
case 0xFB: /* switch 5 */
case 0xFB:
sp44 = func_800146D4(state);
state->pc = &seqPlayer->seqData[sp44];
break;
case 0xF4: /* switch 5 */
case 0xF4:
state->pc += (s8) func_800146C0(state);
break;
case 0xC1: /* switch 5 */
case 0xCA: /* switch 5 */
case 0xC1:
case 0xCA:
var_s2 = *state->pc++;
if (cmd == 0xC1) {
layer->velocitySquare = (f32) (var_s2 * var_s2) / 16129.0f;
@@ -391,8 +391,8 @@ void func_80014748(SequenceLayer* layer) {
layer->pan = var_s2;
}
break;
case 0xC2: /* switch 5 */
case 0xC9: /* switch 5 */
case 0xC2:
case 0xC9:
var_s2 = *state->pc++;
if (cmd == 0xC9) {
layer->gateTime = var_s2;
@@ -400,8 +400,8 @@ void func_80014748(SequenceLayer* layer) {
layer->transposition = var_s2;
}
break;
case 0xC4: /* switch 5 */
case 0xC5: /* switch 5 */
case 0xC4:
case 0xC5:
if (cmd == 0xC4) {
layer->continuousNotes = 1;
} else {
@@ -409,11 +409,11 @@ void func_80014748(SequenceLayer* layer) {
}
func_8001266C(layer);
break;
case 0xC3: /* switch 5 */
case 0xC3:
sp44 = func_80014704(state);
layer->shortNoteDefaultDelay = sp44;
break;
case 0xC6: /* switch 5 */
case 0xC6:
cmd = func_800146C0(state);
if (cmd >= 127) {
if (cmd == 127) {
@@ -433,7 +433,7 @@ void func_80014748(SequenceLayer* layer) {
}
}
break;
case 0xC7: /* switch 5 */
case 0xC7:
layer->portamento.mode = func_800146C0(state);
cmd = func_800146C0(state) + channel->transposition + layer->transposition + seqPlayer->transposition;
if (cmd > 127) {
@@ -447,27 +447,27 @@ void func_80014748(SequenceLayer* layer) {
layer->portamentoTime = sp44;
}
break;
case 0xC8: /* switch 5 */
case 0xC8:
layer->portamento.mode = 0;
break;
case 0xCB: /* switch 5 */
case 0xCB:
sp44 = func_800146D4(state);
layer->adsr.envelope = (EnvelopePoint*) &seqPlayer->seqData[sp44];
layer->adsr.decayIndex = func_800146C0(state);
break;
case 0xCC: /* switch 5 */
case 0xCC:
layer->bit1 = 1;
break;
case 0xCD: /* switch 5 */
case 0xCD:
layer->stereo.asByte = func_800146C0(state);
break;
default: /* switch 5 */
default:
switch (cmd & 0xF0) { /* switch 6; irregular */
case 0xD0: /* switch 6 */
case 0xD0:
sp44 = (u16) seqPlayer->shortNoteVelocityTable[cmd & 0xF];
layer->velocitySquare = (f32) (sp44 * sp44) / 16129.0f;
break;
case 0xE0: /* switch 6 */
case 0xE0:
layer->gateTime = seqPlayer->shortNoteGateTimeTable[cmd & 0xF];
break;
default:
@@ -518,14 +518,14 @@ void func_80014748(SequenceLayer* layer) {
cmd -= (cmd & 0xC0);
} else {
switch (cmd & 0xC0) { /* switch 4; irregular */
case 0x0: /* switch 4 */
case 0x0:
sp44 = func_80014704(state);
layer->lastDelay = sp44;
break;
case 0x40: /* switch 4 */
case 0x40:
sp44 = layer->shortNoteDefaultDelay;
break;
case 0x80: /* switch 4 */
case 0x80:
sp44 = layer->lastDelay;
break;
}
@@ -587,19 +587,19 @@ void func_80014748(SequenceLayer* layer) {
temp_fv1 = gPitchFrequencies[cmd] * tuning;
temp_fa1 = gPitchFrequencies[layer->portamentoTargetNote] * tuning;
portamento = &layer->portamento;
switch (portamento->mode & ~0x80) { /* switch 3 */
case 1: /* switch 3 */
case 3: /* switch 3 */
case 5: /* switch 3 */
switch (portamento->mode & ~0x80) {
case 1:
case 3:
case 5:
var_v0_2 = temp_fv1;
freqMod = temp_fa1;
break;
case 2: /* switch 3 */
case 4: /* switch 3 */
case 2:
case 4:
freqMod = temp_fv1;
var_v0_2 = temp_fa1;
break;
default: /* switch 3 */
default:
freqMod = temp_fv1;
var_v0_2 = temp_fv1;
break;
@@ -741,7 +741,7 @@ void func_800153E8(SequenceChannel* channel) {
case 0xD5:
case 0xD6:
break;
case 0xFF: /* switch 3 */
case 0xFF:
if (state->depth == 0) {
func_8001415C(channel);
goto end_loop;
@@ -750,10 +750,10 @@ void func_800153E8(SequenceChannel* channel) {
break;
case 0xFE:
goto end_loop;
case 0xFD: /* switch 3 */
case 0xFD:
channel->delay = func_80014704(state);
goto end_loop;
case 0xEA: /* switch 3 */
case 0xEA:
channel->stopScript = 1;
goto end_loop;
case 0xFC:
@@ -764,14 +764,14 @@ void func_800153E8(SequenceChannel* channel) {
state->depth++;
state->pc = &seqPlayer->seqData[sp52];
break;
case 0xF8: /* switch 3 */
case 0xF8:
// if (0 && state->depth >= 4) {
// }
state->remLoopIters[state->depth] = func_800146C0(state);
state->stack[state->depth] = state->pc;
state->depth++;
break;
case 0xF7: /* switch 3 */
case 0xF7:
state->remLoopIters[state->depth - 1]--;
if (state->remLoopIters[state->depth - 1] != 0) {
state->pc = state->stack[state->depth - 1];
@@ -779,13 +779,13 @@ void func_800153E8(SequenceChannel* channel) {
state->depth--;
}
break;
case 0xF6: /* switch 3 */
case 0xF6:
state->depth--;
break;
case 0xF5: /* switch 3 */
case 0xF9: /* switch 3 */
case 0xFA: /* switch 3 */
case 0xFB: /* switch 3 */
case 0xF5:
case 0xF9:
case 0xFA:
case 0xFB:
sp52 = func_800146D4(state);
if (((cmd == 0xFA) && (sp4B != 0)) || ((cmd == 0xF9) && (sp4B >= 0)) ||
((cmd == 0xF5) && (sp4B < 0))) {
@@ -793,34 +793,34 @@ void func_800153E8(SequenceChannel* channel) {
}
state->pc = &seqPlayer->seqData[sp52];
break;
case 0xF2: /* switch 3 */
case 0xF3: /* switch 3 */
case 0xF4: /* switch 3 */
case 0xF2:
case 0xF3:
case 0xF4:
temps8 = func_800146C0(state);
if (((cmd == 0xF3) && (sp4B != 0)) || ((cmd == 0xF2) && (sp4B >= 0))) {
break;
}
state->pc = &state->pc[temps8];
break;
case 0xF1: /* switch 3 */
case 0xF1:
func_80012964(&channel->notePool);
func_80012AC4(&channel->notePool, func_800146C0(state));
break;
case 0xF0: /* switch 3 */
case 0xF0:
func_80012964(&channel->notePool);
break;
case 0xC2: /* switch 3 */
case 0xC2:
sp52 = func_800146D4(state);
channel->dynTable = (u8(*)[2]) & seqPlayer->seqData[sp52];
break;
case 0xC5: /* switch 3 */
case 0xC5:
if (sp4B != -1) {
seqData = channel->dynTable[sp4B];
sp52 = (seqData[0] << 8) + seqData[1];
channel->dynTable = (u8(*)[2]) & seqPlayer->seqData[sp52];
}
break;
case 0xEB: /* switch 3 */
case 0xEB:
cmd = func_800146C0(state);
sp52 = ((u16*) gSeqFontTable)[seqPlayer->seqId];
loBits = gSeqFontTable[sp52];
@@ -829,85 +829,85 @@ void func_800153E8(SequenceChannel* channel) {
channel->fontId = cmd;
}
/* fallthrough */
case 0xC1: /* switch 3 */
case 0xC1:
cmd = func_800146C0(state);
func_80015330(channel, cmd);
break;
case 0xC3: /* switch 3 */
case 0xC3:
channel->largeNotes = false;
break;
case 0xC4: /* switch 3 */
case 0xC4:
channel->largeNotes = true;
break;
case 0xDF: /* switch 3 */
case 0xDF:
cmd = func_800146C0(state);
func_800153C4(channel, cmd);
channel->changes.s.volume = 1;
break;
case 0xE0: /* switch 3 */
case 0xE0:
channel->volumeMod = (s32) func_800146C0(state) * 0.0078125f;
channel->changes.s.volume = 1;
break;
case 0xDE: /* switch 3 */
case 0xDE:
sp52 = func_800146D4(state);
channel->freqMod = (s32) sp52 / 32768.0f;
channel->changes.s.freqMod = 1;
break;
case 0xD3: /* switch 3 */
case 0xD3:
cmd = func_800146C0(state) + 0x80;
channel->freqMod = gBendPitchOneOctaveFrequencies[cmd];
channel->changes.s.freqMod = 1;
break;
case 0xEE: /* switch 3 */
case 0xEE:
cmd = func_800146C0(state) + 0x80;
channel->freqMod = gBendPitchTwoSemitonesFrequencies[cmd];
channel->changes.s.freqMod = 1;
break;
case 0xDD: /* switch 3 */
case 0xDD:
channel->newPan = func_800146C0(state);
channel->changes.s.pan = 1;
break;
case 0xDC: /* switch 3 */
case 0xDC:
channel->panChannelWeight = func_800146C0(state);
channel->changes.s.pan = 1;
break;
case 0xDB: /* switch 3 */
case 0xDB:
temps8 = *(state->pc++);
channel->transposition = temps8;
break;
case 0xDA: /* switch 3 */
case 0xDA:
sp52 = func_800146D4(state);
channel->adsr.envelope = (EnvelopePoint*) &seqPlayer->seqData[sp52];
break;
case 0xD9: /* switch 3 */
case 0xD9:
channel->adsr.decayIndex = func_800146C0(state);
break;
case 0xD8: /* switch 3 */
case 0xD8:
channel->vibratoDepthTarget = func_800146C0(state) * 8;
channel->vibratoDepthStart = 0;
channel->vibratoDepthChangeDelay = 0;
break;
case 0xD7: /* switch 3 */
case 0xD7:
channel->vibratoRateStart = channel->vibratoRateTarget = func_800146C0(state) * 32;
channel->vibratoRateChangeDelay = 0;
break;
case 0xE2: /* switch 3 */
case 0xE2:
channel->vibratoDepthStart = func_800146C0(state) * 8;
channel->vibratoDepthTarget = func_800146C0(state) * 8;
channel->vibratoDepthChangeDelay = func_800146C0(state) * 0x10;
break;
case 0xE1: /* switch 3 */
case 0xE1:
channel->vibratoRateStart = func_800146C0(state) * 32;
channel->vibratoRateTarget = func_800146C0(state) * 32;
channel->vibratoRateChangeDelay = func_800146C0(state) * 0x10;
break;
case 0xE3: /* switch 3 */
case 0xE3:
channel->vibratoDelay = func_800146C0(state) * 0x10;
break;
case 0xD4: /* switch 3 */
case 0xD4:
channel->targetReverbVol = func_800146C0(state);
break;
case 0xC6: /* switch 3 */
case 0xC6:
cmd = func_800146C0(state);
sp52 = ((u16*) gSeqFontTable)[seqPlayer->seqId];
loBits = gSeqFontTable[sp52];
@@ -916,15 +916,15 @@ void func_800153E8(SequenceChannel* channel) {
channel->fontId = cmd;
}
break;
case 0xC7: /* switch 3 */
case 0xC7:
cmd = func_800146C0(state);
sp52 = func_800146D4(state);
seqData = &seqPlayer->seqData[sp52];
*seqData = (u8) sp4B + cmd;
break;
case 0xC8: /* switch 3 */
case 0xC9: /* switch 3 */
case 0xCC: /* switch 3 */
case 0xC8:
case 0xC9:
case 0xCC:
temps8 = func_800146C0(state);
if (cmd == 0xC8) {
sp4B -= temps8;
@@ -934,40 +934,40 @@ void func_800153E8(SequenceChannel* channel) {
sp4B &= temps8;
}
break;
case 0xCD: /* switch 3 */
case 0xCD:
func_8001415C(seqPlayer->channels[func_800146C0(state)]);
break;
case 0xCA: /* switch 3 */
case 0xCA:
channel->muteBehavior = func_800146C0(state);
break;
case 0xCB: /* switch 3 */
case 0xCB:
sp52 = func_800146D4(state);
pad = sp52 + sp4B;
// seqData =&seqPlayer->seqData[sp4B];
sp4B = seqPlayer->seqData[pad];
break;
case 0xCE: /* switch 3 */
case 0xCE:
channel->unkC4 = func_800146D4(state);
break;
case 0xCF: /* switch 3 */
case 0xCF:
sp52 = func_800146D4(state);
seqData = &seqPlayer->seqData[sp52];
seqData[0] = (channel->unkC4 >> 8) & 0xFF;
seqData[1] = channel->unkC4 & 0xFF;
break;
case 0xD0: /* switch 3 */
case 0xD0:
channel->stereoHeadsetEffects = func_800146C0(state);
break;
case 0xD1: /* switch 3 */
case 0xD1:
channel->noteAllocPolicy = func_800146C0(state);
break;
case 0xD2: /* switch 3 */
case 0xD2:
channel->adsr.sustain = func_800146C0(state);
break;
case 0xE5: /* switch 3 */
case 0xE5:
channel->someOtherPriority = func_800146C0(state);
break;
case 0xE4: /* switch 3 */
case 0xE4:
if (sp4B != -1) {
if (state->depth >= 4) {
// eu_stubbed_printf_0("Audio:Track: CTBLCALL Macro Level Over Error!\n");
@@ -982,10 +982,10 @@ void func_800153E8(SequenceChannel* channel) {
// }
}
break;
case 0xE6: /* switch 3 */
case 0xE6:
channel->bookOffset = func_800146C0(state);
break;
case 0xE7: /* switch 3 */
case 0xE7:
sp52 = func_800146D4(state);
seqData = &seqPlayer->seqData[sp52];
channel->muteBehavior = *seqData++;
@@ -998,7 +998,7 @@ void func_800153E8(SequenceChannel* channel) {
channel->someOtherPriority = *seqData++;
channel->changes.s.pan = 1;
break;
case 0xE8: /* switch 3 */
case 0xE8:
channel->muteBehavior = func_800146C0(state);
channel->noteAllocPolicy = func_800146C0(state);
channel->notePriority = func_800146C0(state);
@@ -1009,7 +1009,7 @@ void func_800153E8(SequenceChannel* channel) {
channel->someOtherPriority = func_800146C0(state);
channel->changes.s.pan = 1;
break;
case 0xEC: /* switch 3 */
case 0xEC:
channel->vibratoDepthTarget = 0;
channel->vibratoDepthStart = 0;
channel->vibratoDepthChangeDelay = 0;
@@ -1018,58 +1018,58 @@ void func_800153E8(SequenceChannel* channel) {
channel->vibratoRateChangeDelay = 0;
channel->freqMod = 1.0f;
break;
case 0xE9: /* switch 3 */
case 0xE9:
channel->notePriority = func_800146C0(state);
break;
case 0xED: /* switch 3 */
case 0xED:
// cmd =
channel->reverbIndex = func_800146C0(state);
break;
case 0xEF: /* switch 3 */
case 0xEF:
func_800146D4(state);
func_800146C0(state);
break;
}
} else {
loBits = cmd & 0xF;
switch (cmd & 0xF0) { /* switch 2 */
case 0x0: /* switch 2 */
switch (cmd & 0xF0) {
case 0x0:
if (channel->layers[loBits] != NULL) {
sp4B = channel->layers[loBits]->finished;
} else {
sp4B = -1;
}
break;
case 0x10: /* switch 2 */
case 0x10:
channel->seqScriptIO[loBits] = -1;
if (AudioLoad_SlowLoadSample(channel->fontId, sp4B, &channel->seqScriptIO[loBits]) == -1) {}
break;
case 0x70: /* switch 2 */
case 0x70:
channel->seqScriptIO[loBits] = sp4B;
break;
case 0x80: /* switch 2 */
case 0x80:
sp4B = channel->seqScriptIO[loBits];
if (loBits < 4) {
channel->seqScriptIO[loBits] = -1;
}
break;
case 0x50: /* switch 2 */
case 0x50:
sp4B -= channel->seqScriptIO[loBits];
break;
case 0x60: /* switch 2 */
case 0x60:
channel->delay = loBits;
goto end_loop;
case 0x90: /* switch 2 */
case 0x90:
sp52 = func_800146D4(state);
if (func_80013FC4(channel, loBits) == 0) {
// if(1) {}
channel->layers[loBits]->state.pc = &seqPlayer->seqData[sp52];
}
break;
case 0xA0: /* switch 2 */
case 0xA0:
func_8001410C(channel, loBits);
break;
case 0xB0: /* switch 2 */
case 0xB0:
if ((sp4B != -1) && (func_80013FC4(channel, loBits) != -1)) {
seqData = channel->dynTable[sp4B];
sp52 = (seqData[0] << 8) + seqData[1];
@@ -1080,11 +1080,11 @@ void func_800153E8(SequenceChannel* channel) {
sp52 = func_800146D4(state);
func_80014440(seqPlayer, loBits, &seqPlayer->seqData[sp52]);
break;
case 0x30: /* switch 2 */
case 0x30:
cmd = func_800146C0(state);
seqPlayer->channels[loBits]->seqScriptIO[cmd] = sp4B;
break;
case 0x40: /* switch 2 */
case 0x40:
cmd = func_800146C0(state);
sp4B = seqPlayer->channels[loBits]->seqScriptIO[cmd];
break;
+3 -1
View File
@@ -1,7 +1,9 @@
#include "sys.h"
#include "sf64audio_provisional.h"
s32 D_80145D40;
s32 D_80145D40; // unused
// all of these are part of the DFT-related function
f32 D_80145D48[256];
f32 D_80146148[256];
f32 D_80146548[515];
+24 -26
View File
@@ -8,19 +8,19 @@ void AudioThread_SetFadeInTimer(s32 seqPlayId, s32 fadeTime);
OSMesgQueue sAudioTaskStartQueue;
OSMesgQueue sThreadCmdProcQueue;
OSMesgQueue sAudioUnkQueue;
OSMesgQueue sAudioSpecQueue;
OSMesgQueue sAudioResetQueue;
AudioCmd gThreadCmdBuffer[256];
OSMesg sAudioTaskStartMsg[1];
OSMesg sThreadCmdProcMsg[4];
OSMesg sAudioUnkMsg[1];
OSMesg sAudioSpecMsg[1];
OSMesg sAudioResetMsg[1];
u8 gThreadCmdWritePos = 0;
u8 gThreadCmdReadPos = 0;
OSMesgQueue* gAudioTaskStartQueue = &sAudioTaskStartQueue;
OSMesgQueue* gThreadCmdProcQueue = &sThreadCmdProcQueue;
OSMesgQueue* gAudioUnkQueue = &sAudioUnkQueue;
OSMesgQueue* gAudioSpecQueue = &sAudioSpecQueue;
OSMesgQueue* gAudioResetQueue = &sAudioResetQueue;
static const char devstr0[] = "DAC:Lost 1 Frame.\n";
@@ -57,7 +57,7 @@ SPTask* AudioThread_CreateTask(void) {
if ((gAudioTaskCountQ % gAudioBufferParams.count) != 0) {
return gWaitingAudioTask;
}
osSendMesg(gAudioTaskStartQueue, (OSMesg) gAudioTaskCountQ, 0);
osSendMesg(gAudioTaskStartQueue, (OSMesg) gAudioTaskCountQ, OS_MESG_NOBLOCK);
gAudioTaskIndexQ ^= 1;
gCurAiBuffIndex++;
gCurAiBuffIndex %= 3;
@@ -71,7 +71,7 @@ SPTask* AudioThread_CreateTask(void) {
gCurAudioFrameDmaCount = 0;
AudioLoad_DecreaseSampleDmaTtls();
AudioLoad_ProcessLoads(gResetStatus);
if (osRecvMesg(gAudioUnkQueue, (OSMesg) &sp38, 0) != -1) {
if (MQ_GET_MESG(gAudioSpecQueue, &sp38)) {
if (gResetStatus == 0) {
gResetStatus = 5;
}
@@ -79,7 +79,7 @@ SPTask* AudioThread_CreateTask(void) {
}
if ((gResetStatus != 0) && (AudioHeap_ResetStep() == 0)) {
if (gResetStatus == 0) {
osSendMesg(gAudioResetQueue, (OSMesg) (s32) gAudioSpecId, 0);
osSendMesg(gAudioResetQueue, (OSMesg) (s32) gAudioSpecId, OS_MESG_NOBLOCK);
}
gWaitingAudioTask = NULL;
return NULL;
@@ -102,7 +102,7 @@ SPTask* AudioThread_CreateTask(void) {
if (gAiBuffLengths[sp4C] > gAudioBufferParams.maxAiBufferLength) {
gAiBuffLengths[sp4C] = gAudioBufferParams.maxAiBufferLength;
}
while (osRecvMesg(gThreadCmdProcQueue, (OSMesg) &sp34, 0) != -1) {
while (MQ_GET_MESG(gThreadCmdProcQueue, &sp34)) {
AudioThread_ProcessCmds(sp34);
}
gCurAbiCmdBuffer = func_80009B64(gCurAbiCmdBuffer, &sp50, sp40, gAiBuffLengths[sp4C]);
@@ -111,7 +111,7 @@ SPTask* AudioThread_CreateTask(void) {
sp4C = gAudioTaskIndexQ;
gAudioCurTask->msgQueue = NULL;
gAudioCurTask->mesgQueue = NULL;
gAudioCurTask->msg = NULL;
task = &gAudioCurTask->task.t;
@@ -244,7 +244,7 @@ void AudioThread_InitQueues(void) {
gThreadCmdReadPos = 0;
osCreateMesgQueue(gAudioTaskStartQueue, sAudioTaskStartMsg, 1);
osCreateMesgQueue(gThreadCmdProcQueue, sThreadCmdProcMsg, 4);
osCreateMesgQueue(gAudioUnkQueue, sAudioUnkMsg, 1);
osCreateMesgQueue(gAudioSpecQueue, sAudioSpecMsg, 1);
osCreateMesgQueue(gAudioResetQueue, sAudioResetMsg, 1);
}
@@ -282,7 +282,7 @@ void AudioThread_ScheduleProcessCmds(void) {
D_800C7C70 = (u8) (gThreadCmdWritePos - gThreadCmdReadPos + 0x100);
}
msg = (((gThreadCmdReadPos & 0xFF) << 8) | (gThreadCmdWritePos & 0xFF));
osSendMesg(gThreadCmdProcQueue, (OSMesg) msg, 0);
osSendMesg(gThreadCmdProcQueue, (OSMesg) msg, OS_MESG_NOBLOCK);
gThreadCmdReadPos = gThreadCmdWritePos;
}
@@ -327,10 +327,10 @@ void AudioThread_ProcessCmds(u32 msg) {
player->recalculateVolume = true;
}
break;
case AUDIOCMD_OP_SEQPLAYER_SET_TEMPO: /* switch 1 */
case AUDIOCMD_OP_SEQPLAYER_SET_TEMPO:
player->tempo = cmd->asInt * 48;
break;
case AUDIOCMD_OP_SEQPLAYER_SET_TRANSPOSITION: /* switch 1 */
case AUDIOCMD_OP_SEQPLAYER_SET_TRANSPOSITION:
player->transposition = cmd->asSbyte;
break;
case 0x46: // AUDIOCMD_OP_SEQPLAYER_SET_IO?
@@ -387,45 +387,43 @@ void AudioThread_ProcessCmds(u32 msg) {
}
u32 AudioThread_GetAsyncLoadStatus(u32* outData) {
u32 sp1C;
u32 loadStatus;
if (osRecvMesg(&gExternalLoadQueue, (OSMesg*) &sp1C, 0) == -1) {
if (!MQ_GET_MESG(&gExternalLoadQueue, &loadStatus)) {
*outData = 0;
return 0;
}
*outData = sp1C & 0xFFFFFF;
return sp1C >> 0x18;
*outData = loadStatus & 0xFFFFFF;
return loadStatus >> 0x18;
}
u8* AudioThread_GetFontsForSequence(s32 seqId, u32* outNumFonts) {
return AudioLoad_GetFontsForSequence(seqId, outNumFonts);
}
s32 func_8001ED34(void) {
bool AudioThread_ResetComplete(void) {
s32 pad;
s32 sp18;
if (osRecvMesg(gAudioResetQueue, (OSMesg*) &sp18, 0) == -1) {
return 0;
if (!MQ_GET_MESG(gAudioResetQueue, &sp18)) {
return false;
}
if (sp18 != gAudioSpecId) {
return 0;
return false;
}
return 1;
return true;
}
void AudioThread_ResetAudioHeap(s32 specId) {
// clang-format off
s32 m1 = -1;OSMesg sp28;do {} while (osRecvMesg(gAudioResetQueue, &sp28, 0) != m1);
// clang-format on
MQ_CLEAR_QUEUE(gAudioResetQueue);
AudioThread_ResetCmdQueue();
osSendMesg(gAudioUnkQueue, (OSMesg) specId, 0);
osSendMesg(gAudioSpecQueue, (OSMesg) specId, OS_MESG_NOBLOCK);
}
void AudioThread_PreNMIReset(void) {
gResetTimer = 1;
AudioThread_ResetAudioHeap(0);
AudioThread_ResetAudioHeap(AUDIOSPEC_0);
gResetStatus = 0;
}