方法 : XAudio2 によるサウンドの再生
ここでは、XAudio2 のサウンドを再生するのに必要な最小限の手順を示します。XAudio2 を初期化した後、サウンド ボイスを作成し、それをオーディオ データに渡すことで、サウンドを再生できます。
サウンドを再生するには
XAudio2 エンジンを初期化するには、「方法 : XAudio2 の初期化」または「方法 : オーディオ デバイスの列挙」で説明されている手順に従ってください。
オーディオ データ フォーマットに応じて、WAVEFORMATEX 構造体、または WAVEFORMATEX 構造体を含む拡張されたフォーマットの構造体に値を入力します。
有効な構造体の詳細については、WAVEFORMATEX のリファレンス ページの表を参照してください。通常これらの構造体には、オーディオ ファイルの「fmt」チャンクからデータをロードすることで、データが入力されます。XAudio2 で RIFF ファイルからデータを解析およびロードする例については、「XAudio2 BasicSound サンプル」のサンプルを参照してください。
WAVEFORMATEXTENSIBLE wfx = {0};
FindChunk(hFile,'fmt ', dwChunkSize, dwChunkPosition ); ReadChunkData(hFile, &wfx, dwChunkSize, dwChunkPosition );
XAudio2 エンジンのインスタンス上にある IXAudio2::CreateSourceVoice メソッドを呼び出して、ソース ボイスを作成します。
IXAudio2SourceVoice* pSourceVoice; if( FAILED(hr = pXaudio2->CreateSourceVoice( &pSourceVoice, (WAVEFORMATEX*)&wfx, 0, XAUDIO2_DEFAULT_FREQ_RATIO, NULL, NULL, NULL ) ) ) return hr;
データを XAUDIO2_BUFFER 構造体に入力します。
XAUDIO2_BUFFER buffer = {0};
buffer.AudioBytes = dwChunkSize; //buffer containing audio data buffer.pAudioData = pDataBuffer; //size of the audio buffer in bytes buffer.Flags = XAUDIO2_END_OF_STREAM; // tell the source voice not to expect any data after this buffer
注 アプリケーションは、XAudio2 で使用できる形式でオーディオ データを提供します。XAudio2 は、オーディオ データを読み込むメソッドを提供しません。XAudio2 でサポートされている形式については、「サポートされるオーディオ形式」を参照してください。
関数 SubmitSourceBuffer を使用して XAUDIO2_BUFFER をソース ボイスに送信します。
if( FAILED(hr = pSourceVoice->SubmitSourceBuffer( &buffer ) ) ) return hr;
Start 関数を使用してソース ボイスを開始します。
既定では、すべての XAudio2 ボイスがその出力をマスター ボイスへ送信するので、ソース ボイスからのオーディオは、初期化時に選択されたオーディオ デバイスに自動的に送信されます。より複雑なオーディオ グラフでは、ソース ボイスは出力の送信先のボイスを指定する必要があります。
if ( FAILED(hr = pSourceVoice->Start( 0, XAUDIO2_COMMIT_NOW ) ) ) return hr;
関連トピック
- XAudio2 の基本的な情報
主要な XAudio2 の概念の概要を説明します。
- 方法 : XAudio2 の初期化
XAudio2 を初期化するのに必要な最小限の手順を示します。
- 方法 : オーディオ デバイスの列挙
特定のオーディオ デバイスをシステム上で使用して XAudio2 を初期化する方法を示します。