myToys.de - Die Kinderwelt im Internet

Copyright © by Nils Kay und Peter Heeren. All rights reserved.

http://www.peter-heeren.de

 

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
Installation
Idee
Einflußnahme
Ein Beispiel für die Funktion der Felder
orc und sco
in Planung
Recht

Tonbeispiel

 

Runterholen

jcself.zip

(jcselfalt.zip)

Csound

 

Installation

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ß.


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.

(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.)

wieder hoch

Idee

Dieses Programm wird zur Erzeugung einer orchestra- und score-Datei für Csound gebraucht.
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.

Die Idee des Programms ist, daß das Auftreten einer Tonhöhe die Wahrscheinlichkeit des Auftretens der folgenden Tonhöhen verändert:
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.

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.
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.

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 .
Dieser hinterläßt einen Eintrag in der entsprechenden Tabellenspalte, der blau markiert ist.

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.

wieder hoch

Einflußnahme

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.
Die Tabelle wird nach diesen Werten gerichtet.

In dem Feld 'Seed Frequency' besteht die Möglichkeit, die allererste Frequenz vorzugeben.
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.

In den Feldern 'Minimum Duration' und 'Maximum Duration' wählt der Komponist den Tonlängenbereich.
Die Tonlänge kann nicht kürzer als 0.001 und nicht länger als 9999999999.999 Sekunden dauern.

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.
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.)

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.
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.

 

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.
Wie sehr wird vom Komponisten in dem Feld 'Random Weight' festgelegt.
Die Gewichtung nimmt ab, je weiter der Tabellenwert vom aktuellen ermittelten Wert liegt.

 

Der Wert in dem Feld 'Iterations' gibt die Anzahl der zu generierenden Töne an.
Jcself gibt das Abzählen mit der Ziffer in dem links - oberen Teil der Tabelle an.

wieder hoch  

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:
Angenommen: 120, 117, 113, 117, 110, 104, 117, 125, 110, 103, 109, 112, 119, 101, 100, 111, 114, 105, 116, 123.

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.
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'.

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.:
Zum Beispiel:

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.)

wieder hoch  

orc und sco

Der von JCself produzierte orchestra-file

; orc*************

nchnls = 2

instr 1

idur = p3; Dauer
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)

kenv linseg 0, idur*ifact, 1, idur*(1-2*ifact), 1, idur*ifact, 0
aosc oscili ampdb(iamp)*kenv, ifreq, 1

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.

wieder hoch  

in Planung

In Planung ist ein orchetra file mit einem fof-Generator.

Recht
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.

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.
JCself ist Freeware.

 

Juli 2000 Nils Kay und Peter Heeren