Csound wurde in 80ern des letzten Jahrhunderts von Barry Vercoe am Massachusetts Institute of Technology (MIT) entwickelt. Im Grunde ist Csound ein direkter Nachfahre der ersten Programmiersprache für elektronische Musik von Max Mathews: Music N. Csound ist kostenlos und wird unter der LPGL Lizenz verbreitet. Das System wird von einer Handvoll Entwickler gepflegt und erweitert und außerdem von einer großen Community unterstützt.

Es gibt nur wenige Dinge, die man mit Csound in Bezug auf Audio nicht anstellen kann. Csound kann Audiomaterial offline rendern oder in Echtzeit eingesetzt werden. Es kann mithilfe von MIDI oder OSC gesteuert werden und es gibt eine riesige Sammlung an Tools zur Sound Synthese und zum Verbiegen von Sounds.

CsoundQT – Ein Frontend für Csound (Quelle: csound.com)

Ist Csound schwer zu erlernen? Normalerweise sind grafische Sprachen wie Pure Data, Max/MSP oder auch Reaktor etwas leichter zu lernen, als textbasierte Systeme, wie Csound, Supercollider oder ChucK. Man kann sich nunmal nicht vertippen 😉 Bei grafischen Sprachen programmiert man, ohne dass es sich so anfühlt. Wenn die Projekte aber komplexer werden, dann sind textbasierte Sprachen einfacher zu pflegen, erweitern und debuggen. Es muss halt jeder selbst wissen, ob er lieber Wörter und Sätze schreibt oder Objekte mit virtuellen Kabeln verbindet.

Allerdings ist Csound aus der Familie der textbasierten Audio-Programmiersprachen immer noch die am einfachsten zu Erlernende. Man muss nicht alles mögliche über Objekte und Funktionen wissen. Der Signalfluss in grafischen Sprachen wird hier einfach mit Text beschrieben.

Ein kurzes Beispiel: Um einen 440Hz Oszillator mit einer Amplitude von 0.2 zu erzeugen, muss ich in PD folgendes bauen:

Ein einfacher Oszillator in Pure Data

In Csound würde das Ganze dann folgendermaßen aussehen:

instr 1
    aSign oscils 0.2, 440, 0
    outs aSign, aSign
endin
schedule(1,0,1)

Eine Zeile für den Oszillator mit Amplitude, Frequenz und Phase und eine weitere Zeile für den zweikanaligen Output. Diese Instrumentangaben werden in instr 1 gespeichert. Am Ende wird der Ton dann noch 1 Sekunde lang gespielt (schedule). Das mag vielleicht jetzt noch etwas kryptisch aussehen, ist aber trotzdem schnell geschrieben.

Der Kern von Csound ist eine Audio Engine für die Csound Sprache. Es gibt keine grafischen Elemente, die Engine nimmt nur Befehle in Textform entgegen (beispielsweise aus einer *.csd Datei) und produziert Audio – entweder in Echtzeit oder schreibt es in eine Sounddatei. Heutzutage nutzen Programmierer aber lieber ein Frontend, das ist in allen Programmiersprachen mittlerweile so. Selten wird Code in einem einfachen Texteditor geschrieben und im Terminal ausgeführt … gibt es aber auch noch 😉

Ein Frontend ist eine Anwendung, die einem beim Schreiben des Codes unterstützt (z.B. mit Syntax-Highlighting), sowie beim Ausführen und Debuggen des Codes. Vielfach wird auch das Erstellen einer grafischen Oberfläche unterstützt. Wenn man Csound von der offiziellen Website herunterlädt, bekommt man standardmäßig das Frontend CsoundQT gleich mitgeliefert.

Die Downloadseite von csound.com

CsoundQT beinhaltet alles, was man zum Schreiben seiner Programme benötigt.

CsoundQT (aktuelle Versiom: 0.97)

Um einmal ein kleines Gefühl für CsoundQT zu bekommen, empfiehlt es sich einfach mal oben im Menü unter Beispiele/GettingStarted/Basic/ das HelloWord.csd zu öffnen. Im Grunde unterscheidet es sich nicht besonders von dem Beispiel, dass ich weiter oben angeführt habe. Nur dass hier jetzt haufenweise Kommentare (in grün) im Quellcode vorhanden sind. Diese Kommentare helfen dem Neuling, aber auch dem Profi den Code besser zu verstehen. Jede Zeile, die mit einem Semikolon (;) beginnt wird als Kommentar behandelt und vom Interpreter nicht ausgeführt.

Wenn man nun oben links das Start Icon anklickt wird das Programm ausgeführt und man hört einen nervigen 440 Hz Ton. Funktioniert!

Es ist aber auch ratsam, den Code mal händisch einzugeben und im Terminal selber auszuführen. Dazu nimmt man sich einen Text-Editor seiner Wahl und gibt einfach mal folgenden Code ein:

<CsoundSynthesizer>
    <CsOptions>
        -odac
    </CsOptions>
    <CsInstruments>
        ;Example instrument
        instr 1
            aSin oscils 0dbfs/4, 440, 0
            out aSin
        endin
    </CsInstruments>
    <CsScore>
        i 1 0 1
    </CsScore>
</CsoundSynthesizer>

Diesen Code speichert man auf der Festplatte unter dem Namen helloWorld.csd ab. Ich habe mir hierzu beispielsweise einen Ordner ~/dev/csound angelegt. Dann ruft man das Terminal auf, navigiert in diesen Ordner und führt den Code aus:

csound helloWorld.csd

Man bekommt dann eine ähnliche Ausgabe wie die, die hier oben im Bild zu sehen ist und hört natürlich denselben Ton, den das Beispiel-Programm aus CsoundQT schon erzeugt hat.

Das war es für den Anfang schon. Ich persönlich beschäftige mich immer wieder mit verschiedenen Programmiersprachen aus dem Bereich Audio und habe an dieser Stelle schon etwas zu Pure Data, Supercollider und Max/MSP geschrieben. Csound ist mir erst vor ein paar Wochen über den Weg gelaufen und ich will mich in den nächsten Wochen noch etwas einlesen und dann entscheiden, ob ich mich tiefer damit beschäftige.

Die erste Frage, die einem interessierten Neuling natürlich als durch den Kopf geht ist „Lohnt es sich Csound zu erlernen?“ und „Was kann diese Sprache alles?“. Wie gesagt, ich habe Csound erst vor ein paar Wochen kennengelernt, als in meiner Twitter-Timeline folgender Tweet auftauchte:

Puremagnetik war mir natürlich auch vorher schon ein Begriff, aber mir war nicht klar, dass Micah Frank Prototypen von diversen Plugins in Csound erstellt und diese dann frei über Github in Form von VST– bzw. AU-Plugins zum Download anbietet. Einer dieser Prototypen ist beispielsweise Grainstation C.

Grainstation C

Grainstation C kann in Echtzeit granulare Sounds im Raum verteilen und ist auch noch umsonst. Eigentlich hat Micah Frank das Tool für seine eigenen Performances geschrieben, bietet es jetzt aber zum freien Download für jedermann an. Und ja, das Tool wurde in Csound geschrieben.

Apropos VSTCsound kann in der DAW genutzt werden, genau … in Form eines VST Plugins. Cabbage Audio ist eine IDE für Csound, die die Sprache um Elemente für ein GUI erweitert. Und man kann sein Instrument oder Effekt dann als VST-Plugin exportieren … ein Traum.

Allein die Möglichkeit aus Csound Code ein VST-Plugin zu generieren hat mich überzeugt, mich näher mit Csound zu beschäftigen. Falls man noch mehr Beispiele und Anwendungsmöglichkeiten für Csound sehen will, sollte man diese Unterseite von csound.com besuchen.

Weitere Links:

Csound Reference

Csound Realtime Examples

Csound FLOSS Manuals

Csound Tutorial der Hochschule für Musik Hannover (PDF)

Csound: A Sound and Music Computing System (Amazon)