方法 : XAudio2 によるサウンドの再生

ここでは、XAudio2 のサウンドを再生するのに必要な最小限の手順を示します。XAudio2 を初期化した後、サウンド ボイスを作成し、それをオーディオ データに渡すことで、サウンドを再生できます。

サウンドを再生するには

  1. XAudio2 エンジンを初期化するには、「方法 : XAudio2 の初期化」または「方法 : オーディオ デバイスの列挙」で説明されている手順に従ってください。

  2. オーディオ データ フォーマットに応じて、WAVEFORMATEX 構造体、または WAVEFORMATEX 構造体を含む拡張されたフォーマットの構造体に値を入力します。

    有効な構造体の詳細については、WAVEFORMATEX のリファレンス ページの表を参照してください。通常これらの構造体には、オーディオ ファイルの「fmt」チャンクからデータをロードすることで、データが入力されます。XAudio2 で RIFF ファイルからデータを解析およびロードする例については、「XAudio2 BasicSound サンプル」のサンプルを参照してください。

    WAVEFORMATEXTENSIBLE wfx = {0};
    
    FindChunk(hFile,'fmt ', dwChunkSize, dwChunkPosition );
    ReadChunkData(hFile, &wfx, dwChunkSize, dwChunkPosition );
    
  3. XAudio2 エンジンのインスタンス上にある IXAudio2::CreateSourceVoice メソッドを呼び出して、ソース ボイスを作成します。

    IXAudio2SourceVoice* pSourceVoice;
    if( FAILED(hr = pXaudio2->CreateSourceVoice( &pSourceVoice, (WAVEFORMATEX*)&wfx,
                                 0, XAUDIO2_DEFAULT_FREQ_RATIO, NULL, NULL, NULL ) ) ) return hr;
    
  4. データを 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 でサポートされている形式については、「サポートされるオーディオ形式」を参照してください。

  5. 関数 SubmitSourceBuffer を使用して XAUDIO2_BUFFER をソース ボイスに送信します。

    if( FAILED(hr = pSourceVoice->SubmitSourceBuffer( &buffer ) ) ) 
        return hr;
    
  6. Start 関数を使用してソース ボイスを開始します。

    既定では、すべての XAudio2 ボイスがその出力をマスター ボイスへ送信するので、ソース ボイスからのオーディオは、初期化時に選択されたオーディオ デバイスに自動的に送信されます。より複雑なオーディオ グラフでは、ソース ボイスは出力の送信先のボイスを指定する必要があります。

    if ( FAILED(hr = pSourceVoice->Start( 0, XAUDIO2_COMMIT_NOW ) ) )
        return hr;
    

関連トピック