方法 : ソース ボイスのコールバックの使用
ソース ボイスを作成すると、特定のオーディオ イベントに対するコールバックを定義する構造体がソース ボイスに渡されます。これらのコールバックは、アクションの実行またはその他のコードの通知に使用されます。
ソース ボイスのコールバックを使用するには
次の手順は、サウンドの再生が終了することを通知するコールバックを使用して、サウンドを再生します。
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) { } };
パラメーターとして先に作成したコールバック クラスのインスタンスを使用してソース ボイスを作成します。
VoiceCallback voiceCallback;
if( FAILED(hr = pXaudio2->CreateSourceVoice( &pSourceVoice, (WAVEFORMATEX*)&wfx, 0, XAUDIO2_DEFAULT_FREQ_RATIO, &voiceCallback, NULL, NULL ) ) ) return;
ボイスの開始後、WaitForSingleObject メソッドを使用して、イベントがトリガーされるのを待機します。
WaitForSingleObject( voiceCallback.hBufferEndEvent, INFINITE );
関連トピック
- XAudio2 のコールバック
XAudio2 のコールバックの概要を説明します。
- XAudio2 の概要
XAudio2 の概要を説明します。
- 方法 : 基本的なオーディオ処理グラフの作成
XAudio2 でサウンドを再生するために必要となる最小限のセットアップについて説明します。
- 方法 : ディスクからのサウンドのストリーム
ディスクからのオーディオ データの再生でコールバックを使用する方法を説明します。