Filtro di sistema AEC
Il filtro di sistema AEC (Aec.sys) implementa gli algoritmi di annullamento dell'eco acustico (AEC) e eliminazione del rumore (NS) nel software. Questo filtro è un componente del sistema operativo standard in Windows XP e versioni successive. Per informazioni sul modo in cui le applicazioni DirectSoundCapture abilitano l'uso del filtro di sistema AEC, vedere la documentazione Microsoft Windows SDK.
Vincoli imposti dal filtro di sistema AEC
Un grafico di filtro audio che incorpora un effetto di acquisizione implementato nel filtro di sistema AEC è soggetto alle restrizioni seguenti:
Il filtro di sistema AEC può connettersi solo ai pin che gestiscono i formati di dati PCM.
La profondità di bit deve essere di 16 bit per il flusso di acquisizione e 8 o 16 bit per il flusso di rendering.
Il filtro di sistema AEC esegue tutte le elaborazioni interne a 16 kHz. I flussi di input e di output vengono convertiti in base alle esigenze.
In Windows XP SP1, Windows Server 2003 e versioni successive, i pin di acquisizione e rendering del filtro di sistema AEC (vedere la figura seguente) devono avere la stessa frequenza di campionamento, ma le tariffe di campionamento ai pin di acquisizione e rendering possono essere selezionate in modo indipendente dagli altri pin. La frequenza di campionamento al pin di acquisizione può essere (in ordine di preferenza) 16 kHz, 48 kHz, 44,1 kHz o 8 kHz. L'ordine di preferenza si basa sul tempo di elaborazione e sulla qualità audio. La frequenza di esempio nel pin di rendering può essere (in ordine di preferenza) 16 kHz, 48 kHz o 44,1 kHz. Si noti che il pin di rendering non supporta una frequenza di esempio di 8 kHz.
I nodi AEC e NS (vedere la figura in Esposizione Hardware-Accelerated Capture Effects) possono gestire solo flussi monofonici. Se il flusso di acquisizione è multicanale (ad esempio, stereo a due canali), tutti i canali diversi dal primo vengono ignorati (e eliminati). Solo i flussi monofonici possono essere elaborati dal lato di rendering.
In Windows XP SP1, Windows Server 2003 e versioni successive, questa limitazione non esiste. Il filtro di sistema AEC gestisce correttamente le corrispondenze tra gli orologi per i flussi di acquisizione e rendering e i dispositivi separati possono essere usati per l'acquisizione e il rendering.
Quando viene usato il filtro di sistema AEC, il driver di sistema SysAudio disattiva l'accelerazione hardware per la combinazione, la conversione a frequenza di esempio, la spazializzazione 3D e così via. Tutte le combinazioni di flussi vengono eseguite nell'emulazione software dal driver di sistema KMixer. Questa restrizione è necessaria per garantire che tutti gli audio riprodotti dal dispositivo di rendering possano essere annullati dal flusso di acquisizione dal filtro di sistema AEC.
Qualsiasi elaborazione del segnale eseguita prima del nodo AEC o NS sul lato acquisizione del grafico o dopo il nodo AEC o NS sul lato rendering deve essere invariante tempo lineare. L'esecuzione di qualsiasi elaborazione di segnale non lineare o temporale in una di queste posizioni impedisce all'AEC di annullare l'eco nel segnale di acquisizione.
Il filtro AEC annulla solo gli eco provenienti dai canali filtrati da AEC nel computer. L'audio che viene restituito tramite canali che non passano tramite AEC non viene annullata. Gli eco in un canale audio non AEC sono funzionalmente equivalenti agli eco nell'audio che viene riprodotto su una radio nell'ufficio accanto al computer. AEC non ha modo di annullare (e nessun effetto su) eco da una radio o da un canale non AEC.
I requisiti precedenti si applicano a tutti i grafici di filtro audio in streaming kernel che incorporano gli effetti di acquisizione implementati in Aec.sys. Queste restrizioni riflettono presupposti fondamentali nella progettazione e nell'implementazione del filtro di sistema AEC. I vincoli sui formati di flusso potrebbero cambiare nelle versioni future di Windows.
Qualsiasi progettazione del prodotto che usa il filtro di sistema AEC deve tenere conto dei vincoli precedenti. Le domande e le risposte seguenti mostrano come questi vincoli possono influire sul comportamento del filtro AEC:
D: Ho creato un buffer DirectSound per il rendering stereo, ma entrambi i canali sono uguali quando si usa AEC. Perché?
R: AEC funziona solo su flussi mono, quindi KMixer sta mescolando il flusso stereo a mono per soddisfare questo vincolo.
D: Perché il mio audio a 44 kHz, a 16 bit è simile a 16 kHz quando si usa AEC?
R: poiché il filtro di sistema AEC esegue tutte le elaborazioni interne a 16 kHz.
D: Perché non è possibile ottenere un buffer DirectSound accelerato dall'hardware con AEC?
R: poiché SysAudio disattiva la combinazione accelerata hardware quando AEC è abilitato.
D: Il filtro del sistema AEC funziona con la mia vecchia scheda Sound Blaster 16?
R: Sì. Anche se la scheda Sound Blaster16 non è in grado di gestire simultaneamente i flussi di rendering e acquisizione a 16 bit, può gestire simultaneamente un flusso di rendering a 8 bit e un flusso di acquisizione a 16 bit, ovvero una combinazione che il rendering e il supporto dei pin di sistema AEC. Le nuove schede audio devono essere progettate per supportare profondità di bit di almeno 16 bit per il rendering e l'acquisizione.
Riepilogo dei formati di dati per i pin AEC
Un'applicazione DirectSound che abilita il filtro di sistema AEC può scegliere per i buffer DirectSound qualsiasi frequenza di esempio o dimensioni di esempio supportate da KMixer. KMixer converte i dati dal buffer di rendering dell'applicazione in un formato mono a 16 kHz mono a 16 bit prima di entrare nel filtro di sistema AEC. Analogamente, KMixer può convertire i dati destinati a un buffer di acquisizione di un'applicazione DirectSoundCapture in un formato mono a 16 kHz a 16 bit dopo aver lasciato il filtro di sistema AEC. Tuttavia, per ridurre al minimo la quantità di elaborazione eseguita nel grafico e ottenere la massima qualità audio, le applicazioni devono usare un formato mono a 16 kHz mono a 16 bit sia per il rendering che per i buffer di acquisizione.
Se si vuole che l'hardware audio funzioni con il filtro di sistema AEC, il pin di rendering hardware deve supportare almeno una delle tariffe di esempio supportate dal pin di rendering AEC e il pin di acquisizione hardware deve supportare una delle tariffe di esempio supportate dal pin di acquisizione AEC. Per ottenere le migliori prestazioni di AEC, l'hardware deve supportare una frequenza di campionamento di 16 kHz oltre a qualsiasi frequenza superiore supportata. Supportando la frequenza a 16 kHz, l'hardware riduce la quantità di elaborazione che il filtro di sistema AEC deve eseguire eliminando la necessità di eseguire la conversione della frequenza di campionamento.
Il pin di rendering del filtro di sistema AEC si connette al pin di output di KMixer. KMixer esegue la conversione necessaria dei flussi di input nel formato richiesto dal pin di rendering. Il pin di rendering supporta solo due formati di dati:
Formato PCM mono a 16 kHz con dimensioni di esempio di 16 bit
Formato PCM mono a 16 kHz con dimensioni di esempio di 8 bit
Il pin di acquisizione supporta un solo formato:
- Formato PCM mono a 16 kHz con dimensioni di esempio di 16 bit
Se il formato del buffer dell'applicazione DirectSoundCapture è mono a 16 kHz mono a 16 bit PCM, il pin di acquisizione AEC può ignorare KMixer e connettersi direttamente a DSound.DLL (vedere la figura precedente). In caso contrario, il pin di acquisizione AEC si connette a KMixer, che converte il flusso PCM a 16 bit mono a 16 bit dal pin in qualsiasi formato usato dal buffer di acquisizione dell'applicazione.
Il pin di rendering di AEC può gestire uno dei formati seguenti:
PCM a 16 kHz a 16 bit con due canali (stereo)
PCM a 16 kHz a 8 bit con due canali
PCM a 48 kHz a 16 bit con due canali
PCM a 48 kHz a 8 bit con due canali
PCM a 44.1 kHz a 16 bit con due canali
PCM a 44.1 kHz a 8 bit con due canali
Il pin di rendering produce un flusso stereo copiando il singolo canale dal nodo AEC in entrambi i canali del flusso di output.
Il pin di acquisizione può gestire uno dei formati seguenti:
PCM a 16 kHz a 16 bit con qualsiasi numero di canali
PCM a 48 kHz a 16 bit con qualsiasi numero di canali
PCM a 44.1 kHz a 16 bit con qualsiasi numero di canali
PCM a 8 kHz a 16 bit con qualsiasi numero di canali
Il pin di acquisizione usa solo il primo canale e ignora (e ignora) gli altri.
Tutti i pin del filtro di sistema AEC usano i valori dei parametri del formato dati visualizzati nella tabella seguente.
Membro KSDATARANGE | Valore del parametro |
---|---|
MajorFormat |
KSDATAFORMAT_TYPE_AUDIO |
SottoFormat |
KSDATAFORMAT_SUBTYPE_PCM |
Identificatore |
KSDATAFORMAT_SPECIFIER_WAVEFORMATEX |
Per altre informazioni sui membri MajorFormat, SubFormat e Specifier , vedere KSDATARANGE. Per un esempio di descrittore di intervallo di dati KSDATARANGE_AUDIO che usa questi tre valori di parametro, vedere Intervallo di dati flusso PCM.