DSP de Captura de Voz
Um objeto que encapsula vários DSPs relacionados à captura de voz.
CLSID
CLSID_CWMAudioAEC
Interfaces
- Imediaobject
- Ipropertystore
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:
- 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.
- Declare uma estrutura DMO_OUTPUT_DATA_BUFFER e defina o membro pBuffer para apontar para o objeto de buffer.
- Passe a estrutura DMO_OUTPUT_DATA_BUFFER para o método IMediaObject::P rocessOutput .
- 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 |
|
DLL |
|
Confira também