DSSPEAKER_SURROUND スピーカー構成
注 この情報は、Windows XP 以前のオペレーティング システムに適用されます。 Windows Vista 以降では、IDirectSound::GetSpeakerConfig と IDirectSound::SetSpeakerConfig は非推奨になりました。
アプリケーション プログラムは、speaker-configuration パラメーターを DSSPEAKER_SURROUND に設定して IDirectSound::SetSpeakerConfig メソッドを呼び出すことによって、DirectSound スピーカー構成をサラウンド モードに変更することができます。 これは、チャンネルが左、右、中央、および後方のスピーカーにマップされる、4 チャンネル PCM 形式を指定します。
これが有効になると、DSSPEAKER_SURROUND speaker-configuration 設定がグローバルになり、オーディオ デバイス全体に影響します。 DirectSound が設定を再度変更するまで、その後実行されるすべてのオーディオ アプリケーションには新しい設定が適用されます。
DirectSound では、次のアルゴリズムを使用して、オーディオ システムをサラウンド モード用に構成します。
DirectSound は、まず、ドライバーの DAC ノード (DAC ノードがない場合は 3D ノード) に KSPROPERTY_AUDIO_CHANNEL_CONFIG set-property 要求を送信して、サラウンド スピーカー モードに入るようにドライバーに要求します。 (「KSNODETYPE_DAC」と「KSNODETYPE_3D_EFFECTS」を参照。) このプロパティ要求に伴う KSAUDIO_CHANNEL_CONFIG 構造体は、KSAUDIO_SPEAKER_SURROUND スピーカーの構成を指定します。 要求が成功した場合、オーディオ デバイスは、左、右、中央、および後方のスピーカーに直接接続されている 4 つのアナログ出力に 4 つのチャンネルをルーティングします。
失敗した場合は、DirectSound は、ステレオ スピーカー モードでデバイスを構成し、KSNODETYPE_PROLOGIC_ENCODER ノードがある場合は有効にするように、ドライバーに要求します。 これが成功した場合、デバイスは、アプリケーションからの 4 チャンネル ストリームを、デジタル形式またはアナログ形式で出力するサラウンド エンコード ステレオ信号に変換します。 (ハードウェアは、デバイスのさまざまなミキサー ピンに流れるストリームをミキシングした後に、エンコードを行う必要があります)。ユーザーは、デバイスのステレオ出力を、エンコードされた信号を左、右、中央、および後方のスピーカーに出力される 4 つのチャンネルに変換する外部デコーダーに接続できます。
失敗した場合、DirectSound は KMixer で KSNODETYPE_PROLOGIC_ENCODER ノードを有効にします。 (デバイスは、前の手順で既にステレオ モードになっています)。ここでも、デバイスによって出力されるステレオ信号を外部デコーダーに供給できます。
このアルゴリズムが成功した場合、アプリケーションは 4 チャンネル PCM バッファーを作成して再生することができます。 上記のケース 1 と 2 では、デバイスが読み取るハードウェア バッファーは 4 つのチャンネルを使用しますが、3 つの場合、ハードウェア バッファーはステレオ形式を使用します。 アプリケーションはケース 1 と 2 でハードウェア バッファーに直接書き込むことができますが、3 の場合はソフトウェア バッファーに書き込み、KMixer がアプリケーションの 4 チャンネル ストリームをハードウェア バッファーに必要なサラウンド エンコードステレオ形式に変換できるようにする必要があります。
上記の (3) の場合、アプリケーションは、出力ストリームのいずれにもハードウェア バッファーを使用しないようにする必要があります。 KMixer は、ミックスをエンコードしてサラウンド ステレオ ストリームを生成する前に、すべての入力ストリームをミックスすることに注意してください。 ただし、ハードウェア ミキサー ピンに入ったストリームは、KMixer からエンコードされたステレオとハードウェアでミックスされているため、デコード時にサラウンド オーディオの品質が低下します。 アプリケーションでは、ソフトウェア バッファーのみを使用してこれを防ぐことができます。
KSNODETYPE_PROLOGIC_ENCODER ノードによってサラウンド エンコードされたステレオ ストリームは、KSNODETYPE_PROLOGIC_DECODER ノードによって 4 つのチャンネル (左、右、中央、および後方) にデコードすることができます。