mirror of
https://github.com/zeldaret/oot.git
synced 2025-05-11 19:43:44 +00:00
[ntsc-1.2] Match audio (#2122)
* general.c mostly ok * match remaining audio funcs * comments * Finish matching audio --------- Co-authored-by: engineer124 <engineer124engineer124@gmail.com>
This commit is contained in:
parent
3e200769f1
commit
e44c7c656c
8 changed files with 207 additions and 34 deletions
|
@ -1341,6 +1341,7 @@ void UCodeDisas_RegisterUCode(UCodeDisas*, s32, UCodeInfo*);
|
||||||
void UCodeDisas_SetCurUCode(UCodeDisas*, void*);
|
void UCodeDisas_SetCurUCode(UCodeDisas*, void*);
|
||||||
Acmd* AudioSynth_Update(Acmd* cmdStart, s32* cmdCnt, s16* aiStart, s32 aiBufLen);
|
Acmd* AudioSynth_Update(Acmd* cmdStart, s32* cmdCnt, s16* aiStart, s32 aiBufLen);
|
||||||
void AudioHeap_DiscardFont(s32 fontId);
|
void AudioHeap_DiscardFont(s32 fontId);
|
||||||
|
void AudioHeap_ReleaseNotesForFont(s32 fontId);
|
||||||
void AudioHeap_DiscardSequence(s32 seqId);
|
void AudioHeap_DiscardSequence(s32 seqId);
|
||||||
void AudioHeap_WritebackDCache(void* ramAddr, u32 size);
|
void AudioHeap_WritebackDCache(void* ramAddr, u32 size);
|
||||||
void* AudioHeap_AllocZeroedAttemptExternal(AudioAllocPool* pool, u32 size);
|
void* AudioHeap_AllocZeroedAttemptExternal(AudioAllocPool* pool, u32 size);
|
||||||
|
|
|
@ -3,6 +3,14 @@
|
||||||
|
|
||||||
#define ABS_ALT(x) ((x) < 0 ? -(x) : (x))
|
#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 {
|
typedef struct SfxPlayerState {
|
||||||
/* 0x0 */ f32 vol;
|
/* 0x0 */ f32 vol;
|
||||||
/* 0x4 */ f32 freqScale;
|
/* 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);
|
u32 sOcarinaAllowedButtonMask = (BTN_A | BTN_CRIGHT | BTN_CLEFT | BTN_CDOWN | BTN_CUP);
|
||||||
s32 sOcarinaAButtonMap = BTN_A;
|
s32 sOcarinaAButtonMap = BTN_A;
|
||||||
s32 sOcarinaCUpButtonMap = BTN_CUP;
|
s32 sOcarinaCUpButtonMap = BTN_CUP;
|
||||||
s32 sOcarinaCDownButtonMap = BTN_CDOWN;
|
s32 sOcarinaCDownButtonMap = BTN_CDOWN;
|
||||||
|
#endif
|
||||||
|
|
||||||
u8 sIsOcarinaInputEnabled = false;
|
u8 sIsOcarinaInputEnabled = false;
|
||||||
s8 sOcarinaInstrumentId = OCARINA_INSTRUMENT_OFF;
|
s8 sOcarinaInstrumentId = OCARINA_INSTRUMENT_OFF;
|
||||||
u8 sCurOcarinaPitch = OCARINA_PITCH_NONE;
|
u8 sCurOcarinaPitch = OCARINA_PITCH_NONE;
|
||||||
|
@ -1257,6 +1268,11 @@ u8 D_8016B9F3;
|
||||||
u8 sFanfareStartTimer;
|
u8 sFanfareStartTimer;
|
||||||
u16 sFanfareSeqId;
|
u16 sFanfareSeqId;
|
||||||
|
|
||||||
|
#if PLATFORM_N64
|
||||||
|
// TODO: Unsure where in bss this is located
|
||||||
|
u16 sPrevAmbienceSeqId;
|
||||||
|
#endif
|
||||||
|
|
||||||
OcarinaStaff sPlayingStaff;
|
OcarinaStaff sPlayingStaff;
|
||||||
OcarinaStaff sPlaybackStaff;
|
OcarinaStaff sPlaybackStaff;
|
||||||
OcarinaStaff sRecordingStaff;
|
OcarinaStaff sRecordingStaff;
|
||||||
|
@ -1292,22 +1308,38 @@ s32 Audio_SetGanonsTowerBgmVolume(u8 targetVol);
|
||||||
|
|
||||||
// =========== Audio Ocarina ===========
|
// =========== 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) {
|
void AudioOcarina_SetCustomButtonMapping(u8 useCustom) {
|
||||||
if (!useCustom) {
|
if (!useCustom) {
|
||||||
osSyncPrintf("AUDIO : Ocarina Control Assign Normal\n");
|
AUDIO_PRINTF("AUDIO : Ocarina Control Assign Normal\n");
|
||||||
sOcarinaAllowedButtonMask = (BTN_A | BTN_CUP | BTN_CDOWN | BTN_CLEFT | BTN_CRIGHT);
|
OCARINA_ALLOWED_BUTTON_MASK = (BTN_A | BTN_CUP | BTN_CDOWN | BTN_CLEFT | BTN_CRIGHT);
|
||||||
sOcarinaAButtonMap = BTN_A;
|
OCARINA_A_MAP = BTN_A;
|
||||||
sOcarinaCUpButtonMap = BTN_CUP;
|
OCARINA_CUP_MAP = BTN_CUP;
|
||||||
sOcarinaCDownButtonMap = BTN_CDOWN;
|
OCARINA_CDOWN_MAP = BTN_CDOWN;
|
||||||
} else {
|
} else {
|
||||||
osSyncPrintf("AUDIO : Ocarina Control Assign Custom\n");
|
AUDIO_PRINTF("AUDIO : Ocarina Control Assign Custom\n");
|
||||||
sOcarinaAllowedButtonMask = (BTN_A | BTN_B | BTN_CDOWN | BTN_CLEFT | BTN_CRIGHT);
|
OCARINA_ALLOWED_BUTTON_MASK = (BTN_A | BTN_B | BTN_CDOWN | BTN_CLEFT | BTN_CRIGHT);
|
||||||
sOcarinaAButtonMap = BTN_B;
|
OCARINA_A_MAP = BTN_B;
|
||||||
sOcarinaCUpButtonMap = BTN_CDOWN;
|
OCARINA_CUP_MAP = BTN_CDOWN;
|
||||||
sOcarinaCDownButtonMap = BTN_A;
|
OCARINA_CDOWN_MAP = BTN_A;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
void AudioOcarina_ReadControllerInput(void) {
|
void AudioOcarina_ReadControllerInput(void) {
|
||||||
Input inputs[MAXCONTROLLERS];
|
Input inputs[MAXCONTROLLERS];
|
||||||
Input* input = &inputs[0];
|
Input* input = &inputs[0];
|
||||||
|
@ -1608,7 +1640,7 @@ void AudioOcarina_CheckSongsWithoutMusicStaff(void) {
|
||||||
u8 k;
|
u8 k;
|
||||||
|
|
||||||
if (CHECK_BTN_ANY(sOcarinaInputButtonCur, BTN_L) &&
|
if (CHECK_BTN_ANY(sOcarinaInputButtonCur, BTN_L) &&
|
||||||
CHECK_BTN_ANY(sOcarinaInputButtonCur, sOcarinaAllowedButtonMask)) {
|
CHECK_BTN_ANY(sOcarinaInputButtonCur, OCARINA_ALLOWED_BUTTON_MASK)) {
|
||||||
AudioOcarina_Start((u16)sOcarinaFlags);
|
AudioOcarina_Start((u16)sOcarinaFlags);
|
||||||
return;
|
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
|
// Ensures the button pressed to start the ocarina does not also play an ocarina note
|
||||||
if ((sOcarinaInputButtonStart == 0) || ((sOcarinaInputButtonStart & sOcarinaAllowedButtonMask) !=
|
if ((sOcarinaInputButtonStart == 0) || ((sOcarinaInputButtonStart & OCARINA_ALLOWED_BUTTON_MASK) !=
|
||||||
(sOcarinaInputButtonCur & sOcarinaAllowedButtonMask))) {
|
(sOcarinaInputButtonCur & OCARINA_ALLOWED_BUTTON_MASK))) {
|
||||||
sOcarinaInputButtonStart = 0;
|
sOcarinaInputButtonStart = 0;
|
||||||
if (1) {}
|
if (1) {}
|
||||||
sCurOcarinaPitch = OCARINA_PITCH_NONE;
|
sCurOcarinaPitch = OCARINA_PITCH_NONE;
|
||||||
sCurOcarinaButtonIndex = OCARINA_BTN_INVALID;
|
sCurOcarinaButtonIndex = OCARINA_BTN_INVALID;
|
||||||
ocarinaBtnsHeld = (sOcarinaInputButtonCur & sOcarinaAllowedButtonMask) &
|
ocarinaBtnsHeld = (sOcarinaInputButtonCur & OCARINA_ALLOWED_BUTTON_MASK) &
|
||||||
(sOcarinaInputButtonPrev & sOcarinaAllowedButtonMask);
|
(sOcarinaInputButtonPrev & OCARINA_ALLOWED_BUTTON_MASK);
|
||||||
if (!(sOcarinaInputButtonPress & ocarinaBtnsHeld) && (sOcarinaInputButtonCur != 0)) {
|
if (!(sOcarinaInputButtonPress & ocarinaBtnsHeld) && (sOcarinaInputButtonCur != 0)) {
|
||||||
sOcarinaInputButtonPress = sOcarinaInputButtonCur;
|
sOcarinaInputButtonPress = sOcarinaInputButtonCur;
|
||||||
} else {
|
} else {
|
||||||
|
@ -1694,32 +1726,36 @@ void AudioOcarina_PlayControllerInput(u8 unused) {
|
||||||
}
|
}
|
||||||
|
|
||||||
// Interprets and transforms controller input into ocarina buttons and notes
|
// Interprets and transforms controller input into ocarina buttons and notes
|
||||||
if (CHECK_BTN_ANY(sOcarinaInputButtonPress, sOcarinaAButtonMap)) {
|
if (CHECK_BTN_ANY(sOcarinaInputButtonPress, OCARINA_A_MAP)) {
|
||||||
osSyncPrintf("Presss NA_KEY_D4 %08x\n", sOcarinaAButtonMap);
|
AUDIO_PRINTF("Presss NA_KEY_D4 %08x\n", OCARINA_A_MAP);
|
||||||
sCurOcarinaPitch = OCARINA_PITCH_D4;
|
sCurOcarinaPitch = OCARINA_PITCH_D4;
|
||||||
sCurOcarinaButtonIndex = OCARINA_BTN_A;
|
sCurOcarinaButtonIndex = OCARINA_BTN_A;
|
||||||
|
|
||||||
} else if (CHECK_BTN_ANY(sOcarinaInputButtonPress, sOcarinaCDownButtonMap)) {
|
} else if (CHECK_BTN_ANY(sOcarinaInputButtonPress, OCARINA_CDOWN_MAP)) {
|
||||||
osSyncPrintf("Presss NA_KEY_F4 %08x\n", sOcarinaCDownButtonMap);
|
AUDIO_PRINTF("Presss NA_KEY_F4 %08x\n", OCARINA_CDOWN_MAP);
|
||||||
sCurOcarinaPitch = OCARINA_PITCH_F4;
|
sCurOcarinaPitch = OCARINA_PITCH_F4;
|
||||||
sCurOcarinaButtonIndex = OCARINA_BTN_C_DOWN;
|
sCurOcarinaButtonIndex = OCARINA_BTN_C_DOWN;
|
||||||
|
|
||||||
} else if (CHECK_BTN_ANY(sOcarinaInputButtonPress, BTN_CRIGHT)) {
|
} 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;
|
sCurOcarinaPitch = OCARINA_PITCH_A4;
|
||||||
sCurOcarinaButtonIndex = OCARINA_BTN_C_RIGHT;
|
sCurOcarinaButtonIndex = OCARINA_BTN_C_RIGHT;
|
||||||
|
|
||||||
} else if (CHECK_BTN_ANY(sOcarinaInputButtonPress, BTN_CLEFT)) {
|
} 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;
|
sCurOcarinaPitch = OCARINA_PITCH_B4;
|
||||||
sCurOcarinaButtonIndex = OCARINA_BTN_C_LEFT;
|
sCurOcarinaButtonIndex = OCARINA_BTN_C_LEFT;
|
||||||
|
|
||||||
} else if (CHECK_BTN_ANY(sOcarinaInputButtonPress, sOcarinaCUpButtonMap)) {
|
} else if (CHECK_BTN_ANY(sOcarinaInputButtonPress, OCARINA_CUP_MAP)) {
|
||||||
osSyncPrintf("Presss NA_KEY_D5 %08x\n", sOcarinaCUpButtonMap);
|
AUDIO_PRINTF("Presss NA_KEY_D5 %08x\n", OCARINA_CUP_MAP);
|
||||||
sCurOcarinaPitch = OCARINA_PITCH_D5;
|
sCurOcarinaPitch = OCARINA_PITCH_D5;
|
||||||
sCurOcarinaButtonIndex = OCARINA_BTN_C_UP;
|
sCurOcarinaButtonIndex = OCARINA_BTN_C_UP;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if PLATFORM_N64
|
||||||
|
if (sOcarinaInputButtonCur) {}
|
||||||
|
#endif
|
||||||
|
|
||||||
// Pressing the R Button will raise the pitch by 1 semitone
|
// Pressing the R Button will raise the pitch by 1 semitone
|
||||||
if ((sCurOcarinaPitch != OCARINA_PITCH_NONE) && CHECK_BTN_ANY(sOcarinaInputButtonCur, BTN_R) &&
|
if ((sCurOcarinaPitch != OCARINA_PITCH_NONE) && CHECK_BTN_ANY(sOcarinaInputButtonCur, BTN_R) &&
|
||||||
(sRecordingState != OCARINA_RECORD_SCARECROW_SPAWN)) {
|
(sRecordingState != OCARINA_RECORD_SCARECROW_SPAWN)) {
|
||||||
|
@ -1746,6 +1782,9 @@ void AudioOcarina_PlayControllerInput(u8 unused) {
|
||||||
} else {
|
} else {
|
||||||
// no bending or vibrato for recording state OCARINA_RECORD_SCARECROW_SPAWN
|
// no bending or vibrato for recording state OCARINA_RECORD_SCARECROW_SPAWN
|
||||||
sCurOcarinaBendIndex = 0;
|
sCurOcarinaBendIndex = 0;
|
||||||
|
#if PLATFORM_N64
|
||||||
|
sCurOcarinaVibrato = 0;
|
||||||
|
#endif
|
||||||
sCurOcarinaBendFreq = 1.0f; // No bend
|
sCurOcarinaBendFreq = 1.0f; // No bend
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1889,12 +1928,19 @@ void AudioOcarina_PlaybackSong(void) {
|
||||||
sRelativeNotePlaybackVolume = sNotePlaybackVolume / 127.0f;
|
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
|
// Update vibrato
|
||||||
if (sNotePlaybackVibrato != sPlaybackSong[sPlaybackNotePos].vibrato) {
|
if (sNotePlaybackVibrato != sPlaybackSong[sPlaybackNotePos].vibrato) {
|
||||||
sNotePlaybackVibrato = sPlaybackSong[sPlaybackNotePos].vibrato;
|
sNotePlaybackVibrato = sPlaybackSong[sPlaybackNotePos].vibrato;
|
||||||
// Sets vibrato to io port 6
|
// Sets vibrato to io port 6
|
||||||
AUDIOCMD_CHANNEL_SET_IO(SEQ_PLAYER_SFX, SFX_CHANNEL_OCARINA, 6, sNotePlaybackVibrato);
|
AUDIOCMD_CHANNEL_SET_IO(SEQ_PLAYER_SFX, SFX_CHANNEL_OCARINA, 6, sNotePlaybackVibrato);
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
// Update bend
|
// Update bend
|
||||||
if (sNotePlaybackBend != sPlaybackSong[sPlaybackNotePos].bend) {
|
if (sNotePlaybackBend != sPlaybackSong[sPlaybackNotePos].bend) {
|
||||||
|
@ -2175,9 +2221,21 @@ void AudioOcarina_RecordSong(void) {
|
||||||
} else if (sRecordOcarinaVolume != sCurOcarinaVolume) {
|
} else if (sRecordOcarinaVolume != sCurOcarinaVolume) {
|
||||||
noteChanged = true;
|
noteChanged = true;
|
||||||
} else if (sRecordOcarinaVibrato != sCurOcarinaVibrato) {
|
} else if (sRecordOcarinaVibrato != sCurOcarinaVibrato) {
|
||||||
|
#if PLATFORM_N64
|
||||||
|
if (sRecordingState != OCARINA_RECORD_SCARECROW_SPAWN) {
|
||||||
|
noteChanged = true;
|
||||||
|
}
|
||||||
|
#else
|
||||||
noteChanged = true;
|
noteChanged = true;
|
||||||
|
#endif
|
||||||
} else if (sRecordOcarinaBendIndex != sCurOcarinaBendIndex) {
|
} else if (sRecordOcarinaBendIndex != sCurOcarinaBendIndex) {
|
||||||
|
#if PLATFORM_N64
|
||||||
|
if (sRecordingState != OCARINA_RECORD_SCARECROW_SPAWN) {
|
||||||
|
noteChanged = true;
|
||||||
|
}
|
||||||
|
#else
|
||||||
noteChanged = true;
|
noteChanged = true;
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
if (noteChanged) {
|
if (noteChanged) {
|
||||||
|
@ -2511,9 +2569,17 @@ f32 Audio_ComputeSfxFreqScale(u8 bankId, u8 entryIdx) {
|
||||||
}
|
}
|
||||||
|
|
||||||
switch (bankId) {
|
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_PLAYER:
|
||||||
case BANK_ITEM:
|
case BANK_ITEM:
|
||||||
case BANK_VOICE:
|
|
||||||
if (sAudioBaseFilter2 != 0) {
|
if (sAudioBaseFilter2 != 0) {
|
||||||
phi_v0 = 1;
|
phi_v0 = 1;
|
||||||
}
|
}
|
||||||
|
@ -2625,6 +2691,9 @@ void Audio_SetSfxProperties(u8 bankId, u8 entryIdx, u8 channelIndex) {
|
||||||
f32 behindScreenZ;
|
f32 behindScreenZ;
|
||||||
u8 baseFilter = 0;
|
u8 baseFilter = 0;
|
||||||
SfxBankEntry* entry = &gSfxBanks[bankId][entryIdx];
|
SfxBankEntry* entry = &gSfxBanks[bankId][entryIdx];
|
||||||
|
#if PLATFORM_N64
|
||||||
|
s32 pad;
|
||||||
|
#endif
|
||||||
|
|
||||||
switch (bankId) {
|
switch (bankId) {
|
||||||
case BANK_PLAYER:
|
case BANK_PLAYER:
|
||||||
|
@ -2663,7 +2732,13 @@ void Audio_SetSfxProperties(u8 bankId, u8 entryIdx, u8 channelIndex) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (sAudioBaseFilter != 0) {
|
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;
|
baseFilter = sAudioBaseFilter;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -3241,6 +3316,13 @@ void Audio_PlaySceneSequence(u16 seqId) {
|
||||||
AUDIOCMD_GLOBAL_STOP_AUDIOCMDS();
|
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)) {
|
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
|
// Resume the sequence from the point where it left off last time it was played in the scene
|
||||||
if ((sSeqResumePoint & 0x3F) != 0) {
|
if ((sSeqResumePoint & 0x3F) != 0) {
|
||||||
|
@ -3378,6 +3460,11 @@ void func_800F5B58(void) {
|
||||||
if (sPrevMainBgmSeqId == NA_BGM_DISABLED) {
|
if (sPrevMainBgmSeqId == NA_BGM_DISABLED) {
|
||||||
SEQCMD_STOP_SEQUENCE(SEQ_PLAYER_BGM_MAIN, 0);
|
SEQCMD_STOP_SEQUENCE(SEQ_PLAYER_BGM_MAIN, 0);
|
||||||
} else {
|
} else {
|
||||||
|
#if PLATFORM_N64
|
||||||
|
if (sPrevMainBgmSeqId == NA_BGM_NATURE_AMBIENCE) {
|
||||||
|
sPrevMainBgmSeqId = sPrevAmbienceSeqId;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
SEQCMD_PLAY_SEQUENCE(SEQ_PLAYER_BGM_MAIN, 0, 0, sPrevMainBgmSeqId);
|
SEQCMD_PLAY_SEQUENCE(SEQ_PLAYER_BGM_MAIN, 0, 0, sPrevMainBgmSeqId);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -3509,7 +3596,12 @@ void Audio_SetSequenceMode(u8 seqMode) {
|
||||||
volumeFadeInTimer);
|
volumeFadeInTimer);
|
||||||
SEQCMD_PLAY_SEQUENCE(SEQ_PLAYER_BGM_SUB, 10, 8, NA_BGM_ENEMY);
|
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,
|
Audio_SetVolumeScale(SEQ_PLAYER_BGM_MAIN, VOL_SCALE_INDEX_BGM_SUB,
|
||||||
(0x7F - sAudioEnemyVol) & 0xFF, 0xA);
|
(0x7F - sAudioEnemyVol) & 0xFF, 0xA);
|
||||||
Audio_SplitBgmChannels(sAudioEnemyVol);
|
Audio_SplitBgmChannels(sAudioEnemyVol);
|
||||||
|
@ -3528,6 +3620,17 @@ void Audio_SetSequenceMode(u8 seqMode) {
|
||||||
}
|
}
|
||||||
|
|
||||||
sPrevSeqMode = seqMode + 0x80;
|
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 {
|
} else {
|
||||||
// Hyrule Field will play slightly different background music depending on whether player is standing
|
// 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;
|
sAudioEnemyVol = ((350.0f - adjDist) * 127.0f) / 350.0f;
|
||||||
Audio_SetVolumeScale(SEQ_PLAYER_BGM_SUB, VOL_SCALE_INDEX_BGM_SUB, sAudioEnemyVol, 10);
|
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);
|
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);
|
Audio_SplitBgmChannels(sAudioEnemyVol);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -3884,6 +3999,9 @@ void func_800F6C34(void) {
|
||||||
sFanfareStartTimer = 0;
|
sFanfareStartTimer = 0;
|
||||||
D_8016B9F3 = 1;
|
D_8016B9F3 = 1;
|
||||||
sMalonSingingDisabled = false;
|
sMalonSingingDisabled = false;
|
||||||
|
#if PLATFORM_N64
|
||||||
|
sPrevAmbienceSeqId = NA_BGM_DISABLED;
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
void Audio_SetNatureAmbienceChannelIO(u8 channelIdxRange, u8 ioPort, u8 ioData) {
|
void Audio_SetNatureAmbienceChannelIO(u8 channelIdxRange, u8 ioPort, u8 ioData) {
|
||||||
|
@ -3942,6 +4060,18 @@ void Audio_StartNatureAmbienceSequence(u16 playerIO, u16 channelMask) {
|
||||||
}
|
}
|
||||||
#endif
|
#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);
|
SEQCMD_PLAY_SEQUENCE(SEQ_PLAYER_BGM_MAIN, 0, 0, NA_BGM_NATURE_AMBIENCE);
|
||||||
|
|
||||||
if (channelIdx) {
|
if (channelIdx) {
|
||||||
|
@ -3964,6 +4094,12 @@ void Audio_PlayNatureAmbienceSequence(u8 natureAmbienceId) {
|
||||||
if ((gActiveSeqs[SEQ_PLAYER_BGM_MAIN].seqId == NA_BGM_DISABLED) ||
|
if ((gActiveSeqs[SEQ_PLAYER_BGM_MAIN].seqId == NA_BGM_DISABLED) ||
|
||||||
!(sSeqFlags[gActiveSeqs[SEQ_PLAYER_BGM_MAIN].seqId & 0xFF & 0xFF] & SEQ_FLAG_NO_AMBIENCE)) {
|
!(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,
|
Audio_StartNatureAmbienceSequence(sNatureAmbienceDataIO[natureAmbienceId].playerIO,
|
||||||
sNatureAmbienceDataIO[natureAmbienceId].channelMask);
|
sNatureAmbienceDataIO[natureAmbienceId].channelMask);
|
||||||
|
|
||||||
|
|
|
@ -435,6 +435,14 @@ void AudioSeq_SequencePlayerDisableAsFinished(SequencePlayer* seqPlayer) {
|
||||||
}
|
}
|
||||||
|
|
||||||
void AudioSeq_SequencePlayerDisable(SequencePlayer* seqPlayer) {
|
void AudioSeq_SequencePlayerDisable(SequencePlayer* seqPlayer) {
|
||||||
|
s32 finished = 0;
|
||||||
|
|
||||||
|
#if PLATFORM_N64
|
||||||
|
if (seqPlayer->finished == 1) {
|
||||||
|
finished = 1;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
AudioSeq_SequencePlayerDisableChannels(seqPlayer, 0xFFFF);
|
AudioSeq_SequencePlayerDisableChannels(seqPlayer, 0xFFFF);
|
||||||
Audio_NotePoolClear(&seqPlayer->notePool);
|
Audio_NotePoolClear(&seqPlayer->notePool);
|
||||||
if (!seqPlayer->enabled) {
|
if (!seqPlayer->enabled) {
|
||||||
|
@ -449,6 +457,11 @@ void AudioSeq_SequencePlayerDisable(SequencePlayer* seqPlayer) {
|
||||||
}
|
}
|
||||||
|
|
||||||
if (AudioLoad_IsFontLoadComplete(seqPlayer->defaultFont)) {
|
if (AudioLoad_IsFontLoadComplete(seqPlayer->defaultFont)) {
|
||||||
|
#if PLATFORM_N64
|
||||||
|
if (finished == 1) {
|
||||||
|
AudioHeap_ReleaseNotesForFont(seqPlayer->defaultFont);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
AudioLoad_SetFontLoadStatus(seqPlayer->defaultFont, LOAD_STATUS_MAYBE_DISCARDABLE);
|
AudioLoad_SetFontLoadStatus(seqPlayer->defaultFont, LOAD_STATUS_MAYBE_DISCARDABLE);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -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);
|
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
|
// 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);
|
cmd = AudioSynth_LeakReverb(cmd, reverb);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -778,6 +784,13 @@ Acmd* AudioSynth_ProcessNote(s32 noteIndex, NoteSubEu* noteSubEu, NoteSynthesisS
|
||||||
nParts = noteSubEu->bitField1.hasTwoParts + 1;
|
nParts = noteSubEu->bitField1.hasTwoParts + 1;
|
||||||
samplesLenFixedPoint = (resamplingRateFixedPoint * aiBufLen * 2) + synthState->samplePosFrac;
|
samplesLenFixedPoint = (resamplingRateFixedPoint * aiBufLen * 2) + synthState->samplePosFrac;
|
||||||
numSamplesToLoad = samplesLenFixedPoint >> 16;
|
numSamplesToLoad = samplesLenFixedPoint >> 16;
|
||||||
|
|
||||||
|
#if PLATFORM_N64
|
||||||
|
if (numSamplesToLoad == 0) {
|
||||||
|
skipBytes = false;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
synthState->samplePosFrac = samplesLenFixedPoint & 0xFFFF;
|
synthState->samplePosFrac = samplesLenFixedPoint & 0xFFFF;
|
||||||
|
|
||||||
// Partially-optimized out no-op ifs required for matching. SM64 decomp
|
// Partially-optimized out no-op ifs required for matching. SM64 decomp
|
||||||
|
|
|
@ -16,12 +16,19 @@ AudioTask* AudioThread_Update(void) {
|
||||||
return AudioThread_UpdateImpl();
|
return AudioThread_UpdateImpl();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if PLATFORM_N64
|
||||||
|
static s32 sMaxAbiCmdCnt = 0x80;
|
||||||
|
static AudioTask* sWaitingAudioTask = NULL;
|
||||||
|
#endif
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* This is Audio_Update for the audio thread
|
* This is Audio_Update for the audio thread
|
||||||
*/
|
*/
|
||||||
AudioTask* AudioThread_UpdateImpl(void) {
|
AudioTask* AudioThread_UpdateImpl(void) {
|
||||||
|
#if !PLATFORM_N64
|
||||||
static s32 sMaxAbiCmdCnt = 0x80;
|
static s32 sMaxAbiCmdCnt = 0x80;
|
||||||
static AudioTask* sWaitingAudioTask = NULL;
|
static AudioTask* sWaitingAudioTask = NULL;
|
||||||
|
#endif
|
||||||
u32 samplesRemainingInAi;
|
u32 samplesRemainingInAi;
|
||||||
s32 abiCmdCnt;
|
s32 abiCmdCnt;
|
||||||
s32 pad;
|
s32 pad;
|
||||||
|
|
|
@ -341,8 +341,11 @@ void Audio_ChooseActiveSfx(u8 bankId) {
|
||||||
"flag:%04X ptr:%08X pos:%f-%f-%f" VT_RST "\n",
|
"flag:%04X ptr:%08X pos:%f-%f-%f" VT_RST "\n",
|
||||||
entry->sfxId, entry->posX, entry->posZ, *entry->posX, *entry->posY, *entry->posZ);
|
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
|
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) {
|
if (*entry->posZ < 0.0f) {
|
||||||
entry->priority += (s32)(-*entry->posZ * 6.0f);
|
entry->priority += (s32)(-*entry->posZ * 6.0f);
|
||||||
}
|
}
|
||||||
|
|
|
@ -445,8 +445,8 @@ offset,vram,.bss
|
||||||
110FB0,80122690,src/audio/general
|
110FB0,80122690,src/audio/general
|
||||||
1111B0,80122890,src/audio/sfx
|
1111B0,80122890,src/audio/sfx
|
||||||
1139C0,801250A0,src/audio/sequence
|
1139C0,801250A0,src/audio/sequence
|
||||||
1146E0,80125DC0,src/audio/data
|
114780,80125E60,src/audio/data
|
||||||
114780,80125E60,src/audio/session_config
|
114820,80125F00,src/audio/session_config
|
||||||
11AC90,8012C370,src/code/system_malloc
|
11AC90,8012C370,src/code/system_malloc
|
||||||
11ACA0,8012C380,src/code/jpegdecoder
|
11ACA0,8012C380,src/code/jpegdecoder
|
||||||
11ACB0,8012C390,src/libultra/io/sptask
|
11ACB0,8012C390,src/libultra/io/sptask
|
||||||
|
|
|
|
@ -2693,8 +2693,8 @@ AudioOcarina_MemoryGameNextNote = 0x800C40EC; // type:func
|
||||||
AudioOcarina_Update = 0x800C41F4; // type:func
|
AudioOcarina_Update = 0x800C41F4; // type:func
|
||||||
AudioOcarina_PlayLongScarecrowSong = 0x800C4324; // type:func
|
AudioOcarina_PlayLongScarecrowSong = 0x800C4324; // type:func
|
||||||
AudioOcarina_ResetStaffs = 0x800C4430; // type:func
|
AudioOcarina_ResetStaffs = 0x800C4430; // type:func
|
||||||
AudioDebug_ScrPrt = 0x800C447C; // type:func
|
AudioDebug_Draw = 0x800C447C; // type:func
|
||||||
AudioDebug_ProcessInput = 0x800C4484; // type:func
|
AudioDebug_ScrPrt = 0x800C4484; // type:func
|
||||||
Audio_Update = 0x800C4490; // type:func
|
Audio_Update = 0x800C4490; // type:func
|
||||||
func_800F3138 = 0x800C4534; // type:func
|
func_800F3138 = 0x800C4534; // type:func
|
||||||
func_800F3140 = 0x800C453C; // type:func
|
func_800F3140 = 0x800C453C; // type:func
|
||||||
|
|
Loading…
Add table
Reference in a new issue