DSP de captura de voz
Objeto que encapsula varios DSP relacionados con la captura de voz.
CLSID
CLSID_CWMAudioAEC
Interfaces
- IMediaObject
- IPropertyStore
Propiedades
Propiedad | Descripción |
---|---|
MFPKEY_WMAAECMA_DEVICE_INDEXES | Especifica qué dispositivos de audio usa DMO para capturar y representar audio. |
MFPKEY_WMAAECMA_DEVICEPAIR_GUID | Identifica la combinación de dispositivos de audio que la aplicación está usando actualmente. |
MFPKEY_WMAAECMA_DMO_SOURCE_MODE | Especifica si DMO usa el modo de origen o el modo de filtro. |
MFPKEY_WMAAECMA_FEATR_AES | Especifica cuántas veces el DMO realiza la supresión acústica de eco (AES) en la señal residual. |
MFPKEY_WMAAECMA_FEATR_AGC | Especifica si el DMO realiza el control de ganancia automática. |
MFPKEY_WMAAECMA_FEATR_CENTER_CLIP | Especifica si DMO realiza el recorte central. |
MFPKEY_WMAAECMA_FEATR_ECHO_LENGTH | Especifica la duración del eco que el algoritmo de cancelación acústica de eco (AEC) puede controlar. |
MFPKEY_WMAAECMA_FEATR_FRAME_SIZE | Especifica el tamaño del marco de audio. |
MFPKEY_WMAAECMA_FEATR_MICARR_BEAM | Especifica qué haz utiliza DMO para el procesamiento de la matriz de micrófonos. |
MFPKEY_WMAAECMA_FEATR_MICARR_MODE | Especifica cómo realiza el procesamiento de la matriz de micrófonos DMO. |
MFPKEY_WMAAECMA_FEATR_MICARR_PREPROC | Especifica si DMO realiza el preprocesamiento de la matriz de micrófonos. |
MFPKEY_WMAAECMA_FEATR_NOISE_FILL | Especifica si el DMO realiza el relleno de ruido. |
MFPKEY_WMAAECMA_FEATR_NS | Especifica si el DMO realiza la supresión de ruido. |
MFPKEY_WMAAECMA_FEATR_VAD | Especifica el tipo de detección de actividad de voz que realiza el DMO. |
MFPKEY_WMAAECMA_FEATURE_MODE | Permite a la aplicación invalidar la configuración predeterminada en varias propiedades. |
MFPKEY_WMAAECMA_MIC_GAIN_BOUNDER | Especifica si el DMO aplica el límite de ganancia del micrófono. |
MFPKEY_WMAAECMA_MICARRAY_DESCPTR | Especifica la geometría de la matriz de micrófonos. |
MFPKEY_WMAAECMA_QUALITY_METRICS | Recupera métricas de calidad para AEC. |
MFPKEY_WMAAECMA_RETRIEVE_TS_STATS | Especifica si el DMO almacena estadísticas de marca de tiempo en el registro. |
MFPKEY_WMAAECMA_SYSTEM_MODE | Establece el modo de procesamiento. |
Comentarios
A diferencia de los otros DSP, el objeto de captura de voz encapsula varios DSP en un solo objeto y el objeto es solo un objeto DMO (no implementa IMFTransform). La DMO de captura de voz incluye los siguientes componentes de DSP:
- Cancelación de eco acústico (AEC)
- Procesamiento de la matriz de micrófonos
- Supresión de ruido
- Control de ganancia automática
- Detección de actividad de voz
Las aplicaciones pueden activar y desactivar cada componente individualmente.
La captura de voz DMO admite dos modos de operación, modo de filtro y modo de origen. En el modo de filtro, la aplicación envía muestras de audio desde el micrófono y desde la línea del altavoz a DMO, y DMO genera la salida.
En el modo de origen, la aplicación no necesita entregar ejemplos a DMO. En su lugar, DMO administra todas las operaciones en los dispositivos de audio, incluida la inicialización de los dispositivos, la captura y sincronización de las secuencias de audio, el cálculo de marcas de tiempo y la recuperación de la geometría de la matriz de micrófonos. Con el modo de origen, la aplicación simplemente configura el DMO y la salida de DMO es una señal de micrófono limpia y procesada. El modo de origen es significativamente más fácil de usar que el modo de filtro y se recomienda para la mayoría de las aplicaciones.
Actualmente, la captura de voz DMO solo admite la cancelación de eco acústico de un solo canal (AEC), por lo que la salida de la línea del altavoz debe ser de canal único. Si el procesamiento de la matriz de micrófonos está deshabilitado, la entrada de varios canales se plega a un canal para el procesamiento de AEC. Si el procesamiento de la matriz de micrófonos y el procesamiento de AEC están habilitados, AEC se realiza en cada elemento de micrófono antes del procesamiento de la matriz de micrófonos.
Procesamiento de la matriz de micrófonos
Una matriz de micrófonos es un conjunto de micrófonos estrechamente colocados. Las matrices de micrófonos logran una mejor direccionalidad que un solo micrófono, ya que las ondas acústicas llegan a cada micrófono en un momento ligeramente diferente. Para obtener más información sobre las matrices de micrófonos, vea los artículos web Compatibilidad con la matriz de micrófonos en Windows Vista y Cómo compilar y usar matrices de micrófonos para Windows Vista.
Uso del DSP de captura de voz
Para usar el DSP de captura de voz, realice los pasos siguientes.
1. Inicialización del DMO
Cree la DMO de captura de voz llamando a CoCreateInstance con el CLSID_CWMAudioAEC CLSID. La captura de voz DSDP expone solo las interfaces IMediaObject e IPropertyStore , por lo que solo se puede usar como DMO.
El valor predeterminado de DMO es el modo de origen. Para seleccionar el modo de filtro, establezca la propiedad MFPKEY_WMAAECMA_DMO_SOURCE_MODEen VARIANT_FALSE.
A continuación, configure las propiedades internas de DMO mediante la interfaz IPropertyStore . La única propiedad que debe establecer una aplicación es la propiedad MFPKEY_WMAAECMA_SYSTEM_MODE . Esta propiedad configura la canalización de procesamiento dentro de DMO. Las demás propiedades son opcionales.
2. Establecer los formatos de entrada y salida
Si usa DMO en modo de filtro, establezca el formato de entrada llamando a IMediaObject::SetInputType. El formato de entrada puede ser casi cualquier tipo de audio de punto flotante IEEE o PCM sin comprimir válido. Si el formato de entrada no coincide con el formato de salida, DMO realiza automáticamente la conversión de velocidad de muestreo.
Si usa DMO en modo de origen, no establezca el formato de entrada. DMO configura automáticamente el formato de entrada en función de los dispositivos de audio.
En cualquier modo, establezca el formato de salida llamando a IMediaObject::SetOutputType. DMO puede aceptar los siguientes formatos de salida:
- Subtipo: MEDIASUBTYPE_PCM o MEDIASUBTYPE_IEEE_FLOAT
- Bloque de formato: WAVEFORMAT o WAVEFORMATEX
- Muestras por segundo: 8000; 11,025; 16,000; o 22 050
- Canales: 1 para el modo de solo AEC, 2 o 4 para el procesamiento de la matriz de micrófonos
- Bits por ejemplo: 16
El código siguiente establece el tipo de salida en audio PCM de un solo canal de 16 bits:
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. Procesar datos
Antes de procesar los datos, se recomienda llamar a IMediaObject::AllocateStreamingResources. Este método asigna los recursos usados internamente por DMO. Llame a AllocateStreamingResources después de los pasos enumerados anteriormente, no antes. Si no llama a este método, DMO asigna automáticamente recursos cuando se inicia el procesamiento de datos.
Si usa el DMO en modo de filtro, debe pasar los datos de entrada al DMO llamando a IMediaObject::P rocessInput. Los datos de audio del micrófono van a transmitir 0 y los datos de audio de la línea del altavoz van a la secuencia 1. Si usa DMO en modo de origen, no es necesario llamar a ProcessInput.
Para obtener datos de salida del DSP, realice los pasos siguientes:
- Cree un objeto de búfer para contener los datos de salida. El objeto de búfer debe implementar la interfaz IMediaBuffer . El tamaño del búfer depende de los requisitos de la aplicación. La asignación de un búfer mayor puede reducir las posibilidades de que se produzcan problemas.
- Declare una estructura DMO_OUTPUT_DATA_BUFFER y establezca el miembro pBuffer para que apunte al objeto de búfer.
- Pase la estructura DMO_OUTPUT_DATA_BUFFER al método IMediaObject::P rocessOutput .
- Continúe llamando a este método mientras DMO tenga datos de salida. El DSP indica que tiene más salida estableciendo la marca DMO_OUTPUT_DATA_BUFFERF_INCOMPLETE en el miembro dwStatus de la estructura DMO_OUTPUT_DATA_BUFFER .
Requisitos
Requisito | Value |
---|---|
Cliente mínimo compatible |
Windows Vista [solo aplicaciones de escritorio] |
Servidor mínimo compatible |
Windows Server 2008 [solo aplicaciones de escritorio] |
Encabezado |
|
Archivo DLL |
|
Consulte también