Implementieren von Rendern
Die einfachste Möglichkeit zur Visualisierungsprogrammierung besteht darin, dass Sie einen Handler für ein Zeitereignis erstellen. In bestimmten Intervallen erstellt Windows Media Player eine Momentaufnahme der wiedergegebenen Audiodaten und stellt die Momentaufnahmedaten für die aktuell geladene Visualisierung bereit. Dies ähnelt der ereignisgesteuerten Programmierung und ist Teil des Programmiermodells von Microsoft Windows. Sie schreiben Code und warten, bis er von einem bestimmten Ereignis aufgerufen wird.
Wenn Ihr Code eine Implementierung der IWMPEffects::Render-Funktion zum Rendern im fensterlosen Modus ist, erhält er die folgenden Parameter:
TimedLevel
Dies ist eine Struktur, die die Audiodaten definiert, die Ihr Code analysiert. Die -Struktur besteht aus zwei Arrays. Das erste Array basiert auf Frequency-Informationen und enthält eine Momentaufnahme des Audiospektrums, unterteilt in 1024 Teile. Jede Zelle des Arrays enthält einen Wert zwischen 0 und 255. Die erste Zelle beginnt bei 20 Hz und die letzte bei 22050 Hz. Das Array ist zweidimensional, um Stereoaudio darzustellen. Das zweite Array basiert auf Wellenforminformationen und entspricht der Audioleistung, wobei je stärker die Welle ist, desto größer der Wert. Das Wellenformarray ist eine präzise Momentaufnahme der letzten 1024 Slices der Audioleistung, die in sehr kleinen Zeitintervallen aufgenommen wurden. Dieses Array ist auch zweidimensional, um Stereoaudio darzustellen.
HDC
Dies ist ein Microsoft Windows Handle für einen Gerätekontext. Dies bietet eine Möglichkeit, die zu Windows Zeichnungsoberfläche zu identifizieren. Sie müssen sie nicht erstellen, sie müssen sie nur für bestimmte Zeichnungsfunktionsaufrufe verwenden.
RECT
Dies ist ein Microsoft Windows Rechteck, das die Größe einer Zeichnungsoberfläche definiert. Dies ist ein einfaches Rechteck mit vier Eigenschaften: links, rechts, oben und unten. Die tatsächlichen Werte werden von Windows Media Player bereitgestellt, sodass Sie bestimmen können, wie der Benutzer oder Der Skinentwickler das Fenster, auf dem Sie zeichnen möchten, angepasst hat. Außerdem wird die Position auf dem HDC bestimmt, auf der der Effekt gerendert werden soll.
Wenn Ihr Code eine Implementierung der IWMPEffects2::RenderWindowed-Funktion zum Rendern in einem Fenster ist, empfängt er die folgenden Parameter:
TimedLevel
Dies sind die gleichen Informationen, die die Render-Funktion empfängt.
fRequiredRender
Der Parameter fRequiredRender informiert Sie darüber, dass ihre Visualisierung sich selbst neu malen muss, z. B. wenn ein anderes Fenster darüber gezogen wird. Wenn dieser Wert FALSE ist, können Sie den Renderingcode problemlos überspringen, wenn das aktuelle Medienelement beendet oder angehalten wird. Dadurch können Sie vermeiden, dass CPU-Zyklen unnötig verbraucht werden.
Das vom Plug-In-Assistenten generierte Beispiel-Plug-In stellt keine benutzerdefinierte Implementierung für RenderWindowed bereit. Stattdessen ruft der Beispiel-Plug-In-Code den Gerätekontext aus dem übergeordneten Fenster ab, das von Windows Media Player in IWMPEffects2::Createbereitgestellt wird, ruft dann die Dimensionen des übergeordneten Fensters als RECT-Struktur ab und ruft dann mithilfe des Gerätekontexts, des RECT und des Zeigers auf Zeitebene von RenderWindowed auf Rendern auf.
Die folgenden Abschnitte enthalten weitere Informationen zum Implementieren von Render:
- Verwenden von zeitierten Ebenen
- Verwenden von Gerätekontexten
- Verwenden von Rechtecke
- Beispiel für Rendercode