版本

menu_open
Wwise SDK 2021.1.14
集成详情——GetSourcePlayPosition

简介

在特定情况下,游戏引擎需要有关声音当前播放位置的信息。例如,支持同步渲染视频和音频内容的游戏必须查询声音的播放位置才能正确地渲染游戏画面。如果必须逐帧查询(例如对口型和对白同步),那么播放位置查询比标记(marker)要更适合。播放位置查询的另一大优势是无需编辑源文件。AK::SoundEngine::GetSourcePlayPosition() 返回事件的第一次声音播放所使用的时间。

备注: 标记适用于表明"声音文件"中发生的事件,而非"声音播放"时的小步渐进。

集成

为了能够查询源的播放位置,您必须把 AK_EnableGetSourcePlayPosition 标志传递到 AK::SoundEngine::PostEvent() 方法。这告诉声音引擎应特别考虑与此事件相关联的源,因为可能会随时为此 AkPlayingID 调用 AK::SoundEngine::GetSourcePlayPosition()

然后您可以通过传递在调用 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,
(...)
AkTimeMs uPosition = 0;
// 在游戏循环中某个位置(周期性发生):
AK::SoundEngine::GetSourcePlayPosition( g_markersPlayingID, &uPosition );
// 现在通过使用 uPosition 进行对嘴形

限制

  • 当事件包含多个播放动作时,GetSourcePlayPosition() 返回在时间 0 时发生的第一个播放动作的目标所播放的第一个源的位置。 当此源停止时,其返回的播放位置将为未定义。
  • 连续(随机或序列)容器返回当前正在播放的声音的位置。当有许多声音时,其返回的播放位置将为未定义。 在交叉淡变或精确到采样点的过渡中,只有当上一个源完成播放时下一个源才会返回它的位置。
  • 当结合外插法使用时,循环播放源可能会在循环发生时短暂超出循环结束点。
  • 当优先级低于特定阈值时,某些虚声部会被终止。发生这种情况时,您可能会从 AK::SoundEngine::GetSourcePlayPosition() 收到错误码。在调用 AK::SoundEngine::GetSourcePlayPosition() 时应总是检查返回值。
  • 动态更改音高可能导致在过渡期间播放位置出现短暂轻微偏移。
参见
AkInt32 AkTimeMs
Time in ms
Definition: AkTypes.h:66
#define NULL
Definition: AkTypes.h:47
@ AK_EnableGetSourcePlayPosition
Enable play position information for use by AK::SoundEngine::GetSourcePlayPosition().
Definition: AkCallback.h:76
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)
AkUInt32 AkPlayingID
Playing ID
Definition: AkTypes.h:65

此页面对您是否有帮助?

需要技术支持?

仍有疑问?或者问题?需要更多信息?欢迎联系我们,我们可以提供帮助!

查看我们的“技术支持”页面

介绍一下自己的项目。我们会竭力为您提供帮助。

来注册自己的项目,我们帮您快速入门,不带任何附加条件!

开始 Wwise 之旅