1 /*---------------------------------------------------------------------------* 2 Project: NintendoWare 3 File: snd_WaveSoundHandle.h 4 5 Copyright (C)2009-2010 Nintendo Co., Ltd./HAL Laboratory, Inc. All rights reserved. 6 7 These coded instructions, statements, and computer programs contain 8 proprietary information of Nintendo of America Inc. and/or Nintendo 9 Company Ltd., and are protected by Federal copyright law. They may 10 not be disclosed to third parties or copied or duplicated in any form, 11 in whole or in part, without the prior written consent of Nintendo. 12 13 $Revision: 18110 $ 14 *---------------------------------------------------------------------------*/ 15 16 /** 17 * :include nw/snd/snd_WaveSoundHandle.h 18 * 19 * @file snd_WaveSoundHandle.h 20 */ 21 22 #ifndef NW_SND_WAVE_SOUND_HANDLE_H_ 23 #define NW_SND_WAVE_SOUND_HANDLE_H_ 24 25 #include <nw/ut/ut_PreProcessor.h> 26 #include <nw/snd/snd_BasicSound.h> 27 #include <nw/snd/snd_WaveSound.h> 28 29 namespace nw { 30 namespace snd { 31 32 class SoundHandle; 33 34 //--------------------------------------------------------------------------- 35 //! @brief 再生したウェーブサウンドの操作を行うためのハンドルクラスです。 36 //! 37 //! サウンドは再生時に汎用サウンドハンドル 38 //! @ref SoundHandle と関連付けられますが、 39 //! ウェーブサウンドに固有の処理は汎用サウンドハンドルには実装されていません。 40 //! 41 //! ウェーブサウンドに固有の処理を行いたい場合は、 42 //! 汎用サウンドハンドルを引数にとるコンストラクタを用いて、 43 //! ウェーブサウンドハンドルを生成し、使用してください。 44 //! 45 //! ハンドルの使い方は、汎用サウンドハンドル @ref SoundHandle と同じです。 46 //! 47 //! @see SoundHandle クラス 48 //! 49 //! @date 2010/01/22 初版 50 //--------------------------------------------------------------------------- 51 class WaveSoundHandle 52 { 53 public: 54 //! @name コンストラクタ/デストラクタ 55 //@{ 56 57 //--------------------------------------------------------------------------- 58 //! @brief コンストラクタです。 59 //! 60 //! 引数の無いコンストラクタは、 61 //! どのサウンドとも関連付けられていないハンドルを構築します。 62 //! 63 //! @date 2010/01/22 初版 64 //--------------------------------------------------------------------------- WaveSoundHandle()65 WaveSoundHandle() : m_pSound( NULL ) { } 66 67 //--------------------------------------------------------------------------- 68 //! @brief コンストラクタです。 69 //! 70 //! 引数付きコンストラクタは、 71 //! 引数 handle で指定したサウンドハンドルが参照しているサウンドを用いて、 72 //! ウェーブサウンドハンドルを構築します。 73 //! ウェーブサウンド以外のサウンドがサウンドハンドルに関連付けられているときは、 74 //! 引数の無いコンストラクタと同様に構築します。 75 //! 76 //! 引数付きコンストラクタで構築した時、 77 //! サウンドが既に別のウェーブサウンドハンドルと関連付けられている場合は、 78 //! その関連付けが切られる点に注意してください。 79 //! ただし、引数に渡したサウンドハンドルとの関連付けは切れません。 80 //! 81 //! @param[in] handle ウェーブサウンドと関連付けられたサウンドハンドル。 82 //! 83 //! @see SoundHandle クラス 84 //! 85 //! @date 2010/01/22 初版 86 //--------------------------------------------------------------------------- 87 WaveSoundHandle( SoundHandle* handle ); 88 89 //--------------------------------------------------------------------------- 90 //! @brief デストラクタです。 91 //! 92 //! @date 2010/01/22 初版 93 //--------------------------------------------------------------------------- ~WaveSoundHandle()94 ~WaveSoundHandle() { DetachSound(); } 95 96 //@} 97 98 99 //! @name 再生/停止/一時停止/再開 100 //@{ 101 102 //--------------------------------------------------------------------------- 103 //! @brief 再生準備が完了したサウンドを再生します。 104 //! 105 //! ハンドルが無効の場合は、何もしません。 106 //! 107 //! サウンドの再生を開始するためには、 108 //! @ref SoundArchivePlayer::PrepareSound を呼び出した後、 109 //! 再生準備が完了していなければなりません。 110 //! この関数は、再生準備が完了したサウンドの再生を開始します。 111 //! 再生準備が完了していないサウンドは、完了するまで待ってから再生を開始します。 112 //! 113 //! @see nw::snd::SoundArchivePlayer::PrepareSound 114 //! 115 //! @date 2010/01/22 初版 116 //--------------------------------------------------------------------------- StartPrepared()117 void StartPrepared() 118 { 119 if ( IsAttachedSound() ) m_pSound->StartPrepared(); 120 } 121 122 //--------------------------------------------------------------------------- 123 //! @brief サウンドを停止します。 124 //! 125 //! ハンドルに関連付けられたサウンドを停止します。 126 //! ハンドルが無効の場合は、何もしません。 127 //! 128 //! fadeFrames で指定したフレーム数をかけてフェードアウトさせることができます。 129 //! 0 を指定した場合はフェードアウトを行わず、 130 //! エンベロープのリリースを発音し全ての減衰が完了した後にサウンドが停止します。 131 //! 132 //! フェードアウトの音量制御は、フェードインと共有されます。 133 //! フェードアウトにかかるフレーム数は、 134 //! 最大音量から音が消えるまでにかかる変化速度を表しますので、 135 //! フェードイン中にフェードアウトを指定した時などは、 136 //! 指定したフレーム数よりも短い時間でフェードアウトが完了する可能性があります。 137 //! 138 //! @param[in] fadeFrames フェードアウトにかけるフレーム数です。 139 //! 140 //! 141 //! @date 2010/01/22 初版 142 //--------------------------------------------------------------------------- Stop(int fadeFrames)143 void Stop( int fadeFrames ) 144 { 145 if ( IsAttachedSound() ) m_pSound->Stop( fadeFrames ); 146 } 147 148 //--------------------------------------------------------------------------- 149 //! @brief サウンドを一時停止または再開します。 150 //! 151 //! ハンドルに関連付けられたサウンドを一時停止または再開します。 152 //! ハンドルが無効の場合は、何もしません。 153 //! 154 //! fadeFrames で指定したフレーム数をかけてフェードアウトしながら一時停止、 155 //! またはフェードインしながら再開させることができます。 156 //! 0 を指定した場合は、即座に一時停止または再開します。 157 //! 158 //! 一時停止・再開時のフェードは、再生開始時のフェードイン、 159 //! 停止時のフェードアウトとは独立してはたらきます。 160 //! フェードにかかるフレーム数は、最大音量から音が消えるまで、 161 //! あるいは、 162 //! 発音していない状態から最大音量に達するまでにかかる変化速度を表しますので、 163 //! フェード中にさらにフェードを指定した時などは、 164 //! 指定したフレーム数よりも短い時間でフェードが完了する可能性があります。 165 //! 166 //! @param[in] flag true なら一時停止、false なら再開します。 167 //! @param[in] fadeFrames フェードイン・フェードアウトにかけるフレーム数です。 168 //! 169 //! @see IsPause 170 //! 171 //! @date 2010/01/22 初版 172 //--------------------------------------------------------------------------- Pause(bool flag,int fadeFrames)173 void Pause( bool flag, int fadeFrames ) 174 { 175 if ( IsAttachedSound() ) m_pSound->Pause( flag, fadeFrames ); 176 } 177 178 //--------------------------------------------------------------------------- 179 //! @brief サウンドの再生準備が完了しているかどうかを調べます。 180 //! 181 //! @ref SoundArchivePlayer::PrepareSound を呼び出した後、 182 //! そのサウンドの再生準備が完了しているかどうかを調べます。 183 //! 再生準備が完了したサウンドは、@ref StartPrepared を呼び出した際に、 184 //! すぐに再生を始めることができます。 185 //! 186 //! @return サウンドの再生準備が完了していれば true を返します。 187 //! 188 //! @see SoundArchivePlayer::PrepareSound 189 //! @see StartPrepared 190 //! 191 //! @date 2010/01/22 初版 192 //--------------------------------------------------------------------------- IsPrepared()193 bool IsPrepared() const { return IsAttachedSound() && m_pSound->IsPrepared(); } 194 195 //--------------------------------------------------------------------------- 196 //! @brief サウンドが一時停止中かどうかを調べます。 197 //! 198 //! @return サウンドが一時停止状態であれば true を返します。 199 //! 200 //! @see Pause 201 //! 202 //! @date 2010/01/22 初版 203 //--------------------------------------------------------------------------- IsPause()204 bool IsPause() const { return IsAttachedSound() && m_pSound->IsPause(); } 205 206 //--------------------------------------------------------------------------- 207 //! @brief サウンドを再生開始時にフェードインさせます。 208 //! 209 //! この関数でフェードインの指定を行うと、 210 //! @ref SoundArchivePlayer::StartSound または 211 //! @ref StartPrepared を呼び出して再生を開始してから、 212 //! 最初の @ref SoundArchivePlayer::Update 213 //! が呼び出されたときにフェードインが設定されます。 214 //! 215 //! サウンドの再生が開始され、最初の @ref SoundArchivePlayer::Update 216 //! が呼ばれた後に、この関数を呼び出しても効果がありません。 217 //! 218 //! フェードインの音量制御は、停止時のフェードアウトと共有されます。 219 //! 220 //! @param[in] frames フェードインにかけるフレーム数です。 221 //! 222 //! @see SoundArchivePlayer::StartSound 223 //! @see StartPrepared 224 //! 225 //! @date 2010/01/22 初版 226 //--------------------------------------------------------------------------- FadeIn(int frames)227 void FadeIn( int frames ) 228 { 229 if ( IsAttachedSound() ) m_pSound->FadeIn( frames ); 230 } 231 232 //@} 233 234 235 //! @name パラメータ変更 236 //@{ 237 238 //--------------------------------------------------------------------------- 239 //! @brief サウンドの音量を変更します。 240 //! 241 //! ハンドルに関連付けられたサウンドの音量を変更します。 242 //! ハンドルが無効の場合は、何もしません。 243 //! 244 //! この関数で指定する値は、他のどの音量パラメータとも独立して動作し、 245 //! それらは全て重ね合わされます。 246 //! 247 //! 音量 volume は、0.0 以上の倍率で指定します。 248 //! すなわち、1.0 を指定すると音量に影響を与えません。 249 //! 0.0 を指定すると発音されなくなります。デフォルト値は 1.0 です。 250 //! 251 //! 他の音量パラメータと重ね合わされたあと、 252 //! 最終的な音量は 0.0 ~ 2.0 の範囲でクランプされます。 253 //! この関数で 2.0 を設定したとしても、 254 //! 元の音量の 2 倍にならない可能性があることに注意してください。 255 //! 256 //! 音量の変化は frames で指定したフレーム数をかけて行われます。 257 //! 音量の変化途中にさらにこの関数を呼び出した場合は、 258 //! その時点での変化途中の音量値を基点として、 259 //! 新しく指定したフレーム数をかけて音量を変化させます。 260 //! 261 //! @param[in] volume 変更する音量の倍率 (0.0~) です。 262 //! @param[in] frames 音量変化にかけるフレーム数です。 263 //! 264 //! @date 2010/01/22 初版 265 //--------------------------------------------------------------------------- 266 void SetVolume( f32 volume, int frames = 0 ) 267 { 268 if ( IsAttachedSound() ) m_pSound->SetVolume( volume, frames ); 269 } 270 271 //--------------------------------------------------------------------------- 272 //! @brief サウンドの音程を変更します。 273 //! 274 //! ハンドルに関連付けられたサウンドの音程を変更します。 275 //! ハンドルが無効の場合は、何もしません。 276 //! 277 //! この関数で指定する値は、他のどの音程パラメータとも独立して動作し、 278 //! それらは全て重ね合わされます。 279 //! 280 //! 音程 pitch は、周波数の比率で指定します。 281 //! すなわち、1.0 を指定すると音程に影響を与えません。 282 //! 2.0 を指定すると再生される周波数が 2 倍になり、 283 //! 1 オクターブ高い音程になります。 284 //! 0.5 を指定すると 1 オクターブ低い音程になります。 285 //! デフォルト値は 1.0 です。 286 //! 287 //! @param[in] pitch 変更する音程の周波数比率です。 288 //! 289 //! @date 2010/01/22 初版 290 //--------------------------------------------------------------------------- SetPitch(f32 pitch)291 void SetPitch( f32 pitch ) 292 { 293 if ( IsAttachedSound() ) m_pSound->SetPitch( pitch ); 294 } 295 296 //--------------------------------------------------------------------------- 297 //! @brief サウンドのパン (左右の定位) を変更します。 298 //! 299 //! ハンドルに関連付けられたサウンドのパンを変更します。 300 //! ハンドルが無効の場合は、何もしません。 301 //! 302 //! この関数で指定する値は、他のどのパンパラメータとも独立して動作し、 303 //! それらは全て重ね合わされます。 304 //! 305 //! pan は、定位の相対変化の値を設定します。 306 //! 0.0 を指定するとデータで設定されたパンの値から変化しません。 307 //! 1.0 を指定すると中央に定位していた音が右端に定位するようになり、 308 //! -1.0 を指定すると中央に定位していた音が左端に定位するようになります。 309 //! デフォルト値は 0.0 です。 310 //! 311 //! @param[in] pan 0.0 を基準としたパンの相対変化の値です。 312 //! 313 //! @date 2010/01/22 初版 314 //--------------------------------------------------------------------------- SetPan(f32 pan)315 void SetPan( f32 pan ) 316 { 317 if ( IsAttachedSound() ) m_pSound->SetPan( pan ); 318 } 319 320 #ifdef NW_PLATFORM_RVL 321 //--------------------------------------------------------------------------- 322 //! :private 323 //! 324 //! @brief サウンドのサラウンドパン (前後の定位) を変更します。 325 //! 326 //! ハンドルに関連付けられたサウンドのサラウンドパンを変更します。 327 //! ハンドルが無効の場合は、何もしません。 328 //! 329 //! この関数で指定する値は、他のどのサラウンドパンパラメータとも独立して動作し、 330 //! それらは全て重ね合わされます。 331 //! 332 //! surroundPan は、定位の相対変化の値を設定します。 333 //! 0.0 を指定するとデータで設定されたパンの値から変化しません。 334 //! 1.0 を指定すると最前方に定位していた音が中央に定位するようになり、 335 //! 2.0 を指定すると最前方に定位していた音が最後方に定位するようになります。 336 //! 前方へ定位を移動させたい場合は負の値を指定してください。 337 //! デフォルト値は 0.0 です。 338 //! 339 //! @param[in] surroundPan 0.0 を基準としたサラウンドパンの相対変化の値です。 340 //! 341 //! @date 2010/01/22 初版 342 //--------------------------------------------------------------------------- SetSurroundPan(f32 surroundPan)343 void SetSurroundPan( f32 surroundPan ) 344 { 345 if ( IsAttachedSound() ) m_pSound->SetSurroundPan( surroundPan ); 346 } 347 #endif /* NW_PLATFORM_RVL */ 348 349 //--------------------------------------------------------------------------- 350 //! :private 351 //! 352 //! @brief サウンドのローパスフィルタカットオフ値を変更します。 353 //! 354 //! ハンドルに関連付けられたローパスフィルタカットオフ値を変更します。 355 //! ハンドルが無効の場合は、何もしません。 356 //! 357 //! この関数で指定する値は、 358 //! 他のどのローパスフィルタカットオフパラメータとも独立して動作し、 359 //! それらは全て重ね合わされます。 360 //! 361 //! lpfFreq は、カットオフの相対変化の値を指定します。 362 //! 0.0 を指定するとカットオフの値を変更しません。 363 //! -1.0 を指定すると、フィルタがかかっていない状態から、 364 //! もっともフィルタがかかっている状態 (カットオフ周波数が下がる方向) 365 //! に変更します。 366 //! 367 //! @param[in] lpfFreq 0.0 を基準としたフィルタカットオフの相対変化の値です。 368 //! 369 //! @date 2010/01/22 初版 370 //--------------------------------------------------------------------------- SetLpfFreq(f32 lpfFreq)371 void SetLpfFreq( f32 lpfFreq ) 372 { 373 if ( IsAttachedSound() ) m_pSound->SetLpfFreq( lpfFreq ); 374 } 375 376 //--------------------------------------------------------------------------- 377 //! @brief プレイヤープライオリティを変更します。 378 //! 379 //! ハンドルに関連付けられたサウンドのプレイヤープライオリティを変更します。 380 //! ハンドルが無効の場合は、何もしません。 381 //! 382 //! この関数は、サウンドアーカイブ中のデータで指定されている 383 //! プレイヤープライオリティの値を変更します。 384 //! 385 //! priority の値の範囲は 0~127 で、大きいほど優先度が高くなります。 386 //! 387 //! @param[in] priority プレイヤープライオリティの値です。 388 //! 389 //! @date 2010/01/22 初版 390 //--------------------------------------------------------------------------- SetPlayerPriority(int priority)391 void SetPlayerPriority( int priority ) 392 { 393 if ( IsAttachedSound() ) m_pSound->SetPlayerPriority( priority ); 394 } 395 396 //--------------------------------------------------------------------------- 397 //! @brief サウンドのメインセンド量を変更します。 398 //! 399 //! ハンドルに関連付けられたサウンドのメインセンド量を変更します。 400 //! ハンドルが無効の場合は、何もしません。 401 //! 402 //! この関数で指定する値は、他のどのメインセンド量とも独立して動作し、 403 //! それらは全て重ね合わされます。 404 //! 405 //! メインセンドは、 406 //! 出力に送るサウンドの音量をエフェクトセンドの後で調節するパラメータです。 407 //! 主に、エフェクトのドライ・ウェット成分のバランスを調整するために使用されます。 408 //! 409 //! センド量 send は、相対変化の値を指定します。 410 //! すなわち、0.0 を指定するとセンド量を変更しません。 411 //! -1.0 を指定するとメインバスに最大のセンド量で送られていたサウンドが、 412 //! メインバスに送られないようになります。 デフォルト値は 0.0 です。 413 //! 414 //! @param[in] send 0.0 を基準としたセンド量の相対変化の値です。 415 //! 416 //! @see SetFxSend 417 //! 418 //! @date 2010/06/16 初版 419 //--------------------------------------------------------------------------- SetMainSend(f32 send)420 void SetMainSend( f32 send ) 421 { 422 if ( IsAttachedSound() ) m_pSound->SetMainSend( send ); 423 } 424 425 //--------------------------------------------------------------------------- 426 //! @brief サウンドのエフェクトセンド量を変更します。 427 //! 428 //! ハンドルに関連付けられたサウンドのエフェクトセンド量を変更します。 429 //! ハンドルが無効の場合は、何もしません。 430 //! 431 //! この関数で指定する値は、他のどのエフェクトセンド量とも独立して動作し、 432 //! それらは全て重ね合わされます。 433 //! 434 //! センド量 send は、相対変化の値を指定します。 435 //! すなわち、0.0 を指定するとセンド量を変更しません。 436 //! 1.0 を指定すると AUX バスに送られていなかったサウンドが、 437 //! 最大のセンド量で送られるようになります。 デフォルト値は 0.0 です。 438 //! 439 //! @param[in] bus センド量を設定する AUX のバスです。 440 //! @param[in] send 0.0 を基準としたセンド量の相対変化の値です。 441 //! 442 //! @see AuxBus 443 //! @see SetMainSend 444 //! 445 //! @date 2010/06/16 初版 446 //--------------------------------------------------------------------------- SetFxSend(AuxBus bus,f32 send)447 void SetFxSend( AuxBus bus, f32 send ) 448 { 449 if ( IsAttachedSound() ) m_pSound->SetFxSend( bus, send ); 450 } 451 452 //--------------------------------------------------------------------------- 453 //! @brief 発音プライオリティを変更します。 454 //! 455 //! ハンドルに関連付けられたサウンドの発音プライオリティを変更します。 456 //! ハンドルが無効の場合は、何もしません。 457 //! 458 //! この関数は、 459 //! サウンドアーカイブ中のデータで指定されている、 460 //! 発音プライオリティの値を変更します。 461 //! 462 //! priority の値の範囲は 0~127 で、大きいほど優先度が高くなります。 463 //! 464 //! @param[in] priority 発音プライオリティの値です。 465 //! 466 //! @date 2010/01/22 初版 467 //--------------------------------------------------------------------------- SetChannelPriority(int priority)468 void SetChannelPriority( int priority ) 469 { 470 if ( IsAttachedSound() ) m_pSound->SetChannelPriority( priority ); 471 } 472 473 //@} 474 475 476 //! @name ハンドル操作情報設定 / 取得 477 //@{ 478 479 //--------------------------------------------------------------------------- 480 //! @brief ハンドルにサウンドが関連付けられているかどうかを調べます。 481 //! 482 //! @return ハンドルに関連付けられているサウンドがあれば true を返します。 483 //! 484 //! @date 2010/01/22 初版 485 //--------------------------------------------------------------------------- IsAttachedSound()486 bool IsAttachedSound() const { return m_pSound != NULL; } 487 488 //--------------------------------------------------------------------------- 489 //! @brief ハンドルからサウンドを解放します。 490 //! 491 //! ハンドルから開放されたサウンドは、 492 //! その後ハンドルを通して操作できないようになります。 493 //! 494 //! @date 2010/01/22 初版 495 //--------------------------------------------------------------------------- 496 void DetachSound(); 497 498 //@} 499 500 501 //! @name 情報設定 / 取得 502 //@{ 503 504 //--------------------------------------------------------------------------- 505 //! @brief サウンドの ID を設定します。 506 //! 507 //! ハンドルに関連付けられたサウンドの ID を設定します。 508 //! ハンドルが無効の場合は、何もしません。 509 //! 510 //! @ref SoundArchivePlayer でサウンドを再生すると、 511 //! 再生開始時にサウンド ID が自動的に設定されます。 512 //! この関数を呼び出すと、ID を上書きして変更します。 513 //! 514 //! 設定した ID を取得するためには @ref GetId を呼び出します。 515 //! 516 //! @param[in] id サウンドを識別する ID です。 517 //! 518 //! @see SoundArchivePlayer クラス 519 //! @see GetId 520 //! 521 //! @date 2010/01/22 初版 522 //--------------------------------------------------------------------------- SetId(u32 id)523 void SetId( u32 id ) 524 { 525 if ( IsAttachedSound() ) m_pSound->SetId( id ); 526 } 527 528 //--------------------------------------------------------------------------- 529 //! @brief サウンドの ID を取得します。 530 //! 531 //! ハンドルに関連付けられたサウンドに設定されている ID を取得します。 532 //! ハンドルが無効の場合は 0xffffffff を返します。 533 //! 534 //! この関数で取得できる ID は @ref SetId で設定された ID です。 535 //! 536 //! @return サウンドに設定されている ID を返します。 537 //! 538 //! @date 2010/01/22 初版 539 //--------------------------------------------------------------------------- GetId()540 u32 GetId() const 541 { 542 if ( IsAttachedSound() ) return m_pSound->GetId(); 543 return internal::BasicSound::INVALID_ID; 544 } 545 546 // TODO: 3D サウンド 547 //--------------------------------------------------------------------------- 548 //! :private 549 //! 550 //! @brief アンビエントパラメータの値を取得します。 551 //! 552 //! 3D サウンドを利用している際は、 553 //! 3D サウンドで計算された結果がアンビエントパラメータに格納されますので、 554 //! アンビエントパラメータを取得して 3D 555 //! サウンドによるサウンドパラメータの値を知ることができます。 556 //! 557 //! @return 現在のアンビエントパラメータの値を返します。 558 //! ハンドルが無効の場合は NULL を返します。 559 //! 560 //! @see nw::snd::S 561 //! 562 //! @date 2010/01/22 初版 563 //--------------------------------------------------------------------------- GetAmbientParam()564 const SoundParam* GetAmbientParam() const 565 { 566 if ( ! IsAttachedSound() ) return NULL; 567 return &m_pSound->GetAmbientParam(); 568 } 569 570 //--------------------------------------------------------------------------- 571 //! @brief ウェーブサウンドデータの情報を取得します。 572 //! 573 //! ハンドルに関連付けられたサウンドで再生している、 574 //! ウェーブサウンドデータの情報を取得します。 575 //! ハンドルが無効の場合は false を返します。 576 //! 577 //! ウェーブサウンドデータの情報は、 578 //! ウェーブサウンドのプリペア処理が完了するまでは取得することが出来ず、 579 //! その場合は false を返します。 580 //! プリペア処理が完了しているかどうかは @ref IsPrepared で取得できます。 581 //! 582 //! @param[out] info 結果を格納するウェーブサウンドデータ情報構造体 583 //! 584 //! @return ウェーブサウンドデータの情報を取得に成功したら true を、 585 //! 取得に失敗したら false を返します。 586 //! 587 //! @see WaveSoundDataInfo 構造体 588 //! @see IsPrepared 589 //! 590 //! @date 2010/01/22 初版 591 //--------------------------------------------------------------------------- ReadWaveSoundDataInfo(WaveSoundDataInfo * info)592 bool ReadWaveSoundDataInfo( WaveSoundDataInfo* info ) const 593 { 594 if ( ! IsAttachedSound() ) return false; 595 return m_pSound->ReadWaveSoundDataInfo( info ); 596 } 597 598 //--------------------------------------------------------------------------- 599 //! @brief 現在再生中のウェーブサウンドデータの再生位置を取得します。 600 //! 601 //! ハンドルに関連付けられたサウンドで再生している、 602 //! ウェーブサウンドデータの再生位置をサンプル数で取得します。 603 //! ハンドルが無効の場合は、負の値を返します。 604 //! 605 //! @return ウェーブサウンドデータの再生位置をサンプル数で返します。 606 //! 607 //! @date 2010/03/08 返り値の型を変更 (long → s32) 608 //! @date 2010/01/22 初版 609 //--------------------------------------------------------------------------- GetPlaySamplePosition()610 s32 GetPlaySamplePosition() const 611 { 612 if ( ! IsAttachedSound() ) return -1; 613 return m_pSound->GetPlaySamplePosition(); 614 } 615 616 //@} 617 618 // ----------------------------------------------------------------- 619 // 非公開関数 620 621 // ハンドルをサウンドに関連付ける 622 //! @details :private 623 void detail_AttachSoundAsTempHandle( internal::WaveSound* sound ); 624 625 //! @details :private detail_GetAttachedSound()626 internal::WaveSound* detail_GetAttachedSound() { return m_pSound; } 627 628 //! @details :private detail_GetAttachedSound()629 const internal::WaveSound* detail_GetAttachedSound() const { return m_pSound; } 630 631 private: 632 NW_DISALLOW_COPY_AND_ASSIGN( WaveSoundHandle ); 633 634 internal::WaveSound* m_pSound; 635 }; 636 637 } // namespace nw::snd 638 } // namespace nw 639 640 641 #endif /* NW_SND_WAVE_SOUND_HANDLE_H_ */ 642 643