Die meisten KI-Musiktools erzeugen Audio. Man tippt "Hardstyle, treibend, düster" und bekommt eine WAV-Datei. synthStation macht etwas anderes: Es erzeugt keine Töne, sondern Spielanweisungen — und schickt sie an fünf echte Synthesizer, die im Studio stehen und wirklich klingen.
Der Ablauf hat drei Glieder:
- Ich tippe einen Prompt.
- Ein lokales Sprachmodell (Qwen3 27B auf Zuse) schreibt strukturiertes Performance-JSON — Noten, Parameter, Timing.
- Ein Realtime-Scheduler spielt dieses JSON über USB-MIDI an den Synth-Zoo ab.
Das LLM komponiert. Der Scheduler timt. Diese Trennung ist heilig: Das Sprachmodell macht nie Echtzeit-Arbeit, sonst zerfällt das Timing.
Die Leitprinzipien
Ein Hobbyprojekt driftet, wenn man es lässt. Gegen den Drift habe ich mir ein paar Regeln festgeschrieben — und die wichtigste ist:
Keine hardcoded Sound-Rezepte. Das LLM designt die Sounds.
Es gibt im Code keine Vorlage für einen "guten Lead". Das Modell kennt Da Tweekaz, es weiß, wie Hardstyle klingt — also lasse ich es die rund 540 Synth-Parameter selbst einstellen, statt ihm meine Vorurteile einzucodieren. Sound-Design-Wissen lebt im Modell, nicht im Programm.
Zweite Regel: audibel verifiziert. Jede Behauptung über die Hardware muss per Ohr nachprüfbar sein, bevor sie ein Häkchen bekommt. Ein MIDI-Mapping, das "eigentlich" stimmen sollte, zählt nicht. Erst wenn der DrumBrute auf Pad 36 wirklich die Kick auslöst, ist es wahr.
Die Stolperfallen, alle bezahlt
Hardware lügt anders als Software. Sie sagt nicht "Fehler", sie tut einfach das Falsche.
- NRPN-Timing am Mininova. Schickt man die Parameter-Änderungen zu schnell hintereinander, schluckt der Synth die Hälfte. Die Lösung ist eine künstliche Verlangsamung beim Senden — unschön, aber die einzige, die zuverlässig klingt.
- DrumBrute-Pads sind nicht General-MIDI. Die Belegung ist linear von 36 bis 45, nicht nach dem Standard-Schema. Das habe ich nicht aus dem Handbuch gelernt, sondern durch einen MIDI-Listener, der mir live zeigt, welches Pad welche Note feuert.
- Cross-Platform-Venvs korrumpieren sich. Der lokale Coder-Agent (Linux) und meine
Windows-Box teilten sich anfangs dasselbe Arbeitsverzeichnis inklusive
.venv. Jedes Sync hat die Umgebung zerschossen. Lösung: getrennte Clones, Sync nur über Git.
Vom Proof-of-Concept zum Produkt
Lange war das ein Wegwerf-Experiment im Bastelordner. Seit Kurzem nicht mehr — ich habe es
als eigenständiges Repo herausgelöst und wie ein kleines Produkt aufgesetzt: sauberes
src-Layout, ein einziger MCP-Server für alle Geräte (set_param(device, name, value)),
über hundert Tests, ein schlankes Web-Frontend ohne Build-Schritt.
Der Build-Modus ist derselbe wie bei aiDoom: Ich bin Architekt und Reviewer, der lokale Agent ist der Coder, gearbeitet wird in kleinen, abgenommenen Schritten. Die Spezifikationen und die Build-Historie liegen im Repo — damit eine künftige Session genau da weitermachen kann, wo die letzte aufgehört hat.
Der schönste Moment bisher: fünf Synthesizer synchron im Hardstyle-Jam — Pad-Flächen, Unison-Lead über zwei Geräte, ein Oktav-pumpender Bass, vier-auf-die-Eins von der Drum-Maschine. Alles aus einem getippten Satz. Der Loop läuft durch, und für einen Moment vergesse ich, dass ich das Ding selbst gebaut habe.