Copyright © by Nils Kay und Peter
Heeren. All rights reserved.
JCself
ein Tongenerator für
Csound
nach einer stochastischen Methode.
JCself ist ein Programm zur Erzeugung eines 'orchestra
file' und eines 'score file' im Csound-Format.
Runterladen Tonbeispiel
Um JCself zu starten, ist eine Installation von 'Java
Runtime environment 1.1.8 oder größer notwendig.
Man findet es unter http://java.sun.com/products/jdk/1.1/jre/download-jre-windows.html
für Windows 95/98 und Solaris. weitere Installationsanweisung für Windows:
Das jcself.zip - Archiv wird auf eine Festplatte, am
besten auf die Festplatte 'C', entpackt.
In dem Ordner 'phs' findet man die Datei 'jcself.bat',
die zum Starten des Programms aufgerufen werden muß.
(Achtung! Manche Entpacker produzieren einen
zusätzlichen Ordner 'Jcself'. In diesem Fall muß
der Ordner 'phs' aus dem Ordner 'Jcself' gelegt werden, oder
es muß entsprechend der Pfad in jcself.bat
geändert werden.)
Dieses Programm wird zur Erzeugung einer
orchestra- und score-Datei für Csound
gebraucht. Die Idee des Programms ist, daß das Auftreten einer
Tonhöhe die Wahrscheinlichkeit des Auftretens der
folgenden Tonhöhen verändert: Die Verteilung der Wahrscheinlichkeiten für die
einzelnen Frequenzwerte verändert sich daher im
Verlaufe des Ablaufprozesses des Programms von selbst.
Von der Errechnung des Wertes der Frequenz (in Hertz)
hängt die Dauer, die Lautstärke und die Verteilung
auf ein Lautsprecherpaar ab:
je näher der aktuell errechnete Wert der Frequenz an
dem bis dahin häufigsten Wert der Frequenz liegt, desto
lauter und kürzer klingt der Ton und desto mittiger
klingt er - ein stereophones Lautsprecherpaar vorausgesetzt.
JCself ermittelt die Differenz zwischen dem bislang
häufigsten Wert und dem aktuellen und leitet davon die
Dauer und die Lautstärke ab. JCself zeigt eine eindimensionale Tabelle, deren
Wertebereich , der den Frequenzbereich ('Minimum Frequency'
und Maximum Frequency' (s.u.)) darstellt, vom Komponisten
vorher definiert worden ist (s.u.).
Die Spalten der Tabelle stellen die Frequenzwerte oder
einen Bereich von Frequenzwerten ('Frequency Raster' (s.u.))
dar.
Der aktuelle Wert, den JCself ermittelt, wird in die
Tabelle durch einen roten Strich eingeblendet . Die Höhe des blauen Strichs oder Rechteckes gibt
die Häufigkeit des Vorkommens der Frequenz oder des
Frequenzbereiches wieder.
Die Tabelle wird normalisiert. D.h. immer der
häufigste Wert umspannt die volle Höhe der
Tabelle.
Der Tonbereich wird vom Komponisten im Programm
eingegeben.
In den Feldern 'Minimum Frequency' und 'Maximum
Frequency' wird der Frequenzbereich angegeben. Die Werte der
Frequenzen (im Maß Hertz (Hz)) sind ganzzahlig. In dem Feld 'Seed Frequency' besteht die
Möglichkeit, die allererste Frequenz vorzugeben. In den Feldern 'Minimum Duration' und 'Maximum Duration'
wählt der Komponist den Tonlängenbereich. In den Feldern 'Minimum Velocity' und 'Maximum Velocity'
wird der Lautstärkebereich angegeben.
Durch die Aktivierung des Feldes '12 Temperated Steps'
werden ausschließlich die 12 temperierten Tonstufen
ausgewählt. Durch die Aktivierung des Feldes 'Stereo Effects' wird
eine ev. Verteilung auf zwei Lautsprecher ermöglicht.
Die Wahrscheinlichkeitsverteilung ergibt sich vor
allem aus dem Zusammenspiel von den Feldern 'Population' und
'Amount to select from':
In dem Feld 'Population' bestimmt der dort vom
Komponisten vorher eingegebene Zahlenwert die Anzahl der
zufällig (gleichmäßige
(Pseudo-)Wahrscheinlichkeitsverteilung) von JCself zu
errechnenden Werte.
In dem Feld 'Frequency Raster' bestimmt der Zahlenwert
das Raster der Tabelle, durch das die Werte für die
Berechnung der Wahrscheinlichkeitsverteilung
"zusammengefaßt" werden.
D.h. nicht der Wert der Frequenz, sondern ein
zusammenhängender Bereich von Frequenzwerten wird vom
Programm für die Berechnung der
Wahrscheinlichkeitsverteilung unterschieden, die
Tabellenspalten werden relativ vergrößert.
'Footprint' gibt den Frequenzbereich um den ermittelten
Wert an, dessen Häufigkeitswert ebenfalls erhöht
wird.
Der Wert in dem Feld 'Iterations' gibt die Anzahl der zu
generierenden Töne an. Ein Beispiel für die
Funktion der Felder:
In 'Population' wurde die Ziffer '20' eingegeben. In
'Amount to select from' '5'. 'Random Weight wurde auf '300'
gesetzt. (Ein Wirkung zeigt aber 'Random Weight' nur, wenn
'Footprint' größer als 'Frequency Raster'
eingestellt ist.)
Der Frequenzbereich wurde auf '100-125' definiert, und
sowohl 'Frequency Raster' als auch 'Footprint' auf '1'.
JCself produziert im ersten Schritt 20 zufällige
Werte, die die Frequenzwerte (Hz) darstellen: Jcself zählt die Häufigkeit der Frequenzwerte.
1.
Iterationsschritt
Frequenz (in
Hertz)
Anzahl
Gewicht
100
1
0
101:
1
0
102:
0
0
103:
1
0
104:
1
0
105:
1
0
106:
0
0
107:
0
0
108:
0
0
109:
1
0
110:
2
0
111:
1
0
112:
1
0
113:
1
0
114:
1
0
115:
1
0
116:
1
0
117:
3
0
118:
0
0
119:
0
0
120:
1
0
121:
0
0
122:
0
0
123:
1
0
124:
0
0
125:
1
0
Jcself sortiert im übertragenden Sinn diese Werte
nach ihrem Gewicht. (Bei gleichem Gewicht werden die
Frequenzwerte in der Reihenfolge ihres letzten Eintrages
sortiert.) Zum Beispiel:
117, 117, 117, 110, 110, 102, 123, 103, 104, 105, 109,
etc.
Da 'Amount to select from' auf '5' eingestellt ist,
bleiben nur die Werte
117, 117, 117, 110, 110
übrig. nach dem 1.
Iterationsschritt
Frequenz
Anzahl
Gewicht
100
1
0
101:
1
0
102:
0
0
103:
1
0
104:
1
0
105:
1
0
106:
0
0
107:
0
0
108:
0
0
109:
1
0
110:
2
0
111:
1
0
112:
1
0
113:
1
0
114:
1
0
115:
1
0
116:
1
0
117:
3
300
118:
0
0
119:
0
0
120:
1
0
121:
0
0
122:
0
0
123:
1
0
124:
0
0
125:
1
0
In den nächsten Iteratiationsschritten wird bei
wiederholten Vorkommens dieser Frequenz dieser Betrag
aufaddiert.: 10.
Iterationsschritt
Frequenz
Anzahl
Gewicht
100
1
300
101:
0
0
102:
0
0
103:
0
0
104:
1
0
105:
1
0
106:
0
0
107:
0
0
108:
0
0
109:
1
0
110:
4
900
111:
0
0
112:
1
0
113:
1
0
114:
0
0
115:
1
0
116:
1
0
117:
3
1500
118:
0
0
119:
1
0
120:
1
0
121:
0
300
122:
0
0
123:
1
0
124:
0
0
125:
2
0
(In diesem Fall ist die Frequenz 117 Hz in der
Reihenfolge, die JCself ermittelt, an erster Stelle, obwohl
sie bei diesem Iterationsschritt zufälligerweise
weniger vorkommt, als in diesem Beispiel die Frequenz 110
Hz. Der Grund hierfür liegt in dem größeren
"Gewicht" des Wertes 117.)
Der von JCself produzierte orchestra-file
; orc*************
nchnls = 2
instr 1
idur = p3; Dauer kenv linseg 0, idur*ifact, 1, idur*(1-2*ifact), 1,
idur*ifact, 0 outs aosc*ich1, aosc*ich2
endin
ist ein einfaches Musterbeispiel und kann vom jeweiligen
Komponisten modifiziert werden.
Die Parameter werden im orc-file beschrieben: der vierte
Parameter (p4) entspricht der Frequenz, der fünfte (p5)
der Lautstärke und der sechste (p6) der Verteilung auf
die Lautsprecher.
In Planung ist ein orchetra file mit einem fof-Generator.
Recht Für die Programmspeicher-Dateien und Sequenzdateien
gelten die üblichen Regeln des Urheberrechts, d.h. als
Urheber gilt der Ersteller der Dateien, nicht der
Programmautor - außer die Dateien enthalten
unveränderte oder nur geringfügig geänderte
Werkseinstellungen des Programms selbst.
JCself wurde in Java geschrieben.
Juli 2000 Nils Kay und Peter Heeren
Installation
Idee
Einflußnahme
Ein Beispiel für die
Funktion der Felder
orc und sco
in Planung
Recht
Wenn der Ordner 'phs' nicht auf der Festplatte 'C' liegt,
wird die Datei 'jcself.bat' z.B. mit dem Programm 'Notepad'
oder einem ähnlichen Texteditor geöffnet,
Die Zeile 'set TopUi=c:\PHS\jcself.jar' muß an den
entsprechenden Pfad angepaßt werden.
Nach Zufall und Auswahl (Evolution) werden die Töne
erzeugt.
Die Verteilung der Wahrscheinlichkeiten für die
Frequenzen formatieren sich von selbst, während das
Programm läuft.
das Programm errechnet die Frequenz f eines Tones nach einer
bestimmten Wahrscheinlichkeitsverteilung (s.u.). Die
Wahrscheinlichkeit, daß diese Frequenz f in den
folgenden Tönen wieder auftritt, ist nun
größer als zuvor.
Je häufiger also eine bestimmte Frequenz errechnet
wird, desto größer ist die Wahrscheinlichkeit
ihrer Wiederholung.
Bei der Verteilung auf die Lautsprecher (Panning) wird
außerdem beachtet, ob der aktuelle Wert kleiner
(linkslastig) oder größer (rechtslastig) als der
bislang häufigste ist.
Dieser hinterläßt einen Eintrag in der
entsprechenden Tabellenspalte, der blau markiert ist.
Die Tabelle wird nach diesen Werten gerichtet.
Wenn dieses Feld frei gelassen wird oder wenn in dieses Feld
'0' hineingeschrieben wird, ermittelt das Programm einen
zufälligen Wert nach der unten beschriebenen
Wahrscheinlichkeitsrechnung.
Als vorgegebener Frequenzwert ist nur ein Wert innerhalb des
vom Komponisten in den Feldern 'Minimum Frequency' und
'Maximum Frequency' gewählten Tonbereiches
sinnvoll.
Der Frequenzwert von 'seed' gibt JCself mit einem
grünen Strich in der Tabelle an.
Die Tonlänge kann nicht kürzer als 0.001 und nicht
länger als 9999999999.999 Sekunden dauern.
Dabei sind die Frequenzwerte auf drei Stellen nach dem Komma
genau.
(Der Frequenzbereich muß in den Feldern 'Minimum
Frequency' und 'Maximum Frequency' so eingestellt sein,
daß JCself überhaupt eine der 12 Tonstufen
(Oktavierungen mitgezählt) auswählen kann.)
Von diesen Werten werden die ausgewählt, die bislang am
häufigsten vorgekommen sind.
Die Anzahl dieser Werte wird vom Komponisten im Feld 'Amount
to select from' festgelegt.
Von dieser Menge wird zufällig (gleichmäßige
(Pseudo-)Wahrscheinlichkeitsverteilung) ein Wert genommen,
der dann als Wert der Frequenz im score file (Csound)
geschrieben wird.
JCself speichert diesen Wert und erhöht durch die
Zunahme seiner Häufigkeit die Wahrscheinlichkeit seiner
Wiederholung.
Wie sehr wird vom Komponisten in dem Feld 'Random Weight'
festgelegt.
Die Gewichtung nimmt ab, je weiter der Tabellenwert vom
aktuellen ermittelten Wert liegt.
Jcself gibt das Abzählen mit der Ziffer in dem links -
oberen Teil der Tabelle an.
Angenommen: 120, 117, 113, 117, 110, 104, 117, 125, 110,
103, 109, 112, 119, 101, 100, 111, 114, 105, 116, 123.
Von diesen wird ein Frequenzwert zufällig
ausgewählt und in den 'score file' (Csound)
eingeschrieben.
Dieser Frequenzwert erhält den Betrag, der in 'Random
Weight' definiert wurde, nämlich '300'.
Zum Beispiel:
ifreq = p4; Frequenz
iamp = p5; Lautstärke
ich1 = p6; Kanal1
ich2 = 1-p6; Kanal2
ifact pow .00125/p3, .6; Steigung
ifact = (p3 < .0039686 ? .5 : ifact)
aosc oscili ampdb(iamp)*kenv, ifreq, 1
Die Version JCself 1.06 ist lizenzpflichtig. Kopien
dürfen daher nur zum Zweck der Sicherung erstellt,
keinesfalls aber an Dritte weitergegeben werden. Die Lizenz
umfaßt die uneingeschränkte private Nutzung auf
einem Computer oder einem Netz von bis zu fünf
Computern, sowie die Nutzung bei Klanginstallationen,
Computermusik-Konzerten, Musikproduktionen etc.
JCself ist Freeware.