スピーカー構成にストリーム形式をマップする
オーディオ デバイスのスピーカー構成と一致しないストリーム形式を再生するように求められた場合、オーディオ ドライバーにはいくつかのオプションがあります。
ストリームの再生を拒否します。
スピーカーへの個々のチャネルの 1 対 1 のマッピングを実行してストリームを再生します。 チャネルが各スピーカーにマップされた後に残っているチャネルがある場合はカード残りのチャネルを削除します。 逆に、すべてのチャンネルがスピーカーに割り当てられた後にスピーカーが残っている場合は、残ったスピーカーを通して無音を再生します。
元のストリーム内のチャネルを混在させてストリームを再生し、スピーカー構成に必要なチャネル数を正確に生成します。 元のストリームにスピーカーよりも多くのチャネルがある場合、このアプローチでは、余分なチャネルをカード単純に削除することによって生じるコンテンツの損失を回避します。 ミキシングとフォーマット変換は、ソフトウェアまたはハードウェアで実行できます。
3番目のオプションに関しては、ドライバは直接ソフトウェアミキシングを実行しないようにする必要があります。 代わりに、ハードウェア ベンダーは、オーディオ デバイスに到達する前に、ストリームを処理するグローバル効果 (GFX) ソフトウェア モジュールをインストールする必要があります。 Windows Vista では、グローバル効果は GFX オーディオ処理オブジェクト (APOs) として実装されます。 Windows Server 2003 および Windows XP では、グローバル効果が GFX フィルターとして実装されました。
7.1 スピーカー構成での 5.1 チャネル ストリームの再生
次の図は、5.1 サラウンド サウンド スピーカー構成 (左) 用に記録されているが、7.1 ホーム シアター スピーカー構成 (右) を介して再生されるストリームを示しています。
前の図では、記録された 5.1 形式には、7.1 スピーカー構成の BL および BR スピーカー位置のチャネル情報が含まれていません。 したがって、これら 2 つのスピーカーはサイレントです。 (もう 1 つは、オーディオ デバイスが録音の元の 6 つのチャンネルのコンテンツを混合することによって BL および BR スピーカー用の 2 つの追加チャネルを合成することです。
チャネル マスク ビットの定義に従って、前の図の左側に示されている 5.1 ストリームを記録するためのチャネル マスクを0x60Fする必要があります。これにより、FL、FR、FC、LFE、SL、SR の 6 つのチャンネルが次のスピーカー位置に割り当てられます。 (これは、前に説明したサイドスピーカー 5.1 構成です)。実際、5.1 ストリームのチャネル マスクは、以前にメンションされた理由から0x60Fではなく0x3Fされ、詳細に説明されます。
以前のバージョンの Windows (Windows Server 2003、Windows XP SP1、Windows 2000、Windows Me/98) では、チャネル マスク 0x3Fの解釈は、5.1 形式の 6 つのチャネルを FL、FR、FC、LFE、BL、BR のスピーカーの位置に割り当てることです。 (これはバック スピーカー 5.1 構成です。) ただし、Windows Vista、Windows Server 2003 SP1、および Windows XP SP2 では解釈が異なります: 慣例により、チャネル マスク 0x3F の 5.1 フォーマットは、バック スピーカー 5.1 構成ではなく サイド スピーカー 5.1 構成を意味すると解釈されます。
この方法でチャネル マスクを解釈すると、サイドスピーカー 5.1 構成とバックスピーカー 5.1 構成を区別するために、2 番目の 5.1 チャネルフォーマット記述子を導入する必要がなくなります。 これら 2 つの構成は非常に似ているので、一般的なユーザーはそれらを区別するのが難しい場合があります。 5.1 チャネルのフォーマット記述子が 1 つだけの場合、ユーザーの混乱を避けられますが、ハードウェア ベンダーは、チャネル 5 と 6 が BL および BR の位置ではなく SL および SR スピーカーの位置に割り当てられていることを意味するために、0x3F チャネル マスクを解釈することを忘れないようにする必要があります。 ベンダーは、5.1 ストリームのチャネル マスクのこの特殊な場合の解釈を覚えておく必要がある代わりに、2 つの非常に似た 5.1 チャネル形式記述子を区別する難しさをユーザーに提供できます。
少なくとも一部のユーザーがサイドスピーカー 5.1 構成とバックスピーカー 5.1 構成を区別する必要があると考えるベンダーは、この目的のためにユーザー インターフェイス (UI) プログラムを提供するオプションがあります。 ユーザーは UI を使用して、5.1 チャネル ストリームのチャネル 4 と 5 が、7.1 ホーム シアター スピーカー構成のサイド スピーカーではなく、バック スピーカーを駆動するかどうかを選択できます。
5.1 スピーカー構成での 7.1 チャネル ストリームの再生
次の図は、7.1 ホーム シアター スピーカー構成 (左) で記録されたストリームが 5.1 サラウンド サウンド スピーカー構成 (右) で再生されている様子を示しています。 7.1 チャネル ストリームのチャネル マスクは0x63F。
この例では、7.1 構成のサイド スピーカー位置のデータを含むチャネル 6 と 7 は、5.1 構成のサイド スピーカー位置を介して再生します。 オーディオ デバイスは、5.1 構成でストリームを再生するときに、7.1 構成のバック スピーカー位置のデータを含むチャネル 4 と 5 をカードします。 前にメンションしたように、デバイスは、5.1 構成でサイド スピーカーを介して再生する前に、チャネル 6 と 7 と混合してチャネル 4 と 5 のコンテンツを保持しようとします (前の図に示されていない別の方法)。
システム ミキサーの動作
Windows Server 2003、Windows XP、Windows 2000、および Windows Me/98 では、オーディオ デバイスが再生するマルチチャネル オーディオ ストリームは、通常、ソフトウェア システム ミキサー (Kmixer.sys) によって生成されます。 ストリームの再生を開始する前に、システム ミキサーとオーディオ ドライバーは、ミキサーとドライバーの両方が処理できるストリーム形式をネゴシエートする必要があります。
オーディオ デバイスのスピーカー構成と一致しない形式でマルチチャネル ストリームを再生するように求められた場合、オーディオ ドライバーは要求を拒否できます。その場合、ネゴシエーションは続行されます。
システム ミキサーは、5.1 チャネルの入力ストリームから 7.1 チャネルの出力ストリーム (オーディオ デバイス) にコンテンツを変換できます。また、その逆も可能ですが、入力ストリームの品質を維持するためにこのような変換を回避することをお勧めします。 したがって、システム ミキサーは、システム ミキサーに最高品質の入力ストリームと同じ形式のストリームを受け入れるようにドライバーに要求することによってネゴシエーションを開始します。 通常、これは、システム ミキサーに 5.1 または 7.1 チャネル形式の入力ストリームがある場合、同じ形式のストリームを受け入れるようにドライバーに要求することを意味します。 ドライバーがこの形式を拒否した場合、システム ミキサーは、他のストリーム形式を処理できるかどうかをドライバーに問い合わせ、ネゴシエートを続行します。
たとえば、5.1 スピーカー構成のオーディオ デバイスのドライバーがシステム ミキサーからの 7.1 チャネル ストリームの再生要求を拒否した場合、システム ミキサーは、7.1 チャネル ストリームを 5.1 チャネル ストリームに変換することを提供することでネゴシエーションを続行します。 ドライバーがこの形式を受け入れる場合、システム ミキサーは、ドライバーのストリーム変換を実行します。
オーディオ ドライバーを設計する場合、ドライバー ライターは、独自の形式変換を処理するか、システム ミキサーに依存して変換を行うかを決定する必要があります。 ドライバーは、次のいずれかの状況で変換を処理する必要があります。
ドライバーがシステム ミキサーによって実行される変換とは異なる方法で変換を実行する必要がある場合。
ドライバーがシステム ミキサーをバイパスするストリームを再生する必要がある場合。
2 番目の状況では、Microsoft DirectSound ハードウェアアクセラレータ バッファーからオーディオ デバイス上のハードウェア ミキシング ピンに直接再生されている場合、ストリームはシステム ミキサーをバイパスできます。 また、一部の "プロ オーディオ" アプリケーションは、システム ミキサーの待機時間を回避するため、またはミキシング プロセスが元のオーディオ ストリームのデジタル サンプル値を変更するのを防ぐために、オーディオ デバイスにストリームを直接送信します。
Windows Server 2003 SP1 および Windows XP SP2 では、システム ミキサーが 5.1 チャネル出力ストリームを生成する場合、ミキサーは常にストリームのチャネル マスクを0x3Fに設定します。 システム ミキサーは、チャネル マスクが 0x60F の 5.1 チャネル入力ストリームを受信した場合でも、このように動作します。 この動作では、オーディオ ドライバーはミキサーから0x60Fのチャネル マスクを持つ 5.1 チャネル ストリームを受け取ることはありません。
システム ミキサーは、0x63Fのチャネル マスクを持つ 7.1 チャネル入力ストリームを受信し、5.1 チャネル出力ストリーム (0x3F のチャネル マスク) を生成する場合、ミキサーは入力ストリームのチャネル 6 と 7 を出力ストリームのチャネル 4 と 5 にコピーします。 ミキサーはカード7.1チャンネル入力ストリームからチャンネル4と5(2つのバックスピーカー用)をディスします。 この動作により、7.1 チャネル ストリームの 2 つのサイド スピーカーのコンテンツを含むチャネルが、5.1 スピーカー構成のサイド スピーカーを介して再生されるようになります。