NW4F Snd
Loading...
Searching...
No Matches
snd_SequenceSoundPlayer.h
Go to the documentation of this file.
1#ifndef NW_SND_SEQUENCE_SOUND_PLAYER_H_
2#define NW_SND_SEQUENCE_SOUND_PLAYER_H_
3
4#include <nw/snd/snd_BasicSoundPlayer.h>
5#include <nw/snd/snd_DisposeCallback.h>
6#include <nw/snd/snd_SoundThread.h>
7#include <nw/snd/snd_NoteOnCallback.h>
8#include <nw/snd/snd_SoundArchive.h>
9#include <nw/snd/snd_BankFileReader.h>
10#include <nw/snd/snd_WaveArchiveFileReader.h>
11
12namespace nw { namespace snd {
13
21static_assert(sizeof(SequenceUserprocCallbackParam) == 0x10);
22
24 u16 procId,
26 void* arg
27);
28
29namespace internal { namespace driver {
30
31class SequenceTrack;
33
35{
36public:
37 static const int PLAYER_VARIABLE_NUM = 16;
38 static const int GLOBAL_VARIABLE_NUM = 16;
39 static const int TRACK_NUM_PER_PLAYER = 16;
40 static const int VARIABLE_DEFAULT_VALUE = -1;
41
42 static const int DEFAULT_TIMEBASE = 48;
43 static const int DEFAULT_TEMPO = 120;
44
45 static const int DEFAULT_SKIP_INTERVAL_TICK = 48*4*4;
46
47public:
57 static_assert(sizeof(ParserPlayerParam) == 0xC);
58
64
65public:
67
68 static void SetSkipIntervalTick(s32 intervalTick);
70
73
74 virtual void Initialize();
75 virtual void Finalize();
76
77 void Setup(
78 SequenceTrackAllocator* trackAllocator,
79 u32 allocTracks,
80 NoteOnCallback* callback
81 );
82 void Prepare(
83 const void* seqBase,
84 const void* bankFiles[],
85 const void* warcFiles[],
86 const bool warcIsIndividuals[],
87 s32 seqOffset
88 );
89
90 virtual void Start();
91 virtual void Stop();
92 virtual void Pause(bool flag);
93 void Skip(OffsetType offsetType, int offset);
94
96 u8 bankIndex,
97 const NoteOnInfo& noteOnInfo
98 );
99
101 void CallSequenceUserprocCallback(u16 procId, SequenceTrack* track);
102
103 void SetTempoRatio(f32 tempoRatio);
104 void SetPanRange(f32 panRange);
105 void SetChannelPriority(int priority);
106 void SetReleasePriorityFix(bool fix);
107
108 f32 GetTempoRatio() const { return m_TempoRatio; }
109 f32 GetPanRange() const { return m_PanRange; }
110 int GetChannelPriority() const { return m_ParserParam.priority; }
111
113
114 void SetTrackMute(u32 trackBitFlag, SeqMute mute);
115 void SetTrackSilence(unsigned long trackBitFlag, bool silenceFlag, int fadeTimes);
116 void SetTrackVolume(u32 trackBitFlag, f32 volume);
117 void SetTrackPitch(u32 trackBitFlag, f32 pitch);
118 void SetTrackPanRange(u32 trackBitFlag, f32 panRange);
119 void SetTrackLpfFreq(u32 trackBitFlag, f32 lpfFreq);
120 void SetTrackBiquadFilter(u32 trackBitFlag, int type, f32 value);
121 void SetTrackModDepth(u32 trackBitFlag, f32 depth);
122 void SetTrackModSpeed(u32 trackBitFlag, f32 speed);
123 bool SetTrackBankIndex(u32 trackBitFlag, int bankIndex);
124 void SetTrackTranspose(u32 trackBitFlag, s8 transpose);
125 void SetTrackVelocityRange(u32 trackBitFlag, u8 range);
126 void SetTrackOutputLine(u32 trackBitFlag, u32 outputLine);
127 void ResetTrackOutputLine(u32 trackBitFlag);
128
129 const BankFileReader& GetBankFileReader(u8 bankIndex) const
130 {
131 return m_BankFileReader[bankIndex];
132 }
134 {
135 return m_WarcFileReader[bankIndex];
136 }
137
138 void SetTrackTvVolume(u32 trackBitFlag, f32 volume);
139 void SetTrackTvPan(u32 trackBitFlag, f32 pan);
140 void SetTrackTvSurroundPan(u32 trackBitFlag, f32 span);
141 void SetTrackTvMainSend(u32 trackBitFlag, f32 send);
142 void SetTrackTvFxSend(u32 trackBitFlag, AuxBus bus, f32 send);
143
144 void SetTrackDrcVolume(u32 drcIndex, u32 trackBitFlag, f32 volume);
145 void SetTrackDrcPan(u32 drcIndex, u32 trackBitFlag, f32 pan);
146 void SetTrackDrcSurroundPan(u32 drcIndex, u32 trackBitFlag, f32 span);
147 void SetTrackDrcMainSend(u32 drcIndex, u32 trackBitFlag, f32 send);
148 void SetTrackDrcFxSend(u32 drcIndex, u32 trackBitFlag, AuxBus bus, f32 send);
149
150 s16 GetLocalVariable(int varNo) const;
151 static s16 GetGlobalVariable(int varNo);
152 void SetLocalVariable(int varNo, s16 var);
153 static void SetGlobalVariable(int varNo, s16 var);
154
155 vs16* GetVariablePtr(int varNo);
156
157 virtual void InvalidateData(const void* start, const void* end);
158
159 const ParserPlayerParam& GetParserPlayerParam() const { return m_ParserParam; }
160 ParserPlayerParam& GetParserPlayerParam() { return m_ParserParam; }
161 u32 GetTickCounter() const { return m_TickCounter; }
162
163 SequenceTrack* GetPlayerTrack(int trackNo);
164 const SequenceTrack* GetPlayerTrack(int trackNo) const;
165 void SetPlayerTrack(int trackNo, SequenceTrack* track);
166
168
169 void Update();
170
171 virtual void ChannelCallback(Channel* channel) { (void)channel; }
172
173protected:
175 virtual void OnShutdownSoundThread() { Stop(); }
176
177private:
178 template <typename T>
179 void SetTrackParam(u32 trackBitFlag, void (SequenceTrack::*func)(T), T param);
180 template <typename T, typename U>
181 void SetTrackParam(u32 trackBitFlag, void (SequenceTrack::*func)(T, U), T param1, U param2);
182
183 int ParseNextTick(bool doNoteOn);
184
187 void SkipTick();
188
189 void CloseTrack(int trackNo);
191
192 f32 CalcTickPerMinute() const { return m_ParserParam.timebase * m_ParserParam.tempo * m_TempoRatio; }
193 f32 CalcTickPerMsec() const { return CalcTickPerMinute() / ( 60 * 1000.0f ); }
194
197
199
205
208
211
213
216
219};
220
221template <typename T>
222void SequenceSoundPlayer::SetTrackParam(u32 trackBitFlag, void (SequenceTrack::*func)(T), T param)
223{
224 for (
225 int trackNo = 0
226 ; trackNo < TRACK_NUM_PER_PLAYER && trackBitFlag != 0
227 ; trackNo++, trackBitFlag >>= 1
228 )
229 {
230 if ((trackBitFlag & 1) == 0)
231 continue;
232 SequenceTrack* track = GetPlayerTrack(trackNo);
233 if (track != NULL)
234 (track->*func)( param );
235 }
236}
237
238template <typename T, typename U>
239void SequenceSoundPlayer::SetTrackParam(u32 trackBitFlag, void (SequenceTrack::*func)(T, U), T param1, U param2)
240{
241 for (
242 int trackNo = 0
243 ; trackNo < TRACK_NUM_PER_PLAYER && trackBitFlag != 0
244 ; trackNo++, trackBitFlag >>= 1
245 )
246 {
247 if ((trackBitFlag & 1) == 0)
248 continue;
249 SequenceTrack* track = GetPlayerTrack(trackNo);
250 if (track != NULL)
251 (track->*func)(param1, param2);
252 }
253}
254
255} } } } // namespace nw::snd::internal::driver
256
257#endif // NW_SND_SEQUENCE_SOUND_PLAYER_H_
Definition snd_BankFileReader.h:27
Definition snd_WaveArchiveFileReader.h:9
Definition snd_BasicSoundPlayer.h:35
Definition snd_Channel.h:9
Definition snd_DisposeCallback.h:9
Definition snd_NoteOnCallback.h:25
Definition snd_SequenceSoundPlayer.h:35
void SetPlayerTrack(int trackNo, SequenceTrack *track)
bool m_ReleasePriorityFixFlag
Definition snd_SequenceSoundPlayer.h:198
BankFileReader m_BankFileReader[SoundArchive::SEQ_BANK_MAX]
Definition snd_SequenceSoundPlayer.h:218
void SetTrackTvMainSend(u32 trackBitFlag, f32 send)
void SetTrackDrcPan(u32 drcIndex, u32 trackBitFlag, f32 pan)
static const int VARIABLE_DEFAULT_VALUE
Definition snd_SequenceSoundPlayer.h:40
static vs16 m_GlobalVariable[GLOBAL_VARIABLE_NUM]
Definition snd_SequenceSoundPlayer.h:195
void Setup(SequenceTrackAllocator *trackAllocator, u32 allocTracks, NoteOnCallback *callback)
SequenceUserprocCallback m_SequenceUserprocCallback
Definition snd_SequenceSoundPlayer.h:209
virtual void ChannelCallback(Channel *channel)
Definition snd_SequenceSoundPlayer.h:171
void CallSequenceUserprocCallback(u16 procId, SequenceTrack *track)
void SetTrackTranspose(u32 trackBitFlag, s8 transpose)
void * m_pSequenceUserprocCallbackArg
Definition snd_SequenceSoundPlayer.h:210
void SetTrackTvVolume(u32 trackBitFlag, f32 volume)
static void SetSkipIntervalTick(s32 intervalTick)
void SetTrackDrcVolume(u32 drcIndex, u32 trackBitFlag, f32 volume)
vs16 m_LocalVariable[PLAYER_VARIABLE_NUM]
Definition snd_SequenceSoundPlayer.h:214
static const int PLAYER_VARIABLE_NUM
Definition snd_SequenceSoundPlayer.h:37
OffsetType
Definition snd_SequenceSoundPlayer.h:60
@ OFFSET_TYPE_MILLISEC
Definition snd_SequenceSoundPlayer.h:62
@ OFFSET_TYPE_TICK
Definition snd_SequenceSoundPlayer.h:61
static const int TRACK_NUM_PER_PLAYER
Definition snd_SequenceSoundPlayer.h:39
bool IsReleasePriorityFix() const
Definition snd_SequenceSoundPlayer.h:112
void SetTrackTvPan(u32 trackBitFlag, f32 pan)
void SetTrackParam(u32 trackBitFlag, void(SequenceTrack::*func)(T, U), T param1, U param2)
Definition snd_SequenceSoundPlayer.h:239
void Skip(OffsetType offsetType, int offset)
void SetTrackBiquadFilter(u32 trackBitFlag, int type, f32 value)
vu32 m_TickCounter
Definition snd_SequenceSoundPlayer.h:215
WaveArchiveFileReader m_WarcFileReader[SoundArchive::SEQ_BANK_MAX]
Definition snd_SequenceSoundPlayer.h:217
void SetTrackDrcFxSend(u32 drcIndex, u32 trackBitFlag, AuxBus bus, f32 send)
int GetChannelPriority() const
Definition snd_SequenceSoundPlayer.h:110
void SetTrackPanRange(u32 trackBitFlag, f32 panRange)
static const int GLOBAL_VARIABLE_NUM
Definition snd_SequenceSoundPlayer.h:38
f32 CalcTickPerMsec() const
Definition snd_SequenceSoundPlayer.h:193
static const int DEFAULT_SKIP_INTERVAL_TICK
Definition snd_SequenceSoundPlayer.h:45
bool SetTrackBankIndex(u32 trackBitFlag, int bankIndex)
SequenceTrackAllocator * m_pSequenceTrackAllocator
Definition snd_SequenceSoundPlayer.h:207
SequenceTrack * m_pTracks[TRACK_NUM_PER_PLAYER]
Definition snd_SequenceSoundPlayer.h:212
void SetTrackParam(u32 trackBitFlag, void(SequenceTrack::*func)(T), T param)
Definition snd_SequenceSoundPlayer.h:222
void SetTrackModDepth(u32 trackBitFlag, f32 depth)
f32 m_SkipTimeCounter
Definition snd_SequenceSoundPlayer.h:204
f32 CalcTickPerMinute() const
Definition snd_SequenceSoundPlayer.h:192
const BankFileReader & GetBankFileReader(u8 bankIndex) const
Definition snd_SequenceSoundPlayer.h:129
f32 GetPanRange() const
Definition snd_SequenceSoundPlayer.h:109
void SetTrackVolume(u32 trackBitFlag, f32 volume)
void SetTrackDrcMainSend(u32 drcIndex, u32 trackBitFlag, f32 send)
const SequenceTrack * GetPlayerTrack(int trackNo) const
f32 GetTempoRatio() const
Definition snd_SequenceSoundPlayer.h:108
void SetTrackTvFxSend(u32 trackBitFlag, AuxBus bus, f32 send)
static void SetGlobalVariable(int varNo, s16 var)
static vs32 m_SkipIntervalTickPerFrame
Definition snd_SequenceSoundPlayer.h:196
void Prepare(const void *seqBase, const void *bankFiles[], const void *warcFiles[], const bool warcIsIndividuals[], s32 seqOffset)
void SetSequenceUserprocCallback(SequenceUserprocCallback callback, void *arg)
f32 m_TickFraction
Definition snd_SequenceSoundPlayer.h:202
void SetTrackTvSurroundPan(u32 trackBitFlag, f32 span)
const SequenceTrackAllocator * GetTrackAllocator()
Definition snd_SequenceSoundPlayer.h:167
void SetTrackSilence(unsigned long trackBitFlag, bool silenceFlag, int fadeTimes)
ParserPlayerParam m_ParserParam
Definition snd_SequenceSoundPlayer.h:206
f32 m_PanRange
Definition snd_SequenceSoundPlayer.h:200
const ParserPlayerParam & GetParserPlayerParam() const
Definition snd_SequenceSoundPlayer.h:159
virtual void OnUpdateFrameSoundThread()
Definition snd_SequenceSoundPlayer.h:174
virtual void InvalidateData(const void *start, const void *end)
void SetTrackOutputLine(u32 trackBitFlag, u32 outputLine)
void SetTrackMute(u32 trackBitFlag, SeqMute mute)
void SetTrackVelocityRange(u32 trackBitFlag, u8 range)
Channel * NoteOn(u8 bankIndex, const NoteOnInfo &noteOnInfo)
void SetTrackModSpeed(u32 trackBitFlag, f32 speed)
u32 GetTickCounter() const
Definition snd_SequenceSoundPlayer.h:161
virtual void OnShutdownSoundThread()
Definition snd_SequenceSoundPlayer.h:175
const WaveArchiveFileReader & GetWaveArchiveFileReader(u8 bankIndex) const
Definition snd_SequenceSoundPlayer.h:133
void SetTrackPitch(u32 trackBitFlag, f32 pitch)
f32 m_TempoRatio
Definition snd_SequenceSoundPlayer.h:201
void SetTrackLpfFreq(u32 trackBitFlag, f32 lpfFreq)
void SetTrackDrcSurroundPan(u32 drcIndex, u32 trackBitFlag, f32 span)
ParserPlayerParam & GetParserPlayerParam()
Definition snd_SequenceSoundPlayer.h:160
static const int DEFAULT_TEMPO
Definition snd_SequenceSoundPlayer.h:43
u32 m_SkipTickCounter
Definition snd_SequenceSoundPlayer.h:203
SequenceTrack * GetPlayerTrack(int trackNo)
static const int DEFAULT_TIMEBASE
Definition snd_SequenceSoundPlayer.h:42
Definition snd_SequenceTrackAllocator.h:12
Definition snd_SoundThread.h:9
Definition snd_BasicSound.h:136
Definition snd_BasicSound.cpp:3
Definition snd_BasicSound.cpp:3
SeqMute
Definition snd_Global.h:33
AuxBus
Definition snd_Global.h:25
void(* SequenceUserprocCallback)(u16 procId, SequenceUserprocCallbackParam *param, void *arg)
Definition snd_SequenceSoundPlayer.h:23
Definition snd_SequenceSoundPlayer.h:15
vs16 * trackVariable
Definition snd_SequenceSoundPlayer.h:18
vs16 * globalVariable
Definition snd_SequenceSoundPlayer.h:17
bool cmpFlag
Definition snd_SequenceSoundPlayer.h:19
vs16 * localVariable
Definition snd_SequenceSoundPlayer.h:16
Definition snd_NoteOnCallback.h:11
u8 priority
Definition snd_SequenceSoundPlayer.h:51
u8 timebase
Definition snd_SequenceSoundPlayer.h:52
NoteOnCallback * callback
Definition snd_SequenceSoundPlayer.h:55
u16 tempo
Definition snd_SequenceSoundPlayer.h:53