In certain circumstances, the game engine requires information about the current playback position of a particular sound. For example, games that support rendering video and audio contents in a synchronous manner must query the playback position of sounds to render game visuals appropriately. If this has to be done on a frame-by-frame basis (such as to synchronize lip movement and dialog), then playback position queries are preferable over markers. Another advantage of playback position queries is that the source files do not need to be edited. The AK::SoundEngine::GetSourcePlayPosition() method returns the time elapsed on an event's first sound playback.
|
Note: Markers are useful for signalling specific events happening in a sound file, as opposed to small increments in sound playback. |
To be able to query the playback position of a source, you must pass the AK_EnableGetSourcePlayPosition flag to the AK::SoundEngine::PostEvent() method. This informs the sound engine that the source associated with this event should be given special consideration because AK::SoundEngine::GetSourcePlayPosition() can be called at any time for this AkPlayingID.
You can then call the AK::SoundEngine::GetSourcePlayPosition() method by passing the AkPlayingID received from the call to AK::SoundEngine::PostEvent() to get the current playback position of the source being played.
The following piece of code illustrates the AK::SoundEngine::GetSourcePlayPosition() method's usage:
(...) 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
프로젝트를 등록하세요. 아무런 조건이나 의무 사항 없이 빠른 시작을 도와드리겠습니다.
Wwise를 시작해 보세요