USB 音訊 2.0 驅動程式
從 Windows 10 1703 版開始,USB 音訊 2.0 驅動程式隨附於 Windows。 其設計目的是支援 USB 音訊 2.0 裝置類別。 驅動程式是 WaveRT 音訊埠類別迷你埠。
驅動程式名為: usbaudio2.sys ,且相關聯的 inf 檔案是 usbaudio2.inf。
驅動程式會在設備管理器中識別為「USB 音訊類別 2 裝置」。 如果有的話,此名稱將會以USB產品字串覆寫。
當相容的裝置連接至系統時,會自動啟用驅動程式。 不過,如果系統或 Windows Update 上有第三方驅動程式,則會安裝該驅動程式並覆寫類別驅動程式。
架構
usbaudio2.sys 驅動程式適用於更廣泛的 Windows USB 音訊架構,如下所示。
相關的USB規格
下列 USB 規格會定義 USB 音訊,並在本文中參考。
- USB-2 是指通用序列總線規格 2.0 版
- ADC-2 是指音訊裝置的 USB 裝置類別定義 2.0 版。
- FMT-2是指 2.0 版的音訊數據格式規格。
USB-IF 是維護 官方 USB 規格、測試規格和工具的特殊興趣群組。
自動格式
驅動程式支援下列格式。 替代設定會忽略以 FMT-2 或未知格式定義的另一種格式。
類型 I (FMT-2 2.3.1) :
- 每個範例 8..32 位的 PCM 格式 (FMT-2 2.3.1.7.1)
- PCM8 格式 (FMT-2 2.3.1.7.2)
- IEEE_FLOAT格式 (FMT-2 2.3.1.7.3)
類型 III 格式 (FMT-2.3.3 和 A.2.3) :
- IEC61937_AC-3
- IEC61937_MPEG-2_AAC_ADTS
- IEC61937_DTS-I
- IEC61937_DTS-II
- IEC61937_DTS-III
- TYPE_III_WMA
功能描述
本節說明 USB 音訊 2.0 驅動程式的功能。
音訊函式拓撲
驅動程式支援 ADC-2 3.13 中定義的所有實體類型。
每個終端機實體都必須在相容的USB Audio 2.0硬體中具有有效的時鐘連線。 時鐘路徑可以選擇性地包含時鐘乘數和時鐘選取器單位,而且必須結束於時鐘來源實體中。
驅動程式僅支援單一時鐘來源。 如果裝置實作多個時鐘來源實體和時鐘選取器,則驅動程式會使用預設選取的時鐘來源,且不會修改時鐘選取器的位置。
不支援具有多個輸入針腳的處理單位 (ADC-2 3.13.9) 。
不支援具有多個輸入針腳的擴充單元 (ADC-2 3.13.10) 。
不允許拓撲中的循環路徑。
音訊串流
驅動程式支援下列端點同步處理類型, (USB-2 5.12.4.1) :
- 異步 IN 和 OUT
- 同步 IN 和 OUT
- 自適性 IN 和 OUT
針對異步 OUT 案例,驅動程式僅支持明確的意見反應。 意見反應端點必須在 AS 介面的個別替代設定中實作。 驅動程式不支援隱含的意見反應。
目前針對多個端點使用共享時鐘的裝置支援有限。
若為自適性 IN,驅動程式不支援摘要轉送端點。 如果這類端點存在於替代設定中,則會忽略它。 驅動程式會以與異步 IN 數據流相同的方式處理 Adaptive IN 數據流。
裝置所建立的異時封包大小必須位於 FMT-2.0 節 2.3.1.1 中指定的限制內。 這表示實際封包大小與標準大小的偏差不得超過 +/- 一個音訊位置 (音訊位置 = 通道計數樣本) 。
描述項
音訊函式必須只實作一個 AudioControl 介面描述元, (ADC-2 4.7) 和一或多個音訊串流介面描述元 (ADC-2 4.9) 。 具有音訊控制件介面但不支援串流介面的函式。
驅動程式支援 ADC-2 第 4 節中定義的所有描述元類型。 下列小節提供某些特定描述元類型的批注。
Class-Specific AS 介面描述元
如需此規格的詳細資訊,請參閱 ADC-2 4.9.2。
AS 介面描述元的開頭必須是無端點的替代設定零, (沒有頻寬耗用量) ,而且必須在相容的 USB 音訊 2.0 硬體中以遞增順序指定進一步的替代設定。
系統會忽略具有驅動程式不支援之格式的替代設定。
每個非零的替代設定都必須指定一個連續的數據端點,並選擇性地指定意見反應端點。 不支援不含任何端點的非零替代設定。
bTerminalLink 字段必須參考拓撲中的終端機實體,而且其值在 AS 介面的所有替代設定中必須相同。
AS 介面描述元中的 bFormatType 欄位必須與格式類型描述元中指定的 bFormatType (FMT-2.3.1.6) 相同。
針對 Type I 格式,必須在 AS 介面描述元的 bmFormats 欄位中,只設定一個位。 否則,驅動程式將會忽略格式。
若要節省總線頻寬,一個 AS 介面可以在 bNrChannels 和 AS 格式類型描述元) 但不同的 wMaxPacketSize 值方面,實作多個格式相同的替代設定 (,但不同 wMaxPacketSize 值在非時序數據端點描述元中。 針對指定的取樣率,驅動程式會選取具有最小 wMaxPacketSize 的替代設定,以符合數據速率需求。
類型 I 格式類型描述元
如需此規格的詳細資訊,請參閱 FMT-2 2.3.1.6。
適用以下限制:
格式 | Subslot 大小 | 位解析度 |
---|---|---|
類型 I PCM 格式: | 1 <= bSubslotSize <= 4 | 8 <= bBitResolution <= 32 |
類型 I PCM8 格式: | bSubslotSize == 1 | bBitResolution == 8 |
輸入 I IEEE_FLOAT 格式: | bSubslotSize == 4 | bBitResolution == 32 |
類型 III IEC61937格式: | bSubslotSize == 2 | bBitResolution == 16 |
Class-Specific AS 等時音訊數據端點描述元
如需此規格的詳細資訊,請參閱 ADC-2 4.10.1.2。
不支援 bmAttributes 字段中的 MaxPacketsOnly 旗標,而且會被忽略。
將會忽略 bmControls、bLockDelayUnits 和 wLockDelay 字段。
類別要求和中斷數據訊息
驅動程式支援 ADC-2 第 5.2 節中所定義的控件要求子集,並支援某些控件的插斷資料訊息 (ADC-2 6.1) 。 下表顯示驅動程式中實作的子集。
實體 | 控制 | GET CUR | SET CUR | GET RANGE | 中斷 |
---|---|---|---|---|---|
時鐘來源 | 取樣頻率控制 | x | x | x | |
時鐘選取器 | 時鐘選取器控件 | x | |||
時鐘乘數 | Numerator 控件 | x | |||
分母控件 | x | ||||
終端 | 連接器控制件 | x | x | ||
混合器單位 | 混合器控件 | x | x | x | |
選取器單位 | 選取器控件 | x | x | ||
功能單位 | 靜音控件 | x | x | x | |
音量控制 | x | x | x | x | |
自動增益控制 | x | x | |||
效果單位 | – | ||||
處理單位 | – | ||||
擴充單位 | – |
下列小節提供控制項和要求的其他資訊。
時鐘來源實體
如需此規格的詳細資訊,請參閱 ADC-2 5.2.5.1。
時鐘來源實體至少必須在相容的 USB 音訊 2.0 硬體中 (ADC-2 5.2.5.1.1) 實作取樣頻率控制 GET RANGE 和 GET CUR 要求。
取樣頻率控制 GET RANGE 要求會傳回 ADC-2 5.2.1) (子範圍清單。 每個子範圍都會描述離散頻率或頻率範圍。 離散取樣頻率必須透過將MIN和 MAX字段設定為個別頻率,並將 RES 設定為零來表示。 個別子範圍不得重疊。 如果子範圍與前一個子範圍重疊,驅動程式將會忽略它。
實作單一固定頻率的時鐘來源實體不需要實作取樣頻率控制 SET CUR。 它會實作 GET CUR,它會傳回固定頻率,並實作 GET RANGE,這會報告單一離散頻率。
時鐘選取器實體
如需此規格的詳細資訊,請參閱 ADC-2 5.2.5.2
USB 音訊 2.0 驅動程式不支援時鐘選取。 驅動程式會使用預設選取的時鐘來源實體,而且永遠不會發出時鐘選取器控制 SET CUR 要求。 時鐘選取器控件 GET CUR 要求 (ADC-2 5.2.5.2.1) 必須在相容的 USB 音訊 2.0 硬體中實作。
功能單位
如需此規格的詳細資訊,請參閱 ADC-2 5.2.5.7。
驅動程式僅支援單一磁碟區範圍。 如果音量控制 GET RANGE 要求傳回多個範圍,則會忽略後續的範圍。
MIN 和 MAX欄位所表示的磁碟區間隔應該是 RES 欄位中指定之步驟大小的整數倍數。
如果功能單位實作單一通道控件和靜音或磁碟區的主要控件,則驅動程式會使用單一通道控件並忽略主要控件。
OEM 和 IHV 的其他資訊
OEM 和 IHV 應該針對提供的內建驅動程式測試其現有和新裝置。
沒有任何與內建 USB 音訊 2.0 驅動程式相關聯的特定合作夥伴自定義。
此 INF 檔案專案 (在 Windows 版本 1703) 的更新中提供,可用來識別內建驅動程式是一般設備驅動器。
GenericDriverInstalled,,,,1
內建驅動程式會向usbaudio2.inf 註冊下列相容的標識碼。
USB\Class_01&SubClass_00&Prot_20
USB\Class_01&SubClass_01&Prot_20
USB\Class_01&SubClass_02&Prot_20
USB\Class_01&SubClass_03&Prot_20
如需子類別類型,請參閱USB音訊2.0規格。
上述具有 MIDI (子 0x03類別的 USB 音訊 2.0 裝置,) 會將 MIDI 函式列舉為 usbaudio.sys (USB 音訊 1.0 驅動程式) 載入的個別多函式裝置。
USB Audio 1.0 類別驅動程式會向 wdma_usb.inf 註冊此相容標識符。
USB\Class_01
而且具有下列排除專案:
USB\Class_01&SubClass_00&Prot_20
USB\Class_01&SubClass_01&Prot_20
USB\Class_01&SubClass_02&Prot_20
USB\Class_01&SubClass_03&Prot_20
共用模式不支援任意數目的通道 (大於八個) ,因為 Windows 音訊堆疊的限制。
IHV USB 音訊 2.0 驅動程式和更新
針對 IHV 提供的第三方驅動程式 USB 音訊 2.0 驅動程式,除非驅動程式更新驅動程式以明確覆寫此行為並使用內建驅動程式,否則這些驅動程式會繼續優先用於其裝置。
音訊 Jack 登錄描述
從 Windows 10 1703 版開始,建立 USB 音訊類別 2.0 裝置的 IHV 具有一或多個插孔的功能,可將這些插孔描述到內建音訊類別 2.0 驅動程式。 當處理此裝置 的KSPROPERTY_JACK_DESCRIPTION 時,內建驅動程式會使用提供的插孔資訊。
Jack 資訊會儲存在裝置實例密鑰的登錄中, (HW 金鑰) 。
下列描述登錄中的音訊插孔資訊設定:
REG_DWORD T<tid>_NrJacks # of the jack on this device
REG_DWORD T<tid>_J<n>_ChannelMapping Channel mask. The value is defined in ksmedia.h. e.g. SPEAKER_FRONT_RIGHT or KSAUDIO_SPEAKER_5POINT1_SURROUND
REG_DWORD T<tid>_J<n>_ConnectorType The enum value is define in EPcxConnectionType.
REG_DWORD T<tid>_J<n>_GeoLocation The enum value is define in EPcxGeoLocation.
REG_DWORD T<tid>_J<n>_GenLocation The enum value is define in EPcxGenLocation.
REG_DWORD T<tid>_J<n>_PortConnection The enum value is define in EPxcPortConnection.
REG_DWORD T<tid>_J<n>_Color The color needs to be represent by RGB like this: 0x00RRGGBB (NOT a COLORREF).
<tid> = 終端機識別碼 (如描述元中所定義)
<n> = Jack number (1 ~ n) 。
tid> 和 <n> 的<慣例為:
- 基底 10 (8、9、10 而非 8、9、)
- 沒有前置零
- n 是以 1 為基礎的 (第一個插孔是 jack 1,而不是 jack 0)
例如:
T1_NrJacks、T1_J2_ChannelMapping、T1_J2_ConnectorType
如需更多音訊插孔資訊,請參閱 KSJACK_DESCRIPTION 結構。
這些登錄值可以透過各種方式設定:
使用自定義 INF 來包裝內建 INF,以便設定這些值。
直接由硬體裝置透過適用於 USB 裝置的 Microsoft OS 描述項 (請參閱下列範例) 。 如需建立這些描述項的詳細資訊,請參閱 適用於USB裝置的 Microsoft OS 描述元。
適用於 USB 的 Microsoft OS 描述項範例
下列適用於 USB 的 Microsoft OS 描述元範例包含一個插孔的通道對應和色彩。 此範例適用於具有單一功能描述元的非複合裝置。
IHV 廠商應該擴充它,以包含插孔描述的任何其他資訊。
UCHAR Example2_MSOS20DescriptorSetForUAC2 [0x76] = {
//
// Microsoft OS 2.0 Descriptor Set Header
//
0x0A, 0x00, // wLength - 10 bytes
0x00, 0x00, // MSOS20_SET_HEADER_DESCRIPTOR
0x00, 0x00, 0x0?, 0x06, // dwWindowsVersion – 0x060?0000 for future Windows version
0x76, 0x00, // wTotalLength – 118 bytes // update later
//
// Microsoft OS 2.0 Registry Value Feature Descriptor
//
0x42, 0x00, // bLength - 66 bytes
0x04, 0x00, // wDescriptorType – 5 for Registry Property
0x04, 0x00, // wPropertyDataType - 4 for REG_DWORD
0x34, 0x00, // wPropertyNameLength – 52 bytes
0x54, 0x00, 0x30, 0x00, // Property Name - "T01_J01_ChannelMapping"
0x31, 0x00, 0x5f, 0x00,
0x4a, 0x00, 0x30, 0x00,
0x31, 0x00, 0x5f, 0x00,
0x43, 0x00, 0x68, 0x00,
0x61, 0x00, 0x6e, 0x00,
0x6e, 0x00, 0x65, 0x00,
0x6c, 0x00, 0x4d, 0x00,
0x61, 0x00, 0x70, 0x00,
0x70, 0x00, 0x69, 0x00,
0x6e, 0x00, 0x67, 0x00,
0x00, 0x00
0x04, 0x00, // wPropertyDataLength – 4 bytes
0x02, 0x00, 0x00, 0x00 // PropertyData - SPEAKER_FRONT_RIGHT
//
// Microsoft OS 2.0 Registry Value Feature Descriptor
//
0x2A, 0x00, // bLength - 42 bytes
0x04, 0x00, // wDescriptorType – 5 for Registry Property
0x04, 0x00, // wPropertyDataType - 4 for REG_DWORD
0x1C, 0x00, // wPropertyNameLength – 28 bytes
0x54, 0x00, 0x30, 0x00, // Property Name - "T01_J01_Color"
0x31, 0x00, 0x5f, 0x00,
0x4a, 0x00, 0x30, 0x00,
0x31, 0x00, 0x5f, 0x00,
0x43, 0x00, 0x6f, 0x00,
0x6c, 0x00, 0x6f, 0x00,
0x72, 0x00, 0x00, 0x00,
0x04, 0x00, // wPropertyDataLength – 4 bytes
0x00, 0x00, 0xff, 0x00 // PropertyData - 0xff0000 - RED }
疑難排解
如果驅動程式未啟動,應該檢查系統事件記錄檔。 驅動程式會記錄指出失敗原因的事件。 同樣地,您可以依照以 舊式方式收集音訊記錄一文中說明的步驟手動收集音訊記錄。 如果失敗可能表示驅動程序問題,請使用下面所述的意見反應中樞回報,並包含記錄。
如需如何使用補充TMF檔案讀取USB音訊2.0類別驅動程式的記錄的相關信息,請參閱使用在一般Linux van Eerde 的 Web 記錄中,回報 問題、記錄和建議功能 。 如需使用TMF檔案的一般資訊,請參閱 使用TMF檔案顯示追蹤記錄檔。
如需「音訊服務未回應」錯誤和 USB 音訊裝置無法在 Windows 10 1703 版中運作的資訊,請參閱 USB 音訊未播放。
意見反應中樞
如果您遇到此驅動程序的問題,請收集音訊記錄,然後遵循回報 問題、記錄和建議功能中所述的步驟,以及 意見反應中樞以吸引我們注意。
驅動程式開發
此 USB 音訊 2.0 類別驅動程式是由 Thesycon 所開發,由 Microsoft 支援。