共用方式為


XAudio2 回呼

XAudio2 可以呼叫用戶端所提供的函式,以非同步方式通知在音訊處理執行緒中發生的特定事件。 這些回呼可以是特定來源語音的全域或特定回呼。 若要接收全域引擎回呼,用戶端必須在初始化 XAudio2 時提供實作 IXAudio2EngineCallback 介面的類別實例。 若要接收來源語音回呼,用戶端必須在建立來源語音時提供實作 IXAudio2VoiceCallback 介面的類別實例。 如需詳細資訊,請參閱 IXAudio2EngineCallbackIXAudio2VoiceCallback

您必須仔細實作回呼,以避免造成音訊中斷。 每當回呼執行時,XAudio2 都無法產生任何音訊。 延遲超過幾毫秒可能會導致音訊問題。 這種本質的延遲也會產生偵錯工具輸出。 這表示潛在的效能問題。 回呼函式至少不能執行下列動作:

  • 存取硬碟或其他永久儲存體
  • 進行昂貴或封鎖 API 呼叫
  • 與用戶端程式代碼的其他部分同步處理
  • 需要大量 CPU 使用量

如果用戶端設計需要回呼來觸發如先前所列的動作,回呼應該會發出不同的用戶端執行緒來執行工作。 您可以使用簡單的 SetEvent 機制或更複雜的機制來執行此動作,例如另一個執行緒所取用的非封鎖命令佇列。

IXAudio2EngineCallback

IXAudio2EngineCallback類別包含方法,可在 XAudio2 引擎中發生特定事件時通知用戶端。 XAudio2 用戶端應該實作這些方法。 XAudio2 會使用 IXAudio2::RegisterForCallbacks 方法,透過用戶端提供的介面指標來呼叫這些方法。 所有這些方法都會傳回 void,而不是 HRESULT

IXAudio2VoiceCallback

IXAudio2VoiceCallback類別包含方法,可在特定 XAudio2 來源語音中發生特定事件時通知用戶端。 XAudio2 會透過 IXAudio2::CreateSourceVoice中用戶端提供的介面指標來呼叫這些方法。 如同 IXAudio2EngineCallback,XAudio2 用戶端應該實作這些方法,並傳回 void 而不是 HRESULT

如先前所述,用戶端提供的這些回呼實作會儘快傳回,最好在毫秒內傳回。 回呼會在音訊處理執行緒中執行,而且所有處理都會中斷,直到回呼傳回為止。 回呼中的延遲可以輕鬆地造成音訊問題。

回撥

XAudio2 程式設計指南

使用方法:使用來源聲音回呼

使用方法:使用引擎回呼

使用方法:從磁碟串流處理音效