1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
|
#ifndef D_SND_CONTROL_PLAYER_MGR_H
#define D_SND_CONTROL_PLAYER_MGR_H
#include "d/snd/d_snd_control_player.h"
#include "d/snd/d_snd_util.h"
#include "nw4r/snd/snd_SoundPlayer.h"
#include "nw4r/ut/ut_list.h"
SND_DISPOSER_FORWARD_DECL(dSndControlPlayerMgr_c);
class dSndControlPlayerMgr_c {
SND_DISPOSER_MEMBERS(dSndControlPlayerMgr_c);
public:
enum PlayerCtrl_e {
CTRL_VOLUME = 0,
CTRL_LPF_FREQ = 1,
CTRL_FX_SEND = 2,
CTRL_MAX = 3,
};
dSndControlPlayerMgr_c();
void setupPlayerControlsGlobal();
void setupPlayerControlsStage();
void setupPlayerControlsStageBgm();
void setupPlayerControlsDemo();
void calc();
static const s32 sNumPlayers;
static const s32 sPlayerMax;
nw4r::snd::SoundPlayer *getPlayer1(u32) const;
nw4r::snd::SoundPlayer *getPlayer2(u32) const;
void setVolume(u32 playerIdx, f32 value, s32 frames);
void setLpfFreq(u32 playerIdx, f32 value, s32 frames);
void setFxSend(u32 playerIdx, f32 value, s32 frames);
void overrideVolume(u32 playerIdx, f32 volume, s32 frames);
void restoreVolume(u32 playerIdx, s32 frames);
void muteAllWorldSounds(s32 fadeFrames);
void unmuteAllWorldSounds(s32 fadeFrames);
void muteScenePlayers(s32 frames);
void unmuteScenePlayers(s32 frames);
enum MuteLevel {
MUTE_FULL = 0,
MUTE_PARTIAL = 1,
MUTE_MAX = 2,
};
enum VolumeControlGroup {
/** PLAYER_BGM, PLAYER_BGM_BATTLE */
CTRL_GROUP_BGM = 0,
/** PLAYER_TG_SOUND - PLAYER_AREA_IN_WATER_LV */
CTRL_GROUP_STAGE_EFFECTS = 1,
/** PLAYER_ENEMY - PLAYER_ENEMY_FOOTSTEP */
CTRL_GROUP_ENEMY = 2,
/* PLAYER_OBJECT_1 - PLAYER_TG_SOUND, but not PLAYER_NPC_VOICE */
CTRL_GROUP_OBJECTS = 3,
CTRL_GROUP_MAX = 4,
};
void setGroupVolumeFlag(VolumeControlGroup group, MuteLevel level);
void setBgmVolumeDecreaseSpeed(f32 speed);
void setStageEffectsVolume(f32 volume, s32 fadeFrames);
void setBgmMuteVolume(f32 volume);
void setStageEffectsMuteVolume(f32 volume);
void setEnemyMuteVolume(f32 volume);
void setObjectMuteVolume(f32 volume);
void setPlayerVolumeInternal(u32 playerIdx, f32 volume);
private:
void unmutePlayer(u32 playerIdx, s32 frames);
void resetControls();
void calcVolumes();
void calcMuteFlags();
void executeControls();
void linkCtrl(dSndControlPlayer_c *);
void unlinkCtrl(dSndControlPlayer_c *);
void setControlValue(PlayerCtrl_e ctrlType, u32 playerIdx, f32 value, s32 frames);
f32 getAppliedPlayerVolume(u32 playerIdx) const;
f32 getControlTarget(PlayerCtrl_e ctrlType, u32 playerIdx) const;
/* 0x10 */ dSndControlPlayer_c *mpCtrls[CTRL_MAX];
/* 0x1C */ f32 *mpTargetVolumes;
/* 0x20 */ f32 *mpMaxVolumeDecreases;
/* 0x24 */ f32 *mpMaxVolumeIncreases;
/* 0x28 */ f32 *mpSavedVolumes;
/* 0x2C */ u32 mOverrideVolumeMask;
/* 0x30 */ nw4r::ut::List mActiveControls;
/* 0x3C */ s16 mTimersForGroupVolume[4][2];
};
#endif
|