次の方法で共有


IXAudio2SourceVoice::SubmitSourceBuffer メソッド

ボイス キューに新しいオーディオ バッファーを追加します。

構文

HRESULT SubmitSourceBuffer(         const XAUDIO2_BUFFER *pBuffer,         const XAUDIO2_BUFFER_WMA *pBufferWMA = NULL)

パラメーター

  • pBuffer
    [in] キューへの XAUDIO2_BUFFER 構造体へのポインターです。
  • pBufferWMA
    [in] WMA データの送信時に使用される追加の XAUDIO2_BUFFER_WMA 構造体へのポインターです。

戻り値

正常に実行された場合は S_OK を返し、失敗した場合はエラー コードを返します。XAudio2 固有のエラー コードの説明については、「XAudio2 エラー コード」を参照してください。

解説 

ボイスは、送信された順序でそのキュー内のバッファーを処理および再生します。

XAUDIO2_BUFFER 構造体には、オーディオ バッファーの位置とサイズ、実際に再生される必要があるバッファーの部分、ループ領域とループ カウント、このバッファーに関連するコールバックで使用されるコンテキスト ポインター、および連続サウンドの最終バッファーであることを示す、オプションの XAUDIO2_END_OF_STREAM フラグに関する詳細が含まれています。

ボイスを開始する際、バッファーがキューに追加されていない場合、新しいバッファーが直ちに再生を開始します。ボイスが停止されると、バッファーはボイスのキューに追加され、ボイスの開始時に再生されます。

特定のバッファーの一部のみを再生する必要がある場合は、XAUDIO2_BUFFERPlayBegin フィールドおよび PlayLength フィールドを使用して、再生する領域を指定します。PlayLength の値が 0 の場合、バッファー全体が再生されます (また、この場合は PlayBegin も 0 にする必要があります)。

連続ループでバッファーのすべてまたは一部を再生する必要がある場合、XAUDIO2_BUFFERLoopBeginLoopLength、および LoopCount フィールドを使用して、ループ領域の特性を指定できます。LoopBegin の値が XAUDIO2_NO_LOOP_REGION の場合は、ループは実行されません。この場合、LoopLength および LoopCount を 0 にする必要があります。ループ領域が指定されている場合、空以外 (LoopLength > 0) でなければなりません。また、ループ カウントは 1 ~ XAUDIO2_MAX_LOOP_COUNT の範囲内でなければなりません (IXAudio2SourceVoice::ExitLoop が呼び出された場合にのみ終了する無限ループを指定するには XAUDIO2_LOOP_INFINITE を使用します)。ループ カウント が N の場合、N 回後方にスキップします。つまり、ループ領域は N+1 回再生されます。

明示的な再生領域が指定されている場合は、特定のオーディオ バッファー内 (圧縮されている場合は、バッファーがデーコードする一連のサンプル内) で開始し終了する必要があります。さらに、ループ領域の終端が再生領域の終端を超えることはできません。

Ee418473.note(ja-jp,VS.85).gifXbox 360

特定のオーディオ形式については、再生領域またはループ領域の有効なエンドポイントについて、追加の制限事項がある場合があります。たとえば、XMA バッファーでは、デコードしたオーディオの 128 サンプル境界でのみ領域を開始または終了できます。

pBuffer ポインターは、このメソッドを呼び出した直後に再使用または解放できますが、pBuffer が参照する実際のオーディオ データは、(IXAudio2VoiceCallback::OnBufferEnd コールバックによって示される) XAudio2 がバッファーを完全に使い切るまで、有効なままである必要があります。

最大で XAUDIO2_MAX_QUEUED_BUFFERS までのバッファーをボイスのキューに随時追加できます。

SubmitSourceBuffer は、XAUDIO2_COMMIT_NOW の操作セットを使用して XAudio2 コールバックから呼び出されるとすぐに有効になります。

Ee418473.note(ja-jp,VS.85).gifXbox 360

このメソッドは、Xbox システム スレッドから呼び出すことができます (他のほとんどの XAudio2 メソッドは呼び出せません)。ただし、システム スレッドから一度に送信できるソース バッファーは最大で 2 つです。

要件

ヘッダー: xaudio2.h で宣言されています。

関連項目

IXAudio2SourceVoice
方法 : 基本的なオーディオ処理グラフの作成
方法:ディスクからのサウンドのストリーム