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


Пример фильтра Synth

[Функция, связанная с этой страницей, DirectShow, является устаревшей функцией. Он был заменен MediaPlayer, IMFMediaEngineи захват аудио/видео в Media Foundation. Эти функции оптимизированы для Windows 10 и Windows 11. Корпорация Майкрософт настоятельно рекомендует для нового кода использовать MediaPlayer, IMFMediaEngine и аудио-видеозахват в Media Foundation вместо DirectShow, по возможности. Корпорация Майкрософт предлагает, что существующий код, использующий устаревшие API, будет перезаписан для использования новых API, если это возможно.]

Описание

Фильтр Synth — это исходный фильтр, который создает звуковые волны.

Этот фильтр иллюстрирует динамическое построение графа. Он может переключаться между несжатым звуком PCM и сжатым форматом MS_ADPCM (адаптивная разностная импульсная модуляция Microsoft).

Этот фильтр отображается в GraphEdit как "Фильтр синтезатора звука".

Дополнительные сведения о динамическом построении графов см. в динамическом построении графов.

Употребление

Фильтр Synth позволяет пользователю задать форму волны, частоту, количество каналов и другие свойства с помощью страницы свойств. Чтобы задать верхнюю или нижнюю точку изменяемого диапазона частот, удерживайте клавишу SHIFT при настройке ползунка частоты. Фильтр также поддерживает пользовательский интерфейс ISynth2 для задания этих свойств.

Чтобы продемонстрировать функцию построения динамического графа, сделайте следующее:

  1. Создайте фильтр и зарегистрируйте его в служебной программе Regsvr32.
  2. Запустите GraphEdit.
  3. Вставьте фильтр синтезатора звука. Он отображается в категории "Фильтры DirectShow".
  4. Визуализировать выходной пин фильтра.
  5. Нажмите кнопку Воспроизвести.
  6. Откройте страницу свойств фильтра.
  7. В области "Формат вывода" выберите PCM или Microsoft ADPCM.

Заметки по программированию

Этот пример содержит следующие файлы:

  • Dynsrc.h, Dynsrc.cpp: содержит два базовых класса для исходных фильтров, поддерживающих динамическое построение графов, CDynamicSource и CDynamicSourceStream.
  • ISynth.h: объявляет пользовательский интерфейс ISynth2 для задания свойств фильтра.
  • Resource.h: содержит константы ресурсов.
  • Synth.def: экспортирует функции DLL, необходимые библиотеке COM.
  • Synth.h, Synth.cpp: содержит класс CAudioSynth, который создает звуковые данные и класс CSynthFilter, который реализует фильтр.
  • Synth.rc: содержит ресурсы, используемые фильтром.
  • Synthprp.h, Synthprp.cpp: реализует страницу свойств фильтра.

Класс CDynamicSource адаптирован из базового класса CSource. Он использует один или несколько выходных штырей, производных от класса CDynamicSourceStream. Класс CDynamicSourceStream адаптирован из класса CSourceStream, но является производным от класса CDynamicOutputPin вместо класса CBaseOutputPin.

Класс CDynamicSource имеет следующие методы, которые не найдены в CSource:

  • Остановка. Сигнализирует событие остановки (CDynamicOutputPin::m_hStopEvent) и останавливает рабочий поток для всех несоединенных выводов. На подключенном контакте метод деактивации остановит рабочий поток.
  • Пауза: сбросить событие остановки.
  • JoinFilterGraph: вызывает метод CDynamicOutputPin::SetConfigInfo на каждом пине.

Класс CDynamicSourceStream содержит следующие методы, которые не найдены в CSourceStream:

  • DestroySourceThread: завершает работу рабочего потока.
  • FatalError: сигнализирует об ошибке диспетчеру графов фильтров.
  • OutputPinNeedsToBeReconnected: сигнализирует, что выходной контакт должен быть повторно подключён. При вызове этого метода рабочий поток вызывает метод CDynamicOutputPin::DynamicReconnect для повторного подключения пина.

Скачивание примера

Чтобы скачать примеры пакета SDK DirectShow, установите последнюю версию пакета SDK для Windows.

Этот пример устанавливается по следующему пути: [корневой каталог SDK]\Samples\Multimedia\DirectShow\Filters\Synth.

Примеры DirectShow