Wie es angefangen hat: Ein Instagram-Video
Ich kannte Live Music Coding nicht. Überhaupt nicht.
Dann war ich eines Abends am Doom-Scrolling auf Instagram — und plötzlich blieb ich bei einem Video hängen. Eine Frau saß vor ihrem Laptop, schrieb Code live auf der Bühne, und erzählte dabei Geschichten. Aus dem Code entstand in Echtzeit Musik. Das Publikum lauschte. Ich war fasziniert.
Ich hatte keine Ahnung, was das war. Aber ich wollte es sofort selbst machen.
Die Recherche führte mich zu strudel.cc — dem Browser-Tool, das sie vermutlich benutzt hatte. Ich spielte eine Weile damit herum. Die Mechanik war beeindruckend, aber die Oberfläche? Nein. Zu karg, zu unstrukturiert — nichts, womit ich wirklich arbeiten wollte.
Also machte ich das, was ich immer mache: Ich baute mein eigenes.
Projektverlauf
Live-Coding-Landschaft erforscht (Strudel, Sonic Pi, TidalCycles). Engine-Abstraktionslayer entworfen. CodeMirror 6 als Editor evaluiert.
CodeMirror 6 mit benutzerdefiniertem Extension-System integriert. Strudel-Engine als erste Audio-Quelle angebunden. 500ms-Debounce für Live-Evaluation.
Tone.js, Web Audio API und MIDI Output als weitere Engines integriert. Einheitliche Start/Stop/Error-API für alle vier Engines.
React Flow als bidirektionaler Audio-Routing-Visualizer. Drei 60fps-Canvas-Visualizer (Waveform, Spectrum, Pattern Timeline) mit geteiltem AnalyserNode.
Audio-reaktive Kreaturen mit Dual-Brain-System (Neural Net + Conway). IndexedDB-Autosave, URL-Sharing mit lz-string, GitHub Gist Integration.
104 Tests in 19 Dateien. Vollständige DE/EN/ES Übersetzung mit i18next. MediaRecorder-basierte Audio-Aufnahme. Launch auf live-music-coder.pro.
Das Kernproblem: Vier völlig unterschiedliche APIs
Das größte technische Problem war nicht eine einzelne Engine — sondern vier zu vereinen, die komplett unterschiedlich funktionieren:
Pattern-basierte Sprache inspiriert von TidalCycles. Verwendet Mini-Notation für Rhythmen: note("c3 e3 g3").slow(2).
Synthesizer und Effekte mit Scheduled Playback. Ideal für melodische Strukturen und klassische Synthesizer-Klänge.
Raw-Zugriff auf Audioverarbeitung im Browser. Maximale Kontrolle für experimentelle Klänge und Effektketten.
Sendet MIDI-Signale an externe Synthesizer und DAWs via WebMidi.js. Verbindet digitales und analoges Equipment.
Die Lösung: Ein Engine-Abstraktionslayer, der für jede Engine einen eigenen Executor mit einheitlicher Start/Stop/Error-API hat — aber vollständig unterschiedliche Code-Parsing-Logik.
Der Editor: CodeMirror 6 mit Engine-Detection
Der Editor verwendet CodeMirror 6 mit einem benutzerdefinierten Extension-System:
// Engine-spezifisches Syntax-Highlighting
function buildEditorExtensions(engine: AudioEngine) {
const extensions = [
darkTheme,
lineNumbers(),
autocompletion(),
debounce(500, (code) => executeCode(code, engine)),
];
switch (engine) {
case 'strudel':
return [...extensions, strudelHighlighting, strudelAutoComplete];
case 'tone':
return [...extensions, toneJsHighlighting, toneJsSnippets];
case 'webaudio':
return [...extensions, webAudioHighlighting];
case 'midi':
return [...extensions, midiHighlighting, midiChannelLens];
}
}
Der 500ms-Debounce ist entscheidend: Zu aggressiv bedeutet ständige Neuauswertung mitten im Tippen. Zu träge bedeutet keine “lebendige” Reaktion.
Der Node-Graph: React Flow als Audio-Routing-Visualizer
Das ungewöhnlichste Feature ist der Node-Graph — er zeigt nicht, was der Nutzer manuell erstellt hat, sondern was der Code tatsächlich produziert.
Das Ergebnis: Der Graph aktualisiert sich bidirektional. Code ändert sich, Graph updated. Im Graph einen Parameter ziehen, Code updated.
7 Visualizer mit Canvas 2D bei 60fps
Mittlerweile sind es sieben spezialisierte Visualizer — von den ursprünglichen drei auf sieben erweitert über mehrere Entwicklungs-Sprints:
Oscilloscope-Darstellung des Audiosignals in Echtzeit. AnalyserNode.getTimeDomainData() mit requestAnimationFrame.
FFT-basierte Frequenzanalyse. 512 Bins visualisiert als Balken — von 20Hz bis 20kHz.
Strudel-spezifischer Visualizer, der aktive Pattern-Slots, Loops und Timing-Events darstellt.
DAW-ähnliche Darstellung mit scrollendem Zeitstrahl, Velocity-Farben und Noten-Labels. Slider-Widgets für Parameter.
Visuelles Pattern-Grid — zeigt aktive Beats als Punkte in einem Raster. Ideal für rhythmische Übersicht.
Rotierende Notenspirale — Tonhöhen auf einem Kreis angeordnet, ideal für harmonische Zusammenhänge.
Frequenzrad-Visualisierung — zeigt aktive Frequenzen als Segmente auf einem rotierenden Rad.
Das Performance-Geheimnis: Alle Visualizer teilen einen einzigen AnalyserNode — kein mehrfaches Tap des Audiostreams, keine Latenz-Unterschiede zwischen den Darstellungen.
Die Beatlings: Kreaturen die Musik “hören”
Das spielerischste Feature sind die Beatlings — 6 Kreaturenarten, die auf die Musik reagieren. Ihr Dual-Brain-System kombiniert ein neuronales Netzwerk (reagiert auf Frequenz-Features) mit Conway’s Game of Life (Evolutionsmuster). Spielt man laute Bass-Beats, werden Crasher-Beatlings aktiv. Sanfte Melodien lassen Drifter auftauchen.
Persistenz: Drei Backends
Automatisches Autosave alle 30 Sekunden. Komplette Sitzungshistorie mit Undo/Redo über mehrere Sessions.
Der aktuelle Code wird mit lz-string komprimiert und als URL-Parameter kodiert. Ein Link teilt den exakten Code-Stand.
Speichern und Laden von Gists via Octokit. Öffentliche Snippets können in der Community geteilt werden.
Nach dem Launch: 7 Entwicklungs-Sprints
Nach dem initialen 12-Wochen-Sprint ging die Entwicklung weiter — mit sieben Feature-Sprints, die das Projekt von einem Proof-of-Concept zu einem vollwertigen Creative Tool transformiert haben:
DAW-ähnlicher Piano Roll Visualizer mit scrollendem Zeitstrahl, Velocity-Farben und interaktiven Slider-Widgets für Parameter-Steuerung.
Visuelles Pattern-Grid als neuer Visualizer. Erweiterte Recording-Funktionalität mit verbesserter Audio-Qualität.
Gamepad API Integration für Controller-Steuerung. MIDI-Input-Modul für externe Hardware. Solo/Mute-Shortcuts pro Engine. Console-Panel für Live-Debugging.
Zwei neue Visualizer: Rotierende Notenspirale für harmonische Zusammenhänge und Frequenzrad für aktive Frequenzen.
Vollständiges Einstellungs-Panel mit 4 Themes, Schriftgrößen-Anpassung, Vim-Modus, Zen-Modus, Zeilennummern und Word Wrap. Alles in localStorage persistiert.
@strudel/draw Integration für visuelle Pattern-Erstellung. Inline-Widgets mit Echtzeit-Feedback direkt im Editor.
Native macOS-App (Intel + Apple Silicon) mit Auto-Updater, .lmc Dateiformat und Code-Signierung. Windows und Linux in Planung.
Die Sessions-Sammlung: 43 kuratierte Stücke
Eine der größten Neuerungen ist die Sessions Library — eine Sammlung von 43 AI-komponierten Musikstücken, die als Lern- und Inspirationsressource dienen:
Jede Session hat mehrere Movements mit benannten Tonarten, BPM-Angaben und Composer Notes.
Ambient, Blues, Deep Work, Dub, Electronic, Lo-Fi, Narrative, Retro, Techno und Trance.
Eigene /sessions Route mit Filter- und Suchfunktion. Jede Session kann direkt im Editor geöffnet werden.
Die Stücke zeigen verschiedene Techniken — von minimalen Ambient-Patterns bis zu komplexen Trance-Strukturen.
Desktop-App: Electron für macOS
Live Music Coder ist nicht mehr nur ein Browser-Tool — seit v1.0.2 gibt es eine native Electron Desktop-App:
- macOS Intel + Apple Silicon (.dmg) — Code-signiert und notarisiert
- Auto-Updater — neue Versionen werden automatisch erkannt und installiert
- .lmc Dateiformat — eigenes Projektformat mit Dateiverknüpfung
- Windows + Linux — in Planung
Erweiterte Eingabe: Gamepad und MIDI Input
Seit Sprint 3 unterstützt Live Music Coder zwei neue Eingabemethoden:
Controller-Steuerung über die Gamepad API. Achsen und Buttons können auf Audio-Parameter gemappt werden.
Externe MIDI-Controller senden CC-Nachrichten direkt an die Engines. Ideal für Knob-basierte Live-Performance.
Jede Audio-Engine kann einzeln stummgeschaltet oder solo geschaltet werden — perfekt zum Isolieren beim Editing.
Echtzeit-Error-Logging und Debugging direkt in der IDE. Kein Wechsel zu den Browser DevTools nötig.
Qualität: Tests und Stabilität
Getestet werden: Engine-Executor-Logik, Code-Parsing pro Engine, Graph-Derivation aus AST, Kreatur-Spawn-Algorithmen und Persistenz-Layer.
Die Überraschung am Ende: Die Lizenz
Ich habe einen Fehler gemacht, den ich anderen ersparen möchte: Ich habe die Lizenz nicht gelesen, bevor ich angefangen habe.
Als das Projekt fertig war, las ich endlich die Lizenz von Strudel. Was ich fand, war die GNU Affero General Public License (AGPL-3.0) — eine Copyleft-Lizenz, die verlangt, dass jedes Softwareprodukt, das auf Strudel aufbaut, ebenfalls unter der AGPL-3.0 veröffentlicht werden muss.
Nach einigem Nachdenken habe ich beschlossen, das Richtige zu tun: Live Music Coder wird unter der AGPL-3.0 veröffentlicht. Strudel ist ein beeindruckendes Open-Source-Projekt, und die Community verdient diese Gegenseitigkeit.
Häufige Fragen
Frequently Asked Questions
Strudel ist der beste Einstieg. Die Mini-Notation ist intuitiv und erzeugt schnell hörbare Ergebnisse. note("c3 e3 g3").slow(2) reicht für den ersten Beat. Tone.js ist der nächste Schritt für melodischere Strukturen.
Nein. Live Music Coding ist Code-basiert, nicht Noten-basiert. Grundlegendes Verständnis von Rhythmus hilft, aber die meisten Patterns entstehen durch Experimentieren. Die Pattern-Sprache ist näher an Programmierung als an klassischer Musiktheorie.
Jede Engine hat Stärken: Strudel für rhythmische Patterns, Tone.js für Synthesizer, Web Audio für experimentelle Sounds, MIDI für externes Equipment. Die Kombination ermöglicht Workflows, die mit einer einzelnen Engine nicht möglich wären.
Der Code wird in einen AST (Abstract Syntax Tree) geparst. Jeder Audio-Knoten im AST bekommt eine stabile ID. Der Graph liest den AST und zeigt die Knoten. Änderungen im Graph modifizieren den AST, der zurück in Code serialisiert wird. Die stabilen IDs verhindern, dass Knoten bei jeder Änderung springen.
Ja — mit der Electron Desktop-App funktioniert alles vollständig offline. Die Browser-Version benötigt für GitHub Gist und URL-Sharing eine Internetverbindung, aber Editor und Audio-Engines laufen auch dort offline dank IndexedDB.
Die Beatlings — audio-reaktive Kreaturen mit Dual-Brain-System — sind proprietärer Code und wurden aus der Open-Source-Version entfernt. Sie werden als separates, eigenständiges Projekt weiterentwickelt.
Das Projekt ist live unter live-music-coder.pro und als Open-Source-Projekt auf GitHub verfügbar. Die Desktop-App für macOS steht als Download bereit. Pull Requests willkommen.