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

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

Описание

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

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

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

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

Использование

Фильтр 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:

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

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

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

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

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

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

Примеры DirectShow