XAudio2 のサンプル レート変換
XAudio2 のボイスでは、入力サンプル レートが出力ボイスの入力サンプル レートと異なる場合、自動サンプル レート変換を行うことができます。
サンプル レート変換には次のようなルールがあります。
ボイス入力のサンプル レートは固定されます。
ボイスでは、作成時に指定された入力サンプル レートのみを扱うことができます。マスター ボイスおよびサブミックス ボイスについては、入力サンプル レートは IXAudio2::CreateMasteringVoice 関数および IXAudio2::CreateSubmixVoice 関数への InputSampleRate 引数で指定されます。ソース ボイスについては、ボイスの入力サンプル レートは、IXAudio2::CreateSourceVoice 関数への pSourceFormat 引数で指定されます。
ボイスの出力ボイスはすべて、同じ入力サンプル レートである必要があります。
ボイスは、入力サンプル レートから任意の出力サンプル レートに変換できますが、ボイスの出力ボイスはすべて同じ入力サンプル レートである必要があります。たとえば、ボイスは、入力サンプル レートが 22 kHz である任意の数のボイスに出力できます。ただし、同じサンプル ボイスに複数の出力ボイスがあり、それぞれの入力サンプル レートが異なる場合は、オーディオ グラフが無効になります。
サンプル レート変換処理は、必要なときにのみ行われます。
オーディオ データを他のサンプル レートに変換することによって、追加の処理オーバーヘッドが発生するため、できるだけ避けるようにすることをお勧めします。ボイスの入力サンプル レートが、その出力ボイスの入力サンプル レートと同じ場合は、変換が行われないため、処理時間も短縮されます。
出力サンプル レートは、ボイスの有効期間内で異なる場合があります。
ボイスの出力サンプル レートは固定されていません。出力ボイスのすべてで入力サンプル レートが同じであれば、オーディオ グラフは有効になります。ボイスが異なる入力サンプル レートの新しいボイスへの出力に変更された場合、ボイスは、新しいボイスの入力サンプル レートに変換されます。
ボイス間のサンプル レート変換を実行するために、サブミックス ボイスの追加が必要となるシナリオがいくつかあります。さまざまな入力サンプル レートを持つボイスへの出力が必要な場合、元のボイスから直接出力することができるのは、複数のボイスのうちの 1 つだけです。ボイスの出力ボイスはすべて、同じ入力サンプル レートである必要があるため、他のボイスは出力を間接的に受け取ります。元のボイスと目的の出力ボイスの間にくる正確な入力サンプル レートを持つサブミックス ボイスが必要になります。
たとえば、入力サンプル レートが 22 kHz のソース ボイスがあるとします。このソース ボイスは、入力サンプル レートが 11 kHz のサブミックス ボイスと入力サンプル レートが 44.1 kHz のマスター ボイスに出力する必要があります。2 つの出力ボイスの入力サンプル レートが異なっているため、元のボイスとその目的の出力ボイスとの間に追加のサブミックス ボイスを挿入する必要があります。ソース ボイスの忠実度を保ち、サンプル レートを高めるための不要で負荷の高い変換を避けるには、22kHz のサンプル入力レートを持つ 2 つのサブミックス ボイスをグラフに挿入します。一方のサブミックス ボイスは 11kHz でリバーブ エフェクトを持つサブミックス ボイスに出力し、他方のサブミックス ボイスは 44.1kHz でマスター ボイスに出力します。
オーディオ グラフのサンプル レート変換の例
図形 1. すべてのボイスには、同じサンプル入力レートがあり、オーディオ グラフ内ではサンプル レート変換は実行されません。
図形 2. すべてのボイスには、マスター ボイス以外の同じサンプル入力レートがあり、マスター ボイスに転送されるデータ上でのみサンプル レートの変換が実行されます。
図形 3. ボイスには異なるサンプル入力レートがあり、サンプル レート変換を実行するための追加サブミックス ボイスが必要です。サンプル レート変換は、オーディオ グラフ内の複数の場所で実行されます。
関連トピック
- XAudio2 の概要
XAudio2 の概要を説明します。