Filtre système AEC
Le filtre système AEC (Aec.sys) implémente les algorithmes d’annulation d’écho acoustique (AEC) et de suppression du bruit (NS) dans les logiciels. Ce filtre est un composant de système d’exploitation standard dans Windows XP et versions ultérieures. Pour plus d’informations sur la façon dont les applications DirectSoundCapture activent l’utilisation du filtre système AEC, consultez la documentation Microsoft Windows SDK.
Contraintes imposées par le filtre système AEC
Un graphique de filtre audio qui intègre un effet de capture implémenté dans le filtre système AEC est soumis aux restrictions suivantes :
Le filtre système AEC ne peut se connecter qu’aux broches qui gèrent les formats de données PCM.
La profondeur de bits doit être de 16 bits pour le flux de capture et de 8 ou 16 bits pour le flux de rendu.
Le filtre système AEC effectue tous les traitements internes à 16 kHz. Les flux d’entrée et de sortie sont convertis en fonction des besoins.
Dans Windows XP SP1, Windows Server 2003 et versions ultérieures, les broches de capture et de rendu du filtre système AEC (voir la figure suivante) doivent avoir le même taux d’échantillonnage, mais les taux d’échantillonnage aux broches capture-in et render-out peuvent être sélectionnés indépendamment des autres broches. La fréquence d’échantillonnage au niveau de la broche de capture peut être (par ordre de préférence) 16 kHz, 48 kHz, 44,1 kHz ou 8 kHz. (L’ordre de préférence est basé sur le temps de traitement et la qualité audio.) La fréquence d’échantillonnage au niveau de la broche de rendu peut être (par ordre de préférence) 16 kHz, 48 kHz ou 44,1 kHz. Notez que la broche de rendu ne prend pas en charge une fréquence d’échantillonnage de 8 kHz.
Les nœuds AEC et NS (voir la figure dans Exposing Hardware-Accelerated Capture Effects) ne peuvent gérer que les flux monophoniques. Si le flux de capture est multicanal (par exemple, stéréo à deux canaux), tous les canaux autres que le premier sont ignorés (et ignorés). Seuls les flux monophoniques peuvent être traités par le côté rendu.
Dans Windows XP SP1, Windows Server 2003 et versions ultérieures, cette limitation n’existe pas. Le filtre système AEC gère correctement les incompatibilités entre les horloges pour les flux de capture et de rendu, et des appareils distincts peuvent être utilisés pour la capture et le rendu.
Lorsque le filtre système AEC est utilisé, le pilote système SysAudio désactive l’accélération matérielle pour le mélange, la conversion de taux d’échantillonnage, la spatialisation 3D, etc. Tout le mélange de flux est effectué dans l’émulation logicielle par le pilote système KMixer. Cette restriction est nécessaire pour garantir que tout l’audio lu par le périphérique de rendu peut être annulé hors du flux de capture par le filtre système AEC.
Tout traitement de signal effectué avant le nœud AEC ou NS du côté de la capture du graphe ou après le nœud AEC ou NS du côté du rendu doit être invariant dans le temps linéaire. L’exécution d’un traitement de signal non linéaire ou variable dans le temps dans l’un de ces emplacements empêche AEC d’annuler l’écho dans le signal de capture.
Le filtrage AEC annule uniquement les échos provenant des canaux filtrés par AEC dans votre ordinateur. L’audio qui est généré via des canaux qui ne passent pas par AEC n’est pas annulé par écho. Les échos dans un canal audio non-AEC sont fonctionnellement équivalents aux échos dans l’audio qui est lue sur une radio dans le bureau à côté de votre ordinateur. AEC n’a aucun moyen d’annuler (et aucun effet sur) les échos d’une radio ou d’un canal non-AEC.
Les exigences précédentes s’appliquent à tous les graphiques de filtre audio en streaming de noyau qui intègrent des effets de capture implémentés dans Aec.sys. Ces restrictions reflètent des hypothèses fondamentales dans la conception et l’implémentation du filtre système AEC. Les contraintes sur les formats de flux peuvent changer dans les versions futures de Windows.
Toute conception de produit qui utilise le filtre système AEC doit prendre en compte les contraintes précédentes. Les questions et réponses suivantes montrent comment ces contraintes peuvent affecter le comportement de filtrage AEC :
Q : J’ai créé une mémoire tampon DirectSound pour le rendu stéréo, mais les deux canaux sonnent de la même façon quand j’utilise AEC. Pourquoi ?
R : AEC fonctionne uniquement sur les flux mono, donc KMixer mélange le flux stéréo en mono pour répondre à cette contrainte.
Q : Pourquoi mon audio 44 kHz 16 bits sonne-t-il comme 16 kHz quand j’utilise AEC ?
R : Car le filtre système AEC effectue tout le traitement interne à 16 kHz.
Q : Pourquoi ne puis-je pas obtenir une mémoire tampon DirectSound accélérée avec AEC ?
R : Étant donné que SysAudio désactive le mixage accéléré par le matériel quand AEC est activé.
Q : Le filtre système AEC fonctionnera-t-il avec mon ancien sound blaster 16 carte ?
A : Oui. Bien que le carte Sound Blaster16 ne puisse pas gérer simultanément les flux de rendu et de capture 16 bits, il peut gérer simultanément un flux de rendu 8 bits et un flux de capture 16 bits, une combinaison prise en charge par les broches de rendu et de capture in du filtre système AEC. Les nouvelles cartes audio doivent être conçues pour prendre en charge des profondeurs de bits d’au moins 16 bits pour le rendu et la capture.
Résumé des formats de données pour les broches AEC
Une application DirectSound qui active le filtre système AEC peut choisir pour ses mémoires tampons DirectSound n’importe quelle fréquence d’échantillonnage ou taille d’échantillon prise en charge par KMixer. KMixer convertit les données de la mémoire tampon de rendu de l’application dans un format 16 bits mono 16 bits de 16 kHz avant d’entrer dans le filtre système AEC. De même, KMixer peut convertir les données destinées à la mémoire tampon de capture d’une application DirectSoundCapture en un format 16 bits mono de 16 kHz après avoir quitté le filtre système AEC. Toutefois, pour réduire la quantité de traitement effectuée dans le graphique et obtenir la qualité audio la plus élevée, les applications doivent utiliser un format 16 bits mono 16 bits de 16 kHz pour les mémoires tampons de rendu et de capture.
Si vous souhaitez que votre matériel audio fonctionne avec le filtre système AEC, la broche de rendu matérielle doit prendre en charge au moins un des taux d’échantillonnage pris en charge par la broche de rendu AEC, et la broche de capture matérielle doit prendre en charge l’un des taux d’échantillonnage pris en charge par l’épingle de capture AEC. Pour obtenir les meilleures performances AEC, votre matériel doit prendre en charge un taux d’échantillonnage de 16 kHz en plus des débits plus élevés qu’il prend en charge. En prenant en charge le débit de 16 kHz, le matériel réduit la quantité de traitement que le filtre système AEC doit effectuer en éliminant la nécessité d’effectuer la conversion de taux d’échantillonnage.
La broche de rendu du filtre système AEC se connecte à la broche de sortie de KMixer. KMixer effectue la conversion nécessaire de ses flux d’entrée au format requis par la broche de rendu. La broche de rendu ne prend en charge que deux formats de données :
Format PCM mono de 16 kHz avec une taille d’exemple de 16 bits
Format PCM mono de 16 kHz avec une taille d’exemple de 8 bits
L’épingle de capture ne prend en charge qu’un seul format :
- Format PCM mono de 16 kHz avec une taille d’exemple de 16 bits
Si le format de mémoire tampon de l’application DirectSoundCapture est 16 bits PCM mono 16 bits 16 kHz, la broche de capture AEC peut contourner KMixer et se connecter directement à DSound.DLL (voir la figure précédente). Sinon, la broche de capture sortante AEC se connecte à KMixer, qui convertit le flux PCM mono 16 bits 16 bits de la broche en n’importe quel format utilisé par la mémoire tampon de capture de l’application.
L’épingle de rendu AEC peut gérer l’un des formats suivants :
PCM 16 bits 16 kHz avec deux canaux (stéréo)
PCM 8 bits 16 kHz avec deux canaux
PCM 16 bits 48 kHz avec deux canaux
PCM 8 bits 48 kHz avec deux canaux
PCM 16 bits 44,1 kHz avec deux canaux
PCM 8 bits 44,1 kHz avec deux canaux
La broche de rendu produit un flux stéréo en copiant le canal unique du nœud AEC dans les deux canaux du flux de sortie.
La broche de capture dans peut gérer l’un des formats suivants :
PCM 16 bits 16 kHz avec un nombre quelconque de canaux
PCM 16 bits 48 kHz avec un nombre quelconque de canaux
PCM 16 bits 44,1 kHz avec un nombre quelconque de canaux
PCM 16 bits 8 kHz avec n’importe quel nombre de canaux
La broche de capture dans utilise uniquement le premier canal et ignore (et ignore) les autres.
Toutes les broches du filtre système AEC utilisent les valeurs de paramètre de format de données indiquées dans le tableau suivant.
Membre KSDATARANGE | Valeur du paramètre |
---|---|
MajorFormat |
KSDATAFORMAT_TYPE_AUDIO |
Sous-format |
KSDATAFORMAT_SUBTYPE_PCM |
Spécificateur |
KSDATAFORMAT_SPECIFIER_WAVEFORMATEX |
Pour plus d’informations sur les membres MajorFormat, SubFormat et Specifier , consultez KSDATARANGE. Pour obtenir un exemple de descripteur de plage de données KSDATARANGE_AUDIO qui utilise ces trois valeurs de paramètres, consultez Plage de données de flux PCM.