オーディオ アダプター用のデバイス インターフェイスのインストール
クライアントは、ベンダーがアダプターの INF ファイルで指定するデバイス インターフェイスのセットを介してオーディオ デバイスにアクセスします。 INF ファイルで指定されたデバイス インターフェイスには、アダプター ドライバーがデバイスを初期化するときに作成するサブデバイスとの 1 対 1 の対応があります (「サブデバイスの作成」を参照)。 デバイス インターフェイスごとに、INF ファイルは、インターフェイスのレジストリ キーの下において、ユーザー モードでアクセスできる FriendlyName エントリ値を指定します。
カーネル ストリーミング アーキテクチャでは、トポロジ カテゴリ (KSPROPERTY_TOPOLOGY_CATEGORIES を参照) はデバイス インターフェイス クラスを表しています。
次の表に、オーディオ アダプターがサブデバイスの機能を記述するために使用する可能性が最も高いトポロジ カテゴリを示します。
カテゴリ | 説明 |
---|---|
KSCATEGORY_ACOUSTIC_ECHO_CANCEL | 音響エコー キャンセルを実行できるオーディオ デバイス (「DirectSound キャプチャ エフェクト」を参照) は、このカテゴリに自身を登録します。 |
KSCATEGORY_AUDIO | すべてのオーディオ デバイスがこのカテゴリに登録されます。 |
KSCATEGORY_CAPTURE | データ ストリームをキャプチャできるオーディオ デバイスは、このカテゴリの下に自身を登録します。 |
KSCATEGORY_DATATRANSFORM | ストリームに対してデータ変換を実行するオーディオ デバイスは、このカテゴリに自身を登録します。 |
KSCATEGORY_MIXER | データ ストリームをミキシングできるオーディオ デバイスは、このカテゴリの下に自身を登録します。 |
KSCATEGORY_RENDER | データ ストリームをレンダリングできるオーディオ デバイスは、このカテゴリの下に自身を登録します。 |
KSCATEGORY_SYNTHESIZER | MIDI メッセージを wave オーディオ サンプルまたはアナログ出力信号に変換できるオーディ オデバイスは、このカテゴリに登録されます (「シンセサイザーと Wave シンク」を参照)。 |
KSCATEGORY_TOPOLOGY | デバイスのトポロジ ミニポート ドライバーは、このカテゴリの下に自身を登録します。 |
KSCATEGORY_DRM_DESCRAMBLE | DRM で保護された wave ストリームを解除できるオーディオ デバイスは、このカテゴリの下に自身を登録します (「デジタル著作権管理」を参照)。 |
トポロジ カテゴリの詳細な一覧については、ヘッダー ファイル Ks.h および Ksmedia.h で定義されている KSCATEGORY_XXX GUID をご覧ください。
すべてのオーディオ デバイスは KSCATEGORY_AUDIO に分類されますが、オーディオ デバイスは、KSCATEGORY_SYNTHESIZER (シンセサイザーの場合) や KSCATEGORY_CAPTURE (オーディオ キャプチャ デバイスの場合) などの追加カテゴリに分類される場合もあります。 INF ファイルがデバイスに対して指定するカテゴリごとに、Windows インストーラーによって、そのデバイスの一連のレジストリ エントリがカテゴリ名の下に作成されます (「フィルター ファクトリ」を参照)。
組み込みのシンセサイザーを含むデバイスのみ、カテゴリ KSCATEGORY_SYNTHESIZER の下に自身を登録する必要があります。 このカテゴリでは、純粋な MPU-401 デバイスが除外される点に注意してください。 純粋な MPU-401 デバイス (UART に対して生 MIDI の入出力を行うことができるデバイス) は、次のカテゴリの下に登録する必要があります。
KSCATEGORY_AUDIO
KSCATEGORY_RENDER
KSCATEGORY_CAPTURE
SysAudio システム ドライバーは、その仮想オーディオ デバイス専用のレジストリ カテゴリ KSCATEGORY_AUDIO_DEVICE を予約する点に注意してください。 アダプター ドライバーは、このカテゴリに自身を登録しません。
次の例では、アダプターがオーディオ デバイスに対して通常サポートする 4 つの一般的なシステム定義デバイス インターフェイスをインストールします。
例: オーディオ デバイス インターフェイスのインストール
この例では、XYZ オーディオ デバイスの device-install セクションでは、INF AddInterface ディレクティブを使って 4 つのオーディオ アダプター インターフェイスをインストールします。 次の 4 つの各ディレクティブは、インターフェイスに一意の参照文字列を割り当てます。この参照文字列は、アダプター ドライバーが各インターフェイス クラスのインスタンスを区別するために使用できます。
[XYZ-Audio-Device.Interfaces]
AddInterface=%KSCATEGORY_AUDIO%,%KSName_Wave%,XYZ-Audio-Device.Wave
AddInterface=%KSCATEGORY_RENDER%,%KSName_Wave%,XYZ-Audio-Device.Wave
AddInterface=%KSCATEGORY_CAPTURE%,%KSName_Wave%,XYZ-Audio-Device.Wave
AddInterface=%KSCATEGORY_TOPOLOGY%,%KSName_Topology%,XYZ-Audio-Device.Topology
最初の 3 つの AddInterface ディレクティブは、XYZ-Audio-Device.Wave という名前の add-interface セクションを指定します。 最後に、XYZ-Audio-Device.Topology という名前の add-interface セクションを指定します。 各 add-interface セクションは、\DeviceClasses\<InterfaceGUID> レジストリ キーの下のユーザー モードでアクセスできるデバイス インターフェイス サブキーに、次のレジストリ エントリを追加します。
FriendlyName レジストリ エントリは、各デバイス インターフェイスのフレンドリ名を指定します。
Microsoft DirectShow には、プロキシ GUID 値に設定された CLSID レジストリ エントリが必要です。これは、アダプターが KSProxy システム ドライバーによってアクセスおよび制御できることを示しています。
次の例に、各インターフェイスの FriendlyName と CLSID をレジストリに追加する INF ファイル エントリを含む、2 つの add-interface セクションを示します。
[XYZ-Audio-Device.Wave]
AddReg=XYZ-Audio-Device.Wave.AddReg
[XYZ-Audio-Device.Wave.AddReg]
HKR,,FriendlyName,,%WaveDeviceName%
HKR,,CLSID,,%Proxy.CLSID%
[XYZ-Audio-Device.Topology]
AddReg=XYZ-Audio-Device.Topology.AddReg
[XYZ-Audio-Device.Topology.AddReg]
HKR,,FriendlyName,,%WaveDeviceMixerName%
HKR,,CLSID,,%Proxy.CLSID%
この例のキーワード HKR は、デバイスのシステム提供レジストリ パスを示しています。 詳しくは、「INF AddReg ディレクティブ」をご覧ください。
この例の文字列セクションを次に示します。
[Strings]
KSCATEGORY_AUDIO="{6994AD04-93EF-11D0-A3CC-00A0C9223196}"
KSCATEGORY_RENDER="{65E8773E-8F56-11D0-A3B9-00A0C9223196}"
KSCATEGORY_CAPTURE="{65E8773D-8F56-11D0-A3B9-00A0C9223196}"
KSCATEGORY_TOPOLOGY="{DDA54A40-1E4C-11D1-A050-405705C10000}"
Proxy.CLSID="{17CCA71B-ECD7-11D0-B908-00A0C9223196}"
WaveDeviceName="XYZ Audio Device"
WaveDeviceMixerName="XYZ Audio Device Super Mixer"
AddInterface ディレクティブが KSCATEGORY_XXX デバイス インターフェイスに対して指定する文字列名は、アダプター ドライバーが文字列定数として内部的に同じ名前を使用するため、ローカライズできません。 Windows Driver Kit (WDK) のサンプル アダプター ドライバーは、オーディオ デバイス インターフェイスに以下の文字列名を使用します。
KSNAME_Wave="Wave"
KSNAME_UART="UART"
KSNAME_FMSynth="FMSynth"
KSNAME_Topology="Topology"
KSNAME_Wavetable="Wavetable"
KSNAME_DMusic="DMusic"
統一のため、独自のドライバーでは、対応するデバイス インターフェイスにこれらの同じ名前を割り当てる必要があります。 ドライバーが独自の追加のデバイス インターフェイスをサポートしている場合、これらのインターフェイス用に独自の名前を作成できます。 ドライバーが使用する名前が INF ファイルの名前と一致していることを確認します。 文字列が一致しない場合、システム セットアップによりドライバーが読み込まれません。