共用方式為


使用方法:使用來源聲音回呼

當您建立來源語音時,您可以將結構傳遞給它,以定義特定音訊事件的回呼。 您可以使用這些回呼來執行動作,或發出其他程式碼的訊號。

  1. 建立繼承自 IXAudio2VoiceCallback 介面的類別。 IXAudio2VoiceCallback的所有成員函式都是純虛擬的,而且必須定義。 此範例中唯一感興趣的函式是 OnStreamEnd。 因此,其餘函式是存根。 OnStreamEnd函式會觸發事件,指出音效現正播放。

    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. 使用先前建立為 pCallback 參數的回呼類別實例,使用IXAudio2::CreateSourceVoice建立來源語音

    VoiceCallback voiceCallback;
    if( FAILED(hr = pXaudio2->CreateSourceVoice( &pSourceVoice, (WAVEFORMATEX*)&wfx,
                                 0, XAUDIO2_DEFAULT_FREQ_RATIO, &voiceCallback, NULL, NULL ) ) ) return;
    
  3. 啟動語音之後,請使用 WaitForSingleObjectEx 方法來等候觸發事件。

    WaitForSingleObjectEx( voiceCallback.hBufferEndEvent, INFINITE, TRUE );
    

回撥

XAudio2 回呼

XAudio2 程式設計指南

使用方法:建立基本音訊處理圖形

使用方法:從磁碟串流處理音效