Compartir a través de


DSP de captura de voz

Objeto que encapsula varios DSP relacionados con la captura de voz.

CLSID

CLSID_CWMAudioAEC

Interfaces

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:

  1. 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.
  2. Declare una estructura DMO_OUTPUT_DATA_BUFFER y establezca el miembro pBuffer para que apunte al objeto de búfer.
  3. Pase la estructura DMO_OUTPUT_DATA_BUFFER al método IMediaObject::P rocessOutput .
  4. 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
Wmcodecdsp.h
Archivo DLL
Mfwmaaec.dll

Consulte también

Procesadores de señal digitales