From e44c7c656c8d3ff730503f09f6000f1526b28bd0 Mon Sep 17 00:00:00 2001 From: cadmic Date: Tue, 3 Sep 2024 17:32:38 -0700 Subject: [PATCH] [ntsc-1.2] Match audio (#2122) * general.c mostly ok * match remaining audio funcs * comments * Finish matching audio --------- Co-authored-by: engineer124 --- include/functions.h | 1 + src/audio/general.c | 192 +++++++++++++++++++++++---- src/audio/lib/seqplayer.c | 13 ++ src/audio/lib/synthesis.c | 15 ++- src/audio/lib/thread.c | 7 + src/audio/sfx.c | 5 +- tools/disasm/ntsc-1.2/files_code.csv | 4 +- tools/disasm/ntsc-1.2/functions.txt | 4 +- 8 files changed, 207 insertions(+), 34 deletions(-) diff --git a/include/functions.h b/include/functions.h index 5614f33df2..adadeef622 100644 --- a/include/functions.h +++ b/include/functions.h @@ -1341,6 +1341,7 @@ void UCodeDisas_RegisterUCode(UCodeDisas*, s32, UCodeInfo*); void UCodeDisas_SetCurUCode(UCodeDisas*, void*); Acmd* AudioSynth_Update(Acmd* cmdStart, s32* cmdCnt, s16* aiStart, s32 aiBufLen); void AudioHeap_DiscardFont(s32 fontId); +void AudioHeap_ReleaseNotesForFont(s32 fontId); void AudioHeap_DiscardSequence(s32 seqId); void AudioHeap_WritebackDCache(void* ramAddr, u32 size); void* AudioHeap_AllocZeroedAttemptExternal(AudioAllocPool* pool, u32 size); diff --git a/src/audio/general.c b/src/audio/general.c index 3bd7df2a5c..9ce7324d20 100644 --- a/src/audio/general.c +++ b/src/audio/general.c @@ -3,6 +3,14 @@ #define ABS_ALT(x) ((x) < 0 ? -(x) : (x)) +#if PLATFORM_GC +#define AUDIO_PRINTF osSyncPrintf +#elif IDO_PRINTF_WORKAROUND +#define AUDIO_PRINTF(args) (void)0 +#else +#define AUDIO_PRINTF(format, ...) (void)0 +#endif + typedef struct SfxPlayerState { /* 0x0 */ f32 vol; /* 0x4 */ f32 freqScale; @@ -850,10 +858,13 @@ NatureAmbienceDataIO sNatureAmbienceDataIO[20] = { }, }; +#if PLATFORM_GC u32 sOcarinaAllowedButtonMask = (BTN_A | BTN_CRIGHT | BTN_CLEFT | BTN_CDOWN | BTN_CUP); s32 sOcarinaAButtonMap = BTN_A; s32 sOcarinaCUpButtonMap = BTN_CUP; s32 sOcarinaCDownButtonMap = BTN_CDOWN; +#endif + u8 sIsOcarinaInputEnabled = false; s8 sOcarinaInstrumentId = OCARINA_INSTRUMENT_OFF; u8 sCurOcarinaPitch = OCARINA_PITCH_NONE; @@ -1257,6 +1268,11 @@ u8 D_8016B9F3; u8 sFanfareStartTimer; u16 sFanfareSeqId; +#if PLATFORM_N64 +// TODO: Unsure where in bss this is located +u16 sPrevAmbienceSeqId; +#endif + OcarinaStaff sPlayingStaff; OcarinaStaff sPlaybackStaff; OcarinaStaff sRecordingStaff; @@ -1292,22 +1308,38 @@ s32 Audio_SetGanonsTowerBgmVolume(u8 targetVol); // =========== Audio Ocarina =========== +#if PLATFORM_N64 + +#define OCARINA_ALLOWED_BUTTON_MASK (BTN_A | BTN_CRIGHT | BTN_CLEFT | BTN_CDOWN | BTN_CUP) +#define OCARINA_A_MAP BTN_A +#define OCARINA_CUP_MAP BTN_CUP +#define OCARINA_CDOWN_MAP BTN_CDOWN + +#else + +#define OCARINA_ALLOWED_BUTTON_MASK sOcarinaAllowedButtonMask +#define OCARINA_A_MAP sOcarinaAButtonMap +#define OCARINA_CUP_MAP sOcarinaCUpButtonMap +#define OCARINA_CDOWN_MAP sOcarinaCDownButtonMap + void AudioOcarina_SetCustomButtonMapping(u8 useCustom) { if (!useCustom) { - osSyncPrintf("AUDIO : Ocarina Control Assign Normal\n"); - sOcarinaAllowedButtonMask = (BTN_A | BTN_CUP | BTN_CDOWN | BTN_CLEFT | BTN_CRIGHT); - sOcarinaAButtonMap = BTN_A; - sOcarinaCUpButtonMap = BTN_CUP; - sOcarinaCDownButtonMap = BTN_CDOWN; + AUDIO_PRINTF("AUDIO : Ocarina Control Assign Normal\n"); + OCARINA_ALLOWED_BUTTON_MASK = (BTN_A | BTN_CUP | BTN_CDOWN | BTN_CLEFT | BTN_CRIGHT); + OCARINA_A_MAP = BTN_A; + OCARINA_CUP_MAP = BTN_CUP; + OCARINA_CDOWN_MAP = BTN_CDOWN; } else { - osSyncPrintf("AUDIO : Ocarina Control Assign Custom\n"); - sOcarinaAllowedButtonMask = (BTN_A | BTN_B | BTN_CDOWN | BTN_CLEFT | BTN_CRIGHT); - sOcarinaAButtonMap = BTN_B; - sOcarinaCUpButtonMap = BTN_CDOWN; - sOcarinaCDownButtonMap = BTN_A; + AUDIO_PRINTF("AUDIO : Ocarina Control Assign Custom\n"); + OCARINA_ALLOWED_BUTTON_MASK = (BTN_A | BTN_B | BTN_CDOWN | BTN_CLEFT | BTN_CRIGHT); + OCARINA_A_MAP = BTN_B; + OCARINA_CUP_MAP = BTN_CDOWN; + OCARINA_CDOWN_MAP = BTN_A; } } +#endif + void AudioOcarina_ReadControllerInput(void) { Input inputs[MAXCONTROLLERS]; Input* input = &inputs[0]; @@ -1608,7 +1640,7 @@ void AudioOcarina_CheckSongsWithoutMusicStaff(void) { u8 k; if (CHECK_BTN_ANY(sOcarinaInputButtonCur, BTN_L) && - CHECK_BTN_ANY(sOcarinaInputButtonCur, sOcarinaAllowedButtonMask)) { + CHECK_BTN_ANY(sOcarinaInputButtonCur, OCARINA_ALLOWED_BUTTON_MASK)) { AudioOcarina_Start((u16)sOcarinaFlags); return; } @@ -1679,14 +1711,14 @@ void AudioOcarina_PlayControllerInput(u8 unused) { } // Ensures the button pressed to start the ocarina does not also play an ocarina note - if ((sOcarinaInputButtonStart == 0) || ((sOcarinaInputButtonStart & sOcarinaAllowedButtonMask) != - (sOcarinaInputButtonCur & sOcarinaAllowedButtonMask))) { + if ((sOcarinaInputButtonStart == 0) || ((sOcarinaInputButtonStart & OCARINA_ALLOWED_BUTTON_MASK) != + (sOcarinaInputButtonCur & OCARINA_ALLOWED_BUTTON_MASK))) { sOcarinaInputButtonStart = 0; if (1) {} sCurOcarinaPitch = OCARINA_PITCH_NONE; sCurOcarinaButtonIndex = OCARINA_BTN_INVALID; - ocarinaBtnsHeld = (sOcarinaInputButtonCur & sOcarinaAllowedButtonMask) & - (sOcarinaInputButtonPrev & sOcarinaAllowedButtonMask); + ocarinaBtnsHeld = (sOcarinaInputButtonCur & OCARINA_ALLOWED_BUTTON_MASK) & + (sOcarinaInputButtonPrev & OCARINA_ALLOWED_BUTTON_MASK); if (!(sOcarinaInputButtonPress & ocarinaBtnsHeld) && (sOcarinaInputButtonCur != 0)) { sOcarinaInputButtonPress = sOcarinaInputButtonCur; } else { @@ -1694,32 +1726,36 @@ void AudioOcarina_PlayControllerInput(u8 unused) { } // Interprets and transforms controller input into ocarina buttons and notes - if (CHECK_BTN_ANY(sOcarinaInputButtonPress, sOcarinaAButtonMap)) { - osSyncPrintf("Presss NA_KEY_D4 %08x\n", sOcarinaAButtonMap); + if (CHECK_BTN_ANY(sOcarinaInputButtonPress, OCARINA_A_MAP)) { + AUDIO_PRINTF("Presss NA_KEY_D4 %08x\n", OCARINA_A_MAP); sCurOcarinaPitch = OCARINA_PITCH_D4; sCurOcarinaButtonIndex = OCARINA_BTN_A; - } else if (CHECK_BTN_ANY(sOcarinaInputButtonPress, sOcarinaCDownButtonMap)) { - osSyncPrintf("Presss NA_KEY_F4 %08x\n", sOcarinaCDownButtonMap); + } else if (CHECK_BTN_ANY(sOcarinaInputButtonPress, OCARINA_CDOWN_MAP)) { + AUDIO_PRINTF("Presss NA_KEY_F4 %08x\n", OCARINA_CDOWN_MAP); sCurOcarinaPitch = OCARINA_PITCH_F4; sCurOcarinaButtonIndex = OCARINA_BTN_C_DOWN; } else if (CHECK_BTN_ANY(sOcarinaInputButtonPress, BTN_CRIGHT)) { - osSyncPrintf("Presss NA_KEY_A4 %08x\n", BTN_CRIGHT); + AUDIO_PRINTF("Presss NA_KEY_A4 %08x\n", BTN_CRIGHT); sCurOcarinaPitch = OCARINA_PITCH_A4; sCurOcarinaButtonIndex = OCARINA_BTN_C_RIGHT; } else if (CHECK_BTN_ANY(sOcarinaInputButtonPress, BTN_CLEFT)) { - osSyncPrintf("Presss NA_KEY_B4 %08x\n", BTN_CLEFT); + AUDIO_PRINTF("Presss NA_KEY_B4 %08x\n", BTN_CLEFT); sCurOcarinaPitch = OCARINA_PITCH_B4; sCurOcarinaButtonIndex = OCARINA_BTN_C_LEFT; - } else if (CHECK_BTN_ANY(sOcarinaInputButtonPress, sOcarinaCUpButtonMap)) { - osSyncPrintf("Presss NA_KEY_D5 %08x\n", sOcarinaCUpButtonMap); + } else if (CHECK_BTN_ANY(sOcarinaInputButtonPress, OCARINA_CUP_MAP)) { + AUDIO_PRINTF("Presss NA_KEY_D5 %08x\n", OCARINA_CUP_MAP); sCurOcarinaPitch = OCARINA_PITCH_D5; sCurOcarinaButtonIndex = OCARINA_BTN_C_UP; } +#if PLATFORM_N64 + if (sOcarinaInputButtonCur) {} +#endif + // Pressing the R Button will raise the pitch by 1 semitone if ((sCurOcarinaPitch != OCARINA_PITCH_NONE) && CHECK_BTN_ANY(sOcarinaInputButtonCur, BTN_R) && (sRecordingState != OCARINA_RECORD_SCARECROW_SPAWN)) { @@ -1746,6 +1782,9 @@ void AudioOcarina_PlayControllerInput(u8 unused) { } else { // no bending or vibrato for recording state OCARINA_RECORD_SCARECROW_SPAWN sCurOcarinaBendIndex = 0; +#if PLATFORM_N64 + sCurOcarinaVibrato = 0; +#endif sCurOcarinaBendFreq = 1.0f; // No bend } @@ -1889,12 +1928,19 @@ void AudioOcarina_PlaybackSong(void) { sRelativeNotePlaybackVolume = sNotePlaybackVolume / 127.0f; } +#if PLATFORM_N64 + // Update vibrato + sNotePlaybackVibrato = sPlaybackSong[sPlaybackNotePos].vibrato; + // Sets vibrato to io port 6 + AUDIOCMD_CHANNEL_SET_IO(SEQ_PLAYER_SFX, SFX_CHANNEL_OCARINA, 6, sNotePlaybackVibrato); +#else // Update vibrato if (sNotePlaybackVibrato != sPlaybackSong[sPlaybackNotePos].vibrato) { sNotePlaybackVibrato = sPlaybackSong[sPlaybackNotePos].vibrato; // Sets vibrato to io port 6 AUDIOCMD_CHANNEL_SET_IO(SEQ_PLAYER_SFX, SFX_CHANNEL_OCARINA, 6, sNotePlaybackVibrato); } +#endif // Update bend if (sNotePlaybackBend != sPlaybackSong[sPlaybackNotePos].bend) { @@ -2175,9 +2221,21 @@ void AudioOcarina_RecordSong(void) { } else if (sRecordOcarinaVolume != sCurOcarinaVolume) { noteChanged = true; } else if (sRecordOcarinaVibrato != sCurOcarinaVibrato) { +#if PLATFORM_N64 + if (sRecordingState != OCARINA_RECORD_SCARECROW_SPAWN) { + noteChanged = true; + } +#else noteChanged = true; +#endif } else if (sRecordOcarinaBendIndex != sCurOcarinaBendIndex) { +#if PLATFORM_N64 + if (sRecordingState != OCARINA_RECORD_SCARECROW_SPAWN) { + noteChanged = true; + } +#else noteChanged = true; +#endif } if (noteChanged) { @@ -2511,9 +2569,17 @@ f32 Audio_ComputeSfxFreqScale(u8 bankId, u8 entryIdx) { } switch (bankId) { + case BANK_VOICE: +#if PLATFORM_N64 + if (((entry->sfxId & 0xFF) < 0x40) && (sAudioBaseFilter2 != 0)) { + phi_v0 = true; + } else if (((entry->sfxId & 0xFF) >= 0x40) && (sAudioExtraFilter2 != 0)) { + phi_v0 = true; + } + break; +#endif case BANK_PLAYER: case BANK_ITEM: - case BANK_VOICE: if (sAudioBaseFilter2 != 0) { phi_v0 = 1; } @@ -2625,6 +2691,9 @@ void Audio_SetSfxProperties(u8 bankId, u8 entryIdx, u8 channelIndex) { f32 behindScreenZ; u8 baseFilter = 0; SfxBankEntry* entry = &gSfxBanks[bankId][entryIdx]; +#if PLATFORM_N64 + s32 pad; +#endif switch (bankId) { case BANK_PLAYER: @@ -2663,7 +2732,13 @@ void Audio_SetSfxProperties(u8 bankId, u8 entryIdx, u8 channelIndex) { } } if (sAudioBaseFilter != 0) { - if ((bankId == BANK_ITEM) || (bankId == BANK_PLAYER) || (bankId == BANK_VOICE)) { +#if PLATFORM_N64 + if ((bankId == BANK_PLAYER) || (bankId == BANK_ITEM) || + ((bankId == BANK_VOICE) && ((entry->sfxId & 0xFF) < 0x40))) +#else + if ((bankId == BANK_ITEM) || (bankId == BANK_PLAYER) || (bankId == BANK_VOICE)) +#endif + { baseFilter = sAudioBaseFilter; } } @@ -3241,6 +3316,13 @@ void Audio_PlaySceneSequence(u16 seqId) { AUDIOCMD_GLOBAL_STOP_AUDIOCMDS(); } +#if PLATFORM_N64 + if (Audio_GetActiveSeqId(SEQ_PLAYER_BGM_MAIN) != NA_BGM_DISABLED) { + Audio_StopSequence(SEQ_PLAYER_BGM_MAIN, 0); + AUDIOCMD_GLOBAL_STOP_AUDIOCMDS(); + } +#endif + if ((sSeqFlags[sPrevSceneSeqId] & SEQ_FLAG_RESUME_PREV) && (sSeqFlags[seqId & 0xFF & 0xFF] & SEQ_FLAG_RESUME)) { // Resume the sequence from the point where it left off last time it was played in the scene if ((sSeqResumePoint & 0x3F) != 0) { @@ -3378,6 +3460,11 @@ void func_800F5B58(void) { if (sPrevMainBgmSeqId == NA_BGM_DISABLED) { SEQCMD_STOP_SEQUENCE(SEQ_PLAYER_BGM_MAIN, 0); } else { +#if PLATFORM_N64 + if (sPrevMainBgmSeqId == NA_BGM_NATURE_AMBIENCE) { + sPrevMainBgmSeqId = sPrevAmbienceSeqId; + } +#endif SEQCMD_PLAY_SEQUENCE(SEQ_PLAYER_BGM_MAIN, 0, 0, sPrevMainBgmSeqId); } @@ -3509,7 +3596,12 @@ void Audio_SetSequenceMode(u8 seqMode) { volumeFadeInTimer); SEQCMD_PLAY_SEQUENCE(SEQ_PLAYER_BGM_SUB, 10, 8, NA_BGM_ENEMY); - if (seqId != NA_BGM_NATURE_AMBIENCE) { +#if PLATFORM_N64 + if (seqId > NA_BGM_NATURE_AMBIENCE) +#else + if (seqId != NA_BGM_NATURE_AMBIENCE) +#endif + { Audio_SetVolumeScale(SEQ_PLAYER_BGM_MAIN, VOL_SCALE_INDEX_BGM_SUB, (0x7F - sAudioEnemyVol) & 0xFF, 0xA); Audio_SplitBgmChannels(sAudioEnemyVol); @@ -3528,6 +3620,17 @@ void Audio_SetSequenceMode(u8 seqMode) { } sPrevSeqMode = seqMode + 0x80; + } else { +#if PLATFORM_N64 + if (seqMode == SEQ_MODE_ENEMY) { + // If both seqMode = sPrevSeqMode = SEQ_MODE_ENEMY + if ((Audio_GetActiveSeqId(SEQ_PLAYER_BGM_SUB) == NA_BGM_DISABLED) && (seqId != NA_BGM_DISABLED) && + (sSeqFlags[seqId & 0xFF & 0xFF] & SEQ_FLAG_ENEMY)) { + SEQCMD_PLAY_SEQUENCE(SEQ_PLAYER_BGM_SUB, 10, 8, NA_BGM_ENEMY); + sPrevSeqMode = seqMode + 0x80; + } + } +#endif } } else { // Hyrule Field will play slightly different background music depending on whether player is standing @@ -3567,11 +3670,23 @@ void Audio_SetBgmEnemyVolume(f32 dist) { sAudioEnemyVol = ((350.0f - adjDist) * 127.0f) / 350.0f; Audio_SetVolumeScale(SEQ_PLAYER_BGM_SUB, VOL_SCALE_INDEX_BGM_SUB, sAudioEnemyVol, 10); - if (gActiveSeqs[SEQ_PLAYER_BGM_MAIN].seqId != NA_BGM_NATURE_AMBIENCE) { + +#if PLATFORM_N64 + if (gActiveSeqs[SEQ_PLAYER_BGM_MAIN].seqId > NA_BGM_NATURE_AMBIENCE) +#else + if (gActiveSeqs[SEQ_PLAYER_BGM_MAIN].seqId != NA_BGM_NATURE_AMBIENCE) +#endif + { Audio_SetVolumeScale(SEQ_PLAYER_BGM_MAIN, VOL_SCALE_INDEX_BGM_SUB, (0x7F - sAudioEnemyVol), 10); } } - if (gActiveSeqs[SEQ_PLAYER_BGM_MAIN].seqId != NA_BGM_NATURE_AMBIENCE) { + +#if PLATFORM_N64 + if (gActiveSeqs[SEQ_PLAYER_BGM_MAIN].seqId > NA_BGM_NATURE_AMBIENCE) +#else + if (gActiveSeqs[SEQ_PLAYER_BGM_MAIN].seqId != NA_BGM_NATURE_AMBIENCE) +#endif + { Audio_SplitBgmChannels(sAudioEnemyVol); } } @@ -3884,6 +3999,9 @@ void func_800F6C34(void) { sFanfareStartTimer = 0; D_8016B9F3 = 1; sMalonSingingDisabled = false; +#if PLATFORM_N64 + sPrevAmbienceSeqId = NA_BGM_DISABLED; +#endif } void Audio_SetNatureAmbienceChannelIO(u8 channelIdxRange, u8 ioPort, u8 ioData) { @@ -3942,6 +4060,18 @@ void Audio_StartNatureAmbienceSequence(u16 playerIO, u16 channelMask) { } #endif +#if PLATFORM_N64 + if ((Audio_GetActiveSeqId(SEQ_PLAYER_BGM_MAIN) != NA_BGM_DISABLED) && + (Audio_GetActiveSeqId(SEQ_PLAYER_BGM_MAIN) != NA_BGM_NATURE_AMBIENCE)) { + Audio_StopSequence(SEQ_PLAYER_BGM_MAIN, 0); + AUDIOCMD_GLOBAL_STOP_AUDIOCMDS(); + } + + if (Audio_GetActiveSeqId(SEQ_PLAYER_BGM_SUB) == (NA_BGM_ENEMY | 0x800)) { + Audio_SetVolumeScale(SEQ_PLAYER_BGM_MAIN, VOL_SCALE_INDEX_BGM_SUB, 0x7F, 1); + } +#endif + SEQCMD_PLAY_SEQUENCE(SEQ_PLAYER_BGM_MAIN, 0, 0, NA_BGM_NATURE_AMBIENCE); if (channelIdx) { @@ -3964,6 +4094,12 @@ void Audio_PlayNatureAmbienceSequence(u8 natureAmbienceId) { if ((gActiveSeqs[SEQ_PLAYER_BGM_MAIN].seqId == NA_BGM_DISABLED) || !(sSeqFlags[gActiveSeqs[SEQ_PLAYER_BGM_MAIN].seqId & 0xFF & 0xFF] & SEQ_FLAG_NO_AMBIENCE)) { +#if PLATFORM_N64 + if (gActiveSeqs[SEQ_PLAYER_BGM_MAIN].seqId != NA_BGM_NATURE_AMBIENCE) { + sPrevAmbienceSeqId = gActiveSeqs[SEQ_PLAYER_BGM_MAIN].seqId; + } +#endif + Audio_StartNatureAmbienceSequence(sNatureAmbienceDataIO[natureAmbienceId].playerIO, sNatureAmbienceDataIO[natureAmbienceId].channelMask); diff --git a/src/audio/lib/seqplayer.c b/src/audio/lib/seqplayer.c index 11866bf615..63aedeb56b 100644 --- a/src/audio/lib/seqplayer.c +++ b/src/audio/lib/seqplayer.c @@ -435,6 +435,14 @@ void AudioSeq_SequencePlayerDisableAsFinished(SequencePlayer* seqPlayer) { } void AudioSeq_SequencePlayerDisable(SequencePlayer* seqPlayer) { + s32 finished = 0; + +#if PLATFORM_N64 + if (seqPlayer->finished == 1) { + finished = 1; + } +#endif + AudioSeq_SequencePlayerDisableChannels(seqPlayer, 0xFFFF); Audio_NotePoolClear(&seqPlayer->notePool); if (!seqPlayer->enabled) { @@ -449,6 +457,11 @@ void AudioSeq_SequencePlayerDisable(SequencePlayer* seqPlayer) { } if (AudioLoad_IsFontLoadComplete(seqPlayer->defaultFont)) { +#if PLATFORM_N64 + if (finished == 1) { + AudioHeap_ReleaseNotesForFont(seqPlayer->defaultFont); + } +#endif AudioLoad_SetFontLoadStatus(seqPlayer->defaultFont, LOAD_STATUS_MAYBE_DISCARDABLE); } diff --git a/src/audio/lib/synthesis.c b/src/audio/lib/synthesis.c index 2a84f0cde5..d2214d99ac 100644 --- a/src/audio/lib/synthesis.c +++ b/src/audio/lib/synthesis.c @@ -643,7 +643,13 @@ Acmd* AudioSynth_DoOneAudioUpdate(s16* aiBuf, s32 aiBufLen, Acmd* cmd, s32 updat aMix(cmd++, DMEM_2CH_SIZE >> 4, reverb->decayRatio + 0x8000, DMEM_WET_LEFT_CH, DMEM_WET_LEFT_CH); // Leak reverb between the left and right channels - if (reverb->leakRtl != 0 || reverb->leakLtr != 0) { + +#if PLATFORM_N64 + if (((reverb->leakRtl != 0) || (reverb->leakLtr != 0)) && (gAudioCtx.soundMode != SOUNDMODE_MONO)) +#else + if ((reverb->leakRtl != 0) || (reverb->leakLtr != 0)) +#endif + { cmd = AudioSynth_LeakReverb(cmd, reverb); } @@ -778,6 +784,13 @@ Acmd* AudioSynth_ProcessNote(s32 noteIndex, NoteSubEu* noteSubEu, NoteSynthesisS nParts = noteSubEu->bitField1.hasTwoParts + 1; samplesLenFixedPoint = (resamplingRateFixedPoint * aiBufLen * 2) + synthState->samplePosFrac; numSamplesToLoad = samplesLenFixedPoint >> 16; + +#if PLATFORM_N64 + if (numSamplesToLoad == 0) { + skipBytes = false; + } +#endif + synthState->samplePosFrac = samplesLenFixedPoint & 0xFFFF; // Partially-optimized out no-op ifs required for matching. SM64 decomp diff --git a/src/audio/lib/thread.c b/src/audio/lib/thread.c index d1809c2d01..561e95e14c 100644 --- a/src/audio/lib/thread.c +++ b/src/audio/lib/thread.c @@ -16,12 +16,19 @@ AudioTask* AudioThread_Update(void) { return AudioThread_UpdateImpl(); } +#if PLATFORM_N64 +static s32 sMaxAbiCmdCnt = 0x80; +static AudioTask* sWaitingAudioTask = NULL; +#endif + /** * This is Audio_Update for the audio thread */ AudioTask* AudioThread_UpdateImpl(void) { +#if !PLATFORM_N64 static s32 sMaxAbiCmdCnt = 0x80; static AudioTask* sWaitingAudioTask = NULL; +#endif u32 samplesRemainingInAi; s32 abiCmdCnt; s32 pad; diff --git a/src/audio/sfx.c b/src/audio/sfx.c index e2efcd1026..338559773d 100644 --- a/src/audio/sfx.c +++ b/src/audio/sfx.c @@ -341,8 +341,11 @@ void Audio_ChooseActiveSfx(u8 bankId) { "flag:%04X ptr:%08X pos:%f-%f-%f" VT_RST "\n", entry->sfxId, entry->posX, entry->posZ, *entry->posX, *entry->posY, *entry->posZ); } + entry->priority = (u32)entry->dist + (SQ(0xFF - sfxImportance) * SQ(76)); +#if PLATFORM_GC temp3 = entry->sfxId; // fake - entry->priority = (u32)entry->dist + (SQ(0xFF - sfxImportance) * SQ(76)) + temp3 - temp3; + entry->priority = entry->priority + temp3 - temp3; +#endif if (*entry->posZ < 0.0f) { entry->priority += (s32)(-*entry->posZ * 6.0f); } diff --git a/tools/disasm/ntsc-1.2/files_code.csv b/tools/disasm/ntsc-1.2/files_code.csv index aab21a9c05..8aec80c335 100644 --- a/tools/disasm/ntsc-1.2/files_code.csv +++ b/tools/disasm/ntsc-1.2/files_code.csv @@ -445,8 +445,8 @@ offset,vram,.bss 110FB0,80122690,src/audio/general 1111B0,80122890,src/audio/sfx 1139C0,801250A0,src/audio/sequence -1146E0,80125DC0,src/audio/data -114780,80125E60,src/audio/session_config +114780,80125E60,src/audio/data +114820,80125F00,src/audio/session_config 11AC90,8012C370,src/code/system_malloc 11ACA0,8012C380,src/code/jpegdecoder 11ACB0,8012C390,src/libultra/io/sptask diff --git a/tools/disasm/ntsc-1.2/functions.txt b/tools/disasm/ntsc-1.2/functions.txt index e5a620ad42..57ad65a3e1 100644 --- a/tools/disasm/ntsc-1.2/functions.txt +++ b/tools/disasm/ntsc-1.2/functions.txt @@ -2693,8 +2693,8 @@ AudioOcarina_MemoryGameNextNote = 0x800C40EC; // type:func AudioOcarina_Update = 0x800C41F4; // type:func AudioOcarina_PlayLongScarecrowSong = 0x800C4324; // type:func AudioOcarina_ResetStaffs = 0x800C4430; // type:func -AudioDebug_ScrPrt = 0x800C447C; // type:func -AudioDebug_ProcessInput = 0x800C4484; // type:func +AudioDebug_Draw = 0x800C447C; // type:func +AudioDebug_ScrPrt = 0x800C4484; // type:func Audio_Update = 0x800C4490; // type:func func_800F3138 = 0x800C4534; // type:func func_800F3140 = 0x800C453C; // type:func