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