HD 오디오 드라이버 볼륨 설정 사용자 지정

특정 PC에 맞게 박스 내 HD 오디오 기본 오디오 볼륨 및 마이크 부스트 수준을 사용자 지정하는 기능은 OEM에 오디오 어댑터 설치 매개 변수의 유연성을 제공합니다.

참고

여기에 설명된 프로세스는 기본 Microsoft HD 오디오 드라이버가 사용되는 경우에만 사용할 수 있습니다.

기본적으로 HD Audio 클래스 함수 드라이버는 오디오 볼륨과 마이크 부스트 수준을 미리 결정된 값으로 설정하여 사용자에게 즐거운 "기본 제공" 환경을 보장합니다.

여기에서 오디오 클래스 드라이버라고 하는 HD Audio 클래스 함수 드라이버는 특정 PC에 대해 사용자 지정할 수 없는 다양한 하드 코딩된 기본값을 사용합니다. 따라서 OEM은 자체 요구 사항을 충족하기 위해 이러한 값을 재정의할 수 없습니다. 그리고 조정해야 할 가장 중요한 설정 중 하나는 볼륨 수준입니다. 특히 처음 사용하는 동안 사용자가 오디오 시스템의 음량이나 고요함에 민감하기 때문에 그렇습니다.

하드 코딩된 기본값을 재정의할 수 있도록 오디오 클래스 드라이버가 다시 디자인되었습니다. 오디오 클래스 드라이버의 하드 코딩된 값을 재정의하는 메커니즘에는 오디오 클래스 드라이버의 받은 편지함 INF 파일(hdaudio.inf)을 래핑하는 INF 파일을 작성하고 이 래퍼 INF를 사용하여 원하는 값을 지정하는 것이 포함됩니다.

다음 다이어그램은 샘플 HD 오디오 코덱 토폴로지를 보여줍니다. 개별 노드에 대한 ID와 핀 복소수의 ID가 있습니다. 마이크 및 선 입력 노드를 비롯한 물리적 커넥터를 나타내는 핀 복소수와 핀 복합 ID가 있는 스피커 출력 노드가 있는 샘플 오디오 코덱 토폴로지 다이어그램.

핀 복소수는 연결된 디바이스(예: 스피커, 마이크 또는 선)의 물리적 커넥터를 나타냅니다.

사용자 지정 오디오 볼륨 수준 또는 마이크 부스트 수준을 지정하려면 래퍼 INF 파일을 사용하여 핀 복소수 ID당 사용자 지정 수준을 지정합니다. 수준은 클래스 드라이버가 반환해야 하는 기본 KS(커널 스트리밍) 데시벨 수준을 나타내는 DWORD로 표현됩니다.

HD Audio 클래스 드라이버가 KSPROPERTY_AUDIO_VOLUMELEVEL 대한 GET 요청을 받으면 드라이버는 요청을 받은 노드가 포함된 경로에 대한 레지스트리에 기본 볼륨(또는 마이크 부스트) 값이 있는지 여부를 결정합니다. 레지스트리에 값이 있지만 이전에 캐시된 값이 없는 경우 레지스트리의 기본값이 디바이스에 적용되고 KSPROPERTY_AUDIO_VOLUMELEVEL 응답에도 반환됩니다. 레지스트리에 값이 없으면 HD Audio 클래스 드라이버는 하위 디바이스 그래프 구현에서 기본값을 검색합니다.

Windows Vista부터 기본값은 다음과 같습니다.

  • 엔드포인트 볼륨은 모든 디바이스 유형에 대해 기본적으로 최대 6dB를 뺀 값으로 설정됩니다.

  • 마이크 부스트 기본값은 0dB입니다.

다음 단계에서는 오디오 클래스 드라이버에서 KSPROPERTY_AUDIO_VOLUMELEVEL GET 요청에 대한 응답으로 반환할 기본값을 결정하는 데 사용되는 알고리즘을 요약합니다.

  1. 쿼리된 볼륨 노드가 포함된 경로가 종료되는 핀 복합을 결정합니다.

  2. 레지스트리 조회를 수행하여 1단계에서 찾은 핀 복합체에 볼륨 또는 마이크 부스트 기본값이 제공되었는지 확인합니다.

  3. 레지스트리에 값이 있으면 드라이버는 증폭기에서 지원하는 최소값보다 낮으면 해당 값을 최소값으로 설정합니다. 그렇지 않으면 값이 증폭기에서 지원하는 최대값보다 높은 경우 최댓값으로 설정됩니다. 레지스트리에 있는 값이 증폭기에서 지원하는 범위 내에 있으면 GET 요청에 대한 응답으로 값이 반환됩니다. 또한 드라이버는 핀 복합체로 렌더링하거나 캡처할 때 연결된 HD 오디오 증폭기 위젯을 이 값으로 프로그래밍합니다.

다음 폴더 트리는 기본값을 보유하는 드라이버 instance 키에 대한 레이아웃을 보여줍니다.

<드라이버 키> DefaultVolumeLevels 복잡한 고정(2자리 HEX, 앞에 "0x") 볼륨(KS DB 단계의 DWORD) Boost(KS DB 단계의 DWORD)

KS DB 스테핑 값은 다음과 같이 정의됩니다. -2147483648 -infinity 데시벨(감쇠)입니다.

-2147483647 -32767.99998474 데시벨(감쇠)

+2147483647 +32767.99998474 데시벨(게인)

사용되는 측정 단위(1/65536 dB)에 대한 자세한 내용은 KSPROPERTY_AUDIO_VOLUMELEVEL 참조하세요.

wdmudio.inf 파일을 재정의하려면 WDK(Windows 드라이버 키트) 8.1 샘플의 일부로 사용할 수 있는 Microsoft 가상 오디오 디바이스 드라이버 샘플의 이 코드 세그먼트에 표시된 대로 Include and Needs 지시문을 사용합니다.

;Copyright (c) Microsoft Corporation. All rights reserved.
;
...
[MSVAD_Simple.NT]
Include=ks.inf,wdmaudio.inf
Needs=KS.Registration, WDMAUDIO.Registration
...

Include 및 Needs 지시문에 대한 자세한 내용은 INF DDInstall 섹션을 참조하세요.

다음은 오디오 클래스 드라이버에 대한 INF 파일을 래핑하는 샘플 INF 래퍼입니다.

;Copyright (c) Microsoft Corporation. All rights reserved.
;
;Module Name:
;    HDAUDVOL.INF
;
;Abstract:
;    Wrapper INF file for installing the Microsoft UAA Function Driver for High
;    Definition Audio with specific INF overrides

[Version]
Signature="$Windows NT$"
Class=MEDIA
ClassGuid={4d36e96c-e325-11ce-bfc1-08002be10318}
Provider=Microsoft
DriverVer=07/28/2012,6.2.9201.0
CatalogFile=hdaudvol.cat
PnpLockdown=1

[Manufacturer]
Microsoft = Microsoft,ntamd64,ntarm

[ControlFlags]
ExcludeFromSelect = *

;;====================================================================================
;; Edit the PNP ID (HDAUDIO\FUNC_01...) below to match the codec + subsystem you are ;; configuring.
;;====================================================================================

[Microsoft]
%HdAudModel_DefaultVolume_DeviceDesc% = HdAudModel_DefaultVolume, HDAUDIO\FUNC_01&VEN_10EC&DEV_0889&SUBSYS_00000000&REV_1000

[Microsoft.ntamd64]
%HdAudModel_DefaultVolume_DeviceDesc% = HdAudModel_DefaultVolume, HDAUDIO\FUNC_01&VEN_10EC&DEV_0889&SUBSYS_00000000&REV_1000

[Microsoft.ntarm]
%HdAudModel_DefaultVolume_DeviceDesc% = HdAudModel_DefaultVolume, HDAUDIO\FUNC_01&VEN_10EC&DEV_0889&SUBSYS_00000000&REV_1000

;;===================== HdAudModel_DefaultVolume ==============================

[HdAudModel_DefaultVolume]
Include=hdaudio.inf
Needs=HDAudModel
AddReg=HdAudModel_DefaultVolume.HdAudInit

[HdAudModel_DefaultVolume.HW]
Include=hdaudio.inf
Needs=HdAudModel.HW

[HdAudModel_DefaultVolume.Services]
Include=hdaudio.inf
Needs=HdAudModel.Services

[HdAudModel_DefaultVolume.Interfaces]
Include=hdaudio.inf
Needs=HdAudModel.Interfaces

[HdAudModel_DefaultVolume.HdAudInit]
;;====================================================================================
;; Units are in KS dB so 1dB == 65536 (0x00010000)
;; ======================================================================================
HKR,DefaultVolumeLevels\18,Volume,1,00,00,FE,FF ; Set to 0xFFFE0000 to set to -2dB
HKR,DefaultVolumeLevels\18,Boost,1,00,00,0A,00 ; Set to 0x000A0000 to set to 10dB

[Strings]
HdAudModel_DefaultVolume_DeviceDesc = "High Definition Audio Device"

HKR 상대 경로가 지정되므로 사용되는 특정 INF 파일 섹션에 따라 정확한 드라이버 레지스트리 경로가 결정됩니다. HKR 상대 경로에 대한 자세한 내용은 INF AddReg 지시문(Windows 드라이버)을 참조하세요.

기본 오디오 볼륨 설정

KSPROPERTY_AUDIO_VOLUMELEVEL