Personalizzazione delle impostazioni del volume del driver audio HD
La possibilità di personalizzare il volume audio predefinito in box HD e i livelli di aumento del microfono per adattarsi a un PC specifico, offre alcune flessibilità nei parametri di installazione dell'adattatore audio.
Nota
Il processo descritto qui può essere usato solo se viene usato il driver audio Microsoft HD predefinito.
Per impostazione predefinita, il driver di funzione della classe AUDIO HD imposta il volume audio e i livelli di aumento del microfono a valori predeterminati per garantire un'esperienza "fuori casella" piacevole per l'utente.
Il driver di funzione della classe AUDIO HD, noto qui come driver di classe audio, usa vari valori predefiniti hardcoded che non possono essere personalizzati per qualsiasi PC specifico. Di conseguenza, le macchine virtuali non sono in grado di eseguire l'override di questi valori per soddisfare i propri requisiti. E una delle impostazioni più importanti da modificare è il livello del volume, poiché gli utenti sono sensibili alla rumorosità o alla tranquillità dei loro sistemi audio, soprattutto durante la prima volta.
Il driver della classe audio è stato riprogettata per consentire di eseguire l'override dei valori predefiniti hardcoded. Il meccanismo per l'override dei valori hardcoded del driver della classe audio comporta la scrittura di un file INF che esegue il wrapping del file INF (hdaudio.inf) del driver della classe audio e l'uso di questo wrapper INF per specificare i valori desiderati.
Il diagramma seguente mostra una topologia di codec AUDIO HD di esempio. Per i singoli nodi sono disponibili ID e ID per i complessi di pin.
I complessi di pin rappresentano i connettori fisici per il dispositivo associato(ad esempio, altoparlante, microfono o linea).
Per specificare un livello di volume audio o un livello di aumento del microfono personalizzato, usare il file WRAPPER INF per specificare livelli personalizzati per ID complesso pin. I livelli vengono espressi come DWORD che rappresentano i livelli di decibel del kernel predefiniti restituiti dal driver di classe.
Quando il driver della classe AUDIO HD riceve una richiesta GET per KSPROPERTY_AUDIO_VOLUMELEVEL, il driver determina se nel Registro di sistema è presente o meno un valore di volume predefinito (o Mic boost) per il percorso che contiene il nodo che ha ricevuto la richiesta. Se nel Registro di sistema è presente un valore, ma non esiste alcun valore memorizzato nella cache precedente, il valore predefinito nel Registro di sistema verrà applicato al dispositivo e restituito anche nella risposta KSPROPERTY_AUDIO_VOLUMELEVEL. Se nel Registro di sistema non è presente alcun valore, il driver di classe HD Audio recupera un valore predefinito dall'implementazione del grafico del sotto-dispositivo.
A partire da Windows Vista, i valori predefiniti sono i seguenti:
Il volume degli endpoint è predefinito per il massimo meno 6 dB per tutti i tipi di dispositivo.
Il microfono aumenta le impostazioni predefinite su 0 dB.
La procedura seguente riepiloga l'algoritmo usato dal driver della classe audio per determinare i valori predefiniti da restituire in risposta a una richiesta GET per KSPROPERTY_AUDIO_VOLUMELEVEL:
Determinare il complesso del pin in corrispondenza del quale termina il percorso contenente il nodo del volume sottoposto a query.
Eseguire una ricerca del Registro di sistema per verificare se è stato fornito un valore predefinito di aumento del volume o del microfono per il pin complesso trovato nel passaggio 1.
Se nel Registro di sistema viene trovato un valore, il driver imposta tale valore sul minimo, se scende al di sotto del valore minimo supportato dall'amplificatore. In caso contrario, il valore viene impostato sul valore massimo, se scende al di sopra del valore massimo supportato dall'amplificatore. Se il valore trovato nel Registro di sistema si trova all'interno dell'intervallo supportato dall'amplificatore, il valore viene restituito in risposta alla richiesta GET. Inoltre, il driver programma il widget dell'amplificatore AUDIO HD associato con questo valore durante il rendering o l'acquisizione dal complesso del pin.
L'albero delle cartelle seguente mostra il layout della chiave dell'istanza del driver che contiene i valori predefiniti.
<Chiave> driver DefaultVolumeLevels Pin Complex (2 cifre HEX, non preceduto da volume "0x") (DWORD nei passaggi di KS DB) Boost (DWORD in KS DB steps)
I valori di esecuzione del database KS sono definiti come segue: -2147483648 è decibel infinito (attenuazione)
-2147483647 è -32767.99998474 decibel (attenuazione)
+2147483647 è +32767.99998474 decibel (guadagno)
Per altre informazioni sull'unità di misura usata (1/65536 dB), vedere KSPROPERTY_AUDIO_VOLUMELEVEL.
Per eseguire l'override del file wdmudio.inf, usare le direttive Includi e Esigenze, come illustrato in questo segmento di codice dall'esempio di driver audio virtuale Microsoft disponibile come parte degli esempi di Windows Driver Kit (WDK) 8.1.
;Copyright (c) Microsoft Corporation. All rights reserved.
;
...
[MSVAD_Simple.NT]
Include=ks.inf,wdmaudio.inf
Needs=KS.Registration, WDMAUDIO.Registration
...
Per altre informazioni sulle direttive Includi e esigenze, vedere la sezione INF DDInstall.
Di seguito è riportato un wrapper INF di esempio che esegue il wrapping del file INF per il driver della 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"
Poiché viene specificato un percorso relativo HKR, il percorso esatto del Registro di sistema del driver verrà determinato in base alla sezione specifica del file INF usata. Per altre informazioni sui percorsi relativi di HKR, vedere Direttiva INF AddReg (Driver Windows).