Compartir a través de


Depurar problemas de audio en XAudio2

Los problemas pueden producirse en XAudio2, en este tema se explica cómo se notifican y algunos enfoques para corregirlos.

En esta introducción se tratan los temas siguientes:

Causas de problemas o problemas de salida de audio

Los problemas pueden producirse en la salida XAudio2 por varias razones.

  • Una voz de origen XAudio2 está muerta. El cliente no envía audio fresco a él lo suficientemente rápido. Tienes silencio porque no tiene datos para jugar.
  • XAudio2 en su conjunto está sobrecargado. Se tarda más de X ms en generar X ms de audio. Obtiene las listas desplegables porque XAudio2 no puede generar datos tan rápido como el dispositivo de audio lo necesita. Es posible que esté ejecutando demasiadas voces o efectos a la vez, haciendo demasiado trabajo en devoluciones de llamada XAudio2 o realizando llamadas API de XAudio2 con demasiada frecuencia.
  • El subproceso de procesamiento de audio se detiene porque la implementación del cliente de alguna devolución de llamada XAudio2 está haciendo cosas que pueden bloquear el subproceso. Por ejemplo, podría estar accediendo al disco, sincronizarse con otros subprocesos o llamar a otras funciones que pueden bloquearse. Use un subproceso en segundo plano de prioridad inferior que la devolución de llamada pueda indicar para realizar estas tareas.
  • El sistema en su conjunto está sobrecargado. Otros subprocesos que se ejecutan con la misma prioridad o mayor que XAudio2 están haciendo demasiado trabajo. Compiten con el subproceso de audio durante el tiempo de CPU.

Cómo XAudio2 informa de problemas

XAudio2 puede comunicar problemas en la compilación de depuración de varias maneras.

  • Si se está muriendo de hambre una voz, XAudio2 muestra un mensaje en este formato.

    XAudio2: WARNING: Voice at 0xNNNNNNNN starved: no more source buffers are available, but no end-of-stream marker was received
    
  • Si el subproceso de audio se ejecuta durante demasiado tiempo, XAudio2 muestra un mensaje en este formulario.

    XAudio2: WARNING: Spent Xms in audio thread; XAudio2 possibly overloaded
    

    Normalmente, este mensaje se produce con el siguiente mensaje.

  • Si el controlador de audio no se puede alimentar nuevos datos de audio a tiempo, XAudio2 muestra un mensaje en este formulario.

    XAudio2: WARNING: Glitch at output sample X
    
  • La llamada a IXAudio2::GetPerformanceData proporciona datos de rendimiento de XAudio2, incluido el número total de problemas desde que se inició el motor XAudio2.

Enfoques para solucionar problemas

Entre las posibles formas de reducir los problemas de audio se incluyen las siguientes.

  • En el caso de hambre de voz: aumente la cantidad de datos de audio que se ponen delante en una voz. Puede usar IXAudio2SourceVoice::GetState para detectar el número de búferes en cola en cualquier momento. Si sigue viendo errores de hambre de voz, pero no puede oír ningún problema, asegúrese de que está estableciendo XAUDIO2_BUFFER. Marcas para XAUDIO2_END_OF_STREAM en el búfer final de un sonido. Esto indica a XAudio2 que no espere que haya más búferes necesariamente disponibles en cuanto se complete este.

    En los otros casos:

    • Reduzca el número de voces activas y efectos en el gráfico, especialmente efectos costosos como reverberación.
    • Deshabilite las voces y los efectos que no esté usando.
    • Use las marcas XAUDIO2_VOICE_NOSRC y XAUDIO2_VOICE_NOPITCH en IXAudio2::CreateSourceVoice siempre que sea posible. La conversión de frecuencia de muestreo es costosa.
    • Reduzca la frecuencia de muestreo de voces individuales. Por ejemplo, una voz de submezcla que hospeda un efecto de reverberación puede tener una frecuencia de muestreo menor que la voz de origen que la envía. Los sonidos como explosiones y disparos que no necesitan alta fidelidad también se pueden grabar a velocidades de muestreo más bajas.
    • Asegúrese de que las implementaciones de devolución de llamada realizan el menor trabajo posible y nunca se bloquean.
    • Realice menos llamadas a XAudio2. Normalmente, los parámetros de audio no necesitan actualizarse para cada fotograma de vídeo. Cada 30 ms o así es suficiente. Debe eliminar las llamadas redundantes, como establecer el volumen varias veces en sucesión rápida.
    • Reduzca el uso general de la CPU del juego.

Depuración de instalaciones

Referencia de programación de XAudio2