Loading AI tools
Programmiersprache Aus Wikipedia, der freien Enzyklopädie
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]
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 |
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.
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.
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:
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>
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]
Seamless Wikipedia browsing. On steroids.
Every time you click a link to Wikipedia, Wiktionary or Wikiquote in your browser's search results, it will show the modern Wikiwand interface.
Wikiwand extension is a five stars, simple, with minimum permission required to keep your browsing private, safe and transparent.