kramann.info
© Guido Kramann

Login: Passwort:










2 Syntax -- Allgemeines

2 (EN google-translate)

2 (PL google-translate)

  • Die Beschreibung der Komposition erfolgt in einem einfachen Textdokument und kommt mit ASCII-Zeichen aus.
  • Zahlenangaben sind immer positive Integer-Werte oder Null.
  • Variablennamen bestehen aus einem oder maximal zwei Zeichen.
  • Sie dürfen aus dem Zeichenvorrat {a..z,A..Z,0..9} stammen, wobei nur ggf. das zweite Zeichen eine Ziffer sein darf.
  • Die musikalische Umsetzung erfolgt in Echtzeit.
  • Das Dokument wird in schneller Folge immer wieder neu geladen, um Änderungen unmittelbar zu berücksichtigen.
  • Das Dokument wird zu jedem Zeitschritt genau einmal durchlaufen.
  • Konsequenterweise müssen verwendete Variablen in irgendeiner vorangehenden Zeile definiert worden sein.
  • Die Beschreibungssprache ist zeilenbasiert.
  • Jede Zeile bildet eine Einheit mit einer klar definierten Bedeutung.
  • Es gibt sechs Typen von Zeilen-Einträgen in die Beschreibung einer Komposition:
  1. Leerzeilen (werden überlesen)
  2. Zeilen-Kommentare # (werden überlesen)
  3. Pulse !
  4. Instrumente :
  5. Formeln ~
  6. Spieltechnik §

Bei Formeln wird noch unterschieden, ob sie ihr Ergebnis an eine normale Variable geben, oder an ein Instrument. Im letzteren Fall wird am Ende ohne das weiter anzugeben die selektive Division durchgeführt, um eine Tonhöhe zu bestimmen.

Jede in einer Zeile auftauchende Zahl kann auch durch eine Variable parametrisiert werden, wenn diese zuvor definiert wurde.

Syntax -- Die sechs Zeilentypen

1) Leerzeilen werden einfach überlesen.

2) Zeilen-KOMMENTARE #

Zeilen-KOMMENTARE werden am Anfang der betreffenden Zeile mit # eingeleitet.

3) PULSE !

PULSE Zählen von einem Anfangswert t0 in Schritten in Millisekunden dt hoch.

Die Syntax ist: t0 dt ! x

Dabei ist das Ausrufezeichen das Merkmal anhand dessen eine Zeile die einen Puls repräsentiert identifiziert wird. x ist ein beliebiger Variablenname über den der Puls dann an anderer Stelle weiter unten in einer Formel verarbeitet werden kann. Gültige Variablen bestehen aus einem oder zwei Zeichen aus {abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789}

  • Nur das zweite Zeichen darf eine Ziffer sein.
  • Überhaupt hat jeder Zeilenzyp ein besonderes Zeichen als Merkmal.
  • Eine Puls-Zeile besteht immer aus genau 4 durch Leerzeichen voneinander getrennten Elementen.
  • Beispiel für eine Zeile, die einen Puls definiert:
8000 100 ! t
0 8000 ! tm

Code 2-1: Beispiele zu PULSE !

4) INSTRUMENTE

In der Instrumentenzeile wird für jedes mögliche Instrument festgelegt, welche Basiszahl für dieses gültig ist, die Verstärkung und Stereorichtung wird festgelegt, die Transposition, der Tonumfang die Art des Instruments und schließlich der Variablenname, unter dem es weiter unten angesprochen werden kann.

Das Sonderzeichen, aufgrund dessen eine Zeile als Instrumentendefinition erkannt werden kann, ist der Doppelpunkt :

Eine Instrumentenzeile besteht immer genau aus 14 durch Leerzeichen voneinander getrennten Elementen:

p q r s REST FACTOR TRANSPOSITION MIDIMIN MIDIMAX CHANNEL GAINLEFT GAINRIGHT : x


In AOGdogmaWEB sind es nur 11, da hier CHANNEL, GAINLEFT und GAINRIGHT nicht implementiert sind. Das erste Instrument ist dort immer das Xylophon, das zweite das Vibraphon und das dritte das Marimbaphon.


BASISZAHL = 2^p * 3^q * 5^r * 7^s * REST

Vor der Umrechnung einer Frequenz in einen Midiwert, wird diese mit FACTOR multipliziert. Der Wert wird in Hundertsteln angegeben 100 entspricht also Faktor 1. Danach wird noch die TRANSPOSITION in Halbtonschritten ausgeführt. Hier ist 24 die neutrale Position und führt zu keiner Transposition. 12 würde zu einer Transposition um eine Oktave tiefer führen. Der Tonumfang wird durch MIDIMIN und MIDIMAX inklusive festgelegt. Bedingt durch die Software stehen bestimmte Instrumentenklänge und davon mehrere Spielvarianten zur Verfügung. Im Moment sind das Xylophon, Vibraphon und Marimbaphon in jeweils drei Anschlagstärken. CHANNEL==0 heißt, dass das Xylophon angesprochen wird 1==Vibraphon, 2==Marimbaphon. Beispielzeilen zur Definition von Instrumenten:

3 2 1 1 NN 100 19 65 108 0 70 30 : xy
3 2 1 1 NN 100 19 53 89 2 50 50 : ma
3 2 1 1 NN 100 19 45 108 1 15 35 : vb

Code 2-2: Beispiele zu INSTRUMENTE :

  • Es wurden hier Variablennamen gewählt, die das gemeinte Instrument andeuten.
  • NN ist eine zuvor definierte Variable, die hier REST steuert.

5) FORMEL ~

  • Formeln stehen auch immer nur in einer Zeile, können aber beliebig lang sein.
  • Ganz vorne steht der Variablenname eines Pulses oder einer gewöhnlichen Variable.
  • Dann kommen eine Zahl gefolgt von einer Operation. Dieser Wechsel (Zahl Operation Zahl Operation ...) wiederholt sich beliebig oft.
  • Dann folgt das Sonderzeichen Tilde ~ und dahinter die Variable, der das Ergebnis zugewiesen wird.
  • Beispiele für Formeln:
tm /18 %3 ~ WW
tm /24 +12 ~ XX
tm /48 +1 *6 +66 ~ YY

t *PP  %72 /3 +4  ~ vb
t +tm *QQ  %XX ~ ma
t +tm *RR  %XX /2 ~ xy

Code 2-3: Beispiele zu FORMEL ~

Bei den oberen drei Beispielen, wird das Ergebnis der Berechnung in den gewöhnlichen Variablen WW, XX und YY gespeichert. Bei den letzten drei Zeilen wird das Ergebnis jeweils einem Instrument zugewiesen. Letzteres bewirkt, dass das Ergebnis der Formelberechung zunächst als Teiler der zugehörigen Basiszahl für die selektive Division genommen wird. Das dabei erzielte Ergebnis wird das Frequenz interpretiert und noch mit FACTOR multipliziert, in einen Midiwert umgerechnet, transponiert. Schließlich wird geschaut, ob das Ergebnis im geforderten Tonumfang des Instruments liegt. Ist das der Fall erklingt der Ton. Ist das nicht der Fall, so erklingt womöglich ein Ton, der von einer anderen Formel für das Instrument bestimmt wurde. Immer gilt das zuletzt gewonnene Ergebnis, das spielbar ist.


Formeln, die Instrumente steuern können musikalische Phrasen erzeugen und repräsentieren das, was AOG ursprünglich ist. Alle anderen Zeilentypen, dienen dazu, diese Formeln automatisch mit der Zeit zu verändern.


Wie wird eine Formel interpretiert? Dies läßt sich mathematisch sehr kompakt darstellen:


tm /48 +1 *6 +66 ~ YY

entspricht als mathematischer Formel:

YY = (((tm/48)+1)*6)+66

Dabei ist tm eine Zeitfolge, die oben so definiert wurde:
0 8000 ! tm

Das bedeutet:
tm0 = 0ms
tm1 = 8000ms
tm2 = 16000ms
usw.


Code 2-4: Zweiter Fall: Interpretation von Formeln, deren Ergebnis an eine gewöhnliche Variable übertragen wird.

Bei Formeln, die ihr Ergebnis an ein Instrument liefern ist die Auswertung etwas aufwändiger:


t *PP  %72 /3 +4  ~ vb

bedeutet:

Basiszahl B ist laut Definition von vb weiter oben: B=2*2*2*3*3*5*7*NN
Teiler z = (((t*PP)%72)/3)+4

Ergibt sich Null für z, wird dem Instrument kein Ton zugewiesen.
Die nachfolgenden Operationen werden dann nicht ausgeführt.

frequenz f = B // z

Dabei entspricht // einer selektiven Division, die nur 
die Primfaktoren 2,3,5,7 aus B in der menge entfernt, wie sie im Teiler z auftauchen.
Das dies zentral ist, sei hier zum Verständnis eine Implementierung von // gegeben:

f=B;
while(f>=2 && f%2==0 && z>=2 && z%2==0) {f=f/2;z=z/2;}
while(f>=3 && f%3==0 && z>=3 && z%3==0) {f=f/3;z=z/3;}
while(f>=5 && f%5==0 && z>=5 && z%5==0) {f=f/5;z=z/5;}
while(f>=7 && f%7==0 && z>=7 && z%7==0) {f=f/7;z=z/7;}

Danach erfolgt noch:
f = f * FACTOR
midi = frequency2midi(f)
midi = midi + TRANSPOSITION

if(midi>=MIDIMIN && midi<=MIDIMAX)
{
    playTone(midi); ...Spiele den Ton auf dem Instrument vb
}


Code 2-5: Interpretation von Formeln, deren Ergebnis auf ein Instrument übertragen wird.

Erlaubte Operationen sind:


+ Addition
- Subtraktion
* Multiplikation
/ Division (liefert Ergebnis, wenn ohne Rest möglich, sonst Null)
% Modulo, oder Rest-Division, Beispiele: 6%3=0 7%3=1 8%3=2 (liefert Ergebnis, wenn Operand positiv, sonst Null)
| "teilt", bewahrt das Zwischenergebnis, wenn es durch den Operanden ohne Rest teilbar ist, liefert sonst Null. 


Code 2-6: Erlaubte Operationen und deren Bedeutung

6) SPIELTECHNIK §

Die aktuelle Version besitzt drei Instrumente, die jeweils in Samples mit drei Anschlagstärken vorliegen. Indem eine Spieltechnikformel einen Wert von 0,1, oder 2 an ein Instrument schickt, wird bei diesem ein leiser weicher Anschlag bei 0, ein mittlerer Anschlag bei 1, oder ein harter lauter Anschlag bei 2 ausgewählt.

Es können die gleichen Operationen auftreten wie in FORMELN.

Beispiele:

16 -DD /2 +CC /4 %3 § xy
16 -DD /2 +CC /4 %3 § ma
16 -DD /2 +CC /4 %3 § vb

Code 2-7: Beispiele zu SPIELTECHNIK §

  • Die %3 Operation am Ende gewähleistet einen Wertebereich von 0 bis 2.
  • DD und CC sind vordefinierte Variablen (vergl. weiter unten).

Eingeschränkter Sprachumfang der Webanwendung AOGdogmaWEB

  • Um einen leichten Einstieg in AOGdogma zu gewährleisten, wurde eine Webanwendung geschrieben.
  • In deren Textbereich können AOGdogma-Kompositionen hineinkopiert und modifiziert werden.
  • Dieser Textbereich wird von der Software zyklisch neu geladen, so, dass jede Veränderung unmittelbar klanglich umgesetzt wird.

Gegenüber den obigen Ausführungen, ist der Sprachumfang bei AOGdogmaWEB in folgender Weise engeschränkt: SPIELTECHNIK ist nicht implementiert und es sind keine Variablen vordefiniert, insbesondere nicht dt, t0, t1, DD und CC, vergl. weiter unten.

Während AOGdogmaWEB einen schnellen Einstieg in AOGdogma gewährleistet, bietet der Java-Processing-Sketch AOGdogma innerhalb der "Distributed Libraries" von Processing umfangreichere Möglichkeiten: Dort können wird die Performance auf Wunsch animiert. Es können wav-Files direkt erzeugt werden und Noten im Lilypond-Format.

Vordefinierte Variablen

Vordefinierte Variablen sind:


dt Minimale Zeitschrittweise, typisch 10 Millisekunden. D.h. alle 10 Millisekunden wird das Skript ausgewertet. 
   Die Angaben bei PULSE sollten ganzzahliege Vielfache davon sein.

t0 Startzeit in Millisekunden. Dieser Wert wird zusätzlich zu t addiert bei 8000 100 ! t
   Es gilt also, wenn ts die vergangenen Millisekunden seit dem Start sind: t = t0 + 8000 + ts/dt 

t1 Wird ein wav-File gerändert, oder ist die boolsche Variable HAS_AN_END=true (nur Processing), dann 
   endet das Stück zu diesem Zeitpunkt. (Hat keine Bedeutung für AOGdogmaWEB)

DD und CC ergeben sich erst aus dem aktuellen Midiwert, liegen also nicht erst fest, wie die Formeln für
Spieltechnik suggerieren mögen.

DD Maximaler paarweise bestimmter Dissonanzwert der letzten 12 Midiwerte (egal in welcher Stimme) 
   inklusive dem aktuellen Midi-Ereignis. In der Regel ergibt sich ein Wert zwischen 0 und 10.
   Mehr Informationen: Siehe Quelltext der Klasse Gradus in Library ComposingForEveryone

CC Mittlerer Dissonanzwert zwischen dem aktuellen Midiereignis und allen 12 vorangehenden Midiereignissen.
   Drückt aus, wie sehr das neue Ereignis in Konflikt mit den vorangehenden steht.
   Mehr Informationen: Siehe Quelltext der Klasse Gradus in Library ComposingForEveryone


Code 2-8: Vordefinierte Variablen und deren Bedeutung.