安裝音訊配接器的裝置介面
用戶端會透過廠商在介面卡 INF 檔案中指定的 一組裝置介面 來存取音訊裝置。 INF 檔案中指定的裝置介面與介面卡驅動程式初始化裝置時所建立的子裝置介面有一對一對應, (請參閱 子裝置建立) 。 針對每個裝置介面,INF 檔案會指定 易記名稱 專案值,這個值可在介面的登錄機碼下,在使用者模式中存取。
在核心串流架構中,拓撲類別 (請參閱 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 保護的波串流註冊到此類別之下, (請參閱 Digital Rights Management) 。 |
如需拓撲類別的完整清單,請參閱標頭檔 Ks.h 和 Ksmedia.h 中定義的 KSCATEGORY_XXX GUID。
所有音訊裝置都會分類為KSCATEGORY_AUDIO,但音訊裝置也可能分類為其他類別,例如音訊轉譯裝置) 的KSCATEGORY_RENDER (,或合成器) 的KSCATEGORY_SYNTHESIZER (。 針對 INF 檔案針對裝置指定的每個類別,Windows Installer 會在類別名稱下建置該裝置的一組登錄專案, (請參閱 Filter Factoryies) 。
只有包含內建合成器的裝置應該在類別KSCATEGORY_SYNTHESIZER下註冊本身。 請注意,此類別排除純 MPU-401 裝置。 純 MPU-401 裝置可以輸出或輸入原始 MIDI 到 UART 或從 UART 輸入,應該在下列類別下註冊自己:
KSCATEGORY_AUDIO
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 的 add-interface 區段。 每個 add-interface 區段都會將下列登錄專案新增至裝置介面子機碼,該子機碼可在 \DeviceClasses\ <InterfaceGUID> 登錄機碼下的使用者模式中存取:
FriendlyName 登錄專案會指定每個裝置介面的易記名稱。
Microsoft DirectShow 需要 CLSID 登錄專案,設定為 Proxy 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 檔案中的名稱。 如果字串不相符,系統安裝程式將不會載入驅動程式。