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