Home | Lehre | Videos | Texte | Vorträge | Software | Person | Impressum, Datenschutzerklärung |
Stand: 2012-12-12
Drei extrem verschiedene Beispiele für musikorientierte Programmiersprachen. Vorab etwas Max Mathews und John Chowning.
Csound von Barry Vercoe (seit 1995) und später John ffitch basiert auf Music 11, ebenfalls von Barry Vercoe, und damit auf der Music-N-Familie von Max Mathews (ab 1957). Man kann sagen, dass die MPEG-4 Structured Audio Orchestra Language (SAOL) von Csound abstammt.
Es gibt seit 2005 ein Csound Journal.
Zunächst für Offline-Betrieb, inzwischen Echtzeit-Audio-Ein- und -Ausgabe und MIDI/OSC-Ein- und Ausgabe, ebenso z.B. als VST-Modul oder als Funktionsblock in Pure Data.
Zunächst Sprache für Kommandozeilen-Compiler, inzwischen mit grafischen Entwicklungsumgebungen, zum Beispiel:
blue (mit grafischer Darstellung der Partituren)
Wesentliche Teile der Sprache (jetzt mit HTML-artigen Tags alles in einer .csd-Datei), Demo in QuteCsound, siehe csd-Dateien:
die ehemalige Orchestra-Datei:
Header Section
Instrument Section
die ehemalige Score-Datei:
Wavetables füllen
Tempo setzen, ggf. Tempoverlauf
Noten-Befehle
Drei Datenraten, je nach Anfangsbuchstabe einer Variablen oder Funktion:
a: Datenrate = Sampling Rate
k: Datenrate = Control Data Rate
i: Datenrate = Befehle im Score
Weitere Funktionen/Eigenschaften, siehe csd-Dateien: Folgenoten, Werte kopieren, Ramping, Physical modeling, logarithmische Angaben von Tonhöhe und Amplitude, Vibrato linear und exponentiell, Reihenfolge in Score egal, Polyphonie.
Steuerbefehle in größeren Zeitintervallen zu berechnen und zu verarbeiten als dem Sampletakt, ist zwar effizient, führt aber zu Artefakten: Regelvorgänge werden stufig. (Klingt bei Lautstärkeänderungen wie ein Reißverschluss, daher Zipper Noise.) Derselbe Effekt droht mit Kontrollsignalen, die nur bei Änderungsbedarf übertragen werden (Events, vgl. MIDI) und/oder mit zu geringer Auflösung des Werts übertragen werden (z.B. 0 bis 127 bei einfachen MIDI-Controllern). Filterung nötig. Am einfachsten mit linearer Interpolation. Daraus resultiert aber immer eine Verzögerung.
Nyquist (Roger Dannenberg, seit 1989) ist eine Musik-/Audio-Programmiersprache im Stil von Lisp, also mit der Schreibweise (+ a b) statt a + b und (f 1 2 3) statt f(1, 2, 3). Seit einigen Jahren gibt es auch eine Entwicklungsumgebung und eine alternative Eingabesprache namens SAL.
Nyquist ist eher zur interaktiven Eingabe von Befehlen gedacht, nicht zum Compilieren und nicht für Echtzeitanwendungen.
Wesentlicher Fundort: Plug-ins für Audacity. Ein paar Blicke in den Code der Plug-ins dort.
Beispiele am Nyquist-Prompt von Audacity:
(mult s 0.5)
(mult s (pwl 0.1 1.0 0.2 0.1 0.5))
(lp s (pwl 0.2 2000.0 0.4 1000.0 1.0))
ChucK (Ge Wang, seit 2003) ist eine Sprache für Live-Performances (MIDI, OSC). Wesentliche Kennzeichen:
Live-Programmierung
Nebenläufigkeit: parallele Aktionen („Shreds“ statt „Threads“) starten („to spork a shred“ statt „to fork a thread“) und stoppen; diese können auch miteinander wechselwirken.
Timing komplett in der Hand der Programmierers, keine Audio- und Kontroll-Datenraten
Verdrahtung von Funktionsmodulen ebenso wie Zuweisung von Werten (von links nach rechts!) mit dem „ChucK“-Operator =>
Beispiel siehe .ck-Datei. Diskussion weiterer Beispiele in miniAudicle