Compartilhar via


Como: Reproduzir um som com o XAudio2

Este tópico descreve as etapas mínimas necessárias para reproduzir dados de áudio carregados anteriormente no XAudio2. Depois de inicializar o XAudio2 (consulte Como inicializar o XAudio2) e carregar os dados de áudio (consulte Como carregar arquivos de dados de áudio no XAudio2), você pode reproduzir um som criando uma voz de origem e passando dados de áudio para ele.

Para tocar um som

  1. Inicialize o mecanismo XAudio2 seguindo as etapas descritas em Como inicializar o XAudio2.

  2. Preencha uma estrutura WAVEFORMATEX e XAUDIO2_BUFFER seguindo as etapas descritas em Como carregar arquivos de dados de áudio no XAudio2.

    Observação

    Dependendo do formato dos dados de áudio, talvez seja necessário usar uma estrutura de dados maior que contenha uma estrutura WAVEFORMATEX no lugar de um WAVEFORMATEX. Consulte a página de referência WAVEFORMATEX para obter mais informações.

     

  3. Crie uma voz de origem chamando o método IXAudio2::CreateSourceVoice em uma instância do mecanismo XAudio2. O formato da voz é especificado pelos valores definidos em uma estrutura WAVEFORMATEX .

    IXAudio2SourceVoice* pSourceVoice;
    if( FAILED(hr = pXAudio2->CreateSourceVoice( &pSourceVoice, (WAVEFORMATEX*)&wfx ) ) ) return hr;
    
  4. Envie um XAUDIO2_BUFFER para a voz de origem usando a função SubmitSourceBuffer.

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

    Observação

    Os dados de exemplo de áudio para os quais os pontos de buffer ainda são "de propriedade" do aplicativo e devem permanecer alocados e acessíveis até que o som pare de ser reproduzido.

     

  5. Use a função Start para iniciar a voz de origem. Como todas as vozes XAudio2 enviam sua saída para a voz de masterização por padrão, o áudio da voz de origem automaticamente chega ao dispositivo de áudio selecionado na inicialização. Em um grafo de áudio mais complicado, a voz de origem teria que especificar a voz para a qual sua saída deve ser enviada.

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

Anotações para aplicativos da Windows Store

Recomendamos que você use um ponteiro inteligente para gerenciar o tempo de vida dos objetos XAUDIO2 de maneira segura de exceção. Para aplicativos da Windows Store, você pode usar o modelo de ponteiro inteligente ComPtr da WRL (Biblioteca de Modelos do Windows Runtime C++).

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);

Observação

Certifique-se de que todos os ponteiros inteligentes para objetos XAUDIO2 sejam totalmente liberados antes de liberar o objeto IXAudio2 .

 

XAudio2 Introdução

Como: Inicializar o XAudio2

Como: Carregar arquivos de dados de áudio no XAudio2