USB 오디오 2.0 드라이버
Windows 10 릴리스 1703부터 USB 오디오 2.0 드라이버가 Windows와 함께 제공됩니다. USB Audio 2.0 디바이스 클래스를 지원하도록 설계되었습니다. 드라이버는 WaveRT 오디오 포트 클래스 미니포트입니다.
드라이버 이름은 usbaudio2.sys 연결된 inf 파일은 usbaudio2.inf입니다.
드라이버는 디바이스 관리자에서 "USB 오디오 클래스 2 디바이스"로 식별됩니다. 이 이름은 사용 가능한 경우 USB 제품 문자열로 덮어씁니다.
호환되는 디바이스가 시스템에 연결되면 드라이버가 자동으로 활성화됩니다. 그러나 타사 드라이버가 시스템 또는 Windows 업데이트 있는 경우 해당 드라이버가 설치되고 클래스 드라이버를 재정의합니다.
아키텍처
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비트(FMT-2.3.1.7.1)가 있는 PCM 형식
- PCM8 형식(FMT-2 2.3.1.7.2)
- IEEE_FLOAT 형식(FMT-2 2.3.1.7.3)
III 형식(FMT-2 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 Audio 2.0 드라이버의 기능에 대해 설명합니다.
오디오 함수 토폴로지
드라이버는 ADC-2 3.13에 정의된 모든 엔터티 형식을 지원합니다.
각 터미널 엔터티는 호환되는 USB 오디오 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 인터페이스의 각 대체 설정에서 구현되어야 합니다. 드라이버는 암시적 피드백을 지원하지 않습니다.
현재 여러 엔드포인트에 대해 공유 클록을 사용하는 디바이스에 대한 지원이 제한되어 있습니다.
드라이버가 피드 전달 엔드포인트를 지원하지 않는 경우 Adaptive IN의 경우 이러한 엔드포인트가 대체 설정에 있으면 무시됩니다. 드라이버는 비동기 IN 스트림과 동일한 방식으로 적응형 IN 스트림을 처리합니다.
디바이스에서 만든 등시 패킷의 크기는 FMT-2.0 섹션 2.3.1.1에 지정된 제한 내에 있어야 합니다. 즉, 명목 크기에서 실제 패킷 크기의 편차가 +/- 하나의 오디오 슬롯(오디오 슬롯 = 채널 수 샘플)을 초과해서는 안 됩니다.
설명자
오디오 함수는 정확히 하나의 AudioControl 인터페이스 설명자(ADC-2 4.7) 및 하나 이상의 AudioStreaming 인터페이스 설명자(ADC-2 4.9)를 구현해야 합니다. 오디오 컨트롤 인터페이스가 있지만 스트리밍 인터페이스가 없는 함수는 지원되지 않습니다.
드라이버는 ADC-2 섹션 4에 정의된 모든 설명자 형식을 지원합니다. 다음 하위 섹션에서는 몇 가지 특정 설명자 형식에 대한 주석을 제공합니다.
Class-Specific AS 인터페이스 설명자
이 사양에 대한 자세한 내용은 ADC-2 4.9.2를 참조하세요.
AS 인터페이스 설명자는 엔드포인트 없이 대체 설정 0(대역폭 사용 없음)으로 시작해야 하며, 호환되는 USB Audio 2.0 하드웨어에서 추가 대체 설정을 오름차순으로 지정해야 합니다.
드라이버에서 지원되지 않는 형식의 대체 설정은 무시됩니다.
0이 아닌 각 대체 설정은 등시 데이터 엔드포인트와 선택적으로 피드백 엔드포인트를 지정해야 합니다. 엔드포인트가 없는 0이 아닌 대체 설정은 지원되지 않습니다.
bTerminalLink 필드는 토폴로지의 터미널 엔터티를 참조해야 하며 해당 값은 AS 인터페이스의 모든 대체 설정에서 동일해야 합니다.
AS 인터페이스 설명자의 bFormatType 필드는 형식 형식 설명자(FMT-2 2.3.1.6)에 지정된 bFormatType과 동일해야 합니다.
형식 I 형식의 경우 정확히 한 비트는 AS 인터페이스 설명자의 bmFormats 필드에 있는 1로 설정해야 합니다. 그렇지 않으면 드라이버에서 형식을 무시합니다.
버스 대역폭을 저장하기 위해 하나의 AS 인터페이스는 동일한 형식(bNrChannels 및 AS 형식 형식 설명자)을 사용하지만 동시 데이터 엔드포인트 설명자의 wMaxPacketSize 값이 다른 여러 대체 설정을 구현할 수 있습니다. 지정된 샘플 속도의 경우 드라이버는 데이터 속도 요구 사항을 충족할 수 있는 가장 작은 wMaxPacketSize가 있는 대체 설정을 선택합니다.
형식 I 형식 설명자
이 사양에 대한 자세한 내용은 FMT-2 2.3.1.6을 참조하세요.
다음 제한 사항이 적용됩니다.
서식 | Subslot 크기 | 비트 해상도 |
---|---|---|
I PCM 형식을 입력합니다. | 1 <= bSubslotSize <= 4 | 8 <= bBitResolution <= 32 |
I PCM8 형식을 입력합니다. | bSubslotSize == 1 | bBitResolution == 8 |
형식을 IEEE_FLOAT 입력합니다. | bSubslotSize == 4 | bBitResolution == 32 |
III IEC61937 형식을 입력합니다. | bSubslotSize == 2 | bBitResolution == 16 |
AS 등시 오디오 데이터 엔드포인트 설명자를 Class-Specific
이 사양에 대한 자세한 내용은 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 하드웨어에서 샘플링 빈도 제어 GET RANGE 및 GET CUR 요청(ADC-2 5.2.5.1.1)을 구현해야 합니다.
샘플링 빈도 제어 GET RANGE 요청은 하위 범위 목록을 반환합니다(ADC-2 5.2.1). 각 하위 범위는 불연속 빈도 또는 빈도 범위를 설명합니다. MIN 및 MAX 필드를 해당 빈도로 설정하고 RES를 0으로 설정하여 불연속 샘플링 빈도를 표현해야 합니다. 개별 하위 범위는 겹치지 않아야 합니다. 하위 범위가 이전 항목과 겹치면 드라이버에서 무시됩니다.
단일 고정 주파수만 구현하는 클록 원본 엔터티는 샘플링 빈도 제어 SET CUR을 구현할 필요가 없습니다. 고정 빈도를 반환하는 GET CUR를 구현하고 단일 불연속 빈도를 보고하는 GET RANGE를 구현합니다.
클록 선택기 엔터티
이 사양에 대한 자세한 내용은 ADC-2 5.2.5.2를 참조하세요.
USB 오디오 2.0 드라이버는 클록 선택을 지원하지 않습니다. 드라이버는 기본적으로 선택되며 Clock Selector Control SET CUR 요청을 발급하지 않는 Clock 원본 엔터티를 사용합니다. 클록 선택기 컨트롤 GET CUR 요청(ADC-2 5.2.5.2.1)은 호환되는 USB 오디오 2.0 하드웨어에서 구현되어야 합니다.
기능 단위
이 사양에 대한 자세한 내용은 ADC-2 5.2.5.7을 참조하세요.
드라이버는 단일 볼륨 범위만 지원합니다. 볼륨 제어 GET RANGE 요청이 둘 이상의 범위를 반환하는 경우 후속 범위는 무시됩니다.
MIN 및 MAX 필드로 표현되는 볼륨 간격은 RES 필드에 지정된 단계 크기의 정수 배수여야 합니다.
기능 단위가 단일 채널 컨트롤과 음소거 또는 볼륨에 대한 master 컨트롤을 구현하는 경우 드라이버는 단일 채널 컨트롤을 사용하고 master 컨트롤을 무시합니다.
OEM 및 IHV에 대한 추가 정보
OEM 및 IHV는 제공된 기본 제공 드라이버에 대해 기존 및 새 디바이스를 테스트해야 합니다.
기본 제공 USB 오디오 2.0 드라이버와 연결된 특정 파트너 사용자 지정은 없습니다.
이 INF 파일 항목(Windows 릴리스 1703 업데이트에서 제공됨)은 기본 제공 드라이버가 일반 디바이스 드라이버임을 식별하는 데 사용됩니다.
GenericDriverInstalled,,,,1
기본 제공 드라이버는 usbaudio2.inf를 사용하여 다음과 같은 호환 ID를 등록합니다.
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가 있는 USB 오디오 2.0 디바이스(위의 하위 클래스 0x03)는 MIDI 함수를 usbaudio.sys(USB 오디오 1.0 드라이버)가 로드된 별도의 다기능 디바이스로 열거합니다.
USB Audio 1.0 클래스 드라이버는 이 호환 ID를 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 오디오 스택의 제한으로 인해 임의 수의 채널(8개 이상)이 공유 모드에서 지원되지 않습니다.
IHV USB 오디오 2.0 드라이버 및 업데이트
IHV에서 제공하는 타사 드라이버 USB Audio 2.0 드라이버의 경우, 드라이버가 이 동작을 명시적으로 재정의하고 기본 제공 드라이버를 사용하도록 드라이버를 업데이트하지 않는 한 해당 드라이버는 기본 제공 드라이버보다 디바이스에 계속 선호됩니다.
오디오 잭 레지스트리 설명
Windows 10 릴리스 1703부터 하나 이상의 잭이 있는 USB 오디오 클래스 2.0 장치를 만드는 IHV는 이러한 잭을 바로 오디오 클래스 2.0 드라이버에 설명하는 기능을 제공합니다. 기본 제공 드라이버는 이 디바이스에 대한 KSPROPERTY_JACK_DESCRIPTION 처리할 때 제공된 잭 정보를 사용합니다.
잭 정보는 디바이스 instance 키(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> = 터미널 ID(설명자에 정의된 대로)
<n> = 잭 번호(1 ~ n).
tid> 및 <n>에 대한 <규칙은 다음과 같습니다.
- Base 10(8, 9, 10이 아닌 8, 9, a)
- 선행 0 없음
- n은 1 기반입니다(첫 번째 잭은 잭 0이 아닌 잭 1임).
예를 들면 다음과 같습니다.
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 }
문제 해결
드라이버가 시작되지 않으면 시스템 이벤트 로그를 확인해야 합니다. 드라이버는 실패 이유를 나타내는 이벤트를 기록합니다. 마찬가지로, 오디오 로그는 Matthew van Eerde의 웹 로그 문서인 오디오 로그 수집에 설명된 단계에 따라 수동으로 수집할 수 있습니다. 오류가 드라이버 문제를 나타낼 수 있는 경우 아래에 설명된 피드백 허브를 사용하여 보고하고 로그를 포함하세요.
추가 TMF 파일을 사용하여 USB Audio 2.0 클래스 드라이버에 대한 로그를 읽는 방법에 대한 자세한 내용은 Matthew van Eerde의 웹 로그에 대한 피드백 허브를 사용하여 문제 보고, 로그 및 제안 기능을 참조하세요. TMF 파일 작업에 대한 일반적인 내용은 TMF 파일로 추적 로그 표시를 참조하세요.
"오디오 서비스가 응답하지 않음" 오류 및 USB 오디오 장치가 Windows 10 버전 1703에서 작동하지 않는 방법에 대한 자세한 내용은 USB 오디오 재생 안 을 참조하세요.
피드백 허브
이 드라이버에 문제가 발생하면 오디오 로그를 수집한 다음, 피드백 허브를 사용하여 문제 보고, 로그 및 제안 기능에 설명된 단계를 수행하여 주의해야 합니다.
드라이버 개발
이 USB 오디오 2.0 클래스 드라이버는 Thesycon 에서 개발되었으며 Microsoft에서 지원됩니다.