Personalizando as configurações de volume do driver de áudio HD
A capacidade de personalizar o volume de áudio padrão de áudio HD na caixa e os níveis de aumento do microfone para atender a um computador específico fornece aos OEMs alguma flexibilidade em seus parâmetros de instalação do adaptador de áudio.
Observação
O processo descrito aqui só poderá ser usado se o driver padrão do Microsoft HD Audio estiver sendo usado.
Por padrão, o driver de função da classe de áudio HD define o volume de áudio e o microfone aumenta os níveis em valores predeterminados para garantir uma experiência agradável "pronta para uso" para o usuário.
O driver de função da classe de áudio HD, que é conhecido aqui como o driver de Classe de Áudio, usa vários valores padrão embutidos em código que não podem ser personalizados para nenhum computador específico. Dessa forma, os OEMs não são capazes de substituir esses valores para atender aos seus próprios requisitos. E uma das configurações mais importantes para ajustar é o nível de volume, pois os usuários são sensíveis à intensidade ou silêncio de seus sistemas de áudio, especialmente durante o uso pela primeira vez.
O driver classe de áudio foi reprojetado para permitir que você substitua os valores padrão embutidos em código. O mecanismo para substituir os valores embutidos em código do driver de Classe de Áudio envolve a gravação de um arquivo INF que encapsula o arquivo INF da caixa de entrada do driver de Classe de Áudio (hdaudio.inf) e o uso desse INF wrapper para especificar os valores desejados.
O diagrama a seguir mostra uma topologia codec de áudio HD de exemplo. Há IDs para os nós individuais e IDs para os complexos de pino.
Os complexos de pino representam os conectores físicos para o dispositivo associado (por exemplo, alto-falante, microfone ou linha).
Para especificar um nível de aumento de volume de áudio personalizado ou de microfone, use o arquivo INF do wrapper para especificar níveis personalizados por ID complexa de pino. Os níveis são expressos como DWORDs que representam os níveis de decibéis de streaming de kernel (KS) padrão que o driver de classe deve retornar.
Quando o driver de classe de áudio HD recebe uma solicitação GET para KSPROPERTY_AUDIO_VOLUMELEVEL, o driver determina se há ou não um valor de volume padrão (ou aumento de microfone) no registro para o caminho que contém o nó que recebeu a solicitação. Se houver um valor no registro, mas não houver nenhum valor armazenado em cache anteriormente, o valor padrão no Registro será aplicado ao dispositivo e também retornado na resposta KSPROPERTY_AUDIO_VOLUMELEVEL. Se não houver nenhum valor no Registro, o driver de classe de áudio HD recuperará um valor padrão da implementação do grafo do sub-dispositivo.
A partir do Windows Vista, os valores padrão são os seguintes:
O volume do ponto de extremidade usa como padrão o máximo menos 6 dB para todos os tipos de dispositivo.
O aumento do microfone usa como padrão 0 banco de dados.
As etapas a seguir resumem o algoritmo usado pelo driver da Classe de Áudio para determinar os valores padrão a serem retornados em resposta a uma solicitação GET para KSPROPERTY_AUDIO_VOLUMELEVEL:
Determine o complexo de pinos no qual o caminho que contém o nó de volume consultado termina.
Execute uma pesquisa do Registro para ver se um valor padrão de aumento de volume ou microfone foi fornecido para o complexo de pinos encontrado na etapa 1.
Se um valor for encontrado no registro, o driver definirá esse valor como o mínimo, se ele ficar abaixo do valor mínimo suportado pelo amplificador. Caso contrário, o valor será definido como o máximo, se ele ficar acima do valor máximo suportado pelo amplificador. Se o valor encontrado no registro estiver dentro do intervalo compatível com o amplificador, o valor será retornado em resposta à solicitação GET. Além disso, o driver programa o widget do amplificador hd audio associado com esse valor ao renderizar ou capturar do complexo de pinos.
A árvore de pastas a seguir mostra o layout da chave de instância do driver que contém os valores padrão.
<Driver Key> DefaultVolumeLevels Pin Complex (HEX de 2 dígitos, não precedido por volume "0x") (DWORD nas etapas do KS DB) Boost (DWORD nas etapas do KS DB)
Os valores de etapa do BD KS são definidos da seguinte maneira: -2147483648 é -infinity decibels (atenuação)
-2147483647 é -32767.99998474 decibéis (atenuação)
+2147483647 é +32767,99998474 decibéis (ganho)
Para obter mais informações sobre a unidade de medida usada (1/65536 dB), consulte KSPROPERTY_AUDIO_VOLUMELEVEL.
Para substituir o arquivo wdmudio.inf, use as diretivas Include e Needs conforme mostrado neste segmento de código do Exemplo de Driver de Dispositivo de Áudio Virtual da Microsoft disponível como parte dos Exemplos do 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
...
Para obter mais informações sobre as diretivas Include e Needs, consulte a Seção INF DDInstall.
Veja a seguir um wrapper INF de exemplo que encapsula o arquivo INF para o driver da Classe de Áudio.
;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"
Como um caminho relativo HKR é especificado, o caminho exato do registro do driver será determinado com base na seção de arquivo INF específica usada. Para obter mais informações sobre caminhos relativos do HKR, consulte Diretiva AddReg inf (drivers do Windows).