Live-Code-Musikprogrammierung
DSTRTD Malleable ist eine Laufzeitumgebung für die Skriptsprache Cursive, speziell für musikalische Anwendungen wie Synthesizer, Effekte, Sequencer, MIDI-Controller und CV-Steuerung. Mit Malleable lassen sich sowohl Echtzeitanwendungen für Audio- und MIDI-Bearbeitung, als auch die zugehörigen Bedienelemente mit speziellem Blick auf die Hardware-Anbindung erstellen. Die Software ist für macOS und iOS (nur iPad) verfügbar.
Worum geht es? DSTRTD Malleable ist eine modulare Laufzeitumgebung für die Programmiersprache Cursive zur Erstellung von Audio-, MIDI- und Hardware-Anwendungen.
- Konzept: Codebasierte Umgebung für Synthesizer, Effekte und Controller mit Fokus auf Hardware-Integration.
- Bedienung: Programmierung über Tastatur und Cursive-Sprache, ergänzt durch einfache UI-Elemente und ein Graph-System.
- Flexibilität: Sehr mächtig durch Block-, Port- und Send-Struktur, eignet sich für komplexe Audio- und MIDI-Projekte.
- Einschränkungen: iPad-Version ohne AUv3 und virtuellen MIDI-Port deutlich weniger flexibel als die macOS-Version.
- Fazit: Leistungsstarkes Tool mit steiler Lernkurve, auf dem Mac sehr empfehlenswert, auf dem iPad nur eingeschränkt.
DSTRTD Malleable App
Wem das alles jetzt nichts sagt, dem wird wahrscheinlich Native Instruments Reaktor etwas sagen. DSTRTD Malleable ist quasi NI-Reaktor-Core, ohne die grafischen GUI-Design-Spielereien. Oder auch Pure Data mit Skriptsprache.
Daneben ist an dieser Stelle auch die Live-Coding-Musikszene zu nennen und dann treffen wir auf Namen wie ChucK, Cyril, Extempore, Fluxus, Impromptu, Overtone, Sonic-Pi oder den Klassiker SuperCollider. Alles Programmier- oder Skriptsprachen speziell zum Erstellen von Musik. Vor allem die TOPLAP-Organisation macht sich seit 2004 für diese Szene stark und auf diversen Events, wie u. a. den Algoraves, kann man das auch live erleben.
Dass Programmieren nicht jedermanns Sache ist, dürfte klar sein. Wer nur Presets von Synthesizern durchwühlt, wird hier auch nicht glücklich. Ich finde es immer schade, wenn man sich lieber durch 3.000 Presets klickt als sich selbst zuzutrauen, einen eigenen Wert zu erschaffen (was letztendlich dann doch oft schneller geht).
Installation
Die iPadOS-Version wird über den Apple App-Store geladen, die macOS-Version muss von der DSTRTD-Homepage heruntergeladen werden. Die iPad-Versionen wird über In-App-Käufe freigeschaltet und kostet 129,- Euro.
Ihr könnt aber auch die macOS-Version von DSTRTD Malleable direkt von der Homepage kaufen. Die Version kostet 179,- USD (ca. 165,- Euro) und beinhaltet dann auch gleich die iPad-Version.
Beim Kauf der macOS-Version wird die Software für alle Geräte per Einloggen in das Benutzerkonto freigeschaltet. Bis zu fünf Geräte können so gleichzeitig mit der Software autorisiert werden. Es werden derzeit neben den Apple Silicon Macs auch noch Intel-Macs ab MacOS 12 unterstützt.
DSTRTD Malleable kann auf Wunsch zuvor ausgiebig getestet werden. In der Free-Version gibt es zwar nur einen Standalone-Modus, CV-Unterstützung, 10 Block-Definitionen („Makros“) und zwei Ein- und Ausgänge, das reicht aber völlig, um die Software ausführlich und ohne Zeitdruck zu testen. Für die CV-Unterstützung wird ein entsprechendes Hardware-Interface benötigt.
Für das iPad im Speziellen wäre hier der Korg SQ-1 für eine direkte Konvertierung von USB-MIDI nach CV zu nennen. Als Audiointerface wären für das iPad die meisten Geräte (ohne irgendeine Kontroll-Software) mit gleichspannungsgekoppelten (DC-coupled) Audioausgängen zu nennen wie z. B. MOTU M2/M4. Wer schon ein Audiointerface mit MIDI-Anschlüssen besitzt, für die wäre wohl das Doepfer MCV4 MIDI-CV/Gate-Interface am interessantesten.
Die Vollversion von DSTRTD Malleable bietet darüber hinaus AUv3-Unterstützung (derzeit nur für Mac), bis zu 32 Audio-Ein- und Ausgänge, MIDI, Presets, Bedienoberflächen und Graph (interaktives Flussdiagramm).
Allerdings muss man sich bei DSTRTD Malleable derzeit über eines klar sein: Die Software ist prinzipiell als Standalone-App konzipiert, um mit Hardware zu interagieren. Auf dem Mac geht es zwar auch als AudioUnit Audio-, MIDI- und Intrumenten-Plug-in, aber auf dem iPad muss man (derzeit) darauf verzichten, was die Einsatzmöglichkeiten hier leider sehr einschränkt. So wird z.B. auch auf dem iPad noch nicht mal ein virtueller MIDI-Port angeboten, um mit anderen Apps kommunizieren zu können (DSTRTD Malleable V1.4.1).
Bedienung
Beim ersten Öffnen begrüßt uns erst einmal gähnende Leere. Diese gilt es dann, mit Code zu füllen. Aber davon sollte man sich nicht einschüchtern lassen, denn es gibt ein (leider nur) englischsprachiges, aber recht gut geschriebenes Referenzhandbuch als PDF-Download, um die Cursive-Skriptsprache zu erlernen.
Die Eingabe erfolgt ausschließlich über die Tastatur, inklusive Tastaturkürzel für flüssiges Arbeiten. So zeigt z. B. „Apfel-M“ die MIDI-Events an. Auf dem iPad ist eine externe Tastatur Pflicht, denn das On-Screen-Keyboard bietet keine ALT-, CTRL- und CMD-Taste für diverse Shortcuts, wie z. B. zum Speichern eines Presets. Wenn der Text zu klein zum bequemen Lesen ist, lässt sich die Font-Größe anpassen.
Im „Dock“ können verschiedene Ansichten ausgewählt werden. So zeigt „Control“ die Bedienoberfläche an, „Code“ den Editor und „Graph“ das interaktive Flussdiagramm mit Sprung zu den entsprechenden Stellen im Programmcode.
Die Reiter „Output“ und „Ports“ zeigen im Klartext und schön aufgelistet den Status und die möglichen Port-Namen und MIDI-Controller an.
Die Preset-Verwaltung ist minimal, aber ausreichend. Beim Speichern von neuen Presets können noch Kurzbeschreibung und eigene Suchschlagworte mit angegeben werden.
Cursive-Programmierung
In Cursive gibt es drei wichtige Bausteine: Blocks, Port und Send.
Block
Blocks sind datenverarbeitende Makros mit Werteein- und ausgabe. Ein Oszillator ist beispielsweise so ein Block, der die Frequenzeingabe nimmt und daraus eine Audioschwingungsform generiert. Ein Block wird initial mit dem Befehl „def“ deklariert.
Auf diese Weise können beliebig viele Blöcke definiert werden. Hier ein Beispiel aus dem Handbuch:
def Oscillator definiert einen Block. Dieser hat diverse Eingabe- und Ausgabeschnittstellen. Generell müssen erst alle Eingabeformate, dann alle Puffer (falls notwenig) und zuletzt die Ausgabeformate der Reihenfolge nach angegeben werden.
Das sähe dann so aus:
cursive
def Oscillator
inp frequency – „input“ definiert das Eingabeformat, hier als Frequenz (Hz)
out audio – „output“ definiert das Ausgabeformat, hier Audiogeschwindigkeit
set audio { wave triangle frequency } Puffer sind Wertezwischenspeicher und können nur jeweils innerhalb einer Blockdefinition benutzt werden. Wenn kein Wert von außen eingegeben wird, kann der Wert intern mit dem Befehl „set“ definiert werden. In diesem Fall werden die Werte für die Schwingungsform (=Dreieck) und der Frequenz (Hz) zwischengespeichert.
Mit use Oscillator osc1 osc2 werden dann zwei Instanzen dieses Oszillators erzeugt.
Mit send 220 osc1:frequency, send 330 osc2:frequency können wir die Frequenzen in Hertz für die einzelnen Oszillatorinstanzen festlegen. Dieser fixe Wert kann dann später z. B. durch ein Bedienelement ersetzt werden.
Mit send osc1:audio [L], send osc2:audio [R] geben wir schließlich an, wohin die Audioausgabe der Instanzen gelenkt werden soll, also in diesem Fall osc1 an den linken Audiokanal und osc2 an den rechten.
Ports
Ports sind die Schnittstellen zur Außenwelt für MIDI-Daten und Audiosignale. In Cursive gibt es elf Port-Typen mit separaten Ein- und Ausgängen für Audio, MIDI-Controller, MIDI-Pitchbend, MIDI-Velocity, MIDI-Voice Port (mit vier Sub-Ports, bestehend aus Frequenz nach MIDI-Note, Gate (Notenlänge), MIDI-Noten und Velocity). Am Port-Ausgang werden nur MIDI-Noten und Velocity ausgegeben.
Sends
Sends sind wie gesagt virtuelle Verbindungen zwischen den Blocks und werden üblicherweise mit der einfachen Syntax
send [Quelle] Zielblock:port
initiiert.
Es können zwar auch Verbindungen zwischen zwei Ports direkt erstellt werden, aber da gibt es Einschränkungen, wie z. B. generell inkompatible Formate wie Audio zu MIDI oder Notenlänge zu Notennummer etc. Hier muss dann erst eine Umwandlung per Block zwischengeschaltet werden.
Das ist eigentlich schon das Wichtigste, was es zu Cursive zu wissen gibt. Hat man das mit den Blockfunktionen und Ports verinnerlicht, besteht der Rest hautsächlich nur noch aus mathematisch formulierten Modulationen. Projekte wie MIDI-Skalierungen oder Delay-, LFO- oder Filter-Effekte sind hier auch mit wenig Aufwand machbar und die Werksbibliothek bringt eine ganze Reihe an sehr brauchbaren Effekten und Klangerzeugern zur Veranschaulichung mit.
Bedienelemente
Hier gibt es Taster, Drehregler, Schalter, Zahleneingabe sowie horizontale und vertikale Schieberegler. Zur informellen Anzeige stehen Leuchten (LED), Meter, Oszilloskop, Spektrum, Stimmkalibrierung (Tuner) und Werteanzeige zur Auswahl.
Die Syntax für Bedienelemente ist:
ui inp/out [portName] userInterfaceType optionalParameter1 … optionalParameterN
und bietet auch Parameter zur Skalierung der Größe und Positionierung auf dem Bildschirm an.
Um ein Bedienelement einzufügen, muss vorher ein Ziel dafür erzeugt werden, erst dann kann das Bedienelement darauf zugreifen.
Die Änderungen im Code zum freien Einstellen der Frequenz sähen dann wie folgt aus:
cursive def Oscillator inp frequency out audio set audio { wave triangle frequency } use Oscillator osc1 osc2 send [UI1] osc1:frequency send [UI2] osc2:frequency send osc1:audio [L] send osc2:audio [R] ui inp [UI1] knob min 0 max 5000 follow 1 ui inp [UI2] knob min 0 max 5000 follow 1
Normalerweise senden die Bedienelemente Werte in Prozent. Das können wir aber mit „min/max“ z. B. zu Ganzzahlen umdeklarieren, da wir ja Frequenz in Hertz als Eingabegröße definiert hatten. Mit „follow“ wird dann noch die Schrittgröße angegeben. Die beiden zuvor fixen Zahlen werden hier einfach durch das „UIx“-Element ersetzt. So einfach kann es gehen.
Sonstiges
Vergleichbare Software gibt es wenig, zumindest, wenn es plattformenübergreifend sein soll. Dennoch hat DSTRTD Malleable keinen leichten Stand, schon aufgrund des Preises. Als erste Konkurrenz wäre das Pure-Data-AUv3-Plugin plugdata von Timothy Schoen zu nennen, das dazu auch noch kostenlos ist. Aber auch Audulus 4 (das sein Subscription-Modell inzwischen abgelegt hat) ist ein mächtiges Werkzeug zur visuellen Programmierung. DSTRTD Malleable geht jedoch tiefer, bis zur Code-Ebene um genau zu sein, was es flexiber macht, aber auch nicht einfacher.




































Vielen Dank für den sicherlich mühevollen klaren Überblick.
„DSTRTD Malleable ist quasi NI-Reaktor-Core, ohne die grafischen GUI-Design-Spielereien.”
Reaktor ist eine grafische Programmiersprache und keine Spielerei! Gerade das machte den Reiz aus. Es ist eine Schande, dass NI Reaktor so in den Sand gesetzt hat.
Wenn man sich eines der Demovideos bei Malleable ansieht, dann muss man z.B. vier Codezeilen schreiben, um zwei Werte zu addieren.
In Reaktor wählt man einen Addierer und zieht drei Strippen mit der Maus.
@herw Das ist natürlich preislich eine andere Liga aber nach Sonic Pi und Supercollider hatte ich mir ein Kyma gekauft das alle Arbeitsweisen (Blöcke wie bei Reaktor/Objektorientiert aber auch Smalltalk/Capytalk bis zum Machinelevel) gleichzeitig ermöglicht. Natürlich eher experimentell orientiert als für eine Minimoog Simulation, und darum auch der Synth den ich am längsten habe.
Schade um Reaktor, gibt es den nicht mehr oder wird der nicht mehr weiterentwickelt?
@Llisa So viel ich weiß, wurde Reaktor ab dem letzten Update vor Jahren durch Freigabe der Patch und Build Ebenen nicht mehr weiterentwickelt. Lange noch im Store, dann nicht mehr.
NI hat halt den DJ Controller und Gigant Sample-Library Weg eingeschlagen und wohl gegen Pioneer & Co. verloren. Der Markenkern wurde also verändert, was immer hochriskant ist.
Bin gespannt, ob NI überlebt oder der Ausverkauf droht.
@Llisa Reaktor erlebt schon seit 2018 nur noch Stillstand und die Zukunft ist sehr ungewiss. Alle wichtigen Entwickler zu Reaktor haben NI verlassen.
Meine Reaktorversion 6.5. läuft immer noch sehr stabil auch auf dem neuesten MacOs.
Es macht mir aber keinen Spaß mehr, neue Algorithmen damit zu entwickeln.
Wenn es einen Neuaufbruch gäbe, der die Unzulänglichkeiten aufhebt (Trennung von Primary und Core z.B.), aber die grafische Programmierung beibehält, wäre ich wieder dabei.
@Llisa Seit dem letzten kleinen Update, dass vor allem native Unterstützung für Apple Silicon brachte, hat sich nichts mehr geändert. Der offizielle Stand ist glaub ich „eingefroren bis auf Weiteres“, aber die aktuelle Entwicklung verheisst nichts gutes. Dennoch können weiterhin Lizenzen bezogen werden. Für mich ist Reaktor gut so wie es ist, aber ich kratze auch nur an der Oberfläche. Sound ist top, die Library hat alles von hochqualitativ bis maximal abgefahren und ist immer für eine Inspiration gut. Reaktor taugt auch gut als GAS-Bremse. Ich bastle immer mal wieder etwas zum Ausprobieren in Primary vor dem Kauf oder wenn ich mir z.B. die monströse 40HP Filterbank fürs Eurorack à 1000€ ersparen möchte.
@swellkoerper Da hatte ich beim Lesen ein breites Grinsen im Gesicht :-)
mir geht es genauso. Wenn ein interessantes Eurorackmodul auf Amazona vorgestellt wird versuche ich das erst einmal (virtuell) nachzubauen. Und auch wenn da oft etwas anderes bei rauskommt… das ist dann manchmal sogar noch etwas besser. Wie etwa bei Filterbanks oder letztens dem Oneiroi. Mit dem Melbourne Rotocontrol (ein Traum mit Verbund einem Kyma System) wird es auch sehr haptisch und fast „echt“ ;-)
Wenn ich „Programmieren“ lese, ist bei mir direkt der Ofen aus. Nicht, weil ich die Idee nicht gut finde, ich kenne mich damit einfach nicht aus und möchte mich auch nicht damit beschäftigen. Respekt an alle, die das tun! Apropos Reaktor: Den habe ich auch und fand den Klang ehrlich gesagt noch nie wirklich brauchbar. Allerdings meine ich damit nicht die einzelnen Plugins wie Monark, sondern die fertigen Presets, die aus mehreren Modulen bestehen. Einzelne Plugins nutzt man ja ständig, aber diese Modul-Bastelei ist einfach nicht mein Ding, zumindest nicht am Rechner. Aber wie bei den üblichen Softsynth-Verdächtigen ist auch Reaktor eine gute Möglichkeit, in die modulare Welt einzutauchen. Schick sieht es immerhin aus und der Frust ist vorprogrammiert. xD Aber Programmieren mit Programmiersprache? Da laust mich doch der Affe! 🦧
Mal wieder nur MAC Only Müll.