Csound oder der Klang der See! Teil 1

Dem Alltag entkommen in einer Oase der Ruhe: Instant-Wohlfühl-Effekt durch Audio-Programmierung.

Was gäbe es zur Erholung Schöneres, als einen Nachmittag am Strand zu verbringen, auf einer fernen Insel irgendwo im Nirgendwo, umringt von türkis-blauem Meer?!

; Was gäbe es zur Erholung Schöneres, als einen Nachmittag am Schreibtisch zu verbringen, irgendwo in der hintersten Ecke des Arbeitsraumes, umringt von Arbeitsmaterial?!

Entspannt im Liegestuhl in der Sonne zurücklehnen,

; Entspannt im Leuchtkegel der LED – Lampe auf dem Schreibtischstuhl zurücklehnen, 

ein gutes Buch dabeihaben, welches man schon seit Ewigkeiten lesen will, aber bisher nie Zeit und Ruhe dafür fand,

; das Tutorial zur Hand nehmen, welches man seit geraumer Zeit durchackern wollte, weil einem doch die Skills zur Audio-Programmierung fehlen,

und die Füße im samtfeinen Sand vergraben,

; und mit den Zehen auf dem Fußboden in den Chips-Krümeln von letzter Nacht rumwühlen, 

während man das Panorama des in der Sonne glitzernden Meeres bewundert.

; während man im Schein des Bildschirms das runde, grün leuchtende Symbol von Csound im Dock anklickt.

Einfach mal die Seele baumeln lassen!

; Einfach mal in der Audio-Programmiersprache Csound programmieren lernen! 

1 Liter Syntax auf Ex!

Um sich auf seiner Erholungsinsel in der einheimischen Sprache verständigen zu können, ist es zunächst empfehlenswert, den Grundwortschatz sowie notwendige Grammatik-Basics zu erlernen.

; Um musikalische Prozesse an seinem Computer besser verstehen zu können, ist es zunächst empfehlenswert, Grundwissen der Audio-Programmierung zu erlernen. 

Wir beginnen dafür zunächst mit der Syntax unserer neuen Fremdsprache. Jedes Gespräch mit Einheimischen ist in drei Sektionen organisiert:

; Jede Kommunikation mit dem Computer über ein Csound – Dokument ist in drei Sektionen organisiert:   

„CsOptions“, „CsInstruments“ und „CsScore“.
In den CsOptions legt man fest, was überhaupt von dem Programm ausgeführt werden soll. Also z.B. ob etwas in Echtzeit in Csound generiert werden, oder ob ein Soundfile geschrieben werden soll, usw..
CsInstruments funktioniert quasi wie die Organisation eines Orchesters:

Nachdem man die Besetzung festgelegt hat,

; Nachdem man definiert hat, wie viele Instrumente mit was für einer Wellenform generiert werden sollen,

schaut man, dass die Arbeitsbedingungen stimmen.

; legt man Rahmendefinitionen fest. 

Beispiel: Man überlegt sich, wie viele Notenpulte gebraucht werden, ob die Lichtbedingungen stimmen oder ob ggf. Pult-Leuchten benötigt werden, ob ausreichend Stühle da sind, usw..

; Beispiel: Sample Rate (sr), Control Rate (kr), Anzahl der Samples in einer Kontrollperiode (ksmps), Anzahl der Kanäle (nchnl) usw.. 

Außerdem legt man Parameter wie Tonhöhe, Dynamik und Klangfarbe fest.

; Außerdem legt man Parameter wie Frequenz, Amplitude und Wellenform fest. 

Die CsScore dient dazu, die in CsInstruments festgelegten Parameter auf der Zeitachse zu organisieren.

; InstrumentN starte bei Zeitpunkt x und spiele x Sekunden lang. 

Diese drei Sektionen werden in Csound in Klammern aus Größer-/Kleiner-Zeichen gesetzt. Möchte man sich zusätzlich noch Notizen machen, die der Computer aber nicht mitbekommen soll, weil es sich dabei nicht um Befehlsinformationen für seine Rechenoperationen handelt, kann man diese auskommentieren. Das bedeutet, man setzt vor so eine Notiz-Zeile ein Semikolon.

; das heißt also so viel wie:  Hier kann ich mir die Programmiersprache in ein für mich verständliches Vokabular übersetzen, damit ich später noch weiß, was das überhaupt zu bedeuten hat. Der Computer soll das aber nicht mitbekommen, da er es als Befehl falsch verstehen könnte. Das ist quasi so, wie wenn man als MusikerIn im Orchester sitzt und der Kollegin an der zweiten Geige mit vorgehaltener Hand ins Ohr tuschelt, damit die erste Geige es nicht hören kann. 

Mit ersten Schritten auf die Sinus-Brandung zu!

Nehmen wir nun ein simples Beispiel: Wir möchten einen Klang generieren. Um dies zu tun, vermerken wir jeweils am Anfang und am Ende des Dokumentes den Hinweis <CsoundSynthesizer>. Alles, was dazwischen steht, kann vom Computer ausgeführt werden. Das sieht dann in Csound – Slang so aus:

<CsoundSynthesizer>    ; Start des Csound – Files
<CsOptions>    ; Konfiguration / Was soll eigentlich gemacht werden?!

-odac </CsOptions>

<CsInstruments>    ; Spiel-Bedingungen, Besetzung und musikalische Parameter festlegen

sr = 44100    ; Die Sample Rate festlegen

instr 1      ;  z.B. die erste Geige des Orchesters
aSin      poscil      0.2, 440

out aSin     ; „Liebe erste Geige, spiel bitte die Frequenz 440 Hz.“ Instrument 1 spielt auf der Frequenz 440 Hz einen Sinuston. 

endin

</CsInstruments>

<CsScore>      ;  Parameter-Organisation auf der Zeitachse

i 1 0 1      ; „Liebe erste Geige, beginne in Takt 1 auf dem ersten Schlag und spiele eine Viertelnote in Tempo Viertel = 60.“ ( in Csound-Sprech: Instrument 1, starte bei Zeitpunkt 0 und spiele 1 Sekunde lang)</CsScore>

</CsSynthesizer>      ; Ende des Sound Files. Yay!! Unser erster, in Csound generierter Ton!

Wichtig für die Bestellung an der Strandbar:

Was sollte man für’s Erste sonst noch zur Syntax von Csound wissen? – Es gibt sog. „Opcodes“ und „Variablen“. Opcodes sind sozusagen das Gehirn jedes Instrumentes in Csound. Was sie tun, erklärt sich in der Regel direkt aus ihrem Namen. Beispielsweise würde der Opcode „random“ zufallsgenerierte Zahlen produzieren. Mit einem Opcode kann man u.a. den Klang eines Instrumentes formen.

Möchte man z.B. einen Filter oder Hall auf einen Ton legen, wählt man dafür einen passenden Opcode. Ebenso können mathematische Rechenprozesse damit ausgeführt werden.

; Das ist wie an der Strandbar einen Cocktail mit einer speziellen Note bestellen: „Einmal White Russian mit laktosefreier Milch, bitte!“ heißt in Csound-Sprech: „Einmal „asig“ [= Signal] mit distort [= Verzerrung], bitte!“

Es gibt im Wortschatz von Csound übrigens etwa 1500 dieser Opcodes.

; Viel Freude beim Auswendiglernen! Das hat ein bisschen was von unregelmäßigen Verben in anderen Sprachen… .  

Opcodes arbeiten also so, dass sie einen Input entsprechend der ihnen gegebenen Argumente bearbeiten und dann als Output rausschicken. Die typische Syntax für die meisten Opcodes in Csound lautet:
aOutput opcode input1, input2, input3, ….

; Obacht! Den Output schreibt man immer links vom Opcode, den Input immer rechts. 

Hier noch ein Beispiel:

aSin      poscil      inputN

aSin      poscil      0dbfs/4, 440     ; Eine Sinuswelle mit einer Frequenz von 440 Hz wird mit einer Amplitude von 0dbfs/4 generiert. Gespeichert wird sie als Output in „aSin“.  „aSin“ ist  quasi wie die Tupperdose, in der man sich tropische Früchte aufgeschnitten mit an den Strand nimmt. 0dbfs/4 ist die Dynamik – Anweisung und bedeutet so viel wie ein Viertel von 0 dB als Vollaussteuerung.  Das bedeutet, der Opcode „poscil“ benötigt Informationen zu Amplitude und Frequenz. 

Dann sind da noch die Variablen, von denen es verschiedene Typen gibt, deren Unterschiede z.B. darin bestehen, dass sie zu verschiedenen Zeitpunkten im Rechenprozess ausgelesen werden. Zu jeder Variable muss nun eine Rate deklariert werden. Hier kann man z.B. zwischen i-, a-, k- und p-rate unterscheiden. Die jeweilige Rate muss einer Variable vorangestellt werden. Audio-Variablen („a“) werden zu Beginn jedes Kontrollzyklus ausgelesen, während sog. „Initialization“ – Variablen („i“ und „p“) immer zu Beginn jedes Score-Events gelesen werden.

Viel Spaß nun beim ersten Rumprobieren. Im Zweifelsfall meldet sich der Computer dann schon mit kryptischen Fehlermeldungen ;-)

Das war’s erstmal von Seasound, äh Csound. Teil 2 der Instant-Wohlfühl-Reihe „Csound oder der Klang der See! “ folgt demnächst!

; Dieses Tutorial erhebt übrigens keinerlei Anspruch auf Vollständigkeit. Bestimmte Themenpunkte könnten wesentlich ausführlicher erläutert werden. Dafür empfehle ich die Strandlektüre „CSOUND computing audio since 1986“, FLOSS MANUALS, 2015, LINK: http://write.flossmanuals.net/csound/preface

 

 

Julia Mihály. Foto: © Ela Mergels
Julia Mihály

Julia Mihály definiert sich als composer-performer, sprengt mit Freude alle Schubladen, in die man sie stecken möchte, arbeitet gelegentlich als Radioautorin und engagiert sich im Vorstand der DEGEM.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.