1 /*---------------------------------------------------------------------------*
2   Project:  NintendoWare
3   File:     snd_SequenceSoundHandle.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: 31311 $
16  *---------------------------------------------------------------------------*/
17 
18 /**
19  * :include nw/snd/snd_SequenceSoundHandle.h
20  *
21  * @file snd_SequenceSoundHandle.h
22  */
23 
24 #ifndef NW_SND_SEQUENCE_SOUND_HANDLE_H_
25 #define NW_SND_SEQUENCE_SOUND_HANDLE_H_
26 
27 #include <nw/snd/snd_SequenceSound.h>
28 #include <nw/ut/ut_PreProcessor.h>
29 
30 namespace nw {
31 namespace snd {
32 
33 //---------------------------------------------------------------------------
34 //! @brief    再生したシーケンスサウンドの操作を行うためのハンドルクラスです。
35 //!
36 //!           サウンドは再生時に汎用サウンドハンドル
37 //!           @ref SoundHandle と関連付けられますが、
38 //!           シーケンスサウンドに固有の処理は汎用サウンドハンドルには実装されていません。
39 //!
40 //!           シーケンスサウンドに固有の処理を行いたい場合は、
41 //!           汎用サウンドハンドルを引数にとるコンストラクタを用いて、
42 //!           シーケンスサウンドハンドルを生成し、使用してください。
43 //!
44 //!           ハンドルの使い方は、汎用サウンドハンドル @ref SoundHandle と同じです。
45 //!
46 //! @see      SoundHandle クラス
47 //!
48 //! @date 2010/01/22 初版
49 //---------------------------------------------------------------------------
50 class SequenceSoundHandle
51 {
52 public:
53     //----------------------------------------
54     //! @name コンストラクタ/デストラクタ
55     //@{
56     //---------------------------------------------------------------------------
57     //! @brief    コンストラクタです。
58     //!
59     //!           引数の無いコンストラクタは、
60     //!           どのサウンドとも関連付けられていないハンドルを構築します。
61     //!
62     //! @date 2010/01/22 初版
63     //---------------------------------------------------------------------------
SequenceSoundHandle()64     SequenceSoundHandle() : m_pSound( NULL ) { }
65 
66     //---------------------------------------------------------------------------
67     //! @brief    コンストラクタです。
68     //!
69     //!           引数付きコンストラクタは、引数 handle
70     //!           で指定したサウンドハンドルが参照しているサウンドを用いて、
71     //!           シーケンスサウンドハンドルを構築します。
72     //!           シーケンスサウンド以外のサウンドがサウンドハンドルに関連付けられているときは、
73     //!           引数の無いコンストラクタと同様に構築します。
74     //!
75     //!           引数付きコンストラクタで構築したときに、
76     //!           サウンドが既に別のシーケンスサウンドハンドルと関連付けられている場合は、
77     //!           その関連付けが切られる点に注意してください。
78     //!           ただし、引数に渡したサウンドハンドルとの関連付けは切れません。
79     //!
80     //! @param[in] handle シーケンスサウンドと関連付けられたサウンドハンドルです。
81     //!
82     //! @see      SoundHandle クラス
83     //!
84     //! @date 2010/01/22 初版
85     //---------------------------------------------------------------------------
86     SequenceSoundHandle( SoundHandle* handle );
87 
88     //---------------------------------------------------------------------------
89     //! @brief    デストラクタです。
90     //!
91     //! @date 2010/01/22 初版
92     //---------------------------------------------------------------------------
~SequenceSoundHandle()93     ~SequenceSoundHandle() { DetachSound(); }
94     //@}
95 
96     // -----------------------------------------------------------------
97     //! @name 再生/停止/一時停止/再開
98     //@{
99 
100     //---------------------------------------------------------------------------
101     //! @brief    再生準備の完了を待ってサウンドを再生します。
102     //!
103     //!           ハンドルが無効の場合は、何もしません。
104     //!
105     //!           サウンドの再生を開始するためには、@ref SoundArchivePlayer::PrepareSound
106     //!           を呼び出した後、再生準備が完了していなければなりません。
107     //!           この関数は、再生準備が完了したサウンドの再生を開始します。
108     //!           再生準備が完了していないサウンドは、完了するまで待ってから再生を開始します。
109     //!
110     //! @see  nw::snd::SoundArchivePlayer::PrepareSound
111     //!
112     //! @date 2010/01/22 初版
113     //---------------------------------------------------------------------------
StartPrepared()114     void StartPrepared()
115     {
116         if ( IsAttachedSound() ) m_pSound->StartPrepared();
117     }
118 
119     //---------------------------------------------------------------------------
120     //! @brief    サウンドを停止します。
121     //!
122     //!           ハンドルに関連付けられたサウンドを停止します。
123     //!           ハンドルが無効の場合は、何もしません。
124     //!
125     //!           fadeFrames で指定したフレーム数をかけてフェードアウトさせることができます。
126     //!           0 を指定した場合はフェードアウトを行わず、
127     //!           エンベロープのリリースを発音し全ての減衰が完了した後にサウンドが停止します。
128     //!
129     //!           フェードアウトの音量制御は、フェードインと共有されます。
130     //!           フェードアウトにかかるフレーム数は、
131     //!           最大音量から音が消えるまでにかかる変化速度を表しますので、
132     //!           フェードイン中にフェードアウトを指定した時などは、
133     //!           指定したフレーム数よりも短い時間でフェードアウトが完了する可能性があります。
134     //!
135     //! @param[in] fadeFrames   フェードアウトにかけるフレーム数です。
136     //!                         フレーム数は @ref SoundArchivePlayer::Update
137     //!                         の呼び出し回数で換算されます。
138     //!
139     //! @date 2010/12/24 フレーム数について追記
140     //! @date 2010/01/22 初版
141     //---------------------------------------------------------------------------
Stop(int fadeFrames)142     void Stop( int fadeFrames )
143     {
144         if ( IsAttachedSound() ) m_pSound->Stop( fadeFrames );
145     }
146 
147     //---------------------------------------------------------------------------
148     //! @brief    サウンドを一時停止または再開します。
149     //!
150     //!           ハンドルに関連付けられたサウンドを一時停止または再開します。
151     //!           ハンドルが無効の場合は、何もしません。
152     //!
153     //!           fadeFrames で指定したフレーム数をかけてフェードアウトしながら一時停止、
154     //!           またはフェードインしながら再開させることができます。
155     //!           0 を指定した場合は、即座に一時停止または再開します。
156     //!
157     //!           一時停止・再開時のフェードは、再生開始時のフェードイン、
158     //!           停止時のフェードアウトとは独立してはたらきます。
159     //!           フェードにかかるフレーム数は、最大音量から音が消えるまで、
160     //!           あるいは、
161     //!           発音していない状態から最大音量に達するまでにかかる変化速度を表しますので、
162     //!           フェード中にさらにフェードを指定した時などは、
163     //!           指定したフレーム数よりも短い時間でフェードが完了する可能性があります。
164     //!
165     //! @param[in]    flag        true なら一時停止、false なら再開します。
166     //! @param[in]    fadeFrames    フェードイン・フェードアウトにかけるフレーム数です。
167     //!                             フレーム数は @ref SoundArchivePlayer::Update
168     //!                             の呼び出し回数で換算されます。
169     //!
170     //! @see  IsPause
171     //!
172     //! @date 2010/12/24 フレーム数について追記
173     //! @date 2010/01/22 初版
174     //---------------------------------------------------------------------------
Pause(bool flag,int fadeFrames)175     void Pause( bool flag, int fadeFrames )
176     {
177         if ( IsAttachedSound() ) m_pSound->Pause( flag, fadeFrames );
178     }
179 
180     //---------------------------------------------------------------------------
181     //! @brief    サウンドの再生準備が完了しているかどうかを調べます。
182     //!
183     //!           @ref SoundArchivePlayer::PrepareSound を呼び出した後、
184     //!           そのサウンドの再生準備が完了しているかどうかを調べます。
185     //!           再生準備が完了したサウンドは、@ref StartPrepared を呼び出した際に、
186     //!           すぐに再生を始めることができます。
187     //!
188     //! @return   サウンドの再生準備が完了していれば true を返します。
189     //!
190     //! @see  SoundArchivePlayer::PrepareSound
191     //! @see  StartPrepared
192     //!
193     //! @date 2010/01/22 初版
194     //---------------------------------------------------------------------------
IsPrepared()195     bool IsPrepared() const { return IsAttachedSound() && m_pSound->IsPrepared(); }
196 
197     //---------------------------------------------------------------------------
198     //! @brief    サウンドが一時停止中かどうかを調べます。
199     //!
200     //! @return   サウンドが一時停止状態であれば true を返します。
201     //!
202     //! @see Pause
203     //!
204     //! @date 2010/01/22 初版
205     //---------------------------------------------------------------------------
IsPause()206     bool IsPause() const { return IsAttachedSound() && m_pSound->IsPause(); }
207 
208     //---------------------------------------------------------------------------
209     //! @brief    サウンドを再生開始時にフェードインさせます。
210     //!
211     //!           この関数でフェードインの指定を行うと、
212     //!           @ref SoundArchivePlayer::StartSound または
213     //!           @ref StartPrepared を呼び出して再生を開始してから、
214     //!           最初の @ref SoundArchivePlayer::Update
215     //!           が呼び出されたときにフェードインが設定されます。
216     //!
217     //!           サウンドの再生が開始され、最初の @ref SoundArchivePlayer::Update
218     //!           が呼ばれた後に、この関数を呼び出しても効果がありません。
219     //!
220     //!           フェードインの音量制御は、停止時のフェードアウトと共有されます。
221     //!
222     //! @param[in] frames   フェードインにかけるフレーム数です。
223     //!                     フレーム数は @ref SoundArchivePlayer::Update
224     //!                     の呼び出し回数で換算されます。
225     //!
226     //! @see  SoundArchivePlayer::StartSound
227     //! @see  StartPrepared
228     //!
229     //! @date 2010/12/24 フレーム数について追記
230     //! @date 2010/01/22 初版
231     //---------------------------------------------------------------------------
FadeIn(int frames)232     void FadeIn( int frames )
233     {
234         if ( IsAttachedSound() ) m_pSound->FadeIn( frames );
235     }
236     //@}
237 
238     // -----------------------------------------------------------------
239     //! @name   パラメータ変更
240     //@{
241 
242     //---------------------------------------------------------------------------
243     //! @brief    サウンドの音量を変更します。
244     //!
245     //!           ハンドルに関連付けられたサウンドの音量を変更します。
246     //!           ハンドルが無効の場合は、何もしません。
247     //!
248     //!           この関数で指定する値は、他のどの音量パラメータとも独立して動作し、
249     //!           それらは全て重ね合わされます。
250     //!
251     //!           音量 volume は、0.0 以上の倍率で指定します。
252     //!           すなわち、1.0 を指定すると音量に影響を与えません。
253     //!           0.0 を指定すると発音されなくなります。デフォルト値は 1.0 です。
254     //!
255     //!           他の音量パラメータと重ね合わされたあと、
256     //!           最終的な音量は 0.0 ~ 2.0 の範囲でクランプされます。
257     //!           この関数で 2.0 を設定したとしても、
258     //!           元の音量の 2 倍にならない可能性があることに注意してください。
259     //!
260     //!           音量の変化は frames で指定したフレーム数をかけて行われます。
261     //!           音量の変化途中にさらにこの関数を呼び出した場合は、
262     //!           その時点での変化途中の音量値を基点として、
263     //!           新しく指定したフレーム数をかけて音量を変化させます。
264     //!
265     //! @param[in] volume 変更する音量の倍率 (0.0~) です。
266     //! @param[in] frames   音量変化にかけるフレーム数です。
267     //!                     フレーム数は @ref SoundArchivePlayer::Update
268     //!                     の呼び出し回数で換算されます。
269     //!
270     //! @date 2010/12/24 フレーム数について追記
271     //! @date 2010/01/22 初版
272     //---------------------------------------------------------------------------
273     void SetVolume( f32 volume, int frames = 0 )
274     {
275         if ( IsAttachedSound() ) m_pSound->SetVolume( volume, frames );
276     }
277 
278     //---------------------------------------------------------------------------
279     //! @brief    サウンドの音程を変更します。
280     //!
281     //!           ハンドルに関連付けられたサウンドの音程を変更します。
282     //!           ハンドルが無効の場合は、何もしません。
283     //!
284     //!           この関数で指定する値は、他のどの音程パラメータとも独立して動作し、
285     //!           それらは全て重ね合わされます。
286     //!
287     //!           音程 pitch は、周波数の比率で指定します。
288     //!           すなわち、1.0 を指定すると音程に影響を与えません。
289     //!           2.0 を指定すると再生される周波数が 2 倍になり、
290     //!           1 オクターブ高い音程になります。
291     //!           0.5 を指定すると 1 オクターブ低い音程になります。
292     //!           デフォルト値は 1.0 です。
293     //!
294     //! @param[in] pitch  変更する音程の周波数比率です。
295     //!
296     //! @date 2010/01/22 初版
297     //---------------------------------------------------------------------------
SetPitch(f32 pitch)298     void SetPitch( f32 pitch )
299     {
300         if ( IsAttachedSound() ) m_pSound->SetPitch( pitch );
301     }
302 
303     //---------------------------------------------------------------------------
304     //! @brief    サウンドのパン (左右の定位) を変更します。
305     //!
306     //!           ハンドルに関連付けられたサウンドのパンを変更します。
307     //!           ハンドルが無効の場合は、何もしません。
308     //!
309     //!           この関数で指定する値は、他のどのパンパラメータとも独立して動作し、
310     //!           それらは全て重ね合わされます。
311     //!
312     //!           pan は、定位の相対変化の値を設定します。
313     //!           0.0 を指定するとデータで設定されたパンの値から変化しません。
314     //!           1.0 を指定すると中央に定位していた音が右端に定位するようになり、
315     //!           -1.0 を指定すると中央に定位していた音が左端に定位するようになります。
316     //!           デフォルト値は 0.0 です。
317     //!
318     //! @param[in] pan    0.0 を基準としたパンの相対変化の値です。
319     //!
320     //! @date 2010/01/22 初版
321     //---------------------------------------------------------------------------
SetPan(f32 pan)322     void SetPan( f32 pan )
323     {
324         if ( IsAttachedSound() ) m_pSound->SetPan( pan );
325     }
326 
327 #ifdef NW_PLATFORM_RVL
328     //---------------------------------------------------------------------------
329     //! :private
330     //!
331     //! @brief    サウンドのサラウンドパン (前後の定位) を変更します。
332     //!
333     //!           ハンドルに関連付けられたサウンドのサラウンドパンを変更します。
334     //!           ハンドルが無効の場合は、何もしません。
335     //!
336     //!           この関数で指定する値は、他のどのサラウンドパンパラメータとも独立して動作し、
337     //!           それらは全て重ね合わされます。
338     //!
339     //!           surroundPan は、定位の相対変化の値を設定します。
340     //!           0.0 を指定するとデータで設定されたパンの値から変化しません。
341     //!           1.0 を指定すると最前方に定位していた音が中央に定位するようになり、
342     //!           2.0 を指定すると最前方に定位していた音が最後方に定位するようになります。
343     //!           前方へ定位を移動させたい場合は負の値を指定してください。
344     //!           デフォルト値は 0.0 です。
345     //!
346     //! @param[in] surroundPan    0.0 を基準としたサラウンドパンの相対変化の値です。
347     //!
348     //! @date 2010/01/22 初版
349     //---------------------------------------------------------------------------
SetSurroundPan(f32 surroundPan)350     void SetSurroundPan( f32 surroundPan )
351     {
352         if ( IsAttachedSound() ) m_pSound->SetSurroundPan( surroundPan );
353     }
354 #endif /* NW_PLATFORM_RVL */
355 
356     //---------------------------------------------------------------------------
357     //! :private
358     //!
359     //! @brief    サウンドのローパスフィルタカットオフ値を変更します。
360     //!
361     //!           ハンドルに関連付けられたローパスフィルタカットオフ値を変更します。
362     //!           ハンドルが無効の場合は、何もしません。
363     //!
364     //!           この関数で指定する値は、
365     //!           他のどのローパスフィルタカットオフパラメータとも独立して動作し、
366     //!           それらは全て重ね合わされます。
367     //!
368     //!           lpfFreq は、カットオフの相対変化の値を指定します。
369     //!           0.0 を指定するとカットオフの値を変更しません。
370     //!           -1.0 を指定すると、フィルタがかかっていない状態から、
371     //!           もっともフィルタがかかっている状態 (カットオフ周波数が下がる方向)
372     //!           に変更します。
373     //!
374     //! @param[in] lpfFreq    0.0 を基準としたフィルタカットオフの相対変化の値です。
375     //!
376     //! @date 2010/01/22 初版
377     //---------------------------------------------------------------------------
SetLpfFreq(f32 lpfFreq)378     void SetLpfFreq( f32 lpfFreq )
379     {
380         if ( IsAttachedSound() ) m_pSound->SetLpfFreq( lpfFreq );
381     }
382 
383     //---------------------------------------------------------------------------
384     //! @brief    プレイヤープライオリティを変更します。
385     //!
386     //!           ハンドルに関連付けられたサウンドのプレイヤープライオリティを変更します。
387     //!           ハンドルが無効の場合は、何もしません。
388     //!
389     //!           この関数は、サウンドアーカイブ中のデータで指定されている
390     //!           プレイヤープライオリティの値を変更します。
391     //!
392     //!           priority の値の範囲は 0~127 で、大きいほど優先度が高くなります。
393     //!
394     //! @param[in] priority   プレイヤープライオリティの値です。
395     //!
396     //! @date 2010/01/22 初版
397     //---------------------------------------------------------------------------
SetPlayerPriority(int priority)398     void SetPlayerPriority( int priority )
399     {
400         if ( IsAttachedSound() ) m_pSound->SetPlayerPriority( priority );
401     }
402 
403     //---------------------------------------------------------------------------
404     //! @brief    サウンドのメインセンド量を変更します。
405     //!
406     //!           ハンドルに関連付けられたサウンドのメインセンド量を変更します。
407     //!           ハンドルが無効の場合は、何もしません。
408     //!
409     //!           この関数で指定する値は、他のどのメインセンド量とも独立して動作し、
410     //!           それらは全て重ね合わされます。
411     //!
412     //!           メインセンドは、
413     //!           出力に送るサウンドの音量をエフェクトセンドの後で調節するパラメータです。
414     //!           主に、エフェクトのドライ・ウェット成分のバランスを調整するために使用されます。
415     //!
416     //!           センド量 send は、相対変化の値を指定します。
417     //!           すなわち、0.0 を指定するとセンド量を変更しません。
418     //!           -1.0 を指定するとメインバスに最大のセンド量で送られていたサウンドが、
419     //!           メインバスに送られないようになります。 デフォルト値は 0.0 です。
420     //!
421     //! @param[in] send   0.0 を基準としたセンド量の相対変化の値です。
422     //!
423     //! @see SetFxSend
424     //!
425     //! @date 2010/06/16 初版
426     //---------------------------------------------------------------------------
SetMainSend(f32 send)427     void SetMainSend( f32 send )
428     {
429         if ( IsAttachedSound() ) m_pSound->SetMainSend( send );
430     }
431 
432     //---------------------------------------------------------------------------
433     //! @brief    サウンドのエフェクトセンド量を変更します。
434     //!
435     //!           ハンドルに関連付けられたサウンドのエフェクトセンド量を変更します。
436     //!           ハンドルが無効の場合は、何もしません。
437     //!
438     //!           この関数で指定する値は、他のどのエフェクトセンド量とも独立して動作し、
439     //!           それらは全て重ね合わされます。
440     //!
441     //!           センド量 send は、相対変化の値を指定します。
442     //!           すなわち、0.0 を指定するとセンド量を変更しません。
443     //!           1.0 を指定すると AUX バスに送られていなかったサウンドが、
444     //!           最大のセンド量で送られるようになります。 デフォルト値は 0.0 です。
445     //!
446     //! @param[in] bus    センド量を設定する AUX のバスです。
447     //! @param[in] send   0.0 を基準としたセンド量の相対変化の値です。
448     //!
449     //! @see AuxBus
450     //! @see SetMainSend
451     //!
452     //! @date 2010/06/16 初版
453     //---------------------------------------------------------------------------
SetFxSend(AuxBus bus,f32 send)454     void SetFxSend( AuxBus bus, f32 send )
455     {
456         if ( IsAttachedSound() ) m_pSound->SetFxSend( bus, send );
457     }
458 
459     //---------------------------------------------------------------------------
460     //! @brief    発音プライオリティを変更します。
461     //!
462     //!           ハンドルに関連付けられたサウンドの発音プライオリティを変更します。
463     //!           ハンドルが無効の場合は、何もしません。
464     //!
465     //!           この関数は、
466     //!           サウンドアーカイブ中のデータで指定されている、
467     //!           発音プライオリティの値を変更します。
468     //!
469     //!           priority の値の範囲は 0~127 で、大きいほど優先度が高くなります。
470     //!
471     //! @param[in] priority   発音プライオリティの値です。
472     //!
473     //! @date 2010/01/22 初版
474     //---------------------------------------------------------------------------
SetChannelPriority(int priority)475     void SetChannelPriority( int priority )
476     {
477         if ( IsAttachedSound() ) m_pSound->SetChannelPriority( priority );
478     }
479 
480     //---------------------------------------------------------------------------
481     //! @brief    シーケンスサウンドのテンポの倍率を変更します。
482     //!
483     //!           ハンドルに関連付けられたシーケンスサウンドのテンポを変更します。
484     //!           ハンドルが無効の場合は、何もしません。
485     //!
486     //!           テンポ tempoRatio は、シーケンスデータのテンポに対する倍率で指定します。
487     //!           すなわち、1.0 を指定するとテンポを変更しません。
488     //!
489     //! @param[in] tempoRatio 変更するテンポの倍率です。
490     //!
491     //! @date 2010/01/22 初版
492     //---------------------------------------------------------------------------
SetTempoRatio(f32 tempoRatio)493     void SetTempoRatio( f32 tempoRatio )
494     {
495         if ( IsAttachedSound() ) m_pSound->SetTempoRatio( tempoRatio );
496     }
497     //@}
498 
499     // -----------------------------------------------------------------
500     //! @name シーケンス変数
501     //@{
502 
503     //---------------------------------------------------------------------------
504     //! @brief    シーケンスローカル変数を読み込みます。
505     //!
506     //!           読み込みに成功すると var で指定したアドレスへ変数の値が書き込まれます。
507     //!
508     //!           サウンドハンドルが無効の場合は、読み込みに失敗して false を返します。
509     //!
510     //! @param[in] varNo  変数番号 ( 0 ~ 15 ) です。
511     //! @param[out] var   読み込む値を格納する変数へのポインタです。
512     //!
513     //! @return   読み込みに成功したら true を、失敗したら false を返します。
514     //!
515     //! @date 2010/01/22 初版
516     //---------------------------------------------------------------------------
ReadVariable(int varNo,signed short * var)517     bool ReadVariable( int varNo, signed short* var ) const
518     {
519         return IsAttachedSound() && m_pSound->ReadVariable( varNo, var );
520     }
521 
522     //---------------------------------------------------------------------------
523     //! @brief    シーケンスグローバル変数を読み込みます。
524     //!
525     //!           読み込みに成功すると var で指定したアドレスへ変数の値が書き込まれます。
526     //!
527     //! @param[in] varNo  変数番号 ( 0 ~ 15 ) です。
528     //! @param[out] var   読み込む値を格納する変数へのポインタです。
529     //!
530     //! @return   読み込みに成功したら true を、失敗したら false を返します。
531     //!
532     //! @date 2010/01/22 初版
533     //---------------------------------------------------------------------------
ReadGlobalVariable(int varNo,signed short * var)534     static bool ReadGlobalVariable( int varNo, signed short* var )
535     {
536         return internal::SequenceSound::ReadGlobalVariable( varNo, var );
537     }
538 
539     //---------------------------------------------------------------------------
540     //! @brief    シーケンストラック変数を読み込みます。
541     //!
542     //!           読み込みに成功すると var で指定したアドレスへ変数の値が書き込まれます。
543     //!
544     //!           サウンドハンドルが無効の場合は、読み込みに失敗して false を返します。
545     //!
546     //! @param[in] trackNo    トラック番号 ( 0 ~ 15 ) です。
547     //! @param[in] varNo      変数番号 ( 0 ~ 15 ) です。
548     //! @param[out] var       読み込む値を格納する変数へのポインタです。
549     //!
550     //! @return   読み込みに成功したら true を、失敗したら false を返します。
551     //!
552     //! @date 2010/01/22 初版
553     //---------------------------------------------------------------------------
ReadTrackVariable(int trackNo,int varNo,signed short * var)554     bool ReadTrackVariable( int trackNo, int varNo, signed short* var ) const
555     {
556         return IsAttachedSound() && m_pSound->ReadTrackVariable( trackNo, varNo, var );
557     }
558 
559     //---------------------------------------------------------------------------
560     //! @brief    シーケンスローカル変数を書き込みます。
561     //!
562     //!           サウンドハンドルが無効の場合は、書き込みに失敗して false を返します。
563     //!
564     //! @param[in] varNo  変数番号 ( 0 ~ 15 ) です。
565     //! @param[in] var    書き込む変数値です。
566     //!
567     //! @return   書き込みに成功したら true を、失敗したら false を返します。
568     //!
569     //! @date 2010/01/22 初版
570     //---------------------------------------------------------------------------
WriteVariable(int varNo,signed short var)571     bool WriteVariable( int varNo, signed short var )
572     {
573         if ( ! IsAttachedSound() ) return false;
574         m_pSound->WriteVariable( varNo, var );
575         return true;
576     }
577 
578     //---------------------------------------------------------------------------
579     //! @brief    シーケンスグローバル変数を書き込みます。
580     //!
581     //! @param[in] varNo  変数番号( 0 ~ 15 ) です。
582     //! @param[in] var    書き込む変数値です。
583     //!
584     //! @return   書き込みに成功したら true を、失敗したら false を返します。
585     //!
586     //! @date 2010/01/22 初版
587     //---------------------------------------------------------------------------
WriteGlobalVariable(int varNo,signed short var)588     static bool WriteGlobalVariable( int varNo, signed short var )
589     {
590         internal::SequenceSound::WriteGlobalVariable( varNo, var );
591         return true;
592     }
593 
594     //---------------------------------------------------------------------------
595     //! @brief    シーケンストラック変数を書き込みます。
596     //!
597     //!           サウンドハンドルが無効の場合は、書き込みに失敗して false を返します。
598     //!
599     //! @param[in] trackNo    トラック番号 ( 0 ~ 15 ) です。
600     //! @param[in] varNo      変数番号 ( 0 ~ 15 ) です。
601     //! @param[in] var        書き込む変数値です。
602     //!
603     //! @return   書き込みに成功したら true を、失敗したら false を返します。
604     //!
605     //! @date 2010/01/22 初版
606     //---------------------------------------------------------------------------
WriteTrackVariable(int trackNo,int varNo,signed short var)607     bool WriteTrackVariable( int trackNo, int varNo, signed short var )
608     {
609         if ( ! IsAttachedSound() ) return false;
610         m_pSound->WriteTrackVariable( trackNo, varNo, var );
611         return true;
612     }
613     //@}
614 
615     // -----------------------------------------------------------------
616     //! @name トラックパラメータ設定
617     //@{
618 
619     //---------------------------------------------------------------------------
620     //! @brief    シーケンスサウンドのトラックをミュートします。
621     //!           または、ミュート状態を解除します。
622     //!
623     //!           ハンドルに関連付けられたサウンドのシーケンストラックのミュート状態を変更します。
624     //!           サウンドハンドルが無効の場合は、何もしません。
625     //!
626     //!           trackBitFlag で、設定するトラックを指定します。
627     //!           下位ビットから順にトラック 0、トラック 1、トラック 2 … を表し、
628     //!           ビットが立っているトラック全てに対して、ミュートの設定を変更します。
629     //!           例えば、トラック 2 とトラック 5 のミュート設定を変更したい場合は
630     //!           (1 << 2) | (1 << 5) すなわち、0x0024 とします。
631     //!
632     //!           トラックをミュートすると、
633     //!           それ以降は指定されたトラックでノートオンが行われなくなります。
634     //!
635     //!           発音中の音が停止するかどうかは @ref SeqMute での指定によります。
636     //!           ミュートを解除すると発音が行われるようになりますが、
637     //!           すぐに音が鳴り出すわけではありません。
638     //!           次のノートオンから鳴り始めることに注意してください。
639     //!
640     //!           ミュート状態によく似た、トラックを無音にするサイレント状態
641     //!           (@ref SetTrackSilence) があります。
642     //!           ミュート状態とサイレント状態はそれぞれ個別に設定できます。
643     //!           両方を設定した場合は、両方を解除するまでトラックは発音しなくなります。
644     //!
645     //! @param[in] trackBitFlag   トラックごとのビットフラグです。
646     //! @param[in] mute           ミュート状態です。
647     //!
648     //! @see SeqMute
649     //! @see SetTrackSilence
650     //!
651     //! @date 2010/01/22 初版
652     //---------------------------------------------------------------------------
SetTrackMute(u32 trackBitFlag,SeqMute mute)653     void SetTrackMute( u32 trackBitFlag, SeqMute mute )
654     {
655         if ( IsAttachedSound() ) m_pSound->SetTrackMute( trackBitFlag, mute );
656     }
657 
658     //---------------------------------------------------------------------------
659     //! @brief    シーケンスサウンドのトラックをミュートします。
660     //!           または、ミュート状態を解除します。
661     //!
662     //!           ハンドルに関連付けられたサウンドのシーケンストラックのミュート状態を変更します。
663     //!           サウンドハンドルが無効の場合は、何もしません。
664     //!
665     //!           trackBitFlag で、設定するトラックを指定します。
666     //!           下位ビットから順にトラック 0、トラック 1、トラック 2 … を表し、
667     //!           ビットが立っているトラック全てに対して、ミュートの設定を変更します。
668     //!           例えば、トラック 2 とトラック 5 のミュート設定を変更したい場合は
669     //!           (1 << 2) | (1 << 5) すなわち、0x0024 とします。
670     //!
671     //!           トラックをミュートすると、
672     //!           それ以降は指定されたトラックでノートオンが行われなくなります。
673     //!
674     //!           muteFlag を true にするとシーケンストラックをミュート状態にします。
675     //!           同時に、そのトラックで発音中の音を直ちに停止します
676     //!           (@ref SeqMute の MUTE_STOP と同じです)。
677     //!
678     //!           muteFlag を false にすると、ミュートを解除します。
679     //!
680     //!           ミュートを解除すると発音が行われるようになりますが、
681     //!           すぐに音が鳴り出すわけではありません。
682     //!           次のノートオンから鳴り始めることに注意してください。
683     //!
684     //!           ミュート状態によく似た、トラックを無音にするサイレント状態
685     //!           (@ref SetTrackSilence) があります。
686     //!           ミュート状態とサイレント状態はそれぞれ個別に設定できます。
687     //!           両方を設定した場合は、両方を解除するまでトラックは発音しなくなります。
688     //!
689     //! @param[in] trackBitFlag   トラックごとのビットフラグです。
690     //! @param[in] muteFlag       ミュートするときは true、
691     //!                           ミュートを解除するときは false を指定します。
692     //!
693     //! @see SeqMute
694     //! @see SetTrackSilence
695     //!
696     //! @date 2010/01/22 初版
697     //---------------------------------------------------------------------------
SetTrackMute(u32 trackBitFlag,bool muteFlag)698     void SetTrackMute( u32 trackBitFlag, bool muteFlag )
699     {
700         if ( IsAttachedSound() ) m_pSound->SetTrackMute( trackBitFlag, muteFlag );
701     }
702 
703     //---------------------------------------------------------------------------
704     //! @brief    シーケンスサウンドのトラックをサイレント状態にします。
705     //!           または、サイレント状態を解除します。
706     //!
707     //!           ハンドルに関連付けられたサウンドのシーケンストラックのサイレント状態を変更します。
708     //!           サウンドハンドルが無効の場合は、何もしません。
709     //!
710     //!           trackBitFlag で、設定するトラックを指定します。
711     //!           下位ビットから順にトラック 0、トラック 1、トラック 2 … を表し、
712     //!           ビットが立っているトラック全てに対して、サイレント状態を変更します。
713     //!           例えば、トラック 2 とトラック 5 のサイレント状態を変更したい場合は
714     //!           (1 << 2) | (1 << 5) すなわち、0x0024 とします。
715     //!
716     //!           サイレント状態はミュート状態 (@ref SetTrackMute) と似ています。
717     //!           ミュート状態のトラックではノートオン処理が行われないので、
718     //!           そのトラックが発音しないようなります。
719     //!           一方、サイレンス状態のトラックではノートオン処理は行われますが、
720     //!           音量をゼロにすることによって発音しないようになります。
721     //!           そのため、サイレンス状態を解除したときに、
722     //!           ノートを途中から即座に再生することが可能になります。
723     //!
724     //!           fadeTimes は、この関数を呼び出したときに発音中の音に対してのみ、
725     //!           効果があることに注意してください。
726     //!           そのためサイレント状態に移行するフェード期間中に、
727     //!           新たに発音した音は、鳴り始めから無音状態になります。
728     //!
729     //!           サイレント状態では、
730     //!           ノートオンされたボイスが無音の状態で消費されてしまうので注意してください。
731     //!
732     //!           ミュート状態とサイレント状態はそれぞれ個別に設定できます。
733     //!           両方を設定した場合は、両方を解除するまでトラックは発音しなくなります。
734     //!
735     //! @param[in] trackBitFlag   トラックごとのビットフラグです。
736     //! @param[in] silenceFlag    サイレント状態にするときは true、
737     //!                           サイレント状態を解除する時は false を指定します。
738     //! @param[in] fadeTimes      サイレント状態を変更する時にかかるフェードの時間 (ミリ秒) です。
739     //!
740     //! @see SetTrackMute
741     //!
742     //! @date 2010/01/22 初版
743     //---------------------------------------------------------------------------
SetTrackSilence(u32 trackBitFlag,bool silenceFlag,int fadeTimes)744     void SetTrackSilence( u32 trackBitFlag, bool silenceFlag, int fadeTimes )
745     {
746         if ( IsAttachedSound() ) m_pSound->SetTrackSilence( trackBitFlag, silenceFlag, fadeTimes );
747     }
748 
749     //---------------------------------------------------------------------------
750     //! @brief    シーケンスサウンドのトラックの音量を変更します。
751     //!
752     //!           ハンドルに関連付けられたサウンドのシーケンストラックの音量を変更します。
753     //!           ハンドルが無効の場合は、何もしません。
754     //!
755     //!           この関数で指定する値は、他のどの音量パラメータとも独立して動作し、
756     //!           それらは全て重ね合わされます。
757     //!
758     //!           trackBitFlag で、設定するトラックを指定します。
759     //!           下位ビットから順にトラック 0、トラック 1、トラック 2 … を表し、
760     //!           ビットが立っているトラック全てに対して、音量を変更します。
761     //!           例えば、トラック 2 とトラック 5 の音量を変更したい場合は
762     //!           (1 << 2) | (1 << 5) すなわち、0x0024 とします。
763     //!
764     //!           音量 volume は、0.0 以上の倍率で指定します。
765     //!           すなわち、1.0 を指定すると音量に影響を与えません。
766     //!           0.0 を指定すると発音されなくなります。デフォルト値は 1.0 です。
767     //!
768     //!           他の音量パラメータと重ね合わされたあと、
769     //!           最終的な音量は 0.0 ~ 2.0 の範囲でクランプされます。
770     //!           この関数で 2.0 を設定したとしても、
771     //!           元の音量の 2 倍にならない可能性があることに注意してください。
772     //!
773     //! @param[in] trackBitFlag   トラックごとのビットフラグです。
774     //! @param[in] volume         変更する音量の倍率です。
775     //!
776     //! @date 2010/06/25 誤植修正 (サイレント状態→音量)
777     //! @date 2010/01/22 初版
778     //---------------------------------------------------------------------------
SetTrackVolume(u32 trackBitFlag,f32 volume)779     void SetTrackVolume( u32 trackBitFlag, f32 volume )
780     {
781         if ( IsAttachedSound() ) m_pSound->SetTrackVolume( trackBitFlag, volume );
782     }
783 
784     //---------------------------------------------------------------------------
785     //! @brief    シーケンスサウンドのトラックの音程を変更します。
786     //!
787     //!           ハンドルに関連付けられたサウンドのシーケンストラックの音程を変更します。
788     //!           ハンドルが無効の場合は、何もしません。
789     //!
790     //!           この関数で指定する値は、他のどの音程パラメータとも独立して動作し、
791     //!           それらは全て重ね合わされます。
792     //!
793     //!           trackBitFlag で、設定するトラックを指定します。
794     //!           下位ビットから順にトラック 0、トラック 1、トラック 2 … を表し、
795     //!           ビットが立っているトラック全てに対して、音程を変更します。
796     //!           例えば、トラック 2 とトラック 5 の音程を変更したい場合は
797     //!           (1 << 2) | (1 << 5) すなわち、0x0024 とします。
798     //!
799     //!           音程 pitch は、周波数の比率で指定します。
800     //!           すなわち、1.0 を指定すると音程に影響を与えません。
801     //!           2.0 を指定すると再生される周波数が 2 倍になり、
802     //!           1 オクターブ高い音程になります。
803     //!           0.5 を指定すると 1 オクターブ低い音程になります。
804     //!           デフォルト値は 1.0 です。
805     //!
806     //! @param trackBitFlag   トラックごとのビットフラグです。
807     //! @param pitch          変更する音程の周波数比率です。
808     //!
809     //! @date 2010/09/29 誤植修正 (音量パラメータ→音程パラメータ)
810     //! @date 2010/06/25 誤植修正 (サイレント状態→音程)
811     //! @date 2010/01/22 初版
812     //---------------------------------------------------------------------------
SetTrackPitch(u32 trackBitFlag,f32 pitch)813     void SetTrackPitch( u32 trackBitFlag, f32 pitch )
814     {
815         if ( IsAttachedSound() ) m_pSound->SetTrackPitch( trackBitFlag, pitch );
816     }
817 
818     //---------------------------------------------------------------------------
819     //! @brief    シーケンスサウンドのトラックのパン (左右の定位) を変更します。
820     //!
821     //!           ハンドルに関連付けられたサウンドのシーケンストラックのパンを変更します。
822     //!           ハンドルが無効の場合は、何もしません。
823     //!
824     //!           この関数で指定する値は、他のどのパンパラメータとも独立して動作し、
825     //!           それらは全て重ね合わされます。
826     //!
827     //!           trackBitFlag で、設定するトラックを指定します。
828     //!           下位ビットから順にトラック 0、トラック 1、トラック 2 … を表し、
829     //!           ビットが立っているトラック全てに対して、パンを変更します。
830     //!           例えば、トラック 2 とトラック 5 のパンを変更したい場合は
831     //!           (1 << 2) | (1 << 5) すなわち、0x0024 とします。
832     //!
833     //!           pan は、定位の相対変化の値を設定します。
834     //!           0.0 を指定するとデータで設定されたパンの値から変化しません。
835     //!           1.0 を指定すると中央に定位していた音が右端に定位するようになり、
836     //!           -1.0 を指定すると中央に定位していた音が左端に定位するようになります。
837     //!           デフォルト値は 0.0 です。
838     //!
839     //! @param[in] trackBitFlag   トラックごとのビットフラグです。
840     //! @param[in] pan            0.0 を基準としたパンの相対変化の値です。
841     //!
842     //! @date 2010/06/25 誤植修正 (サイレント状態→パン)
843     //! @date 2010/01/22 初版
844     //---------------------------------------------------------------------------
SetTrackPan(u32 trackBitFlag,f32 pan)845     void SetTrackPan( u32 trackBitFlag, f32 pan )
846     {
847         if ( IsAttachedSound() ) m_pSound->SetTrackPan( trackBitFlag, pan );
848     }
849 
850 #ifdef NW_PLATFORM_RVL
851     // トラックサラウンドパンの変更
852     //---------------------------------------------------------------------------
853     //! :private
854     //!
855     //! @brief    シーケンスサウンドのトラックのサラウンドパン (前後の定位) を変更します。
856     //!
857     //!           ハンドルに関連付けられたサウンドのシーケンストラックのサラウンドパンを変更します。
858     //!           ハンドルが無効の場合は、何もしません。
859     //!
860     //!           この関数で指定する値は、他のどのサラウンドパンパラメータとも独立して動作し、
861     //!           それらは全て重ね合わされます。
862     //!
863     //!           trackBitFlag で、設定するトラックを指定します。
864     //!           下位ビットから順にトラック 0、トラック 1、トラック 2 … を表し、
865     //!           ビットが立っているトラック全てに対して、サラウンドパンを変更します。
866     //!           例えば、トラック 2 とトラック 5 のサラウンドパンを変更したい場合は
867     //!           (1 << 2) | (1 << 5) すなわち、0x0024 とします。
868     //!
869     //!           surroundPan は、定位の相対変化の値を設定します。
870     //!           0.0 を指定するとデータで設定されたパンの値から変化しません。
871     //!           1.0 を指定すると最前方に定位していた音が中央に定位するようになり、
872     //!           2.0 を指定すると最前方に定位していた音が最後方に定位するようになります。
873     //!           前方へ定位を移動させたい場合は負の値を指定してください。
874     //!           デフォルト値は 0.0 です。
875     //!
876     //! @param[in] trackBitFlag   トラックごとのビットフラグです。
877     //! @param[in] surroundPan    0.0 を基準としたサラウンドパンの相対変化の値です。
878     //!
879     //! @date 2010/06/25 誤植修正 (サイレント状態→サラウンドパン)
880     //! @date 2010/01/22 初版
881     //---------------------------------------------------------------------------
SetTrackSurroundPan(u32 trackBitFlag,f32 surroundPan)882     void SetTrackSurroundPan( u32 trackBitFlag, f32 surroundPan )
883     {
884         if ( IsAttachedSound() ) m_pSound->SetTrackSurroundPan( trackBitFlag, surroundPan );
885     }
886 #endif /* NW_PLATFORM_RVL */
887 
888     //---------------------------------------------------------------------------
889     //! @brief    シーケンスサウンドのトラックのバンクを変更します。
890     //!
891     //!           ハンドルに関連付けられたサウンドのシーケンストラックのバンクを変更します。
892     //!           ハンドルが無効の場合は、何もしません。
893     //!
894     //!           この関数で指定する値は、他のどの音量パラメータとも独立して動作し、
895     //!           後着優先で有効になります。
896     //!
897     //!           trackBitFlag で、設定するトラックを指定します。
898     //!           下位ビットから順にトラック 0、トラック 1、トラック 2 … を表し、
899     //!           ビットが立っているトラック全てに対して、バンクを変更します。
900     //!           例えば、トラック 2 とトラック 5 のバンクを変更したい場合は
901     //!           (1 << 2) | (1 << 5) すなわち、0x0024 とします。
902     //!
903     //!           バンク番号 bankIndex は、0 ~ 3 の数値で指定します。
904     //!           0 ~ 3 は SoundMaker の「マルチバンクの設定」
905     //!           で表示されるダイアログ内のリストの行番号に該当します。
906     //!           それ以外の番号を指定すると、
907     //!           (Debug 版、Development 版) アサートで停止します。
908     //!           (Release 版) false を返します。
909     //!
910     //!           シーケンス内に bank_select コマンドを入れていた場合、
911     //!           本関数での設定と bank_select コマンドは、
912     //!           後から設定されたものが有効になります。
913     //!
914     //! @param[in] trackBitFlag   トラックごとのビットフラグです。
915     //! @param[in] bankIndex      変更するバンクの番号です。
916     //!
917     //! @return   bankIndex が 0 ~ 3 の範囲内の場合は true を返します。
918     //!           範囲外の場合は false を返します
919     //!           (Release 版のみ。Debug 版、Development 版はアサートで停止します)。
920     //!
921     //! @date 2011/02/22 返り値の説明修正
922     //! @date 2010/06/25 誤植修正 (サイレント状態→バンク)
923     //! @date 2010/06/17 初版
924     //---------------------------------------------------------------------------
SetTrackBankIndex(u32 trackBitFlag,int bankIndex)925     bool SetTrackBankIndex( u32 trackBitFlag, int bankIndex )
926     {
927         NW_MINMAXLT_ASSERT( bankIndex, 0, SoundArchive::SEQ_BANK_MAX );
928         if ( bankIndex < 0 || bankIndex >= SoundArchive::SEQ_BANK_MAX )
929         {
930             return false;
931         }
932 
933         if ( IsAttachedSound() ) m_pSound->SetTrackBankIndex( trackBitFlag, bankIndex );
934         return true;
935     }
936 
937     //@}
938 
939     // -----------------------------------------------------------------
940     //! @name ハンドル操作
941     //@{
942 
943     //---------------------------------------------------------------------------
944     //! @brief    ハンドルにサウンドが関連付けられているかどうかを調べます。
945     //!
946     //! @return   ハンドルに関連付けられているサウンドがあれば true を返します。
947     //!
948     //! @date 2010/01/22 初版
949     //---------------------------------------------------------------------------
IsAttachedSound()950     bool IsAttachedSound() const { return m_pSound != NULL; }
951 
952     //---------------------------------------------------------------------------
953     //! @brief    ハンドルからサウンドを解放します。
954     //!
955     //!           ハンドルから開放されたサウンドは、
956     //!           その後ハンドルを通して操作できないようになります。
957     //!
958     //! @date 2010/01/22 初版
959     //---------------------------------------------------------------------------
960     void DetachSound();
961     //@}
962 
963     // -----------------------------------------------------------------
964     //! @name 情報設定 / 取得
965     //@{
966 
967     //---------------------------------------------------------------------------
968     //! @brief    サウンドの ID を設定します。
969     //!
970     //!           ハンドルに関連付けられたサウンドの ID を設定します。
971     //!           ハンドルが無効の場合は、何もしません。
972     //!
973     //!           @ref SoundArchivePlayer でサウンドを再生すると、
974     //!           再生開始時にサウンド ID が自動的に設定されます。
975     //!           この関数を呼び出すと、ID を上書きして変更します。
976     //!
977     //!           設定した ID を取得するためには @ref GetId を呼び出します。
978     //!
979     //! @param[in] id サウンドを識別する ID です。
980     //!
981     //! @see SoundArchivePlayer クラス
982     //! @see GetId
983     //!
984     //! @date 2010/01/22 初版
985     //---------------------------------------------------------------------------
SetId(u32 id)986     void SetId( u32 id )
987     {
988         if ( IsAttachedSound() ) m_pSound->SetId( id );
989     }
990 
991     //---------------------------------------------------------------------------
992     //! @brief    サウンドの ID を取得します。
993     //!
994     //!           ハンドルに関連付けられたサウンドに設定されている ID を取得します。
995     //!           ハンドルが無効の場合は 0xffffffff を返します。
996     //!
997     //!           この関数で取得できる ID は @ref SetId で設定された ID です。
998     //!
999     //! @return   サウンドに設定されている ID を返します。
1000     //!
1001     //! @date 2010/01/22 初版
1002     //---------------------------------------------------------------------------
GetId()1003     u32 GetId() const
1004     {
1005         if ( IsAttachedSound() ) return m_pSound->GetId();
1006         return internal::BasicSound::INVALID_ID;
1007     }
1008 
1009     // TODO: 3D サウンド
1010     //---------------------------------------------------------------------------
1011     //! :private
1012     //!
1013     //! @brief    アンビエントパラメータの値を取得します。
1014     //!
1015     //!           3D サウンドを利用している際は、
1016     //!           3D サウンドで計算された結果がアンビエントパラメータに格納されますので、
1017     //!           アンビエントパラメータを取得して 3D
1018     //!           サウンドによるサウンドパラメータの値を知ることができます。
1019     //!
1020     //! @return   現在のアンビエントパラメータの値を返します。
1021     //!           ハンドルが無効の場合は NULL を返します。
1022     //!
1023     //! @see      nw::snd::SoundParam 構造体
1024     //!
1025     //! @date 2010/01/22 初版
1026     //---------------------------------------------------------------------------
GetAmbientParam()1027     const SoundParam* GetAmbientParam() const
1028     {
1029         if ( ! IsAttachedSound() ) return NULL;
1030         return &m_pSound->GetAmbientParam();
1031     }
1032 
1033     //---------------------------------------------------------------------------
1034     //! @brief    再生開始からのティック数を取得します。
1035     //!
1036     //!           サウンドハンドルが無効の場合は、0 を返します。
1037     //!
1038     //!           ティック数のカウンタが 32 ビットを越えると、
1039     //!           関数が返す値は 0 に戻ります。
1040     //!
1041     //! @return   再生開始からのティック数を返します。
1042     //!
1043     //! @date 2010/01/22 初版
1044     //---------------------------------------------------------------------------
GetTick()1045     unsigned long GetTick() const { return IsAttachedSound()? m_pSound->GetTick(): 0; }
1046     //@}
1047 
1048 
1049     // -----------------------------------------------------------------
1050     // 非公開関数
1051 
1052     // ハンドルをサウンドに関連付ける
1053     //! @details :private
1054     void detail_AttachSoundAsTempHandle( internal::SequenceSound* sound );
1055 
1056     //! @details :private
detail_GetAttachedSound()1057     internal::SequenceSound* detail_GetAttachedSound() { return m_pSound; }
1058 
1059     //! @details :private
detail_GetAttachedSound()1060     const internal::SequenceSound* detail_GetAttachedSound() const { return m_pSound; }
1061 
1062 private:
1063     NW_DISALLOW_COPY_AND_ASSIGN( SequenceSoundHandle );
1064 
1065     internal::SequenceSound* m_pSound;
1066 };
1067 
1068 } // namespace nw::snd
1069 } // namespace nw
1070 
1071 
1072 #endif /* NW_SND_SEQUENCE_SOUND_HANDLE_H_ */
1073 
1074