Поделиться через


DSP голосовой записи

Объект , который инкапсулирует несколько dsp, связанных с записью голоса.

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 в одном объекте, а объект является только объектом DMO (он не реализует IMFTransform). DMO записи голоса включает следующие компоненты DSP:

  • Акустическое эхо-подавление (AEC)
  • Обработка массива микрофона
  • Подавление шума
  • Автоматическое управление получением
  • Обнаружение голосовой активности

Приложения могут включать и отключать каждый компонент по отдельности.

DMO голосовой записи поддерживает два режима работы: режим фильтра и режим источника . В режиме фильтра приложение отправляет примеры звука с микрофона и из строки динамика в DMO, а DMO создает выходные данные.

В режиме исходного кода приложению не нужно доставлять образцы в DMO. Вместо этого DMO управляет всеми операциями на звуковых устройствах, включая инициализацию устройств, запись и синхронизацию аудиопотоков, вычисление меток времени и получение геометрии микрофонного массива. В исходном режиме приложение просто настраивает DMO, а выходные данные DMO — это чистый, обработанный сигнал микрофона. Режим источника значительно проще в использовании, чем режим фильтра, и рекомендуется для большинства приложений.

В настоящее время DMO голосового захвата поддерживает только одноканальные акустические эхо-подавления (AEC), поэтому выходные данные из линии динамика должны быть одноканальные. Если обработка массива микрофона отключена, многоканальные входные данные сворачиваются в один канал для обработки AEC. Если включена обработка массива микрофона и обработка AEC, AEC выполняется для каждого элемента микрофона перед обработкой массива микрофона.

Обработка массива микрофона

Массив микрофонов — это набор микрофонов с близко расположенными позициями. Массивы микрофонов достигают лучшей направленности, чем один микрофон, так как акустические волны поступают на каждый микрофон в немного другое время. Дополнительные сведения о микрофонных массивах см. в веб-статьях Поддержка микрофонных массивов в Windows Vista и Создание и использование микрофонных массивов для Windows Vista.

Использование DSP для записи голосовой связи

Чтобы использовать DSP для записи голосовой связи, выполните следующие действия.

1. Инициализация DMO

Создайте DMO для захвата голоса, вызвав CoCreateInstance с CLSID_CWMAudioAEC CLSID. DSDP для голосового захвата предоставляет только интерфейсы IMediaObject и IPropertyStore , поэтому его можно использовать только в качестве DMO.

DMO по умолчанию использует режим источника. Чтобы выбрать режим фильтрации, задайте для свойства MFPKEY_WMAAECMA_DMO_SOURCE_MODEзначение VARIANT_FALSE.

Затем настройте внутренние свойства DMO с помощью интерфейса IPropertyStore . Единственное свойство, которое должно задать приложение, — это свойство MFPKEY_WMAAECMA_SYSTEM_MODE . Это свойство настраивает конвейер обработки в DMO. Другие свойства являются необязательными.

2. Настройка форматов входных и выходных данных

Если вы используете DMO в режиме фильтра, задайте формат входных данных, вызвав метод IMediaObject::SetInputType. Входной формат может быть практически любым допустимым типом звука с плавающей запятой PCM или IEEE без сжатия. Если входной формат не соответствует формату вывода, DMO автоматически выполняет преобразование частоты выборки.

Если вы используете DMO в исходном режиме, не устанавливайте формат входных данных. DMO автоматически настраивает формат входных данных на основе звуковых устройств.

В любом режиме задайте формат вывода, вызвав IMediaObject::SetOutputType. DMO может принимать следующие форматы вывода:

  • Подтип: MEDIASUBTYPE_PCM или MEDIASUBTYPE_IEEE_FLOAT
  • Блок формата: WAVEFORMAT или WAVEFORMATEX
  • Выборка в секунду: 8000; 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 в режиме фильтрации, необходимо передать входные данные в DMO, вызвав метод IMediaObject::P rocessInput. Звуковые данные с микрофона передаются в поток 0, а звуковые данные из строки динамика — в поток 1. Если вы используете DMO в исходном режиме, вызывать ProcessInput не нужно.

Чтобы получить выходные данные из DSP, выполните следующие действия.

  1. Создайте объект буфера для хранения выходных данных. Объект buffer должен реализовывать интерфейс IMediaBuffer . Размер буфера зависит от требований приложения. Выделение большего буфера может снизить вероятность сбоев.
  2. Объявите структуру DMO_OUTPUT_DATA_BUFFER и задайте элемент pBuffer , указывающий на объект буфера.
  3. Передайте структуру DMO_OUTPUT_DATA_BUFFER методу IMediaObject::P rocessOutput .
  4. Продолжайте вызывать этот метод до тех пор, пока объект DMO содержит выходные данные. DSP сообщает о наличии большего объема выходных данных, устанавливая флаг DMO_OUTPUT_DATA_BUFFERF_INCOMPLETE в элементе dwStatusструктуры DMO_OUTPUT_DATA_BUFFER .

Требования

Требование Значение
Минимальная версия клиента
Windows Vista [только классические приложения]
Минимальная версия сервера
Windows Server 2008 [только классические приложения]
Заголовок
Wmcodecdsp.h
DLL
Mfwmaaec.dll

См. также раздел

Цифровые обработчики сигналов