Sdílet prostřednictvím


Filtr systému AEC

Filtr systému AEC (Aec.sys) implementuje algoritmy AEC (Acoustic Echo Cancellation) a potlačení šumu (NS) v softwaru. Tento filtr je standardní komponenta operačního systému v systému Windows XP a novější. Informace o tom, jak aplikace DirectSoundCapture umožňují použití systémového filtru AEC, naleznete v dokumentaci k sadě Microsoft Windows SDK.

Omezení uložená filtrem systému AEC

Graf zvukového filtru, který zahrnuje efekt zachycení implementovaný ve filtru systému AEC, podléhá následujícím omezením:

  • Filtr systému AEC se může připojit pouze k kolíkům, které zpracovávají formáty dat PCM.

  • Hloubka bitu musí být 16 bitů pro datový proud zachycení a 8 nebo 16 bitů pro datový proud vykreslení.

  • Systémový filtr AEC provádí veškeré interní zpracování při 16 kHz. Vstupní a výstupní datové proudy jsou podle potřeby převedeny na zdrojovou rychlost.

  • Ve Windows XP SP1, Windows Server 2003 a novějších musí mít filtr systému AEC výstupní pin zachytávače a vstupní pin rendereru (viz následující obrázek) stejnou vzorkovací frekvenci, ale vzorkovací frekvence na vstupním pinu zachytávače a výstupním pinu rendereru mohou být zvoleny nezávisle na ostatních pinech. Vzorkovací frekvence u vstupního pinu může být (v pořadí podle preference) 16 kHz, 48 kHz, 44,1 kHz nebo 8 kHz. (Pořadí předvoleb je založeno na době zpracování a kvalitě zvuku.) Vzorkovací frekvence na výstupním kolíku může být (v pořadí podle preference) 16 kHz, 48 kHz nebo 44,1 kHz. Upozorňujeme, že výstupní pin pro vykreslování nepodporuje vzorkovací frekvenci 8 kHz.

Diagram znázorňující špendlíky a připojení filtru systému AEC

  • Uzly AEC a NS (viz obrázek zveřejnění Hardware-Accelerated capture Effects) můžou zpracovávat pouze monofonní datové proudy. Pokud je stream zachycení vícekanálový (například dvoukanálové stereo), všechny kanály kromě prvního se ignorují a zahazují. Na straně vykreslování je možné zpracovat pouze monofonní datové proudy.

  • V systému Windows XP SP1, Windows Server 2003 a novější neexistuje toto omezení. Systémový filtr AEC správně zpracovává neshody mezi hodinami pro zachytávání a vykreslování datových proudů a samostatná zařízení lze použít k zachycení a vykreslování.

  • Při použití systémového filtru AEC ovladač systému SysAudio vypne hardwarovou akceleraci pro kombinování, převod vzorkovací frekvence, prostorovou prostorizaci 3D atd. Veškeré kombinování datových proudů se provádí v emulaci softwaru ovladačem systému KMixer. Toto omezení je nezbytné k zajištění, aby veškerý zvuk, který přehrává vykreslovací zařízení, bylo možné zrušit ze streamu zachycení filtrem systému AEC.

  • Veškeré zpracování signálu, které se provádí před uzlem AEC nebo NS na straně zachycení grafu nebo za uzlem AEC nebo NS na straně vykreslení, musí být lineární časově invariantní. Provedení jakéhokoli nelineárního nebo časově proměnlivého zpracování signálu v některé z těchto umístění zabraňuje AEC zrušit ozvěnu v signálu zachytávání.

  • Filtrování AEC zruší pouze ozvěny pocházející z kanálů filtrovaných podle AEC ve vašem počítači. Zvuk, který je výstupem z kanálů, které neprocházejí AEC, není odrušený proti ozvěně. Ozvěny v zvukovém kanálu, který není AEC, jsou funkčně ekvivalentní ozvěna ve zvuku, který se přehrává v rádiu v kanceláři vedle počítače. AEC nemá způsob zrušení (a žádný vliv na) ozvěny z rádia nebo jiného kanálu než AEC.

Předchozí požadavky platí pro všechny grafy streamování zvukového filtru jádra, které zahrnují zachytávací efekty implementované v Aec.sys. Tato omezení odrážejí základní předpoklady v návrhu a implementaci filtru systému AEC. Omezení formátů datových proudů se můžou v budoucích verzích Windows změnit.

Každý návrh produktu, který používá filtr systému AEC, by měl vzít v úvahu předchozí omezení. Následující otázky a odpovědi ukazují, jak tato omezení můžou ovlivnit chování filtrování AEC:

Otázka: Vytvořil(a) jsem vyrovnávací paměť DirectSound pro stereo vykreslování, ale oba kanály zní stejně, když používám AEC. Proč je to?

A: AEC funguje pouze na mono streamech, takže KMixer míchá stereo stream zpět do mono, aby toto omezení splnil.

Otázka: Proč můj 44kHz, 16bitový zvuk zní jako 16 kHz při použití AEC?

Odpověď: Protože systémový filtr AEC provádí veškeré interní zpracování při 16 kHz.

Otázka: Proč nemůžu získat hardwarově akcelerovanou vyrovnávací paměť DirectSound s AEC?

Odpověď: Protože SysAudio vypne hardwarově akcelerované míchání, když je povolený AEC.

Otázka: Bude systémový filtr AEC fungovat se starou kartou Sound Blaster 16?

A: Ano. I když karta Sound Blaster16 nemůže současně spravovat 16bitové vykreslování a zachytávání datových proudů, může současně spravovat 8bitový stream vykreslování a 16bitový stream zachycení, což je kombinace, kterou podporuje vykreslovací a zachytávací špendlíky filtru systému AEC. Nové zvukové karty by měly být navrženy tak, aby podporovaly bitovou hloubku nejméně 16 bitů pro vykreslování i zachytávání.

Souhrn formátů dat pro piny AEC

Aplikace DirectSound, která umožňuje filtrování systému AEC, může zvolit pro své vyrovnávací paměti DirectSound libovolnou vzorkovací frekvenci nebo velikost vzorku, kterou KMixer podporuje. KMixer převede data z vyrovnávací paměti aplikace pro vykreslování na 16-kHz mono 16bitový formát před vstupem do systémového filtru AEC. Podobně může KMixer po průchodu systémovým filtrem AEC převést data určená pro vyrovnávací paměť zachycení aplikace DirectSoundCapture na formát 16 kHz mono a 16 bitů. Pokud ale chcete minimalizovat množství zpracování provedené v grafu a dosáhnout nejvyšší kvality zvuku, měly by aplikace pro vykreslování i zachytávání pufry používat mono 16 kHz 16bitový formát.

Pokud chcete, aby váš zvukový hardware fungoval s filtrem systému AEC, pak hardwarový vykreslovací konektor musí podporovat alespoň jednu z vzorkovacích rychlostí podporovaných konektorem vykreslování AEC a konektor pro záznam hardwaru musí podporovat jednu z vzorkovacích rychlostí podporovaných konektorem pro záznam AEC. Aby se dosáhlo nejlepšího výkonu AEC, hardware by měl podporovat vzorkovací frekvenci 16 kHz kromě jakýchkoli vyšších rychlostí, které podporuje. Díky podpoře rychlosti 16 kHz hardware snižuje množství zpracování, které musí systémový filtr AEC provést odstraněním nutnosti převodu vzorkovací frekvence.

Kolík „render-in“ filtru systému AEC se připojuje k výstupnímu kolíku KMixeru. KMixer provádí nezbytnou konverzi svých vstupních datových proudů do formátu, který požaduje render-in pin. Pin render-in podporuje pouze dva formáty dat:

  • Mono PCM ve formátu 16 kHz s velikostí vzorku 16 bitů

  • Mono PCM ve formátu 16 kHz s velikostí vzorku 8 bitů

Výstupní pin zachytávání podporuje pouze jeden formát:

  • Mono PCM ve formátu 16 kHz s velikostí vzorku 16 bitů

Pokud je formát vyrovnávací paměti aplikace DirectSoundCapture 16kHz mono 16bit PCM, pin AEC zvukového výstupu může obejít KMixer a připojit se přímo k DSound.DLL (viz předchozí obrázek). V opačném případě se pin AEC připojí ke KMixeru, který převede 16kHz mono 16bitový PCM datový proud z pinu do formátu, který používá vyrovnávací paměť pro zachycení aplikace.

Renderovací pin AEC dokáže zpracovat kterýkoli z následujících formátů:

  • 16 kHz 16bitový PCM se dvěma kanály (stereo)

  • 16 kHz 8bitový PCM se dvěma kanály

  • 48 kHz 16bitový PCM se dvěma kanály

  • 48 kHz 8bitový PCM se dvěma kanály

  • 44,1 kHz 16bitový PCM se dvěma kanály

  • 44,1 kHz 8bitový PCM se dvěma kanály

Výtiskový pin vytvoří stereo signál zkopírováním jednoho kanálu z uzlu AEC do obou kanálů výstupního proudu.

Kolík pro zachytávání dokáže zpracovat některý z následujících formátů:

  • 16 kHz 16bitový PCM s libovolným počtem kanálů

  • 48 kHz 16bitový PCM s libovolným počtem kanálů

  • 44,1 kHz 16bitový PCM s libovolným počtem kanálů

  • 8 kHz 16bitový PCM s libovolným počtem kanálů

Zachytávací pin používá pouze první kanál a ostatní ignoruje a vyřazuje.

Všechny špendlíky systému AEC používají hodnoty parametrů formátu dat uvedené v následující tabulce.

KSDATARANGE – člen Hodnota parametru

MajorFormat

KSDATAFORMAT_TYPE_AUDIO

podformulář

KSDATAFORMAT_SUBTYPE_PCM

Specifikátor

KSDATAFORMAT_SPECIFIER_WAVEFORMATEX

Další informace o členech MajorFormat, SubFormat a Specifier naleznete v tématu KSDATARANGE. Příklad popisovače rozsahu dat KSDATARANGE_AUDIO , který používá tyto tři hodnoty parametrů, najdete v tématu PCM Stream Data Range.