Csound
Csound | |
---|---|
Basisdaten | |
Erscheinungsjahr | 1986 |
Aktuelle Version | 6.14.0 (27. Januar 2020[1]) |
Betriebssystem | GNU/Linux, Mac OS X, Windows, Android |
Programmiersprache | C |
Lizenz | LGPL |
deutschsprachig | nein |
csound.github.io |
Csound ist eine Audio-Programmiersprache. Sie wurde in den 1980er Jahren von Barry Vercoe am Electronic Music Studio des MIT, basierend auf den Music-N Systemen von Max Mathews, entwickelt. Die erste Veröffentlichung stammt aus dem Jahre 1986.[2]
Als Audio-Programmiersprache dient Csound sowohl der Synthese (deshalb auch als Software-Synthesizer bezeichnet) als auch der Bearbeitung von Klängen, beispielsweise über Filter, Modulation, Granulierung oder Fourier-Transformation. In den 1980er und 90er Jahren wurde Csound meistens offline zur Generierung von Audio-Dateien eingesetzt; seit den 2000er Jahren ebenso für Live-Musik im Bereich Elektronik verwendet. Die für die Echtzeitanwendung erforderlichen Steuerungssignale werden dabei über MIDI, Open Sound Control (OSC) oder die Computer-Tastatur übermittelt.
Kompilierung und Ausführung
In der Programmiersprache C geschrieben, übernimmt Csound die Abfolge aus Kompilierung und Ausführung. Das in Csound geschriebene Programm wird zunächst kompiliert. Ist die Kompilierung erfolgreich, kann das Programm ausgeführt werden.
Die grundlegenden Einheiten eines Csound-Programms werden „Instrumente“ genannt (bezeichnet durch Zahlen oder Namen). Sind sie einmal kompiliert, können sie jederzeit gestartet oder gestoppt werden.[3] Dies geschieht traditionell durch eine Anweisungsliste („score“ = Partitur), kann aber genauso gut in Echtzeit geschehen (über MIDI, OSC, Tastatur), oder durch eine Generierung innerhalb des Programms selbst.
Beispiele
Das folgende Csound-Instrument erzeugt einen Sinuston von 415 Hertz mit −12 dB und schreibt ihn auf den Output:
instr Sinus ; Beginn einer Instrumenten-Definition (Schlüsselwort 'instr')
aSinus poscil ampdbfs(-12), 415 ; Oszillator 'poscil' mit Argumenten rechts und Ergebnis links
out aSinus ; die Variable 'aSinus' wird als Audio-Signal herausgegeben
endin ; Ende der Instrumenten-Definition (Schlüsselwort 'endin')
Statt dieser traditionellen Schreibweise kann seit Csound 6 auch (ähnlich wie in Python und anderen Sprachen) funktional geschrieben werden:
instr Sinus
out(poscil(ampdbfs(-12), 415))
endin
Zum Aufruf dieses Instruments verwendet man meist eine XML-ähnliche Datei, die aus drei Abschnitten besteht:
- den Optionen <CsOptions>, die beispielsweise angeben, ob ein Klang in Echtzeit gewünscht ist oder eine Audio-Datei geschrieben werden soll
- den Instrumenten <CsInstruments>, also dem eigentlichen Programmtext
- der Partitur <CsScore>, also dem Aufruf von Instanzen der definierten Instrumente.
Die folgende Datei schreibt den Output in Echtzeit (Option '-o dac') auf die Audiokarte und ruft das Instrument „Sinus“ zweimal:
<CsoundSynthesizer>
<CsOptions>
; Getestet mit: Csound version 6.07 (double samples) Mar 5 2016 unter Debian Linux
-o dac ; Output auf den Digital-to-Analog-Converter schreiben
</CsOptions>
<CsInstruments>
sr = 44100 ; Samplerate 44100 Hz (Signalrate für die Ausgabe)
ksmps = 32 ; Anzahl von Samples in einem Audio-Array (Blockgröße)
nchnls = 1 ; Anzahl der Ausgabekanäle (1 bedeutet Mono, 2 Stereo)
instr Sinus
out(poscil(ampdbfs(-12), 415))
endin
</CsInstruments>
<CsScore>
i "Sinus" 0 2 ; Instrument "Sinus" wird mit Startzeit 0 und Dauer 2 (Sekunden) gerufen
i "Sinus" 3 1 ; Instrument "Sinus" wird mit Startzeit 3 und Dauer 1 gerufen
</CsScore>
</CsoundSynthesizer>
Will man stattdessen dieses Instrument durch ein MIDI-Keyboard aktivieren, wird der Score freigelassen, so dass Csound nach der Kompilierung läuft und auf Echtzeitereignisse (Real-Time Events) wartet. Der folgende Code bestimmt die Amplitude und Frequenz des Csound-Instruments aus der Anschlagstärke (Velocity) und Tasten-Nummer des MIDI-Keyboards. Außerdem wird eine Hüllkurve eingefügt, so dass der Ton am Anfang und Ende keine Artefakte (Klicks) erzeugt:
<CsoundSynthesizer>
<CsOptions>
-o dac ; Live Audio
-M a ; alle MIDI-Geräte benutzen / lesen
--midi-velocity-amp=4 ; Umformung der Velocity in Amplitude und Übergabe als Parameter 4 (p4) an das Instrument
--midi-key-cps=5 ; Umformung der Tasten-Nummer (MIDI Key) in Frequenz und Übergabe als Parameter 5 (p5)
</CsOptions>
<CsInstruments>
instr Sinus
aSinus = poscil(p4, p5) ; Anwendung der MIDI-Werte
out(linenr(aSinus,.1,.5,.01)) ; Hüllkurve mit 0.1 Sekunden Einblende und 0.5 Sekunden Ausblende
endin
</CsInstruments>
<CsScore>
</CsScore>
</CsoundSynthesizer>
Auch aus einem Csound-Instrument selbst können Echtzeit-Ereignissen generiert werden. Im folgenden Beispiel ruft jede aufgerufene Instanz eine neue Instanz des Instruments „Sinus“ auf, so dass sich eine endlose Kette ergibt. Durch die selbständige Generierung von Start und Dauer ergeben sich teils kleine Überlagerungen, teils Pausen.
<CsoundSynthesizer>
<CsOptions>
-o dac
</CsOptions>
<CsInstruments>
seed 0 ; Zufallszahlen werden bei jedem Durchlauf neu generiert
instr Sinus
aSinus = poscil(ampdbfs(random:i(-30,-6)), cpsoct(random:i(8,10))) ; Lautstärken -30..-6 dB, Tonhöhen Oktave 8..10
out(linen(aSinus,p3/10,p3,p3/2)) ; Ton wird mit Hüllkurve herausgegeben
schedule("Sinus",random:i(1,3),random:i(1,5)) ; neue Instanz wird gerufen (Start 1..3, Dauer 1..5 Sekunden)
endin
schedule("Sinus",0,3) ; erster Aufruf des Instruments, danach Selbstgenerierung
</CsInstruments>
</CsoundSynthesizer>
Frontends
Um Csound-Code zu schreiben, diesen zu kompilieren, eine Instanz von Csound aufzurufen und Echtzeitereignisse zu verwalten, sind heute verschiedene Frontends verfügbar. Klassisch ist dabei der Aufruf von Csound auf der Kommandozeile. Wird etwa das letzte Beispiel als Nur-Text-Datei unter dem Namen „endlos.csd“ gespeichert, so kann man diese unter Linux, Mac oder Windows in einem Terminal so ausführen:
csound endlos.csd
Daneben existieren Integrierte Entwicklungsumgebungen, die Syntax-Highlighting und graphische Benutzeroberflächen bieten. Am gebräuchlichsten ist derzeit CsoundQt,[4] aber auch Cabbage[5] und Blue[6] zeigen eigene Umgebungen für spezifische Ausrichtungen. Für Android wird Csound mit einer schlanken GUI und Optionen für die Integration von HTML5-Widgets angeboten. Für iOS existieren verschiedene Apps, die Csound verwenden, oder das Abspielen von Csound-Programmen ermöglichen.[7]
Die flexibelste Einbindung von Csound bietet die API. Dabei wird die Csound Engine (im Kern eine Audio-Bibliothek) über eine andere Programmiersprache gerufen und gesteuert. Es gibt Anbindungen für C, C++, Python, Java (einschließlich Scala und Clojure), JavaScript, C#, Common Lisp und andere.[8]
Weblinks
- csound.github.io – offizielle Community-Website mit weiterführenden Links zu Download, Dokumentation, Fontends usw.
- CsoundQt – in Qt entwickeltes grafisches Frontend
- Richard Boulanger: Introduction to Sound Design in Csound. The Csound Book, Chapter 1 (englisch)
- Peter Kiethe: Was ist Csound. In: ZeM, Heft Nr. 23, Frühjahr 2000, S. 4 ff. (Zentrum für Elektronische Musik e. V.)
- csconf2015 – Videos von der 3. Internationalen Csound Konferenz in St. Petersburg, 2015
- Csound-Projekt auf SourceForge.net mit Download-Dateien
- Cabbage – auf Generierung von VST Plugins ausgerichtete grafische Entwicklungsumgebung
- Michael Gogins » Csound Downloads – PDF-Tutorials zu CSound und Algorithmischer Komposition mit CSound und der Erweiterung CsoundAC Python
- Jens Groh: Was ist Csound? Einführung im forum experimentelle musik und computer
- Csound: A C-Based Audio Programming Language – alte Community-Seite mit FAQ, Handbüchern, Programmierbeispielen und Zusatzprogrammen; derzeit nicht mehr gepflegt
- en.flossmanuals.net – Csound in der Sammlung FLOSS Manuals
- csconf2011 – Videos von der 1. Internationalen Csound Konferenz in Hannover, 2011
- The Csound Tutorials. Einsteigerseminar, startet mit A Beginning Tutorial von Barry Vercoe dem Csound-Erfinder
- Richard Boulanger: the csound TOOTorials (englisch)
- Blue – javabasierte grafische Entwicklungs- und Kompositionsumgebung
Einzelnachweise
- ↑ Csound 6.14.0 Csound Community
- ↑ Richard Boulanger: The Csound Book. MIT Press, 2000, S. xxix.
- ↑ Auch die Re-Kompilierung eines Instruments bei laufendem Csound ist seit Csound 6 möglich („Live-Coding“)
- ↑ CsoundQt. Abgerufen am 1. Oktober 2020.
- ↑ Home | Cabbage Audio. Abgerufen am 1. Oktober 2020.
- ↑ blue - a music composition environment for Csound. Abgerufen am 1. Oktober 2020.
- ↑ Applications of Csound | Csound Community. Abgerufen am 1. Oktober 2020.
- ↑ Csound: Main Page. Abgerufen am 1. Oktober 2020.