Como: Usar retornos de chamadas de voz de origem

Ao criar uma voz de origem, você pode passar uma estrutura para ela que define retornos de chamada para determinados eventos de áudio. Você pode usar esses retornos de chamada para executar ações ou para sinalizar outro código.

  1. Crie uma classe que herde da interface IXAudio2VoiceCallback . Todas as funções membro de IXAudio2VoiceCallback são puramente virtuais e devem ser definidas. A única função de interesse neste exemplo é OnStreamEnd. Portanto, o restante das funções são stubs. A função OnStreamEnd dispara um evento que indica que o som terminou de ser reproduzido.

    class VoiceCallback : public IXAudio2VoiceCallback
    {
    public:
        HANDLE hBufferEndEvent;
        VoiceCallback(): hBufferEndEvent( CreateEvent( NULL, FALSE, FALSE, NULL ) ){}
        ~VoiceCallback(){ CloseHandle( hBufferEndEvent ); }
    
        //Called when the voice has just finished playing a contiguous audio stream.
        void OnStreamEnd() { SetEvent( hBufferEndEvent ); }
    
        //Unused methods are stubs
        void OnVoiceProcessingPassEnd() { }
        void OnVoiceProcessingPassStart(UINT32 SamplesRequired) {    }
        void OnBufferEnd(void * pBufferContext)    { }
        void OnBufferStart(void * pBufferContext) {    }
        void OnLoopEnd(void * pBufferContext) {    }
        void OnVoiceError(void * pBufferContext, HRESULT Error) { }
    };
    
  2. Crie uma voz de origem com IXAudio2::CreateSourceVoice usando uma instância da classe de retorno de chamada criada anteriormente como o parâmetro pCallback.

    VoiceCallback voiceCallback;
    if( FAILED(hr = pXaudio2->CreateSourceVoice( &pSourceVoice, (WAVEFORMATEX*)&wfx,
                                 0, XAUDIO2_DEFAULT_FREQ_RATIO, &voiceCallback, NULL, NULL ) ) ) return;
    
  3. Depois de iniciar a voz, use o método WaitForSingleObjectEx para aguardar o evento ser disparado.

    WaitForSingleObjectEx( voiceCallback.hBufferEndEvent, INFINITE, TRUE );
    

Retornos de chamada

Retorno de chamadas XAudio2

Guia de Programação em XAudio2

Como: Compilar um gráfico de processamento de áudio básico

Como: Fazer o streaming de um som do disco