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