XAudio2 のオーディオ エフェクト
オーディオ効果は、受信したオーディオ データを受け取り、渡す前にデータに対して何らかの操作を実行するオブジェクトです。 エフェクトを使用すると、オーディオ ストリームへのリバーブの追加やピークボリュームレベルの監視など、さまざまなタスクを実行できます。
効果チェーン
XAudio2 音声は、オーディオ効果のチェーンをホストできます。 XAUDIO2_EFFECT_DESCRIPTOR構造体の配列を使用して、効果チェーンを指定できます。 各記述子には、クライアントによって提供される効果オブジェクトへのポインターが含まれています。 これらのオブジェクトは、オーディオ処理オブジェクト (APO) インターフェイスを実装する必要があります。 APO モデルの詳細については、 XAPO の概要 に関するページを参照してください。
エフェクト チェーンは、クライアントによって動的に変更できます (XAudio2 エンジンの実行中)、効果を個別に有効または無効にしたり、効果パラメーターを変更したりできます。すべてオーディオを中断することなく変更できます。 効果グラフの任意の側面が変更されるたびに、XAudio2 は不要な処理を回避するためにグラフを再び最適化します。 IXAudio2Voice::SetEffectChain、IXAudio2Voice::EnableEffect、および IXAudio2Voice::SetEffectParameters を参照してください。
効果が XAudio2 音声にアタッチされると、XAudio2 によって効果が制御され、クライアントはそれ以上呼び出すべきではありません。 これを確実に行う最も簡単な方法は、効果へのすべてのポインターを解放することです。
特定の XAudio2 音声のエフェクト チェーンの効果は、その音声の処理サンプル レートで浮動小数点オーディオを消費して生成する必要があります。 変更できるオーディオフォーマットの唯一の側面は、チャンネル数です(たとえば、リバーブエフェクトはモノラルデータを5.1に変換できます)。 クライアントは 、XAUDIO2_EFFECT_DESCRIPTORを使用できます。OutputChannels フィールドを使用して、各効果で生成する必要があるチャネルの数を指定します。 効果チェーンは、いずれかの効果がこれらの要件を満たすことができない場合、または効果によって次の効果で処理できない多数のチャネルが生成された場合に失敗します。 効果チェーンがこれらの要件を満たさなくなる原因となる IXAudio2Voice::EnableEffect または IXAudio2Voice::D isableEffect 呼び出しは失敗します。
XAudio2 で使用される APO インターフェイスは 破壊的である必要があります。 つまり、出力バッファーで見つけたデータは常に上書きされます。 そうしないと、XAudio2 では、これらのバッファーが以前に無音で初期化されたことは保証されないため、結果のオーディオが正しくない可能性があります。
XAudio2 組み込み効果
次の表に、XAudio2 によって提供される組み込みのオーディオ効果のセットとその作成方法を示します。
効果 | 作成方法 |
---|---|
リバーブ | XAudio2CreateReverb |
音量計 | XAudio2CreateVolumeMeter |
オーディオ効果のインスタンスを作成して使用する例については、「 方法: 効果チェーンを作成する」を参照してください。
XAudio2 のカスタム効果
XAPO API には、XAudio2 で使用できるカスタム オーディオ効果を作成するためのフレームワークが用意されています。 XAPO を使用してカスタム効果を作成する例については、「 方法: XAPO を作成する」を参照してください。
XAPO 効果ライブラリ (XAPOFX)
XAPOFX には、XAPO の追加ライブラリと、それらを作成するための一般的なメカニズムが用意されています。 XAudio2 で XAPOFX を使用する例については、「 方法: XAudio2 で XAPOFX を使用する」を参照してください。
関連トピック