Auf der Suche nach einer High-Level-Musikprogrammiersprache

Ich suche eine höhere Programmiersprache. Ich habe etwas gegoogelt und eine Reihe von Beispielen gefunden (einige hier zusammengefasst http://users.soe.ucsc.edu/~sasha/proj/musicpaper.pdf ), aber ich habe nicht ganz das gefunden, was ich brauche.

Das Schlüsselmerkmal, nach dem ich suche, ist, dass die Sprache es mir ermöglicht, Musik basierend auf einem Eingabematerial (einer Melodie) zu erstellen und mich dann den Rest des Stücks als eine Reihe von Transformationen des ursprünglichen Eingabematerials spezifizieren lässt. Die Arten von Transformationen, nach denen ich suche, sind Fragmentierung (eine Teilmenge des Originals angeben), Transposition (Tonhöhe ändern), Augmentation und Diminuation (Dauer ändern), Inversion (Richtung von Intervallen ändern), Retrograd (Reihenfolge ändern).

Gibt es so etwas?

UPDATE: Ich versuche es gerade mit music21 ( http://web.mit.edu/music21/ ). Es wird mir wahrscheinlich erlauben, dies zu tun, aber wahrscheinlich nicht so, dass es einfach zu bearbeiten oder zu lesen ist.

Ich verwende c++ auf win32. Es ist nicht das Werkzeug, es ist das Projekt, das Sie damit machen. Das ist ein ziemlich locker definiertes Projekt, das Sie bisher haben ... Und seien wir ehrlich. Die Leute machen viel bessere Musik, als Computer es jemals getan haben. Und wird es immer.
@StephenHazel Ich frage nicht nach einem Computerprogramm, das Musik für mich erzeugt. Ich frage nach einem Computerprogramm, mit dem ich eine Komposition als eine Reihe von Transformationen basierend auf meinen Eingaben ausdrücken kann. Ihr C++-Beispiel ergibt keinen Sinn. Angenommen, ich würde nach einem Programm fragen, mit dem ich Teilzeichenfolgen basierend auf einem Textmuster extrahieren kann, dann würden Sie mir sicherlich eine Regexp-Bibliothek empfehlen? Nun denn, ich frage nach einer Sprache, die es mir ermöglicht, Musik basierend auf einer Reihe wohldefinierter Manipulationen von Eingabemusik zu erstellen.

Antworten (12)

Neben Haskore, das bereits in dem Artikel erwähnt wird, auf den Sie sich beziehen, und denen, die von anderen erwähnt werden, gibt es SuperCollider und Pure Data .

Ich verstehe deine Frage absolut. Ich habe selbst nach so einem High-Level-Ding gesucht. Hier meine persönlichen Gedanken dazu:

Ich habe nichts Gutes gefunden und bin zu dem Schluss gekommen, dass es keine vorgefertigten, allgemein akzeptierten Abstraktionen gibt. Das liegt wahrscheinlich daran, dass sich alle darüber einig sind, was ein Delay, ein Sägezahn- oder ein Butterworth-Filter ist, aber es gibt keine allgemein anerkannte Methode, um Musik zu schreiben.

Am besten ist es also, eine Sprache zu finden, die über genügend "abstrakte Kräfte" verfügt, damit Sie Ihre eigenen Abstraktionen schreiben können. Es besteht kein Zweifel, dass Haskell so ein Biest ist, aber es ist schwierig (wenn auch lohnend) zu lernen.

Ich spiele derzeit mit Supercollider herum, um dorthin zu gelangen. Ich habe erst vor ein paar Tagen angefangen, also weiß ich nicht, wie weit es mich bringen wird. Das Mindeste, was es für mich tun wird, ist die Befreiung von MIDI. Ich kann den Sound steuern, wie ich will. Selbst wenn Sie (wie Sie sagen) nur daran interessiert sind, Noten-Sequenz-Transformationen zu schreiben, werden Sie diesem Ansatz schnell entwachsen, weil es alle gleich klingen wird. Dann möchten Sie vielleicht mehr Kontrolle über die Instrumente haben, als Midi Ihnen erlaubt. Zumindest bin ich jetzt hier.

Aber es gibt auch OSC-Bindings für Haskell, also kann ich Supercollider für die Klangsynthese und Haskell für die Kompositionssynthese verwenden. Ich denke auch über eine Spieler-Synthese nach, die zwischen den beiden liegen würde.

Martin, danke! Ich werde mir die von dir genannten Produkte anschauen. Wie Sie sagten, ich fange an zu glauben, dass es derzeit nichts gibt, was meinen Anforderungen entspricht. Ich versuche gerade, es mit JMusic oder JFugue zusammenzuschustern (da ich mit Java vertraut bin). Ich werde Ihren Vorschlag für Haskell jedoch auf jeden Fall berücksichtigen.

Siehe diese SO-Frage . Ich bin mir nicht sicher, ob das genau das ist, was Sie brauchen, aber es könnte helfen.

Da ich nur eine andere Frage verlinke, würde ich dies normalerweise als Kommentar setzen. Allerdings habe ich (noch) keine Kommentarberechtigung auf dieser Seite.

Vielen Dank! Nun, diese Frage hat sicher viele Antworten, viel mehr Beispiele als das Papier, auf das ich verlinkt habe. Ich bin mir noch nicht sicher, ob das Ding, das ich suche, darin enthalten ist, aber es sieht vielversprechend aus. Danke noch einmal!

Vielleicht interessieren Sie sich für die Programmiersprache CHucK.

https://www.coursera.org/course/chuck101

Können Sie etwas mehr Informationen über diese Sprache hinzufügen?
Vielen Dank. Als ich diese Frage zum ersten Mal formulierte, stolperte ich über CHucK, bevor ich sie veröffentlichte. Ich habe ein bisschen damit herumgespielt, ich finde es cool, aber es ist einfach ein bisschen zu niedrig für das, was ich vorhabe. Zum Beispiel habe ich in CHucK kein Metrum, keine Skalen, nicht einmal Noten. Nur Synthesizer und Zeit. CHuck ist also ein oder zwei Schichten zu weit unten für das, was ich wirklich brauche.

Der Einstieg in Tracker-Software könnte ein anderer Ansatz sein. Sie könnten die Tracker-Score-Notation als Programmiersprache und den Tracker-Player als Compiler/Interpreter betrachten.

Es gibt viele Musikmodule (Lieder), die Sie laden und mit denen Sie spielen können. Diese werden ständig geteilt.

Sie können Tracker-Software sofort verwenden, um Ihre „Eingangsmusik“ zu bearbeiten (z . B. OpenMPT ).

Es gibt viele Open-Source-Bibliotheken, mit denen Sie Musik in diesem Format abspielen können, z. B.: http://xmp.sourceforge.net . Wenn Sie also den Quellcode eines Players in die Hände bekommen, können Sie bei der Manipulation von Aspekten eines Songs über Ihre Programme weiterkommen.

So spielten viele Computerspiele Musik ab (insbesondere ältere Arcade-Spiele, bei denen der Speicher begrenzt war und es sich nicht leisten konnte, ganze Beispieldaten der endgültigen Songs zu existieren).

Viele Tracker-Modul-Player erlauben bereits eine grobe Song-Steuerung; Instrument stummschalten, Instrumente tauschen, Spur stummschalten, Tempo ändern, zur Songposition springen. Spiele können bereits eine grobe Songsteuerung in Echtzeit synchron mit Ereignissen im Spiel ausführen (in einem anderen Satz von Mustern zur gleichen Musterposition springen oder Kanäle stumm schalten, während der Spielcharakter ein Unbesiegbarkeits-Power-Up verwendet, oder für das Ende von -Level-Kampf gegen den großen Boss).

Viele Tracker-Editoren sind ebenfalls Open Source ( MilkyTracker , OpenMPT) und verfügen über Funktionen zum Transponieren von Teilen des Songs (da es sich um Tastaturkürzel innerhalb der Anwendung handelt) sowie zum Abspielen der Songs (da die Song-Editoren auch die Songs abspielen).

Hoffentlich gibt Ihnen dies einige Ideen. Obwohl es keine traditionelle Programmiersprache ist.

Man kann davon ausgehen, dass Lilypond in dieses Schema passt: Obwohl es sich mehr auf das Setzen von Musik konzentriert, kann es eine MIDI-Darstellung der Partitur ausgeben. Allerdings finde ich, dass es im Grundgebrauch nicht einfach ist, ausdrucksstarke Effekte im Midi-Ausgang zu erzielen. Außerdem ist es nicht echtzeitfähig. Ich erwähne es in erster Linie, weil es Ideen (oder Code) für die Implementierung einer Schnittstelle auf hoher Ebene liefern kann, wenn Sie am Ende Ihr eigenes System entwickeln.

Probieren Sie OpenMusic aus, eine visuelle Programmiersprache für symbolische Musik. Es ist am Anfang etwas beängstigend, aber das Tutorial sollte Sie ziemlich schnell in Gang bringen.

Ich bin mir nicht sicher, ob sie alle Funktionen enthalten, die Sie benötigen. Aber die Java jmusic- Bibliothek ist ziemlich umfangreich, ich denke, das wäre Ihre beste Chance.

Andere Möglichkeiten wären ansonsten JFugue, music21 (Python) oder die visuelle Programmiersprache CSound, von ircam, ebenfalls sehr umfangreich.

Édouard erwähnt OpenMusic, etwas ähnlich, und ein Nachkomme von PatchWork ist PWGL ( http://www2.siba.fi/PWGL/ ). Wenn Sie sich ansehen, was Sie von einer Sprache benötigen, kann es nützlich sein, insbesondere den Teil von PWGL zu "beschränken". Die Lernkurve ist steil (LISP), aber Ihre Zeit lohnt sich. Einige großartige externe Bibliotheken für die Rhythmus-Manipulation. viel Glück

Ich denke, Overtone hat das, wonach Sie suchen, und noch mehr. Es ist eine Clojure-Bibliothek, die als leistungsstarkes Front-End für SuperCollider fungiert. Es kann eine Weile dauern, bis Sie lernen, wie man es benutzt (besonders wenn Sie neu bei Clojure sind), aber sobald Sie es geschafft haben, ist es ziemlich leistungsfähig und flexibel. Sie können z. B. eine Melodie als Folge von Skalenintervallen definieren und diese dann mit einer beliebigen Tonleiter und Folge von Notendauerwerten kombinieren, was Ihnen viel Freiheit gibt, mit Variationen eines Themas herumzuspielen. Es lohnt sich, vorbeizuschauen, auch wenn Sie Clojure nicht kennen!

FWIW, ich arbeite daran, mein eigenes Front-End für Overtone zu entwickeln (ich weiß; es wäre ein Front-End für ein Front-End), mit dem Sie vieles von dem nutzen können, wozu es in der Lage ist, aber mit einer viel einfacheren Syntax mehr zu Musikern/Komponisten als zu Programmierern. Es ist im Moment noch nicht annähernd brauchbar, wird es aber hoffentlich eines Tages in naher Zukunft sein. Bis dahin empfehle ich Overtone wärmstens :)

Klingt, als wollten Sie etwas Ähnliches wie Andrew Sorensen machen, was erstaunlich ist. Er verwendet eine Sprache namens Extempore , ähnlich wie Lisp mit ein bisschen C darin, was es Ihnen ermöglicht, Dinge in Echtzeit zu definieren und zu spielen. Sie können dies in diesem Video in Aktion sehen , in dem er ein Stück mit Live-Codierung vorführt.

Ich nehme an, Sie können etwas darauf aufbauen, nur ein paar mehr Strukturen wie Tonleitern, damit Sie Tonleitern manipulieren können, anstatt die ganze Zeit direkt mit Halbtönen arbeiten zu müssen.
wahrscheinlich könnte man. Aber ich suche etwas, das das bereits hat. Von dem, was ich bisher gesehen habe, kommt music21 dem, was ich suche, am nächsten.

Vor Jahren habe ich mit einer Sprache namens KeyKit herumgespielt. Es stellt Musik als Phrasenobjekte dar und verfügt über Konzepte von Noten, Akkorden sowie eine Menge Funktionen zum Manipulieren und Generieren von Musik sowohl durch Codierung als auch durch Verwendung integrierter, vereinfachter grafischer Controller. Ich denke, dass die Sprache ziemlich einfach zu lernen ist. Ich denke, der Typ, der es erstellt hat, verwendet es immer noch und Sie erhalten vielleicht sogar Antworten von ihm auf Fragen:

http://nosuch.com/keykit/

Abgesehen davon frage ich mich, ob Sie gefunden haben, wonach Sie gesucht haben. Ich bin auch daran interessiert zu wissen, was es sonst noch gibt, das gut für die symbolische / algorithmische Musikkomposition funktioniert.

Was Sie vielleicht suchen, ist Opusmodus . Die Programmiersprache ist Common Lisp. Es kommt mit einer riesigen Bibliothek von Funktionen speziell für das Komponieren sowie einer OMN (Opusmodus Notation), die es ermöglicht, die Ausgabe Ihrer Funktionen sowohl in eine Musikpartitur als auch in den internen oder externen MIDI-Player umzuwandeln. Last but not least verfügt es über Live-Coding-Funktionen und kann im MIDI- und MusicXML-Format exportieren.