自定义 HD 音频驱动程序音量设置

能够自定义内置 HD 音频默认音频音量和麦克风提升级别以适应特定电脑,这为 OEM 在音频适配器安装参数方面提供了一些灵活性。

注意

仅当使用默认的 Microsoft HD Audio 驱动程序时,才能使用此处所述的过程。

默认情况下,HD Audio 类函数驱动程序将音频音量和麦克风提升级别设置为预先确定的值,以确保为用户提供愉快的“开箱即用”体验。

HD Audio 类函数驱动程序(此处称为音频类驱动程序)使用无法为任何特定电脑自定义的各种硬编码默认值。 因此,OEM 无法重写这些值以满足自己的要求。 要调整的最重要设置之一是音量级别,因为用户对音频系统的响度或安静度很敏感,尤其是在首次使用期间。

音频类驱动程序经过重新设计,允许重写硬编码的默认值。 重写音频类驱动程序的硬编码值的机制涉及编写一个 INF 文件,以包装音频类驱动程序的内置 INF 文件 (hdaudio.inf),以及使用此包装器 INF 指定所需的值。

下图显示了一个示例 HD Audio 编解码器拓扑。 有个别节点的 ID,以及引脚复用的 ID。Diagram of a sample audio codec topology with pin complexes representing physical connectors, including mic and line input nodes, and speaker output node with pin complex IDs.

引脚复用表示关联设备的物理连接器(例如扬声器、麦克风或线路)。

若要指定自定义音频音量级别或麦克风提升级别,请使用包装器 INF 文件为每个引脚复用 ID 指定自定义级别。 这些级别表示为 DWORD,后者表示类驱动程序应返回的默认内核流式处理 (KS) 分贝级别。

当 HD Audio 类驱动程序收到 KSPROPERTY_AUDIO_VOLUMELEVEL GET 请求时,驱动程序会确定注册表中是否存在包含接收到请求的节点的路径的默认音量(或麦克风提升)值。 如果注册表中有一个值,但没有以前缓存的值,注册表中的默认值将应用于设备,并在 KSPROPERTY_AUDIO_VOLUMELEVEL 响应中返回。 如果注册表中没有任何值,HD Audio 类驱动程序将从子设备图形实现中检索默认值。

从 Windows Vista 开始,默认值如下所示:

  • 终结点音量默认为所有设备类型的最大值减去 6 dB。

  • 麦克风提升默认为 0 dB。

以下步骤汇总了音频类驱动程序用于确定要返回的默认值以响应 KSPROPERTY_AUDIO_VOLUMELEVEL 的 GET 请求的算法:

  1. 确定包含查询的音量节点的路径终止的引脚复用。

  2. 执行注册表查找,查看是否已为步骤 1 中找到的引脚复用提供音量或麦克风提升默认值。

  3. 如果在注册表中找到一个值,则驱动程序会将该值设置为最小值(如果该值低于放大器支持的最小值)。 否则,如果该值高于放大器支持的最大值,则将其设置为最大值。 如果注册表中找到的值在放大器支持的范围内,则返回该值以响应 GET 请求。 此外,驱动程序会在呈现到引脚复用或从引脚复用捕获时使用此值来编程关联的 HD Audio 放大器小组件。

以下文件夹树显示了保存默认值的驱动程序实例键的布局。

<驱动程序键> DefaultVolumeLevels 引脚复用(2 位 HEX,不以“0x”开头)音量(KS DB 步骤中的 DWORD)提升(KS DB 步骤中的 DWORD)

KS DB 单步执行值的定义如下:-2147483648 为 -无穷大分贝(衰减)

-2147483647 为 -32767.99998474 分贝(衰减)

+2147483647 为 +32767.99998474 分贝(增益)

有关使用的度量单位 (1/65536 dB) 的详细信息,请参阅 KSPROPERTY_AUDIO_VOLUMELEVEL

若要重写 wdmudio.inf 文件,请使用此代码段所示的 Include 和 Needs 指令,这些指令来自 Windows 驱动程序工具包 (WDK) 8.1 示例中提供的 Microsoft 虚拟音频设备驱动程序示例

;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