1 /*---------------------------------------------------------------------------*
2   Project:  NintendoWare
3   File:     snd_DriverCommand.h
4 
5   Copyright (C)2009-2010 Nintendo Co., Ltd./HAL Laboratory, Inc.  All rights reserved.
6 
7   These coded instructions, statements, and computer programs contain
8   proprietary information of Nintendo of America Inc. and/or Nintendo
9   Company Ltd., and are protected by Federal copyright law.  They may
10   not be disclosed to third parties or copied or duplicated in any form,
11   in whole or in part, without the prior written consent of Nintendo.
12 
13   $Revision: 27901 $
14  *---------------------------------------------------------------------------*/
15 
16 #ifndef NW_SND_DRIVER_COMMAND_H_
17 #define NW_SND_DRIVER_COMMAND_H_
18 
19 #include <nw/snd/snd_StreamSoundFile.h>
20 #include <nw/snd/snd_StreamSoundFileReader.h>
21 #include <nw/snd/snd_SoundArchive.h>
22 
23 namespace nw {
24 
25 namespace io {
26 class FileStream;
27 }
28 
29 namespace snd {
30 
31 class FxBase;
32 
33 namespace internal {
34 
35 namespace driver {
36 class BasicSoundPlayer;
37 class SequenceSoundPlayer;
38 class SequenceTrackAllocator;
39 class NoteOnCallback;
40 class WaveSoundPlayer;
41 class StreamSoundPlayer;
42 class StreamBufferPool;
43 class DisposeCallback;
44 }
45 
46 enum DriverCommandId
47 {
48     DRIVER_COMMAND_DUMMY,
49     DRIVER_COMMAND_DEBUG,
50     DRIVER_COMMAND_REPLY,
51     DRIVER_COMMAND_PLAYER_INIT,
52     DRIVER_COMMAND_PLAYER_FINALIZE,
53     DRIVER_COMMAND_PLAYER_START,
54     DRIVER_COMMAND_PLAYER_STOP,
55     DRIVER_COMMAND_PLAYER_PAUSE,
56     DRIVER_COMMAND_PLAYER_PARAM,
57     DRIVER_COMMAND_PLAYER_PANMODE,
58     DRIVER_COMMAND_PLAYER_PANCURVE,
59     DRIVER_COMMAND_PLAYER_FRONTBYPASS,
60     DRIVER_COMMAND_SEQ_INIT,
61     DRIVER_COMMAND_SEQ_SEQDATA,
62     DRIVER_COMMAND_SEQ_BANKDATA,
63     DRIVER_COMMAND_SEQ_SKIP,
64     DRIVER_COMMAND_SEQ_TEMPORATIO,
65     DRIVER_COMMAND_SEQ_CHANNELPRIO,
66     DRIVER_COMMAND_SEQ_PRIOFIX,
67     DRIVER_COMMAND_SEQ_USERPROC,
68     DRIVER_COMMAND_SEQ_SETVAR,
69     DRIVER_COMMAND_SEQ_SETGVAR,
70     DRIVER_COMMAND_SEQ_SETTVAR,
71     DRIVER_COMMAND_SEQTRACK_MUTE,
72     DRIVER_COMMAND_SEQTRACK_SILENCE,
73     DRIVER_COMMAND_SEQTRACK_VOLUME,
74     DRIVER_COMMAND_SEQTRACK_PITCH,
75     DRIVER_COMMAND_SEQTRACK_PAN,
76     DRIVER_COMMAND_SEQTRACK_SPAN,
77     DRIVER_COMMAND_SEQTRACK_LPF,
78     DRIVER_COMMAND_SEQTRACK_PANRANGE,
79     DRIVER_COMMAND_SEQTRACK_MODDEPTH,
80     DRIVER_COMMAND_SEQTRACK_MODSPEED,
81     DRIVER_COMMAND_SEQTRACK_BIQUAD,
82     DRIVER_COMMAND_SEQTRACK_BANKINDEX,
83     DRIVER_COMMAND_WAVESND_SETUP,
84     DRIVER_COMMAND_WAVESND_CHANNELPRIO,
85     DRIVER_COMMAND_WAVESND_PRIOFIX,
86     DRIVER_COMMAND_STRM_INIT,
87     DRIVER_COMMAND_STRM_SETUP,
88     DRIVER_COMMAND_STRM_STOP,
89     DRIVER_COMMAND_STRM_LOADHEADER,
90     DRIVER_COMMAND_STRM_LOADDATA,
91     DRIVER_COMMAND_STRM_TRACK_VOLUME,
92     DRIVER_COMMAND_STRM_TRACK_PAN,
93     DRIVER_COMMAND_STRM_TRACK_SPAN,
94     DRIVER_COMMAND_INVALIDATE_DATA,
95     DRIVER_COMMAND_REGIST_DISPOSE_CALLBACK,
96     DRIVER_COMMAND_UNREGIST_DISPOSE_CALLBACK,
97     DRIVER_COMMAND_APPEND_EFFECT,
98     DRIVER_COMMAND_CLEAR_EFFECT,
99     DRIVER_COMMAND_ALLVOICES_SYNC
100 };
101 
102 struct DriverCommand
103 {
104     struct DriverCommand* next;
105     DriverCommandId id;
106     u32 tag;
107     u32 memory_next;
108 
109     static void ProcessCommandList( DriverCommand* commandList );
110 };
111 
112 struct DriverCommandDebug : public DriverCommand
113 {
114     char str[256];
115 };
116 
117 struct DriverCommandReply : public DriverCommand
118 {
119     bool* ptr;
120 };
121 
122 struct DriverCommandPlayer : public DriverCommand
123 {
124     driver::BasicSoundPlayer* player;
125     bool flag;
126 };
127 
128 struct DriverCommandPlayerInit : public DriverCommand
129 {
130     driver::BasicSoundPlayer* player;
131     bool* availableFlagPtr;
132 };
133 
134 struct DriverCommandPlayerPanParam : public DriverCommand
135 {
136     driver::BasicSoundPlayer* player;
137     PanMode panMode;
138     PanCurve panCurve;
139 };
140 
141 struct DriverCommandPlayerParam : public DriverCommand
142 {
143     driver::BasicSoundPlayer* player;
144     float volume;
145     float pitch;
146     float pan;
147     float surroundPan;
148     float lpfFreq;
149     int biquadFilterType;
150     float biquadFilterValue;
151     float mainSend;
152     float fxSend[AUX_BUS_NUM];
153 };
154 
155 struct DriverCommandSeqInit : public DriverCommand
156 {
157     driver::SequenceSoundPlayer* player;
158     driver::SequenceTrackAllocator* trackAllocator;
159     u32 allocTracks;
160     driver::NoteOnCallback* noteOnCallback;
161 };
162 
163 struct DriverCommandSeqSetData : public DriverCommand
164 {
165     driver::SequenceSoundPlayer* player;
166     const void* seqBase;
167     s32 seqOffset;
168 };
169 struct DriverCommandSeqSetBankData : public DriverCommand
170 {
171     driver::SequenceSoundPlayer* player;
172     const void* bankFiles[SoundArchive::SEQ_BANK_MAX];
173 };
174 
175 struct DriverCommandSeqSkip : public DriverCommand
176 {
177     driver::SequenceSoundPlayer* player;
178     int offsetType;
179     int offset;
180 };
181 
182 struct DriverCommandSeqTempoRatio : public DriverCommand
183 {
184     driver::SequenceSoundPlayer* player;
185     f32 tempoRatio;
186 };
187 
188 struct DriverCommandSeqChannelPrio : public DriverCommand
189 {
190     driver::SequenceSoundPlayer* player;
191     int priority;
192 };
193 
194 struct DriverCommandSeqPrioFix : public DriverCommand
195 {
196     driver::SequenceSoundPlayer* player;
197     bool priorityFix;
198 };
199 
200 struct DriverCommandSeqUserProc : public DriverCommand
201 {
202     driver::SequenceSoundPlayer* player;
203     uptr callback;
204     void* arg;
205 };
206 
207 struct DriverCommandSeqSetVar : public DriverCommand
208 {
209     driver::SequenceSoundPlayer* player;
210     int trackNo;
211     int varNo;
212     s32 var;
213 };
214 
215 struct DriverCommandSeqTrack : public DriverCommand
216 {
217     driver::SequenceSoundPlayer* player;
218     u32 trackBitFlag;
219 };
220 
221 struct DriverCommandSeqTrackMute : public DriverCommandSeqTrack
222 {
223     int mute;
224 };
225 
226 struct DriverCommandSeqTrackSilence : public DriverCommandSeqTrack
227 {
228     bool silenceFlag;
229     int fadeFrames;
230 };
231 
232 struct DriverCommandSeqTrackParam : public DriverCommandSeqTrack
233 {
234     f32 value;
235 };
236 
237 struct DriverCommandSeqTrackBiquad : public DriverCommandSeqTrack
238 {
239     int type;
240     f32 value;
241 };
242 
243 struct DriverCommandSeqTrackBankIndex : public DriverCommandSeqTrack
244 {
245     int bankIndex;
246 };
247 
248 struct DriverCommandWaveSoundSetup : public DriverCommand
249 {
250     driver::WaveSoundPlayer* player;
251     const void* wsdFile;
252     s32 waveSoundOffset;
253     int startOffsetType;
254     s32 offset;
255     const void* callback;
256     u32 callbackData;
257 };
258 
259 struct DriverCommandWaveSoundChannelPrio : public DriverCommand
260 {
261     driver::WaveSoundPlayer* player;
262     int priority;
263 };
264 
265 struct DriverCommandWaveSoundPrioFix : public DriverCommand
266 {
267     driver::WaveSoundPlayer* player;
268     bool priorityFix;
269 };
270 
271 struct DriverCommandStreamSoundInit : public DriverCommand
272 {
273     driver::StreamSoundPlayer* player;
274     driver::StreamBufferPool* pBufferPool;
275     int allocChannelCount;
276     u16 allocTrackFlag;
277 };
278 
279 struct DriverCommandStreamSoundSetup : public DriverCommand
280 {
281     driver::StreamSoundPlayer* player;
282     io::FileStream* pFileStream;
283     int startOffsetType;
284     s32 offset;
285 };
286 
287 struct DriverCommandStreamSoundLoadHeader : public DriverCommand
288 {
289     static const int TRACK_MAX = 4;
290     static const int CHANNEL_MAX = 8;
291 
292     driver::StreamSoundPlayer* player;
293     StreamSoundFile::StreamSoundInfo streamInfo;
294     StreamSoundFileReader::TrackInfo trackInfoArray[TRACK_MAX];
295     DspAdpcmParam dspAdpcmParam[CHANNEL_MAX];
296     DspAdpcmLoopParam dspAdpcmLoopParam[CHANNEL_MAX];
297     u32 dataBlockOffset;
298     u32 trackCount;
299     u32 channelCount;
300 };
301 
302 struct DriverCommandStreamSoundLoadData : public DriverCommand
303 {
304     driver::StreamSoundPlayer* player;
305     u32 bufferBlockIndex;
306     u32 dataBlockIndex;
307     u32 blockSamples;
308     bool isDataLoopBlock;
309     bool lastBlockFlag;
310 };
311 
312 struct DriverCommandStreamSoundTrackParam : public DriverCommand
313 {
314     driver::StreamSoundPlayer* player;
315     unsigned long trackBitFlag;
316     float value;
317 };
318 
319 struct DriverCommandInvalidateData : public DriverCommand
320 {
321     void* mem;
322     unsigned long size;
323 };
324 
325 struct DriverCommandDisposeCallback : public DriverCommand
326 {
327     driver::DisposeCallback* callback;
328 };
329 
330 struct DriverCommandEffect : public DriverCommand
331 {
332     AuxBus bus;
333     FxBase* effect;
334     int fadeTimes;
335 };
336 
337 struct DriverCommandAllVoicesSync : public DriverCommand
338 {
339     u32 syncFlag;
340 };
341 
342 } // namespace nw::snd::internal
343 } // namespace nw::snd
344 } // namespace nw
345 
346 
347 #endif /* NW_SND_DRIVER_COMMAND_H_ */
348 
349