Gibt es Musikprogrammiersprachen aus der Zeit nach der SuperCollider-Ära?

Die Geschichte der Musik- und Klangsynthesesprachen lässt sich bis zu den Musik-N-Sprachen ab den 1950er Jahren zurückverfolgen. Sie können die Fäden von dort zu einer Vielzahl von Sprachen verfolgen, die in den 90er Jahren entwickelt wurden, darunter CSound , ChucK und SuperCollider . CSound könnte als letzte der "traditionellen" Music N-Sprachen angesehen werden, die sich hauptsächlich auf die Klangsynthese konzentrieren, während ChucK und SuperCollider auch flexible Werkzeuge für die Komposition hinzufügen. (Es gibt auch eine Vielzahl von grafischen Point-and-Click-Sprachen wie Max MSP und PureData , die ebenfalls vom Music N-Paradigma abstammen, aber ich interessiere mich wegen dieser Frage nur für textbasierte Sprachen.)

SuperCollider war immer mein Werkzeug der Wahl. Es bietet eine große Auswahl an Opcodes (Low-Level-Signalverarbeitungsmodule) und viele Möglichkeiten, sie spontan zusammenzufügen, Ereignisse algorithmisch auszulösen und interaktiv auf externe Signale zu reagieren.

Allerdings ist SuperCollider jetzt eine Art alte Technologie. Die erste Version kam 1996 heraus und Version 3 wurde 2002 als Open Source veröffentlicht. Obwohl es seitdem neue Funktionen gibt, bleibt der Kern des Sprach- und Synthesesystems unverändert und bleibt für eine Maschine aus den frühen 00er Jahren optimiert. Insbesondere ist es eindeutig auf ein Einzelprozessor-Paradigma eingestellt und kann die Parallelität moderner GPUs nicht nutzen, obwohl Unterstützung für mehrere CPU-Kerne hinzugefügt wurde. Es gibt auch einige Merkmale seiner Architektur, die wahrscheinlich neu überdacht würden, wenn es jetzt neu gestaltet würde. (Ein Beispiel ist die Notwendigkeit, den Syntheseserver als separate Anwendung von der Sprache selbst auszuführen, was es unter anderem sehr schwierig macht, samplegenaues Timing zu erreichen.)

Daher frage ich mich, ob es Nachfolger von SuperCollider und seinen Cousins ​​aus dieser Zeit gibt, die entweder bereits existieren oder am Horizont sind, die über das hinausgehen, was mit den oben aufgeführten Tools erreicht werden kann. Die Möglichkeiten für GPU-Parallelität scheinen immens, und seit 2002 gab es auch Fortschritte im Design von Programmiersprachen, die zu einem noch beeindruckenderen und flexibleren Tool führen könnten. Insbesondere können virtuelle Maschinen jetzt fast so effizient wie reiner C-Code sein, was bedeutet, dass DSP-Code just-in-time kompiliert werden kann, wodurch die Beschränkung aufgehoben wird, an einem vorprogrammierten Satz von Opcodes festzuhalten.

Eine weitere Option für ein modernes „Music N“/SuperCollider-Projekt wäre die Form einer Bibliothek in Python oder einer anderen Sprache. Das wäre wohl eine vernünftigere Designwahl, da es heutzutage ziemlich einfach ist, eine High-Level-Python-Schnittstelle zu performantem Low-Level-Code zu haben. Über Antworten in dieser Form würde ich mich sehr freuen.

Ist jemandem eine Entwicklung oder Forschung in Richtung einer „modernen Musik N“ bekannt? Ich fange an, wieder in die Musikkomposition und DSP-Programmierung einzusteigen, nachdem ich lange Zeit mit anderen Dingen beschäftigt war, und es wäre wirklich großartig, ein neues und aufregendes Werkzeug zum Lernen zu haben, mit Funktionen, die über das hinausgehen, was ich bisher verwendet habe Vor. Wie oben erwähnt, spreche ich eher von textbasierten Sprachen für die DSP-Programmierung und algorithmische Komposition als von visuellen Patch-basierten Systemen.

Zusammenfassend ist mein Hauptinteresse herauszufinden, ob es Projekte gibt, die sich auf modernste Synthesetechniken konzentrieren und neue Technologien verwenden, die Anfang der 2000er Jahre noch nicht verfügbar waren. (Aber die Antworten, die andere Pakettypen auflisten, sind auch nützlich.)

Supernova ist der Multi-CPU-Syntheseserver und in die Hauptcodebasis integriert.
@PeterT ist es? Das geht aus der Website überhaupt nicht hervor, selbst wenn man sich das Änderungsprotokoll ansieht. Wo ist es dokumentiert und wie wird es verwendet?
Auf der Homepage unter den Features von scsynth: `Multi-processor support using the Supernova server implement`. Ich habe es immer noch nicht wirklich benutzt, bin mir nicht sicher, ob es der Standardserver ist oder ob ich vielleicht die Konfiguration anpassen muss. Dann geht es darum, Knoten in p-Gruppen anzuordnen.
Erwähnenswert ist auch, dass sc 3.7 ziemlich neu ist und für moderne CPU-Architekturen gut optimiert sein sollte. Ich stimme zu, dass GPU interessant sein könnte, es kann einige Probleme mit der Latenz geben. Mir ist keine SuperCollider-ähnliche Umgebung bekannt, die die GPU in großem Umfang nutzt. Vielleicht sollte ich das zu meiner Antwort hinzufügen.
@PeterT Die JIT-Kompilierung von DSP-Code wäre ebenfalls ein Game-Changer, wenn sie in einer SuperCollider-ähnlichen Sprache existieren würde. Derzeit sind wir auf einen endlichen Satz von UGens beschränkt, aber das würde es ermöglichen, neue im laufenden Betrieb zu generieren. Es wäre ein bisschen so, als hätte man Faust nahtlos in die Sprache integriert. Es würde auch ermöglichen, dass Dinge wie Single-Sample-Feedback wirklich effizient durchgeführt werden können. Das wäre 2002 nicht machbar gewesen, aber virtuelle Maschinen sind jetzt viel effizienter und ich denke, dass es jetzt möglich wäre.
Wenn Sie nach Leistung suchen, ist es schwierig, Haskells Multi-Core-Optimierungstools zu schlagen (zB versuchen Sie es mit Tidal ).
@Nathaniel Sie kennen vielleicht soul.dev. Ich denke, es ist viel näher an dem, wonach Sie gesucht haben. Vielleicht nicht „reif für die Hauptsendezeit“, aber eine zum Anschauen.
@PeterT das solltest du als Antwort posten! Ich war mir dessen nicht bewusst, und es ist genau das, wonach ich gesucht habe.
@PeterT eine kurze Einschätzung: Es ist ein bisschen ausführlich, aber es wäre super einfach, ein zugänglicheres, SuperCollider-ähnliches Frontend in Python mit seiner API zu erstellen, das ist also großartig. Es ist jedoch nicht vollständig Open Source, und in den FAQ heißt es: „Letztendlich planen wir, SOUL zu kommerzialisieren, indem wir Back-End-Treiber und anderes geistiges Eigentum für die Verwendung durch Anbieter lizenzieren, die SOUL-kompatible Hardwareprodukte entwickeln.“ Das macht mich unsicher, ob das als Open-Source-Projekt möglich wäre, was mich traurig macht.
@Nathaniel IIRC Die Idee war, dass OpenGL in Bezug auf Open Source meiner Meinung nach ähnlich ist (GPU-Treiber sind im Allgemeinen nicht Open Source, GLSL ist immer noch nützlich). Ich vermute, dass „Anzüge“ (um es unhöflich auszudrücken) sich eingemischt haben und dass dieser Wunsch korrumpiert wurde.

Antworten (6)

Es gibt tatsächlich neue Sprachen sowie Bibliotheken in anderen Sprachen. Ich werde ein paar auflisten, die mir spontan einfallen, und vielleicht komme ich später zurück und erweitere meine Antwort.

bearbeiten 17.03.: Ich habe die Antwort leicht überarbeitet. Bemerkenswert ist, dass SuperCollider in großem Umfang oft als Back-End für Systeme verwendet wird, die auf einer Reihe von Sprachen und Paradigmen basieren; In einigen Fällen verwenden Systeme, die vor ein paar Monaten, als ich dies ursprünglich geschrieben habe, ihre eigenen Audio-Engines verwendeten, jetzt scsynth.

Bearbeiten 21.04.: Ich füge SOUL zur Liste hinzu, aber es ist auch erwähnenswert, dass WebAudio & WebAssembly in der Zwischenzeit meiner Meinung nach gut ausgereift sind. Es gibt jetzt einen WASM-Build scsynth, mit dem ich wirklich mehr spielen sollte, ich bin mir nicht sicher, wie viel Akzeptanz er bisher hat.

  • SOUL - entwickelt unter der Schirmherrschaft von ROLI, soll etwas Ähnliches wie GLSLin der Grafik sein: eine relativ einfache Sprache speziell für Audio-DSP und soll es Code ermöglichen, auf dedizierten DSPs sowie Allzweck-CPUs ausgeführt zu werden.
  • Sonic Pi - verwendet einen eigenen Server, scheint sich jedoch mehr auf Benutzerfreundlichkeit (insbesondere für den Einsatz in der Bildung) als auf erweiterte Synthesefunktionen zu konzentrieren. ( Bearbeiten: verwendet SuperCollider im Backend; ein wiederkehrendes Thema in dieser Liste).
  • ChucK - nicht sehr aktiv entwickelt, aber eine sehr zugängliche Sprache mit einigen interessanten Merkmalen zum Nachdenken über Zeit, die über syntaktischen Zucker hinausgehen.
  • Tidal Cycles - Haskell-basiertes System, hauptsächlich für generative Kompositionen und weniger für das Design von Synthesizern. Verwendet OSC, um andere Apps zu steuern (ursprünglich war dies hauptsächlich der benutzerdefinierte Synth Dirt, jetzt SuperDirtin SuperCollider, kann aber auch mit anderen zusammenarbeiten).
  • Overtone (Clojure-Bibliothek) – Ein SuperCollider-Front-End in Clojure.
  • Gibber - ein Javascript-basiertes Frontend für Web-Audio, das eine ugen-basierte Synthese-API ist, die Teil von HTML5 ist und in allen modernen Browsern ausgeführt wird.
  • Faust - eine untergeordnete Sprache für DSP, die in Plugins für andere Programme kompiliert wird, ähnlich wie SuperCollider.
Ich habe eine Bearbeitung vorgeschlagen, die Ihrer Liste Links und kurze Beschreibungen hinzufügt. Einige dieser Projekte sind neu für mich, also korrigieren Sie bitte meine Änderung, wenn eine meiner Beschreibungen falsch oder unvollständig ist. Keines der aufgelisteten Projekte befasst sich wirklich mit den von mir identifizierten Hauptproblemen, aber es ist sehr nützlich, die Liste zu haben.
Meinten Sie Oberton für Kugel 4? oberton.github.io
Gibber-Link ist tot.
@ user1079425 danke, ich habe es aktualisiert. Während ich bearbeite, denke ich, dass ich soul.dev prominenter erwähnen werde, da diese Antwort immer noch einige Treffer zu bekommen scheint.

Ich würde Csound immer noch als das beste Tool für die textbasierte Audioprogrammierung empfehlen. Es befindet sich aktiv in der Entwicklung und hat mit den jüngsten Fortschritten Schritt gehalten. Eine weitere erwähnenswerte Bibliothek ist eine Bibliothek namens pyo , die mit Python 2.7 und Python 3.5+ verwendet werden kann. Die Entwickler dafür haben viele andere nette Tools , die Sie vielleicht ausprobieren möchten. Wenn Sie einen tieferen Einblick in die Audioprogrammierung erhalten möchten, ist „ The Audio Programming Book “ ziemlich herausragend, obwohl es 2010 veröffentlicht wurde.

Es gibt einige interessante Frameworks zur algorithmischen Komposition, die auf der Programmiersprache LISP basieren:

Nyquist https://www.cs.cmu.edu/~music/nyquist/
Open Music http://repmus.ircam.fr/openmusic/home

Es gibt ein Buch über Nyquist, das von Informatikern/Komponisten geschrieben wurde, die die Sprache entwickelt haben – algocompbook.com.
Open Music wurde von Leuten bei IRCAM – en.wikipedia.org/wiki/IRCAM – entwickelt, einem französischen Institut für Klangforschung und elektroakustische Musikkomposition – ihre Arbeit ist es wert, überprüft zu werden.

Für eine moderne LISP-artige (vielleicht nicht für den LISP-Puristen) algorithmische Kompositions- und Syntheseumgebung ist Overtone eine gute Wahl.
Ja, Overtone ist eine weitere interessante Option, die wahrscheinlich auch aktiver entwickelt wird - im Vergleich zu den älteren akademischen Projekten, die ich erwähnt habe.

Calimba (siehe auch diese Präsentation für einen kurzen Überblick) ist eine Sprache, die ihre eigenen Synthesizer einbettet und als höhere Programmiersprache für Musikkomposition konzipiert ist.

Es unterstützt unter anderem Standardtransformationen auf musikalische Phrasen (Transposition, rhythmische Transformationen usw. ), Effekte, Mikrotonalität und eine (perfektionierbare) Umgebung für Live-Codierung.

Es basiert auf funktionalen Programmiermerkmalen ( let ... in ...Konstruktionen) und Kompositionen musikalischer Phrasen (es ist beispielsweise möglich, verschiedene Effekte zu komponieren, beispielsweise eine Verzerrung, ein Delay und ein Vibrato, um eine Effektkette zu erzeugen).

Ich kenne einen Kollegen, der ein Synth-System in Java geschrieben hat, das live bearbeitet werden kann. Es heißt Praxis LIVE und ist neueren Ursprungs, da es sich die Multithreading-Fähigkeiten von Java zunutze macht. Der Autor ist ziemlich versiert, da er auch JAudioLibs geschrieben hat, das eine Java-Audiobindung zum JACK Audio Connection Kit enthält.

Java kann viel mehr mit Audio machen, als allgemein angenommen wird. Es ist in Bezug auf die Leistung C++ viel näher als Python oder JavaScript. Ich habe mit 3D-Audio und einem FM-Synthesizer herumgespielt, der von Grund auf in Java gebaut wurde, auch ein Echtzeit-Theremin als Beispiel dafür, was Java kann. Ich mag es, in der Lage zu sein, meine eigenen zu rollen, mit Ideen herumzuspielen, anstatt von Synth-Systemen eingeschränkt zu werden. Es ist eine kleine Hürde, die Java-Sound-Grundelemente (z. B. SourceDataLine) gut in den Griff zu bekommen, aber sobald Sie darüber hinweg sind, gibt es alle möglichen Dinge, die von Grund auf neu erstellt werden können, wenn Sie dazu neigen.

Es gibt ein Buch von Will Pirkle mit dem Titel Designing Audio Effect Plug-Ins in C++: With Digital Audio Signal Processing Theory . Es führt Sie in das RackAFX-System ein, das mit Microsoft Visual C++ 2008-2010 verwendet wird. Sie können RackAFX mit anderen C++-Compilern als MSVBC++ verwenden. Sie verwenden RackAFX, um beim Design der GUI zu helfen, während C++ verwendet wird, um den DSP-Codeteil zu schreiben. RackAFX aktualisiert den Code automatisch, wenn Sie Schieberegler, Knöpfe und Schaltflächen hinzufügen. Es gibt viele Beispiele von Verzögerungen, Filtern usw.

Er hat zwei Bücher, sie sind beide großartig. Dasselbe gilt für das Buch von Eric Lyon über das Schreiben von Max-Externals in C. Ich denke, dass die Dinge jetzt wirklich so laufen. Die Leute machen ihre Audiodateien in Bibliotheken in C/C++ und betten sie in Host-Umgebungen wie SuperCollider, Max, PD usw. ein.