Metronomfilterbeispiel

[Das dieser Seite zugeordnete Feature DirectShow ist ein Legacyfeature. Es wurde von MediaPlayer, IMFMediaEngine und Audio/Video Capture in Media Foundation abgelöst. Diese Features wurden für Windows 10 und Windows 11 optimiert. Microsoft empfiehlt dringend, dass neuer Code mediaPlayer, IMFMediaEngine und Audio/Video Capture in Media Foundation anstelle von DirectShow verwendet, wenn möglich. Microsoft schlägt vor, dass vorhandener Code, der die Legacy-APIs verwendet, so umgeschrieben wird, dass nach Möglichkeit die neuen APIs verwendet werden.]

BESCHREIBUNG

In diesem Beispielfilter wird gezeigt, wie eine Referenzuhr implementiert wird. Der Filter verwendet Ihre Standardmikrofoneingabe, um auf Audiospitzen (z. B. Klicks, Handklatschen oder Husten) zu lauschen, die er verwendet, um eine Taktrate zu bestimmen.

Verbrauch

Erstellen Sie das Beispielprojekt, und kopieren Sie die Filter-DLL (Metronom.ax) in Ihr Windows-Systemverzeichnis. Führen Sie die Datei Metronom.reg aus, um die DLL zu registrieren.

So verwenden Sie den Filter:

  1. Erstellen Sie ein Filterdiagramm in GraphEdit, das einen Videodatenstrom rendert.
  2. Löschen Sie alle gerenderten Audiodatenströme.
  3. Fügen Sie dem Diagramm den Filter Metronom hinzu. Sie wird in der Kategorie DirectShow-Filter angezeigt.
  4. Führen Sie das Diagramm aus. Das Video wird mit normaler Geschwindigkeit wiedergegeben.
  5. Klatschen Sie in die Hände oder verwenden Sie ein Metronom, um eine neue Geschwindigkeit festzulegen.

Programmieranmerkungen

Dieser Filter funktioniert nur für Videos. Der Audiorenderer kann nicht mit radikal unterschiedlichen Taktraten synchronisiert werden.

Wenn Sie 92 Mal pro Minute klatschen (einmal alle ~652 ms), wird das Video mit der normalen Rate wiedergegeben. Sie können diese Standardeinstellung ändern, indem Sie den Wert der Konstante BPM in Metronom.cpp ändern.

Wenn Sie das Klatschen für einen bestimmten Zeitraum beenden und dann wieder mit dem Klatschen beginnen, müssen Sie mit ungefähr der gleichen Geschwindigkeit erneut beginnen, da sonst der Filter dies ignoriert. Außerdem wird die Videowiedergaberate durch die CPU-Geschwindigkeit begrenzt. Wenn Sie den Grenzwert für eine beliebige Zeitspanne überschreiten, reagiert der Filter nicht mehr auf Ratenänderungen. In diesem Fall beenden Sie das Diagramm, und starten Sie ihn neu.

Wenn Sie Eine eigene Uhr implementieren, ist die wichtigste Regel, dass Referenzuhren nicht rückwärts gehen dürfen. Das heißt, sie dürfen niemals einen Zeitwert melden, der kleiner als der vorherige Zeitwert ist.

Herunterladen des Beispiels

Installieren Sie zum Herunterladen der DirectShow SDK-Beispiele die neueste Version des Windows SDK.

Dieses Beispiel wird unter dem folgenden Pfad installiert: [SDK-Stamm]\Samples\Multimedia\DirectShow\Filters\Metronome.

CBaseReferenceClock-Klasse

DirectShow-Beispiele