Freigeben über


AEC-Systemfilter

Der AEC-Systemfilter (Aec.sys) implementiert die Algorithmen für akustische Echounterdrückung (AEC) und Rauschunterdrückung (NS) in der Software. Dieser Filter ist eine Standardmäßige Betriebssystemkomponente in Windows XP und höher. Informationen dazu, wie DirectSoundCapture-Anwendungen die Verwendung des AEC-Systemfilters ermöglichen, finden Sie in der Dokumentation zum Microsoft Windows SDK.

Einschränkungen, die vom AEC-Systemfilter auferlegt werden

Ein Audiofilterdiagramm, das einen Aufnahmeeffekt enthält, der im AEC-Systemfilter implementiert ist, unterliegt den folgenden Einschränkungen:

  • Der AEC-Systemfilter kann nur eine Verbindung mit Pins herstellen, die PCM-Datenformate verarbeiten.

  • Die Bittiefe muss 16 Bit für den Aufnahmedatenstrom und 8 oder 16 Bit für den Renderdatenstrom sein.

  • Der AEC-Systemfilter führt alle internen Verarbeitungen mit 16 kHz durch. Die Ein- und Ausgabeströme werden nach Bedarf aus der Quellfrequenz konvertiert.

  • In Windows XP SP1, Windows Server 2003 und höher müssen die Erfassungs- und Render-In-Pins des AEC-Systems (siehe folgende Abbildung) dieselbe Samplingrate aufweisen, aber die Samplingraten bei den Aufnahme- und Renderout-Pins können unabhängig von den anderen Pins ausgewählt werden. Die Abtastrate am Aufnahme-In-Pin kann (nach Wunsch) 16 kHz, 48 kHz, 44,1 kHz oder 8 kHz sein. (Die Reihenfolge der Präferenz basiert auf der Verarbeitungszeit und der Audioqualität.) Die Abtastrate am Render-Out-Pin kann (in der Reihenfolge der Präferenz) 16 kHz, 48 kHz oder 44,1 kHz sein. Beachten Sie, dass der Render-Out-Pin keine Abtastrate von 8 kHz unterstützt.

Diagramm, das die Pins und Verbindungen eines AEC-Systemfilters veranschaulicht.

  • Die AEC- und NS-Knoten (siehe Abbildung in Exposing Hardware-Accelerated Capture Effects) können nur monophone Datenströme verarbeiten. Wenn der Aufnahmedatenstrom mehrkanalig ist (z. B. Zweikanal-Stereo), werden alle kanäle außer dem ersten ignoriert (und verworfen). Nur monophone Datenströme können von der Renderseite verarbeitet werden.

  • In Windows XP SP1, Windows Server 2003 und höher ist diese Einschränkung nicht vorhanden. Der AEC-Systemfilter behandelt ordnungsgemäß Missstimmungen zwischen den Uhren für die Aufnahme- und Rendering-Ströme, und separate Geräte können für die Aufnahme und das Rendering verwendet werden.

  • Wenn der AEC-Systemfilter verwendet wird, deaktiviert der SysAudio-Systemtreiber die Hardwarebeschleunigung für Misch-, Samplerate-Konvertierung, 3D-Raumisierung usw. Alle Vermischungen von Datenströmen erfolgen in der Softwareemulation durch den KMixer-Systemtreiber. Diese Einschränkung ist erforderlich, um sicherzustellen, dass alle Audiodaten, die vom Renderinggerät wiedergegeben werden, vom AEC-Systemfilter aus dem Aufnahmedatenstrom abgebrochen werden können.

  • Jede Signalverarbeitung, die vor dem AEC- oder NS-Knoten auf der Aufnahmeseite des Diagramms oder nach dem AEC- oder NS-Knoten auf der Renderseite erfolgt, muss linear zeitinvariant sein. Durch das Ausführen nichtlinearer oder zeitlich unterschiedlicher Signalverarbeitung an einer dieser Stellen wird verhindert, dass AEC das Echo im Aufnahmesignal abbricht.

  • Die AEC-Filterung bricht nur Echos ab, die von den AEC-gefilterten Kanälen auf Ihrem Computer stammen. Audio, das über Kanäle ausgegeben wird, die nicht durch AEC durchlaufen, wird nicht echo-unterdrückt. Echos in einem Nicht-AEC-Audiokanal entsprechen funktionell den Echos in den Audiodaten, die auf einem Radio im Büro neben Ihrem Computer wiedergegeben werden. AEC hat keine Möglichkeit, Echos von einem Radio oder einem Nicht-AEC-Kanal zu unterdrücken und hat keine Auswirkungen auf diese.

Die vorstehenden Anforderungen gelten für alle Kernelstreaming-Audiofilterdiagramme, die Aufnahmeeffekte enthalten, die in Aec.sysimplementiert werden. Diese Einschränkungen spiegeln grundlegende Annahmen im Entwurf und der Implementierung des AEC-Systemfilters wider. Die Einschränkungen für Streamformate können sich in zukünftigen Versionen von Windows ändern.

Jedes Produktdesign, das den AEC-Systemfilter verwendet, sollte die vorstehenden Einschränkungen berücksichtigen. Die folgenden Fragen und Antworten zeigen, wie sich diese Einschränkungen auf das AEC-Filterverhalten auswirken können:

F: Ich habe einen DirectSound-Puffer für das Stereorendering erstellt, aber beide Kanäle klingen gleich, wenn ich AEC verwende. Warum ist dies der Fall?

A: AEC funktioniert nur bei Mono-Streams, sodass KMixer den Stereostream zurück zu Mono mischt, um diese Einschränkung zu erfüllen.

F: Warum klingt mein 44-kHz-16-Bit-Audio wie 16 kHz, wenn ich AEC verwende?

A: Da der AEC-Systemfilter alle internen Verarbeitungen mit 16 kHz durchführt.

F: Warum kann ich keinen hardwarebeschleunigten DirectSound-Puffer mit AEC erhalten?

A: Da SysAudio das hardwarebeschleunigte Mischen deaktiviert, wenn AEC aktiviert ist.

F: Funktioniert der AEC-Systemfilter mit meiner alten Sound Blaster 16-Karte?

A: Ja. Obwohl die Sound Blaster16-Karte nicht gleichzeitig 16-Bit-Rendering- und 16-Bit-Aufnahmedatenströme verwalten kann, kann sie einen 8-Bit-Renderingdatenstrom und einen 16-Bit-Erfassungsdatenstrom gleichzeitig verwalten. Dies ist eine Kombination, die von den Render-Out- und Capture-In-Pins des AEC-Systemfilters unterstützt wird. Neue Audiodateien sollten so konzipiert werden, dass Bittiefen von mindestens 16 Bit sowohl für das Rendering als auch für die Aufnahme unterstützt werden.

Zusammenfassung der Datenformate für AEC-Pins

Eine DirectSound-Anwendung, die den AEC-Systemfilter ermöglicht, kann für seine DirectSound-Puffer jede Samplerate oder Samplegröße auswählen, die KMixer unterstützt. KMixer konvertiert die Daten aus dem Renderingpuffer der Anwendung in ein 16-kHz-Mono-16-Bit-Format, bevor er den AEC-Systemfilter eingibt. Ebenso kann KMixer die Daten konvertieren, die für den Aufnahmepuffer einer DirectSoundCapture-Anwendung bestimmt sind, in ein 16-kHz-Mono-16-Bit-Format, nachdem der AEC-Systemfilter verlassen wurde. Um jedoch die Verarbeitungsmenge im Diagramm zu minimieren und die höchste Audioqualität zu erzielen, sollten die Anwendungen ein 16-kHz-Mono-16-Bit-Format sowohl für das Rendern als auch für die Aufnahmepuffer verwenden.

Wenn Ihre Audiohardware mit dem AEC-Systemfilter arbeiten soll, muss der Hardwarerendering-Pin mindestens eine der Beispielraten unterstützen, die vom AEC-Renderout-Pin unterstützt werden, und der Hardwareaufnahme-Pin muss eine der Beispielraten unterstützen, die vom AEC-Aufnahme-Pin unterstützt werden. Um die beste AEC-Leistung zu erzielen, sollte Ihre Hardware neben den höheren unterstützten Abtastraten auch eine 16-kHz-Abtastrate unterstützen. Durch die Unterstützung der 16-kHz-Rate reduziert die Hardware die Verarbeitungsmenge, die der AEC-Systemfilter ausführen muss, indem die Notwendigkeit der Konvertierung der Stichprobenrate eliminiert wird.

Der Render-In-Pin des AEC-Systems verbindet sich mit dem Ausgabe-Pin von KMixer. KMixer führt die erforderliche Konvertierung seiner Eingabedatenströme in das Format aus, das für die Render-In-Pin erforderlich ist. Die Render-In-Pin unterstützt nur zwei Datenformate:

  • Ein 16-kHz-Mono-PCM-Format mit einer Beispielgröße von 16 Bit

  • Ein 16-kHz-Mono-PCM-Format mit einer Beispielgröße von 8 Bit

Der Capture-Out-Pin unterstützt nur ein Format:

  • Ein 16-kHz-Mono-PCM-Format mit einer Beispielgröße von 16 Bit

Wenn das Pufferformat der DirectSoundCapture-Anwendung 16-kHz-Mono-16-Bit-PCM ist, kann der AEC-Aufnahme-Pin KMixer umgehen und sich direkt mit DSound.DLL verbinden (siehe vorherige Abbildung). Andernfalls stellt der AEC-Aufnahme-Pin eine Verbindung mit KMixer her, wodurch der 16-kHz-Mono-16-Bit-PCM-Stream aus dem Pin in ein beliebiges Format konvertiert wird, das der Aufnahmepuffer der Anwendung verwendet.

Der AEC-Render-Out-Pin kann jedes der folgenden Formate verarbeiten:

  • 16-kHz 16-Bit-PCM mit zwei Kanälen (Stereo)

  • 16-kHz 8-Bit-PCM mit zwei Kanälen

  • 48-kHz 16-Bit-PCM mit zwei Kanälen

  • 48-kHz 8-Bit-PCM mit zwei Kanälen

  • 44,1-kHz 16-Bit-PCM mit zwei Kanälen

  • 44,1-kHz 8-Bit-PCM mit zwei Kanälen

Der Render-Out-Pin erzeugt einen Stereostream, indem der einzelne Kanal aus dem AEC-Knoten in beide Kanäle des Ausgabedatenstroms kopiert wird.

Die Aufnahme-Pin kann jedes der folgenden Formate verarbeiten:

  • 16-kHz 16-Bit-PCM mit einer beliebigen Anzahl von Kanälen

  • 48-kHz 16-Bit-PCM mit einer beliebigen Anzahl von Kanälen

  • 44,1-kHz 16-Bit-PCM mit einer beliebigen Anzahl von Kanälen

  • 8-kHz 16-Bit-PCM mit einer beliebigen Anzahl von Kanälen

Der Capture-in-Pin verwendet nur den ersten Kanal und ignoriert (und verwirft) die anderen.

Alle Pins des AEC-Systemfilters verwenden die in der folgenden Tabelle gezeigten Datenformatparameterwerte.

KSDATARANGE-Mitglied Parameterwert

MajorFormat

KSDATAFORMAT_TYPE_AUDIO

SubFormat-

KSDATAFORMAT_SUBTYPE_PCM

Spezifikationssymbol

KSDATAFORMAT_SPECIFIER_WAVEFORMATEX

Weitere Informationen zu den Mitgliedern MajorFormat, SubFormat und Specifier finden Sie unter KSDATARANGE. Ein Beispiel für einen KSDATARANGE_AUDIO Datenbereichsdeskriptor, der diese drei Parameterwerte verwendet, finden Sie unter PCM Stream Data Range.