Anpassen der Lautstärkeeinstellungen des HD-Audiotreibers

Die Möglichkeit, die standardmäßige Audiolautstärke und die Mikrofon-Boostpegel im Lieferumfang des HD-Audios an einen bestimmten PC anzupassen, bietet OEMs eine gewisse Flexibilität bei den Installationsparametern des Audioadapters.

Hinweis

Der hier beschriebene Prozess kann nur verwendet werden, wenn der Microsoft HD Audio-Standardtreiber verwendet wird.

Standardmäßig legt der Hd Audio-Klassenfunktionstreiber die Audiolautstärke und die Mikrofon-Boostpegel auf vordefinierte Werte fest, um dem Benutzer eine angenehme Out-of-the-Box-Erfahrung zu gewährleisten.

Der HD Audio-Klassenfunktionstreiber, der hier als Audioklassentreiber bezeichnet wird, verwendet verschiedene hartcodierte Standardwerte, die nicht für einen bestimmten PC angepasst werden können. Daher können OEMs diese Werte nicht überschreiben, um ihre eigenen Anforderungen zu erfüllen. Und eine der wichtigsten Einstellungen, die angepasst werden müssen, ist der Lautstärkepegel, da die Benutzer besonders bei der erstgenutzten Nutzung empfindlich auf die Lautstärke oder Leise ihrer Audiosysteme reagieren.

Der Treiber der Audioklasse wurde neu gestaltet, damit Sie die hartcodierten Standardwerte überschreiben können. Der Mechanismus zum Überschreiben der hartcodierten Werte des Audioklassentreibers umfasst das Schreiben einer INF-Datei, die die INF-Posteingangsdatei des Audioklassentreibers (hdaudio.inf) umschließt, und die Verwendung dieses Wrappers INF zum Angeben der gewünschten Werte.

Das folgende Diagramm zeigt eine Beispieltopologie des HD Audio-Codecs. Es gibt IDs für die einzelnen Knoten und IDs für die Pinkomplexe. Diagramm einer Beispiel-Audiocodectopologie mit Pinkomplexen, die physische Verbindungen darstellen, einschließlich Mikrofon- und Line-Eingabeknoten, und Lautsprecherausgabeknoten mit pinkomplexen IDs.

Die Pinkomplexe stellen die physischen Anschlüsse für das zugehörige Gerät (z. B. Lautsprecher, Mikrofon oder Leitung) dar.

Um einen benutzerdefinierten Audiolautstärkenpegel oder mikrofonverstärkungspegel anzugeben, verwenden Sie die Wrapper-INF-Datei, um benutzerdefinierte Pegel pro komplexer PIN-ID anzugeben. Die Ebenen werden als DWORDs ausgedrückt, die die Standard-Kernelstreamingebenen (KS) darstellen, die vom Klassentreiber zurückgegeben werden sollen.

Wenn der HD Audio-Klassentreiber eine GET-Anforderung für KSPROPERTY_AUDIO_VOLUMELEVEL empfängt, bestimmt der Treiber, ob in der Registrierung ein Standardvolumewert (oder Mic Boost) für den Pfad vorhanden ist, der den Knoten enthält, der die Anforderung empfangen hat. Wenn in der Registrierung ein Wert vorhanden ist, aber kein zuvor zwischengespeicherter Wert vorhanden ist, wird der Standardwert in der Registrierung auf das Gerät angewendet und auch in der KSPROPERTY_AUDIO_VOLUMELEVEL-Antwort zurückgegeben. Wenn in der Registrierung kein Wert vorhanden ist, ruft der HD Audio-Klassentreiber einen Standardwert aus der Graphimplementierung des Untergeordneten Geräts ab.

Ab Windows Vista sind die Standardwerte wie folgt:

  • Das Endpunktvolume beträgt standardmäßig maximal minus 6 dB für alle Gerätetypen.

  • Mikrofonverstärkung ist standardmäßig 0 dB.

Die folgenden Schritte fassen den Algorithmus zusammen, der vom Audioklassentreiber verwendet wird, um die Standardwerte zu bestimmen, die als Reaktion auf eine GET-Anforderung für KSPROPERTY_AUDIO_VOLUMELEVEL zurückgegeben werden sollen:

  1. Bestimmen Sie den Pinkomplex, an dem der Pfad mit dem abgefragten Volumeknoten endet.

  2. Führen Sie eine Registrierungssuche aus, um festzustellen, ob für den in Schritt 1 gefundenen Pinkomplex ein Standardwert für die Lautstärke- oder Mikrofonverstärkung bereitgestellt wurde.

  3. Wenn ein Wert in der Registrierung gefunden wird, legt der Treiber diesen Wert auf das Minimum fest, wenn er unter den vom Verstärker unterstützten Mindestwert fällt. Andernfalls wird der Wert auf das Maximum festgelegt, wenn er über den vom Verstärker unterstützten Maximalwert fällt. Wenn sich der in der Registrierung gefundene Wert innerhalb des vom Verstärker unterstützten Bereichs befindet, wird der Wert als Antwort auf die GET-Anforderung zurückgegeben. Darüber hinaus programmiert der Treiber das zugehörige HD Audio-Verstärkerwidget mit diesem Wert, wenn er in den Pinkomplex gerendert oder erfasst wird.

Die folgende Ordnerstruktur zeigt das Layout für den Treiber instance Schlüssel, der die Standardwerte enthält.

<Treiberschlüssel> DefaultVolumeLevels Pin Complex (2-stelliger HEX, nicht voran "0x") Volume (DWORD in KS DB-Schritten) Boost (DWORD in KS DB-Schritten)

Die KS DB-Schrittwerte werden wie folgt definiert: -2147483648 ist -infinity Dezibel (Dämpfung)

-2147483647 ist -32767.99998474 Dezibel (Dämpfung)

+2147483647 ist +32767.99998474 Dezibel (Verstärkung)

Weitere Informationen zur verwendeten Maßeinheit (1/65536 dB) finden Sie unter KSPROPERTY_AUDIO_VOLUMELEVEL.

Um die Datei wdmudio.inf zu überschreiben, verwenden Sie die Anweisungen Include und Needs, wie in diesem Codesegment aus dem Microsoft Virtual Audio Device Driver Sample als Teil des Windows Driver Kit (WDK) 8.1 Samples verfügbar ist.

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

Weitere Informationen zu den Anweisungen Include und Needs finden Sie im Abschnitt INF DDInstall.

Im Folgenden ist ein Beispiel-INF-Wrapper aufgeführt, der die INF-Datei für den Audioklassentreiber umschließt.

;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"

Da ein relativer HKR-Pfad angegeben wird, wird der genaue Treiberregistrierungspfad basierend auf dem verwendeten INF-Dateiabschnitt bestimmt. Weitere Informationen zu relativen HKR-Pfaden finden Sie unter INF AddReg-Direktive (Windows-Treiber)..

Standardeinstellungen für Die Audiolautstärke

KSPROPERTY_AUDIO_VOLUMELEVEL