Document some internal sound functions for loading scenes

This commit is contained in:
Fexty12573 2025-03-28 16:47:23 +01:00
parent 8b3c5d77c3
commit 682b05f631
9 changed files with 69 additions and 84 deletions

View File

@ -11,8 +11,8 @@
#define FIELD_BGM_BANK_STATE_IDLE 0
#define FIELD_BGM_BANK_STATE_SWITCH 1
#define MIN_BGM_VOLUME 0
#define MAX_BGM_VOLUME 127
#define SOUND_VOLUME_MIN 0
#define SOUND_VOLUME_MAX 127
#define WAVE_OUT_SPEED(SPEED) (int)((SPEED) * 32768)
@ -71,7 +71,7 @@ void Sound_FadeVolumeForHandle(enum SoundHandleType handleType, int targetVolume
void Sound_SetInitialVolumeForHandle(enum SoundHandleType handleType, int volume);
void Sound_AdjustVolumeForVoiceChat(int seqID);
void Sound_AdjustVolumeForVoiceChatEx(int seqID, enum SoundHandleType handleType);
void sub_02004AD4(u16 param0, int param1);
void Sound_SetInitialVolumeForSequence(u16 param0, int param1);
BOOL Sound_PlaySequenceWithPlayer(enum SoundHandleType handleType, int playerID, u16 seqID);
int Sound_GetNumberOfPlayingSequencesForPlayer(int playerID);
u8 Sound_GetPlayerForSequence(u16 seqID);
@ -107,7 +107,7 @@ void Sound_SetPlaybackMode(BOOL param0);
void Sound_SetFadeCounter(int frames);
void Sound_SetFollowUpWaitFrames(int frames);
BOOL Sound_UpdateFollowUpWaitFrames(void);
void sub_0200500C(int param0);
void Sound_SetMasterVolume(int param0);
void *sub_02005014(void);
void Sound_SetFieldBGMBankState(int state); // See FIELD_BGM_BANK_STATE_*
BOOL Sound_FadeOutAndPlayBGM(u8 unused1, u16 bgmID, int fadeOutFrames, int waitFrames, u8 bankState, void *unused2);

View File

@ -18,6 +18,7 @@ enum SoundHeapState {
SOUND_HEAP_STATE_BGM_BANK,
SOUND_HEAP_STATE_SFX,
SOUND_HEAP_STATE_BGM,
SOUND_HEAP_STATE_SUB_SFX,
SOUND_HEAP_STATE_COUNT = 7
};
@ -83,6 +84,7 @@ enum SoundSystemParam {
SOUND_SYSTEM_PARAM_HEAP_STATE_BGM_BANK, // BGM *bank* data
SOUND_SYSTEM_PARAM_HEAP_STATE_SFX, // Sound Effect data
SOUND_SYSTEM_PARAM_HEAP_STATE_BGM, // Actual BGM data
SOUND_SYSTEM_PARAM_HEAP_STATE_SUB_SFX, // Sub screen SFX
SOUND_SYSTEM_PARAM_FIELD_BGM = 32, // Currently active field BGM

View File

@ -799,7 +799,7 @@ static void ov16_0223BCB4(OverlayManager *param0)
CellTransfer_Free(battleSystem->cellTransferState);
if (BattleSystem_RecordingStopped(battleSystem)) {
sub_0200500C(127);
Sound_SetMasterVolume(SOUND_VOLUME_MAX);
}
if (battleSystem->playbackStopButton) {

View File

@ -1562,7 +1562,7 @@ void BattleSystem_SetStopRecording(BattleSystem *battleSys, int flag)
StartScreenTransition(3, 0, 0, 0, 16, 2, HEAP_ID_BATTLE);
Sound_StopWaveOutAndSequences();
sub_0200500C(0);
Sound_SetMasterVolume(0);
battleSys->unk_2474_0 = 1;

View File

@ -1724,7 +1724,7 @@ static void ov17_022431E8(SysTask *param0, void *param1)
}
Sound_PlayEffect(SEQ_SE_DP_CON_007);
sub_02004AD4(1765, v0->unk_04);
Sound_SetInitialVolumeForSequence(1765, v0->unk_04);
v0->unk_08++;
case 1: {
u32 v1;

View File

@ -3811,7 +3811,7 @@ static void ov65_02231A0C(void)
Sound_SetScene(0);
Sound_SetSceneAndPlayBGM(11, v0, 1);
} else {
sub_02004AD4(Sound_GetCurrentBGM(), 120);
Sound_SetInitialVolumeForSequence(Sound_GetCurrentBGM(), 120);
}
}

View File

@ -15,15 +15,15 @@
static void Sound_LoadSoundEffectsForSceneWithState(u8 param0);
static void Sound_Impl_PlayFieldBGM(u16 param0, int param1);
static void Sound_Impl_ResumeAndSwitchFieldBGM(u16 param0, u16 param1);
static void sub_02004874(u16 param0, int param1);
static void Sound_Impl_PlayBattleBGM(u16 param0, int param1);
static void sub_020048AC(u16 param0, int param1);
static void sub_020048CC(u16 param0, int param1);
static void Sound_Impl_PlayContestBGM(u16 param0, int param1);
static void sub_020048F0(u16 param0, int param1);
static void sub_02004914(u8 param0);
static void sub_02004930(u8 param0, u16 param1, int param2);
static void Sound_Impl_LoadSubSceneSoundData(u8 param0);
static void Sound_Impl_PlayCutsceneBGM(u8 param0, u16 param1, int param2);
void sub_02004950(u16 param0);
void sub_02004A54(int param0, int param1, int param2);
void sub_02004AD4(u16 param0, int param1);
void Sound_SetInitialVolumeForSequence(u16 param0, int param1);
NNSSndWaveOutHandle *Sound_GetWaveOutHandle(enum WaveOutChannel channel);
BOOL Sound_AllocateWaveOutChannel(enum WaveOutChannel param0);
void Sound_FreeWaveOutChannel(enum WaveOutChannel param0);
@ -47,12 +47,12 @@ void sub_02004F68(int param0, u16 param1, int param2);
void sub_02004F7C(u16 param0, u16 param1, int param2);
void sub_02004F94(int param0, u16 param1, int param2);
void sub_02004FA8(int param0, int param1);
void sub_0200500C(int param0);
void Sound_SetMasterVolume(int param0);
void *sub_02005014(void);
static void Sound_Impl_FadeToBGM(u8 param0, u16 param1, int param2, int param3, u8 param4, void *param5);
static void Sound_SetBGMAllocatableChannels(u16 param0);
void sub_020053CC(int param0);
static void sub_0200540C(void);
static void Sound_Impl_PauseOrStopFieldBGM(void);
const u8 *sub_020050E0(const SNDWaveData *param0);
const u32 sub_020050EC(const SNDWaveData *param0);
const SNDWaveData *sub_020050F8(int param0);
@ -296,13 +296,13 @@ BOOL Sound_SetSceneAndPlayBGM(u8 scene, u16 bgmID, int param2)
(*v2) = 0;
break;
case SOUND_SCENE_BATTLE:
sub_02004874(bgmID, param2);
Sound_Impl_PlayBattleBGM(bgmID, param2);
break;
case 11:
sub_020048AC(bgmID, param2);
break;
case SOUND_SCENE_CONTEST:
sub_020048CC(bgmID, param2);
Sound_Impl_PlayContestBGM(bgmID, param2);
break;
case 7:
sub_020048F0(bgmID, param2);
@ -325,19 +325,19 @@ BOOL Sound_SetSceneAndPlayBGM(u8 scene, u16 bgmID, int param2)
case 66:
case 67:
case 68:
sub_02004914(scene);
Sound_Impl_LoadSubSceneSoundData(scene);
break;
case 1:
sub_020053CC(1);
sub_02004930(scene, bgmID, param2);
Sound_Impl_PlayCutsceneBGM(scene, bgmID, param2);
break;
case 14:
sub_020053CC(2);
sub_02004930(scene, bgmID, param2);
Sound_Impl_PlayCutsceneBGM(scene, bgmID, param2);
break;
case 2:
sub_020053CC(0);
sub_02004930(scene, bgmID, param2);
Sound_Impl_PlayCutsceneBGM(scene, bgmID, param2);
break;
case 3:
case 8:
@ -353,10 +353,10 @@ BOOL Sound_SetSceneAndPlayBGM(u8 scene, u16 bgmID, int param2)
case 20:
case 21:
case 23:
sub_02004930(scene, bgmID, param2);
Sound_Impl_PlayCutsceneBGM(scene, bgmID, param2);
break;
case 22:
sub_02004930(scene, bgmID, param2);
Sound_Impl_PlayCutsceneBGM(scene, bgmID, param2);
break;
}
@ -427,7 +427,7 @@ static void Sound_Impl_ResumeAndSwitchFieldBGM(u16 bgmID, u16 unused)
SoundSystem_SaveHeapState(SoundSystem_GetParam(SOUND_SYSTEM_PARAM_HEAP_STATE_BGM));
Sound_SetBGMPlayerPaused(PLAYER_FIELD, FALSE);
Sound_FadeInBGM(MAX_BGM_VOLUME, 40, BGM_FADE_IN_TYPE_FROM_ZERO);
Sound_FadeInBGM(SOUND_VOLUME_MAX, 40, BGM_FADE_IN_TYPE_FROM_ZERO);
Sound_SetFieldBGMBankState(FIELD_BGM_BANK_STATE_IDLE);
}
@ -456,74 +456,62 @@ void Sound_LoadSoundDataForFieldBGM(u16 seqID, u16 currentBankID)
}
}
static void sub_02004874(u16 param0, int param1)
static void Sound_Impl_PlayBattleBGM(u16 bgmID, int unused)
{
int *v0 = SoundSystem_GetParam(24);
(void)SoundSystem_GetParam(SOUND_SYSTEM_PARAM_HEAP_STATE_PERSISTENT);
sub_0200540C();
Sound_Impl_PauseOrStopFieldBGM();
SoundSystem_LoadHeapState(Sound_GetHeapState(SOUND_HEAP_STATE_BGM_BANK));
Sound_LoadSoundEffectsForScene(5);
SoundSystem_SaveHeapState(SoundSystem_GetParam(26));
Sound_LoadSoundEffectsForScene(SOUND_SCENE_BATTLE);
SoundSystem_SaveHeapState(SoundSystem_GetParam(SOUND_SYSTEM_PARAM_HEAP_STATE_SFX));
Sound_SetFieldBGMBankState(FIELD_BGM_BANK_STATE_SWITCH);
Sound_PlayBGM(param0);
return;
Sound_PlayBGM(bgmID);
}
static void sub_020048AC(u16 param0, int param1)
{
int *v0 = SoundSystem_GetParam(24);
(void)SoundSystem_GetParam(SOUND_SYSTEM_PARAM_HEAP_STATE_PERSISTENT);
Sound_StopWaveOutAndSequences();
Sound_ClearBGMPauseFlags();
Sound_LoadSoundEffectsForSceneWithState(SOUND_SCENE_FIELD);
Sound_PlayBGM(param0);
return;
}
void sub_020048CC(u16 param0, int param1)
void Sound_Impl_PlayContestBGM(u16 bgmID, int unused)
{
int *v0 = SoundSystem_GetParam(24);
(void)SoundSystem_GetParam(SOUND_SYSTEM_PARAM_HEAP_STATE_PERSISTENT);
Sound_StopWaveOutAndSequences();
Sound_LoadSoundEffectsForSceneWithState(6);
Sound_LoadSoundEffectsForSceneWithState(SOUND_SCENE_CONTEST);
Sound_SetFieldBGMBankState(FIELD_BGM_BANK_STATE_SWITCH);
Sound_PlayBGM(param0);
return;
Sound_PlayBGM(bgmID);
}
void sub_020048F0(u16 param0, int param1)
void sub_020048F0(u16 bgmID, int unused)
{
int *v0 = SoundSystem_GetParam(24);
(void)SoundSystem_GetParam(SOUND_SYSTEM_PARAM_HEAP_STATE_PERSISTENT);
Sound_StopWaveOutAndSequences();
Sound_LoadSoundEffectsForSceneWithState(7);
Sound_SetFieldBGMBankState(FIELD_BGM_BANK_STATE_SWITCH);
Sound_PlayBGM(param0);
return;
Sound_PlayBGM(bgmID);
}
static void sub_02004914(u8 param0)
static void Sound_Impl_LoadSubSceneSoundData(u8 scene)
{
Sound_LoadHeapStateBGM();
Sound_LoadSoundEffectsForScene(param0);
SoundSystem_SaveHeapState(SoundSystem_GetParam(28));
return;
Sound_LoadSoundEffectsForScene(scene);
SoundSystem_SaveHeapState(SoundSystem_GetParam(SOUND_SYSTEM_PARAM_HEAP_STATE_SUB_SFX));
}
static void sub_02004930(u8 param0, u16 param1, int param2)
static void Sound_Impl_PlayCutsceneBGM(u8 scene, u16 bgmID, int unused)
{
(void)SoundSystem_GetParam(SOUND_SYSTEM_PARAM_HEAP_STATE_PERSISTENT); // Required to match
(void)SoundSystem_GetParam(SOUND_SYSTEM_PARAM_HEAP_STATE_PERSISTENT);
Sound_StopWaveOutAndSequences();
Sound_LoadSoundEffectsForSceneWithState(param0);
Sound_PlayBGM(param1);
return;
Sound_LoadSoundEffectsForSceneWithState(scene);
Sound_PlayBGM(bgmID);
}
void sub_02004950(u16 param0)
@ -531,7 +519,7 @@ void sub_02004950(u16 param0)
int v0;
SoundSystem *v1 = SoundSystem_Get();
sub_0200540C();
Sound_Impl_PauseOrStopFieldBGM();
v0 = Sound_PlayBGM(param0);
return;
@ -549,7 +537,7 @@ int Sound_GetHeapState(enum SoundHeapState state)
if (state >= SOUND_HEAP_STATE_COUNT) {
GF_ASSERT(FALSE);
param = SoundSystem_GetParam(27);
param = SoundSystem_GetParam(SOUND_SYSTEM_PARAM_HEAP_STATE_BGM);
return *param;
}
@ -569,8 +557,8 @@ int Sound_GetHeapState(enum SoundHeapState state)
case SOUND_HEAP_STATE_BGM:
param = SoundSystem_GetParam(SOUND_SYSTEM_PARAM_HEAP_STATE_BGM);
break;
case 5:
param = SoundSystem_GetParam(28);
case SOUND_HEAP_STATE_SUB_SFX:
param = SoundSystem_GetParam(SOUND_SYSTEM_PARAM_HEAP_STATE_SUB_SFX);
break;
case 6:
param = SoundSystem_GetParam(29);
@ -619,12 +607,12 @@ void Sound_FadeVolumeForHandle(enum SoundHandleType handleType, int targetVolume
void Sound_SetInitialVolumeForHandle(enum SoundHandleType handleType, int volume)
{
if (volume < 0) {
volume = 0;
if (volume < SOUND_VOLUME_MIN) {
volume = SOUND_VOLUME_MIN;
}
if (volume > 127) {
volume = 127;
if (volume > SOUND_VOLUME_MAX) {
volume = SOUND_VOLUME_MAX;
}
NNS_SndPlayerSetInitialVolume(SoundSystem_GetSoundHandle(handleType), volume);
@ -646,7 +634,7 @@ void Sound_AdjustVolumeForVoiceChatEx(int seqID, enum SoundHandleType handleType
switch (handleType) {
case SOUND_HANDLE_TYPE_POKEMON_CRY:
case 8:
volume = 127;
volume = SOUND_VOLUME_MAX;
break;
default:
@ -663,13 +651,12 @@ void Sound_AdjustVolumeForVoiceChatEx(int seqID, enum SoundHandleType handleType
}
}
void sub_02004AD4(u16 param0, int param1)
void Sound_SetInitialVolumeForSequence(u16 seqID, int volume)
{
u8 v0 = Sound_GetPlayerForSequence(param0);
int v1 = SoundSystem_GetSoundHandleTypeFromPlayerID(v0);
u8 playerID = Sound_GetPlayerForSequence(seqID);
enum SoundHandleType handleType = SoundSystem_GetSoundHandleTypeFromPlayerID(playerID);
Sound_SetInitialVolumeForHandle(v1, param1);
return;
Sound_SetInitialVolumeForHandle(handleType, volume);
}
BOOL Sound_PlaySequenceWithPlayer(enum SoundHandleType handleType, int playerID, u16 seqID)
@ -1093,10 +1080,9 @@ BOOL Sound_UpdateFollowUpWaitFrames()
return *waitFrames;
}
void sub_0200500C(int param0)
void Sound_SetMasterVolume(int volume)
{
NNS_SndSetMasterVolume(param0);
return;
NNS_SndSetMasterVolume(volume);
}
void *sub_02005014(void)
@ -1138,7 +1124,7 @@ static void Sound_Impl_FadeToBGM(u8 unused1, u16 bgmID, int fadeOutFrames, int f
{
const NNSSndArcBankInfo **currentBankInfo = SoundSystem_GetParam(SOUND_SYSTEM_PARAM_CURRENT_BANK_INFO);
Sound_FadeOutBGM(MIN_BGM_VOLUME, fadeOutFrames);
Sound_FadeOutBGM(SOUND_VOLUME_MIN, fadeOutFrames);
Sound_SetCurrentBGM(0);
Sound_SetNextBGM(bgmID);
@ -1421,7 +1407,7 @@ void sub_020053CC(int param0)
return;
}
static void sub_0200540C(void)
static void Sound_Impl_PauseOrStopFieldBGM(void)
{
if ((Sound_IsFadeActive() == FALSE) &&
(Sound_GetSequenceIDFromSoundHandle(SoundSystem_GetSoundHandle(SOUND_HANDLE_TYPE_FIELD_BGM)) != -1) &&

View File

@ -21,7 +21,7 @@ static void SoundSystem_InitSoundHandles(SoundSystem *soundSys);
static void SoundSystem_LoadPersistentGroup(SoundSystem *soundSys);
static void SoundSystem_InitMic();
static BOOL sub_02003D28();
static void sub_02003C64();
static void SoundSystem_UpdateState();
static void SoundSystem_StopBGM();
static SoundSystem sSoundSystem;
@ -60,7 +60,7 @@ void SoundSystem_Update()
soundSys->fadeCounter--;
}
sub_02003C64();
SoundSystem_UpdateState();
}
CheckMicRecordingStatus();
@ -79,9 +79,8 @@ void SoundSystem_Update()
return;
}
static void sub_02003C64()
static void SoundSystem_UpdateState()
{
int v0;
SoundSystem *soundSys = SoundSystem_Get();
switch (sSoundSystemState) {
@ -115,13 +114,11 @@ static void sub_02003C64()
if (Sound_UpdateFollowUpWaitFrames() == 0) {
SoundSystem_StopBGM();
Sound_PlayBGM(soundSys->nextBGM);
Sound_FadeInBGM(MAX_BGM_VOLUME, soundSys->followUpFadeFrames, BGM_FADE_IN_TYPE_FROM_ZERO);
Sound_FadeInBGM(SOUND_VOLUME_MAX, soundSys->followUpFadeFrames, BGM_FADE_IN_TYPE_FROM_ZERO);
}
}
break;
}
return;
}
void SoundSystem_SetState(enum SoundSystemState state)

View File

@ -234,7 +234,7 @@ BOOL ScrCmd_283(ScriptContext *param0)
u16 v0 = ScriptContext_GetVar(param0);
u16 v1 = ScriptContext_GetVar(param0);
sub_02004AD4(v0, v1);
Sound_SetInitialVolumeForSequence(v0, v1);
return 0;
}