Partilhar via


Filtro do sistema AEC

O filtro do sistema AEC (Aec.sys) implementa os algoritmos de cancelamento de eco acústico (AEC) e supressão de ruído (NS) em software. Este filtro é um componente padrão do sistema operacional no Windows XP e posterior. Para obter informações sobre como os aplicativos DirectSoundCapture permitem 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 gráfico 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 apenas a pinos que lidam com formatos de dados PCM.

  • A profundidade de bits 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 realiza todo o processamento interno a 16 kHz. Os fluxos de entrada e saída são ajustados à taxa de origem conforme necessário.

  • No Windows XP SP1, Windows Server 2003 e versões posteriores, os pinos de captura e renderização do filtro do sistema AEC (consulte a figura a seguir) devem ter a mesma taxa de amostragem, mas as taxas de amostragem nos pinos de captura e renderização podem ser selecionadas independentemente dos outros pinos. A taxa de amostragem no pino de captura pode ser (por ordem de preferência) de 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 (por ordem de preferência) de 16 kHz, 48 kHz ou 44,1 kHz. Observe que o pino de renderização não suporta uma taxa de amostragem de 8 kHz.

Diagrama ilustrando os pinos e conexões de um filtro do sistema AEC.

  • Os nós AEC e NS (veja a figura em Exposing Hardware-Accelerated Capture Effects) 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). Apenas 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 mistura, conversão de taxa de amostragem, espacialização 3D e assim por diante. Toda a mistura de fluxos é feita através de 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 fora 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 gráfico ou após o nó AEC ou NS no lado da renderização deve ser linear invariante no tempo. A execução de qualquer processamento de sinal não linear ou variável no tempo em qualquer um desses locais impede que a AEC cancele o eco no sinal de captura.

  • A filtragem AEC cancela apenas os ecos provenientes dos canais filtrados por AEC no seu computador. O áudio que é emitido através de canais que não passam pelo AEC não é eco-cancelado. Os ecos num canal de áudio não AEC são funcionalmente equivalentes aos ecos no áudio que está a ser reproduzido num rádio no escritório junto ao computador. AEC não tem como cancelar nem afetar ecos de um rádio ou de um canal sem AEC.

Os requisitos anteriores aplicam-se a todos os gráficos de filtros de áudio de fluxo contínuo do kernel que incorporam efeitos de captura que são implementados no Aec.sys. Estas restrições refletem pressupostos fundamentais na conceção e implementação do filtro do sistema AEC. As restrições nos formatos de fluxo podem mudar em versões futuras do Windows.

Qualquer projeto de produto que use o filtro do sistema AEC deve levar em conta as restrições anteriores. As perguntas e respostas a seguir mostram como essas restrições podem afetar o comportamento de filtragem AEC:

P: Criei um buffer DirectSound para renderização estéreo, mas ambos os canais soam da mesma forma quando estou usando AEC. Porquê?

R: O AEC funciona apenas em fluxos mono, por isso o KMixer está a misturar o fluxo estéreo de volta ao mono para cumprir esta restrição.

P: Porque é que o meu áudio de 44 kHz e 16 bits soa como 16 kHz quando utilizo AEC?

R: Porque 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 AEC?

R: Porque o SysAudio desativa a mistura acelerada por hardware quando o AEC está ativado.

P: O filtro do sistema AEC funcionará com a minha antiga placa Sound Blaster 16?

R: Sim. Embora a placa Sound Blaster16 não seja capaz de gerenciar simultaneamente fluxos de renderização e captura de 16 bits, ela pode gerenciar simultaneamente um fluxo de renderização de 8 bits e um fluxo de captura de 16 bits, que é uma combinação que os pinos de renderização e captura do filtro do sistema AEC suportam. Novas placas de áudio devem ser projetadas para suportar profundidades de bits de pelo menos 16 bits para renderização e captura.

Resumo dos formatos de dados para pinos AEC

Uma aplicação DirectSound que permite o filtro do sistema AEC pode escolher para os seus buffers DirectSound qualquer taxa de amostragem ou tamanho de amostra suportado pelo KMixer. O KMixer converte os dados do buffer de renderização do aplicativo para 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 uma aplicação DirectSoundCapture para um formato mono de 16 bits a 16 kHz, após serem processados pelo filtro do sistema AEC. No entanto, para minimizar a quantidade de processamento feito no gráfico e alcançar a mais alta qualidade de áudio, os aplicativos devem usar um formato mono de 16 bits de 16 kHz para os buffers de renderização e captura.

Se você quiser que seu hardware de áudio funcione com o filtro do sistema AEC, o pino de renderização de hardware deve suportar pelo menos uma das taxas de amostragem suportadas pelo pino de renderização AEC e o pino de captura de hardware deve suportar uma das taxas de amostragem suportadas pelo pino de captura AEC. Para obter o melhor desempenho AEC, seu hardware deve suportar uma taxa de amostragem de 16 kHz, além de quaisquer taxas mais altas suportadas. Ao suportar a 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 da taxa de amostragem.

O pino de renderização do filtro do sistema AEC liga-se ao pino de saída do KMixer. O KMixer executa a conversão necessária dos seus fluxos de entrada para o formato que o pino de renderização requer. O pino de renderização suporta apenas 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 pino de captura suporta apenas 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 PCM mono de 16 bits de 16 kHz, o pino de captura AEC poderá ignorar o KMixer e conectar-se diretamente ao DSound.DLL (veja a figura anterior). Caso contrário, o pino de saída captura AEC conecta-se ao KMixer, que converte o fluxo PCM mono de 16 kHz e 16 bits do pino para qualquer formato usado pelo buffer de captura da aplicação.

O pino de renderização AEC pode lidar com 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 único canal do nó AEC para ambos os canais do fluxo de saída.

O pino de captura pode lidar com 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 16 bits de 8 kHz com qualquer número de canais

O pino 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âmetros de formato de dados mostrados na tabela a seguir.

Membro KSDATARANGE Valor do parâmetro

MajorFormat

KSDATAFORMAT_TYPE_AUDIO

de subformato

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 PCM Stream Data Range.