Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
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 só pode se conectar 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 de taxa de origem conforme necessário.
No Windows XP SP1, Windows Server 2003 e posterior, os pinos de "capture-out" e "render-in" do filtro do sistema AEC (veja a figura a seguir) devem ter a mesma taxa de amostragem, mas as taxas de amostragem nos pinos de "capture-in" e "render-out" podem ser selecionadas independentemente dos outros pinos. A taxa de amostragem no pino de entrada de captura pode ser (em ordem de preferência) 16 kHz, 48 kHz, 44,1 kHz ou 8 kHz. (A ordem de preferência baseia-se no tempo de processamento e na qualidade do áudio.) A taxa de exemplo no pin 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 exemplo 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 mixagem, conversão de taxa de amostragem, espaço 3D e assim por diante. Toda a mistura 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 realizado antes do nó AEC ou NS no lado de captura do gráfico, ou após o nó AEC ou NS no lado de renderização, deve ser linear e invariante 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 pela AEC em seu computador. O áudio que é emitido por meio de canais que não passam pela AEC não possui cancelamento de 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 (nem 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 do 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: 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 a 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 mistura acelerada por hardware quando o AEC está habilitado.
P: O filtro do sistema AEC funcionará com meu antigo cartão Sound Blaster 16?
R: 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 que os pinos de renderização e captura do filtro do sistema AEC dão suporte. Novos cartões de áudio devem ser projetados para dar suporte a profundidades de bits de pelo menos 16 bits para renderização e captura.
Resumo dos formatos de dados para pins AEC
Um aplicativo DirectSound que habilita o filtro do sistema AEC pode escolher para seus buffers DirectSound qualquer taxa de amostragem 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 kHz e 16 bits antes de entrar no sistema de filtro AEC. Da mesma forma, o KMixer pode converter os dados destinados ao buffer de captura de um aplicativo DirectSoundCapture em um formato de 16 kHz mono de 16 bits depois de passar pelo 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 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 amostragem do pin de renderização do AEC, e o pino de captura de hardware deverá dar suporte a uma das taxas de amostragem do pin de captura do AEC. Para obter o melhor desempenho do AEC, seu hardware deve suportar uma taxa de amostragem de 16 kHz, além de quaisquer taxas mais altas que também suporte. Ao suportar a taxa de 16 kHz, o hardware reduz a quantidade de processamento que o filtro do sistema AEC deve realizar, eliminando a necessidade de fazer a conversão da taxa de amostragem.
O pin 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 pino de saída de captura oferece suporte apenas a um formato:
- Um formato de PCM de 16 kHz mono com um tamanho de amostra de 16 bits
Se o formato de buffer do aplicativo DirectSoundCapture for PCM mono de 16 bits a 16 kHz, o pino de captura de AEC pode ignorar o KMixer e conectar-se diretamente ao DSound.DLL (consulte a figura anterior). Caso contrário, o pino de saída de captura AEC conecta-se ao KMixer, que converte o fluxo PCM mono de 16 bits e 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 pino de captura pode suportar 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âmetro de formato de dados mostrados na tabela a seguir.
| Membro KSDATARANGE | Valor do 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 o Intervalo de Dados de Fluxo de PCM.