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