DSP de Captura de Voz

Um objeto que encapsula vários DSPs relacionados à captura de voz.

CLSID

CLSID_CWMAudioAEC

Interfaces

Propriedades

Propriedade Descrição
MFPKEY_WMAAECMA_DEVICE_INDEXES Especifica quais dispositivos de áudio o DMO usa para capturar e renderizar áudio.
MFPKEY_WMAAECMA_DEVICEPAIR_GUID Identifica a combinação de dispositivos de áudio que o aplicativo está usando no momento.
MFPKEY_WMAAECMA_DMO_SOURCE_MODE Especifica se o DMO usa o modo de origem ou o modo de filtro.
MFPKEY_WMAAECMA_FEATR_AES Especifica quantas vezes o DMO executa a supressão de eco acústico (AES) no sinal residual.
MFPKEY_WMAAECMA_FEATR_AGC Especifica se o DMO executa o controle de ganho automático.
MFPKEY_WMAAECMA_FEATR_CENTER_CLIP Especifica se o DMO executa o recorte central.
MFPKEY_WMAAECMA_FEATR_ECHO_LENGTH Especifica a duração do eco que o algoritmo de cancelamento de eco acústico (AEC) pode lidar.
MFPKEY_WMAAECMA_FEATR_FRAME_SIZE Especifica o tamanho do quadro de áudio.
MFPKEY_WMAAECMA_FEATR_MICARR_BEAM Especifica qual feixe o DMO usa para processamento de matriz de microfone.
MFPKEY_WMAAECMA_FEATR_MICARR_MODE Especifica como o DMO executa o processamento da matriz de microfone.
MFPKEY_WMAAECMA_FEATR_MICARR_PREPROC Especifica se o DMO executa o pré-processamento da matriz de microfone.
MFPKEY_WMAAECMA_FEATR_NOISE_FILL Especifica se o DMO executa o preenchimento de ruído.
MFPKEY_WMAAECMA_FEATR_NS Especifica se o DMO executa a supressão de ruído.
MFPKEY_WMAAECMA_FEATR_VAD Especifica o tipo de detecção de atividade de voz que o DMO executa.
MFPKEY_WMAAECMA_FEATURE_MODE Permite que o aplicativo substitua as configurações padrão em várias propriedades.
MFPKEY_WMAAECMA_MIC_GAIN_BOUNDER Especifica se o DMO aplica o limite de ganho de microfone.
MFPKEY_WMAAECMA_MICARRAY_DESCPTR Especifica a geometria da matriz de microfone.
MFPKEY_WMAAECMA_QUALITY_METRICS Recupera métricas de qualidade para a AEC.
MFPKEY_WMAAECMA_RETRIEVE_TS_STATS Especifica se o DMO armazena estatísticas de carimbo de data/hora no registro.
MFPKEY_WMAAECMA_SYSTEM_MODE Define o modo de processamento.

 

Comentários

Ao contrário dos outros DSPs, o objeto de captura de voz encapsula vários DSPs em um único objeto e o objeto é apenas um objeto DMO (ele não implementa IMFTransform). O DMO de captura de voz inclui os seguintes componentes DSP:

  • Cancelamento de eco acústico (AEC)
  • Processamento de matriz de microfone
  • Supressão de ruído
  • Controle de ganho automático
  • Detecção de atividade de voz

Os aplicativos podem ativar e desativar cada componente individualmente.

O DMO de captura de voz dá suporte a dois modos de operação, modo de filtro e modo de origem . No modo de filtro, o aplicativo envia amostras de áudio do microfone e da linha do alto-falante para o DMO, e o DMO produz a saída.

No modo de origem, o aplicativo não precisa fornecer amostras para o DMO. Em vez disso, o DMO gerencia todas as operações nos dispositivos de áudio, incluindo inicializar os dispositivos, capturar e sincronizar os fluxos de áudio, calcular carimbos de data/hora e recuperar a geometria da matriz de microfone. Usando o modo de origem, o aplicativo simplesmente configura o DMO e a saída do DMO é um sinal de microfone processado limpo. O modo de origem é significativamente mais fácil de usar do que o modo de filtro e é recomendado para a maioria dos aplicativos.

Atualmente, o DMO de captura de voz dá suporte apenas ao cancelamento de eco acústico de canal único (AEC), portanto, a saída da linha do alto-falante deve ser de canal único. Se o processamento da matriz de microfone estiver desabilitado, a entrada de vários canais será dobrada para um canal para processamento do AEC. Se o processamento da matriz de microfone e o processamento do AEC estiverem habilitados, a AEC será executada em cada elemento de microfone antes do processamento da matriz de microfone.

Processamento de matriz de microfone

Uma matriz de microfone é um conjunto de microfones bem posicionados. As matrizes de microfone obtêm melhor direcionalidade do que um único microfone, porque as ondas acústicas chegam a cada microfone em um momento ligeiramente diferente. Para obter mais informações sobre matrizes de microfone, consulte os artigos da Web Suporte à matriz de microfone no Windows Vista e Como criar e usar matrizes de microfone para Windows Vista.

Usando o DSP de Captura de Voz

Para usar o DSP de Captura de Voz, execute as etapas a seguir.

1. Inicializar o DMO

Crie o DMO de captura de voz chamando CoCreateInstance com o CLSID_CWMAudioAEC CLSID. A captura de voz DSDP expõe apenas as interfaces IMediaObject e IPropertyStore , para que ela só possa ser usada como um DMO.

O DMO usa como padrão o modo de origem. Para selecionar o modo de filtro, defina a propriedade MFPKEY_WMAAECMA_DMO_SOURCE_MODE como VARIANT_FALSE.

Em seguida, configure as propriedades internas do DMO usando a interface IPropertyStore . A única propriedade que um aplicativo deve definir é a propriedade MFPKEY_WMAAECMA_SYSTEM_MODE . Essa propriedade configura o pipeline de processamento dentro do DMO. As outras propriedades são opcionais.

2. Definir os formatos de entrada e saída

Se você estiver usando o DMO no modo de filtro, defina o formato de entrada chamando IMediaObject::SetInputType. O formato de entrada pode ser quase qualquer tipo de áudio de ponto flutuante PCM ou IEEE válido. Se o formato de entrada não corresponder ao formato de saída, o DMO executará automaticamente a conversão de taxa de exemplo.

Se você estiver usando o DMO no modo de origem, não defina o formato de entrada. O DMO configura automaticamente o formato de entrada com base nos dispositivos de áudio.

Em ambos os modos, defina o formato de saída chamando IMediaObject::SetOutputType. O DMO pode aceitar os seguintes formatos de saída:

  • Subtipo: MEDIASUBTYPE_PCM ou MEDIASUBTYPE_IEEE_FLOAT
  • Bloco de formato: WAVEFORMAT ou WAVEFORMATEX
  • Exemplos por segundo: 8.000; 11,025; 16,000; ou 22.050
  • Canais: 1 para o modo somente AEC, 2 ou 4 para processamento de matriz de microfone
  • Bits por exemplo: 16

O código a seguir define o tipo de saída como áudio PCM de canal único 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. Processar dados

Antes de processar dados, é recomendável chamar IMediaObject::AllocateStreamingResources. Esse método aloca os recursos usados internamente pelo DMO. Chame AllocateStreamingResources após as etapas listadas anteriormente, não antes. Se você não chamar esse método, o DMO alocará recursos automaticamente quando o processamento de dados for iniciado.

Se você estiver usando o DMO no modo de filtro, deverá passar dados de entrada para o DMO chamando IMediaObject::P rocessInput. Os dados de áudio do microfone vão para o fluxo 0 e os dados de áudio da linha do alto-falante vão para o fluxo 1. Se você estiver usando o DMO no modo de origem, não precisará chamar ProcessInput.

Para obter dados de saída do DSP, execute as seguintes etapas:

  1. Crie um objeto de buffer para manter os dados de saída. O objeto buffer deve implementar a interface IMediaBuffer . O tamanho do buffer depende dos requisitos do aplicativo. Alocar um buffer maior pode reduzir as chances de falhas ocorrerem.
  2. Declare uma estrutura DMO_OUTPUT_DATA_BUFFER e defina o membro pBuffer para apontar para o objeto de buffer.
  3. Passe a estrutura DMO_OUTPUT_DATA_BUFFER para o método IMediaObject::P rocessOutput .
  4. Continue a chamar esse método enquanto o DMO tiver dados de saída. O DSP sinaliza que tem mais saída definindo o sinalizador DMO_OUTPUT_DATA_BUFFERF_INCOMPLETE no membro dwStatus da estrutura DMO_OUTPUT_DATA_BUFFER .

Requisitos

Requisito Valor
Cliente mínimo com suporte
Windows Vista [somente aplicativos da área de trabalho]
Servidor mínimo com suporte
Windows Server 2008 [somente aplicativos da área de trabalho]
Cabeçalho
Wmcodecdsp.h
DLL
Mfwmaaec.dll

Confira também

Processadores de sinal digital