共用方式為


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 程式設計手冊

如何:使用來源語音回呼

如何:使用引擎回呼

如何:從磁碟串流音效