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