Konpo · Hintergrund

MilkDrop-Presets erklärt: Wie ein paar Gleichungen die Visuals erzeugen

Ein MilkDrop-Preset ist eine kurze Textdatei voller Gleichungen. Wie Per-Frame- und Per-Pixel-Code, Wellen, Formen und Shader Musik in Bewegung verwandeln.

Monokern ·

Ein farbenfrohes MilkDrop-Preset im Visualizer von Konpo

Wer Zeit mit MilkDrop in Winamp verbracht hat, erinnert sich an die Presets: der Tunnel, der mit der Bassdrum atmete, der Rauch, der sich von der Wellenform kräuselte, das eine, das wie flüssiges Metall aussah. Was die meisten nie gesehen haben: wie klein diese Presets sind. Ein MilkDrop-Preset ist eine kurze Textdatei, oft nur ein paar Dutzend Zeilen, und das meiste, was du siehst, entsteht aus einer einfachen Idee.

Die Idee: Jedes Bild entsteht aus dem vorherigen

MilkDrop zeichnet nicht jedes Bild neu. Es nimmt das vorherige Bild, bewegt es ein wenig – zoomt, dreht, verzerrt, verschiebt es –, blendet es leicht aus und zeichnet dann die Wellenform der Musik darüber. Dann macht es dasselbe noch einmal, etwa sechzigmal pro Sekunde.

Weil jedes Bild ins nächste einfließt, summieren sich kleine Bewegungen. Ein Zoom von 1 % pro Bild wird zum Tunnel. Eine leichte Drehung wird zur Spirale. Ein sanftes Ausblenden hinterlässt Spuren hinter allem. Die Aufgabe des Presets ist es, diese Bewegung zu beschreiben und sie auf die Musik reagieren zu lassen.

Fünf Schritte: Das aktuelle Bild wird bewegt, ausgeblendet, bekommt die Wellenform darübergezeichnet und wird zum nächsten Bild Der ganze Trick: Jedes Bild ist das vorherige, bewegt, ausgeblendet und übermalt. Illustration.

Was in einer .milk-Datei steckt

Ein Preset ist eine einfache Textdatei mit der Endung .milk, geschrieben als Zeilen im Format key=value. Du kannst sie in jedem Texteditor öffnen. Grob hat sie fünf Teile.

Startwerte. Wie stark gezoomt, gedreht und verzerrt wird, wie schnell das Bild verblasst (decay), welche Art Wellenform gezeichnet wird und in welcher Farbe.

Per-Frame-Gleichungen. Code, der einmal pro Bild läuft und diese Werte über die Zeit verändert. Hier kommt die Musik ins Spiel: MilkDrop gibt dem Preset Variablen wie bass, mid und treb für die aktuelle Lautstärke jedes Frequenzbands, geglättete Versionen davon und time in Sekunden.

Ein Beispiel zur Veranschaulichung, im Format der Datei:

per_frame_1=zoom = 1.0 + 0.04*bass;
per_frame_2=rot = 0.03*sin(time*0.5);
per_frame_3=wave_r = 0.5 + 0.5*sin(time);

Damit drängt das Bild bei jedem Bassschlag nach vorn, schwingt langsam nach links und rechts, und der Rotkanal der Wellenform verschiebt sich mit der Zeit.

Per-Pixel-Gleichungen. Code, der für Punkte eines Rasters auf dem Bildschirm läuft, mit der Position jedes Punkts als Eingabe: x und y oder sein Abstand rad und Winkel ang zur Mitte. Hängt zoom von rad ab, bewegen sich die Ränder schneller als die Mitte; hängt rot von ang ab, verdreht sich das Bild zu einem Strudel.

per_pixel_1=zoom = zoom + 0.03*rad;

Eigene Wellen und Formen. Zusätzliche Wellenformen und Polygone, die das Preset selbst zeichnet, jede mit ihren eigenen kleinen Gleichungen. Das sind die Ringe, Sterne und Partikel, die über der Bewegung tanzen.

Shader (MilkDrop 2). MilkDrop 2, das 2007 mit Winamp 5.5 kam, brachte zwei Pixel-Shader mit: einen Warp-Shader, der verändert, wie das vorherige Bild übernommen wird, und einen Composite-Shader, der verändert, wie das fertige Bild angezeigt wird. Daher kommen das Leuchten, die Farbverschiebungen und die Kaleidoskope späterer Presets.

Eine vereinfachte MilkDrop-Preset-Datei mit ihren vier beschrifteten Teilen: Startwerte, Per-Frame-Code, Per-Pixel-Code und Shader Ein vereinfachtes Preset. Echte sind länger, haben aber dieselben vier Teile. Illustration.

Warum es so viele Presets gibt

Presets sind kurz, lesbar und verzeihend. Änder eine Zahl, und du siehst das Ergebnis sofort – das macht MilkDrop zu einer der freundlichsten Arten, die je erfunden wurden, mit Code zu spielen. Tausende Leute haben Presets geschrieben, oft indem sie das eines anderen kopiert und verändert haben, und sie in den Winamp-Foren weitergegeben. Die großen Preset-Pakete, die bis heute kursieren, sind das Ergebnis von zwanzig Jahren solcher Remixe.

Bevor du ein Preset teilst oder umbaust, schau dir den Namen und die Kommentare in der Datei an: Preset-Autoren haben ihre Arbeit meist signiert, und ihre Namen in der Datei zu lassen, ist eine alte Höflichkeit der Community.

Wie alte Presets heute laufen

MilkDrop selbst lief unter Windows mit DirectX, und seine Presets nutzen die Shader-Sprache von DirectX. Die modernen Nachbauten übersetzen sie:

  • projectM liest .milk-Dateien direkt in seiner eigenen Engine.
  • Butterchurn läuft in WebGL und nutzt Presets, die mit einem eigenen Konverter aus .milk-Dateien umgewandelt wurden. Der macht aus den Gleichungen JavaScript und aus den Shadern die Shader-Sprache des Webs. Die meisten klassischen Presets überstehen die Reise; ein paar, die auf Eigenheiten des Originals beruhten, sehen anders aus.

Ausprobieren auf dem Mac

Konpo, unser kostenloser Musikplayer für Mac, hat einen Butterchurn-Visualizer eingebaut. Drück ⇧⌘V, während Musik läuft, und er öffnet sich in einem eigenen Fenster und wechselt durch seine Presets. Mit einem Rechtsklick ins Fenster lädst du einen Ordner mit eigenen Presets oder kehrst zum eingebauten Set zurück.

Wenn das alles neu für dich ist, fang mit der Geschichte von Winamp und MilkDrop an. Wenn du auch den Rest des Winamp-Erlebnisses auf deinen Mac holen willst, lies Winamp für Mac: fünf Wege, das Gefühl zurückzuholen.