Cómo: 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 (vea How to: Initialize XAudio2) and load the audio data (see How to: How to: Load Audio Data Files in XAudio2), you can play a sound by creating a source voice and passing audio data to it.

Para reproducir un sonido

  1. Inicialice el motor XAudio2 siguiendo los pasos descritos en Cómo: Inicializar XAudio2.

  2. Rellene una estructura WAVEFORMATEX y XAUDIO2_BUFFER siguiendo los pasos descritos en Cómo: Cargar archivos de datos de audio en XAudio2.

    Nota

    Dependiendo del formato de los datos de audio, es posible que tenga que usar una estructura de datos más grande que contenga una estructura WAVEFORMATEX en lugar de waveFORMATEX. Consulte la página de referencia WAVEFORMATEX para obtener más información.

     

  3. Cree una voz de origen llamando al método IXAudio2::CreateSourceVoice en una instancia del motor XAudio2. El formato de la voz se especifica mediante los valores establecidos en una estructura WAVEFORMATEX .

    IXAudio2SourceVoice* pSourceVoice;
    if( FAILED(hr = pXAudio2->CreateSourceVoice( &pSourceVoice, (WAVEFORMATEX*)&wfx ) ) ) return hr;
    
  4. Envíe un XAUDIO2_BUFFER a la voz de origen mediante la función SubmitSourceBuffer.

    if( FAILED(hr = pSourceVoice->SubmitSourceBuffer( &buffer ) ) )
        return hr;
    

    Nota

    Los datos de muestra de audio a los que los puntos de búfer siguen siendo 'propiedad' de la aplicación y deben permanecer asignados y accesibles hasta que el sonido deje de reproducirse.

     

  5. Use la función Start para iniciar la voz de origen. Dado que todas las voces XAudio2 envían su salida a la voz de maestro de forma predeterminada, el audio de la voz de origen hace automáticamente su camino al dispositivo de audio seleccionado en la inicialización. En un grafo de audio más complicado, la voz de origen tendría que especificar la voz a la que se debe enviar su salida.

    if ( FAILED(hr = pSourceVoice->Start( 0 ) ) )
        return hr;
    

Notas de las aplicaciones de la Tienda Windows

Se recomienda usar un puntero inteligente para administrar la duración de los objetos XAUDIO2 de forma segura de excepciones. Para las aplicaciones de la Tienda Windows, puedes usar la plantilla de puntero inteligente ComPtr de la biblioteca de plantillas de C++ de Windows Runtime (WRL).

Microsoft::WRL::ComPtr<IXAudio2SourceVoice> SourceVoice;
HRESULT hr;
if( FAILED(hr = pXAudio2->CreateSourceVoice( &SourceVoice, (WAVEFORMATEX*)&wfx ) ) )
    throw Platform::Exception::CreateException(hr); 

if( FAILED(hr = SourceVoice->SubmitSourceBuffer( &buffer ) ) )
    throw Platform::Exception::CreateException(hr); 

if ( FAILED(hr = SourceVoice->Start( 0 ) ) )
    throw Platform::Exception::CreateException(hr);

Nota

Asegúrese de que todos los punteros inteligentes a objetos XAUDIO2 estén totalmente liberados antes de liberar el objeto IXAudio2 .

 

XAudio2 Introducción

Cómo: inicializar XAudio2

Cómo: cargar archivos de datos de audio en XAudio2