DSP голосовой записи
Объект , который инкапсулирует несколько dsp, связанных с записью голоса.
CLSID
CLSID_CWMAudioAEC
Интерфейсы
- IMediaObject
- IPropertyStore
Свойства
Свойство | Описание |
---|---|
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, выполните следующие действия.
- Создайте объект буфера для хранения выходных данных. Объект buffer должен реализовывать интерфейс IMediaBuffer . Размер буфера зависит от требований приложения. Выделение большего буфера может снизить вероятность сбоев.
- Объявите структуру DMO_OUTPUT_DATA_BUFFER и задайте элемент pBuffer , указывающий на объект буфера.
- Передайте структуру DMO_OUTPUT_DATA_BUFFER методу IMediaObject::P rocessOutput .
- Продолжайте вызывать этот метод до тех пор, пока объект DMO содержит выходные данные. DSP сообщает о наличии большего объема выходных данных, устанавливая флаг DMO_OUTPUT_DATA_BUFFERF_INCOMPLETE в элементе dwStatusструктуры DMO_OUTPUT_DATA_BUFFER .
Требования
Требование | Значение |
---|---|
Минимальная версия клиента |
Windows Vista [только классические приложения] |
Минимальная версия сервера |
Windows Server 2008 [только классические приложения] |
Заголовок |
|
DLL |
|
См. также раздел