DSP di acquisizione vocale
Oggetto che incapsula diversi DSP correlati all'acquisizione vocale.
CLSID
CLSID_CWMAudioAEC
Interfacce
- IMediaObject
- Ipropertystore
Proprietà
Proprietà | Descrizione |
---|---|
MFPKEY_WMAAECMA_DEVICE_INDEXES | Specifica i dispositivi audio usati dalla DMO per l'acquisizione e il rendering dell'audio. |
MFPKEY_WMAAECMA_DEVICEPAIR_GUID | Identifica la combinazione di dispositivi audio attualmente usati dall'applicazione. |
MFPKEY_WMAAECMA_DMO_SOURCE_MODE | Specifica se DMO usa la modalità di origine o la modalità filtro. |
MFPKEY_WMAAECMA_FEATR_AES | Specifica il numero di volte in cui il DMO esegue l'eliminazione dell'eco acustica (AES) sul segnale rimanente. |
MFPKEY_WMAAECMA_FEATR_AGC | Specifica se DMO esegue il controllo di guadagno automatico. |
MFPKEY_WMAAECMA_FEATR_CENTER_CLIP | Specifica se il DMO esegue il ritaglio centrale. |
MFPKEY_WMAAECMA_FEATR_ECHO_LENGTH | Specifica la durata dell'eco che l'algoritmo di annullamento dell'eco acustico (AEC) può gestire. |
MFPKEY_WMAAECMA_FEATR_FRAME_SIZE | Specifica le dimensioni del frame audio. |
MFPKEY_WMAAECMA_FEATR_MICARR_BEAM | Specifica quale raggio usa DMO per l'elaborazione della matrice del microfono. |
MFPKEY_WMAAECMA_FEATR_MICARR_MODE | Specifica il modo in cui DMO esegue l'elaborazione della matrice del microfono. |
MFPKEY_WMAAECMA_FEATR_MICARR_PREPROC | Specifica se il DMO esegue la pre-elaborazione della matrice del microfono. |
MFPKEY_WMAAECMA_FEATR_NOISE_FILL | Specifica se il DMO esegue il riempimento del rumore. |
MFPKEY_WMAAECMA_FEATR_NS | Specifica se il DMO esegue l'eliminazione del rumore. |
MFPKEY_WMAAECMA_FEATR_VAD | Specifica il tipo di rilevamento delle attività vocali eseguite da DMO. |
MFPKEY_WMAAECMA_FEATURE_MODE | Consente all'applicazione di eseguire l'override delle impostazioni predefinite in varie proprietà. |
MFPKEY_WMAAECMA_MIC_GAIN_BOUNDER | Specifica se il DMO applica il limite del microfono. |
MFPKEY_WMAAECMA_MICARRAY_DESCPTR | Specifica la geometria della matrice del microfono. |
MFPKEY_WMAAECMA_QUALITY_METRICS | Recupera le metriche di qualità per AEC. |
MFPKEY_WMAAECMA_RETRIEVE_TS_STATS | Specifica se DMO archivia le statistiche del timestamp nel Registro di sistema. |
MFPKEY_WMAAECMA_SYSTEM_MODE | Imposta la modalità di elaborazione. |
Commenti
A differenza degli altri DSP, l'oggetto di acquisizione vocale incapsula più DSP in un singolo oggetto e l'oggetto è un oggetto DMO solo (non implementa FMTransform). L'acquisizione vocale DMO include i componenti DSP seguenti:
- Annullamento dell'eco acustico (AEC)
- Elaborazione della matrice del microfono
- Eliminazione del rumore
- Controllo automatico del guadagno
- Rilevamento attività vocali
Le applicazioni possono attivare e disattivare singolarmente ogni componente.
L'acquisizione vocale DMO supporta due modalità di operazione, modalità filtro e modalità di origine . In modalità filtro, l'applicazione invia campioni audio dal microfono e dalla riga dell'altoparlante alla DMO e il DMO produce l'output.
In modalità di origine l'applicazione non deve distribuire esempi all'oggetto DMO. Il DMO gestisce invece tutte le operazioni sui dispositivi audio, tra cui l'inizializzazione dei dispositivi, l'acquisizione e la sincronizzazione dei flussi audio, il calcolo dei timestamp e il recupero della geometria della matrice del microfono. Usando la modalità di origine, l'applicazione configura semplicemente DMO e l'output da DMO è un segnale microfono pulito e elaborato. La modalità di origine è notevolmente più semplice da usare rispetto alla modalità di filtro e è consigliata per la maggior parte delle applicazioni.
Attualmente l'acquisizione vocale DMO supporta solo l'annullamento dell'eco acustico a canale singolo (AEC), quindi l'output dalla linea dell'altoparlante deve essere a canale singolo. Se l'elaborazione della matrice del microfono è disabilitata, l'input multicanale viene ridotto a un canale per l'elaborazione AEC. Se l'elaborazione della matrice del microfono e l'elaborazione AEC sono abilitate, AEC viene eseguito su ogni elemento del microfono prima dell'elaborazione della matrice del microfono.
Elaborazione matrice microfono
Una matrice di microfoni è un set di microfoni posizionati da vicino. Le matrici di microfoni ottengono una migliore direzione rispetto a un singolo microfono, perché le onde acustiche arrivano a ogni microfono in un momento leggermente diverso. Per altre informazioni sulle matrici di microfoni, vedere gli articoli Web Supporto matrice microfono in Windows Vistae Come compilare e usare array di microfoni per Windows Vista.
Uso del provider di servizi di acquisizione vocale
Per usare voice capture DSP, seguire questa procedura.
1. Inizializzare il DMO
Creare l'acquisizione vocale DMO chiamando CoCreateInstance con il CLSID_CWMAudioAEC CLSID. L'acquisizione vocale DSDP espone solo le interfacce IMediaObject e IPropertyStore , quindi può essere usata solo come DMO.
L'impostazione predefinita DMO è la modalità di origine. Per selezionare la modalità filtro, impostare la proprietà MFPKEY_WMAAECMA_DMO_SOURCE_MODEsu VARIANT_FALSE.
Configurare quindi le proprietà interne della DMO usando l'interfaccia IPropertyStore . L'unica proprietà che un'applicazione deve impostare è la proprietà MFPKEY_WMAAECMA_SYSTEM_MODE . Questa proprietà configura la pipeline di elaborazione all'interno dell'oggetto DMO. Le altre proprietà sono facoltative.
2. Impostare i formati di input e output
Se si usa DMO in modalità filtro, impostare il formato di input chiamando IMediaObject::SetInputType. Il formato di input può essere quasi qualsiasi tipo audio PCM non compresso o IEEE a virgola mobile. Se il formato di input non corrisponde al formato di output, DMO esegue automaticamente la conversione a frequenza di esempio.
Se si usa DMO in modalità origine, non impostare il formato di input. DMO configura automaticamente il formato di input in base ai dispositivi audio.
In entrambe le modalità impostare il formato di output chiamando IMediaObject::SetOutputType. DMO può accettare i formati di output seguenti:
- Sottotipo: MEDIASUBTYPE_PCM o MEDIASUBTYPE_IEEE_FLOAT
- Blocco di formato: WAVEFORMAT o WAVEFORMATEX
- Campioni al secondo: 8.000; 11,025; 16,000; o 22.050
- Canali: 1 per la modalità solo AEC, 2 o 4 per l'elaborazione della matrice del microfono
- Bit per esempio: 16
Il codice seguente imposta il tipo di output su audio PCM a 16 bit a 16 bit:
DMO_MEDIA_TYPE mt; // Media type.
mt.majortype = MEDIATYPE_Audio;
mt.subtype = MEDIASUBTYPE_PCM;
mt.lSampleSize = 0;
mt.bFixedSizeSamples = TRUE;
mt.bTemporalCompression = FALSE;
mt.formattype = FORMAT_WaveFormatEx;
// Allocate the format block to hold the WAVEFORMATEX structure.
hr = MoInitMediaType(&mt, sizeof(WAVEFORMATEX));
if (SUCCEEDED(hr))
{
WAVEFORMATEX *pwav = (WAVEFORMATEX*)mt.pbFormat;
pwav->wFormatTag = WAVE_FORMAT_PCM;
pwav->nChannels = 1;
pwav->nSamplesPerSec = 16000;
pwav->nAvgBytesPerSec = 32000;
pwav->nBlockAlign = 2;
pwav->wBitsPerSample = 16;
pwav->cbSize = 0;
// Set the output type.
if (SUCCEEDED(hr))
{
hr = pDMO->SetOutputType(0, &mt, 0);
}
// Free the format block.
MoFreeMediaType(&mt);
}
3. Elaborare i dati
Prima di elaborare i dati, è consigliabile chiamare IMediaObject::AllocateStreamingResources. Questo metodo alloca le risorse usate internamente dall'oggetto DMO. Chiamare AllocateStreamingResources dopo i passaggi elencati in precedenza, non prima. Se non si chiama questo metodo, DMO alloca automaticamente le risorse all'avvio dell'elaborazione dati.
Se si usa DMO in modalità filtro, è necessario passare i dati di input all'oggetto DMO chiamando IMediaObject::P rocessInput. I dati audio dal microfono passano allo streaming 0 e i dati audio dalla linea dell'altoparlante passano al flusso 1. Se si usa DMO in modalità di origine, non è necessario chiamare ProcessInput.
Per ottenere i dati di output dal DSP, seguire questa procedura:
- Creare un oggetto buffer per contenere i dati di output. L'oggetto buffer deve implementare l'interfaccia IMediaBuffer . Le dimensioni del buffer dipendono dai requisiti dell'applicazione. L'allocazione di un buffer più grande può ridurre le probabilità di errori che si verificano.
- Dichiarare una struttura DMO_OUTPUT_DATA_BUFFER e impostare il membro pBuffer in modo che punti all'oggetto buffer.
- Passare la struttura DMO_OUTPUT_DATA_BUFFER al metodo IMediaObject::P rocessOutput .
- Continuare a chiamare questo metodo per tutto il tempo in cui DMO contiene dati di output. Il DSP segnala che ha più output impostando il flag DMO_OUTPUT_DATA_BUFFERF_INCOMPLETE nel membro dwStatus della struttura DMO_OUTPUT_DATA_BUFFER .
Requisiti
Requisito | Valore |
---|---|
Client minimo supportato |
Windows Vista [solo app desktop] |
Server minimo supportato |
Windows Server 2008 [solo app desktop] |
Intestazione |
|
DLL |
|
Vedi anche