1 /*---------------------------------------------------------------------------* 2 Project: NintendoWare 3 File: snd_SoundArchivePlayer.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: 31364 $ 16 *---------------------------------------------------------------------------*/ 17 18 /** 19 * :include nw/snd/snd_SoundArchivePlayer.h 20 * 21 * @file snd_SoundArchivePlayer.h 22 */ 23 24 #ifndef NW_SND_SOUND_ARCHIVE_PLAYER_H_ 25 #define NW_SND_SOUND_ARCHIVE_PLAYER_H_ 26 27 #include <nw/snd/snd_SoundStartable.h> 28 #include <nw/snd/snd_NoteOnCallback.h> 29 #include <nw/snd/snd_SoundArchive.h> 30 #include <nw/snd/snd_BasicSound.h> 31 #include <nw/snd/snd_SequenceSoundPlayer.h> // SequenceUserprocCallback 32 #include <nw/snd/snd_SequenceSound.h> // SequenceSoundInstanceManager 33 #include <nw/snd/snd_WaveSound.h> // WaveSoundInstanceManager 34 #include <nw/snd/snd_StreamSound.h> // StreamSoundInstanceManager 35 #include <nw/snd/snd_Util.h> 36 #include <nw/snd/snd_SoundInstanceManager.h> 37 #include <nw/snd/snd_MmlSequenceTrackAllocator.h> 38 #include <nw/snd/snd_MmlParser.h> 39 40 namespace nw { 41 namespace snd { 42 43 class SoundHandle; 44 class SoundHeap; 45 class SoundActor; 46 class SoundPlayer; 47 class SoundDataManager; 48 49 namespace internal { 50 51 class ExternalSoundPlayer; 52 class Channel; 53 class StreamSound; 54 class WaveSound; 55 class PlayerHeap; 56 57 } 58 59 //--------------------------------------------------------------------------- 60 //! @brief サウンドアーカイブ中のサウンドを再生するクラスです。 61 //! 62 //! SoundArchivePlayer で再生したサウンドは、 63 //! ハンドルクラスを用いて操作することができます。 64 //! 65 //! @see SoundHandle クラス 66 //! @see SoundStartable インターフェイス 67 //! 68 //! @date 2010/01/15 初版 69 //--------------------------------------------------------------------------- 70 class SoundArchivePlayer : public SoundStartable 71 { 72 private: 73 static const int DEFAULT_STREAM_BLOCK_COUNT = 5; 74 75 /* ------------------------------------------------------------------------ 76 SeqCallback class 77 ------------------------------------------------------------------------ */ 78 class SequenceNoteOnCallback : public internal::driver::NoteOnCallback 79 { 80 public: SequenceNoteOnCallback(const SoundArchivePlayer & player)81 SequenceNoteOnCallback( const SoundArchivePlayer& player ) : m_pSoundArchivePlayer( player ) { } 82 83 virtual internal::driver::Channel* NoteOn( 84 internal::driver::SequenceSoundPlayer* seqPlayer, 85 u8 bankIndex, 86 const internal::driver::NoteOnInfo& noteOnInfo 87 ); 88 89 private: 90 const SoundArchivePlayer& m_pSoundArchivePlayer; 91 }; 92 friend class SoundArchivePlayer::SequenceNoteOnCallback; 93 94 /* ------------------------------------------------------------------------ 95 WaveSoundCallback class 96 ------------------------------------------------------------------------ */ 97 private: 98 class WaveSoundCallback : public internal::driver::WaveSoundPlayer::WaveSoundCallback 99 { 100 public: WaveSoundCallback(const SoundArchivePlayer & player)101 WaveSoundCallback( const SoundArchivePlayer& player ) : m_pSoundArchivePlayer( player ) { } 102 103 virtual bool GetWaveSoundData( 104 internal::WaveSoundInfo* info, 105 internal::WaveSoundNoteInfo* noteInfo, 106 internal::WaveInfo* waveData, 107 const internal::driver::WaveSoundPlayer::WaveSoundCallbackArg& arg 108 ) const; 109 110 private: 111 const SoundArchivePlayer& m_pSoundArchivePlayer; 112 }; 113 114 /* ------------------------------------------------------------------------ 115 class member 116 ------------------------------------------------------------------------ */ 117 public: 118 //---------------------------------------- 119 //! @name コンストラクタ/デストラクタ 120 //@{ 121 //--------------------------------------------------------------------------- 122 //! @brief コンストラクタです。 123 //! 124 //! @date 2010/01/15 初版 125 //--------------------------------------------------------------------------- 126 SoundArchivePlayer(); 127 128 //--------------------------------------------------------------------------- 129 //! @brief デストラクタです。 130 //! 131 //! @date 2010/01/15 初版 132 //--------------------------------------------------------------------------- 133 virtual ~SoundArchivePlayer(); 134 //@} 135 136 //---------------------------------------- 137 //! @name 初期化 138 //@{ 139 //--------------------------------------------------------------------------- 140 //! @brief 初期化に必要なメモリのサイズを取得します。 141 //! 142 //! @param[in] arc プレイヤーで使用するサウンドアーカイブです。 143 //! 144 //! @return 初期化に必要なメモリサイズを返します。 145 //! 146 //! @see Initialize 147 //! 148 //! @date 2010/02/01 関数名変更 (Setup → Initialize) にともなう文言の調整 149 //! @date 2010/01/15 初版 150 //--------------------------------------------------------------------------- 151 size_t GetRequiredMemSize( const SoundArchive* arc ); 152 153 //--------------------------------------------------------------------------- 154 //! @brief 初期化に必要なストリームバッファのサイズを取得します。 155 //! 156 //! @ref Initialize に渡すストリームバッファの最小サイズを取得します。 157 //! この関数で取得した値より大きいサイズのバッファを渡す必要があります。 158 //! 159 //! @param[in] arc プレイヤーで使用するサウンドアーカイブです。 160 //! 161 //! @return 初期化に必要なストリームバッファサイズを返します。 162 //! 163 //! @see Initialize 164 //! 165 //! @date 2010/02/01 関数名変更 (Setup → Initialize) にともなう文言の調整 166 //! @date 2010/01/15 初版 167 //--------------------------------------------------------------------------- 168 size_t GetRequiredStreamBufferSize( const SoundArchive* arc ); 169 170 //--------------------------------------------------------------------------- 171 //! @brief サウンドアーカイブプレイヤーを初期化します。 172 //! 173 //! サウンドアーカイブプレイヤーを使用する前に、 174 //! 初期化を行う必要があります。 175 //! 初期化を行うことにより、 176 //! サウンドアーカイブプレイヤーがサウンドアーカイブと 177 //! サウンドデータマネージャ関連付けられ、 178 //! そのサウンドアーカイブ中のデータを再生できるようになります。 179 //! 180 //! サウンドアーカイブプレイヤーが必要とするメモリのサイズは 181 //! @ref GetRequiredMemSize 及び @ref GetRequiredStreamBufferSize 182 //! で取得することができます。 183 //! 184 //! 必要なストリームバッファサイズが 0 の場合、 185 //! ストリームバッファへのポインタ strmBuffer に NULL を渡すことができます。 186 //! 187 //! ストリームバッファを @ref GetRequiredStreamBufferSize 188 //! で取得したサイズより大きく設定すると、 189 //! ストリームサウンドの音途切れが発生しにくくなりますが、 190 //! データをロードしてから実際に再生するまでの遅延時間が大きくなります。 191 //! 192 //! ストリームバッファはデバイスメモリのアドレスを指定する必要があります。 193 //! strmBuffer および strmBuffer + strmBufferSize のアドレスが、 194 //! デバイスメモリに無い場合は、アサートで停止、あるいは、 195 //! false を返します (ビルドターゲットによって挙動が変わります)。 196 //! 197 //! @param[in] arc プレイヤーで使用するサウンドアーカイブです。 198 //! @param[in] manager プレイヤーで使用するサウンドデータマネージャです。 199 //! @param[in] buffer バッファへのポインタです。 200 //! 32 バイトアライメントされている必要があります。 201 //! @param[in] size バッファサイズです。 202 //! @param[in] strmBuffer ストリームバッファへのポインタです。 203 //! 32 バイトアライメントされているデバイスメモリを 204 //! 指定する必要があります。 205 //! @param[in] strmBufferSize ストリームバッファのサイズです。 206 //! 207 //! @return 初期化に成功したら true を、失敗したら false を返します。 208 //! 209 //! @see GetRequiredMemSize 210 //! @see GetRequiredStreamBufferSize 211 //! @see Finalize 212 //! @see IsAvailable 213 //! 214 //! @date 2010/03/05 ストリームバッファがデバイスメモリに無い場合の挙動を追記。 215 //! @date 2010/02/03 buffer のアライメントサイズを変更 (4 → 32) 216 //! @date 2010/02/01 関数名変更 (Setup → Initialize) 217 //! @date 2010/01/15 初版 218 //--------------------------------------------------------------------------- 219 bool Initialize( 220 const SoundArchive* arc, 221 const SoundDataManager* manager, 222 void* buffer, 223 u32 size, 224 void* strmBuffer, 225 u32 strmBufferSize 226 ); 227 228 //--------------------------------------------------------------------------- 229 //! @brief サウンドアーカイブプレイヤーを破棄します。 230 //! 231 //! 破棄は以下のとおり行われます。 232 //! 233 //! ・このサウンドアーカイブプレイヤーを使って再生中のサウンドを停止します。@n 234 //! ・初期化で割り当てたメモリ領域を開放します。@n 235 //! ・初期化されたサウンドアーカイブとの関連が外れます。 236 //! 237 //! @see Initialize 238 //! @see IsAvailable 239 //! 240 //! @date 2010/02/01 関数名変更 (Shutdown → Finalize) 241 //! @date 2010/01/15 初版 242 //--------------------------------------------------------------------------- 243 void Finalize(); 244 245 //--------------------------------------------------------------------------- 246 //! @brief 利用可能な状態かどうかを調べます。 247 //! 248 //! サウンドアーカイブプレイヤーを利用するためには 249 //! @ref Initialize を呼び出して初期化を完了させる必要があります。 250 //! また、@ref Finalize を呼び出すと、 251 //! サウンドアーカイブプレイヤーの終了処理が行われ、 252 //! 利用できない状態になります。 253 //! 254 //! @return サウンドアーカイブプレイヤーが利用可能な状態なら true を、 255 //! そうでなければ false を返します。 256 //! 257 //! @see Initialize 258 //! @see Finalize 259 //! 260 //! @date 2010/02/01 関数名変更 (Setup → Initialize, Shutdown → Finalize) 261 //! にともなう文言の調整 262 //! @date 2010/01/15 初版 263 //--------------------------------------------------------------------------- 264 bool IsAvailable() const; 265 //@} 266 267 //---------------------------------------- 268 //! @name 更新 269 //--------------------------------------------------------------------------- 270 //! @brief サウンドアーカイブプレイヤーの更新処理を行います。 271 //! 272 //! ビデオフレームごとに呼び出す必要はありませんが、 273 //! 1 ゲームフレームに 1 回など、定期的に呼び出してください。 274 //! 275 //! この関数では、プレイヤーやサウンドに対するパラメータ設定や、 276 //! フェイドイン・フェイドアウトなどの連続的なパラメータ変更を 277 //! 反映するための処理が行われるため、呼び出し頻度が変えると、 278 //! フェードインなどの時間が変わってしまいます。 279 //! 280 //! @see SoundPlayer::StopAllSound 281 //! @see SoundPlayer::PauseAllSound 282 //! @see SoundActor::StopAllSound 283 //! @see SoundActor::PauseAllSound 284 //! @see Sound3DActor::StopAllSound 285 //! @see Sound3DActor::PauseAllSound 286 //! @see SoundHandle::Stop 287 //! @see SoundHandle::Pause 288 //! @see SoundHandle::FadeIn 289 //! @see SoundHandle::SetVolume 290 //! @see SoundHandle::GetRemainingFadeFrames 291 //! @see SoundHandle::GetRemainingPauseFadeFrames 292 //! @see StreamSoundHandle::Stop 293 //! @see StreamSoundHandle::Pause 294 //! @see StreamSoundHandle::FadeIn 295 //! @see StreamSoundHandle::SetVolume 296 //! @see StreamSoundHandle::SetTrackVolume 297 //! @see WaveSoundHandle::Stop 298 //! @see WaveSoundHandle::Pause 299 //! @see WaveSoundHandle::FadeIn 300 //! @see WaveSoundHandle::SetVolume 301 //! @see SequenceSoundHandle::Stop 302 //! @see SequenceSoundHandle::Pause 303 //! @see SequenceSoundHandle::FadeIn 304 //! @see SequenceSoundHandle::SetVolume 305 //! 306 //! @date 2010/12/24 呼び出し頻度について文言を調整 307 //! @date 2010/01/15 初版 308 //--------------------------------------------------------------------------- 309 void Update(); 310 //@} 311 312 //---------------------------------------- 313 //! @name その他 314 315 //--------------------------------------------------------------------------- 316 //! @brief プレイヤーに関連付けられているサウンドアーカイブを取得します。 317 //! 318 //! @return プレイヤーに関連付けられているサウンドアーカイブを返します。 319 //! 320 //! @see SoundArchive クラス 321 //! 322 //! @date 2010/01/15 初版 323 //--------------------------------------------------------------------------- 324 const SoundArchive& GetSoundArchive() const; 325 326 //--------------------------------------------------------------------------- 327 //! @brief 指定した ID のサウンドプレイヤーを取得します。 328 //! 329 //! @param[in] playerId プレイヤーの ID です。 330 //! 331 //! @return 指定した ID のサウンドプレイヤーを返します。 332 //! 333 //! @see SoundPlayer クラス 334 //! 335 //! @date 2010/01/15 初版 336 //--------------------------------------------------------------------------- 337 SoundPlayer& GetSoundPlayer( SoundArchive::ItemId playerId ); 338 339 //--------------------------------------------------------------------------- 340 //! @brief 指定した ID のサウンドプレイヤーを取得します。 341 //! 342 //! @param[in] pPlayerName プレイヤーのラベル文字列です。 343 //! 344 //! @return 指定した ID のサウンドプレイヤーを返します。 345 //! 346 //! @see SoundPlayer クラス 347 //! 348 //! @date 2010/01/15 初版 349 //--------------------------------------------------------------------------- 350 SoundPlayer& GetSoundPlayer( const char* pPlayerName ); 351 352 //--------------------------------------------------------------------------- 353 //! @brief サウンドプレイヤーの個数を取得します。 354 //! 355 //! @return サウンドプレイヤーの個数を返します。 356 //! 357 //! @see SoundPlayer クラス 358 //! 359 //! @date 2010/02/01 返り値の型を変更 (unsigned long → u32) 360 //! @date 2010/01/15 初版 361 //--------------------------------------------------------------------------- GetSoundPlayerCount()362 u32 GetSoundPlayerCount() const { return m_SoundPlayerCount; } 363 364 //--------------------------------------------------------------------------- 365 //! @brief 再生可能なシーケンスサウンドの残数を取得します。 366 //! 367 //! 残数が 0 のときに新たにシーケンスサウンドを再生すると、 368 //! 既に再生中の最もプレイヤープライオリティの低いサウンドが停止します。 369 //! ただし、新たに再生するサウンドのほうがプレイヤープライオリティが低い場合は、 370 //! 再生に失敗します。 371 //! 372 //! 再生可能なシーケンスサウンドの総数は、 373 //! サウンドアーカイブに記述されていて、 374 //! @ref Initialize でサウンドアーカイブプレイヤーに設定されます。 375 //! 376 //! @return 再生可能なシーケンスサウンドの残数を返します。 377 //! 378 //! @see Initialize 379 //! 380 //! @date 2010/02/01 関数名変更 (Setup → Initialize) にともなう文言の調整 381 //! @date 2010/01/15 初版 382 //--------------------------------------------------------------------------- GetFreeSequenceSoundCount()383 int GetFreeSequenceSoundCount() const 384 { 385 return m_SequenceSoundInstanceManager.GetFreeCount(); 386 } 387 388 //--------------------------------------------------------------------------- 389 //! @brief 再生可能なウェーブサウンドの残数を取得します。 390 //! 391 //! 残数が 0 のときに新たにウェーブサウンドを再生すると、 392 //! 既に再生中の最もプレイヤープライオリティの低いサウンドが停止します。 393 //! ただし、新たに再生するサウンドのほうがプレイヤープライオリティが低い場合は、 394 //! 再生に失敗します。 395 //! 396 //! 再生可能なウェーブサウンドの総数は、 397 //! サウンドアーカイブに記述されていて、 398 //! @ref Initialize でサウンドアーカイブプレイヤーに設定されます。 399 //! 400 //! @return 再生可能なウェーブサウンドの残数を返します。 401 //! 402 //! @see Initialize 403 //! 404 //! @date 2010/02/01 関数名変更 (Setup → Initialize) にともなう文言の調整 405 //! @date 2010/01/15 初版 406 //--------------------------------------------------------------------------- GetFreeWaveSoundCount()407 int GetFreeWaveSoundCount() const 408 { 409 return m_WaveSoundInstanceManager.GetFreeCount(); 410 } 411 412 //--------------------------------------------------------------------------- 413 //! @brief 再生可能なストリームサウンドの残数を取得します。 414 //! 415 //! 残数が 0 のときに新たにストリームサウンドを再生すると、 416 //! 既に再生中の最もプレイヤープライオリティの低いサウンドが停止します。 417 //! ただし、新たに再生するサウンドのほうがプレイヤープライオリティが低い場合は、 418 //! 再生に失敗します。 419 //! 420 //! 再生可能なストリームサウンドの総数は、 421 //! サウンドアーカイブに記述されていて、 422 //! @ref Initialize でサウンドアーカイブプレイヤーに設定されます。 423 //! 424 //! @return 再生可能なストリームサウンドの残数を返します。 425 //! 426 //! @see Initialize 427 //! 428 //! @date 2010/02/01 関数名変更 (Setup → Initialize) にともなう文言の調整 429 //! @date 2010/01/15 初版 430 //--------------------------------------------------------------------------- GetFreeStreamSoundCount()431 int GetFreeStreamSoundCount() const 432 { 433 return m_StreamSoundInstanceManager.GetFreeCount(); 434 } 435 436 //--------------------------------------------------------------------------- 437 //! @brief シーケンスコマンド 'userproc' で呼び出される 438 //! コールバック関数を登録します。 439 //! 440 //! ここで登録したコールバックは、シーケンスデータ側のシーケンスコマンド 441 //! 'userproc' が処理されたフレームで呼び出されます。 442 //! コールバック関数はサウンドスレッド呼び出されます。 443 //! 444 //! 'userproc' コマンドの詳細については、 445 //! シーケンスデータマニュアルを参照してください。 446 //! 447 //! ここで設定したコールバック関数はサウンドスレッドから呼び出されます。 448 //! 排他制御が必要な場合は、 449 //! @ref SoundThreadScopedLock クラスあるいは、 450 //! @ref LockSoundThread / @ref UnlockSoundThread 関数を利用する必要があります。 451 //! 452 //! コールバック関数はすみやかに処理を終える必要があります。 453 //! 処理が長引くと、ノイズが発生する可能性が高くなります。 454 //! たとえば、コールバック関数内でブロックする可能性のある API 455 //! (クリティカルセクションなど) を呼び出すと、 456 //! 処理を終えるのに時間がかかる可能性があります。 457 //! 458 //! @param[in] callback 登録するコールバック関数です。 459 //! @param[in] callbackArg コールバック関数に渡されるユーザー引数です。 460 //! 461 //! @see SequenceUserprocCallback 462 //! 463 //! @date 2011/01/11 コールバック関数がサウンドスレッドから呼び出される旨、追記 464 //! @date 2010/01/15 初版 465 //--------------------------------------------------------------------------- 466 void SetSequenceUserprocCallback( 467 SequenceUserprocCallback callback, void* callbackArg ); 468 //@} 469 470 471 // StartSound実装 472 //! @details :private 473 StartResult detail_SetupSoundImpl( 474 SoundHandle* handle, 475 u32 soundId, 476 internal::BasicSound::AmbientInfo* ambientArgInfo, 477 SoundActor* actor, 478 bool holdFlag, 479 const StartInfo* startInfo 480 ); 481 //! @details :private detail_GetItemId(const char * pString)482 virtual SoundArchive::ItemId detail_GetItemId( const char* pString ) 483 { 484 NW_NULL_ASSERT( m_pSoundArchive ); 485 return m_pSoundArchive->GetItemId( pString ); 486 } 487 488 489 // 非公開関数 490 //! @details :private detail_SetMmlParser(internal::driver::MmlParser * parser)491 void detail_SetMmlParser( internal::driver::MmlParser* parser ) 492 { 493 if ( parser == NULL ) m_MmlSequenceTrackAllocator.SetMmlParser( &m_MmlParser ); 494 else m_MmlSequenceTrackAllocator.SetMmlParser( parser ); 495 } 496 //! @details :private 497 const void* detail_GetFileAddress( SoundArchive::FileId fileId ) const; 498 499 protected: 500 virtual StartResult detail_SetupSound( 501 SoundHandle* handle, 502 u32 soundId, 503 bool holdFlag, 504 const StartInfo* startInfo 505 ); 506 507 private: 508 509 template< typename Sound, typename Player > 510 Sound* AllocSound( 511 internal::SoundInstanceManager< Sound, Player >* manager, 512 SoundArchive::ItemId soundId, 513 int priority, 514 int ambientPriority, 515 internal::BasicSound::AmbientInfo* ambientArgInfo 516 ); 517 518 StartResult PrepareSequenceSoundImpl( 519 internal::SequenceSound* sound, 520 const SoundArchive::SoundInfo* commonInfo, 521 const SoundArchive::SequenceSoundInfo* info, 522 SoundStartable::StartInfo::StartOffsetType startOffsetType, 523 int startOffset, 524 const StartInfo::SeqSoundInfo* externalSeqInfo 525 ); 526 527 StartResult PrepareStreamSoundImpl( 528 internal::StreamSound* sound, 529 const SoundArchive::SoundInfo* commonInfo, 530 const SoundArchive::StreamSoundInfo* info, 531 SoundStartable::StartInfo::StartOffsetType startOffsetType, 532 int startOffset 533 ); 534 535 StartResult PrepareWaveSoundImpl( 536 internal::WaveSound* sound, 537 const SoundArchive::SoundInfo* commonInfo, 538 const SoundArchive::WaveSoundInfo* info, 539 SoundStartable::StartInfo::StartOffsetType startOffsetType, 540 int startOffset 541 ); 542 543 544 internal::PlayerHeap* CreatePlayerHeap( 545 void** ppBuffer, void* pEndAddress, size_t heapSize ); 546 547 // Setup 548 bool SetupMram( const SoundArchive* arc, void* buffer, unsigned long size ); 549 bool SetupSoundPlayer( const SoundArchive* arc, void** buffer, void* endp ); 550 bool SetupSequenceSound( const SoundArchive* arc, int numSounds, void** buffer, void* endp ); 551 bool SetupSequenceTrack( const SoundArchive* arc, int numTracks, void** buffer, void* endp ); 552 bool SetupWaveSound( const SoundArchive* arc, int numSounds, void** buffer, void* endp ); 553 bool SetupStreamSound( const SoundArchive* arc, int numSounds, void** buffer, void* endp ); 554 bool SetupStreamBuffer( const SoundArchive* arc, void* buffer, unsigned long size ); 555 556 void UpdateCommonSoundParam( 557 internal::BasicSound* sound, const SoundArchive::SoundInfo* commonInfo ); 558 559 bool IsLoadWaveArchive( const void* bankFile, internal::LoadItemInfo* info ) const; 560 561 const SoundArchive* m_pSoundArchive; 562 563 // コールバック 564 SequenceNoteOnCallback m_SequenceCallback; 565 WaveSoundCallback m_WaveSoundCallback; 566 SequenceUserprocCallback m_SequenceUserprocCallback; 567 void* m_pSequenceUserprocCallbackArg; 568 569 // サウンドプレイヤー 570 u32 m_SoundPlayerCount; 571 SoundPlayer* m_pSoundPlayers; 572 573 // マネージャー・アロケータ 574 internal::SequenceSoundInstanceManager m_SequenceSoundInstanceManager; 575 internal::WaveSoundInstanceManager m_WaveSoundInstanceManager; 576 internal::StreamSoundInstanceManager m_StreamSoundInstanceManager; 577 578 internal::driver::SequenceTrackAllocator* m_pSequenceTrackAllocator; 579 internal::driver::MmlSequenceTrackAllocator m_MmlSequenceTrackAllocator; // デフォルトのシーケンストラックアロケータ 580 581 internal::driver::StreamBufferPool m_StreamBufferPool; 582 583 // デフォルトのシーケンスパーサ 584 internal::driver::MmlParser m_MmlParser; 585 586 // バッファ情報記憶 587 void* m_pSetupBufferAddress; 588 u32 m_SetupBufferSize; 589 590 // データマネージャ 591 const SoundDataManager* m_pSoundDataManager; 592 }; 593 594 } // namespace nw::snd 595 } // namespace nw 596 597 598 #endif /* NW_SND_SOUND_ARCHIVE_PLAYER_H_ */ 599 600