英語で読む

次の方法で共有


スピーカー構成の設定を適用

この情報は、Windows XP 以前のオペレーティング システムに適用されます。 Windows Vista 以降では、IDirectSound::GetSpeakerConfigIDirectSound::SetSpeakerConfig は非推奨になりました。

DirectSound は、レジストリ内の現在のスピーカー構成設定を追跡し、新しい DirectSound デバイスが作成されるたびにその設定をオーディオ ハードウェアに適用します。

アプリケーション プログラムは、レジストリのスピーカー構成設定を更新する IDirectSound::SetSpeakerConfig メソッドを呼び出すことによって、システム全体のスピーカー構成を変更できます。 また、このメソッドは、新しい設定をハードウェアに即座に適用しようとしますが、オーディオ デバイスは通常、DirectSound オブジェクトが存在する間はスピーカーの設定を変更できません。 DirectSound でこのメソッド用に定義されているスピーカー構成の一覧については、「スピーカー構成の要求の変換」を参照してください。

ユーザーは、コントロール パネルの [マルチメディア プロパティ] ページ (mmsys.cpl) のスピーカー構成ダイアログで構成を変更できます。 たとえば、Windows XP で DirectSound スピーカー構成ダイアログを見つけるには、次の手順に従います。

  1. コントロール パネルで、[サウンドとオーディオ デバイス] アイコンをダブルクリックします。

  2. [オーディオ] タブで、[サウンド再生] リストからデバイスを選択します。

  3. [Advanced] \(詳細設定) ボタンを選択します。

  4. [スピーカー] タブを選択します。

この時点で、選択できるスピーカー構成の一覧の横に [スピーカーのセットアップ] というラベルが表示されます。

DirectSound は、KSPROPERTY_AUDIO_CHANNEL_CONFIG セットプロパティ要求を使用して、スピーカー構成情報をオーディオ フィルター グラフの 3D ノードまたは DAC ノード (KSNODETYPE_3D_EFFECTS または KSNODETYPE_DAC) に送信します。 3D ノードの場合、プロパティ要求のターゲットは、実際にはノードにフィードするピン (3D ストリーム オブジェクト) です。 DAC ノードの場合、ターゲットは DAC ノードを含むフィルター オブジェクトです。 いずれの場合も、スピーカー構成設定はグローバルであり、オーディオ デバイス全体に影響します。 DirectSound が設定を再度変更するまで、その後実行されるすべてのオーディオ アプリケーションには新しい設定が適用されます。

Windows Me および Windows XP 以降に付属する DirectSound のバージョンのみが、DAC ノードにスピーカー構成プロパティ要求を送信し、以前のバージョンの DirectSound はこの機能をサポートしていないことにご注意ください。 ただし、DirectSound のすべてのバージョンは、これらの要求を 3D ノードに送信します。

アプリケーション プログラムが複数の 3D ノードを作成した場合、DirectSound は、作成する最初の 3D ノードにのみスピーカー構成要求を送信します。

DirectSound は、アプリケーションが DirectSound オブジェクトを作成したり、IDirectSound::SetSpeakerConfig メソッドを呼び出すたびに、3D ノードと DAC ノードにスピーカー構成要求を送信します。 オーディオ デバイスは通常、アクティブ ストリームの管理中にスピーカー構成を変更できず、DirectSound は可能な限りこの制限を回避しようとします。 たとえば、DirectSound オブジェクトを作成する場合、DirectSound は、フィルターをインスタンス化した後、フィルターでピンをインスタンス化する前、つまりストリームを作成する前にスピーカー構成要求を送信します。

SetSpeakerConfig を呼び出す場合、この制限を回避することはより困難です。 アプリケーションが SetSpeakerConfig を呼び出すと、アダプター ドライバーは通常、DirectSound のスピーカー構成要求に失敗します。 これは、DirectSound オブジェクトが既に存在するためで、デバイスに既に管理するアクティブなストリームがあることを意味します。

この状況では、アダプター ドライバーには、失敗したスピーカー構成要求を処理するための 2 つのオプションがあります。

  • ドライバーは、要求された構成を記憶し、すべてのストリームが破棄されるとすぐに適用できます。

  • ドライバーはこの要求を無視し、次に DirectSound オブジェクトが作成されたときに、DirectSound が別のスピーカー構成要求を送信するのを待つことができます。

最初のオプションでは、ユーザーがスピーカー構成ダイアログで新しい設定を選択した場合、DirectSound アプリケーションだけでなく、すべてのアプリケーションで変更がすぐに有効になるため、ユーザー エクスペリエンスが向上します。 (もちろん、新しい設定が選択された時点でオーディオ アプリケーションが実行されている場合、変更はすべてのオーディオ アプリケーションが終了するまで先送りされます)。ただし、2 番目のオプションでは、DirectSound アプリケーションが実行されるまで変更は有効になりません。 たとえば、Windows マルチメディア waveOut API を使用するアプリケーションが、コントロール パネル設定を変更した後に実行する最初のアプリケーションである場合、ユーザーは新しい設定に効力がないことを疑問に思うかもしれません。

一般的なアダプター ドライバーは、3D または DAC ノードに送信されたスピーカー構成要求に応答して、オーディオ アプリケーションによって現在インスタンス化されているピンがない場合にのみ、オーディオ ハードウェアのスピーカー構成を更新します。 つまり、たとえば waveOut アプリケーションで、2 つ目のアプリケーションが DirectSoundCreate を呼び出した時点で 1 つ以上のピンが開いている場合、ドライバーは、オーディオ デバイスのスピーカー構成に対する保留中の変更を後日まで先送りする必要があるかもしれません。

ドライバーがデバイスのスピーカー構成を変更する要求に応えられない場合は、単に要求に失敗します。 DirectSound オブジェクトの作成中または SetSpeakerConfig の呼び出し中にスピーカー構成要求に失敗しても、DirectSound オブジェクトの作成または SetSpeakerConfig の呼び出しは失敗しません。

起動時に、オーディオ アダプター ドライバーは、ハードウェアのスピーカー構成を既定の設定 (通常はステレオ) に初期化します。 アプリケーションが DirectSound オブジェクトを作成するとすぐに、DirectSound はレジストリに格納されている設定をハードウェアに適用します。 アプリケーション プログラムは、SetSpeakerConfig を呼び出してレジストリのスピーカー構成設定を変更する前に DirectSound デバイスを作成する必要がありますが、このレジストリ設定は通常、DirectSound デバイスがリリースされ、2 つ目の DirectSound デバイスが作成された後にのみハードウェアに反映されます。

オーディオ デバイスをインストールした直後、またはスピーカー構成エラーが発生すると、DirectSound スピーカー構成は既定でステレオに設定されます。