Personnalisation des paramètres de volume du pilote audio HD

La possibilité de personnaliser le volume audio hd par défaut et les niveaux d’augmentation du microphone en fonction d’un PC spécifique, offre aux oem une certaine flexibilité dans leurs paramètres d’installation de la carte audio.

Notes

Le processus décrit ici ne peut être utilisé que si le pilote Microsoft HD Audio par défaut est utilisé.

Par défaut, le pilote de fonction de classe Audio HD définit le volume audio et les niveaux de boost du microphone à des valeurs prédéterminées pour garantir une expérience « prête à l’emploi » agréable pour l’utilisateur.

Le pilote de fonction de classe Audio HD, qui est ici appelé pilote de classe Audio, utilise différentes valeurs par défaut codées en dur qui ne peuvent pas être personnalisées pour un PC particulier. Par conséquent, les oem ne peuvent pas remplacer ces valeurs pour répondre à leurs propres besoins. Et l’un des paramètres les plus importants à ajuster est le niveau de volume, car les utilisateurs sont sensibles à la hauteur ou au silence de leurs systèmes audio, en particulier lors de la première utilisation.

Le pilote de classe Audio a été repensé pour vous permettre de remplacer les valeurs par défaut codées en dur. Le mécanisme de substitution des valeurs codées en dur du pilote de classe Audio implique l’écriture d’un fichier INF qui encapsule le fichier INF de boîte de réception du pilote de classe Audio (hdaudio.inf) et l’utilisation de ce wrapper INF pour spécifier les valeurs souhaitées.

Le diagramme suivant montre un exemple de topologie de codec HD Audio. Il existe des ID pour les nœuds individuels et des ID pour les complexes de broches. Diagramme d’un exemple de topologie de codec audio avec des complexes de broches représentant des connecteurs physiques, y compris des nœuds d’entrée de micro et de ligne, et un nœud de sortie de haut-parleur avec des ID complexes de broches.

Les complexes de broches représentent les connecteurs physiques de l’appareil associé (par exemple, haut-parleur, micro ou ligne).

Pour spécifier un niveau de volume audio personnalisé ou un niveau d’augmentation du microphone, utilisez le fichier INF du wrapper pour spécifier des niveaux personnalisés par ID complexe de broche. Les niveaux sont exprimés en tant que DWORD qui représentent les niveaux de décibels de diffusion en continu du noyau (KS) par défaut que le pilote de classe doit retourner.

Lorsque le pilote de classe Audio HD reçoit une demande GET pour KSPROPERTY_AUDIO_VOLUMELEVEL, le pilote détermine s’il existe ou non une valeur de volume par défaut (ou d’augmentation du micro) dans le Registre pour le chemin qui contient le nœud qui a reçu la demande. S’il existe une valeur dans le Registre, mais qu’aucune valeur n’est précédemment mise en cache, la valeur par défaut dans le Registre est appliquée à l’appareil et également retournée dans la réponse KSPROPERTY_AUDIO_VOLUMELEVEL. S’il n’existe aucune valeur dans le Registre, le pilote de classe Audio HD récupère une valeur par défaut à partir de l’implémentation de graphe de sous-appareil.

À compter de Windows Vista, les valeurs par défaut sont les suivantes :

  • Le volume de point de terminaison est par défaut maximal moins 6 dB pour tous les types d’appareils.

  • La valeur par défaut de l’augmentation du microphone est de 0 dB.

Les étapes suivantes résument l’algorithme utilisé par le pilote de classe Audio pour déterminer les valeurs par défaut à retourner en réponse à une requête GET pour KSPROPERTY_AUDIO_VOLUMELEVEL :

  1. Déterminez le complexe de broches auquel se termine le chemin d’accès contenant le nœud de volume interrogé.

  2. Effectuez une recherche dans le Registre pour voir si une valeur par défaut d’augmentation de volume ou de microphone a été fournie pour le complexe de broches trouvé à l’étape 1.

  3. Si une valeur est trouvée dans le Registre, le pilote définit cette valeur sur la valeur minimale, si elle est inférieure à la valeur minimale prise en charge par l’amplificateur. Sinon, la valeur est définie sur la valeur maximale, si elle se situe au-dessus de la valeur maximale prise en charge par l’amplificateur. Si la valeur trouvée dans le Registre se trouve dans la plage prise en charge par l’amplificateur, la valeur est retournée en réponse à la requête GET. En outre, le pilote programme le widget d’amplificateur audio HD associé avec cette valeur lors du rendu vers ou de la capture à partir du complexe de broches.

L’arborescence de dossiers suivante montre la disposition du pilote instance clé qui contient les valeurs par défaut.

<Driver Key> DefaultVolumeLevels Pin Complex (HEX à 2 chiffres, non précédé de « 0x ») Volume (DWORD dans les étapes de la base de données KS) Boost (DWORD dans les étapes de base de données KS)

Les valeurs pas à pas de la base de données KS sont définies comme suit : -2147483648 est -infini décibels (atténuation)

-2147483647 est -32767.99998474 décibels (atténuation)

+2147483647 est +32767.99998474 décibels (gain)

Pour plus d’informations sur l’unité de mesure utilisée (1/65536 dB), consultez KSPROPERTY_AUDIO_VOLUMELEVEL.

Pour remplacer le fichier wdmudio.inf, utilisez les directives Include et Needs comme indiqué dans ce segment de code à partir de l’exemple Microsoft Virtual Audio Device Driver driver disponible dans le cadre des exemples WDK (Windows Driver Kit) 8.1.

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

Pour plus d’informations sur les directives Include et Needs, consultez la section INF DDInstall.

Voici un exemple de wrapper INF qui encapsule le fichier INF pour le pilote de classe Audio.

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

Étant donné qu’un chemin d’accès relatif HKR est spécifié, le chemin exact du Registre des pilotes est déterminé en fonction de la section de fichier INF spécifique utilisée. Pour plus d’informations sur les chemins relatifs HKR, consultez Directive AddReg INF (Pilotes Windows).

Paramètres de volume audio par défaut

KSPROPERTY_AUDIO_VOLUMELEVEL