Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
Como explicado anteriormente, os clientes WASAPI podem controlar individualmente o nível de volume de cada sessão de áudio . WASAPI aplica a configuração de volume para uma sessão uniformemente a todos os fluxos na sessão. Cada nível de volume é um valor no intervalo de 0,0 a 1,0, onde 0,0 indica silêncio e 1,0 indica volume total (sem atenuação).
Um cliente cria implicitamente uma sessão atribuindo o primeiro fluxo a essa sessão. O nível de volume padrão da nova sessão é 1.0. Como discutido anteriormente, o usuário pode ajustar o nível de volume da sessão através da interface do usuário de um programa de controle (por exemplo, Sndvol) que é um cliente WASAPI. As configurações de controle são persistentes.
Além das configurações de volume controladas pelo cliente, o sistema aplica suas próprias configurações de volume às sessões. Essas configurações são baseadas na política de áudio e mudam dinamicamente em resposta a mudanças nos fluxos que compõem a mistura de áudio global. Para obter mais informações sobre a política de áudio, consulte User-Mode componentes de áudio.
O software do sistema que implementa o controle de volume para cada fluxo multiplica as amostras de PCM no fluxo pelo nível de volume efetivo. O nível de volume efetivo é o resultado da multiplicação das configurações de volume do cliente e do sistema. Assim, a mudança resultante na amplitude do sinal é uma combinação linear dos níveis de volume do cliente e do sistema. Por exemplo, se o nível de volume do cliente for 0,8 e o nível de volume do sistema for 0,5, o nível de volume efetivo será (0,8).(0,5) = 0,4.
Observe que a intensidade percebida não é linear em relação à amplitude do sinal. Em vez disso, a intensidade varia aproximadamente como o logaritmo do nível de volume v:
volume em decibéis = 20.log₁₀(v)
Assim, a configuração v = 0,5 atenua a intensidade do sinal original (o sinal antes do nível de volume é aplicado) em 6 decibéis, a configuração v = 0,25 atenua o sinal em 12 decibéis, e assim por diante. Um nível de volume v = 1,0, correspondente a 0 decibéis, não altera o nível de sinal original.
Os aplicativos de áudio com interfaces de usuário para controlar o nível de volume normalmente exibem controles deslizantes que geram alterações na intensidade percebida que são linearmente proporcionais às mudanças na posição do controle deslizante. Para produzir uma relação linear entre a intensidade percebida e a posição do controle deslizante, o aplicativo deve definir uma relação não linear entre o nível de volume v e a posição do controle deslizante. Para obter mais informações, consulte Audio-Tapered Controles de Volume.
Como explicado anteriormente, o programa de controle de volume do sistema, Sndvol, exibe controles deslizantes de volume para as sessões de áudio que estão sendo reproduzidas em cada dispositivo de renderização de áudio. Esses controles deslizantes aparecem na caixa de grupo rotulada Aplicativos na janela SndVol. Normalmente, cada sessão contém todos os fluxos de reprodução de uma janela específica do aplicativo. Através dos controles deslizantes na janela do Sndvol, os usuários controlam os níveis de volume de aplicativos de áudio individuais.
Como regra geral, um aplicativo deve atribuir todos os seus fluxos de reprodução para a mesma sessão de áudio. O WASAPI não impede que um aplicativo distribua seus fluxos de reprodução entre várias sessões. No entanto, a proliferação resultante de controles deslizantes de volume no Sndvol pode confundir os usuários.
Como opção, uma janela do aplicativo pode exibir um controle deslizante de volume. O controle deslizante do aplicativo deve refletir o estado do controle deslizante Sndvol correspondente em todos os momentos. Assim, se o usuário alterar o nível de volume movendo o controle deslizante na janela do aplicativo, o controle deslizante correspondente na janela do Sndvol deve se mover em uníssono com o controle deslizante do aplicativo. Da mesma forma, se o usuário mover o controle deslizante Sndvol, o controle deslizante do aplicativo deverá se mover em uníssono com o controle deslizante Sndvol.
Para suportar esse comportamento, WASAPI implementa o ISimpleAudioVolume interface. Quando o usuário move o controle deslizante do aplicativo, o aplicativo chama o método ISimpleAudioVolume::SetMasterVolume para ajustar o nível de volume da sessão de acordo. O Sndvol monitora as alterações de volume feitas por meio desse método e reflete as alterações nos controles deslizantes de volume que ele exibe. Além disso, um aplicativo pode receber notificações de alterações de volume de sessão que o usuário faz através do Sndvol. Para este efeito, a aplicação implementa uma interfaceIAudioSessionEventse regista a interface com WASAPI. Depois disso, cada vez que o usuário altera o nível de volume da sessão através do Sndvol, o aplicativo recebe uma chamada de notificação através do métodoIAudioSessionEvents::OnSimpleVolumeChanged. Para obter um exemplo de código que implementa um interface IAudioSessionEvents, consulte Audio Session Events. Para obter um exemplo de código que registra um interface IAudioSessionEvents, consulte Audio Events for Legacy Audio Applications.
O interface de ISimpleAudioVolume aplica o mesmo nível de volume uniformemente a todos os canais em uma sessão de áudio. Embora essa interface deva satisfazer os requisitos de controle de volume da maioria dos aplicativos, alguns aplicativos podem exigir recursos de controle de volume mais especializados. O interface IAudioStreamVolume controla o volume de um fluxo individual em uma sessão em relação aos outros fluxos na sessão. IAudioStreamVolume também permite que um cliente controle individualmente os níveis de volume de todos os canais no fluxo. Por exemplo, um aplicativo pode usar esse recurso para obter efeitos de áudio, como simular o movimento espacial de uma fonte de áudio fazendo movimento panorâmico da esquerda para a direita. Outra interface especializada, IChannelAudioVolume, controla os níveis de volume dos canais individuais em uma sessão. Por exemplo, um aplicativo pode usar IChannelAudioVolume para implementar controles de equilíbrio para um sistema de som estereofônico.
Os controles deslizantes de volume na caixa Aplicativos no Sndvol refletem apenas as alterações de volume feitas por meio da interface ISimpleAudioVolume do. Eles não refletem as alterações de volume que são feitas através do IAudioStreamVolume e IChannelAudioVolume interfaces. Embora alguns aplicativos possam permitir que os usuários controlem direta ou indiretamente as configurações de volume por meio IAudioStreamVolume e IChannelAudioVolume, os desenvolvedores devem evitar apresentar controles deslizantes de aplicativos para essas configurações de volume que os usuários provavelmente confundirão com os controles deslizantes de volume no Sndvol. Caso contrário, um usuário pode mover um controle deslizante de aplicativo esperando ver a alteração refletida em um controle deslizante Sndvol e ficar confuso quando nenhuma alteração ocorrer. Os desenvolvedores podem evitar esse problema através do design cuidadoso da interface do usuário.
O nível de volume efetivo de qualquer canal no submix de sessão, como ouvido nos alto-falantes, é o produto dos seguintes quatro fatores de nível de volume:
- Os níveis de volume por canal dos fluxos na sessão, que os clientes podem controlar através dos métodos na interface IAudioStreamVolume.
- O nível de volume por canal da sessão, que os clientes podem controlar através dos métodos no IChannelAudioVolume interface.
- O nível de volume mestre da sessão, que os clientes podem controlar através dos métodos na interface ISimpleAudioVolume.
- O nível de volume baseado em política da sessão, que o sistema modifica dinamicamente à medida que a combinação global muda.
Cada um dos quatro fatores de nível de volume na lista anterior é um valor no intervalo de 0,0 a 1,0, onde 0,0 indica silêncio e 1,0 indica volume total (sem atenuação). O nível de volume efetivo também é um valor na faixa de 0,0 a 1,0.
O mecanismo de áudio aplica o nível de volume efetivo para cada canal aos canais em um fluxo antes de misturar o fluxo com os outros fluxos na sessão de áudio. Se quaisquer valores de amostra em um canal excederem 0 decibéis depois que o mecanismo de áudio os tiver multiplicado pelo nível de volume efetivo, o mecanismo cortará as amostras antes de adicioná-las à submistura da sessão.
Tópicos relacionados