AEC-Systemfilter
Der AEC-Systemfilter (Aec.sys) implementiert die AEC-Algorithmen (Acoustic Echo Cancellation, AEC) und Rauschunterdrückung (NS) in der Software. Dieser Filter ist eine Standard-Betriebssystemkomponente in Windows XP und höher. Informationen dazu, wie DirectSoundCapture-Anwendungen die Verwendung des AEC-Systemfilters ermöglichen, finden Sie in der Microsoft Windows SDK-Dokumentation.
Vom AEC-Systemfilter auferlegte Einschränkungen
Ein Audiofilterdiagramm, das einen Erfassungseffekt enthält, der im AEC-Systemfilter implementiert ist, unterliegt den folgenden Einschränkungen:
Der AEC-Systemfilter kann nur mit Pins verbunden werden, die PCM-Datenformate verarbeiten.
Die Bittiefe muss 16 Bit für den Aufzeichnungsdatenstrom und 8 oder 16 Bit für den Renderdatenstrom sein.
Der AEC-Systemfilter führt die gesamte interne Verarbeitung mit 16 kHz aus. Die Eingabe- und Ausgabestreams werden bei Bedarf mit der Quellrate konvertiert.
In Windows XP SP1, Windows Server 2003 und höher müssen die Erfassungs- und Render-In-Pins des AEC-Systemfilters (siehe folgende Abbildung) die gleiche Abtastrate aufweisen, aber die Abtastraten an den Capture-In- und Render-Out-Pins können jeweils unabhängig von den anderen Pins ausgewählt werden. Die Abtastrate am Erfassungspin kann (in der Reihenfolge der Voreinstellungen) 16 kHz, 48 kHz, 44,1 kHz oder 8 kHz betragen. (Die Reihenfolge der Präferenz basiert auf der Verarbeitungszeit und der Audioqualität.) Die Abtastrate am Render-Out-Pin kann (in der Reihenfolge der Voreinstellungen) 16 kHz, 48 kHz oder 44,1 kHz betragen. Beachten Sie, dass der Render-Out-Pin keine Abtastrate von 8 kHz unterstützt.
Die AEC- und NS-Knoten (siehe Abbildung unter Exposing Hardware-Accelerated Capture Effects) können nur monophone Streams verarbeiten. Wenn der Aufzeichnungsdatenstrom 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 Übereinstimmungen zwischen den Uhren für die Aufzeichnungs- und Renderdatenströme ordnungsgemäß, und für die Erfassung und das Rendern können separate Geräte verwendet werden.
Wenn der AEC-Systemfilter verwendet wird, deaktiviert der SysAudio-Systemtreiber die Hardwarebeschleunigung für das Mischen, die Abtastratekonvertierung, die 3D-Raumräumung usw. Das gesamte Mischen von Streams erfolgt 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 Erfassungsseite des Graphen oder nach dem AEC- oder NS-Knoten auf der Renderseite erfolgt, muss linear zeitinvarianter Art sein. Die Ausführung einer nicht linearen oder zeitverändernden Signalverarbeitung an einem dieser Standorte 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 über AEC übergeben werden, wird nicht echounterdagiert. Echos in einem Nicht-AEC-Audiokanal sind funktionell gleichwertig mit Echos in der Audiowiedergabe auf einem Radio im Büro neben Ihrem Computer. AEC hat keine Möglichkeit, Echos von einem Radio oder einem Nicht-AEC-Kanal abzubrechen (und hat keine Auswirkungen auf).
Die oben genannten Anforderungen gelten für alle Kernelstreaming-Audiofiltergraphen, die Erfassungseffekte enthalten, die in Aec.sys implementiert sind. Diese Einschränkungen spiegeln grundlegende Annahmen bei der Konzeption und 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 bei Verwendung von AEC gleich. Warum?
A: AEC funktioniert nur bei Monostreams, sodass KMixer den Stereostream zurück zu Mono mischt, um diese Einschränkung zu erfüllen.
F: Warum klingt mein 44-kHz- und 16-Bit-Audio wie 16 kHz, wenn ich AEC verwende?
A: Da der AEC-Systemfilter die gesamte interne Verarbeitung mit 16 kHz ausführt.
F: Warum kann ich mit AEC keinen hardwarebeschleunigten DirectSound-Puffer erhalten?
A: Da SysAudio die hardwarebeschleunigte Mischung deaktiviert, wenn AEC aktiviert ist.
F: Funktioniert der AEC-Systemfilter mit meinem alten Sound Blaster 16-Karte?
Antwort: Ja. Obwohl der Sound Blaster16-Karte nicht gleichzeitig 16-Bit-Rendering- und Aufnahmedatenströme verwalten kann, kann er gleichzeitig einen 8-Bit-Renderingdatenstrom und einen 16-Bit-Aufnahmedatenstrom verwalten. Dies ist eine Kombination, die vom AEC-Systemfilter durch render-out- und Capture-In-Pins unterstützt wird. Neue Audiokarten sollten so konzipiert sein, dass sie Bittiefen von mindestens 16 Bit sowohl für das Rendering als auch für die Aufnahme unterstützen.
Zusammenfassung der Datenformate für AEC-Pins
Eine DirectSound-Anwendung, die den AEC-Systemfilter ermöglicht, kann für ihre DirectSound-Puffer eine beliebige Abtastrate oder Stichprobengröß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 sie in den AEC-Systemfilter gelangen. Ebenso kann KMixer die Daten, die für den Erfassungspuffer einer DirectSoundCapture-Anwendung bestimmt sind, in ein 16-kHz-Mono-16-Bit-Format konvertieren, nachdem der AEC-Systemfilter verlassen wurde. Um jedoch sowohl den Verarbeitungsaufwand im Graphen zu minimieren als auch die höchste Audioqualität zu erzielen, sollten die Anwendungen ein 16-kHz-Mono-16-Bit-Format sowohl für die Rendering- als auch für die Erfassungspuffer verwenden.
Wenn Ihre Audiohardware mit dem AEC-Systemfilter funktioniert, muss der Hardwarerendering-Pin mindestens eine der vom AEC-Renderout-Pin unterstützten Abtastraten unterstützen, und der Hardwareerfassungspin muss eine der vom AEC-Aufnahmenadel unterstützten Abtastraten unterstützen. Um die beste AEC-Leistung zu erzielen, sollte Ihre Hardware zusätzlich zu den unterstützten höheren Raten eine Abtastrate von 16 kHz unterstützen. Durch die Unterstützung der 16-kHz-Rate reduziert die Hardware den Verarbeitungsaufwand, den der AEC-Systemfilter ausführen muss, indem die Notwendigkeit einer Konvertierung der Stichprobenrate entfällt.
Der Render-In-Pin des AEC-Systemfilters wird mit dem Ausgabepin von KMixer verbunden. KMixer führt die erforderliche Konvertierung der Eingabedatenströme in das Format durch, das für den Render-In-Pin erforderlich ist. Der Render-In-Pin unterstützt nur zwei Datenformate:
Ein 16-kHz-Mono-PCM-Format mit einer Stichprobengröße von 16 Bit
Ein 16-kHz-Mono-PCM-Format mit einer Stichprobengröße von 8 Bit
Der Capture-Out-Pin unterstützt nur ein Format:
- Ein 16-kHz-Mono-PCM-Format mit einer Stichprobengröße von 16 Bit
Wenn das Pufferformat der DirectSoundCapture-Anwendung 16-Bit-Mono-16-Bit-PCM ist, kann der AEC-Erfassungspin KMixer umgehen und direkt eine Verbindung mit DSound.DLL herstellen (siehe obige Abbildung). Andernfalls stellt der AEC-Capture-Out-Pin eine Verbindung mit KMixer her, wodurch der 16-Bit-Mono-PCM-Stream mit 16-Bit vom Pin in das format konvertiert wird, das der Erfassungspuffer der Anwendung verwendet.
Der AEC-Renderout-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 vom AEC-Knoten in beide Kanäle des Ausgabestreams kopiert wird.
Der Capture-In-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 Datenformatparameterwerte, die in der folgenden Tabelle dargestellt sind.
KSDATARANGE-Element | Parameterwert |
---|---|
MajorFormat |
KSDATAFORMAT_TYPE_AUDIO |
SubFormat |
KSDATAFORMAT_SUBTYPE_PCM |
Bezeichner |
KSDATAFORMAT_SPECIFIER_WAVEFORMATEX |
Weitere Informationen zu den Membern MajorFormat, SubFormat und Specifier finden Sie unter KSDATARANGE. Ein Beispiel für eine KSDATARANGE_AUDIO Datenbereichsdeskriptor, der diese drei Parameterwerte verwendet, finden Sie unter PCM-Streamdatenbereich.