语音捕获 DSP

一个封装与语音捕获相关的多个 DSL 的对象。

CLSID

CLSID_CWMAudioAEC

接口

属性

属性 说明
MFPKEY_WMAAECMA_DEVICE_INDEXES 指定 DMO 用于捕获和呈现音频的音频设备。
MFPKEY_WMAAECMA_DEVICEPAIR_GUID 标识应用程序当前正在使用的音频设备的组合。
MFPKEY_WMAAECMA_DMO_SOURCE_MODE 指定 DMO 是使用源模式还是筛选器模式。
MFPKEY_WMAAECMA_FEATR_AES 指定 DMO 对残差信号执行声学回声抑制 (AES) 的次数。
MFPKEY_WMAAECMA_FEATR_AGC 指定 DMO 是否执行自动增益控制。
MFPKEY_WMAAECMA_FEATR_CENTER_CLIP 指定 DMO 是否执行中心剪裁。
MFPKEY_WMAAECMA_FEATR_ECHO_LENGTH 指定 AEC) 算法 (回声消除可以处理的回声持续时间。
MFPKEY_WMAAECMA_FEATR_FRAME_SIZE 指定音频帧大小。
MFPKEY_WMAAECMA_FEATR_MICARR_BEAM 指定 DMO 用于麦克风阵列处理的波束。
MFPKEY_WMAAECMA_FEATR_MICARR_MODE 指定 DMO 如何执行麦克风阵列处理。
MFPKEY_WMAAECMA_FEATR_MICARR_PREPROC 指定 DMO 是否执行麦克风阵列预处理。
MFPKEY_WMAAECMA_FEATR_NOISE_FILL 指定 DMO 是否执行噪声填充。
MFPKEY_WMAAECMA_FEATR_NS 指定 DMO 是否执行噪声抑制。
MFPKEY_WMAAECMA_FEATR_VAD 指定 DMO 执行的语音活动检测的类型。
MFPKEY_WMAAECMA_FEATURE_MODE 使应用程序能够替代各种属性上的默认设置。
MFPKEY_WMAAECMA_MIC_GAIN_BOUNDER 指定 DMO 是否应用麦克风增益边界。
MFPKEY_WMAAECMA_MICARRAY_DESCPTR 指定麦克风阵列几何图形。
MFPKEY_WMAAECMA_QUALITY_METRICS 检索 AEC 的质量指标。
MFPKEY_WMAAECMA_RETRIEVE_TS_STATS 指定 DMO 是否在注册表中存储时间戳统计信息。
MFPKEY_WMAAECMA_SYSTEM_MODE 设置处理模式。

 

备注

与其他 DSP 不同,语音捕获对象将多个 DSP 封装在单个对象中,并且该对象是仅 (它不实现 IMFTransform) 的 DMO 对象。 语音捕获 DMO 包括以下 DSP 组件:

  • AEC) (回声消除
  • 麦克风阵列处理
  • 噪声抑制
  • 自动增益控制
  • 语音活动检测

应用程序可以单独打开和关闭每个组件。

语音捕获 DMO 支持两种操作模式: 筛选器 模式和 模式。 在筛选器模式下,应用程序将音频样本从麦克风和扬声器线路发送到 DMO,DMO 生成输出。

在源模式下,应用程序不需要将示例传送到 DMO。 相反,DMO 管理音频设备上的所有操作,包括初始化设备、捕获和同步音频流、计算时间戳以及检索麦克风阵列的几何图形。 使用源模式时,应用程序只需配置 DMO,DMO 的输出是经过处理的干净麦克风信号。 源模式比筛选模式更易于使用,建议用于大多数应用程序。

目前,语音捕获 DMO 仅支持单声道回声消除 (AEC) ,因此来自扬声器线路的输出必须是单声道。 如果禁用麦克风阵列处理,则多声道输入将折叠到一个通道进行 AEC 处理。 如果同时启用了麦克风阵列处理和 AEC 处理,则会在麦克风阵列处理之前对每个麦克风元素执行 AEC。

麦克风阵列处理

麦克风阵列是一组紧密定位的麦克风。 麦克风阵列比单个麦克风具有更好的方向性,因为声波到达每个麦克风的时间略有不同。 有关麦克风阵列的详细信息,请参阅 Web 文章 Windows Vista 中的麦克风阵列支持如何生成和使用适用于 Windows Vista 的麦克风阵列

使用语音捕获 DSP

若要使用语音捕获 DSP,请执行以下步骤。

1. 初始化 DMO

通过使用 CLSID CLSID_CWMAudioAEC调用 CoCreateInstance 来创建语音捕获 DMO。 语音捕获 DSDP 仅公开 IMediaObjectIPropertyStore 接口,因此只能用作 DMO。

DMO 默认为源模式。 若要选择筛选模式,请将 MFPKEY_WMAAECMA_DMO_SOURCE_MODE 属性设置为 VARIANT_FALSE

接下来,使用 IPropertyStore 接口配置 DMO 的内部属性。 应用程序必须设置的唯一属性是 MFPKEY_WMAAECMA_SYSTEM_MODE 属性。 此属性配置 DMO 中的处理管道。 其他属性是可选的。

2. 设置输入和输出格式

如果在筛选模式下使用 DMO,请通过调用 IMediaObject::SetInputType 来设置输入格式。 输入格式几乎可以是任何有效的未压缩 PCM 或 IEEE 浮点音频类型。 如果输入格式与输出格式不匹配,DMO 会自动执行采样率转换。

如果在源模式下使用 DMO,请不要设置输入格式。 DMO 根据音频设备自动配置输入格式。

在任一模式下,通过调用 IMediaObject::SetOutputType 来设置输出格式。 DMO 可以接受以下输出格式:

  • 子类型: MEDIASUBTYPE_PCMMEDIASUBTYPE_IEEE_FLOAT
  • 格式块: WAVEFORMATWAVEFORMATEX
  • 每秒样本数:8,000;11,025;16,000;或 22,050
  • 通道:1 个用于仅限 AEC 模式,2 或 4 个用于麦克风阵列处理
  • 每个样本的位数:16

以下代码将输出类型设置为 16 位单声道 PCM 音频:

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. 处理数据

在处理任何数据之前,建议调用 IMediaObject::AllocateStreamingResources。 此方法分配 DMO 在内部使用的资源。 在前面列出的步骤之后(而不是之前)调用 AllocateStreamingResources 。 如果不调用此方法,DMO 会在数据处理开始时自动分配资源。

如果在筛选模式下使用 DMO,则必须通过调用 IMediaObject::P rocessInput 将输入数据传递给 DMO。 来自麦克风的音频数据进入流 0,扬声器线路中的音频数据进入流 1。 如果在源模式下使用 DMO,则无需调用 ProcessInput

若要从 DSP 获取输出数据,请执行以下步骤:

  1. 创建一个缓冲区对象来保存输出数据。 缓冲区对象必须实现 IMediaBuffer 接口。 缓冲区的大小取决于应用程序的要求。 分配较大的缓冲区可以减少发生故障的几率。
  2. 声明 DMO_OUTPUT_DATA_BUFFER 结构,并将 pBuffer 成员设置为指向缓冲区对象。
  3. DMO_OUTPUT_DATA_BUFFER 结构传递给 IMediaObject::P rocessOutput 方法。
  4. 只要 DMO 具有输出数据,就继续调用此方法。 DSP 通过在 DMO_OUTPUT_DATA_BUFFER 结构的dwStatus 成员中设置 DMO_OUTPUT_DATA_BUFFERF_INCOMPLETE 标志来指示其具有更多输出。

要求

要求
最低受支持的客户端
Windows Vista [仅限桌面应用]
最低受支持的服务器
Windows Server 2008 [仅限桌面应用]
标头
Wmcodecdsp.h
DLL
Mfwmaaec.dll

另请参阅

数字信号处理器