Compartir a través de


Tutorial: Reproducir un sonido con XAudio2

En este tema se describen los pasos mínimos necesarios para reproducir datos de audio cargados previamente en XAudio2.

Después de inicializar XAudio2 (consulte Tutorial: Inicializar XAudio2) y cargar los datos de audio (consulte Tutorial: Cargar archivos de datos de audio en XAudio2), puede reproducir un sonido creando una voz de origen y pasando los datos de audio a esta.

Cómo reproducir un sonido

  1. En primer lugar, inicialice XAudio2 para la reproducción de audio siguiendo el procedimiento indicado en Tutorial: Inicializar XAudio2.

  2. Luego, rellene una estructura WAVEFORMATEX y un estructura XAUDIO2_BUFFER siguiendo los pasos descritos en Tutorial: Cargar archivos de datos de audio en XAudio2.

    Nota:

    Según el formato de los datos de audio, es posible que tenga que usar una estructura de datos más grande (una que contenga una estructura WAVEFORMATEX) en lugar de una WAVEFORMATEX. Para obtener más información, consulte el tema WAVEFORMATEX.

  3. Tras esto, para crear lo que se conoce como voz de origen, llame al método IXAudio2::CreateSourceVoice. Eso le dará un puntero a una interfaz IXAudio2SourceVoice. El formato de la voz se indica mediante los valores establecidos en la estructura WAVEFORMATEX.

    IXAudio2SourceVoice* m_pXAudio2SourceVoice{};
    ...
    winrt::check_hresult(m_xAudio2->CreateSourceVoice(&m_pXAudio2SourceVoice, (WAVEFORMATEX*)&wfx)));    
    
  4. Envíe un XAUDIO2_BUFFER a la voz de origen llamando al método IXAudio2SourceVoice::SubmitSourceBuffer.

    winrt::check_hresult(m_pXAudio2SourceVoice->SubmitSourceBuffer(&xAudio2Buffer));
    

    Nota:

    Los datos de la muestra de audio a los que apunta el parámetro pBuffer de SubmitSourceBuffer siguen perteneciendo a la aplicación y deben permanecer asignados y accesibles hasta que el sonido deje de reproducirse.

  5. Para iniciar la voz de origen, llame al método IXAudio2SourceVoice::Start. Como todas las voces de XAudio2 envían la salida a la voz maestra de forma predeterminada, el audio de la voz de origen hace su ruta automáticamente al dispositivo de audio que se creó o seleccionó en la inicialización. En una gráfica de audio más compleja, la voz de origen tendría que indicar a qué voz se debe enviar la salida.

    winrt::check_hresult(m_pXAudio2SourceVoice->Start(0));
    

Punteros inteligentes

Para tener mayor seguridad y sea más cómodo, puede usar un puntero inteligente para la interfaz IXAudio2. Sin embargo, las interfaces de voz (como IXAudio2MasteringVoice) no tienen un método Release, por lo que verá un error de compilación si intenta usar un puntero inteligente para ellas. En estos fragmentos de código usamos un puntero inteligente siempre que sea posible y un puntero sin procesar cuando sea necesario.