Udostępnij przez


Przykład filtru synth

[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

Filtr Synth jest filtrem źródłowym, który generuje kształty fal audio.

Ten filtr ilustruje dynamiczne budowanie grafu. Może przełączać się między nieskompresowanym dźwiękiem PCM a skompresowanym formatem MS_ADPCM (Adaptacyjna modulacja kodu impulsu delta firmy Microsoft).

Ten filtr jest wyświetlany w pliku GraphEdit jako "Filtr syntetyzatora audio".

Aby uzyskać więcej informacji na temat dynamicznego tworzenia grafu, zobacz Dynamic Graph Building.

Użycie

Filtr Synth umożliwia użytkownikowi ustawienie kształtów fali, częstotliwości, liczby kanałów i innych właściwości za pośrednictwem strony właściwości. Aby ustawić górny lub dolny punkt końcowy zmiecionego zakresu częstotliwości, przytrzymaj SHIFT podczas dostosowywania suwaka częstotliwości. Filtr obsługuje również interfejs niestandardowy ISynth2 do ustawiania tych właściwości.

Aby zademonstrować funkcję tworzenia wykresu dynamicznego, wykonaj następujące czynności:

  1. Skompiluj filtr i zarejestruj go za pomocą narzędzia Regsvr32.
  2. Uruchom narzędzie GraphEdit.
  3. Wstaw filtr syntetyzatora audio. Zostanie ona wyświetlona w kategorii Filtry DirectShow.
  4. Renderuj pin wyjściowy filtru.
  5. Kliknij przycisk Odtwórz.
  6. Otwórz stronę właściwości filtru.
  7. W obszarze Format danych wyjściowych wybierz pozycję PCM lub Microsoft ADPCM.

Uwagi dotyczące programowania

Ten przykład zawiera następujące pliki:

  • Dynsrc.h, Dynsrc.cpp: zawiera dwie klasy bazowe filtrów źródłowych, które obsługują dynamiczne budowanie grafu, CDynamicSource i CDynamicSourceStream.
  • ISynth.h: deklaruje niestandardowy interfejs ISynth2 do ustawiania właściwości filtru.
  • Resource.h: zawiera definicje zasobów.
  • Synth.def: eksportuje funkcje DLL wymagane przez bibliotekę COM.
  • Synth.h, Synth.cpp: zawiera klasę CAudioSynth, która generuje dane dźwiękowe, oraz klasę CSynthFilter, która implementuje filtr.
  • Synth.rc: zawiera zasoby używane przez filtr.
  • Synthprp.h, Synthprp.cpp: Implementuje stronę właściwości filtru.

Klasa CDynamicSource jest dostosowywana z klasy bazowej CSource. Używa co najmniej jednego pinu wyjściowego pochodzącego z klasy CDynamicSourceStream. Klasa CDynamicSourceStream jest dostosowywana z klasy CSourceStream, ale pochodzi z klasy CDynamicOutputPin, a nie klasy CBaseOutputPin.

Klasa CDynamicSource ma następujące metody, których nie można znaleźć w CSource:

  • Zatrzymaj: sygnalizuje zdarzenie 'stop' (CDynamicOutputPin::m_hStopEvent) i wyłącza wątek pracy dla wszystkich niepodłączonych pinów. Przy połączonym numerze PIN metoda Nieaktywna numeru PIN spowoduje zamknięcie wątku roboczego.
  • Wstrzymaj: resetuje zdarzenie zatrzymania.
  • JoinFilterGraph: wywołuje metodę CDynamicOutputPin::SetConfigInfo na każdym pinie.

Klasa CDynamicSourceStream ma następujące metody, których nie można znaleźć w CSourceStream:

  • DestroySourceThread: zamyka wątek roboczy.
  • Błąd krytyczny: Informuje o błędzie menedżer grafu filtrów.
  • OutputPinNeedsToBeReconnected: Sygnał wskazuje, że należy ponownie połączyć wyprowadzenie wyjściowe. Po wywołaniu tej metody wątek roboczy wywołuje metodę CDynamicOutputPin::DynamicReconnect w celu ponownego połączenia pinu.

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\Synth.

przykłady DirectShow