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.)
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.
GLSL
in 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.Dirt
, jetzt SuperDirt
in SuperCollider, kann aber auch mit anderen zusammenarbeiten).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.
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.
PeterT
N. Jungfrau
PeterT
PeterT
N. Jungfrau
jchook
PeterT
N. Jungfrau
N. Jungfrau
PeterT