Filtro do Sistema AEC
O filtro do sistema AEC (Aec.sys) implementa os algoritmos de cancelamento de eco acústico (AEC) e NS (supressão de ruído) no software. Esse filtro é um componente padrão do sistema operacional no Windows XP e posterior. Para obter informações sobre como os aplicativos DirectSoundCapture habilitam o uso do filtro do sistema AEC, consulte a documentação do SDK do Microsoft Windows.
Restrições impostas pelo filtro do sistema AEC
Um grafo de filtro de áudio que incorpora um efeito de captura implementado no filtro do sistema AEC está sujeito às seguintes restrições:
O filtro do sistema AEC pode se conectar somente a pinos que lidam com formatos de dados PCM.
A profundidade do bit deve ser de 16 bits para o fluxo de captura e 8 ou 16 bits para o fluxo de renderização.
O filtro do sistema AEC executa todo o processamento interno a 16 kHz. Os fluxos de entrada e saída são convertidos na taxa de origem conforme necessário.
No Windows XP SP1, Windows Server 2003 e posteriores, os pinos de captura e renderização do filtro do sistema AEC (veja a figura a seguir) devem ter a mesma taxa de amostragem, mas as taxas de exemplo nos pinos de captura e renderização podem ser selecionadas independentemente dos outros pinos. A taxa de amostragem no pin de captura pode ser (em ordem de preferência) 16 kHz, 48 kHz, 44,1 kHz ou 8 kHz. (A ordem de preferência é baseada no tempo de processamento e na qualidade do áudio.) A taxa de amostragem no pino de renderização pode ser (em ordem de preferência) 16 kHz, 48 kHz ou 44,1 kHz. Observe que o pin de renderização não dá suporte a uma taxa de amostragem de 8 kHz.
Os nós AEC e NS (veja a figura em Expondo Hardware-Accelerated efeitos de captura) podem lidar apenas com fluxos monofônicos. Se o fluxo de captura for multicanal (por exemplo, estéreo de dois canais), todos os canais diferentes do primeiro serão ignorados (e descartados). Somente fluxos monofônicos podem ser processados pelo lado da renderização.
No Windows XP SP1, Windows Server 2003 e posterior, essa limitação não existe. O filtro do sistema AEC lida corretamente com incompatibilidades entre os relógios para os fluxos de captura e renderização, e dispositivos separados podem ser usados para captura e renderização.
Quando o filtro do sistema AEC é usado, o driver do sistema SysAudio desativa a aceleração de hardware para combinação, conversão de taxa de exemplo, espacialização 3D e assim por diante. Toda a combinação de fluxos é feita na emulação de software pelo driver do sistema KMixer. Essa restrição é necessária para garantir que todo o áudio reproduzido pelo dispositivo de renderização possa ser cancelado do fluxo de captura pelo filtro do sistema AEC.
Qualquer processamento de sinal feito antes do nó AEC ou NS no lado da captura do grafo ou após o nó AEC ou NS no lado da renderização deve ser linear invariável no tempo. A execução de qualquer processamento de sinal não linear ou de variação de tempo em qualquer um desses locais impede que a AEC cancele o eco no sinal de captura.
A filtragem AEC cancela apenas ecos provenientes dos canais filtrados por AEC em seu computador. O áudio que é gerado por meio de canais que não passam pela AEC não é cancelado por eco. Ecos em um canal de áudio não AEC são funcionalmente equivalentes a ecos no áudio que está sendo reproduzido em um rádio no escritório ao lado do computador. A AEC não tem como cancelar (e nenhum efeito sobre) ecos de um rádio ou de um canal não AEC.
Os requisitos anteriores se aplicam a todos os grafos de filtro de áudio de streaming de kernel que incorporam efeitos de captura implementados em Aec.sys. Essas restrições refletem suposições fundamentais no design e na implementação do filtro do sistema AEC. As restrições em formatos de fluxo podem mudar em versões futuras do Windows.
Qualquer design de produto que use o filtro do sistema AEC deve levar em conta as restrições anteriores. As seguintes perguntas e respostas mostram como essas restrições podem afetar o comportamento de filtragem da AEC:
P: Criei um buffer DirectSound para renderização estéreo, mas ambos os canais soam iguais quando estou usando a AEC. Por que é isso?
R: A AEC funciona apenas em fluxos mono, portanto, o KMixer está misturando o fluxo estéreo de volta ao mono para atender a essa restrição.
P: Por que meu áudio de 44 kHz e 16 bits soa como 16 kHz quando uso o AEC?
R: Como o filtro do sistema AEC executa todo o processamento interno a 16 kHz.
P: Por que não consigo obter um buffer DirectSound acelerado por hardware com a AEC?
R: Como o SysAudio desativa a combinação acelerada por hardware quando a AEC está habilitada.
P: O filtro do sistema AEC funcionará com meu antigo Sound Blaster 16 cartão?
A: Sim. Embora o cartão Sound Blaster16 não consiga gerenciar simultaneamente fluxos de renderização e captura de 16 bits, ele pode gerenciar simultaneamente um fluxo de renderização de 8 bits e um fluxo de captura de 16 bits, que é uma combinação à qual os pinos de renderização e captura do filtro do sistema AEC dão suporte. Novas placas de áudio devem ser projetadas para dar suporte a profundidades de bits de pelo menos 16 bits para renderização e captura.
Resumo dos formatos de dados para pinos AEC
Um aplicativo DirectSound que habilita o filtro do sistema AEC pode escolher para seus buffers DirectSound qualquer taxa de amostra ou tamanho de amostra compatível com o KMixer. O KMixer converte os dados do buffer de renderização do aplicativo em um formato mono de 16 bits de 16 kHz antes de entrar no filtro do sistema AEC. Da mesma forma, o KMixer pode converter os dados destinados ao buffer de captura de um aplicativo DirectSoundCapture em um formato mono de 16 bits de 16 bits de 16 kHz depois de sair do filtro do sistema AEC. No entanto, para minimizar a quantidade de processamento feita no grafo e obter a mais alta qualidade de áudio, os aplicativos devem usar um formato mono de 16 bits de 16 bits de 16 kHz para os buffers de renderização e captura.
Se você quiser que o hardware de áudio funcione com o filtro do sistema AEC, o pino de renderização de hardware deverá dar suporte a pelo menos uma das taxas de exemplo compatíveis com o pin de renderização do AEC, e o pin de captura de hardware deve dar suporte a uma das taxas de exemplo compatíveis com o pin de captura do AEC. Para obter o melhor desempenho do AEC, seu hardware deve dar suporte a uma taxa de amostragem de 16 kHz, além de quaisquer taxas mais altas compatíveis. Ao dar suporte à taxa de 16 kHz, o hardware reduz a quantidade de processamento que o filtro do sistema AEC deve fazer eliminando a necessidade de fazer a conversão de taxa de amostragem.
O pino de renderização do filtro do sistema AEC conecta-se ao pino de saída do KMixer. O KMixer executa a conversão necessária de seus fluxos de entrada para o formato que o pino de renderização requer. O pin de renderização dá suporte apenas a dois formatos de dados:
Um formato PCM mono de 16 kHz com um tamanho de amostra de 16 bits
Um formato PCM mono de 16 kHz com um tamanho de amostra de 8 bits
O pin de captura-out dá suporte apenas a um formato:
- Um formato PCM mono de 16 kHz com um tamanho de amostra de 16 bits
Se o formato de buffer do aplicativo DirectSoundCapture for um PCM mono de 16 bits de 16 bits de 16 kHz, o pin de captura do AEC poderá ignorar o KMixer e conectar-se diretamente a DSound.DLL (consulte a figura anterior). Caso contrário, o pino de captura do AEC se conecta ao KMixer, que converte o fluxo PCM mono de 16 bits de 16 kHz do pino em qualquer formato que o buffer de captura do aplicativo usar.
O pin de renderização do AEC pode manipular qualquer um dos seguintes formatos:
PCM de 16 kHz de 16 bits com dois canais (estéreo)
PCM de 8 bits de 16 kHz com dois canais
PCM de 16 bits de 48 kHz com dois canais
PCM de 8 bits de 48 kHz com dois canais
PCM de 16 bits de 44,1 kHz com dois canais
PCM de 8 bits de 44,1 kHz com dois canais
O pino de renderização produz um fluxo estéreo copiando o canal único do nó AEC para ambos os canais do fluxo de saída.
O pin de captura pode manipular qualquer um dos seguintes formatos:
PCM de 16 kHz de 16 bits com qualquer número de canais
PCM de 16 bits de 48 kHz com qualquer número de canais
PCM de 16 bits de 44,1 kHz com qualquer número de canais
PCM de 8 kHz de 16 bits com qualquer número de canais
O pin de captura usa apenas o primeiro canal e ignora (e descarta) os outros.
Todos os pinos do filtro do sistema AEC usam os valores de parâmetro de formato de dados mostrados na tabela a seguir.
Membro KSDATARANGE | Valor de Parâmetro |
---|---|
MajorFormat |
KSDATAFORMAT_TYPE_AUDIO |
SubFormatação |
KSDATAFORMAT_SUBTYPE_PCM |
Especificador |
KSDATAFORMAT_SPECIFIER_WAVEFORMATEX |
Para obter mais informações sobre os membros MajorFormat, SubFormat e Specifier , consulte KSDATARANGE. Para obter um exemplo de um descritor de intervalo de dados KSDATARANGE_AUDIO que usa esses três valores de parâmetro, consulte Intervalo de dados de fluxo de PCM.