NW4F Snd
Loading...
Searching...
No Matches
snd_SequenceSound.h
Go to the documentation of this file.
1#ifndef NW_SND_SEQUENCE_SOUND_H_
2#define NW_SND_SEQUENCE_SOUND_H_
3
4#include <nw/snd/snd_BasicSound.h>
5#include <nw/snd/snd_BasicSoundPlayer.h>
6#include <nw/snd/snd_SequenceSoundPlayer.h>
7#include <nw/snd/snd_SoundInstanceManager.h>
8#include <nw/snd/snd_Task.h>
9#include <nw/snd/snd_PlayerHeapDataManager.h>
10
11namespace nw { namespace snd {
12
13class SoundDataManager;
15
16namespace internal {
17
18namespace driver {
19
20class NoteOnCallback;
21
22} // namespace nw::snd::internal::driver
23
24class SequenceSound;
25
27
29{
30 friend class nw::snd::SequenceSoundHandle;
31
32public:
33 NW_UT_RUNTIME_TYPEINFO(BasicSound)
34
41 static_assert(sizeof(StartInfo) == 0xC);
42
43 struct LoadInfo
44 {
46 const SoundDataManager* mgr;
49 };
50 static_assert(sizeof(LoadInfo) == 0x10);
51
52private:
53 typedef void (*NotifyAsyncLoadFinished)(
54 bool result,
55 const LoadItemInfo* seq,
56 const LoadItemInfo banks[],
57 const LoadItemInfo warcs[],
58 const bool warcIsIndividuals[],
59 void* userData
60 );
61
79 static_assert(sizeof(DataLoadTask) == 0x78);
80
81public:
82 static const int BANK_INDEX_MIN = 0;
83 static const int BANK_INDEX_MAX = 3;
84 static const s8 TRANSPOSE_MIN = -64;
85 static const s8 TRANSPOSE_MAX = 63;
86 static const u8 VELOCITY_RANGE_MIN = 0;
87 static const u8 VELOCITY_RANGE_MAX = 127;
88
90
91 void Setup(
92 driver::SequenceTrackAllocator* trackAllocator,
93 u32 allocTracks,
94 driver::NoteOnCallback* callback
95 );
96
97 struct Resource
98 {
99 const void* seq;
100 const void* banks[SoundArchive::SEQ_BANK_MAX];
101 const void* warcs[SoundArchive::SEQ_BANK_MAX];
102 bool warcIsIndividuals[SoundArchive::SEQ_BANK_MAX];
103
105 {
107 }
108
110 {
111 seq = NULL;
112 for (u32 i = 0; i < SoundArchive::SEQ_BANK_MAX; i++)
113 {
114 banks[i] = NULL;
115 warcs[i] = NULL;
116 warcIsIndividuals[i] = false;
117 }
118 }
119 };
120 static_assert(sizeof(Resource) == 0x28);
121
122 void Prepare(const Resource& res, const StartInfo& startInfo);
123
124 bool RegisterDataLoadTask(const LoadInfo& loadInfo, const StartInfo& startInfo);
125
126 void Initialize() override;
127 void Finalize() override;
128 bool IsPrepared() const override { return m_PreparedFlag; }
129
130 void SetTempoRatio(f32 tempoRatio);
131 void SetChannelPriority(int priority);
132 void SetReleasePriorityFix(bool fix);
134
135 u32 GetTick() const;
136
137 void SetTrackMute(u32 trackBitFlag, SeqMute mute);
138 void SetTrackMute(u32 trackBitFlag, bool muteFlag);
139 void SetTrackSilence(u32 trackBitFlag, bool silenceFlag, int fadeTimes);
140
141 void SetTrackBiquadFilter(u32 trackBitFlag, int type, f32 value);
142 void SetTrackBankIndex(u32 trackBitFlag, int bankIndex);
143
144 void SetTrackVolume(u32 trackBitFlag, f32 volume);
145 void SetTrackPitch(u32 trackBitFlag, f32 pitch);
146 void SetTrackLpfFreq(u32 trackBitFlag, f32 lpfFreq);
147 void SetTrackPanRange(u32 trackBitFlag, f32 panRange);
148 void SetTrackModDepth(u32 trackBitFlag, f32 depth);
149 void SetTrackModSpeed(u32 trackBitFlag, f32 speed);
150
151 void SetTrackTranspose(u32 trackBitFlag, s8 transpose);
152 void SetTrackVelocityRange(u32 trackBitFlag, u8 range);
153 void SetTrackOutputLine(u32 trackBitFlag, u32 lineFlag);
154 void ResetTrackOutputLine(u32 trackBitFlag);
155
156 void SetTrackMainOutVolume(u32 trackBitFlag, f32 volume);
157 void SetTrackPan(u32 trackBitFlag, f32 pan);
158 void SetTrackSurroundPan(u32 trackBitFlag, f32 surroundPan);
159 void SetTrackMainSend(u32 trackBitFlag, f32 send);
160 void SetTrackFxSend(u32 trackBitFlag, AuxBus bus, f32 send);
161
162 void SetTrackDrcOutVolume(u32 drcIndex, u32 trackBitFlag, f32 volume);
163 void SetTrackDrcPan(u32 drcIndex, u32 trackBitFlag, f32 pan);
164 void SetTrackDrcSurroundPan(u32 drcIndex, u32 trackBitFlag, f32 span);
165 void SetTrackDrcMainSend(u32 drcIndex, u32 trackBitFlag, f32 send);
166 void SetTrackDrcFxSend(u32 drcIndex, u32 trackBitFlag, AuxBus bus, f32 send);
167
168 bool ReadVariable(int varNo, s16* var) const;
169 static bool ReadGlobalVariable(int varNo, s16* var);
170 bool ReadTrackVariable(int trackNo, int varNo, s16* var) const;
171 void WriteVariable(int varNo, s16 var);
172 static void WriteGlobalVariable(int varNo, s16 var);
173 void WriteTrackVariable(int trackNo, int varNo, s16 var);
174
175protected:
177 void DetachTempSpecialHandle() override;
178
179 driver::BasicSoundPlayer* GetBasicSoundPlayerHandle() override { return &m_SequenceSoundPlayerInstance; }
180
181 void OnUpdatePlayerPriority() override;
182 void OnUpdate() override { CheckLoadState(); }
183
184private:
185 void Skip(driver::SequenceSoundPlayer::OffsetType offsetType, int offset);
186
188 bool result,
189 const LoadItemInfo* seq,
190 const LoadItemInfo banks[],
191 const LoadItemInfo warcs[],
192 const bool warcIsIndividuals[],
193 void* userData
194 );
195
197
201
203
206
208
210
214};
215static_assert(sizeof(SequenceSound) == 0x6A4);
216static_assert(sizeof(SequenceSoundInstanceManager) == 0x20);
217
218} } } // namespace nw::snd::internal
219
220#endif // NW_SND_SEQUENCE_SOUND_H_
Definition snd_SequenceSoundHandle.h:9
Definition snd_SoundArchive.h:11
Definition snd_BasicSound.h:146
Definition snd_PlayerHeapDataManager.h:12
Definition snd_SequenceSound.h:63
PlayerHeapDataManager * m_pDataManager
Definition snd_SequenceSound.h:68
PlayerHeap * m_pAllocator
Definition snd_SequenceSound.h:69
LoadItemInfo m_LoadInfoBanks[SoundArchive::SEQ_BANK_MAX]
Definition snd_SequenceSound.h:77
void * m_CallbackData
Definition snd_SequenceSound.h:71
const SoundArchive * m_pSoundArchive
Definition snd_SequenceSound.h:74
LoadItemInfo m_LoadInfoSeq
Definition snd_SequenceSound.h:76
const SoundDataManager * m_pSoundDataManager
Definition snd_SequenceSound.h:73
NotifyAsyncLoadFinished m_Callback
Definition snd_SequenceSound.h:70
Definition snd_SequenceSound.h:29
static void NotifyAsyncLoadFinishedFunc(bool result, const LoadItemInfo *seq, const LoadItemInfo banks[], const LoadItemInfo warcs[], const bool warcIsIndividuals[], void *userData)
void SetTrackDrcMainSend(u32 drcIndex, u32 trackBitFlag, f32 send)
void Skip(driver::SequenceSoundPlayer::OffsetType offsetType, int offset)
void SetTrackDrcOutVolume(u32 drcIndex, u32 trackBitFlag, f32 volume)
static const int BANK_INDEX_MIN
Definition snd_SequenceSound.h:82
void SetTrackOutputLine(u32 trackBitFlag, u32 lineFlag)
void SetTrackPanRange(u32 trackBitFlag, f32 panRange)
void WriteTrackVariable(int trackNo, int varNo, s16 var)
SequenceSound(SequenceSoundInstanceManager &manager)
void SetTrackDrcSurroundPan(u32 drcIndex, u32 trackBitFlag, f32 span)
static bool ReadGlobalVariable(int varNo, s16 *var)
void SetTrackMainSend(u32 trackBitFlag, f32 send)
void SetChannelPriority(int priority)
StartInfo m_StartInfo
Definition snd_SequenceSound.h:202
void SetTrackLpfFreq(u32 trackBitFlag, f32 lpfFreq)
void SetTrackTranspose(u32 trackBitFlag, s8 transpose)
void SetTrackPitch(u32 trackBitFlag, f32 pitch)
static void WriteGlobalVariable(int varNo, s16 var)
void SetTrackBiquadFilter(u32 trackBitFlag, int type, f32 value)
void Prepare(const Resource &res, const StartInfo &startInfo)
bool IsAttachedTempSpecialHandle() override
bool IsPrepared() const override
Definition snd_SequenceSound.h:128
void SetTrackModDepth(u32 trackBitFlag, f32 depth)
void SetTrackMainOutVolume(u32 trackBitFlag, f32 volume)
static const u8 VELOCITY_RANGE_MAX
Definition snd_SequenceSound.h:87
bool RegisterDataLoadTask(const LoadInfo &loadInfo, const StartInfo &startInfo)
Resource m_Res
Definition snd_SequenceSound.h:209
static const int BANK_INDEX_MAX
Definition snd_SequenceSound.h:83
bool ReadTrackVariable(int trackNo, int varNo, s16 *var) const
int m_TaskCommandId
Definition snd_SequenceSound.h:207
void DetachTempSpecialHandle() override
static const s8 TRANSPOSE_MAX
Definition snd_SequenceSound.h:85
PlayerHeapDataManager m_DataManager
Definition snd_SequenceSound.h:205
DataLoadTask m_DataLoadTask
Definition snd_SequenceSound.h:204
void SetTrackPan(u32 trackBitFlag, f32 pan)
void Setup(driver::SequenceTrackAllocator *trackAllocator, u32 allocTracks, driver::NoteOnCallback *callback)
static const s8 TRANSPOSE_MIN
Definition snd_SequenceSound.h:84
void ResetTrackOutputLine(u32 trackBitFlag)
bool ReadVariable(int varNo, s16 *var) const
void OnUpdatePlayerPriority() override
s8 m_LoadState
Definition snd_SequenceSound.h:211
void OnUpdate() override
Definition snd_SequenceSound.h:182
SequenceSoundHandle * m_pTempSpecialHandle
Definition snd_SequenceSound.h:199
void SetTrackModSpeed(u32 trackBitFlag, f32 speed)
bool m_PreparedFlag
Definition snd_SequenceSound.h:213
void SetTrackSilence(u32 trackBitFlag, bool silenceFlag, int fadeTimes)
Definition snd_SequenceSound.cpp:54
void SetTrackDrcPan(u32 drcIndex, u32 trackBitFlag, f32 pan)
bool m_InitializeFlag
Definition snd_SequenceSound.h:212
void WriteVariable(int varNo, s16 var)
void SetSequenceUserprocCallback(SequenceUserprocCallback callback, void *arg)
static const u8 VELOCITY_RANGE_MIN
Definition snd_SequenceSound.h:86
void SetTrackVolume(u32 trackBitFlag, f32 volume)
SequenceSoundInstanceManager & m_Manager
Definition snd_SequenceSound.h:200
void SetTrackDrcFxSend(u32 drcIndex, u32 trackBitFlag, AuxBus bus, f32 send)
void SetTempoRatio(f32 tempoRatio)
driver::BasicSoundPlayer * GetBasicSoundPlayerHandle() override
Definition snd_SequenceSound.h:179
void SetTrackSurroundPan(u32 trackBitFlag, f32 surroundPan)
void SetTrackVelocityRange(u32 trackBitFlag, u8 range)
void SetTrackMute(u32 trackBitFlag, bool muteFlag)
void(* NotifyAsyncLoadFinished)(bool result, const LoadItemInfo *seq, const LoadItemInfo banks[], const LoadItemInfo warcs[], const bool warcIsIndividuals[], void *userData)
Definition snd_SequenceSound.h:53
void SetTrackBankIndex(u32 trackBitFlag, int bankIndex)
void SetTrackFxSend(u32 trackBitFlag, AuxBus bus, f32 send)
driver::SequenceSoundPlayer m_SequenceSoundPlayerInstance
Definition snd_SequenceSound.h:198
void SetTrackMute(u32 trackBitFlag, SeqMute mute)
Definition snd_SoundInstanceManager.h:11
Definition snd_Task.h:12
Definition snd_BasicSoundPlayer.h:35
Definition snd_NoteOnCallback.h:25
Definition snd_SequenceSoundPlayer.h:35
OffsetType
Definition snd_SequenceSoundPlayer.h:60
Definition snd_SequenceTrackAllocator.h:12
Definition snd_BasicSound.h:136
Definition snd_BasicSound.cpp:3
SoundInstanceManager< SequenceSound > SequenceSoundInstanceManager
Definition snd_SequenceSound.h:26
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_SoundArchiveLoader.h:14
Definition snd_SequenceSound.h:44
const SoundArchive * arc
Definition snd_SequenceSound.h:45
const LoadItemInfo * banks
Definition snd_SequenceSound.h:48
const SoundDataManager * mgr
Definition snd_SequenceSound.h:46
const LoadItemInfo * seq
Definition snd_SequenceSound.h:47
Definition snd_SequenceSound.h:98
bool warcIsIndividuals[SoundArchive::SEQ_BANK_MAX]
Definition snd_SequenceSound.h:102
void Initialize()
Definition snd_SequenceSound.h:109
const void * warcs[SoundArchive::SEQ_BANK_MAX]
Definition snd_SequenceSound.h:101
const void * banks[SoundArchive::SEQ_BANK_MAX]
Definition snd_SequenceSound.h:100
const void * seq
Definition snd_SequenceSound.h:99
Resource()
Definition snd_SequenceSound.h:104