Udostępnij przez


Przykład filtru Metronome

[Funkcja skojarzona z tą stroną, DirectShow, jest starszą funkcją. Został zastąpiony przez MediaPlayer, IMFMediaEnginei Audio/Video Capture w Media Foundation. Te funkcje zostały zoptymalizowane pod kątem systemów Windows 10 i Windows 11. Firma Microsoft zdecydowanie zaleca, aby nowy kod używał MediaPlayer, IMFMediaEngine i Audio/Video Capture w programie Media Foundation zamiast DirectShow, jeśli to możliwe. Firma Microsoft sugeruje, że istniejący kod, który używa starszych interfejsów API, należy przepisać go do korzystania z nowych interfejsów API, jeśli to możliwe.]

Opis

Ten przykładowy filtr pokazuje, jak zaimplementować zegar referencyjny. Filtr używa domyślnych danych wejściowych mikrofonu do nasłuchiwania skoków dźwięku (takich jak kliknięcia, klapy dłoni lub kaszel), których używa do określenia częstotliwości zegara.

Użytkowanie

Skompiluj przykładowy projekt i skopiuj bibliotekę DLL filtru (Metronom.ax) do katalogu systemowego systemu Windows. Uruchom plik Metronom.reg, aby zarejestrować bibliotekę DLL.

Aby użyć filtru:

  1. Skompiluj wykres filtru w narzędziu GraphEdit, który renderuje strumień wideo.
  2. Usuń wszystkie renderowane strumienie audio.
  3. Dodaj filtr Metronome do grafu. Zostanie ona wyświetlona w kategorii Filtry DirectShow.
  4. Uruchom wykres. Film zacznie odtwarzać się z normalną prędkością.
  5. Przytulaj ręce lub używaj metronomu, aby ustawić nową prędkość.

Uwagi dotyczące programowania

Ten filtr działa tylko w przypadku wideo. Moduł renderowania audio nie jest w stanie synchronizować się z radykalnie różnymi szybkościami zegara.

Jeśli klaskasz 92 razy na minutę (raz na ok. 652 ms), film będzie odtwarzany w normalnym tempie. Tę wartość domyślną można zmienić, zmieniając wartość stałej BPM w Metronom.cpp.

Jeśli zatrzymasz klaskanie przez pewien czas, a następnie zaczniesz klaskać ponownie, musisz zacząć ponownie z mniej więcej taką samą prędkością lub filtr go zignoruje. Ponadto szybkość odtwarzania wideo jest ograniczona przez szybkość procesora CPU. Jeśli przekroczysz limit przez dowolny czas, filtr przestanie odpowiadać na zmiany szybkości. W takim przypadku zatrzymaj graf i uruchom ponownie.

Jeśli implementujesz własny zegar, najważniejsze reguły są to, że zegary referencyjne nie mogą iść wstecz. Oznacza to, że nie mogą zgłaszać wartości czasu mniejszej niż poprzednia wartość czasu.

Pobieranie przykładu

Aby pobrać przykłady zestawu SDK DirectShow, zainstaluj najnowszą wersję zestawu Windows SDK.

Ten przykład jest instalowany w następującej ścieżce: [SDK Root]\Samples\Multimedia\DirectShow\Filters\Metronome.

klasa CBaseReferenceClock

przykłady DirectShow