用戶端會透過廠商在適配卡 INF 檔案中指定的一組 裝置介面 來存取音訊裝置。 INF 檔案中指定的裝置介面與適配卡驅動程式在初始化裝置時所建立的子裝置介面具有一對一對應(請參閱 Subdevice Creation)。 針對每個裝置介面,INF 檔案會在使用者模式下於介面的登錄機碼中,指定 FriendlyName 項目值。
在核心串流架構中,拓撲類別 (請參閱 KSPROPERTY_TOPOLOGY_CATEGORIES) 代表裝置介面類別。
下表列出音訊配接器最有可能用來描述其子裝置功能的拓撲類別。
| 類別 | 說明 |
|---|---|
| KSCATEGORY_ACOUSTIC_ECHO_CANCEL | 可執行聲場回音取消的音訊裝置(請參閱 DirectSound 擷取效果)會在此類別下註冊自己。 |
| KSCATEGORY_AUDIO | 所有音訊裝置都會在此類別下自行註冊。 |
| KSCATEGORY_CAPTURE | 可擷取數據流的音訊裝置會在此類別下自行註冊。 |
| KSCATEGORY_DATATRANSFORM | 在數據流上執行數據轉換的音訊裝置會在此類別下註冊自己。 |
| KSCATEGORY_MIXER | 可混合數據流的音訊裝置會在此類別下自行註冊。 |
| KSCATEGORY_RENDER | 可轉譯數據流的音訊裝置會在此類別下自行註冊。 |
| KSCATEGORY_SYNTHESIZER | 可將MIDI訊息轉換成波聲樣本或類比輸出訊號的音訊裝置,會在此類別下自行註冊(請參閱 合成器和波接收器)。 |
| KSCATEGORY_TOPOLOGY | 裝置的 拓撲迷你埠驅動程式 會在此類別下註冊自己。 |
| KSCATEGORY_DRM_DESCRAMBLE | 無法解構受DRM保護的波流音訊裝置會在此類別下註冊自己(請參閱 數位版權管理)。 |
如需拓撲類別的完整清單,請參閱頭檔 Ks.h 和 Ksmedia.h 中定義的 KSCATEGORY_XXX GUID。
所有音訊裝置都分類在KSCATEGORY_AUDIO之下,但音訊裝置也可能分類為其他類別,例如KSCATEGORY_RENDER(適用於音訊轉譯裝置)或KSCATEGORY_SYNTHESIZER(針對合成器)。 針對 INF 檔案為裝置指定的每個類別,Windows Installer 會在類別名稱下建置該裝置的一組登錄專案(請參閱 Filter Factorys)。
只有包含內建合成器的裝置應該在類別KSCATEGORY_SYNTHESIZER下註冊自己。 請注意,此類別會排除純 MPU-401 裝置。 純粹的 MPU-401 裝置,可以通過 UART 輸出或輸入原始 MIDI,應該在下列類別下自行註冊:
KSCATEGORY_音訊
KSCATEGORY_RENDER
KSCATEGORY_CAPTURE
請注意 ,SysAudio 系統驅動程式 會保留其 虛擬音訊裝置專用的登錄類別KSCATEGORY_AUDIO_DEVICE。 配接器驅動程式不應在此類別中自行註冊。
下列範例會安裝配接器通常支援音訊裝置的四個通用系統定義裝置介面。
範例:安裝音訊裝置介面
在此範例中,XYZ 音訊裝置的 device-install 區段會使用 INF AddInterface 指示詞 來安裝四個音訊配接器介面。 在下列四個指示詞中,每個指示詞都會將唯一的參考字串指派給介面,配接器驅動程式可用來區分每個介面類別的實例。
[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
前三個 AddInterface 指示詞會指定名為 XYZ-Audio-Device.Wave 的 add-interface 區段。 最後指定了一個名為 XYZ-Audio-Device.Topology 的新增介面區段。 每個新增介面區段都會將下列登錄項目新增至裝置介面子機碼,可在 \DeviceClasses\<InterfaceGUID> 登錄機碼下的使用者模式中存取:
FriendlyName 登錄專案會指定每個裝置介面的易記名稱。
Microsoft DirectShow 需要 CLSID 註冊表項,設置為代理 GUID 值,這表示轉接器可由 KSProxy 系統驅動程式存取和控制。
這兩個新增介面的區段會出現在下列範例中,其中包含將每個介面的 FriendlyName 和 CLSID 新增至登錄表的 INF 檔案項目:
[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 區段。
[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 驅動程式套件 (WDK) 中的範例配接器驅動程式會針對其音訊裝置介面使用下列字串名稱:
KSNAME_Wave="Wave"
KSNAME_UART="UART"
KSNAME_FMSynth="FMSynth"
KSNAME_Topology="Topology"
KSNAME_Wavetable="Wavetable"
KSNAME_DMusic="DMusic"
為了統一性,您的專屬驅動程式應該將這些相同的名稱指派給其對應的裝置介面。 如果您的驅動程式支援專屬的其他裝置介面,您可以為這些介面發明自己的專屬名稱。 請確定驅動程式使用的名稱符合 INF 檔案中的名稱。 如果字串不相符,系統安裝程式將不會載入驅動程式。