方法 : 基本的なオーディオ処理グラフの作成
XAudio2 でオーディオ データを再生できるようにするための最小要件は、単一マスター ボイスおよび単一ソース ボイスで構成されたオーディオ処理グラフです。
基本的なオーディオ処理グラフを作成するには
XAudio2Create 関数を使用して XAudio2 デバイスを作成します。
IXAudio2* pXAudio2 = NULL;
if ( FAILED(hr = XAudio2Create( &pXAudio2, 0, XAUDIO2_DEFAULT_PROCESSOR ) ) ) return hr;
Windows: Windows の場合は、XAudio2Create を呼び出す前にアプリケーションで CoInitializeEx メソッドを呼び出す必要があります。さらに、COM のルールは、XAudio2 への呼び出しを実行するすべてのスレッドで CoInitialize または CoInitializeEx を呼び出す必要があります。
CoInitializeEx(NULL, COINIT_MULTITHREADED);
CreateMasteringVoice 関数を使用して、マスター ボイスを作成します。
IXAudio2MasteringVoice* pMasterVoice = NULL;
if ( FAILED(hr = pXAudio2->CreateMasteringVoice( &pMasterVoice, XAUDIO2_DEFAULT_CHANNELS, XAUDIO2_DEFAULT_SAMPLERATE, 0, 0, NULL ) ) ) return hr;
注 この例では、CreateMasteringVoice の DeviceIndex パラメーターにデフォルト値を使用することにより、XAudio2 でマスター ボイスに関連付けるオーディオ デバイスを選択できるようにしています。この値の決定は、使用可能なオーディオ デバイスのそれぞれに処理を繰り返して、アプリケーション固有の基準で選択することでも可能です。アプリケーション固有の基準に基づくオーディオ デバイスの選択例については、「方法 : オーディオ デバイスの列挙」を参照してください。
オーディオ データ フォーマットに応じて、WAVEFORMATEX 構造体、または WAVEFORMATEX 構造体を含む拡張されたフォーマットの構造体に値を入力します。
有効な構造体の詳細については、WAVEFORMATEX のリファレンス ページの表を参照してください。通常これらの構造体には、オーディオ ファイルの「fmt」チャンクからデータをロードすることで、データが入力されます。XAudio2 で RIFF ファイルからデータを解析およびロードする例については、「XAudio2 BasicSound サンプル」のサンプルを参照してください。
WAVEFORMATEXTENSIBLE wfx = {0};
FindChunk(hFile,'fmt ', dwChunkSize, dwChunkPosition ); ReadChunkData(hFile, &wfx, dwChunkSize, dwChunkPosition );
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 関数を使用してソース ボイスを開始します。
if ( FAILED(hr = pSourceVoice->Start( 0, XAUDIO2_COMMIT_NOW ) ) ) return hr;
関連トピック
- XAudio2 の概要
XAudio2 の概要を説明します。