バージョン

menu_open
Wwise SDK 2019.1.11
統合の詳細 - GetSourcePlayPosition

イントロダクション

特定のサウンドの現在の再生位置に関する情報をサウンドエンジンが必要とする場合があります。例えば、同期的にビデオおよびオーディオコンテンツのレンダリングをサポートするゲームでは、適切にゲームのビジュアルをレンダリングするために、サウンドの再生位置クエリが必要とされます。これが(口の動きとダイアログを同期させるためなど)フレームごとに実行されなければならない場合、マーカーより再生位置クエリのほうが有利です。再生位置クエリのもう1つの利点は、ソースファイルの編集が必要ないということです。AK::SoundEngine::GetSourcePlayPosition() メソッドは、イベントの最初のサウンド再生時に経過時間を返します。

注釈: マーカーは、小刻みのサウンド再生ではなくサウンドファイル内で発生している特定のイベントをシグナリングするのに有用です。

統合

ソースの再生位置をクエリするには、 AK_EnableGetSourcePlayPosition フラグを AK::SoundEngine::PostEvent() メソッドに渡す必要があります。これにより、AK::SoundEngine::GetSourcePlayPosition() がこの AkPlayingID のために常時呼び出される可能性があるため、このイベントに関連付けられているソースには特別な配慮が必要であることがサウンドエンジンに通知されます。

続いて、再生されているソースの現在の再生位置を取得するために、AK::SoundEngine::PostEvent() への呼び出しにより受け取った AkPlayingID を渡して、AK::SoundEngine::GetSourcePlayPosition() メソッドを呼び出すことができます。

以下のコードは、AK::SoundEngine::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

制限

  • イベントに複数の再生アクションが含まれている場合、GetSourcePlayPosition() は、時点0で発生する最初の再生アクションの対象により最初に再生されるソースの位置を返します。 このソースが停止している時は、返される位置のソースは未定義です。
  • 連続する(ランダムまたはシーケンス)コンテナは現在再生中のサウンド位置を返します。サウンドが多数ある場合、位置が返されるソースは未定義です。 クロスフェードまたはサンプルアキュレートなトランジションでは、先のソースが再生終了した場合のみ次のソースがその位置を返します。
  • 外挿と一緒に使用すると、ループ発生時に、ループするソースがループエンドを短時間オーバーシュートする可能性があります。
  • そのプライオリティが特定のしきい値を下回るとバーチャルボイスがキルされる場合があります。これが発生した場合、AK::SoundEngine::GetSourcePlayPosition() からエラーコードを受け取る可能性があります。AK::SoundEngine::GetSourcePlayPosition() を呼び出す場合は、必ず戻り値をチェックする必要があります。
  • ピッチの動的な変化は、トランジション時に若干のオフセット再生位置を短時間生じさせる可能性があります。
参照
AKSOUNDENGINE_API AKRESULT GetSourcePlayPosition(AkPlayingID in_PlayingID, AkTimeMs *out_puPosition, bool in_bExtrapolate=true)
AKSOUNDENGINE_API AkPlayingID PostEvent(AkUniqueID in_eventID, AkGameObjectID in_gameObjectID, AkUInt32 in_uFlags=0, AkCallbackFunc in_pfnCallback=NULL, void *in_pCookie=NULL, AkUInt32 in_cExternals=0, AkExternalSourceInfo *in_pExternalSources=NULL, AkPlayingID in_PlayingID=AK_INVALID_PLAYING_ID)

このページはお役に立ちましたか?

サポートは必要ですか?

ご質問や問題、ご不明点はございますか?お気軽にお問い合わせください。

サポートページをご確認ください

あなたのプロジェクトについて教えてください。ご不明な点はありませんか。

プロジェクトを登録していただくことで、ご利用開始のサポートをいたします。

Wwiseからはじめよう