XAudio2 オーディオ エフェクト

オーディオ エフェクトは、着信オーディオ データを受け取ると、それを転送する前に、データに何らかの処理を実行します。エフェクトは、オーディオ ストリームへのリバーブの追加やピーク ボリューム レベルの監視を含め、さまざまなタスクの実行に使用できます。

エフェクト チェーン

いずれの XAudio2 ボイスも、オーディオ エフェクトのチェーンをホストできます。エフェクト チェーンは、XAUDIO2_EFFECT_DESCRIPTOR 構造体の配列を使用して指定します。各ディスクリプターには、クライアントによって提供されるエフェクト オブジェクトへのポインターが格納されます。これらのオブジェクトは、オーディオ処理オブジェクト (APO) インターフェイスを実装する必要があります。APO モデルの詳細については、「XAPO の概要」を参照してください。

エフェクト チェーンは、(XAudio2 エンジンが実行中のときは) クライアントが動的に変更できます。エフェクトは、個別に有効化または無効化することができます。また、エフェクトのパラメーターを変更することもできます。これらは、すべてオーディオを中断することなく行うことができます。エフェクトのグラフの任意の要素が変更されると、XAudio2 は常に、グラフを再度最適化して、不必要な処理が行われるのを防止します。「IXAudio2Voice::SetEffectChain」、「IXAudio2Voice::EnableEffect」、および「IXAudio2Voice::SetEffectParameters」を参照してください。

エフェクトは、XAudio2 ボイスに関連付けられると、XAudio2 によって制御され、クライアントはそれ以上このエフェクトに呼び出しを行うべきではありません。これを確実に行う最も簡単な方法は、エフェクトへのすべてのポインターを解放することです。

指定された XAudio2 ボイスのエフェクト チェーンのエフェクトは、そのボイスの処理サンプル レートで、浮動小数点オーディオを消費および生成する必要があります。オーディオ形式で変更できる部分は、チャンネル数のみです (たとえば、リバーブ エフェクトでは、モノラル データを 5.1 に変換できます)。クライアントは、各エフェクトが XAUDIO2_EFFECT_DESCRIPTOROutputChannels フィールドを使用して生成する必要があるチャンネルの数を指定できます。いずれかのエフェクトがこれらの要件を満たすことができない場合、または次のエフェクトを処理できないチャンネル数をエフェクトが生成した場合、エフェクト チェーンは失敗します。エフェクト チェーンに、これらの要件を満たすことを停止させる可能性がある IXAudio2Voice::EnableEffect 呼び出しまたは IXAudio2Voice::DisableEffect 呼び出しは、失敗します。

XAudio2 で使用される APO インターフェイスは、破壊的である必要があります。つまり、これらのインターフェイスが出力バッファー内で見つけたデータは常に上書きされます。XAudio2 では、これらのバッファーが既にサイレント状態で初期化されたことを保証していないため、APO インターフェイスが破壊的な状態でない場合は、結果のオーディオが不適切なものとなる可能性があります。

XAudio2 組み込みエフェクト

次の表に、XAudio2 で提供される組み込みのオーディオ エフェクトとその作成方法を示します。

Effect 作成方法
リバーブ XAudio2CreateReverb
ボリューム メーター XAudio2CreateVolumeMeter

オーディオ エフェクトのインスタンス作成と使用の例については、「方法 : エフェクト チェーンの作成」を参照してください。

XAudio2 内のカスタム エフェクト

XAPO API には、XAudio2 内で使用されるカスタム オーディオ エフェクトの作成に使用されるフレームワークが用意されています。XAPO でのカスタム エフェクトの作成例については、「方法 : XAPO の作成」を参照してください。

XAPO エフェクト ライブラリ (XAPOFX)

XAPOFX は、XAPO の追加ライブラリおよびそれを作成するための共通のメカニズムを提供します。XAudio2 での XAPOFX の使用例については、「方法 : XAudio2 での XAPOFX の使用」を参照してください。

関連トピック