Devoluciones de llamadas de XAudio2

XAudio2 puede llamar a funciones proporcionadas por el cliente para notificarle de forma asincrónica ciertos eventos que tienen lugar en el subproceso de procesamiento de audio. Estas devoluciones de llamada pueden ser globales o específicas de una voz de origen determinada. Para recibir devoluciones de llamada del motor global, el cliente debe proporcionar una instancia de una clase que implemente la interfaz IXAudio2EngineCallback al inicializar XAudio2. Para recibir devoluciones de llamada de voz de origen, el cliente debe proporcionar una instancia de una clase que implemente la interfaz IXAudio2VoiceCallback al crear voces de origen. Para obtener más información, consulte IXAudio2EngineCallback y IXAudio2VoiceCallback.

Debe implementar las devoluciones de llamada cuidadosamente para evitar que se produzcan interrupciones en el audio. Cada vez que se ejecuta una devolución de llamada, XAudio2 no puede generar ningún audio. Los retrasos de más de unos milisegundos pueden causar un problema de audio. Los retrasos de esta naturaleza también generan la salida del depurador. Esto indica posibles problemas de rendimiento. Como mínimo, las funciones de devolución de llamada no deben hacer lo siguiente:

  • Acceso al disco duro u otro almacenamiento permanente
  • Realizar llamadas API costosas o bloqueadas
  • Sincronización con otras partes del código de cliente
  • Requerir un uso significativo de la CPU

Si el diseño del cliente requiere una devolución de llamada para desencadenar acciones como las enumeradas anteriormente, la devolución de llamada debe indicar un subproceso de cliente diferente para realizar el trabajo. Puede hacerlo con un mecanismo SetEvent simple o mecanismos más sofisticados, como una cola de comandos de bloqueo que consume otro subproceso.

IXAudio2EngineCallback

La clase IXAudio2EngineCallback contiene métodos que notifican al cliente cuándo se producen determinados eventos en el motor XAudio2. El cliente XAudio2 debe implementar estos métodos. XAudio2 llama a estos métodos mediante un puntero de interfaz proporcionado por el cliente mediante el método IXAudio2::RegisterForCallbacks . Todos estos métodos devuelven void, en lugar de hrESULT.

IXAudio2VoiceCallback

La clase IXAudio2VoiceCallback contiene métodos que notifican al cliente cuándo se producen determinados eventos en una voz de origen XAudio2 específica. XAudio2 llama a estos métodos mediante un puntero de interfaz proporcionado por el cliente en IXAudio2::CreateSourceVoice. Al igual que con IXAudio2EngineCallback, el cliente XAudio2 debe implementar estos métodos y devolver void en lugar de HRESULT.

Como se mencionó anteriormente, es fundamental que las implementaciones proporcionadas por el cliente de estas devoluciones de llamada devuelvan lo más rápido posible, preferiblemente dentro de un milisegundo. Las devoluciones de llamada se ejecutan en el subproceso de procesamiento de audio y todo el procesamiento se interrumpe hasta que se devuelve la devolución de llamada. Un retraso en una devolución de llamada puede causar fácilmente un problema de audio.

Devoluciones de llamada

Guía de programación de XAudio2

Cómo: usar devoluciones de llamadas de voces de origen

Cómo: usar devoluciones de llamadas de motores

Cómo: transmitir un sonido de un disco