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


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

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

Описание

В этом примере фильтра показано, как реализовать эталонные часы. Фильтр использует входные данные микрофона по умолчанию для прослушивания пиков звука (например, щелчков, хлопков рук или кашля), которые используются для определения скорости часов.

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

Создайте пример проекта и скопируйте библиотеку DLL фильтра (Metronom.ax) в системный каталог Windows. Запустите файл Metronom.reg, чтобы зарегистрировать библиотеку DLL.

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

  1. Создайте граф фильтра в GraphEdit, который отрисовывает видеопоток.
  2. Удалите все сгенерированные звуковые потоки.
  3. Добавьте фильтр Metronome в граф. Он отображается в категории "Фильтры DirectShow".
  4. Запустите граф. Видео начнет воспроизводиться на обычной скорости.
  5. Хлопайте руки или используйте метроном, чтобы установить новую скорость.

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

Этот фильтр работает только для видео. Средство аудио рендеринга не может синхронизироваться с радикально разными частотами.

Если вы хлопаете 92 раза в минуту (один раз каждые 652 мс), видео будет воспроизводиться по нормальной скорости. Это можно изменить по умолчанию, изменив значение константы BPM в Metronom.cpp.

Если вы перестаете хлопать в течение определенного периода времени, а затем начинаете хлопать снова, необходимо начать с примерно той же скорости, или фильтр будет игнорировать его. Кроме того, скорость воспроизведения видео ограничена скоростью ЦП. Если превышено ограничение в течение любого периода времени, фильтр перестанет отвечать на изменения скорости. Если это произойдет, остановите граф и перезапустите его.

Если вы реализуете собственные часы, наиболее важными правилами является то, что эталонные часы не должны идти назад. То есть они никогда не должны сообщать о значении времени меньше предыдущего значения времени.

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

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

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

класс CBaseReferenceClock

Примеры DirectShow