Volltext

Transcription

Volltext
Entropie als Parameter musikalischer
Komposition
Design und Programmierung einer Software mit dem Ziel
Entropie als musikalischen Parameter nutzen zu können und
Ermitteln der sich ergebenden Möglichkeiten anhand einer
Beispiel-Komposition
Dieter Kleinrath
Betreuer: VProf. Clemens Gadenstätter
September 2007
Inhaltsverzeichnis
Einleitung
2
1.1 Einführung in die Informationstheorie
3
1.2 Kurze Einführung in die objektorientierte Programmierung
8
2. Wahl der Programmiersprache
11
3. Übersicht über den Funktionsumfang der Software
12
3.1 Die Klasse InformationSource
13
3.2 Die Klasse ProbDistrFactory
15
3.3 Die Klasse Math
22
3.4 Zusätzliche Funktionalität der Software
23
4. Probleme die sich aus dem vorgestellten Konzept ergeben
24
4.1 Was ist eigentlich Zufall?
24
4.2 Welcher kompositorische Freiraum bleibt übrig?
26
Literaturverzeichnis
29
Beispielkomposition
30
Zeichenerklärung
31
Skizzenmaterial der Beispielkomposition
33
1
Einleitung
Bei der vorliegenden Arbeit handelt es sich um die Dokumentation und
Präsentation
einer
von
mir
in
der
Programmiersprache
Supercollider
entwickelten Computer-Software. Die Motivation hinter diesem Projekt war es
eine Software zu entwickeln, mit deren Hilfe man Entropie als musikalischen
Parameter berechnen kann, um ihn auf Kompositionen und eventuell auch auf
Analysen übertragen zu können.
In den ersten beiden Kapiteln dieser Arbeit wird eine kurze Einführung in die
Informationstheorie und die objektorientierte Programmierung gegeben. Für ein
vollständiges
Verständnis
der
verwendeten
Formeln
wird
jedoch
ein
Grundwissen in Wahrscheinlichkeitstheorie vorausgesetzt. Bei Kenntnis der
genannten
Themen
können
die
ersten
beiden
Kapitel
dieser
Arbeit
übersprungen werden.
Ich verzichte darauf in dieser Arbeit Quellenverweise anzugeben, da es sich
nicht um eine wissenschaftliche Arbeit im eigentlichen Sinn handelt. Nur
Originalzitate werden als solche gekennzeichnet. Dem Quellenverzeichnis kann
man die für diese Arbeit relevante Literatur entnehmen.
2
1.1 Einführung in die Informationstheorie
Der Begriff "Entropie" wie er im Zusammenhang mit dieser Arbeit verwendet
wird geht auf Claude Elwood Shannon (1916-2001) zurück. 1948 veröffentlichte
Shannon seine Arbeit A Mathematical Theory of Communication und
begründete damit den neuen Wissenschaftszweig der Informationstheorie. Die
Informationstheorie
ist
als
mathematische
Theorie
ein
Teilgebiet
der
Wahrscheinlichkeitstheorie und Statistik und beschäftigt sich mit Begriffen wie
Information,
Entropie,
Informationsübertragung,
Datenkompression
und
Kodierung.
Die Begriffe Nachricht, Information und Signal spielen in der Informationstheorie
eine wesentliche Rolle. Es ist schwierig eine allgemein gültige Definition dieser
Begriffe zu finden, da sich unsere intuitive Vorstellung meist von der
Verwendung dieser Begriffe in der Informationstheorie unterscheidet.1 Laut
André
Neubauer
kann
syntaktischen,
betrachtet
Information
"hinsichtlich
semantischen
werden.
Hierbei
oder
ihrer
statistischen,
pragmatischen
kennzeichnet
die
Aspekte
Statistik
die
wahrscheinlichkeitstheoretischen Eigenschaften von Information und
Informationsquellen. Die Syntax beschreibt die Regeln zur Darstellung
von Information, wie zum Beispiel die grammatikalischen Regeln einer
formalen oder natürlichen Sprache. Die Semantik hingegen bezieht sich
auf den Inhalt und die Bedeutung einer Information, während die
Pragmatik den Wert einer Information beschreibt, den diese für den
Empfänger der Information besitzt."2
Diese unterschiedlichen Definitionen des Begriffs "Information" führen häufig zu
Missverständnissen. Vor allem wenn der Begriff im Sinne der Statistik auf Kunst
angewendet wird, man ihn aber in diesem Zusammenhang intuitiv pragmatisch
versteht.
1
2
Vgl.: André Neubauer, Informationstheorie und Quellencodierung, Eine Einführung für Ingenieure,
Informatiker und Naturwissenschaftler, Wilburgstetten: 2006, S. 1
Ebd.
3
In der Informationstheorie wird Information über die statistischen Eigenschaften
einer Nachricht definiert. Mit Begriffen wie "Informationsgehalt" oder "Entropie"
wird also keine Aussage über den Inhalt, die Bedeutung oder den
künstlerischen Wert einer Nachricht gemacht sondern allein ihre statistischen
Eigenschaften beschrieben.
Definition 1 (Nachricht, Information)
Unter "Nachricht" versteht man eine Zusammenstellung von Zeichen, die
zur Informationsübertragung dient. Dabei ist entscheidend, dass
zwischen Sender und Empfänger eine verabredete Menge von Zeichen
beziehungsweise Symbolen existiert, aus denen sich die übermittelte
Nachricht zusammensetzt.
Definition 2 (Elementarzeichenvorrat)
Der
Begriff
"Elementarzeichenvorrat"
bezeichnet
alle
Zeichen
beziehungsweise Symbole, die eine Nachrichtenquelle aussenden kann.
Ein
Beispiel
für
eine
Nachricht
ist
die
vorliegende
Arbeit.
Ihr
Elementarzeichenvorrat entspricht dem deutschen Alphabet. Weitere Beispiele
für Elementarzeichenvorräte sind das Binäralphabet {0, 1} oder das
Dezimalalphabet {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}. Eine Nachrichtenquelle die Zeichen
aus dem Binäralphabet ausgibt bezeichnet man als Binärquelle.
Das
allgemeine
Modell
einer
Informations-
beziehungsweise
Nachrichtenübertragung wurde von Shannon folgendermaßen beschrieben:
Abbildung 1: Allgemeines Nachrichtenübertragungssystem
4
Im
Zusammenhang
mit
der
hier
vorgestellten
Software
ist
nur
die
Nachrichtenquelle von Bedeutung. Als Nachrichtenquelle bezeichnet man den
Ursprung einer Nachricht. Die Hauptfunktion der Software ist es eine
Nachrichtenquelle zur Verfügung zu stellen, die eine Nachricht mit einer
vorgegebenen Entropie erzeugt. Diese Nachricht kann dann vom Benutzer auf
unterschiedliche Weise weiterverarbeitet und genutzt werden.
Man unterscheidet zwischen gedächtnislosen und gedächtnisbehafteten
Nachrichtenquellen. Bei einer gedächtnislosen Nachrichtenquelle ist die
Wahrscheinlichkeit für die Ausgabe eines Zeichens nicht von dem zuvor
ausgegebenen
Zeichen
abhängig,
während
bei
gedächtnisbehafteten
Nachrichtenquellen die Wahrscheinlichkeit eines Zeichens von den vorherigen
abhängig ist. Ein Beispiel für eine gedächtnislose Nachrichtenquelle ist ein
mehrmaliger
Wurf
eines
idealen
Würfels.
Ein
Beispiel
einer
gedächtnisbehafteten Nachrichtenquelle ist die deutsche Sprache (bzw. ein in
Deutsch
verfasster
Wahrscheinlichkeit
Text).
für
die
–
Bei
der
Ausgabe
deutschen
eines
Zeichens
Sprache
von
ist
dem
die
zuvor
ausgegebenen Zeichen abhängig.
Definition 3 (Informationsgehalt)
In der statistischen Betrachtungsweise der Informationstheorie wird der
Informationsgehalt I(xi) eines Zeichens xi über die Wahrscheinlichkeit des
Auftretens
dieses
Zeichens
in
einer
Nachricht
definiert.
Der
Informationsgehalt I(xi) eines Zeichens xi ist um so größer, je kleiner die
Wahrscheinlichkeit p(xi) für die Ausgabe des Zeichens xi ist.
Aus dieser Definition ergibt sich, dass der Informationsgehalt eine monoton
fallende Funktion der Wahrscheinlichkeit ist. Die Formel für diese Funktion
lautet:
⎛ 1 ⎞
⎟⎟ = − log 2 ( p ( xi )) [bit]
I ( xi ) = log 2 ⎜⎜
p
(
x
)
i ⎠
⎝
5
Ein Beispiel, das den Informationsgehalt eines Zeichens gut veranschaulicht, ist
die deutsche Sprache. Nach dem Buchstaben "q" folgt immer der Buchstabe
"u". Also ist die Wahrscheinlichkeit des Zeichens "u" nach einem "q" gleich 1.
Der Informationsgehalt von "u" ist in diesem Fall gleich 0, da das Zeichen "u"
keinen Kenntniszuwachs in der Nachricht erzeugt. Man sagt: das Zeichen "u" ist
redundant. Das Zeichen "u" ist in der deutschen Sprache auch insgesamt
weitaus häufiger als das Zeichen "q". Wenn man die deutsche Sprache als
gedächtnislose Nachrichtenquelle behandeln würde bedeutet das, dass das
Zeichen "q" im deutschen Alphabet einen größeren Informationsgehalt besitzt
als das Zeichen "u".
In Abbildung 2 sieht man den Funktionsgraphen des Informationsgehalts. Bei
sehr
kleiner
Wahrscheinlichkeit
p(xi)
eines
Zeichens
xi
geht
der
Informationsgehalt I(xi) gegen unendlich. Bei einer Wahrscheinlichkeit von
p(xi) = 1 ist der Informationsgehalt I(xi) = 0.
Abbildung 2: Funktionsgraph des Informationsgehalts
Mit Hilfe des Informationsgehalts kann also jedem Zeichen einer Nachricht ein
zugehöriges Maß an Information zugeordnet werden. Um zu einem Maß für die
Information einer ganzen Nachricht zu gelangen, berechnet man den mittleren
Informationsgehalt der Nachricht. Dieser mittlere Informationsgehalt wird als
Entropie bezeichnet.
6
Die Entropie H(X) einer Nachricht beziehungsweise Zeichenkette X berechnet
sich demnach nach folgender Formel:
M
H ( X ) = −∑ p( xi ) ⋅ log 2 ( p( xi )) [bit]
i =1
Damit ist die Entropie ein Maß für die Zufälligkeit einer Information. Bei einem
idealen Münzwurf, bei dem jede Seite gleich wahrscheinlich ist, beträgt die
Entropie 1. Ein solcher Münzwurf entspricht einer Binärquelle mit dem
Elementarzeichenvorrat
{0,
1}
und
ist
ein
wichtiger
Spezialfall
der
shannonschen Entropie. Bei Binärquellen bewegt sich die Entropie immer
zwischen 0 und 1. Eine Entropie H(X) = 0 würde bedeuten, dass eines der
Zeichen {0, 1} mit einer Wahrscheinlichkeit p(xi) = 1 und das andere
dementsprechend mit einer Wahrscheinlichkeit p(xi) = 0 in der Nachricht
vorkommt. Eine Entropie von H(X) = 1 bedeutet, dass beide Zeichen mit der
gleichen Wahrscheinlichkeit p(xi) = 0,5 in der Nachricht vorkommen.
Hier ein Beispiel einer Binärnachricht mit einer Entropie H(X) = 0:
11111111111111111111111111
Hier einige Beispiele für Binärnachrichten mit einer Entropie H(X) = 1
1) 0010101100010111100100110110
2) 0101010101010101010101010101
3) 0011001100110011001100110011
Wie man anhand der letzten drei Beispiele erkennt, entspricht Zufälligkeit im
Bezug auf die shannonsche Entropie nicht unbedingt unserer intuitiven
Vorstellung von Zufall. Die Berechnung der Entropie nach Shannon macht
zwischen diesen drei Beispielen keinen Unterschied und ergibt immer 1, da die
Wahrscheinlichkeit einer 1 oder 0 in jedem der Beispiele 0,5 ist. Intuitiv würde
mann aber den Beispielen 2 und 3 eher eine Entropie von 0 geben, da sie uns
ganz und gar nicht zufällig erscheinen. Auf diese Problematik werde ich später
noch näher eingehen.
7
Bei Quellen mit einem größeren Elementarzeichenvorrat ist die maximale
Entropie größer als eins. Zum Beispiel ist die Entropie der deutschen Sprache
näherungsweise 4,0626. Um Verwechslungen vorzubeugen und um die
Entropie unterschiedlicher Nachrichtenquellen einfacher vergleichbar zu
machen, werde ich mich in dieser Arbeit allerdings immer auf die Binärentropie
beziehen und im Falle von Quellen mit größerem Elementarzeichenvorrat die
Entropie auf einen Ergebnisbereich zwischen 0 und 1 umrechnen. Das
bedeutet, dass eine Entropie von 1 immer der maximal möglichen Entropie und
damit dem maximalen Zufall in einer Nachricht entspricht.
1.2 Kurze Einführung in die objektorientierte Programmierung
Die Objektorientierung ist ein Programmierparadigma, das bei den sogenannten
objektorientierten Programmiersprachen (z.B. C++ oder Java) zum Einsatz
kommt. Bei diesen Programmiersprachen werden zur Laufzeit nur Objekte, die
den zu verarbeitenden Daten entsprechen, in den Speicher geladen. Objekte
können Eigenschaften (auch Parameter genannt) und Methoden (auch
Funktionen genannt) besitzen. Eigenschaften repräsentieren die Datensätze
der
Objekte,
also
Variablen
und
Konstanten.
Methoden
entsprechen
mathematischen Funktionen die solche Datensätze weiterverarbeiten und
denen
auch
Eigenschaften
beziehungsweise
Werte
zur
Verarbeitung
übergeben werden können.
Die Eigenschaften und Methoden eines Objekts werden in einer sogenannten
Klasse definiert. Eine Klasse ist sozusagen ein Prototyp eines Objekts von dem
man beliebig viele weitere Objekte erzeugen kann. Klassen können von
anderen Klassen deren Eigenschaften und Methoden erben.
8
Ein
Pseudocode
einer
Klassendefinition
in
einer
objektorientierten
Programmiersprache könnte so aussehen:
Klassendefinition: Note {
Eigenschaft: Tonhöhe;
Eigenschaft: Lautstärke;
Methode: Transponiere(Eigenschaft: Intervall);
}
Diese Klasse kann dann im weiteren Programmverlauf dazu genutzt werden,
um Objekte zu erzeugen. Um auf die Eigenschaften und Methoden eines
Objektes zuzugreifen, wird üblicherweise ein Punkt hinter den Objektnamen
geschrieben. Z.B.: "Objekt.Eigenschaft" oder "Objekt.Methode()". Die runden
Klammern hinter der Methode zeigen an, dass man einer Methode auch
Eigenschaften übergeben kann, die diese Methode dann verarbeitet.
Hier ein Pseudocode für das Erstellen von Objekten von der oben definierten
Klasse:
Code {
Erzeuge Note: Note1;
Note1.Tonhöhe = c1;
Erzeuge Note: Note2;
Note2.Tonhöhe = d1;
Erzeuge Note: Note3;
Note3.Tonhöhe = e1;
Erzeuge Note: Note4;
Note4.Tonhöhe = f1;
Erzeuge Note: Note5;
Note5.Tonhöhe = g1;
Note3.Transponiere(KleineTerz);
Spiele: Note1, Note2, Note3, Note4, Note5;
}
9
Die Anweisung "Spiele" in diesem Pseudocode könnte zum Beispiel folgende
Ausgabe am Bildschirm erzeugen:
c1, d1, g1, f1, g1
Zweck dieser sehr rudimentären Einführung war es die Bedeutung der Begriffe
"Klasse", "Objekt", "Methode" und "Eigenschaft" zu vermitteln, da ich diese bei
der Vorstellung dieser Software öfters verwende. Ich werde allerdings darauf
verzichten in dieser Arbeit auf die Algorithmen einzugehen die verwendet
wurden. So ist ein genaueres Verständnis von Programmiersprachen nicht
notwendig.
10
2. Wahl der Programmiersprache
Die Anforderungen die ich vor der Entwicklung an die Software stellte waren
Folgende:
1. Kompatibel
zu
einer
vorhandenen
Software
für
digitale
Soundverarbeitung
2. Einfache Erweiterbarkeit
3. Im Liveeinsatz verwendbar (real time)
4. open source
Diese
Anforderungen
führten
dazu,
dass
Supercollider
(SC)
die
Programmiersprache meiner Wahl für dieses Projekt wurde. Die Beschreibung
von SC aus der SC-FAQ lautet:
"SuperCollider is an environment and programming language for real
time audio synthesis. You can write programs to generate or process
sound in real time or non real time."
Hinzu kommt, dass es sich bei SC um ein Open-Source-Projekt handelt. Das
bedeutet, dass der Quellcode frei verfügbar ist und man so SC einfach an die
eigenen Bedürfnisse anpassen kann.
Supercollider ist eine objektorientierte Programmiersprache, die sowohl als
kompilierte als auch interpretierte Sprache genutzt werden kann. Das bedeutet,
dass jedes Mal, wenn SC neu gestartet wird, die in SC geschriebenen Klassen
vom Compiler neu kompiliert und in den Speicher geladen werden. Danach
kann man aber auf diese Klassen in Echtzeit zugreifen und während der
Laufzeit neue Objekte von ihnen erstellen – das ist der interpretierte Anteil der
Sprache SC. Es ist allerdings nicht möglich neue Klassen während der Laufzeit
zu erstellen. Deshalb ist es notwendig Software für Echtzeit-Anwendung in SC
so zu designen, dass es möglich ist neue Funktionalität ohne dem Erzeugen
neuer Klassen hinzuzufügen.
11
3. Übersicht über den Funktionsumfang der Software
Die von mir entwickelte Software besteht hauptsächlich aus 3 Klassen, welche
die Funktionalität bereitstellen und miteinander interagieren.
1. Die Klasse InformationSource dient, wie ihr Name schon andeutet, als
Nachrichtenquelle (nach Shannon). Ihre Aufgabe besteht darin Elemente
aus einem Elementarzeichenvorrat mit einer einstellbaren Entropie
auszuwählen und auszugeben bzw. dem Benutzer zur Verfügung zu
stellen. Das Ergebnis ist eine Nachricht die aus Zeichen des
Elementarzeichenvorrats besteht und eine vordefinierte Entropie besitzt.
Die Klasse InformationSource nutzt die Klasse ProbDistrFactory um die
eigentlichen Berechnungen durchzuführen.
2. Die Klasse ProbDistrFactory (ProbabilityDistributionFactory) ermöglicht
es dem Benutzer aus einer Reihe von Wahrscheinlichkeitsverteilungen
auszuwählen und auch neue Wahrscheinlichkeitsverteilungen zur
Software hinzuzufügen. Sie ist eine unabhängige Klasse die auch ohne
die Klasse InformationSource verwendet werden kann.
3. Die Klasse Math ist eine unterstützende Klasse, die verschiedene
mathematische Berechnungen ermöglicht die bisher in SC noch nicht
implementiert waren.
Zusätzlich zu diesen Klassen habe ich zwei neue UGens3 für SC geschrieben,
die hauptsächlich dazu dienen einige Möglichkeiten der Software auszutesten
und zu demonstrieren. Diese Synths wurden nicht in SC geschrieben sondern
in C++ und müssen als zusätzliche Module in SC geladen werden.
3
"UGen" steht in SC für "Unit-Generator" und ist ein in SC geladenes Modul welches eine
Soundberechnung ermöglicht. Es handelt sich dabei um eine in C++ programmierte DLL (Dynamic
Link Library). Alle Soundberechnungen in SC werden mit Hilfe von Ugens realisiert. Zum Beispiel
sind Impulsgeneratoren, Sinusoszillatoren aber auch die Berechnung von Fourier-Transformationen als
UGens implementiert.
12
3.1 Die Klasse InformationSource
Um mit der Software eine Nachricht zu erzeugen, muss während der Laufzeit
von SC ein Objekt der Klasse InformationSource vom Benutzer erzeugt werden.
Diese Klasse besitzt zwei Eigenschaften (Parameter) die vom Benutzer definiert
bzw. eingestellt werden müssen.
Die
erste
Eigenschaft,
die
der
Benutzer
definieren
muss,
ist
der
Elementarzeichenvorrat. Dabei handelt es sich um eine Menge von beliebigen
SC-Objekten, die als Alphabet für die Nachrichtenquelle dienen. Möchte man
zum Beispiel eine binäre Nachricht erzeugen, dann übergibt man dem erstellten
InformationSource-Objekt den Elementarzeichenvorrat {0, 1}. In SC-Code
könnte das so aussehen:
~src = InformationSource.new([0, 1]);
Die auf die Klasse InformationSource aufgerufene Methode "new()" ist eine
spezielle Methode in SC, die ein neues Objekt der Klasse InformationSource
erzeugt. Dieser Methode wird bei ihrem Aufruf die Menge [0, 1] übergeben.
Dies ist der Elementarzeichenvorrat aus dem das erstellte Objekt "~src" später
die Nachrichten erzeugt. Der Befehl "~src =" ist in diesem Code eine einfache
Zuweisung, die es ermöglicht später auf das erstellte Objekt zuzugreifen. Bei
diesem Beispiel besteht der Elementarzeichenvorrat aus Zahlen (in SC IntegerObjekte). Es ist jedoch möglich jedes beliebige SC-Objekt wie z.B. selbst
definierte
Klänge,
Dateien,
Buchstaben,
usw.
zu
verwenden.
Ein
InformationSource-Objekt mit dem Elementarzeichenvorrat der deutschen
Sprache (nur Kleinbuchstaben) würde man so erstellen:
~src = InformationSource.new(["a", "b", "c", "d", "e", "f",
"g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r",
"s", "t", "u", "v", "w", "x", "y", "z"]);
13
Die zweite und zugleich wichtigste Eigenschaft, die der Benutzer einstellen
kann, ist die Entropie mit der die Nachricht vom InformationSource-Objekt
ausgegeben werden soll. Eine Entropie von 0 bedeutet bei einer Binärquelle,
dass nur das erste Objekt des Elementarzeichenvorrats ausgegeben wird. Eine
Entropie von 1 bedeutet, dass beide Zeichen mit einer Wahrscheinlichkeit von
0,5 ausgegeben werden – also zufällig. Die Entropie lässt sich stufenlos von 0-1
einstellen. Dadurch kann der Benutzer eine Nachricht in ihrer Entropie
verändern oder einen fließenden Übergang zwischen Chaos und Ordnung
herstellen. Hier einige Beispiele einer Binärnachricht mit unterschiedlicher
Entropie, die vom Programm berechnet wurden:
Entropie = 0
→ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1
Entropie = 0.2
→ 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1
Entropie = 0.6
→ 1, 0, 1, 1, 1, 0, 1, 1, 0, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1
Entropie = 1
→ 0, 0, 0, 1, 1, 0, 1, 0, 1, 0, 0, 0, 1, 1, 1, 1, 0, 0, 1, 1
Die
letzte
Eigenschaft,
die
der
Benutzer
definieren
muss,
ist
die
Wahrscheinlichkeitsverteilung die von der Software verwendet werden soll um
eine Nachricht in der gewünschten Entropie zu berechnen. Bei Binärquellen
benötigt man keine vorgegebene Wahrscheinlichkeitsverteilung, da ohnehin nur
zwei Elemente im Elementarzeichenvorrat vorhanden sind. Damit lässt sich die
Wahrscheinlichkeitsverteilung der Elemente anhand einer vorgegebenen
Entropie exakt berechnen (es handelt sich um eine Gleichung mit zwei
Unbekannten:
der
Wahrscheinlichkeit
Wahrscheinlichkeit
des
zweiten
des
ersten
Elements).
Elements
Wenn
und
allerdings
der
der
Elementarzeichenvorrat größer ist, gibt es dem entsprechend auch mehr
Wahrscheinlichkeitsverteilungen über diese Elemente, die eine Nachricht mit
derselben Entropie erzeugen. Deshalb kann man anhand einer gegebenen
14
Entropie
in
diesem
Fall
nicht
exakt
berechnen
tragen,
wird
wie
die
Wahrscheinlichkeitsverteilung aussehen soll.
Um
diesem
Problem
Rechnung
zu
die
gewünschte
Wahrscheinlichkeitsverteilung erst vom Benutzer vorgegeben und dann anhand
dieser
Verteilung
die
Entropie
näherungsweise
berechnet.
Die
Wahrscheinlichkeitsverteilung ist dabei eine mathematische Funktion, deren
Input solange verändert wird, bis der Output näherungsweise der vorgegebenen
Entropie entspricht. Wie genau diese Berechnung sein soll, kann vom Benutzer
festgelegt werden und beeinflusst, abhängig von der Prozessorleistung, die
Dauer der Berechnung.
Die
Funktionen
der
Wahrscheinlichkeitsverteilung
werden
dem
InformationSource-Objekt wieder als SC-Objekte übergeben und in dem Objekt
als Parameter gespeichert. Zu diesem Zweck kann der Benutzer die Klasse
ProbDistrFactory nutzen, die bereits viele Wahrscheinlichkeitsverteilungen
vordefiniert hat und damit das Arbeiten mit der Klasse InformationSource
erleichtert.
3.2 Die Klasse ProbDistrFactory
Diese Klasse erfüllt zwei Aufgaben. Einerseits kann sie als eigenständige
Klasse verwendet werden, um einer gegebenen Menge von Elementen eine
bestimmte Wahrscheinlichkeitsverteilung zuzuordnen. Damit eignet sie sich gut
als
Hilfsklasse
für
unterschiedliche
statistische
Kompositionstechniken.
Andererseits kann man sie verwenden, um einem InformationSource-Objekt
eine Wahrscheinlichkeitsverteilung zuzuordnen, mit der die Entropie der
ausgegebenen Nachricht berechnet wird.
15
Um diese Aufgaben zu erfüllen, enthält die Klasse ProbDistrFactory
(Probability-Distribution-Factory)
bereits
einige
vordefinierte
Verteilungsfunktionen, die direkt genutzt werden können. Es ist aber auch
möglich neue Funktionen während der Laufzeit von SC hinzuzufügen, da die
Verteilungsfunktionen
implementiert
sind,
nicht
sondern
als
Methoden
als
der
Klasse
Eigenschaften
ProbDistrFactory
(SC-Objekte
vom
Typ
"Function"). Diese Designentscheidung bietet mehrere Vorteile.
1. Der Benutzer kann selbst neue Funktionen während der Laufzeit von SC
zur ProbDistrFactory hinzufügen.
2. Die Klasse InformationSource ist nicht direkt von der Klasse
ProbDistrFactory
abhängig
Verteilungsfunktionen
–
entwerfen
man
könnte
auch
eigene
diese
der
Klasse
und
InformationSource übergeben.
3. Es ist möglich Funktionen von der Klasse ProbDistrFactory als SCObjekte zu erhalten und diese Funktionen dann anderen SC-Klassen als
Eigenschaften zu übergeben. Damit ist die Klasse ProbDistrFactory sehr
einfach in andere Softwareprojekte integrierbar.
4. Die Software kann dadurch später sehr einfach erweitert werden.
Es
folgt
ein
Überblick
über
einige
der
bereits
implementierten
Verteilungsfunktionen. Die Kurvengrafiken wurden in SC erstellt und zeigen
einige der möglichen Verteilungskurven für die jeweilige Formel. Die Formeln
wurden von der Wikipedia entlehnt und werden dort genauer erläutert.
(http://de.wikipedia.org/wiki/Wahrscheinlichkeitsverteilung)
16
Exponentialverteilung
verwendete Formel:
Verteilungskurven:
Beta Verteilung
verwendete Formel:
Verteilungskurven:
17
Chi-Quadrat-Verteilung
verwendete Formel: (Dabei steht Γ(r) für die Gammafunktion.)
Verteilungskurven:
Erlang-Verteilung
verwendete Formel:
Verteilungskurven:
18
Normalverteilung (Gauß-Verteilung)
verwendete Formel:
Verteilungskurve:
Laplace-Verteilung (Doppelexponentialverteilung)
verwendete Formel:
Verteilungskurve:
19
Die restlichen Verteilungsfunktionen werden nur in einem kurzen Überblick
ohne Verteilungskurven vorgestellt:
Gammaverteilung
verwendete Formel:
Fisher-Tippett-Verteilung
verwendete Formel:
Stetige Gleichverteilung (Rechteckverteilung)
verwendete Formel:
Dreiecksverteilung (Simpson-Verteilung)
verwendete Formel:
Neben
diesen
in
Wahrscheinlichkeitsverteilungen
der
Statistik
wurden
auch
häufig
noch
viele
verwendeten
Verteilungen
implementiert die auf unterschiedlichsten Funktionen beruhen. Darunter sind
zum Beispiel eine quadratische und eine geometrische Verteilung, eine
Verteilung die auf der Sinusfunktion beruht, eine die auf der Fibonaccifolge
beruht und mehrere Verteilungen, die auf unterschiedliche Zufallsfunktionen
beruhen.
20
Nicht alle der hier vorgestellten Wahrscheinlichkeitsfunktionen sind dazu
geeignet jede beliebige Entropie zu erzeugen. Erschwerend kommt hinzu, dass
es keinen allgemeinen Algorithmus gibt der anhand einer beliebigen Funktion
die, zu einer gegebenen Entropie passende, Verteilung näherungsweise
berechnen kann. (Zumindest konnte ich bisher keinen Algorithmus finden, der
diese Aufgabe in einer angemessenen Zeit erledigt.) Deshalb muss für jede
dieser Funktionen ein spezieller, von der Funktion abhängiger Algorithmus
implementiert
implementiert.
werden.
Bisher
Dennoch
wurde
kann
erst
man
einer
dieser
bereits
Algorithmen
jede
dieser
Wahrscheinlichkeitsfunktionen mit der Klasse InformationSource verwenden,
um eine Nachricht anhand eines Elementarzeichenvorrats erzeugen zu lassen.
Allerdings muss man die Parameter der Funktion dann selbst an die
gewünschte Entropie anpassen.
21
3.3 Die Klasse Math
Diese Klasse ist eine unterstützende Klasse. Zum Berechnen vieler
Wahrscheinlichkeitsfunktionen werden einige mathematische Algorithmen und
Funktionen benötigt, die in SC standardmäßig nicht implementiert sind. Die
Klasse Math fügt diese Funktionen zu SC hinzu und kann unabhängig von den
übrigen Klassen dieses Softwarepaketes verwendet werden.
Es folgt ein Überblick über die implementierten mathematischen Funktionen:
1. Math.fact (n) – Berechnet die Fakultät von n (n!).
2. Math.integrate (f, a, b, dx) – Berechnet das Integral der übergebenen
Funktion f über das Intervall a-b mit einer Genauigkeit von dx.
3. Math.betaF (x, y, dt) – Implementation der Betafunktion.
4. Math.gammaF (x, range, dt) – Implementation der Gammafunktion. Der
Parameter range gibt an über welches Intervall integriert werden soll und
ermöglicht so eine Feineinstellung der Genauigkeit.
5. Math.lambertW (x, prec) – Implementation der Lambert-W-Funktion, die
Umkehrfunktion von:
Mit dem Parameter prec lässt sich die Genauigkeit der näherungsweisen
Berechnung einstellen.
22
3.4 Zusätzliche Funktionalität der Software
Zusätzlich zur oben beschriebenen Hauptfunktionalität der Software habe ich
zwei UGens in C++ implementiert. Diese Ugens sind ein erstes Experiment, um
die Möglichkeiten der Software für den Einsatz in digitaler Soundverarbeitung
zu testen. Die Ugens werden in SC über die Klassen EntropyImpulse und
EntropyImpulse2 aufgerufen und sind einander in ihrer Funktionalität sehr
ähnlich.
Der Ugen EntropyImpulse ist ein Impulsgenerator der keinen durchgängigen
Impuls erzeugt sondern der den Impuls in einem, durch die Entropie
vorgegebenen, Rhythmus wiedergibt. Abhängig von der Abspielgeschwindigkeit
des Impulses wird so bei Entropie = 0 ein reiner Sinuston erzeugt und bei
Entropie = 1 ein Rauschen. Bei Entropie zwischen 0 und 1 wird ein fehlerhafter
Sinuston (mit Geräuschanteil) erzeugt.
EntropyImpulse2 funktioniert nach demselben Prinzip mit dem Unterschied,
dass man statt eines Impulses ein Soundfile in einem vorgegebenen Rhythmus
wiedergeben kann. Bei einer Entropie von 0 funktioniert dieser Ugen eigentlich
wie ein einfacher Wavetable-Synthesizer. Bei höherer Entropie wird dem
Soundfile immer mehr Störgeräusch beigemischt und bei einer Entropie von 1
verändert sich der Klang in ein Rauschen.
23
4. Probleme die sich aus dem vorgestellten Konzept ergeben
Wenn man statistische Verfahren wie Wahrscheinlichkeitsverteilung oder
Entropie in Kompositionen anwendet ergeben sich mehrere praxisbezogene
Probleme, die sich aus der mathematisch-algorithmischen Natur des Materials
und dem eingeschränkten künstlerischen Freiraum ergeben. Einige Probleme,
auf die ich im Laufe des Arbeitsprozesses stieß werden im folgenden Kapitel
diskutiert.
4.1 Was ist eigentlich Zufall?
Ich habe bereits darauf hingewiesen, dass die Entropieberechnung nach
Shannon nicht unserer intuitiven Vorstellung von Zufall entspricht. Die
folgenden drei Binärnachrichten sind nach dieser Berechnung alle gleich
zufällig und besitzen eine Entropie von 1.
1) 0010101100010111100100110110
2) 0101010101010101010101010101
3) 0011001100110011001100110011
Der Grund dafür, dass diese Nachrichten die gleiche Entropie besitzen liegt
darin, dass die Wahrscheinlichkeit P(x) beider Elemente (0 und 1) in diesen
Zeichenketten 0,5 beträgt. Die Entropieberechnung nach Shannon ist also eine
Berechnung die von einer gedächtnislosen Nachrichtenquelle ausgeht. In
meiner Software wird sie auch zu diesem Zweck eingesetzt – um eine
gedächtnislose Nachricht zu erzeugen.
Ein Computer kann prinzipiell keine wirklichen Zufallszahlen berechnen, da er
immer einem vorgegebenen Algorithmus folgen muss. Deshalb gibt es
verschiedene Algorithmen die es ermöglichen im Computer Zufall zu simulieren.
Diese Algorithmen sind so komplex, dass es einem Menschen nicht möglich ist
24
den Algorithmus hinter den ausgegebenen Zahlen zu erkennen – die Zahlen
wirken für uns zufällig. Meist wird diesen Algorithmen eine "seed"-Zahl
übergeben, anhand derer die Zufallszahlen berechnet werden. Gleiche "seed"Zahlen ergeben immer die gleichen Zeichenketten.
Man kann die Qualität eines Zufallszahlen-Algorithmuses anhand der
statistischen
Eigenschaften
der
erzeugten
Zufallszahlen
messen.
Eine
Möglichkeit die Zufälligkeit einer Binärfolge zu überprüfen ist der sogenannte
Run-Test (Wald-Wolfowitz-Test). Im Gegensatz zur Entropieberechnung nach
Shannon nimmt der Run-Test – wie der Name schon andeutet – auf Folgen
(runs) von gleichen Werten Rücksicht.
Ich habe in der Klasse InformationSource den Runtest in einer modifizierten
Version implementiert um so die Zufälligkeit der ausgegebene Nachrichten
überprüfen zu können. Nach einem Vergleich der SC-Zufallszahlen mit
wirklichen Zufallszahlen4 stellte sich heraus, dass der Algorithmus, der in SC
Zufallszahlen berechnet, statistisch einwandfreie Zufallszahlen erzeugt. Bei der
Verwendung der Klasse InformationSource als Nachrichtenquelle muss man
sich also über die Qualität der erzeugten Zufallszahlen keine Gedanken
machen.
Allerdings bietet die Klasse InformationSource auch analytische Möglichkeiten.
Man
kann
mit
Hilfe
calcBinaryEntropyForProbs5
der
die
Methoden
Entropie
calcEntropyForProbs
einer
gegebenen
und
Nachricht
berechnen lassen. Um die Ergebnisse allerdings sinnvoll interpretieren zu
können, muss man sich darüber im Klaren sein, dass die Entropieberechnung
nach Shannon nur einen kleinen Teil der statistischen Eigenschaften einer
komplexen Nachricht darstellt. Wenn man jedoch zusätzlich noch den Run-Test
zur Analyse hinzuzieht, könnte man durchaus interessante Ergebnisse erhalten
– allerdings stehen Experimente in diesem Bereich noch aus.
4
5
Die zum Vergleich herangezogenen Zufallszahlen wurden von der Seite http://www.random.org/
erzeugt. Der Random-Number-Generator dieser Seite erzeugt echte Zufallszahlen nach der
Zufälligkeit in atmosphärischem Rauschen.
Diese Methode berechnet zuerst die Entropie und rechnet diesen Wert dann auf einen Ergebnisbereich
zwischen 1 und 0 um.
25
Für
zukünftige
Versionen
dieser
Software
ist
es
geplant
auch
gedächtnisbehaftete Nachrichtenquellen zu implementieren. Dies wird mit
sogenannten Markov-Ketten realisiert, die in ihrer Berechnung auf der
bedingten Wahrscheinlichkeit basieren. Mit dieser Erweiterung würde die
Software auch als Analyse-Tool interessant werden.
4.2 Welcher kompositorische Freiraum bleibt übrig?
Wenn man mit algorithmischen Techniken in Kompositionen arbeitet, sollte man
sich immer erst die Frage stellen welche Arbeit der Computer einem eigentlich
abnehmen soll und in wie weit man noch künstlerisch in den Prozess eingreifen
kann, damit das Endprodukt der Bezeichnung "Komposition" (im Gegensatz zu
einer "Berechnung") gerecht wird.
Bei der Generierung von Nachrichten anhand statistischer Eigenschaften wie
der Entropie ist eine der ersten kompositorischen Entscheidungen, die man
treffen muss, die Wahl der Wahrscheinlichkeitsverteilung. Es gibt prinzipiell
zwei Möglichkeiten eine Wahrscheinlichkeitsverteilung zu erzeugen.
Die einfachere und flexiblere Möglichkeit ist es die Wahrscheinlichkeiten der
Elemente in einem Elementarzeichenvorrat per Hand einzugeben. Dies bietet
den Vorteil, dass man die künstlerische Kontrolle über die, von der
Nachrichtenquelle ausgegebenen, Zeichen zu jedem Zeitpunkt beibehält. Es ist
allerdings sehr schwer den Parameter Entropie bei dieser Vorgehensweise
sinnvoll in der Komposition einzusetzen. Fließende Übergänge von einer
Entropie zu einer anderen herzustellen sind auf diese Weise sehr umständlich
herzustellen.
Die zweite Möglichkeit ist es die Wahrscheinlichkeitsverteilung über eine
Funktion berechnen zu lassen. Der künstlerische Prozess beschränkt sich
hierbei auf die Auswahl oder das Erstellen der Funktionen. Allerdings wird dem
Benutzer so die Entropie der Nachricht als Parameter zur Verfügung gestellt,
was einen weiteren Bereich des künstlerischen Eingreifens ermöglicht.
26
In beiden Fällen ist das Ergebnis immer eine Nachricht, die aus den Zeichen
eines vorgegebenen Elementarzeichenvorrats besteht. Die Auswahl dieser
Zeichen ist der nächste künstlerische Eingriff und sicher einer der
entscheidendsten. Jeder musikalische Parameter kann als Zeichen im
Elementarzeichenvorrat verwendet werden und das Ergebnis hängt stark von
dieser Auswahl ab. Wenn man zum Beispiel einen Elementarzeichenvorrat aus
Tonhöhen definiert, erhält man bei maximaler Entropie eine zufällige Nachricht
aus Tönen eines Tonraums. Bei einer niedrigen Entropie werden einige Töne
häufiger wiedergegeben werden als andere. Wenn man die Entropie auf 0 stellt,
erhält man dagegen einen einzigen Ton aus diesem Tonraum, der immer
repetiert wird.
Eine weitere kompositorische Entscheidung, die man treffen muss, ist der
musikalische Umgang mit der erzeugten Nachricht. Da man die Nachricht als
eine Reihe von Zeichen ansehen kann, entsprechen die kompositorischen
Möglichkeiten den Möglichkeiten der Reihentechnik. So kann man mehrere
Nachrichten kontrapunktisch neben einander ablaufen lassen oder man kann
die Harmonik von der Reihe abhängig machen. Ein wichtiger Unterschied zu
einer Reihe in der seriellen Musik ist jedoch, dass die Länge der Reihe nicht
vorgegeben ist und, dass sich die Reihe immer wieder verändert. Eine
statistisch erzeugte Reihe definiert sich nicht durch die Beziehung zwischen
den aufeinander folgenden Elementen sondern durch die statistische
Wahrscheinlichkeit dieser Elemente. Aus diesem Grund ist die Länge der Reihe
selbst ein zusätzlicher kompositorischer Parameter. Es gilt zu entscheiden wie
lange die Entropie einer Nachricht gleich bleibt und wie sich diese im Laufe der
Nachricht ändert. Des Weiteren muss man entscheiden welche Elemente der
Nachricht die Bevorzugten sind – also welche Elemente bei niedriger Entropie
häufiger in der Nachricht erscheinen als die Anderen.
27
Bei all diesen kompositorischen Möglichkeiten darf man nie vergessen, dass
man immer mit mathematischen Formeln hantiert. Diese haben allerdings
manchmal ihre Tücken und liefern oft nicht das gewünschte Ergebnis. So hat
jede Wahrscheinlichkeitsverteilung ihre eigenen Vorzüge und Problemstellen.
Es ist nicht ratsam eine Verteilung auf gut Glück auszuprobieren, bevor man
sich der mathematischen Eigenschaften der Formel bewusst ist.
Auch bei der Verwendung von Entropie als kompositorischen Parameter gibt es
Stolpersteine, deren man sich bewusst sein sollte. Wie bereits erwähnt,
entspricht die Entropie dem durchschnittlichen Informationsgehalt einer
Nachricht. Wenn man also eine Nachricht mit einer vorgegebenen Entropie von
einer Nachrichtenquelle ausgeben lässt, muss diese Nachricht eine gewisse
Länge besitzen, damit die tatsächliche Entropie der Nachricht sich dem Wert
annähert, der von der Quelle eigentlich ausgegeben werden soll.
Am Beispiel einer Binärquelle möchte ich dies verdeutlichen. Gegeben ist eine
Binärquelle mit einer voreingestellten Entropie von 0,5. Von dieser Quelle
werden
mehrere
Nachrichten
unterschiedlicher
Länge
erzeugt
und
anschließend wird überprüft, wie hoch die tatsächliche Entropie dieser
Nachrichten ist. Hier das Ergebnis:
1. Länge der Nachricht: 5
Berechnete Nachricht:: 1, 1, 1, 1, 1
Tatsächliche Entropie: 0
2. Länge der Nachricht: 10
Berechnete Nachricht:: 1, 1, 1, 0, 0, 1, 1, 1, 1, 1
Tatsächliche Entropie: 0,721
3. Länge der Nachricht: 20
Berechnete Nachricht:: 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1
Tatsächliche Entropie: 0,609
4. Länge der Nachricht: 100
Tatsächliche Entropie: 0,468
28
Am Ergebnis dieses Tests sieht man, dass man die berechneten Nachrichten
immer kritisch betrachten muss. Außerdem wird deutlich, dass ein entropischer
Prozess eine bestimmte Länge haben muss, damit man ihn als solchen
wahrnehmen kann.
Literaturverzeichnis
GRAY, Robert M.: Entropy and Information Theory, New York 1990
MOLES, Abraham A.: Informationstheorie und ästhetische Wahrnehmung,
Köln 1961
NEUBAUER,
André:
Informationstheorie
und
Quellencodierung.
Eine
Einführung für Ingenieure, Informatiker und Naturwissenschaftler,
Wilburgstetten 2006
KULLBACK Solomon: Information Theory and Statistics, 1968
SCHULZ, Ralph-Hardo: Codierungstheorie. Eine Einführung, Wiesbaden 2003
SHANNON, Claude Elwood: A Mathematical Theory of Communication, in: The
Bell System Technical Journal (Bd. 27), 1948, S. 379–423, 623–656
29
Beispielkomposition
Der
letzte
Abschnitt
dieser
Arbeit
enthält
das
Skizzenmaterial
einer
Komposition, an der ich gerade arbeite. Diese beruht auf dem vorgestellten
Entropie-Konzept.
Es
handelt
sich
dabei
um
eine
Komposition
für
Streichquartett und Elektronik.
Das Konzept des ersten entropischen Prozesses dieser Komposition ist,
mehrere Ebenen entropischer Prozesse nebeneinander laufen zu lassen, um so
eine Verwandlung des musikalischen Materials von einem Zustand in einen
anderen Zustand zu erzeugen. Die Ebenen, die bisher in der Skizze zu sehen
sind, sind folgende:
Ebene 1:
Ein Binärrhythmus in Vierteln der sich von der Entropie 1 zur
Entropie 0 verlagert.
Ebene 2, 3 u. 4: Akkorde werden anhand drei verschiedener Ebenen in dem
Binärrhythmus
ausgesetzt.
Die
erste
Ebene
ist
eine
entropische Reihe, die den Intervallen entspricht. Die zweite
legt
fest
aus
wie
vielen
Intervallen
sich
ein
Akkord
zusammensetzt. In diesen beiden Ebenen wird die Entropie
von 0 nach 1 verlagert. Eine dritte Ebene entspricht dem
Fundamentschritt
der
Akkorde,
mit
einer
Entropie
von
0.6 bis 0.8.
Ebene 5:
Diese Ebene verschiebt die Akkordtöne vom Grundpuls um
einen bestimmten Wert nach vorne oder nach hinten.
Ebene 6:
Diese Ebene dient dazu die Klangfarbe der Akkorde mittels
eines
Elementarzeichenvorrats
von
vorher
definierten
Klangereignissen zu ändern.
Weitere
Ebenen
die
noch
hinzukommen
sind
Ebenen
für
Dynamik,
Lagenwechsel, Motiventwicklung und Elektronik.
30
Die Notation enthält einige Zeichen, die das gewünschte Klangergebnis
repräsentieren. Diese dienen vorläufig hauptsächlich dem Konzept und werden
sich zum Teil noch ändern. Wie das gewünschte Klangergebnis letztendlich
erreicht wird, entscheide ich erst, wenn das grobe Konzept der Komposition
fertig ist. Die meisten in dieser Skizze vorhandenen Klänge werden
wahrscheinlich mittels Spieltechniken der Streicher erreicht werden. Es ist
jedoch möglich, dass diese Klänge mittels Elektronik noch weiter verändert
werden.
Zeichenerklärung
Punktuelle Klänge:
Pizzicato mit leichtem Geräuschanteil. Entspricht wahrscheinlich
einem Pizzicato mit der linken Hand und zusätzlichem Klopfen auf
den Korpus mit einem Fingernagel.
Pizzicato mit etwas mehr Geräuschanteil. Entspricht wahrscheinlich
einem Pizzicato mit der linken Hand und zusätzlichem Klopfen auf
den Korpus mit der Fingerkuppe.
Pizzicato mit Fingernagel.
Bartók-Pizzicato
31
Flächen- Klänge:
Reiner
Rauschklang.
Entspricht
wahrscheinlich
einem
Streichen auf dem Steg.
Rauschklang mit weniger Geräuschanteil, aber trotzdem ohne
definierte
Tonhöhe.
Entspricht
wahrscheinlich
einem
gedämpften Streichen. Die Tonhöhenangaben dienen nur der
Archivierung der ursprünglichen Tonhöhe in der Skizze und
wird später aus der Partitur entfernt.
Weniger Rauschanteil als der vorherige Klang. Die Tonhöhe
wird meistens noch undefiniert sein, darf aber bereits
andeutungsweise durchbrechen.
Flautando
Sonstige Zeichen:
Die Note wird etwas früher bzw. später gespielt, liegt aber noch
fast auf dem Viertelpuls.
Die Note wird noch früher bzw. später gespielt. Die
Abweichung entspricht aber noch nicht dem Wert einer
Sechzehntel-Triole.
32
Skizzenmaterial der Beispielkomposition
33
34
35
36