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