Freigeben über


XAudio2-Rückrufe

XAudio2 kann vom Client bereitgestellte Funktionen aufrufen, um sie asynchron über bestimmte Ereignisse im Audioverarbeitungsthread zu benachrichtigen. Diese Rückrufe können global oder spezifisch für eine bestimmte Quellstimme sein. Um globale Modulrückrufe zu empfangen, muss der Client eine Instanz einer Klasse bereitstellen, die den IXAudio2EngineCallback Schnittstelle beim Initialisieren von XAudio2 implementiert. Um Quellstimmerückrufe zu empfangen, muss der Client beim Erstellen von Quellstimme eine Instanz einer Klasse bereitstellen, die das IXAudio2VoiceCallback Schnittstelle implementiert. Weitere Informationen finden Sie unter IXAudio2EngineCallback- und IXAudio2VoiceCallback-.

Sie müssen Rückrufe sorgfältig implementieren, um Unterbrechungen in der Audiowiedergabe zu vermeiden. Wenn ein Rückruf ausgeführt wird, kann XAudio2 keine Audiodaten generieren. Verzögerungen von mehr als ein paar Millisekunden können zu einem Audioproblem führen. Verzögerungen dieser Art generieren auch die Debuggerausgabe. Dies weist auf potenzielle Leistungsprobleme hin. Rückruffunktionen dürfen mindestens folgendes nicht ausführen:

  • Zugreifen auf die Festplatte oder auf einen anderen dauerhaften Speicher
  • Führen Sie teure oder blockierende API-Aufrufe durch.
  • Synchronisieren mit anderen Teilen von Clientcode
  • Erhebliche CPU-Auslastung erforderlich

Wenn für das Clientdesign ein Rückruf erforderlich ist, um Aktionen wie die zuvor aufgeführten auszulösen, sollte der Rückruf einen anderen Clientthread signalisieren, um die Arbeit auszuführen. Sie können dies mit einem einfachen SetEvent Mechanismus oder komplexeren Mechanismen wie einer nicht blockierenden Befehlswarteschlange tun, die von einem anderen Thread verwendet wird.

IXAudio2EngineCallback

Die IXAudio2EngineCallback Klasse enthält Methoden, die den Client benachrichtigen, wenn bestimmte Ereignisse im XAudio2-Modul auftreten. Diese Methoden sollten vom XAudio2-Client implementiert werden. XAudio2 ruft diese Methoden mithilfe eines vom Client bereitgestellten Schnittstellenzeigers mithilfe der IXAudio2::RegisterForCallbacks-Methode auf. Alle diese Methoden geben voidanstelle eines HRESULT-zurück.

IXAudio2VoiceCallback

Die IXAudio2VoiceCallback Klasse enthält Methoden, die den Client benachrichtigen, wenn bestimmte Ereignisse in einer bestimmten XAudio2-Quellstimme auftreten. XAudio2 ruft diese Methoden mithilfe eines Schnittstellenzeigers auf, der vom Client in IXAudio2::CreateSourceVoicebereitgestellt wird. Wie bei IXAudio2EngineCallback-sollten diese Methoden vom XAudio2-Client implementiert und void anstelle eines HRESULT-zurückgegeben werden.

Wie bereits erwähnt, ist es wichtig, dass die vom Client bereitgestellten Implementierungen dieser Rückrufe so schnell wie möglich zurückgegeben werden, vorzugsweise innerhalb einer Millisekunden. Die Rückrufe werden im Audioverarbeitungsthread ausgeführt, und die gesamte Verarbeitung wird unterbrochen, bis der Rückruf zurückgegeben wird. Eine Verzögerung in einem Rückruf kann leicht zu einem Audioproblem führen.

Rückrufe

XAudio2-Programmierhandbuch

How to: Use Source Voice Callbacks

How to: Use Engine Callbacks

How to: Stream a Sound from Disk