Twilight Princess
Decompilation of The Legend of Zelda: Twilight Princess
Loading...
Searching...
No Matches
SeqPlayer.h
Go to the documentation of this file.
1#ifndef NW4HBM_SND_SEQ_PLAYER_H
2#define NW4HBM_SND_SEQ_PLAYER_H
3
4#include <revolution/types.h>
5
6#include "BasicPlayer.h"
7
9#define MAKE_DTOR_ZERO
11#undef MAKE_DTOR_ZERO
12
13#include "SoundThread.h"
14
15#include "../ut/Lock.h"
16
17namespace nw4hbm {
18 namespace snd {
19 namespace detail {
20
21 class Channel;
22 struct NoteOnInfo;
23 class NoteOnCallback;
24 class SeqTrack;
25 class SeqTrackAllocator;
26
27 class SeqPlayer : public BasicPlayer, public DisposeCallback {
28 public:
29 typedef struct ParserPlayerParam {
30 /* 0x00 */ u8 volume;
31 /* 0x01 */ u8 priority;
32 /* 0x02 */ u16 tempo;
33
36
38
44
45 static const int LOCAL_VARIABLE_NUM = 16;
46 static const int GLOBAL_VARIABLE_NUM = 16;
48
49 static const int TRACK_NUM = 16;
50
52
53 /* 0x08 */ virtual ~SeqPlayer();
54 /* 0x0C */ virtual bool Start();
55 /* 0x10 */ virtual void Stop();
56 /* 0x14 */ virtual void Pause(bool flag);
57 /* 0x18 */ virtual bool IsActive() const { return mActiveFlag; }
58 /* 0x1C */ virtual bool IsPrepared() const { return mPreparedFlag; };
59 /* 0x20 */ virtual bool IsStarted() const { return mStartedFlag; };
60 /* 0x24 */ virtual bool IsPause() const { return mPauseFlag; };
61 /* 0x28 */ virtual void SetVolume(f32 volume);
62 /* 0x2C */ virtual void SetPitch(f32 pitch);
63 /* 0x30 */ virtual void SetPan(f32 pan);
64 /* 0x34 */ virtual void SetSurroundPan(f32 surroundPan);
65 /* 0x38 */ virtual void SetPan2(f32 pan2);
66 /* 0x3C */ virtual void SetSurroundPan2(f32 surroundPan2);
67 /* 0x40 */ virtual void SetLpfFreq(f32 lpfFreq);
68 /* 0x44 */ virtual f32 GetVolume() const { return mExtVolume; };
69 /* 0x48 */ virtual f32 GetPitch() const { return mExtPitch; };
70 /* 0x4C */ virtual f32 GetPan() const { return mExtPan; };
71 /* 0x50 */ virtual f32 GetSurroundPan() const { return mExtSurroundPan; };
72 /* 0x54 */ virtual f32 GetPan2() const { return mExtPan2; };
73 /* 0x58 */ virtual f32 GetSurroundPan2() const { return mExtSurroundPan2; };
74 /* 0x5C */ virtual f32 GetLpfFreq() const { return mExtLpfFreq; };
75 /* 0x60 */ virtual void SetOutputLine(int lineFlag);
76 /* 0x64 */ virtual void SetMainOutVolume(f32 volume);
77 /* 0x68 */ virtual void SetMainSend(f32 send);
78 /* 0x6C */ virtual void SetFxSend(AuxBus bus, f32 send);
79 /* 0x70 */ virtual void SetRemoteOutVolume(int remoteIndex, f32 volume);
80 /* 0x74 */ virtual void SetRemoteSend(int remoteIndex, f32 send);
81 /* 0x78 */ virtual void SetRemoteFxSend(int remoteIndex, f32 send);
82 /* 0x7C */ virtual int GetOutputLine() const;
83 /* 0x80 */ virtual f32 GetMainOutVolume() const;
84 /* 0x84 */ virtual f32 GetMainSend() const;
85 /* 0x88 */ virtual f32 GetFxSend(AuxBus bus) const;
86 /* 0x8C */ virtual f32 GetRemoteOutVolume(int remoteIndex) const;
87 /* 0x90 */ virtual f32 GetRemoteSend(int remoteIndex) const;
88 /* 0x94 */ virtual f32 GetRemoteFxSend(int remoteIndex) const;
89 /* 0x50 */ virtual void InvalidateData(const void* start, const void* end);
90 /* 0x54 */ virtual void InvalidateWaveData(const void* start, const void* end) {}
91 /* 0x58 */ virtual void ChannelCallback(Channel* channel);
92
93 void InitParam(int voices, NoteOnCallback* callback);
94
95 SetupResult Setup(SeqTrackAllocator* allocator, u32 allocTrackFlags, int voices,
97 void SetSeqData(const void* base, s32 offset);
98
99 void Skip(OffsetType type, int offset);
100
101 void SetTempoRatio(f32 tempo);
102 void SetChannelPriority(int priority);
104
105 void SetLocalVariable(int trackNo, s16 value);
106 static void SetGlobalVariable(int trackNo, s16 value);
107
108 void SetTrackVolume(u32 trackFlags, f32 volume);
109 void SetTrackPitch(u32 trackFlags, f32 pitch);
110
112 vs16* GetVariablePtr(int varNo);
113 void Update();
114
115 Channel* NoteOn(int bankNo, const NoteOnInfo& noteOnInfo);
116
117 static void UpdateAllPlayers();
118 static void StopAllPlayers();
119
120 template <typename T>
121 void SetTrackParam(u32 trackFlags, void (SeqTrack::*setter)(T), T param) {
123
125 if (trackFlags & 1) {
126 SeqTrack* track = GetPlayerTrack(i);
127
128 if (track != NULL) {
129 (track->*setter)(param);
130 }
131 }
132 }
133 }
134
135 f32 GetPanRange() const { return mPanRange; }
136 int GetVoiceOutCount() const { return mVoiceOutCount; }
138
139 private:
140 static const int DEFAULT_TEMPO = 120;
141 static const int DEFAULT_PRIORITY = 64;
142 static const int DEFAULT_VARIABLE_VALUE = -1;
143
144 static const int MAX_SKIP_TICK_PER_FRAME = 768;
145
146 void CloseTrack(int trackNo);
147 void SetPlayerTrack(int trackNo, SeqTrack* track);
148
152 int ParseNextTick(bool doNoteOn);
153
154 void UpdateTick(int msec);
155 void SkipTick();
156
157 static void InitGlobalVariable();
158
159 /* 0x14 */ bool mHomeButtonMenuFlag;
160 /* 0x15 */ u8 mActiveFlag;
161 /* 0x16 */ u8 mPreparedFlag;
162 /* 0x17 */ u8 mStartedFlag;
163 /* 0x18 */ u8 mPauseFlag;
164 /* 0x19 */ bool mSkipFlag;
165 /* 0x1C */ f32 mExtVolume;
166 /* 0x20 */ f32 mExtPan;
168 /* 0x28 */ f32 mPanRange;
169 /* 0x2C */ f32 mExtPan2;
171 /* 0x34 */ f32 mExtPitch;
172 /* 0x38 */ f32 mExtLpfFreq;
173 /* 0x3C */ int mOutputLineFlag;
174 /* 0x40 */ f32 mMainOutVolume;
175 /* 0x44 */ f32 mMainSend;
177 /* 0x54 */ f32 mRemoteOutVolume[WPAD_MAX_CONTROLLERS];
178 /* 0x64 */ f32 mRemoteSend[WPAD_MAX_CONTROLLERS];
179 /* 0x74 */ f32 mRemoteFxSend[WPAD_MAX_CONTROLLERS];
180 /* 0x84 */ f32 mTempoRatio;
181 /* 0x88 */ u16 mTempoCounter;
182 /* 0x8C */ s32 mVoiceOutCount;
187 /* 0xFC */ u32 mTickCounter;
188
190
191 public:
193 };
194 typedef ut::LinkList<SeqPlayer, offsetof(SeqPlayer, mPlayerLink)> SeqPlayerList;
195 } // namespace detail
196 } // namespace snd
197} // namespace nw4hbm
198
199#endif
static BOOL flag
Definition DEMOAVX.c:20
static u8 base[0x2A]
Definition WPADEncrypt.c:10
static s32 offset
Definition WUD.c:1669
Definition Channel.h:23
Definition NoteOnCallback.h:25
Definition SeqPlayer.h:27
SeqTrack * GetPlayerTrack(int trackNo)
void Skip(OffsetType type, int offset)
f32 mExtPan
Definition SeqPlayer.h:166
virtual void SetMainOutVolume(f32 volume)
f32 mExtSurroundPan
Definition SeqPlayer.h:167
virtual void SetPitch(f32 pitch)
f32 mExtPitch
Definition SeqPlayer.h:171
ParserPlayerParam & GetParserPlayerParam()
Definition SeqPlayer.h:137
virtual void SetRemoteSend(int remoteIndex, f32 send)
static const int GLOBAL_VARIABLE_NUM
Definition SeqPlayer.h:46
virtual void SetRemoteOutVolume(int remoteIndex, f32 volume)
virtual void SetPan2(f32 pan2)
u8 mPauseFlag
Definition SeqPlayer.h:163
f32 mRemoteOutVolume[WPAD_MAX_CONTROLLERS]
Definition SeqPlayer.h:177
static void SetGlobalVariable(int trackNo, s16 value)
f32 mExtPan2
Definition SeqPlayer.h:169
virtual f32 GetSurroundPan() const
Definition SeqPlayer.h:71
bool mHomeButtonMenuFlag
Definition SeqPlayer.h:159
virtual void SetPan(f32 pan)
SetupResult
Definition SeqPlayer.h:39
@ SETUP_ERR_UNKNOWN
Definition SeqPlayer.h:42
@ SETUP_SUCCESS
Definition SeqPlayer.h:40
@ SETUP_ERR_CANNOT_ALLOCATE_TRACK
Definition SeqPlayer.h:41
u16 mTempoCounter
Definition SeqPlayer.h:181
static const int DEFAULT_TEMPO
Definition SeqPlayer.h:140
virtual f32 GetPan2() const
Definition SeqPlayer.h:72
SeqTrack * mTracks[TRACK_NUM]
Definition SeqPlayer.h:185
virtual f32 GetRemoteSend(int remoteIndex) const
void CloseTrack(int trackNo)
static const int MAX_SKIP_TICK_PER_FRAME
Definition SeqPlayer.h:144
virtual void InvalidateData(const void *start, const void *end)
virtual void SetMainSend(f32 send)
f32 mTempoRatio
Definition SeqPlayer.h:180
void SetTrackVolume(u32 trackFlags, f32 volume)
f32 mRemoteSend[WPAD_MAX_CONTROLLERS]
Definition SeqPlayer.h:178
f32 mExtSurroundPan2
Definition SeqPlayer.h:170
virtual bool IsStarted() const
Definition SeqPlayer.h:59
f32 mPanRange
Definition SeqPlayer.h:168
u8 mStartedFlag
Definition SeqPlayer.h:162
u8 mActiveFlag
Definition SeqPlayer.h:160
virtual f32 GetPitch() const
Definition SeqPlayer.h:69
int mOutputLineFlag
Definition SeqPlayer.h:173
void SetTrackParam(u32 trackFlags, void(SeqTrack::*setter)(T), T param)
Definition SeqPlayer.h:121
f32 GetPanRange() const
Definition SeqPlayer.h:135
SetupResult Setup(SeqTrackAllocator *allocator, u32 allocTrackFlags, int voices, NoteOnCallback *callback)
f32 mRemoteFxSend[WPAD_MAX_CONTROLLERS]
Definition SeqPlayer.h:179
virtual void Pause(bool flag)
f32 mExtLpfFreq
Definition SeqPlayer.h:172
virtual void SetLpfFreq(f32 lpfFreq)
static const int TRACK_NUM
Definition SeqPlayer.h:49
virtual void SetVolume(f32 volume)
virtual void SetRemoteFxSend(int remoteIndex, f32 send)
void SetSeqData(const void *base, s32 offset)
void SetChannelPriority(int priority)
virtual f32 GetRemoteFxSend(int remoteIndex) const
virtual f32 GetSurroundPan2() const
Definition SeqPlayer.h:73
int GetVoiceOutCount() const
Definition SeqPlayer.h:136
virtual void ChannelCallback(Channel *channel)
struct nw4hbm::snd::detail::SeqPlayer::ParserPlayerParam ParserPlayerParam
void SetLocalVariable(int trackNo, s16 value)
virtual f32 GetLpfFreq() const
Definition SeqPlayer.h:74
Channel * NoteOn(int bankNo, const NoteOnInfo &noteOnInfo)
f32 mMainSend
Definition SeqPlayer.h:175
void SetReleasePriorityFix(bool flag)
void SetTrackPitch(u32 trackFlags, f32 pitch)
virtual f32 GetMainOutVolume() const
virtual void SetSurroundPan(f32 surroundPan)
virtual bool IsActive() const
Definition SeqPlayer.h:57
static const int DEFAULT_VARIABLE_VALUE
Definition SeqPlayer.h:142
virtual bool IsPause() const
Definition SeqPlayer.h:60
vs16 * GetVariablePtr(int varNo)
void SetPlayerTrack(int trackNo, SeqTrack *track)
s32 mVoiceOutCount
Definition SeqPlayer.h:182
ut::LinkListNode mPlayerLink
Definition SeqPlayer.h:192
bool mSkipFlag
Definition SeqPlayer.h:164
u8 mPreparedFlag
Definition SeqPlayer.h:161
f32 mExtVolume
Definition SeqPlayer.h:165
virtual int GetOutputLine() const
SeqTrackAllocator * mSeqTrackAllocator
Definition SeqPlayer.h:184
virtual f32 GetMainSend() const
virtual f32 GetVolume() const
Definition SeqPlayer.h:68
virtual f32 GetRemoteOutVolume(int remoteIndex) const
vs16 mLocalVariable[TRACK_NUM]
Definition SeqPlayer.h:186
u32 mTickCounter
Definition SeqPlayer.h:187
f32 mFxSend[AUX_BUS_NUM]
Definition SeqPlayer.h:176
ParserPlayerParam mParserParam
Definition SeqPlayer.h:183
virtual void SetOutputLine(int lineFlag)
void InitParam(int voices, NoteOnCallback *callback)
static const int LOCAL_VARIABLE_NUM
Definition SeqPlayer.h:45
virtual void InvalidateWaveData(const void *start, const void *end)
Definition SeqPlayer.h:90
OffsetType
Definition SeqPlayer.h:37
@ OFFSET_TYPE_TICK
Definition SeqPlayer.h:37
@ OFFSET_TYPE_MILLISEC
Definition SeqPlayer.h:37
int ParseNextTick(bool doNoteOn)
virtual bool IsPrepared() const
Definition SeqPlayer.h:58
virtual void SetSurroundPan2(f32 surroundPan2)
virtual f32 GetFxSend(AuxBus bus) const
virtual f32 GetPan() const
Definition SeqPlayer.h:70
static const int VARIABLE_NUM
Definition SeqPlayer.h:47
static const int DEFAULT_PRIORITY
Definition SeqPlayer.h:141
virtual void SetFxSend(AuxBus bus, f32 send)
f32 mMainOutVolume
Definition SeqPlayer.h:174
static vs16 mGlobalVariable[LOCAL_VARIABLE_NUM]
Definition SeqPlayer.h:189
Definition SeqTrackAllocator.h:11
Definition SeqTrack.h:20
Definition Lock.h:32
Definition LinkList.h:23
static void end(b_oh_class *i_this)
Definition d_a_b_oh.cpp:343
int i
Definition e_log.c:92
unsigned long u32
Definition types.h:12
signed short int s16
Definition types.h:9
float f32
Definition types.h:25
volatile s16 vs16
Definition types.h:21
unsigned short int u16
Definition types.h:10
signed long s32
Definition types.h:11
unsigned char u8
Definition types.h:8
ut::LinkList< SeqPlayer, offsetof(SeqPlayer, mPlayerLink)> SeqPlayerList
Definition SeqPlayer.h:194
AuxBus
Definition snd_types.h:73
@ AUX_BUS_NUM
Definition snd_types.h:73
Definition HBMAnmController.h:6
static void callback(u32 param_0)
Definition OSExec.c:308
@ start
Definition strtold.c:23
Definition NoteOnCallback.h:12
NoteOnCallback * callback
Definition SeqPlayer.h:34