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.
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.
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.
Vielleicht interessieren Sie sich für die Programmiersprache CHucK.
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.
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:
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.
Stefan Hasel
Roland Boumann