既定のオーディオ エンドポイントの選択 (Windows 10 以降)
Windows 10 オーディオ サブシステムでは、既定のオーディオ エンドポイントの選択に対して、ヒューリスティックが強化されたアルゴリズムが使用されます。 このトピックでは、これらのヒューリスティックと、Windows 10 オーディオ サブシステムがそれらを使用して既定のオーディオ エンドポイントを選択する方法について説明します。 このトピックでは、Windows 10 の新しい選択メカニズムについて理解を深めるために、Windows 7 で既定のオーディオ エンドポイントを選択する方法についても説明します。 このトピックの対象読者は OEM と IHV です。
この情報は、Windows 10 オペレーティング システムに適用されます。
ここで説明する参照とリソースは、このトピックの最後に記載されています。
はじめに
ほとんどの PC オーディオ デバイスには、論理的に独立した複数のオーディオ機能が含まれています。 Windows 7 と Windows 10 では、各機能が個別のオーディオ エンドポイントとして公開されています。 エンドポイントは、以下に示す Windows 7 のダイアログ ボックスの例のように、コントロール パネルのサウンド アプリケーションに一覧表示されます。
また、Windows 10で利用可能な新しいサウンド設定ページでは、以下のように表示されます。
特定のコンソールまたは通信ロールの既定として設定できるオーディオ エンドポイントは一度に 1 つだけです。 ただし、Windows 10 以降では、[アプリ のボリュームとデバイスの設定] ページを使用して、これらのロールに対して別のエンドポイントを別のアプリケーションでターゲットとすることができるオプションがあります。
Windows 7 および Windows 10 オーディオ サブシステムでは、同様のアルゴリズムを使用して、ユーザー設定が指定されていない場合に既定のオーディオ エンドポイントが決定されます。 ただし、Windows 10 のアルゴリズムは、既定のユーザー選択を処理する方法と、アプリケーションごとの設定を処理する方法が Windows 7 と異なります。
このトピックでは、Windows 10 で既定のオーディオ エンドポイントを選択する方法について説明します。 Windows 10 の新しい機能について理解を深めるために、Windows 7 での既定のオーディオ エンドポイントの選択についても説明します。
既定のオーディオ エンドポイントを選択する基本アルゴリズム
Windows 7 および Windows 10 オーディオ サブシステムは、同様のアルゴリズムを使用して既定のオーディオ エンドポイントを決定します。 アルゴリズムは次のように動作します。
- すべての ACTIVE エンドポイントをループして、ユーザーがこのアプリケーションで優先される既定として設定したエンドポイントを見つけます (Windows 10 の新機能)。
- エンドポイントが識別されると、そのエンドポイントが返されて、このプロセスは完了します。
- エンドポイントが識別されない場合は、すべての ACTIVE エンドポイントをループして、ユーザーがシステムで優先される既定値として設定したエンドポイントを見つけます (Windows 10 で選択が変更されました)。
- エンドポイントが識別されると、そのエンドポイントが返されて、このプロセスは完了します。
- エンドポイントが識別されない場合、すべての ACTIVE エンドポイントをループして、要求されたロールに対して最も高い "rank" プロパティを持ち、既定として設定されることのない PKEY_AudioDevice_NeverSetAsDefaultEndpoint プロパティを持たないエンドポイントを探します。 (ランクの重み付け値は Windows 10 で変更されています。)
- エンドポイントが識別されると、そのエンドポイントが返されて、このプロセスは完了します。
- エンドポイントが識別されない場合、要求は E_NOTFOUND を示して失敗します。
ACTIVE、UNPLUGGED、DISABLED、NOT PRESENT の 4 つのエンドポイント状態があり、これらは、DEVICE_STATE_XXX 定数で定義されています。 オーディオ サブシステムは、既定のオーディオ エンドポイントを決定するときに、ACTIVE エンドポイント (存在し、有効な状態) のみを考慮します。 エンドポイントの状態が ACTIVE 状態から変化、または ACTIVE 状態へと変化するイベントは、現在の既定のオーディオ エンドポイントに影響する可能性があります。 このようなイベントには、オーディオ デバイスの挿入、デバイスの取り外し、新しいオーディオ デバイスのインストールが含まれます。 このような操作に対応して、Windows オーディオ サブシステムは既定のオーディオ エンドポイント ヒューリスティック アルゴリズムを実行して、新しい既定のオーディオ エンドポイントを決定します。
Windows 7 のエンドポイント Timestamp プロパティ
エンドポイント timestamp プロパティは、システム時刻を含むプロパティ キーです。 Windows 7 では、エンドポイントの timestamp プロパティは、コントロール パネルのサウンド アプリケーションを介してエンドポイントが既定のオーディオ エンドポイントとして設定されると、作成または更新されます。
timestamp プロパティは、各ロールに関連付けられ、ロールに対してユーザーが優先する既定として設定したエンドポイントを識別するために、既定の選択アルゴリズムによって使用されます。 このアルゴリズムは、最新のタイムスタンプ プロパティを持つエンドポイントを、既定のエンドポイントとして識別します。
Windows 10 の Level プロパティ
Windows 7 でユーザー指定の既定の設定に使用された timestamp プロパティでは、最初の既定の選択後に新しく接続されたデバイスを自動的に選択することができませんでした。 たとえば、ユーザーが過去の任意の時点で内蔵スピーカーを既定のエンドポイントに設定し、後で新しい USB ヘッドフォンを接続した場合、手動で選択しなければ、システムで USB ヘッドフォンに切り替わることはありませんでした。
Windows 10 以降では、ユーザーによる既定の選択は、ユーザーが既定の選択を行った時点で使用できたエンドポイントを考慮する、過去の設定のツリーのような構造として構築されています。 この理由は、ユーザーが既定のエンドポイントを選択すると、選択時にアクティブだった他のエンドポイントに対して相対的に、選択されたエンドポイントの設定が伝達されるためです。 ユーザーは、選択したデバイスに対して、永続的にあらゆる状況における絶対的な好みを伝えているわけではありません。
Timestamp プロパティの使用と作成は、Windows 10 から削除され、Level プロパティに置き換えられました。 level プロパティは、ユーザー設定のツリーのような構造を構築するために使用されます。 timestamp プロパティと同様に、各ロールに関連付けられた level プロパティがあります。 level プロパティは、サウンド コントロール パネル、サウンド設定ページ、またはシステム トレイのオーディオ コントロールを通じて、ユーザーが既定エンドポイントを選択するたびに作成または更新されます。
既定の割り当てアルゴリズムは次のように機能します。
エンドポイントが既定として選択されている場合、そのエンドポイントは、使用可能な最も高いレベルを割り当てることによって、ツリーに似た構造の最上位に移動されます。 ツリーの次のレベルには、過去に既定として選択されていたことがあるエンドポイント、または、この選択時にアクティブであったが、ユーザーによって選択されたことがないエンドポイントが、1 つ以上含まれます。 以降、選択が行われるたびに、新たに選択したエンドポイントがリストの一番上に移動し、前回の選択が下に移動して、アクティブだがまだ選択されていないエンドポイントがグループ化され、同順位の条件が作成されます。 システム内のすべてのエンドポイントが既定として設定されている場合、結果としてもたらされる構造は、各レベルで 1 つのエンドポイントを持つ単純な順序付きリストになります。
既定の決定アルゴリズムは次のように機能します。
最初に、レベル値のないアクティブなエンドポイントは、既定として選択された最も高いランクのエンドポイントと比較されます。 これにを行うことで、最近追加されたエンドポイントが、システム内で最新であり、かつユーザーが前回の既定値を選択した後に接続されたものであるため、最初に既定値になる機会を与えられます。
次に、すべてのアクティブなエンドポイントにレベルが含まれている場合は、最も高いレベルの (同等のものが他にない) エンドポイントが既定として選択されます。 最も高いレベルを持つことは、過去のある時点で、ユーザーがこのエンドポイントを既定値として設定し、その間に、より低いレベルの値を持つ他のエンドポイントがアクティブであったことを示します。
最後に、すべてのエンドポイントにレベル値が含まれており、最も高いレベルの値を持つエンドポイントがすべて同等の場合は、同等を解消するためにエンドポイント ランクが使用されます。 これは、それらのエンドポイントが、既定の選択時にアクティブではあったが、選択されなかったことを示します。 これらのエンドポイント間のユーザー設定を示すものがないため、自動ランク付けシステムが使用されます。
この新しいアルゴリズムでは、"新しい" エンドポイントに既定値になるための重みが増える点に注目してください。 つまり、オーディオ エンドポイントをシステムに新しく表示するドライバーの動作が、既定の変更をトリガーする可能性があります。
オーディオ エンドポイントのユーザー設定が失われ、オーディオ エンドポイントがシステムに "新規" として表示され、既定のデバイスの変更がトリガーされる可能性のある、ドライバーの動作とイベントの例を以下に挙げています。
- 別のドライバーのインストール。 たとえば、HDAudio クラス ドライバーと、ハードウェアの対応するサード パーティ 製ドライバーの切り替えです。 ユーザー設定と利用可能なエンドポイントは、2つ以上の関連性のないドライバーのインストール間で同じであるとは見なされていないため、これは想定されていることであり、設計によるものです。
- ドライバーのアンインストールと再インストール。 オーディオ ドライバーをアンインストールすると、AudioEndpointBuilder によってドライバーに関連付けられているユーザー設定が削除されます。 新しいドライバーをインストールすると、AudioEndpointBuilder によって新しいオーディオ エンドポイントが作成されます。 これは想定されている動作であり、設計によるものですが、この動作は、予期しないユーザー設定の損失が生じる場合に、自動インストーラーによって回避される必要があります。
- オーディオ エンドポイント フィルター参照文字列またはピン ID への変更。 オーディオ エンドポイントは、KS インターフェイスが作成された時に PnP に渡される参照文字列と、外部コネクタのピン ID によって識別されます。 これらの値を変更すると、新しいオーディオ エンドポイントが作成されます。 この新しいオーディオ エンドポイントには、以前の参照文字列とコネクタのピン ID に関連付けられているユーザー設定は含まれません。 ドライバーのすべての更新プログラムを含め、ドライバーのインストールの有効期間中は、参照文字列とコネクタ ピン ID を変更しないでください。
- HDMI またはディスプレイ オーディオ デバイスによる端末の種類またはシンク ID の変更。 端末の種類とシンク ID は、ユーザーが別のディスプレイをシステムに接続すると変更されることが想定されています。別のディスプレイは、新しいユーザー設定が関連付けられた新しいエンドポイントです。 ただし、接続されたディスプレイに対応する変更がない場合にこれらの値を変更すると、ユーザー設定が失われたと見なされます。 シンク ID と端末の種類は、接続されたディスプレイに対し変わることなく維持される必要があります。
Windows 10 の既定のオーディオ エンドポイント ヒューリスティック
自動エンドポイント選択用の Windows 10 の既定のオーディオ エンドポイント ヒューリスティックは、Windows 7 のヒューリスティックと同じであり、ユーザー エクスペリエンスを向上させるために係数の重みに若干の変更が加えられます。
既定の選択ヒューリスティックは、オーディオ エンドポイントに関する情報である要素を収集することから始まります。 その後、各要素が重み付けされ、すべての要素の重み付けされた値が合計されます。 結果の合計はエンドポイント ランクと呼ばれます。 ランク値は、各エンドポイントの各ロール (コンソールと通信) に対して計算されます。
その後、最も高いランクのエンドポイントが、要求されたロールの既定値として選択されます。
Windows 10 のヒューリスティック要素
Windows 10 オーディオ サブシステムでは、既定のオーディオ エンドポイントを選択するために、次のエンドポイント特性または要因が考慮されます。
- ジャック検出機能
- フォーム ファクター
- KSNodeType
- バスの種類
- 一般的な位置
- 幾何学的位置
- SubtypeSpecific
- コンソールまたは通信のロールに影響せず、このドキュメントの範囲外である他の要素が存在する可能性があります。
Windows 10 では、サポートされているすべてのエンドポイント要素に対し列挙値のセットを定義し、それらをレジストリに格納します。 これらの要素とそれに対応する列挙値のセットについて以下に詳しく説明します。
ジャック検出機能
この機能を備えたエンドポイントは、エンドポイントに接続されているオーディオ周辺機器が接続または取り外されたときに、オーディオ ドライバーがオーディオ サブシステムに通知できることを意味します。 ジャック検出機能をサポートするオーディオ エンドポイントは動的エンドポイントと呼ばれ、このサポートを提供しないエンドポイントは静的エンドポイントと呼ばれます。 ジャック検出機能をサポートするには、オーディオ デバイス ドライバーが KSPROPERTY_JACK_DESCRIPTION2 プロパティをサポートしている必要があります。 このプロパティの詳細については、「KSPROPERTY_JACK_DESCRIPTION2」を参照してください。
ジャック検出機能の列挙値 |
---|
サポートされています |
NotSupported |
Windows 10 の既定のオーディオ デバイス ヒューリスティックでは、すべての USB オーディオ エンドポイントと Bluetooth オーディオ エンドポイントがジャック検出可能として扱われます。
フォーム ファクター
オーディオ エンドポイントのフォーム ファクターは、ヘッドホン、スピーカー、S/PDIF など、ユーザーが操作するオーディオ エンドポイントの物理的な属性を示します。 エンドポイントのフォーム ファクターを決定するために、オーディオ サブシステムは組み込みの固定ロジックを使用して、オーディオ ドライバーによって公開されるカーネル ストリーミング (KS) ピンのカテゴリ (KSNodeType) を特定のフォーム ファクターにマップします。 詳細については、「EndpointFormFactor」を参照してください。
エンドポイント フォーム ファクターの列挙値 |
---|
RemoteNetworkDevice |
スピーカー |
LineLevel |
ヘッドホン |
Microphone |
Headset |
Handset |
UnknownDigitalPassthrough |
SPDIF |
DigitalAudioDisplayDevice |
UnknownFormFactor |
KSNodeType
オーディオ ドライバーがエンドポイント上の KS ピンの KSNodeType を選択するのは、このドライバーにはオーディオ ジャックに接続される可能性があるオーディオ デバイスに関する詳細な情報があるためです。 そのため、KsNodeType は、フォーム ファクターよりもエンドポイントに関するより具体的な情報を明らかにします。
KSNodeType 列挙値 |
---|
KSNODETYPE_SPEAKER |
KSNODETYPE_MICROPHONE_ARRAY |
KSNODETYPE_HEADPHONES |
KsNodeType の詳細については、「ピン カテゴリ プロパティ」を参照してください。
バスの種類
この要素は、オーディオ エンドポイントを公開したオーディオ デバイスの列挙元のバスの種類を表します。
バスの種類の列挙値 |
---|
BTHENUM |
BTHHFENUM |
USB |
HDAUDIO |
PCI |
Unknown |
オーディオ サブシステムは、他のすべてのエンドポイント特性が同じ場合に、他のバスの種類よりも特定のバスの種類のエンドポイントを優先します。 たとえば、システムは、オンボードの HD オーディオ ヘッドフォンよりも Bluetooth ヘッドフォンを優先して、ユーザーに優れた通信エクスペリエンスを提供します。つまり、エンドユーザーがこの PC に Bluetooth ヘッドフォン デバイスを接続すると、システムによってこのデバイスが既定のデバイスになります。
一般的な位置
一般的な位置は、オーディオ エンドポイントが接続されているジャックまたはデバイスの物理的な総体的位置を示します。
一般的な場所の列挙値 |
---|
PrimaryBox (プライマリ システム シャーシ上で、ユーザーがアクセス可能) |
Internal (マザーボード上で、ボックスを開けずにアクセスすることは不可) |
Separate (モバイル ボックスなど) |
その他 |
幾何学的位置
幾何学的位置は、オーディオ エンドポイントが接続されているジャックまたはデバイスの幾何学的な位置を示します。
幾何学的位置の列挙値 |
---|
eGeoLocRear |
eGeoLocFront |
eGeoLocLeft |
eGeoLocRight |
eGeoLocTop |
eGeoLocBottom |
eGeoLocRearOPanel |
eGeoLocRiser |
SubtypeSpecific
サブタイプ固有のプロパティをは、エンドポイントのピン カテゴリ プロパティに依存するヒューリスティック値の将来的な拡張を可能にします。 サポート/非サポート機能を使用できるようになります。
SubtypeSpecific 機能の列挙値 |
---|
サポートされています |
NotSupported |
現在、サブタイプ固有のプロパティは、マイク配列ジオメトリに関連しています。 マイク配列ジオメトリのコンテキストでは、"サポート" はフロント/バック ジオメトリを意味します。 "非サポート" は、その他のジオメトリを示します。 複数のマイク配列が存在する場合は、フロント/バック ジオメトリの設定が適用される可能性があります。
Windows 10 のヒューリスティックの詳細
Windows 10 の既定のオーディオ エンドポイント ヒューリスティックでは、各エンドポイント要素が重み付けされます。 要素の優先度が高いほど、その重みが大きくなります。 このトピックでは、WeightFactor_Xxx を使用して要素の優先順位を識別します。
さらに、Windows 10 のヒューリスティックでは、要素カテゴリ内の各列挙値にランク値 (このトピックでは nRankXxx) が割り当てられます。 このランク値は、同じ要素の下にあるすべての列挙値の相対的な重要度を確立します。
これらの WeightFactor_Xxx と nRankXxx の値は、オペレーティング システムのインストール時に Windows によってレジストリに格納されます。 ヒューリスティックのランク計算のパラメーターのセットは、エンドポイントの特性によって異なります。 次のテーブルに、パラメーターのセットの例を示しています。
エンドポイント要素の重み | エンドポイント要素のランク値 |
---|---|
WeightFactor_JackDet | nRankJackDet |
WeightFactor_SubType | nRankSubType |
WeightFactor_FormFactor | nRankFormFactor |
WeightFactor_BusType | nRankBusType |
WeightFactor_GenLoc | nRankGenLoc |
WeightFactor_GeoLoc | nRankGeoLoc |
WeightFactor_SubtypeSpecific | nRankSubtypeSpecific |
オーディオ サブシステムは、次のように、すべての要素にわたってエンドポイントの重み付けランクを計算します。
WeightedRankValue =
WeightFactor_JackDet * nRankJackDet +
WeightFactor_SubType * nRankSubType +
WeightFactor_FormFactor * nRankFormFactor +
WeightFactor_BusType * nRankBusType +
WeightFactor_GenLoc * nRankGenLoc +
WeightFactor_GeoLoc * nRankGeoLoc |
WeightFactor_SubtypeSpecific * nRankSubtypeSpecific.
オーディオ サブシステムは、すべてのアクティブなエンドポイントの重み付けされたランク値を計算し、既定のオーディオ エンドポイントとしてランクが最も高いエンドポイントを選択します。
Windows 10 の既定のオーディオ エンドポイント選択ヒューリスティック メカニズムでは、例外機能もサポートされています。 この機能により、システムまたは OEM は、非常に高いまたは非常に低い重み付けランク値を持つ特性の特定のセットに一致するエンドポイントを、オーディオ サブシステムに指定させることができます。 このような指定を行うことで、予期しないシナリオに対処するときのシステムのヒューリスティックの柔軟性が高まります。
コンソール デバイス ロールと通信デバイス ロールのヒューリスティックは別々ですが、メカニズムはまったく同じで、ロールに基づいて要素の順序が異なります。
Windows 10 の受信トレイ ヒューリスティックの設定
Windows 10 は、このトピックのヒューリスティックな詳細に基づくの出荷時設定が行われています。 既定のコンソール オーディオ エンドポイントと既定の通信オーディオ エンドポイントの設定は異なります。 このセクションでは、両方の種類のエンドポイントの設定について説明します。
既定のコンソール オーディオ エンドポイントの受信トレイ ヒューリスティック設定
このセクションでは、コンソール オーディオ エンドポイントの各要素の既定のヒューリスティック設定について説明します。 要素は優先度順に一覧表示されます。つまり、オーディオ サブシステムが既定のコンソール エンドポイントを決定する場合、Windows 10 は次の一覧の最初の要素に最も高い優先順位を付けます。
ジャック検出機能
ジャック検出機能を備えたエンドポイントは、オーディオ周辺機器がシステムに物理的に接続されているかどうか、および電源が接続されているか取り外されているかに関する最新の情報をシステムに提供します。 この情報は、より優れたエンドユーザー エクスペリエンスを構築するのに役立ちます。そのため、Windows 10 では、この要素が最も優先度の高い要素として設定されます。 ジャック検出機能を持つエンドポイントは、他の要素がどうであれ、この機能を持たないエンドポイントよりも優先度が高くなります。
フォーム ファクター
Windows 10 では、Windows 7 とは異なるフォーム ファクターの優先順位が使用され、値はユーザーのフィードバックおよび調査に基づいて調整されています。
Windows 10 では、レンダー コンソール エンドポイントのフォーム ファクターの優先順位が次の優先順位で設定されます。
- ヘッドフォンとヘッドセット
- スピーカー
- LineLevel
- DigitalAudioDisplayDevice
- S/PDIF
- それ以外のもの (同じ最も低い優先順位で処理されます。つまり、with_nRankFormFactor_ が 0 に等しいです)
Windows 10 では、キャプチャ コンソール エンドポイントのフォーム ファクターの優先順位が次の優先順位で設定されます。
- Headset
- Microphone
- LineLevel
- それ以外のもの (同じ最も低い優先順位で処理されます。つまり、nRankFormFactor が 0 に等しいです)
たとえば、次の 3 つのオーディオ コンソール レンダー エンドポイントを持つシステムについて考えてみます。
- HD オーディオ 静的 ヘッドフォン エンドポイント (ジャック検出機能のないヘッドフォン)。
- 静的 S/PDIF 出力エンドポイント。
- 動的スピーカー エンドポイント (ジャック検出がサポートされているスピーカー)。
オーディオ サブシステムは Windows 10 システムのヒューリスティックを使用し、スピーカーのフォーム ファクターがヘッドフォンのフォーム ファクターより優先されている場合でも、既定のコンソール レンダー オーディオ エンドポイントとして動的スピーカー エンドポイントを選択します。 スピーカー エンドポイントが選択される理由は、フォーム ファクターよりも優先度が高いジャック検出に対応しているためで、一方、ヘッドフォンにはこの機能がありません。
上記の例に動的 USB ヘッドフォン エンドポイントが導入された場合、Windows 7 オーディオ サブシステムは、このエンドポイントを既定のコンソール レンダー エンドポイントとして選択します。 この選択が行われる理由は、両方のデバイスがジャック検出をサポートする場合、ヘッドフォン フォームファクターの方がスピーカー フォームファクターよりも優先度が高いためです。
KSNodeType
前述したように、KSNodeType は、エンドポイントに接続されているオーディオ デバイスのフォーム ファクターで示される情報よりも詳細な情報を提供します。 Windows 10 では、マイクに関連する 3 つの KSNodeTypes が定義されており、異なる KSNodeType のマイク のフォーム ファクターをもつエンドポイントにさらに優先順位を付けます。 これらは、次のように優先順位でランク付けされます。
- KSNODETYPE_PROCESSING_MICROPHONE_ARRAY
- KSNODETYPE_MICROPHONE_ARRAY
- KSNODETYPE_OMNI_DIRECTIONAL_MICROPHONE
- それ以外のもの (同じ最も低い優先順位で処理されます。つまり、nRankSubType が 0 に等しいです)
たとえば、次の 2 つのオーディオ キャプチャ エンドポイントを持つシステムを考えてみましょう。
- KSNODETYPE_MICROPHONE_ARRAY を持つ組み込みの静的マイク配列エンドポイント。
- KSNODETYPE_MICROPHONE を持つ静的マイク エンドポイント。
オーディオ サブシステムが、既定のコンソール キャプチャ オーディオ エンドポイントを選択するためにシステム ヒューリスティックを使用すると、マイク配列エンドポイントが選択されます。 マイク配列が選択される理由は、どちらのエンドポイントも同じジャック検出機能とフォーム ファクターを持っているにもかかわらず、マイク配列の KsNodeType がマイクの KsNodeType よりも優先されるためです。 つまり、KSNODETYPE_MICROPHONE_ARRAY は、一覧には含まれずに "その他の項目" カテゴリに分類される KSNODETYPE_MICROPHONE よりも、高い優先順位が付けられているということです。
KsNodeType の詳細については、「ピン カテゴリ プロパティ」を参照してください。
バスの種類
Windows 10 では、エンドポイント バスの種類の列挙値が、次の優先順位 (優先度が最も高いものから最も低いもの) でランク付けされます。
- USB
- HDAudio と UnknownBusType (通常は SOC システム)
- PCI
- BTHENUM
- BTHHFENUM
- その他 (同じ最も低い優先順位で処理されます。つまり、nRankBusType が 0 に等しいです)
一般的な位置
Windows 10 では、一般的な位置の列挙値が、次の優先順位 (優先度が最も高いものから最も低いもの) でランク付けされます。
- PrimaryBox と Internal
- その他 (同じ最も低い優先順位で処理されます。つまり、nRankGenLoc が 0 に等しいです)
オーディオ ドライバーは、KSPROPERTY_JACK_DESCRIPTION プロパティを使用してエンドポイントの一般的な位置情報を報告します。 詳細については、「Jack Description プロパティ」を参照してください。
幾何学的位置
Windows 10 では、幾何学的な位置の列挙値が、次の優先順位 (優先度が最も高いものから最も低いもの) でランク付けされます。
- Front と InsideMobileLid
- Bottom、Left、OutsideMobileLid、Rear、Right、Top
- RearPanel
- その他 (同じ最も低い優先順位で処理されます。つまり、nRankGeoLoc が 0 に等しいです)
オーディオ ドライバーは、KSPROPERTY_JACK_DESCRIPTION プロパティを使用してエンドポイントの幾何学的な位置情報を報告します。 詳細については、「Jack Description プロパティ」を参照してください。
例外
上述のヒューリスティック要素に加えて、Windows 10 には、既定のコンソール デバイス ヒューリスティックに対して 3 つの例外があります。 Windows 7 では例外は 1 つだけでした。
Windows 7 と 10 の両方に存在する最初の例外では、携帯電話やスピーカーフォンなどの明らかな通信指向のエンドポイントが既定のコンソール エンド ポイントとして選択されるのを防ぎます。 具体的には、オーディオ サブシステムが、次のいずれかの KSNodeType 値を持つエンドポイントの WeightedRankValue の結果をダウングレードします。
- KSNODETYPE_SPEAKER_AND_HEADSET
- KSNODETYPE_SPEAKERS_STATIC_JACK
- KSNODETYPE_HANDSET
- KSNODETYPE_SPEAKERPHONE_NO_ECHO_REDUCTION
- KSNODETYPE_ECHO_SUPPRESSING_SPEAKERPHONE
- KSNODETYPE_ECHO_CANCELING_SPEAKERPHONE
- KSNODETYPE_PHONE_LINE
- KSNODETYPE_TELEPHONE
- KSNODETYPE_DOWN_LINE_PHONE
- モバイル シナリオに存在する携帯オーディオ固有のエンドポイント
Windows 10 にのみ存在する 2 つ目の例外では、明らかな通信指向のエンドポイントが既定のコンソール エンドポイントとして選択されるのを防ぎます。 最初の例外とは異なり、この例外ではバスの種類も考慮されます。 その理由は、多くの一般的な USB ヘッドフォンは、デバイスが通信固有ではないにもかかわらず、次の KSNodeTypes を使用するためです。 Windows 7 ランク付けアルゴリズムでは、すべてのバスの種類の既定のコンソール エンドポイントに対して、これらの KSNodeTypes がダウングレードされていました。 Windows 10 の場合、これらの KSNodeTypes は USB 以外のバスの種類に対してのみダウングレードされます。
- KSNODETYPE_PERSONAL_MICROPHONE
- KSNODETYPE_COMMUNICATION_SPEAKER
- KSNODETYPE_HEADSET
3 つ目の例外では、ネットワークを使用してシステムに物理的に接続される "個人用" エンドポイント (ヘッドホンやヘッドセットなど) に対して、明示的に設定が取り込まれます。 例としては、有線 USB ヘッドセットと有線の 3.5 mm ヘッドフォンがあります。 前の 2 つの例外とは異なり、この例外は、これらのエンドポイントを既定のコンソール エンドポイントで優先されるようにアップグレードします。 この例外は Windows 10 の新機能です。ユーザーのプライバシーを向上させるために、他人に聞こえるラウド スピーカー エンドポイントよりも、ユーザーにしか聞こえないエンドポイントを優先します。
既定の通信オーディオ エンドポイントの受信トレイ ヒューリスティック設定
このセクションでは、通信オーディオ エンドポイントの各要素の既定のヒューリスティック設定について説明します。 要素は優先度順に一覧表示されます。つまり、Windows 10 では、既定の通信エンドポイントを計算するときに、次の一覧の最初の要素に最も高い優先順位が付きます。 コンソールの既定のエンドポイントと通信の既定のエンドポイントにおけるヒューリスティックの唯一の違いは、フォーム ファクターの設定と例外ルールです。
ジャック検出機能
ジャック検出機能のヒューリスティック設定は、既定の通信オーディオ エンドポイントと既定のコンソール オーディオ エンドポイントの両方で同じです。
フォーム ファクター
レンダーの通信の既定デバイスとキャキャプチャ信の既定デバイスには、異なる優先順位リストが作成されます。
通信の既定のキャプチャ エンドポイントのフォーム ファクターの優先順位 (最も高いものから最も低いものの順) は、次のとおりです。
- Headset
- Handset
- Microphone
- LineLevel
通信の既定のレンダー エンドポイントのフォーム ファクターの優先順位 (最も高いものから最も低いものの順) は、次のとおりです。
- Headset
- Handset
- ヘッドホン
- スピーカー
- LineLevel
- DigitalAudioDisplayDevice (HDMI または DisplayPort)
- S/PDIF
- それ以外のもの (同じ最も低い優先順位で処理されます。つまり、nRankFormFactor が 0 に等しいです)
KSNodeType
KsNodeType のヒューリスティック設定は、既定の通信オーディオ エンドポイントと既定のコンソール オーディオ エンドポイントの両方で同じです。
バスの種類
バスの種類のヒューリスティック設定は、既定の通信オーディオ エンドポイントと既定のコンソール オーディオ エンドポイントの両方で同じです。
一般的な位置
Windows 10 では、一般的な位置の列挙値が、次の優先順位 (優先度が最も高いものから最も低いもの) でランク付けされます。
- 分離する
- PrimaryBox
- Internal
- その他 (同じ最も低い優先順位で処理されます。つまり、nRankGenLoc が 0 に等しいです)
オーディオ ドライバーは、KSPROPERTY_JACK_DESCRIPTION プロパティを使用してエンドポイントの一般的な位置情報を報告します。 詳細については、「Jack Description プロパティ」を参照してください。
幾何学的位置
Windows 10 では、幾何学的な位置の列挙値が、次の優先順位 (優先度が最も高いものから最も低いもの) でランク付けされます。
- Front と InsideMobileLid
- その他 (同じ最も低い優先順位で処理されます。つまり、nRankGeoLoc が 0 に等しいです)
オーディオ ドライバーは、KSPROPERTY_JACK_DESCRIPTION プロパティを使用してエンドポイントの幾何学的な位置情報を報告します。 詳細については、「Jack Description プロパティ」を参照してください。
例外
前述のヒューリスティック要素に加えて、Windows 10 では、既定の通信デバイス ヒューリスティックに対して 3 つの例外が実装されていますが、Windows 7 には 1 つしかありませんでした。
1 つ目の例外では、既定の通信エンドポイントとして選択されるように、ハンドセットやスピーカーフォンなどの明らかな通信指向のエンドポイントが優先されます。 具体的には、オーディオ サブシステムは、次のいずれかの値に一致する KSNodeType を持つエンドポイントの WeightedRankValue の結果をアップグレードします。
- KSNODETYPE_PERSONAL_MICROPHONE
- KSNODETYPE_HEADSET
- KSNODETYPE_PHONE_LINE
- KSNODETYPE_DOWN_LINE_PHONE
- KSNODETYPE_COMMUNICATION_SPEAKER
- KSNODETYPE_HANDSET
- KSNODETYPE_TELEPHONE
- KSNODETYPE_SPEAKERPHONE_NO_ECHO_REDUCTION
- KSNODETYPE_ECHO_SUPPRESSING_SPEAKERPHONE
- KSNODETYPE_ECHO_CANCELING_SPEAKERPHONE
2 つ目の例外は、通信の使用に適さない、明らかなコンソール指向のエンドポイントであるエンドポイントを回避します。
- KSNODETYPE_SPEAKERS_STATIC_JACK
- モバイル シナリオにのみ存在する特殊なオーディオ エンドポイント。通信オーディオには使用できません
この執筆時点では、携帯オーディオ エンドポイントを優先する 3 つ目の例外が存在します。 この例外は、携帯ネットワーク機能を備えたモバイル シナリオにのみ存在し、このドキュメントの範囲外です。 この種類のエンドポイントはモバイル システムにのみ存在するため、この例外は無視しても問題ありません。