次の方法で共有


オーディオ エンドポイント デバイスのフレンドリ名

Windows Vista、Windows Server 2008 以降のバージョンの Windows では、オーディオ サブシステムにより、スピーカー、ヘッドフォン、マイク、CD プレーヤーなどのオーディオ エンドポイント デバイスの概念がサポートされています。 このオーディオ エンドポイントの概念は、ユーザーが直接操作するエンドポイント デバイスを参照するユーザー インターフェイスを持つ、わかりやすいオーディオ アプリケーションを作成するのに役立ちます。 これらのエンドポイントには、アプリケーションがユーザー インターフェイスに表示できる "スピーカー"、"ヘッドフォン"、"マイク"、"CD プレーヤー" などのフレンドリ名があります。 エンドポイント デバイスについて詳しくは、「オーディオ エンドポイント デバイス」をご覧ください。

オーディオ サブシステムは、オーディオ アダプター上のプラグ アンド プレイ (PnP) デバイスを KS フィルターとしてモデル化します。 データ ストリームは、KS ピンを介してフィルターを開始および終了します。 ブリッジ ピンは、オーディオ エンドポイント デバイスが KS フィルターに接続する KS ピンです。 ブリッジ ピンの詳細については、「オーディオ フィルター グラフ」を参照してください。

オーディオ サブシステムは、エンドポイント デバイスが接続するブリッジ ピンのプロパティを調べることにより、オーディオ エンドポイント デバイスに関する情報を取得します。 このようなプロパティの 1 つは、ピン カテゴリ プロパティ (KSPROPERTY_PIN_CATEGORY) です。

各 KS フィルターに対して、アダプター ドライバーは、フィルターの KS ピンのプロパティを記述する PCPIN_DESCRIPTOR 構造のテーブルを提供します。 ピン カテゴリ GUID は、PCPIN_DESCRIPTOR 構造の KsPinDescriptor.Category メンバーに格納されます。 ブリッジ ピンの場合、ピン カテゴリ GUID の値は、ブリッジ ピンに接続するエンドポイントの種類を示しています。 たとえば、ピン カテゴリ GUID KSNODETYPE_MICROPHONE は、ブリッジ ピンがマイクに接続していることを示しており、GUID KSNODETYPE_SPEAKERはブリッジ ピンがスピーカーに接続することを示しています。 KSNODETYPE_XXX GUID は、Ksmedia.h ヘッダー ファイルで定義されています。

加えて、PCPIN_DESCRIPTOR には、一意の名前でピンを識別するために使用できる GUID が含まれています。 このピン名 GUID は、PCPIN_DESCRIPTOR 構造の KsPinDescriptor.Name メンバーに格納されます。 この名前 GUID は、レジストリで見つかったフレンドリ名をピンに関連付けるため、(KSPROPERTY_PIN_NAME) プロパティによって使用されます。

オーディオ サブシステムは、KSPROPERTY_PIN_NAME プロパティを呼び出して、フレンドリ名をオーディオ エンドポイントに関連付けます。 KS は、最初に KsPinDescriptor.Name GUID を記述するレジストリ内の Unicode 文字列を検索することにより、この要求を処理します。 KS でエントリが見つからない場合、レジストリで KsPinDescriptor.Category GUID を記述する Unicode 文字列が検索されます。

Windows 10 October 2018 Update バージョン 1809 以降では、レジストリを検索するとき、KS はまずデバイスのソフトウェア キーのエントリを探します。 これは、デバイス ドライバーの INF の [Models] セクションによって参照される AddReg セクションを通じて INF によって作成されます。 AddReg セクションでは、HKR\MediaCategories キーを使ってこれらのエントリを構築します。 これにより、ドライバー開発者は、GUID がデバイスに対して一意であるかどうかに関係なく、名前とカテゴリ GUID の両方のデバイス固有のフレンドリ名を作成できます。

デバイスのソフトウェア キーにエントリがインストールされていない場合、またはドライバーが Windows 10 バージョン 1809 より前のオペレーティング システムで実行されている場合、KS は MediaCategories レジストリ キーをチェックします。 この 2 番目のキーは、グローバル名前空間として扱われます。 Windows 10 バージョン 1809 以降では、この領域はグローバル定義用に予約されているため、新しいドライバーでは変更しないでください。 このキーの下のエントリの変更は、今後の OS リリースではサポートされなくなります。

標準カテゴリの GUID を持つピンを公開するオーディオ デバイスには、デバイス INF に受信トレイの KS.INF または KSCAPTUR.INF 名前登録が含まれている必要があります。 これらの受信トレイ INF には、ドライバーが設定する可能性がある定義済みカテゴリ GUID の既定のフレンドリ名定義が含まれています。 これらは、PCPIN_DESCRIPTOR 構造の KsPinDescriptor.Category メンバーにあるのと同じ GUID です。 たとえば、カテゴリ GUID KSNODETYPE_MICROPHONE エントリには、関連付けられたフレンドリ名 "microphone" があり、カテゴリ GUID KSNODETYPE_SPEAKER エントリには、"speakers" というフレンドリ名が関連付けられています。

カテゴリ GUID と名前 GUID の GUID とフレンドリ名はどちらも、レジストリに格納されます。 レジストリ内の GUID 名ペアごとに、MEDIACategories キーの下のサブキーとして GUID 文字列が使用されます。 GUID キーの下で、"Name" 変数の下に Unicode 文字列値を表示します。

オーディオ サブシステムによって定義されたフレンドリ名とピン カテゴリのいずれもデバイスを適切に説明していない場合、独自のピン カテゴリと名前 GUID を定義し、INF でフレンドリ名を関連付けることができます。 ピン カテゴリ GUID が一意であることを確認するには、Uuidgen.exe などのユーティリティを使用して GUID を生成します。 次に、オーディオ アダプターをインストールする INF ファイルを変更してピン カテゴリ GUID とフレンドリ名をレジストリに書き込みます。 次のコード例は、2 つのピン カテゴリ GUID とそれに関連付けられているフレンドリ名をレジストリに追加する、INF ファイルのフラグメントを示しています。

[Manufacturer]
MyOEMName=Unicorn,NTamd64

[Unicorn.NTamd64]
MyDeviceName=MyDevice,Root\MyDevice

[MyDevice.NT]
Include=ks.inf, kscaptur.inf
Needs=KS.Registration, KSCAPTUR.Registration.NT
CopyFiles=MyDevice.CopyFiles
AddReg=PinNameRegistration

...

[PinNameRegistration]
HKR,%MediaCategories%\%GUID.MyNewEndpointCategory%,Name,,%Name.MyNewEndpointCategory%
HKR,%MediaCategories%\%GUID.MyNewEndpointName%,Name,,%Name.MyNewEndpointName%

...

[Strings]
MyOEMName="Unicorns Inc."
MyDeviceName="Sparkly Unicorn"
MediaCategories="MediaCategories"

GUID.MyNewEndpointCategory="{B72FBD1A-4634-4240-B207-0E6B52F3701C}"
GUID.MyNewEndpoint_2="{71DD3A5D-E303-49A0-ACEE-908634AA9520}"

Name.MyNewEndpointCategory="Unicorn"
Name.MyNewEndpointName="Fred the Unicorn"

両方の GUID 文字列が Uuidgen.exe によって生成されています。

アプリケーションは、デバイスの IPropertyStore インターフェイスを使用することにより、オーディオ エンドポイント デバイスのプロパティにアクセスできます。 インターフェイスは、Functiondiscoverykeys_devpkey.h および Mmdeviceapi.h ヘッダー ファイルで定義されているプロパティ キーを使用して、プロパティを識別します。 アプリケーションでは、PKEY_Device_FriendlyName プロパティ キーを使用してエンドポイント デバイスのフレンドリ名を取得できます。 スペースに制約のあるユーザー インターフェイスの場合、PKEY_Device_DeviceDesc プロパティ キーを使用することにより、フレンドリ名の短いバージョンを取得できます。 これらのプロパティ キーについて詳しくは、「IMMDevice::OpenPropertyStore」をご覧ください。

IPropertyStore インターフェイス インスタンスには、オーディオ エンドポイント デバイスの永続的なプロパティ ストアが保持されます。 プロパティ ストアは、レジストリの KS ピン カテゴリ GUID に関連付けられているフレンドリ名文字列から、PKEY_Device_DeviceDesc プロパティ キーの初期値をコピーします。 アプリケーションは、プロパティ ストアから PKEY_Device_DeviceDesc プロパティ値 (名前文字列) を読み取ることができますが、値を変更することはできません。 ただし、ユーザーは Windows マルチメディア コントロール パネル (Mmsys.cpl) を使用して名前を変更することができます。 たとえば、Windows Vista では、次の手順を使用して、レンダリング エンドポイント デバイスの名前を変更することができます。

  1. Mmsys.cpl を実行するには、コマンド プロンプト ウィンドウを開き、次のコマンドを入力します。

    mmsys.cpl
    

    (または、タスク バーの右側にある通知領域のスピーカー アイコンを右クリックし、[再生デバイス] をクリックすることにより、Mmsys.cpl を実行することもできます。)

  2. レンダリング デバイスの名前をクリックし、[プロパティ] をクリックします。

  3. プロパティ ウィンドウで、[全般] タブをクリックします。フレンドリ名は、プロパティ シートの上部にあるテキスト ボックスに表示されます。 フレンドリ名を編集し、[OK] をクリックして変更を保存することができます。

上記の手順では、オーディオ エンドポイント デバイスのプロパティ ストアに格納されているフレンドリ名を変更します。 これらの手順は、同じ KS ピン カテゴリに属する他のオーディオ エンドポイント デバイスに関連付けられているフレンドリ名には影響を与えません。 さらに、名前について KS に直接クエリを実行するコンポーネントにも影響を与えません。