Share via


方法 : 基本的なオーディオ処理グラフの作成

XAudio2 でオーディオ データを再生できるようにするための最小要件は、単一マスター ボイスおよび単一ソース ボイスで構成されたオーディオ処理グラフです。

基本的なオーディオ処理グラフを作成するには

  1. 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);
    
  2. CreateMasteringVoice 関数を使用して、マスター ボイスを作成します。

    IXAudio2MasteringVoice* pMasterVoice = NULL;
    
    if ( FAILED(hr = pXAudio2->CreateMasteringVoice( &pMasterVoice, XAUDIO2_DEFAULT_CHANNELS,
                                    XAUDIO2_DEFAULT_SAMPLERATE, 0, 0, NULL ) ) )
            return hr;
    

        この例では、CreateMasteringVoiceDeviceIndex パラメーターにデフォルト値を使用することにより、XAudio2 でマスター ボイスに関連付けるオーディオ デバイスを選択できるようにしています。この値の決定は、使用可能なオーディオ デバイスのそれぞれに処理を繰り返して、アプリケーション固有の基準で選択することでも可能です。アプリケーション固有の基準に基づくオーディオ デバイスの選択例については、「方法 : オーディオ デバイスの列挙」を参照してください。

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

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

    WAVEFORMATEXTENSIBLE wfx = {0};
    
    FindChunk(hFile,'fmt ', dwChunkSize, dwChunkPosition );
    ReadChunkData(hFile, &wfx, dwChunkSize, dwChunkPosition );
    
  4. CreateSourceVoice 関数を使用してソース ボイスを作成します。

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

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

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

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

関連トピック