HD オーディオ ドライバー音量設定のカスタマイズ

インボックス HD オーディオの既定のオーディオ ボリュームとマイク ブースト レベルを特定の PC に合わせてカスタマイズする機能により、OEM はオーディオ アダプターのインストール パラメーターに柔軟性を持つことができます。

Note

ここで説明するプロセスは、既定の Microsoft HD オーディオ ドライバーが使用されている場合にのみ使用できます。

既定では、HD オーディオ クラスのファンクション ドライバーが、ユーザーにとって快適な "すぐに使える" エクスペリエンスを確保するために、オーディオの音量とマイクのブースト レベルを事前に定義された値に設定します。

ここでオーディオ クラス ドライバーと呼ばれる HD オーディオ クラス ファンクション ドライバーでは、特定の PC 用にカスタマイズできないハードコーディングされたさまざまな既定値が使用されます。 そのため、OEM は、独自の要件を満たす目的でこれらの値をオーバーライドすることはできません。 また、特に初回使用時においては、ユーザーがオーディオ システムのラウドネスや静音性に敏感であるため、音量レベルは、調整する最も重要な設定の 1 つとなっています。

オーディオ クラス ドライバーは、ハードコーディングされた既定値をオーバーライドできるように再設計されました。 オーディオ クラス ドライバーのハードコーディングされた値をオーバーライドするメカニズムでは、オーディオ クラス ドライバーの受信トレイ INF ファイル (hdaudio.inf) をラップする INF ファイルを書き込み、このラッパー INF を使用して目的の値を指定する処理が必要です。

次の図は、HD オーディオ コーデック トポロジのサンプルを示しています。 個々のノードの 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 ごとのカスタム レベルを指定します。 このレベルは、クラス ドライバーが返す既定のカーネル ストリーミング (KS) デシベル レベルを表す DWORD として表されます。

HD オーディオ クラス ドライバーが KSPROPERTY_AUDIO_VOLUMELEVEL の GET 要求を受け取ると、ドライバーは、要求を受信したノードを含むパスの既定の音量 (またはマイク ブースト) の値が、レジストリに存在するかどうかを判断します。 レジストリに値があるが、以前にキャッシュされた値がない場合は、レジストリの既定値がデバイスに適用され、KSPROPERTY_AUDIO_VOLUMELEVEL 応答でも返されます。 レジストリに値がない場合、HD オーディオ クラス ドライバーは、サブデバイス グラフの実装から既定値を取得します。

Windows Vista 以降の既定値は次のとおりです。

  • エンドポイントの音量の既定値は、すべてのデバイスの種類で最大マイナス 6 dB です。

  • マイク ブーストの既定値は 0 dB です。

次の手順では、KSPROPERTY_AUDIO_VOLUMELEVEL の GET 要求に応答して返す既定値を決定するために、オーディオ クラス ドライバーによって使用されるアルゴリズムの概要を示しています。

  1. クエリされた音量ノードを含むパスが終了するピンの複合体を判別します。

  2. レジストリ参照を実行して、手順 1 で見つかったピンの複合体に対して音量またはマイク ブーストの既定値が指定されているかどうかを確認します。

  3. レジストリに値が見つかった場合、アンプでサポートされている最小値を下回っていれば、ドライバーはその値を最小値に設定します。 それ以外の場合では、値がアンプでサポートされている最大値を超えていると、値は最大値に設定されます。 レジストリで見つかった値がアンプでサポートされている範囲内にある場合は、GET 要求に応答して値が返されます。 さらに、ドライバーは、ピンの複合体に対してレンダーするとき、またはピンの複合体からキャプチャするときに、この値を持つ関連する HD オーディオ アンプ ウィジェットをプログラムします。

次のフォルダー ツリーは、既定値を保持するドライバー インスタンス キーのレイアウトを示しています。

<ドライバー キー> DefaultVolumeLevels ピンの複合体 (2 桁の 16 進数、"0x" は前に付かない) 音量 (KS DB ステップの DWORD) ブースト (KS DB ステップの DWORD)

KS DB のステップ実行値は次のように定義されます。-2147483648 はマイナス無限大デシベル (減衰)

-2147483647 は -32767.99998474 デシベル (減衰)

+2147483647 は +32767.99998474 デシベル (ゲイン)

使用される測定単位 (1/65536 dB) の詳細については、「KSPROPERTY_AUDIO_VOLUMELEVEL」を参照してください。

wdmudio.inf ファイルをオーバーライドするには、Windows ドライバー キット (WDK) 8.1 サンプルの一部として利用可能な Microsoft Virtual Audio デバイス ドライバー サンプルのこのコード セグメントに示すように、Include ディレクティブと 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