diff --git a/include/common_structs.h b/include/common_structs.h index f0eb381ed7..5adea3739e 100644 --- a/include/common_structs.h +++ b/include/common_structs.h @@ -627,22 +627,22 @@ typedef struct Worker { typedef Worker* WorkerList[MAX_WORKERS]; -typedef struct MusicSettings { +typedef struct MusicControlData { /* 0x00 */ u16 flags; /* 0x02 */ s16 state; /* 0x04 */ s32 fadeOutTime; /* 0x08 */ s32 fadeInTime; /* 0x0C */ s16 fadeStartVolume; /* 0x0E */ s16 fadeEndVolume; - /* 0x10 */ s32 songID; + /* 0x10 */ s32 requestedSongID; /* 0x14 */ s32 variation; - /* 0x18 */ s32 songName; + /* 0x18 */ s32 songName; /// name or handle of currently playing song /* 0x1C */ s32 battleSongID; /* 0x20 */ s32 battleVariation; /* 0x24 */ s32 savedSongID; /* 0x28 */ s32 savedVariation; /* 0x2C */ s32 savedSongName; -} MusicSettings; // size = 0x30 +} MusicControlData; // size = 0x30 typedef struct MusicProximityTrigger { /* 0x00 */ VecXZf pos; diff --git a/include/enums.h b/include/enums.h index 17bcf21c73..bc70e06a52 100644 --- a/include/enums.h +++ b/include/enums.h @@ -4684,15 +4684,6 @@ enum ProjectileHitboxAttackStates { PROJECTILE_HITBOX_STATE_DONE = 100 }; -enum MusicSettingsFlags { - MUSIC_SETTINGS_FLAG_1 = 0x00000001, - MUSIC_SETTINGS_FLAG_ENABLE_PROXIMITY_MIX = 0x00000002, - MUSIC_SETTINGS_FLAG_4 = 0x00000004, - MUSIC_SETTINGS_FLAG_8 = 0x00000008, - MUSIC_SETTINGS_FLAG_10 = 0x00000010, - MUSIC_SETTINGS_FLAG_20 = 0x00000020, -}; - // the lower byte of ColliderFlags enum SurfaceType { SURFACE_TYPE_DEFAULT = 0, diff --git a/include/variables.h b/include/variables.h index a135015a3e..9f73cb07e2 100644 --- a/include/variables.h +++ b/include/variables.h @@ -104,7 +104,7 @@ extern EvtScript EVS_NpcDefeat; extern EvtScript ShakeCam1; extern EvtScript ShakeCamX; -extern MusicSettings gMusicSettings[2]; +extern MusicControlData gMusicControlData[2]; // gfx extern DisplayContext* gDisplayContext; diff --git a/src/audio.h b/src/audio.h index 6a208574e9..ebb345b5e2 100644 --- a/src/audio.h +++ b/src/audio.h @@ -122,34 +122,47 @@ enum AuVoiceSyncFlags { }; typedef enum AuEffectType { - AU_FX_NONE = 0, - AU_FX_SMALLROOM = 1, - AU_FX_BIGROOM = 2, - AU_FX_CHORUS = 3, - AU_FX_FLANGE = 4, - AU_FX_ECHO = 5, - AU_FX_CUSTOM_0 = 6, - AU_FX_CUSTOM_1 = 7, - AU_FX_CUSTOM_2 = 8, - AU_FX_CUSTOM_3 = 9, - AU_FX_OTHER_BIGROOM = 10 + AU_FX_NONE = 0, + AU_FX_SMALLROOM = 1, + AU_FX_BIGROOM = 2, + AU_FX_CHORUS = 3, + AU_FX_FLANGE = 4, + AU_FX_ECHO = 5, + AU_FX_CUSTOM_0 = 6, + AU_FX_CUSTOM_1 = 7, + AU_FX_CUSTOM_2 = 8, + AU_FX_CUSTOM_3 = 9, + AU_FX_OTHER_BIGROOM = 10, } AuEffectType; typedef enum MusicState { - MUSIC_STATE_0 = 0, - MUSIC_STATE_1 = 1, - MUSIC_STATE_2 = 2, + MUSIC_STATE_IDLE = 0, + MUSIC_STATE_STOP_CURRENT = 1, + MUSIC_STATE_AWAIT_FADEOUT = 2, MUSIC_STATE_DELAY_2 = 3, MUSIC_STATE_DELAY_1 = 4, - MUSIC_STATE_5 = 5, + MUSIC_STATE_PLAY_NEXT = 5, } MusicState; +enum MusicFlags { + MUSIC_FLAG_PLAYING = 0x01, + MUSIC_FLAG_ENABLE_PROX_MIX = 0x02, + MUSIC_FLAG_PUSHING = 0x04, + MUSIC_FLAG_POPPING = 0x08, + MUSIC_FLAG_IGNORE_POP = 0x10, + MUSIC_FLAG_FADE_IN_NEXT = 0x20, +}; + +enum MusicFades { + MUSIC_CROSS_FADE = 0, +}; + typedef enum BGMPlayerState { - BGM_PLAY_STATE_IDLE = 0, - BGM_PLAY_STATE_ACTIVE = 1, - BGM_PLAY_STATE_FETCH = 2, - BGM_PLAY_STATE_INIT = 3, - BGM_PLAY_STATE_STOP = 4 + BGM_PLAY_STATE_IDLE = 0, + BGM_PLAY_STATE_ACTIVE = 1, + BGM_PLAY_STATE_FETCH = 2, + BGM_PLAY_STATE_INIT = 3, + BGM_PLAY_STATE_STOP = 4, } BGMPlayerState; typedef enum SegmentControlCommands { @@ -159,7 +172,7 @@ typedef enum SegmentControlCommands { BGM_COMP_WAIT = 4, BGM_COMP_END_LOOP = 5, BGM_COMP_6 = 6, - BGM_COMP_7 = 7 + BGM_COMP_7 = 7, } SegmentControlCommands; typedef enum BGMSpecialSubops { @@ -954,8 +967,8 @@ typedef struct AuEffectChange { typedef struct SndGlobalsSub6C { /* 0x00 */ struct BGMPlayer* bgmPlayer; - /* 0x04 */ u8 unk_4; - /* 0x05 */ u8 unk_5; + /* 0x04 */ u8 assigned; + /* 0x05 */ u8 priority; } SndGlobalsSub6C; // found at 801D57A0 @@ -1133,7 +1146,7 @@ typedef struct BGMPlayer { /* 0x21D */ u8 bgmInstrumentCount; /* 0x21E */ u8 unk_21E; /* 0x21F */ char unk_21F[0x1]; - /* 0x220 */ u8 unk_220; + /* 0x220 */ u8 paused; /* 0x221 */ u8 masterState; /* 0x222 */ u8 unk_222; /* 0x223 */ u8 unk_223; @@ -1155,8 +1168,9 @@ typedef struct BGMPlayer { } BGMPlayer; // size = 0xA9C //TODO these are probably one struct with a union at offset 0x10 +// keep them separated so that only the "correct" element of the union can be used with functions taking these -typedef struct SongUpdateEventA { +typedef struct SongUpdateRequestA { /* 0x00 */ s32 songName; /* 0x04 */ s32 duration; /* 0x08 */ s32 startVolume; @@ -1164,29 +1178,29 @@ typedef struct SongUpdateEventA { /* 0x10 */ s32 variation; /* 0x14 */ s32 unk_14; /* 0x18 */ char pad_18[8]; -} SongUpdateEventA; // size = 0x1C or 0x20 +} SongUpdateRequestA; // size = 0x1C or 0x20 -typedef struct SongUpdateEventB { +typedef struct SongUpdateRequestB { /* 0x00 */ s32 songName; /* 0x04 */ s32 duration; /* 0x08 */ s32 unk_08; /* 0x0C */ s32 finalVolume; /* 0x10 */ AuCallback callback; - /* 0x14 */ s32 unk_14; + /* 0x14 */ s32 onPush; /* 0x18 */ char pad_18[8]; -} SongUpdateEventB; // size = 0x1C or 0x20 +} SongUpdateRequestB; // size = 0x1C or 0x20 -typedef struct SongUpdateEventC { +typedef struct SongUpdateRequestC { /* 0x00 */ s32 songName; /* 0x04 */ s32 duration; /* 0x08 */ s32 startVolume; /* 0x0C */ s32 finalVolume; /* 0x10 */ s32 index; - /* 0x14 */ s32 unk_14; + /* 0x14 */ s32 pauseMode; /* 0x18 */ char pad_18[8]; -} SongUpdateEventC; // size = 0x1C or 0x20 +} SongUpdateRequestC; // size = 0x1C or 0x20 -typedef struct SongUpdateEventD { +typedef struct SongUpdateRequestD { /* 0x00 */ s32 songName; /* 0x04 */ s32 unk_04; /* 0x08 */ s32 unk_08; @@ -1194,18 +1208,18 @@ typedef struct SongUpdateEventD { /* 0x10 */ s32 mode; // 0 or 1 /* 0x14 */ s32 unk_14; /* 0x18 */ char pad_18[8]; -} SongUpdateEventD; // size = 0x1C or 0x20 +} SongUpdateRequestD; // size = 0x1C or 0x20 -// might be same as SongUpdateEventC -typedef struct SongUpdateEventE { +// might be same as SongUpdateRequestC +typedef struct SongUpdateRequestE { /* 0x00 */ s32 songName; /* 0x04 */ s32 duration; /* 0x08 */ s32 startVolume; /* 0x0C */ s32 finalVolume; /* 0x10 */ s32 index; - /* 0x14 */ s32 unk_14; + /* 0x14 */ s32 pauseMode; /* 0x18 */ char pad_18[8]; -} SongUpdateEventE; // size = 0x1C or 0x20 +} SongUpdateRequestE; // size = 0x1C or 0x20 typedef struct MSEQTrackData { /* 0x0 */ u8 trackIndex; diff --git a/src/audio/bgm_control.c b/src/audio/bgm_control.c index 8f888e91b8..142c5f06da 100644 --- a/src/audio/bgm_control.c +++ b/src/audio/bgm_control.c @@ -10,16 +10,16 @@ BSS s16 MusicTargetVolume; BSS s16 MusicMaxVolume; BSS s16 MusicCurrentVolume; -MusicSettings gMusicSettings[2]; +MusicControlData gMusicControlData[2]; -MusicSettings BlankMusicSettings = { +MusicControlData BlankMusicControlData = { .flags = 0, - .state = MUSIC_STATE_0, + .state = MUSIC_STATE_IDLE, .fadeOutTime = -1, .fadeInTime = 0, .fadeStartVolume = 0, .fadeEndVolume = 0, - .songID = AU_SONG_NONE, + .requestedSongID = AU_SONG_NONE, .variation = -1, .songName = -1, .battleSongID = 0, @@ -64,8 +64,8 @@ s32 bgm_get_map_default_variation(s32 songID) { void bgm_reset_sequence_players(void) { s32 i; - for (i = 0; i < ARRAY_COUNT(gMusicSettings); i++) { - gMusicSettings[i] = BlankMusicSettings; + for (i = 0; i < ARRAY_COUNT(gMusicControlData); i++) { + gMusicControlData[i] = BlankMusicControlData; } MusicTargetVolume = VOL_LEVEL_FULL; @@ -80,95 +80,103 @@ void bgm_reset_volume(void) { } //TODO refactor out constants -void bgm_update_music_settings(void) { - MusicSettings* music = gMusicSettings; +void bgm_update_music_control(void) { + MusicControlData* music = gMusicControlData; s32 i = 0; - s16 state2 = MUSIC_STATE_2; - s16 flag4 = MUSIC_SETTINGS_FLAG_4; + s16 stateFadeOut = MUSIC_STATE_AWAIT_FADEOUT; + s16 pushedFlag = MUSIC_FLAG_PUSHING; s32 flags; - for (i; i < ARRAY_COUNT(gMusicSettings); i++, music++) { + for (i; i < ARRAY_COUNT(gMusicControlData); i++, music++) { switch (music->state) { - case MUSIC_STATE_0: + case MUSIC_STATE_IDLE: break; - case MUSIC_STATE_1: - if (music->flags & MUSIC_SETTINGS_FLAG_1) { + case MUSIC_STATE_STOP_CURRENT: + if (music->flags & MUSIC_FLAG_PLAYING) { if (music->fadeOutTime < 250) { - if (!(music->flags & MUSIC_SETTINGS_FLAG_4)) { + if (!(music->flags & MUSIC_FLAG_PUSHING)) { if (snd_song_stop(music->songName) == AU_RESULT_OK) { - music->state = state2; + music->state = stateFadeOut; } } else { - if (func_80055AF0(music->songName) == AU_RESULT_OK) { - music->state = state2; + if (snd_song_UNK_push_stop(music->songName) == AU_RESULT_OK) { + music->state = stateFadeOut; } } - } else if (!(music->flags & MUSIC_SETTINGS_FLAG_4)) { - if (snd_song_set_variation_fade_time(music->songName, music->fadeOutTime, NULL) == AU_RESULT_OK) { - music->state = state2; + } else if (!(music->flags & MUSIC_FLAG_PUSHING)) { + if (snd_song_request_fade_out(music->songName, music->fadeOutTime, NULL) == AU_RESULT_OK) { + music->state = stateFadeOut; } } else { - if (func_80055BB8(music->songName, 250) == AU_RESULT_OK) { - music->state = state2; + if (snd_song_UNK_request_push_fade_out(music->songName, 250) == AU_RESULT_OK) { + music->state = stateFadeOut; } } } else { - if (music->flags & MUSIC_SETTINGS_FLAG_4) { - music->flags |= MUSIC_SETTINGS_FLAG_10; + if (music->flags & MUSIC_FLAG_PUSHING) { + // nothing was playing in this case, so remember to skip the next pop + music->flags |= MUSIC_FLAG_IGNORE_POP; } - music->flags &= ~flag4; - music->state = MUSIC_STATE_5; + music->flags &= ~pushedFlag; + music->state = MUSIC_STATE_PLAY_NEXT; } break; - case MUSIC_STATE_2: + case MUSIC_STATE_AWAIT_FADEOUT: flags = music->flags; - music->flags &= ~flag4; - if (flags & MUSIC_SETTINGS_FLAG_1) { + music->flags &= ~pushedFlag; + if (flags & MUSIC_FLAG_PLAYING) { if (snd_song_is_playing(music->songName) == AU_RESULT_OK) { - music->flags &= ~MUSIC_SETTINGS_FLAG_1; + music->flags &= ~MUSIC_FLAG_PLAYING; music->state = MUSIC_STATE_DELAY_2; } } else { - music->state = MUSIC_STATE_5; + music->state = MUSIC_STATE_PLAY_NEXT; } break; case MUSIC_STATE_DELAY_2: music->state = MUSIC_STATE_DELAY_1; break; case MUSIC_STATE_DELAY_1: - music->state = MUSIC_STATE_5; + music->state = MUSIC_STATE_PLAY_NEXT; break; - case MUSIC_STATE_5: - if (!(music->flags & MUSIC_SETTINGS_FLAG_8)) { - if (music->songID <= AU_SONG_NONE) { - music->state = MUSIC_STATE_0; + case MUSIC_STATE_PLAY_NEXT: + if (!(music->flags & MUSIC_FLAG_POPPING)) { + if (music->requestedSongID <= AU_SONG_NONE) { + // new song is AU_SONG_NONE, play nothing + music->state = MUSIC_STATE_IDLE; } else { - music->songName = snd_song_load(music->songID, i); + music->songName = snd_song_load(music->requestedSongID, i); + // snd_song_lond may return either songName or an AuResult error code. + // since song names are 4-character big-endian identifiers packed into an s32, we require + // the upper half of the return value to be nonzero for songs which loaded without error. + // this reserves return values from 0 to 0xFFFF for AuResult codes. if (music->songName > 0xFFFFU) { - if ((music->flags & MUSIC_SETTINGS_FLAG_20)) { - snd_song_set_variation_fade(music->songName, music->variation, + if ((music->flags & MUSIC_FLAG_FADE_IN_NEXT)) { + snd_song_request_fade_in(music->songName, music->variation, music->fadeInTime, music->fadeStartVolume, music->fadeEndVolume); - music->flags &= ~MUSIC_SETTINGS_FLAG_20; + music->flags &= ~MUSIC_FLAG_FADE_IN_NEXT; } else { + // if we aren't fading in, just start at the default volume level bgm_set_target_volume(MusicDefaultVolume); } - if (snd_song_start_variation(music->songName, music->variation) == 0) { - music->flags |= MUSIC_SETTINGS_FLAG_1; - music->state = MUSIC_STATE_0; + /// @bug this is called even if we are trying to fade in, immediately overriding any fade parameters + if (snd_song_request_play(music->songName, music->variation) == AU_RESULT_OK) { + music->flags |= MUSIC_FLAG_PLAYING; + music->state = MUSIC_STATE_IDLE; } } } } else { - if (music->flags & MUSIC_SETTINGS_FLAG_10) { - music->state = MUSIC_STATE_0; - music->flags &= ~(MUSIC_SETTINGS_FLAG_10 | MUSIC_SETTINGS_FLAG_8); - } else if (func_80055B28(music->savedSongName) == AU_RESULT_OK) { - music->songID = music->savedSongID; + if (music->flags & MUSIC_FLAG_IGNORE_POP) { + music->state = MUSIC_STATE_IDLE; + music->flags &= ~(MUSIC_FLAG_IGNORE_POP | MUSIC_FLAG_POPPING); + } else if (snd_song_UNK_request_pop(music->savedSongName) == AU_RESULT_OK) { + music->requestedSongID = music->savedSongID; music->variation = music->savedVariation; music->songName = music->savedSongName; - music->state = MUSIC_STATE_0; - music->flags |= MUSIC_SETTINGS_FLAG_1; - music->flags &= ~MUSIC_SETTINGS_FLAG_8; + music->state = MUSIC_STATE_IDLE; + music->flags |= MUSIC_FLAG_PLAYING; + music->flags &= ~MUSIC_FLAG_POPPING; } } break; @@ -178,19 +186,18 @@ void bgm_update_music_settings(void) { } s32 _bgm_set_song(s32 playerIndex, s32 songID, s32 variation, s32 fadeOutTime, s16 volume) { - MusicSettings* musicSetting; + MusicControlData* music; s32 mapSongVariation; if (gGameStatusPtr->demoState != DEMO_STATE_NONE) { return 1; } - musicSetting = &gMusicSettings[playerIndex]; + music = &gMusicControlData[playerIndex]; if (!gGameStatusPtr->musicEnabled) { - snd_song_stop(musicSetting->songName); - musicSetting->flags &= ~MUSIC_SETTINGS_FLAG_1; - + snd_song_stop(music->songName); + music->flags &= ~MUSIC_FLAG_PLAYING; return 1; } @@ -199,47 +206,47 @@ s32 _bgm_set_song(s32 playerIndex, s32 songID, s32 variation, s32 fadeOutTime, s variation = mapSongVariation; } - if (musicSetting->songID == songID && musicSetting->variation == variation) { + if (music->requestedSongID == songID && music->variation == variation) { bgm_set_target_volume(volume); - if (musicSetting->flags & MUSIC_SETTINGS_FLAG_4) { - func_80055B80(musicSetting->songName); - musicSetting->flags &= ~MUSIC_SETTINGS_FLAG_4; + if (music->flags & MUSIC_FLAG_PUSHING) { + func_80055B80(music->songName); + music->flags &= ~MUSIC_FLAG_PUSHING; } return 2; } MusicDefaultVolume = volume; - musicSetting->songID = songID; - musicSetting->variation = variation; - musicSetting->fadeOutTime = fadeOutTime; - musicSetting->state = MUSIC_STATE_1; - musicSetting->flags &= ~MUSIC_SETTINGS_FLAG_ENABLE_PROXIMITY_MIX; + music->requestedSongID = songID; + music->variation = variation; + music->fadeOutTime = fadeOutTime; + music->state = MUSIC_STATE_STOP_CURRENT; + music->flags &= ~MUSIC_FLAG_ENABLE_PROX_MIX; return 1; } s32 bgm_set_song(s32 playerIndex, s32 songID, s32 variation, s32 fadeOutTime, s16 volume) { - gMusicSettings[playerIndex].flags &= ~MUSIC_SETTINGS_FLAG_8; + gMusicControlData[playerIndex].flags &= ~MUSIC_FLAG_POPPING; return _bgm_set_song(playerIndex, songID, variation, fadeOutTime, volume); } -s32 bgm_fade_in_song(s32 playerIndex, s32 songID, s32 variation, s32 fadeInTime, s16 fadeStartVolume, s16 fadeEndVolume) { - MusicSettings* musicSetting; +b32 bgm_fade_in_song(s32 playerIndex, s32 songID, s32 variation, s32 fadeInTime, s16 fadeStartVolume, s16 fadeEndVolume) { + MusicControlData* music; s32 mapSongVariation; if (gGameStatusPtr->demoState) { - return 1; + return TRUE; } - musicSetting = &gMusicSettings[playerIndex]; + music = &gMusicControlData[playerIndex]; if (!gGameStatusPtr->musicEnabled) { - snd_song_stop(musicSetting->songName); - musicSetting->flags &= ~MUSIC_SETTINGS_FLAG_1; - return 1; + snd_song_stop(music->songName); + music->flags &= ~MUSIC_FLAG_PLAYING; + return TRUE; } mapSongVariation = bgm_get_map_default_variation(songID); @@ -247,71 +254,71 @@ s32 bgm_fade_in_song(s32 playerIndex, s32 songID, s32 variation, s32 fadeInTime, variation = mapSongVariation; } - musicSetting->fadeInTime = fadeInTime; - musicSetting->fadeStartVolume = fadeStartVolume; - musicSetting->fadeEndVolume = fadeEndVolume; - musicSetting->songID = songID; - musicSetting->variation = variation; - musicSetting->flags |= MUSIC_SETTINGS_FLAG_20; - musicSetting->state = MUSIC_STATE_1; - musicSetting->flags &= ~MUSIC_SETTINGS_FLAG_ENABLE_PROXIMITY_MIX; + music->fadeInTime = fadeInTime; + music->fadeStartVolume = fadeStartVolume; + music->fadeEndVolume = fadeEndVolume; + music->requestedSongID = songID; + music->variation = variation; + music->flags |= MUSIC_FLAG_FADE_IN_NEXT; + music->state = MUSIC_STATE_STOP_CURRENT; + music->flags &= ~MUSIC_FLAG_ENABLE_PROX_MIX; - return 1; + return TRUE; } s32 bgm_adjust_proximity(s32 playerIndex, s32 mix, s16 state) { - MusicSettings* musicSetting = &gMusicSettings[playerIndex]; + MusicControlData* music = &gMusicControlData[playerIndex]; - if (!(musicSetting->flags & MUSIC_SETTINGS_FLAG_1)) { + if (!(music->flags & MUSIC_FLAG_PLAYING)) { return FALSE; } - if (!(musicSetting->flags & MUSIC_SETTINGS_FLAG_ENABLE_PROXIMITY_MIX)) { + if (!(music->flags & MUSIC_FLAG_ENABLE_PROX_MIX)) { return FALSE; } switch (state) { case MUSIC_PROXIMITY_FAR: - snd_song_set_proximity_mix_far(musicSetting->songName, mix); + snd_song_set_proximity_mix_far(music->songName, mix); break; case MUSIC_PROXIMITY_NEAR: - snd_song_set_proximity_mix_near(musicSetting->songName, mix); + snd_song_set_proximity_mix_near(music->songName, mix); break; case MUSIC_PROXIMITY_FULL: - snd_song_set_proximity_mix_full(musicSetting->songName, mix); + snd_song_set_proximity_mix_full(music->songName, mix); break; } return TRUE; } AuResult bgm_set_track_volumes(s32 playerIndex, s16 trackVolSet) { - MusicSettings* musicSetting = &gMusicSettings[playerIndex]; + MusicControlData* music = &gMusicControlData[playerIndex]; - if (!(musicSetting->flags & MUSIC_SETTINGS_FLAG_1)) { + if (!(music->flags & MUSIC_FLAG_PLAYING)) { return AU_RESULT_OK; } - return snd_song_set_track_volumes(musicSetting->songName, trackVolSet); + return snd_song_set_track_volumes(music->songName, trackVolSet); } AuResult bgm_clear_track_volumes(s32 playerIndex, s16 trackVolSet) { - MusicSettings* musicSetting = &gMusicSettings[playerIndex]; + MusicControlData* music = &gMusicControlData[playerIndex]; - if (!(musicSetting->flags & MUSIC_SETTINGS_FLAG_1)) { + if (!(music->flags & MUSIC_FLAG_PLAYING)) { return AU_RESULT_OK; } - return snd_song_clear_track_volumes(musicSetting->songName, trackVolSet); + return snd_song_clear_track_volumes(music->songName, trackVolSet); } AuResult bgm_set_linked_mode(s32 playerIndex, s16 mode) { - MusicSettings* musicSetting = &gMusicSettings[playerIndex]; + MusicControlData* music = &gMusicControlData[playerIndex]; - if (!(musicSetting->flags & MUSIC_SETTINGS_FLAG_1)) { + if (!(music->flags & MUSIC_FLAG_PLAYING)) { return AU_RESULT_OK; } - return snd_song_set_linked_mode(musicSetting->songName, mode); + return snd_song_set_linked_mode(music->songName, mode); } s32 bgm_init_music_players(void) { @@ -358,76 +365,74 @@ void bgm_update_volume(void) { } b32 bgm_is_any_song_playing(void) { - MusicSettings* settings = gMusicSettings; + MusicControlData* music = gMusicControlData; s32 i; - for (i = 0; i < ARRAY_COUNT(gMusicSettings); i++, settings++) { - if (!(settings->flags & MUSIC_SETTINGS_FLAG_1)) { - continue; - } - - if (snd_song_is_playing(settings->songName)) { - return TRUE; + for (i = 0; i < ARRAY_COUNT(gMusicControlData); i++, music++) { + if (music->flags & MUSIC_FLAG_PLAYING) { + if (snd_song_is_playing(music->songName)) { + return TRUE; + } } } return FALSE; } void bgm_pop_song(void) { - MusicSettings* musicSetting = gMusicSettings; + MusicControlData* music = gMusicControlData; if (gGameStatusPtr->demoState == DEMO_STATE_NONE) { - musicSetting->flags |= MUSIC_SETTINGS_FLAG_8; - _bgm_set_song(0, musicSetting->savedSongID, musicSetting->savedVariation, 0, VOL_LEVEL_FULL); + music->flags |= MUSIC_FLAG_POPPING; + _bgm_set_song(0, music->savedSongID, music->savedVariation, 0, VOL_LEVEL_FULL); } } void bgm_push_song(s32 songID, s32 variation) { - MusicSettings* musicSetting = gMusicSettings; + MusicControlData* music = gMusicControlData; if (gGameStatusPtr->demoState == DEMO_STATE_NONE) { - musicSetting->savedSongID = musicSetting->songID; - musicSetting->savedVariation = musicSetting->variation; - musicSetting->savedSongName = musicSetting->songName; - musicSetting->flags |= MUSIC_SETTINGS_FLAG_4; + music->savedSongID = music->requestedSongID; + music->savedVariation = music->variation; + music->savedSongName = music->songName; + music->flags |= MUSIC_FLAG_PUSHING; bgm_set_song(0, songID, variation, 500, VOL_LEVEL_FULL); } } void bgm_pop_battle_song(void) { - MusicSettings* musicSetting = gMusicSettings; + MusicControlData* music = gMusicControlData; if (gGameStatusPtr->demoState == DEMO_STATE_NONE) { if (gOverrideFlags & GLOBAL_OVERRIDES_DONT_RESUME_SONG_AFTER_BATTLE) { gOverrideFlags &= ~GLOBAL_OVERRIDES_DONT_RESUME_SONG_AFTER_BATTLE; } else { - musicSetting->flags |= MUSIC_SETTINGS_FLAG_8; - _bgm_set_song(0, musicSetting->savedSongID, musicSetting->savedVariation, 0, VOL_LEVEL_FULL); + music->flags |= MUSIC_FLAG_POPPING; + _bgm_set_song(0, music->savedSongID, music->savedVariation, 0, VOL_LEVEL_FULL); snd_ambient_resume(0, 250); } } } void bgm_push_battle_song(void) { - MusicSettings* musicSetting = gMusicSettings; + MusicControlData* music = gMusicControlData; if (gGameStatusPtr->demoState == DEMO_STATE_NONE) { if (!(gOverrideFlags & GLOBAL_OVERRIDES_DONT_RESUME_SONG_AFTER_BATTLE)) { snd_ambient_pause(0, 250); - musicSetting->savedSongID = musicSetting->songID; - musicSetting->savedVariation = musicSetting->variation; - musicSetting->savedSongName = musicSetting->songName; - musicSetting->flags |= MUSIC_SETTINGS_FLAG_4; - bgm_set_song(0, musicSetting->battleSongID, musicSetting->battleVariation, 500, VOL_LEVEL_FULL); + music->savedSongID = music->requestedSongID; + music->savedVariation = music->variation; + music->savedSongName = music->songName; + music->flags |= MUSIC_FLAG_PUSHING; + bgm_set_song(0, music->battleSongID, music->battleVariation, 500, VOL_LEVEL_FULL); } } } void bgm_set_battle_song(s32 songID, s32 variation) { - MusicSettings* musicSetting = gMusicSettings; + MusicControlData* music = gMusicControlData; - musicSetting->battleSongID = songID; - musicSetting->battleVariation = variation; + music->battleSongID = songID; + music->battleVariation = variation; } void bgm_NOOP(void) { diff --git a/src/audio/bgm_player.c b/src/audio/bgm_player.c index 4c4a09cf9e..07ece6bf6a 100644 --- a/src/audio/bgm_player.c +++ b/src/audio/bgm_player.c @@ -132,7 +132,7 @@ BGMPlayer* au_bgm_get_player_with_song_name(s32 songString) { return NULL; } -AuResult au_bgm_dispatch_player_event(SongUpdateEventA* event) { +AuResult au_bgm_process_init_song(SongUpdateRequestA* request) { BGMPlayer* player; BGMFileInfo* fileInfo; s32 songName; @@ -144,13 +144,14 @@ AuResult au_bgm_dispatch_player_event(SongUpdateEventA* event) { u32 i; status = AU_RESULT_OK; - songName = event->songName; - variation = event->variation; + songName = request->songName; + variation = request->variation; + if (songName != 0) { player = au_bgm_get_player_with_song_name(songName); if (player != NULL) { fileInfo = &player->bgmFile->info; - duration = event->duration; + duration = request->duration; if (duration != 0) { if (duration > SND_MAX_DURATION) { duration = SND_MAX_DURATION; @@ -158,14 +159,14 @@ AuResult au_bgm_dispatch_player_event(SongUpdateEventA* event) { duration = SND_MIN_DURATION; } } - volume0 = event->startVolume; + volume0 = request->startVolume; if (volume0 > AU_MAX_VOLUME_8) { volume0 = AU_MAX_VOLUME_8; } if (volume0 != 0) { volume0 = AU_VOL_8_TO_16(volume0); } - volume1 = event->finalVolume; + volume1 = request->finalVolume; if (volume1 > AU_MAX_VOLUME_8) { volume1 = AU_MAX_VOLUME_8; } @@ -203,6 +204,7 @@ AuResult au_bgm_dispatch_player_event(SongUpdateEventA* event) { player->drumsInfo = NULL; player->bgmDrumCount = 0; } + if (fileInfo->instruments != 0) { player->instrumentsInfo = AU_FILE_RELATIVE(player->bgmFile, fileInfo->instruments << 2); player->bgmInstrumentCount = fileInfo->instrumentCount; @@ -210,6 +212,7 @@ AuResult au_bgm_dispatch_player_event(SongUpdateEventA* event) { player->instrumentsInfo = NULL; player->bgmInstrumentCount = 0; } + player->songName = songName; au_bgm_player_initialize(player); } else { @@ -281,12 +284,12 @@ b32 au_bgm_player_is_active(BGMPlayer* player) { } } -AuResult func_8004DB4C(SongUpdateEventB* s) { +AuResult au_bgm_process_fade_out(SongUpdateRequestB* request) { AuResult status; BGMPlayer* player; - u32 songName = s->songName; - u32 duration = s->duration; - s16 volume = s->finalVolume; + u32 songName = request->songName; + u32 duration = request->duration; + s16 volume = request->finalVolume; status = AU_RESULT_OK; if (songName != 0) { @@ -295,12 +298,12 @@ AuResult func_8004DB4C(SongUpdateEventB* s) { if (player != NULL) { if (player->songName == songName) { if (player->masterState != BGM_PLAY_STATE_IDLE) { - if (!player->unk_220) { + if (!player->paused) { player->fadeInfo.baseTarget = volume; player->fadeInfo.baseTicks = (duration * 1000) / AU_FRAME_USEC; player->fadeInfo.baseStep = ((volume << 0x10) - player->fadeInfo.baseVolume) / player->fadeInfo.baseTicks; - player->fadeInfo.onCompleteCallback = s->callback; - if (s->unk_14 == 1) { + player->fadeInfo.onCompleteCallback = request->callback; + if (request->onPush == 1) { player->fadeSongName = songName; } } @@ -319,19 +322,19 @@ AuResult func_8004DB4C(SongUpdateEventB* s) { } AuResult func_8004DC80(s32 songName) { - SongUpdateEventC s; + SongUpdateRequestC s; s.songName = songName; s.duration = 0; s.startVolume = 0; s.finalVolume = 0; - s.index = 0; - s.unk_14 = 0; + s.index = MUSIC_CROSS_FADE; + s.pauseMode = FALSE; - return func_8004DCB8(&s, 0); + return au_bgm_process_suspend(&s, 0); } -AuResult func_8004DCB8(SongUpdateEventC* update, s32 clearChanged) { +AuResult au_bgm_process_suspend(SongUpdateRequestC* request, s32 clearChanged) { AuResult status; BGMPlayer* playerA; BGMPlayer* playerB; @@ -340,29 +343,29 @@ AuResult func_8004DCB8(SongUpdateEventC* update, s32 clearChanged) { u32 i; u32 j; - songName = update->songName; - index = update->index; + songName = request->songName; + index = request->index; status = AU_RESULT_OK; if (songName != 0) { playerA = au_bgm_get_player_with_song_name(songName); if (playerA != NULL) { - if (update->unk_14 == 0) { - playerB = au_unk_80053F64(index); + if (!request->pauseMode) { + playerB = au_unk_get_temp_player_for_index(index); if (playerB != NULL) { if (songName == playerA->songName) { if (!clearChanged) { for (i = 0; i < ARRAY_COUNT(playerA->tracks); i++) { BGMPlayerTrack* track = &playerA->tracks[i]; - if (track->bgmReadPos != 0) { + if (track->bgmReadPos != NULL) { for (j = track->firstVoice; j < track->lastVoice; j++) { track->changed.all = 0; } } } } - playerA->globals->unk_globals_6C[index].unk_5 = playerA->priority; - playerA->globals->unk_globals_6C[index].unk_4 = 1; + playerA->globals->unk_globals_6C[index].priority = playerA->priority; + playerA->globals->unk_globals_6C[index].assigned = 1; playerA->fadeSongName = 0; au_copy_words(playerA, playerB, sizeof(*playerA)); if (clearChanged == 0) { @@ -375,7 +378,7 @@ AuResult func_8004DCB8(SongUpdateEventC* update, s32 clearChanged) { } else { if (songName == playerA->songName) { if (playerA->masterState != BGM_PLAY_STATE_IDLE) { - playerA->unk_220 = TRUE; + playerA->paused = TRUE; au_bgm_reset_all_voices(playerA); } } @@ -389,7 +392,7 @@ AuResult func_8004DCB8(SongUpdateEventC* update, s32 clearChanged) { return status; } -AuResult func_8004DE2C(SongUpdateEventE* update) { +AuResult au_bgm_process_resume(SongUpdateRequestE* request) { AuResult status; BGMPlayer* playerA; BGMPlayer* playerB; @@ -399,19 +402,19 @@ AuResult func_8004DE2C(SongUpdateEventE* update) { s32 volume1; s32 duration; - songName = update->songName; - index = update->index; + songName = request->songName; + index = request->index; status = AU_RESULT_OK; if (songName != 0) { - if (update->unk_14 == 0) { - playerA = au_unk_80053F64(index); - if (playerA != NULL && playerA->globals->unk_globals_6C[index].unk_4 == 1) { - playerB = au_unk_80054248(playerA->globals->unk_globals_6C[index].unk_5); + if (!request->pauseMode) { + playerA = au_unk_get_temp_player_for_index(index); + if (playerA != NULL && playerA->globals->unk_globals_6C[index].assigned == 1) { + playerB = au_get_client_by_priority(playerA->globals->unk_globals_6C[index].priority); if (playerB != NULL) { if (!au_bgm_player_is_active(playerB)) { status = au_unk_80053E58(playerA->songID, playerA->bgmFile); - duration = update->duration; + duration = request->duration; if (duration != 0) { if (duration > SND_MAX_DURATION) { duration = SND_MAX_DURATION; @@ -419,14 +422,14 @@ AuResult func_8004DE2C(SongUpdateEventE* update) { duration = SND_MIN_DURATION; } } - volume0 = update->startVolume; + volume0 = request->startVolume; if (volume0 > AU_MAX_VOLUME_8) { volume0 = AU_MAX_VOLUME_8; } if (volume0 != 0) { volume0 = AU_VOL_8_TO_16(volume0); } - volume1 = update->finalVolume; + volume1 = request->finalVolume; if (volume1 > AU_MAX_VOLUME_8) { volume1 = AU_MAX_VOLUME_8; } @@ -455,8 +458,8 @@ AuResult func_8004DE2C(SongUpdateEventE* update) { playerB = au_bgm_get_player_with_song_name(songName); if (playerB != NULL) { if (songName == playerB->songName) { - if (playerB->unk_220) { - playerB->unk_220 = FALSE; + if (playerB->paused) { + playerB->paused = FALSE; } } } @@ -499,14 +502,14 @@ void func_8004DFD4(AuGlobals* globals) { globals->unk_80 = 0; } -AuResult au_bgm_adjust_volume(SongUpdateEventA* update) { +AuResult au_bgm_adjust_volume(SongUpdateRequestA* request) { BGMPlayer* player; AuResult status = AU_RESULT_OK; - if (update->songName != 0) { - player = au_bgm_get_player_with_song_name(update->songName); + if (request->songName != 0) { + player = au_bgm_get_player_with_song_name(request->songName); if (player != NULL) { - au_unk_80053B04(&player->fadeInfo, update->duration, update->finalVolume); + au_fade_calc_envelope(&player->fadeInfo, request->duration, request->finalVolume); } else { status = AU_ERROR_SONG_NOT_PLAYING; @@ -542,7 +545,7 @@ void au_bgm_player_init(BGMPlayer* player, s32 priority, s32 busID, AuGlobals* g player->masterVolumeStep = 0; player->masterPitchShift = 0; player->detune = 0; - player->unk_220 = FALSE; + player->paused = FALSE; player->trackVolsConfig = NULL; player->bFadeConfigSetsVolume = FALSE; player->masterState = BGM_PLAY_STATE_IDLE; @@ -591,7 +594,7 @@ void au_bgm_player_init(BGMPlayer* player, s32 priority, s32 busID, AuGlobals* g note->pendingTick = FALSE; } - au_fade_set_vol_scale(&player->fadeInfo, AU_MAX_VOLUME_16); + au_fade_set_envelope(&player->fadeInfo, AU_MAX_VOLUME_16); snd_bgm_clear_legacy_commands(player); } @@ -667,7 +670,7 @@ s32 au_bgm_player_audio_frame_update(BGMPlayer* player) { hasMore = FALSE; break; case BGM_PLAY_STATE_ACTIVE: - if (!player->unk_220) { + if (!player->paused) { au_bgm_player_update_playing(player); if (player->masterState == BGM_PLAY_STATE_ACTIVE) { hasMore = FALSE; @@ -789,7 +792,7 @@ void au_bgm_player_initialize(BGMPlayer* player) { player->effectValues[i] = 0; } - player->unk_220 = FALSE; + player->paused = FALSE; player->songPlayingCounter = 0; for (i = 0; i < ARRAY_COUNT(player->compLoopStartLabels); i++) { player->compLoopStartLabels[i] = player->compReadPos; @@ -990,7 +993,7 @@ void au_bgm_load_phrase(BGMPlayer* player, u32 cmd) { void au_bgm_player_update_stop(BGMPlayer* player) { s32 i; - player->unk_220 = FALSE; + player->paused = FALSE; player->songName = 0; player->fadeSongName = 0; player->unk_58 = FALSE; @@ -2053,7 +2056,7 @@ void au_bgm_reset_all_voices(BGMPlayer* player) { } } -AuResult au_bgm_set_linked_tracks(SongUpdateEventD* update) { +AuResult au_bgm_set_linked_tracks(SongUpdateRequestD* request) { BGMPlayer* player; BGMPlayerTrack* track; BGMPlayerTrack* linkTrack; @@ -2062,8 +2065,8 @@ AuResult au_bgm_set_linked_tracks(SongUpdateEventD* update) { s32 voiceIdx; s8 oldVolume; - s32 songName = update->songName; - s32 linkIndex = update->mode; + s32 songName = request->songName; + s32 linkIndex = request->mode; AuResult status = AU_RESULT_OK; if (songName != 0) { diff --git a/src/audio/core.h b/src/audio/core.h index 9e811aff46..6153d4249d 100644 --- a/src/audio/core.h +++ b/src/audio/core.h @@ -52,17 +52,17 @@ void au_fade_clear(Fade* fade); void au_fade_update(Fade* fade); void au_fade_set_volume(u8 arg0, u16 arg1, s32 arg2); void au_fade_flush(Fade* fade); -void au_fade_set_vol_scale(Fade* fade, s16 value); -void au_unk_80053B04(Fade* fade, u32 arg1, s32 target); +void au_fade_set_envelope(Fade* fade, s16 value); +void au_fade_calc_envelope(Fade* fade, u32 arg1, s32 target); void au_fade_update_envelope(Fade* fade); Instrument* au_get_instrument(AuGlobals* globals, BankSetIndex bank, s32 patch, EnvelopeData* arg3); void au_get_bgm_player_and_file(u32 playerIndex, BGMHeader** outCurrentTrackData, BGMPlayer** outPlayer); void au_get_bgm_player(u32 playerIndex, BGMPlayer** outPlayer); AuResult au_load_song_files(u32 arg0, BGMHeader* arg1, BGMPlayer* arg2); AuResult au_unk_80053E58(s32 songID, BGMHeader* arg1); -BGMPlayer* au_unk_80053F64(s32 arg0); +BGMPlayer* au_unk_get_temp_player_for_index(s32 arg0); AuResult au_ambient_load(u32 arg0); -BGMPlayer* au_unk_80054248(u8 arg0); +BGMPlayer* au_get_client_by_priority(u8 arg0); void au_load_INIT(AuGlobals* arg0, s32 romAddr, ALHeap* heap); AuResult au_fetch_SBN_file(u32 fileIdx, AuFileFormat format, SBNFileEntry* arg2); void au_load_PER(AuGlobals* globals, s32 romAddr); diff --git a/src/audio/core/engine.c b/src/audio/core/engine.c index 44854bcfbb..aa900a108e 100644 --- a/src/audio/core/engine.c +++ b/src/audio/core/engine.c @@ -78,8 +78,8 @@ void au_engine_init(s32 outputRate) { globals->audioThreadCallbacks[1] = NULL; for (i = 0; i < ARRAY_COUNT(globals->unk_globals_6C); i++) { - globals->unk_globals_6C[i].unk_4 = 0; - globals->unk_globals_6C[i].unk_5 = 0; + globals->unk_globals_6C[i].assigned = 0; + globals->unk_globals_6C[i].priority = 0; } for (i = 0; i < ARRAY_COUNT(globals->effectChanges); i++) { @@ -460,14 +460,14 @@ void au_fade_flush(Fade* fade) { } } -void au_fade_set_vol_scale(Fade* fade, s16 value) { +void au_fade_set_envelope(Fade* fade, s16 value) { fade->envelopeVolume = value << 16; fade->envelopeTarget = value; fade->envelopeTicks = 0; fade->envelopeStep = 0; } -void au_unk_80053B04(Fade* fade, u32 duration, s32 target) { +void au_fade_calc_envelope(Fade* fade, u32 duration, s32 target) { s16 ticks; s32 delta; @@ -619,23 +619,25 @@ AuResult au_unk_80053E58(s32 songID, BGMHeader* bgmFile) { SBNFileEntry fileEntry; SBNFileEntry sbnEntry; SBNFileEntry* bkFileEntry; - AuGlobals* soundData; + AuGlobals* globals; InitSongEntry* songInfo; s32 i; u16 bkFileIndex; - soundData = gSoundGlobals; - songInfo = &soundData->songList[songID]; - status = au_fetch_SBN_file(songInfo[0].bgmFileIndex, AU_FMT_BGM, &sbnEntry); + globals = gSoundGlobals; + songInfo = &globals->songList[songID]; + status = au_fetch_SBN_file(songInfo->bgmFileIndex, AU_FMT_BGM, &sbnEntry); if (status == AU_RESULT_OK) { + // load BGM file au_read_rom(sbnEntry.offset, bgmFile, sbnEntry.data & 0xFFFFFF); + // load any auxiliary banks required by this BGM for (i = 0; i < ARRAY_COUNT(songInfo->bkFileIndex); i++) { bkFileIndex = songInfo->bkFileIndex[i]; if (bkFileIndex != 0) { - bkFileEntry = &soundData->sbnFileList[bkFileIndex]; + bkFileEntry = &globals->sbnFileList[bkFileIndex]; - fileEntry.offset = (bkFileEntry->offset & 0xFFFFFF) + soundData->baseRomOffset; + fileEntry.offset = (bkFileEntry->offset & 0xFFFFFF) + globals->baseRomOffset; fileEntry.data = bkFileEntry->data; if ((fileEntry.data >> 0x18) == AU_FMT_BK) { @@ -650,9 +652,9 @@ AuResult au_unk_80053E58(s32 songID, BGMHeader* bgmFile) { return status; } -BGMPlayer* au_unk_80053F64(s32 variation) { - if (variation == 0) { - return gSoundGlobals->unk_globals_6C[0].bgmPlayer; +BGMPlayer* au_unk_get_temp_player_for_index(s32 index) { + if (index == MUSIC_CROSS_FADE) { + return gSoundGlobals->unk_globals_6C[MUSIC_CROSS_FADE].bgmPlayer; } return NULL; } @@ -726,13 +728,13 @@ AuResult au_ambient_load(u32 ambSoundID) { return AU_RESULT_OK; } -BGMPlayer* au_unk_80054248(u8 arg0) { - switch (arg0) { - case 1: +BGMPlayer* au_get_client_by_priority(u8 priority) { + switch (priority) { + case AU_PRIORITY_BGM_PLAYER_MAIN: return gBGMPlayerA; - case 2: + case AU_PRIORITY_BGM_PLAYER_AUX: return gBGMPlayerB; - case 4: + case AU_PRIORITY_SFX_MANAGER: return (BGMPlayer*)gSoundManager; // TODO: why return pointer to SoundManager? default: return NULL; diff --git a/src/audio/private.h b/src/audio/private.h index bf28487938..876aa2c24d 100644 --- a/src/audio/private.h +++ b/src/audio/private.h @@ -48,17 +48,17 @@ s16 au_sfx_manager_audio_frame_update(SoundManager* manager); // ---------------------------------------------------------------------------------- void au_bgm_begin_video_frame(BGMPlayer* player); BGMPlayer* au_bgm_get_player_with_song_name(s32 songString); -AuResult au_bgm_dispatch_player_event(SongUpdateEventA* event); +AuResult au_bgm_process_init_song(SongUpdateRequestA* event); AuResult au_bgm_stop_song(s32 songName); void au_bgm_stop_all(void); AuResult au_bgm_is_song_playing(s32 songName); b32 au_bgm_player_is_active(BGMPlayer* player); -AuResult func_8004DB4C(SongUpdateEventB* s); +AuResult au_bgm_process_fade_out(SongUpdateRequestB* s); AuResult func_8004DC80(s32 songName); -AuResult func_8004DCB8(SongUpdateEventC* update, s32 clearChanged); -AuResult func_8004DE2C(SongUpdateEventE* update); +AuResult au_bgm_process_suspend(SongUpdateRequestC* update, s32 clearChanged); +AuResult au_bgm_process_resume(SongUpdateRequestE* update); void func_8004DFD4(AuGlobals* globals); -AuResult au_bgm_adjust_volume(SongUpdateEventA* update); +AuResult au_bgm_adjust_volume(SongUpdateRequestA* update); void au_bgm_player_init(BGMPlayer* player, s32 arg1, s32 arg2, AuGlobals* arg3); void au_bgm_set_effect_indices(BGMPlayer* player, u8* list); void au_bgm_update_fade(BGMPlayer* player); @@ -107,7 +107,7 @@ void au_bgm_change_track_volume(BGMPlayer* player, s32 trackIdx, s16 arg2, u8 ar void au_bgm_set_track_volumes(BGMPlayer* player, u8* arg1, s32 arg2); void au_bgm_set_prox_mix_fade(BGMPlayer* player, BGMPlayerTrack* track, s32 target, s32 duration); void au_bgm_reset_all_voices(BGMPlayer* player); -AuResult au_bgm_set_linked_tracks(SongUpdateEventD* arg0); +AuResult au_bgm_set_linked_tracks(SongUpdateRequestD* arg0); // ---------------------------------------------------------------------------------- // snd_interface.c @@ -140,20 +140,20 @@ void snd_ambient_radio_setup(s32 arg0); AuResult snd_ambient_radio_stop(s32 arg0); AuResult snd_ambient_radio_select(s32 arg0); AuResult snd_song_load(s32 songID, s32 playerIndex); -AuResult snd_song_start_default(s32 songName); -AuResult snd_song_start_variation(s32 songName, s32 variation); +AuResult snd_song_request_play_default(s32 songName); +AuResult snd_song_request_play(s32 songName, s32 variation); AuResult snd_song_stop(s32 songName); void snd_song_stop_all(void); AuResult snd_song_is_playing(s32 songName); -AuResult snd_song_set_variation_fade(s32 songName, s32 variation, s32 fadeInTime, s32 startVolume, s32 endVolume); -AuResult snd_song_set_default_fade(s32 songName, s32 fadeInTime, s32 startVolume, s32 endVolume); -AuResult snd_song_set_variation_fade_time(s32 songName, s32 fadeTime, AuCallback callback); -AuResult func_80055AF0(s32 songName); -AuResult func_80055B28(s32 songName); +AuResult snd_song_request_fade_in(s32 songName, s32 variation, s32 fadeInTime, s32 startVolume, s32 endVolume); +AuResult snd_song_request_fade_in_default(s32 songName, s32 fadeInTime, s32 startVolume, s32 endVolume); +AuResult snd_song_request_fade_out(s32 songName, s32 fadeTime, AuCallback callback); +AuResult snd_song_UNK_push_stop(s32 songName); +AuResult snd_song_UNK_request_pop(s32 songName); AuResult func_80055B80(s32 songName); -AuResult func_80055BB8(s32 songName, s32 fadeTime); -AuResult func_80055BF0(s32 songName); -AuResult func_80055C2C(s32 songName); +AuResult snd_song_UNK_request_push_fade_out(s32 songName, s32 fadeTime); +AuResult snd_song_request_pause(s32 songName); +AuResult snd_song_request_unpause(s32 songName); AuResult snd_song_set_volume_quiet(s32 songName); AuResult snd_song_set_volume_full(s32 songName); AuResult snd_song_set_linked_mode(s32 songName, s32 mode); diff --git a/src/audio/public.h b/src/audio/public.h index 6a1a4c6f45..e54e72769c 100644 --- a/src/audio/public.h +++ b/src/audio/public.h @@ -31,21 +31,22 @@ AuResult snd_ambient_enable(s32 arg0); void snd_ambient_radio_setup(s32 arg0); AuResult snd_ambient_radio_stop(s32 arg0); AuResult snd_ambient_radio_select(s32 arg0); +/// return value may be either an AuResult error code OR a valid songName AuResult snd_song_load(s32 songID, s32 playerIndex); -AuResult snd_song_start_default(s32 songName); -AuResult snd_song_start_variation(s32 songName, s32 variation); +AuResult snd_song_request_play_default(s32 songName); +AuResult snd_song_request_play(s32 songName, s32 variation); AuResult snd_song_stop(s32 songName); void snd_song_stop_all(void); AuResult snd_song_is_playing(s32 songName); -AuResult snd_song_set_variation_fade(s32 songName, s32 variation, s32 fadeInTime, s32 startVolume, s32 endVolume); -AuResult snd_song_set_default_fade(s32 songName, s32 fadeInTime, s32 startVolume, s32 endVolume); -AuResult snd_song_set_variation_fade_time(s32 songName, s32 fadeTime, AuCallback callback); -AuResult func_80055AF0(s32 songName); -AuResult func_80055B28(s32 songName); +AuResult snd_song_request_fade_in(s32 songName, s32 variation, s32 fadeInTime, s32 startVolume, s32 endVolume); +AuResult snd_song_request_fade_in_default(s32 songName, s32 fadeInTime, s32 startVolume, s32 endVolume); +AuResult snd_song_request_fade_out(s32 songName, s32 fadeTime, AuCallback callback); +AuResult snd_song_UNK_push_stop(s32 songName); +AuResult snd_song_UNK_request_pop(s32 songName); AuResult func_80055B80(s32 songName); -AuResult func_80055BB8(s32 songName, s32 fadeTime); -AuResult func_80055BF0(s32 songName); -AuResult func_80055C2C(s32 songName); +AuResult snd_song_UNK_request_push_fade_out(s32 songName, s32 fadeTime); +AuResult snd_song_request_pause(s32 songName); +AuResult snd_song_request_unpause(s32 songName); AuResult snd_song_set_volume_quiet(s32 songName); AuResult snd_song_set_volume_full(s32 songName); AuResult snd_song_set_linked_mode(s32 songName, s32 mode); @@ -89,9 +90,9 @@ s32 bgm_set_song(s32 playerIndex, s32 songID, s32 variation, s32 fadeOutTime, s1 void bgm_set_battle_song(s32, s32); void bgm_push_battle_song(void); s32 bgm_adjust_proximity(s32 playerIndex, s32 arg1, s16 arg2); -s32 bgm_fade_in_song(s32 playerIndex, s32 songID, s32 variation, s32 fadeInTime, s16 arg4, s16 arg5); +b32 bgm_fade_in_song(s32 playerIndex, s32 songID, s32 variation, s32 fadeInTime, s16 arg4, s16 arg5); -void bgm_update_music_settings(void); +void bgm_update_music_control(void); b32 bgm_is_any_song_playing(void); void bgm_reset_sequence_players(void); void bgm_pop_song(void); diff --git a/src/audio/snd_interface.c b/src/audio/snd_interface.c index b51f72e4b4..383929310a 100644 --- a/src/audio/snd_interface.c +++ b/src/audio/snd_interface.c @@ -4,7 +4,11 @@ static u8* snd_song_get_track_volumes_set(MusicTrackVols arg0); +/// While TRUE, the audio thread skips BGM player updates. +/// Used by the game thread to lock out BGM updates while modifying player state, +/// to prevent race conditions. s32 PreventBGMPlayerUpdate = FALSE; + u16 SoundEngineReady = 0; u16 AmbienceRadioChannel = 0; @@ -126,7 +130,7 @@ void snd_legacy_sound_dispatch(u32 id) { s32 filename = snd_song_load((id >> 4) & 0xFF, 0); if (filename > ASCII_TO_U32('0', ' ', ' ', '\0')) { - snd_song_start_variation(filename, (id >> 0xC) & 3); + snd_song_request_play(filename, (id >> 0xC) & 3); } } break; @@ -135,7 +139,7 @@ void snd_legacy_sound_dispatch(u32 id) { } /// Part of an unused system for inter-thread communication with a BGM player using commands. -/// Use functions in bgm_control to manipualte gMusicSettings instead. +/// Use functions in bgm_control to manipualte gMusicControlData instead. void snd_bgm_clear_legacy_commands(BGMPlayer* player) { s32 i; @@ -151,7 +155,7 @@ void snd_bgm_clear_legacy_commands(BGMPlayer* player) { /// Unused /// Part of an unused system for inter-thread communication with a BGM player using commands. -/// Use functions in bgm_control to manipualte gMusicSettings instead. +/// Use functions in bgm_control to manipualte gMusicControlData instead. void snd_bgm_enqueue_legacy_command(u32 cmd) { BGMPlayer* player = NULL; u32 playerID = cmd & 0xF; @@ -454,26 +458,28 @@ AuResult snd_song_load(s32 songID, s32 playerIndex) { } } -AuResult snd_song_start_default(s32 songName) { +/// Unused -- snd_song_request_play but always uses BGM_VARIATION_0 +AuResult snd_song_request_play_default(s32 songName) { AuResult status; - SongUpdateEventA s; + SongUpdateRequestA s; PreventBGMPlayerUpdate = TRUE; s.songName = songName; s.duration = 0; s.startVolume = AU_MAX_VOLUME_8; s.finalVolume = AU_MAX_VOLUME_8; - s.variation = 0; + s.variation = BGM_VARIATION_0; s.unk_14 = 0; - status = au_bgm_dispatch_player_event(&s); + status = au_bgm_process_init_song(&s); PreventBGMPlayerUpdate = FALSE; return status; } -AuResult snd_song_start_variation(s32 songName, s32 variation) { +/// Called from bgm_control to start playing a particular song + variation +AuResult snd_song_request_play(s32 songName, s32 variation) { AuResult status; - SongUpdateEventA s; + SongUpdateRequestA s; PreventBGMPlayerUpdate = TRUE; s.songName = songName; @@ -482,7 +488,7 @@ AuResult snd_song_start_variation(s32 songName, s32 variation) { s.finalVolume = AU_MAX_VOLUME_8; s.variation = variation; s.unk_14 = 0; - status = au_bgm_dispatch_player_event(&s); + status = au_bgm_process_init_song(&s); PreventBGMPlayerUpdate = FALSE; return status; @@ -500,9 +506,10 @@ AuResult snd_song_is_playing(s32 songName) { return au_bgm_is_song_playing(songName); } -AuResult snd_song_set_variation_fade(s32 songName, s32 variation, s32 fadeInTime, s32 startVolume, s32 endVolume) { +/// Called from bgm_control to fade in a particular song + variation +AuResult snd_song_request_fade_in(s32 songName, s32 variation, s32 fadeInTime, s32 startVolume, s32 endVolume) { AuResult status; - SongUpdateEventA s; + SongUpdateRequestA s; PreventBGMPlayerUpdate = TRUE; s.songName = songName; @@ -511,15 +518,16 @@ AuResult snd_song_set_variation_fade(s32 songName, s32 variation, s32 fadeInTime s.finalVolume = endVolume; s.variation = variation; s.unk_14 = 0; - status = au_bgm_dispatch_player_event(&s); + status = au_bgm_process_init_song(&s); PreventBGMPlayerUpdate = FALSE; return status; } -AuResult snd_song_set_default_fade(s32 songName, s32 fadeInTime, s32 startVolume, s32 endVolume) { +/// Unused +AuResult snd_song_request_fade_in_default(s32 songName, s32 fadeInTime, s32 startVolume, s32 endVolume) { AuResult status; - SongUpdateEventA s; + SongUpdateRequestA s; PreventBGMPlayerUpdate = TRUE; s.songName = songName; @@ -528,109 +536,109 @@ AuResult snd_song_set_default_fade(s32 songName, s32 fadeInTime, s32 startVolume s.finalVolume = endVolume; s.variation = 0; s.unk_14 = 0; - status = au_bgm_dispatch_player_event(&s); + status = au_bgm_process_init_song(&s); PreventBGMPlayerUpdate = FALSE; return status; } -AuResult snd_song_set_variation_fade_time(s32 songName, s32 fadeTime, AuCallback callback) { - SongUpdateEventB s; +AuResult snd_song_request_fade_out(s32 songName, s32 fadeTime, AuCallback callback) { + SongUpdateRequestB s; s.songName = songName; s.duration = fadeTime; s.unk_08 = 0; s.finalVolume = 0; s.callback = callback; - s.unk_14 = 0; + s.onPush = 0; - return func_8004DB4C(&s); + return au_bgm_process_fade_out(&s); } -AuResult func_80055AF0(s32 songName) { - SongUpdateEventC s; +AuResult snd_song_UNK_push_stop(s32 songName) { + SongUpdateRequestC s; s.songName = songName; s.duration = 0; s.startVolume = 0; s.finalVolume = 0; - s.index = 0; - s.unk_14 = 0; + s.index = MUSIC_CROSS_FADE; + s.pauseMode = FALSE; - return func_8004DCB8(&s, 0); + return au_bgm_process_suspend(&s, 0); } -AuResult func_80055B28(s32 songName) { +AuResult snd_song_UNK_request_pop(s32 songName) { AuResult status; - SongUpdateEventE s; + SongUpdateRequestE s; PreventBGMPlayerUpdate = TRUE; s.songName = songName; s.duration = 2000; s.startVolume = 1; s.finalVolume = AU_MAX_VOLUME_8; - s.index = 0; - s.unk_14 = 0; - status = func_8004DE2C(&s); + s.index = MUSIC_CROSS_FADE; + s.pauseMode = FALSE; + status = au_bgm_process_resume(&s); PreventBGMPlayerUpdate = FALSE; return status; } AuResult func_80055B80(s32 songName) { - SongUpdateEventC s; + SongUpdateRequestC s; s.songName = songName; s.duration = 0; s.startVolume = 0; s.finalVolume = 0; - s.index = 0; - s.unk_14 = 0; + s.index = MUSIC_CROSS_FADE; + s.pauseMode = FALSE; - return func_8004DCB8(&s, 1); + return au_bgm_process_suspend(&s, 1); } -AuResult func_80055BB8(s32 songName, s32 fadeTime) { - SongUpdateEventB s; +AuResult snd_song_UNK_request_push_fade_out(s32 songName, s32 fadeTime) { + SongUpdateRequestB s; s.songName = songName; s.duration = fadeTime; s.unk_08 = 0; s.finalVolume = 0; s.callback = NULL; - s.unk_14 = 1; + s.onPush = 1; - return func_8004DB4C(&s); + return au_bgm_process_fade_out(&s); } -AuResult func_80055BF0(s32 songName) { - SongUpdateEventC s; +AuResult snd_song_request_pause(s32 songName) { + SongUpdateRequestC s; s.songName = songName; s.duration = 0; s.startVolume = 0; s.finalVolume = 0; - s.index = 0; - s.unk_14 = 1; + s.index = MUSIC_CROSS_FADE; + s.pauseMode = TRUE; - return func_8004DCB8(&s, 0); + return au_bgm_process_suspend(&s, 0); } -AuResult func_80055C2C(s32 songName) { - SongUpdateEventE s; +AuResult snd_song_request_unpause(s32 songName) { + SongUpdateRequestE s; s.songName = songName; s.duration = 0; s.startVolume = 0; s.finalVolume = 0; - s.index = 0; - s.unk_14 = 1; + s.index = MUSIC_CROSS_FADE; + s.pauseMode = TRUE; - return func_8004DE2C(&s); + return au_bgm_process_resume(&s); } AuResult snd_song_set_volume_quiet(s32 songName) { - SongUpdateEventA s; + SongUpdateRequestA s; s.songName = songName; s.duration = 500; @@ -640,7 +648,7 @@ AuResult snd_song_set_volume_quiet(s32 songName) { } AuResult snd_song_set_volume_full(s32 songName) { - SongUpdateEventA s; + SongUpdateRequestA s; s.songName = songName; s.duration = 500; @@ -650,7 +658,7 @@ AuResult snd_song_set_volume_full(s32 songName) { } AuResult snd_song_set_linked_mode(s32 songName, s32 mode) { - SongUpdateEventD s; + SongUpdateRequestD s; s.songName = songName; s.mode = mode; diff --git a/src/bss/engine2_post_bss.c b/src/bss/engine2_post_bss.c index 033e596715..e3dc059aa9 100644 --- a/src/bss/engine2_post_bss.c +++ b/src/bss/engine2_post_bss.c @@ -16,7 +16,7 @@ typedef struct { /* 0xC */ s32 unkC; } AmbientSoundSettings; -BSS MusicSettings gMusicSettings[2]; +BSS MusicControlData gMusicControlData[2]; BSS IMG_BIN D_80159B50[0x200]; BSS Window gWindows[64]; BSS CollisionStatus gCollisionStatus; diff --git a/src/evt/audio_api.c b/src/evt/audio_api.c index b24f1884e4..3d4912026b 100644 --- a/src/evt/audio_api.c +++ b/src/evt/audio_api.c @@ -114,7 +114,7 @@ API_CALLABLE(EnableMusicProximityMix) { Bytecode* args = script->ptrReadPos; s32 playerIndex = evt_get_variable(script, *args++); - gMusicSettings[playerIndex].flags |= MUSIC_SETTINGS_FLAG_ENABLE_PROXIMITY_MIX; + gMusicControlData[playerIndex].flags |= MUSIC_FLAG_ENABLE_PROX_MIX; return ApiStatus_DONE2; } diff --git a/src/main_loop.c b/src/main_loop.c index 8842275ac8..81e725273a 100644 --- a/src/main_loop.c +++ b/src/main_loop.c @@ -90,7 +90,7 @@ void step_game_loop(void) { step_current_game_mode(); update_entities(); func_80138198(); - bgm_update_music_settings(); + bgm_update_music_control(); update_ambient_sounds(); sfx_update_env_sound_params(); update_windows(); diff --git a/src/world/area_obk/obk_07/phonograph.c b/src/world/area_obk/obk_07/phonograph.c index 9894e7dcd8..144a9ba0a8 100644 --- a/src/world/area_obk/obk_07/phonograph.c +++ b/src/world/area_obk/obk_07/phonograph.c @@ -381,7 +381,7 @@ API_CALLABLE(N(SavePhonographUpdateScriptIDs)) { data->updateScaleScriptID = evt_get_variable(NULL, MV_UpdateScaleScript); data->updateCrankScriptID = evt_get_variable(NULL, MV_UpdateCrankScript); data->updateRecordScriptID = evt_get_variable(NULL, MV_UpdateRecordScript); - data->songName = gMusicSettings->songName; + data->songName = gMusicControlData->songName; return ApiStatus_DONE2; } diff --git a/ver/jp/symbol_addrs.txt b/ver/jp/symbol_addrs.txt index 29fe0a32e0..bfa1c059a8 100644 --- a/ver/jp/symbol_addrs.txt +++ b/ver/jp/symbol_addrs.txt @@ -309,7 +309,7 @@ sfx_clear_sounds = 0x8014E6C8; sfx_update_env_sound_params = 0x8014E7E4; sfx_stop_env_sounds = 0x8014E8E8; bgm_reset_sequence_players = 0x8014F548; -bgm_update_music_settings = 0x8014F5F8; +bgm_update_music_control = 0x8014F5F8; D_80164000 = 0x80164000; heap_collisionHead = 0x80268000; shim_create_audio_system_obfuscated = 0x802B2000; @@ -1999,7 +1999,7 @@ Entity_Signpost_RenderScript = 0x802E5F70; // rom:0x10C850 Entity_Signpost = 0x802E5F8C; // rom:0x10C86C snd_song_stop = 0x80055674; // type:func rom:0x30A74 snd_song_load = 0x80055584; // type:func rom:0x30984 -snd_song_set_variation_fade_time = 0x8005576C; // type:func rom:0x30B6C +snd_song_request_fade_out = 0x8005576C; // type:func rom:0x30B6C func_80055B80 = 0x80055830; // type:func rom:0x30C30 snd_ambient_stop_slow = 0x80055198; // type:func rom:0x30598 world_action_sneaky_parasol_ROM_END = 0x00E343B0; @@ -2008,7 +2008,7 @@ load_asset_by_name = 0x8005A9A0; // type:func rom:0x35DA0 guRotateRPYF = 0x800642A0; // type:func rom:0x3F6A0 gCurrentDisplayContextIndex = 0x800741D4; // rom:0x4F5D4 func_800E06C0 = 0x800E06A0; // type:func rom:0x79B50 -snd_song_set_variation_fade = 0x800556C8; // type:func rom:0x30AC8 +snd_song_request_fade_in = 0x800556C8; // type:func rom:0x30AC8 gItemIconPaletteOffsets = 0x8008E91C; // rom:0x69D1C snd_song_set_proximity_mix_near = 0x80055CF4; // type:func rom:0x310F4 gItemEntityScripts = 0x8008DDA4; // rom:0x691A4 @@ -2039,24 +2039,24 @@ snd_ambient_pause = 0x800551EC; // type:func rom:0x305EC general_heap_free = 0x8002AC38; // type:func rom:0x6038 CreateEntityVarArgBuffer = 0x80161750; gCurrentModels = 0x8015632C; -snd_song_start_variation = 0x80055620; // type:func rom:0x30A20 +snd_song_request_play = 0x80055620; // type:func rom:0x30A20 snd_song_set_track_volumes = 0x80055A8C; // type:func rom:0x30E8C gWindows = 0x8015ECD0; gPlayerStatusPtr = 0x800F7CC0; // rom:0x91170 guOrtho = 0x80063A10; // type:func rom:0x3EE10 guScale = 0x800676E0; // type:func rom:0x42AE0 snd_song_set_proximity_mix_far = 0x80055CD8; // type:func rom:0x310D8 -func_80055BB8 = 0x80055868; // type:func rom:0x30C68 +snd_song_UNK_request_push_fade_out = 0x80055868; // type:func rom:0x30C68 _heap_malloc = 0x8002902C; // type:func rom:0x442C gItemIconRasterOffsets = 0x8008E3A8; // rom:0x697A8 -func_80055B28 = 0x800557D8; // type:func rom:0x30BD8 +snd_song_UNK_request_pop = 0x800557D8; // type:func rom:0x30BD8 snd_song_clear_track_volumes = 0x80055AF8; // type:func rom:0x30EF8 npc_raycast_down_around = 0x800DC758; // type:func rom:0x75C08 npc_test_move_simple_with_slipping = 0x800DDC24; // type:func rom:0x770D4 is_player_dismounted = 0x800DFCD4; // type:func rom:0x79184 heap_spriteHead = 0x8034F800; general_heap_malloc = 0x8002ABE8; // type:func rom:0x5FE8 -gMusicSettings = 0x8015EA70; +gMusicControlData = 0x8015EA70; transform_point = 0x800295E0; // type:func rom:0x49E0 gCurrentModelTreeNodeInfo = 0x8009A5D4; cosine = 0x80029394; // type:func rom:0x4794 @@ -2066,7 +2066,7 @@ gMessageBoxFrameParts = 0x8008FEB0; // rom:0x6B2B0 copy_matrix = 0x800296E0; // type:func rom:0x4AE0 snd_start_sound_with_shift = 0x80054EF0; // type:func rom:0x302F0 suggest_player_anim_always_forward = 0x800DFF58; // type:func rom:0x79408 -func_80055AF0 = 0x800557A0; // type:func rom:0x30BA0 +snd_song_UNK_push_stop = 0x800557A0; // type:func rom:0x30BA0 get_current_partner_id = 0x800E505C; // type:func rom:0x7E50C snd_set_sfx_reverb_type = 0x80055E94; // type:func rom:0x31294 dist3D = 0x80029EEC; // type:func rom:0x52EC @@ -2481,7 +2481,7 @@ sfx_adjust_env_sound_params = 0x8014EC94; // type:func rom:0xE3B24 sfx_play_sound_at_npc = 0x8014EDB8; // type:func rom:0xE3C48 sfx_compute_spatialized_sound_params_ignore_depth = 0x8014F008; // type:func rom:0xE3E98 sfx_compute_spatialized_sound_params_with_depth = 0x8014F264; // type:func rom:0xE40F4 -BlankMusicSettings = 0x80154790; // rom:0xE9620 +BlankMusicControlData = 0x80154790; // rom:0xE9620 SongsUsingVariationFlag = 0x801547C0; // rom:0xE9650 NextVolumeUpdateTimer = 0x801547D8; // rom:0xE9668 bgm_get_map_default_variation = 0x8014F4E0; // type:func rom:0xE4370 diff --git a/ver/us/symbol_addrs.txt b/ver/us/symbol_addrs.txt index 6eb1f56de3..1be7053211 100644 --- a/ver/us/symbol_addrs.txt +++ b/ver/us/symbol_addrs.txt @@ -547,16 +547,16 @@ func_8004D484 = 0x8004D484; // type:func rom:0x28884 au_sfx_reset_players = 0x8004D4BC; // type:func rom:0x288BC au_bgm_begin_video_frame = 0x8004D510; // type:func rom:0x28910 au_bgm_get_player_with_song_name = 0x8004D794; // type:func rom:0x28B94 -au_bgm_dispatch_player_event = 0x8004D7E0; // type:func rom:0x28BE0 +au_bgm_process_init_song = 0x8004D7E0; // type:func rom:0x28BE0 au_bgm_stop_song = 0x8004DA0C; // type:func rom:0x28E0C au_bgm_stop_all = 0x8004DA74; // type:func rom:0x28E74 au_bgm_stop_player = 0x8004DAA8; // type:func rom:0x28EA8 au_bgm_is_song_playing = 0x8004DAE0; // type:func rom:0x28EE0 au_bgm_player_is_active = 0x8004DB28; // type:func rom:0x28F28 -func_8004DB4C = 0x8004DB4C; // type:func rom:0x28F4C +au_bgm_process_fade_out = 0x8004DB4C; // type:func rom:0x28F4C func_8004DC80 = 0x8004DC80; // type:func rom:0x29080 -func_8004DCB8 = 0x8004DCB8; // type:func rom:0x290B8 -func_8004DE2C = 0x8004DE2C; // type:func rom:0x2922C +au_bgm_process_suspend = 0x8004DCB8; // type:func rom:0x290B8 +au_bgm_process_resume = 0x8004DE2C; // type:func rom:0x2922C func_8004DFD4 = 0x8004DFD4; // type:func rom:0x293D4 au_bgm_adjust_volume = 0x8004E0F4; // type:func rom:0x294F4 au_bgm_player_init = 0x8004E158; // type:func rom:0x29558 @@ -657,17 +657,17 @@ au_fade_clear = 0x80053A18; // type:func rom:0x2EE18 au_fade_update = 0x80053A28; // type:func rom:0x2EE28 au_fade_set_volume = 0x80053A98; // type:func rom:0x2EE98 au_fade_flush = 0x80053AC8; // type:func rom:0x2EEC8 -au_fade_set_vol_scale = 0x80053AEC; // type:func rom:0x2EEEC -au_unk_80053B04 = 0x80053B04; // type:func rom:0x2EF04 +au_fade_set_envelope = 0x80053AEC; // type:func rom:0x2EEEC +au_fade_calc_envelope = 0x80053B04; // type:func rom:0x2EF04 au_fade_update_envelope = 0x80053BA8; // type:func rom:0x2EFA8 au_get_instrument = 0x80053BE8; // type:func rom:0x2EFE8 au_get_bgm_player_and_file = 0x80053C58; // type:func rom:0x2F058 au_get_bgm_player = 0x80053CB4; // type:func rom:0x2F0B4 au_load_song_files = 0x80053CF8; // type:func rom:0x2F0F8 au_unk_80053E58 = 0x80053E58; // type:func rom:0x2F258 -au_unk_80053F64 = 0x80053F64; // type:func rom:0x2F364 +au_unk_get_temp_player_for_index = 0x80053F64; // type:func rom:0x2F364 au_ambient_load = 0x80053F80; // type:func rom:0x2F380 -au_unk_80054248 = 0x80054248; // type:func rom:0x2F648 +au_get_client_by_priority = 0x80054248; // type:func rom:0x2F648 au_load_INIT = 0x800542BC; // type:func rom:0x2F6BC au_fetch_SBN_file = 0x8005447C; // type:func rom:0x2F87C au_load_PER = 0x800544F8; // type:func rom:0x2F8F8 @@ -713,20 +713,20 @@ snd_ambient_radio_setup = 0x80055760; // type:func rom:0x30B60 snd_ambient_radio_stop = 0x800557CC; // type:func rom:0x30BCC snd_ambient_radio_select = 0x80055848; // type:func rom:0x30C48 snd_song_load = 0x800558D4; // type:func rom:0x30CD4 -snd_song_start_default = 0x8005591C; // type:func rom:0x30D1C -snd_song_start_variation = 0x80055970; // type:func rom:0x30D70 +snd_song_request_play_default = 0x8005591C; // type:func rom:0x30D1C +snd_song_request_play = 0x80055970; // type:func rom:0x30D70 snd_song_stop = 0x800559C4; // type:func rom:0x30DC4 snd_song_stop_all = 0x800559E0; // type:func rom:0x30DE0 snd_song_is_playing = 0x800559FC; // type:func rom:0x30DFC -snd_song_set_variation_fade = 0x80055A18; // type:func rom:0x30E18 -snd_song_set_default_fade = 0x80055A6C; // type:func rom:0x30E6C -snd_song_set_variation_fade_time = 0x80055ABC; // type:func rom:0x30EBC -func_80055AF0 = 0x80055AF0; // type:func rom:0x30EF0 -func_80055B28 = 0x80055B28; // type:func rom:0x30F28 +snd_song_request_fade_in = 0x80055A18; // type:func rom:0x30E18 +snd_song_request_fade_in_default = 0x80055A6C; // type:func rom:0x30E6C +snd_song_request_fade_out = 0x80055ABC; // type:func rom:0x30EBC +snd_song_UNK_push_stop = 0x80055AF0; // type:func rom:0x30EF0 +snd_song_UNK_request_pop = 0x80055B28; // type:func rom:0x30F28 func_80055B80 = 0x80055B80; // type:func rom:0x30F80 -func_80055BB8 = 0x80055BB8; // type:func rom:0x30FB8 -func_80055BF0 = 0x80055BF0; // type:func rom:0x30FF0 -func_80055C2C = 0x80055C2C; // type:func rom:0x3102C +snd_song_UNK_request_push_fade_out = 0x80055BB8; // type:func rom:0x30FB8 +snd_song_request_pause = 0x80055BF0; // type:func rom:0x30FF0 +snd_song_request_unpause = 0x80055C2C; // type:func rom:0x3102C snd_song_set_volume_quiet = 0x80055C64; // type:func rom:0x31064 snd_song_set_volume_full = 0x80055C94; // type:func rom:0x31094 snd_song_set_linked_mode = 0x80055CC4; // type:func rom:0x310C4 @@ -4426,7 +4426,7 @@ sfx_compute_spatialized_sound_params_with_depth = 0x8014A1B4; // type:func rom:0 bgm_get_map_default_variation = 0x8014A430; // type:func rom:0xE0B30 bgm_reset_sequence_players = 0x8014A498; // type:func rom:0xE0B98 bgm_reset_volume = 0x8014A52C; // type:func rom:0xE0C2C -bgm_update_music_settings = 0x8014A548; // type:func rom:0xE0C48 +bgm_update_music_control = 0x8014A548; // type:func rom:0xE0C48 _bgm_set_song = 0x8014A7E0; // type:func rom:0xE0EE0 bgm_set_song = 0x8014A918; // type:func rom:0xE1018 bgm_fade_in_song = 0x8014A964; // type:func rom:0xE1064 @@ -5189,7 +5189,7 @@ MusicTargetVolume = 0x80159AE2; // rom:0xF01E2 MusicMaxVolume = 0x80159AE4; // rom:0xF01E4 MusicCurrentVolume = 0x80159AE6; // rom:0xF01E6 D_80159AE8 = 0x80159AE8; // rom:0xF01E8 -gMusicSettings = 0x80159AF0; // rom:0xF01F0 +gMusicControlData = 0x80159AF0; // rom:0xF01F0 UseSettingsFrom = 0x802CB860; // type:func rom:0xF0210 D_80159B50 = 0x80159B50; // rom:0xF0250 LoadSettings = 0x802CB9F8; // type:func rom:0xF03A8