特定のサウンドの現在の再生位置に関する情報をサウンドエンジンが必要とする場合があります。例えば、同期的にビデオおよびオーディオコンテンツのレンダリングをサポートするゲームでは、適切にゲームのビジュアルをレンダリングするために、サウンドの再生位置クエリが必要とされます。これが(口の動きとダイアログを同期させるためなど)フレームごとに実行されなければならない場合、マーカーより再生位置クエリのほうが有利です。再生位置クエリのもう1つの利点は、ソースファイルの編集が必要ないということです。AKSoundEngine::GetSourcePlayPosition() メソッドは、イベントの最初のサウンド再生時に経過時間を返します。
|
Note: マーカーは、小刻みのサウンド再生ではなくサウンドファイル内で発生している特定のイベントをシグナリングするのに有用です。 |
ソースの再生位置をクエリするには、 AK_EnableGetSourcePlayPosition フラグを AK::SoundEngine::PostEvent() メソッドに渡す必要があります。これにより、AKSoundEngine::GetSourcePlayPosition() がこの AkPlayingID のために常時呼び出される可能性があるため、このイベントに関連付けられているソースには特別な配慮が必要であることがサウンドエンジンに通知されます。
続いて、再生されているソースの現在の再生位置を取得するために、AKSoundEngine::PostEvent() への呼び出しにより受け取った AkPlayingID を渡して、AKSoundEngine::GetSourcePlayPosition() メソッドを呼び出すことができます。
以下のコードは、AKSoundEngine::GetSourcePlayPosition() メソッドの使用法を示しています:
(...) static AkPlayingID g_markersPlayingID = 0; (...) (...) g_markersPlayingID = AK::SoundEngine::PostEvent( AK::EVENTS::PLAY_MARKERS_TEST, GAME_OBJECT_ID_MARKERS, AK_EnableGetSourcePlayPosition, NULL, NULL ); (...) AkTimeMs uPosition = 0; // Somewhere in your game loop (happens periodically): AK::SoundEngine::GetSourcePlayPosition( g_markersPlayingID, &uPosition ); // Now handle lip synchronization by using uPosition