Filtro del sistema AEC
El filtro del sistema AEC (Aec.sys) implementa los algoritmos de cancelación de eco acústico (AEC) y supresión de ruido (NS) en software. Este filtro es un componente estándar del sistema operativo en Windows XP y versiones posteriores. Para obtener información sobre cómo las aplicaciones directSoundCapture permiten el uso del filtro del sistema AEC, consulte la documentación de Microsoft Windows SDK.
Restricciones impuestas por el filtro del sistema AEC
Un gráfico de filtros de audio que incorpora un efecto de captura que se implementa en el filtro del sistema AEC está sujeto a las siguientes restricciones:
El filtro del sistema AEC solo puede conectarse a patillas que controlan formatos de datos PCM.
La profundidad de bits debe ser de 16 bits para el flujo de captura y 8 o 16 bits para la secuencia de representación.
El filtro del sistema AEC realiza todo el procesamiento interno a 16 kHz. Los flujos de entrada y salida se convierten según sea necesario.
En Windows XP SP1, Windows Server 2003 y versiones posteriores, los pins de captura y representación del filtro del sistema AEC (consulte la ilustración siguiente) deben tener la misma frecuencia de muestreo, pero las velocidades de muestreo en los pins de captura y representación se pueden seleccionar de forma independiente de los demás pines. La frecuencia de muestreo en el pin de captura puede ser (en orden de preferencia) 16 kHz, 48 kHz, 44,1 kHz o 8 kHz. (El orden de preferencia se basa en el tiempo de procesamiento y la calidad del audio). La frecuencia de muestreo en el pin de representación puede ser (en orden de preferencia) 16 kHz, 48 kHz o 44,1 kHz. Tenga en cuenta que el pin de representación no admite una frecuencia de muestreo de 8 kHz.
Los nodos AEC y NS (consulte la figura de Exposición de Hardware-Accelerated Efectos de captura) solo pueden controlar flujos monofónicos. Si la secuencia de captura es multicanal (por ejemplo, estéreo de dos canales), todos los canales distintos de los primeros se omiten (y se descartan). Solo las secuencias monofónicas se pueden procesar en el lado de representación.
En Windows XP SP1, Windows Server 2003 y versiones posteriores, esta limitación no existe. El filtro del sistema AEC controla correctamente los errores de coincidencia entre los relojes de las secuencias de captura y representación, y se pueden usar dispositivos independientes para la captura y la representación.
Cuando se usa el filtro del sistema AEC, el controlador del sistema SysAudio desactiva la aceleración de hardware para mezclar, la conversión de velocidad de muestreo, la espacialización 3D, etc. Toda la mezcla de secuencias se realiza en la emulación de software por el controlador del sistema KMixer. Esta restricción es necesaria para asegurarse de que el filtro del sistema AEC puede cancelar todo el audio que reproduce el dispositivo de representación fuera de la secuencia de captura.
Cualquier procesamiento de señales que se realice antes del nodo AEC o NS en el lado de captura del gráfico o después del nodo AEC o NS en el lado de representación debe ser invariable de tiempo lineal. Realizar cualquier procesamiento de señal no lineal o variable de tiempo en cualquiera de estas ubicaciones impide que AEC cancele el eco en la señal de captura.
El filtrado de AEC solo cancela los ecos procedentes de los canales filtrados por AEC en el equipo. El audio que se genera a través de canales que no pasan a través de AEC no se cancela con eco. Los ecos en un canal de audio que no sea AEC son funcionalmente equivalentes a los ecos en el audio que se está reproduciendo en una radio en la oficina junto a su ordenador. AEC no tiene ninguna manera de cancelar (y ningún efecto en) ecos de un canal de radio o no AEC.
Los requisitos anteriores se aplican a todos los gráficos de filtros de audio de streaming de kernel que incorporan efectos de captura que se implementan en Aec.sys. Estas restricciones reflejan supuestos fundamentales en el diseño y la implementación del filtro del sistema AEC. Las restricciones en los formatos de secuencia pueden cambiar en versiones futuras de Windows.
Cualquier diseño de producto que use el filtro del sistema AEC debe tener en cuenta las restricciones anteriores. Las siguientes preguntas y respuestas muestran cómo estas restricciones pueden afectar al comportamiento de filtrado de AEC:
P: He creado un búfer de DirectSound para la representación estéreo, pero ambos canales suenan igual cuando estoy usando AEC. ¿Por qué ocurre esto?
R: AEC solo funciona en secuencias mono, por lo que KMixer está mezclando la secuencia estéreo de nuevo a mono para cumplir esta restricción.
P: ¿Por qué suena mi audio de 44 kHz, 16 bits como 16 kHz cuando uso AEC?
R: Dado que el filtro del sistema AEC realiza todo el procesamiento interno a 16 kHz.
P: ¿Por qué no puedo obtener un búfer directSound acelerado por hardware con AEC?
R: Dado que SysAudio desactiva la mezcla acelerada por hardware cuando AEC está habilitado.
P: ¿Funcionará el filtro del sistema AEC con mi antigua tarjeta Sound Blaster 16?
R: Sí. Aunque la tarjeta Sound Blaster16 no puede administrar simultáneamente la representación y captura de secuencias de 16 bits, puede administrar simultáneamente una secuencia de representación de 8 bits y una secuencia de captura de 16 bits, que es una combinación que admite los pins de representación y captura del sistema AEC. Las nuevas tarjetas de audio deben diseñarse para admitir profundidades de bits de al menos 16 bits para la representación y la captura.
Resumen de formatos de datos para pins AEC
Una aplicación directSound que habilita el filtro del sistema AEC puede elegir para sus búferes de DirectSound cualquier frecuencia de muestreo o tamaño de muestra que KMixer admita. KMixer convierte los datos del búfer de representación de la aplicación en un formato mono de 16 kHz mono de 16 bits antes de entrar en el filtro del sistema AEC. Del mismo modo, KMixer puede convertir los datos destinados a un búfer de captura de una aplicación DirectSoundCapture a un formato mono de 16 kHz mono de 16 bits después de salir del filtro del sistema AEC. Sin embargo, para minimizar la cantidad de procesamiento realizado en el gráfico y lograr la máxima calidad de audio, las aplicaciones deben usar un formato mono de 16 kHz de 16 kHz para los búferes de representación y captura.
Si desea que el hardware de audio funcione con el filtro del sistema AEC, el pin de representación de hardware debe admitir al menos una de las velocidades de muestreo admitidas por el pin de representación de AEC y el pin de captura de hardware debe admitir una de las velocidades de muestreo admitidas por el pin de captura de AEC. Para lograr el mejor rendimiento de AEC, el hardware debe admitir una frecuencia de muestreo de 16 kHz además de cualquier velocidad más alta que admita. Al admitir la velocidad de 16 kHz, el hardware reduce la cantidad de procesamiento que debe realizar el filtro del sistema AEC eliminando la necesidad de realizar la conversión de frecuencia de muestreo.
El pin de representación del filtro del sistema AEC se conecta al pin de salida de KMixer. KMixer realiza la conversión necesaria de sus flujos de entrada al formato que requiere el pin de representación. El pin de representación solo admite dos formatos de datos:
Formato PCM mono de 16 kHz con un tamaño de muestra de 16 bits
Formato PCM mono de 16 kHz con un tamaño de muestra de 8 bits
El pin de captura y salida solo admite un formato:
- Formato PCM mono de 16 kHz con un tamaño de muestra de 16 bits
Si el formato de búfer de la aplicación DirectSoundCapture es de 16 kHz mono PCM de 16 bits, el pin de captura de AEC puede omitir KMixer y conectarse directamente a DSound.DLL (consulte la figura anterior). De lo contrario, el pin de captura de AEC se conecta a KMixer, que convierte la secuencia PCM mono mono de 16 kHz de 16 bits del pin en cualquier formato que use el búfer de captura de la aplicación.
El pin de representación de AEC puede controlar cualquiera de los siguientes formatos:
PCM de 16 kHz de 16 bits con dos canales (estéreo)
PCM de 8 bits de 16 kHz con dos canales
PCM de 16 bits de 48 kHz con dos canales
PCM de 48 kHz de 8 bits con dos canales
PCM de 16 bits de 44,1 kHz con dos canales
PCM de 44,1 kHz de 8 bits con dos canales
El pin de representación genera una secuencia estéreo copiando el canal único desde el nodo AEC en ambos canales del flujo de salida.
El pin capture-in puede controlar cualquiera de los siguientes formatos:
PCM de 16 kHz de 16 bits con cualquier número de canales
PCM de 16 bits de 48 kHz con cualquier número de canales
PCM de 16 bits de 44,1 kHz con cualquier número de canales
PCM de 8 kHz de 16 bits con cualquier número de canales
El pin de captura solo usa el primer canal y omite (y descarta) los demás.
Todas las patillas del filtro del sistema AEC usan los valores de parámetros de formato de datos que se muestran en la tabla siguiente.
Miembro KSDATARANGE | Valor del parámetro |
---|---|
MajorFormat |
KSDATAFORMAT_TYPE_AUDIO |
SubFormato |
KSDATAFORMAT_SUBTYPE_PCM |
Especificador |
KSDATAFORMAT_SPECIFIER_WAVEFORMATEX |
Para obtener más información sobre los miembros MajorFormat, SubFormat y Specifier , vea KSDATARANGE. Para obtener un ejemplo de un descriptor de intervalo de datos KSDATARANGE_AUDIO que usa estos tres valores de parámetro, consulte Intervalo de datos de flujo de PCM.