Numerical Music System - NMS4
Seit den frühen Achzigerjahren, als ich begonnen hatte, den Computer in meiner Kompositionsarbeit zu verwenden (anfangs nur als eine Art universelleren Taschenrechner, um Tabellen und Strukturen zu erzeugen), war es mir klar, daß man mit diesem Werkzeug noch wesentlich mehr machen kann. Die ersten CD-player kamen auf den Markt und die digitale Quantisierung von Musik war keine Frage mehr. Es mußte daher möglich sein, digitalisierte Klänge in jedem Computer (nicht bloß in einem 'Musikcomputer'!) zu verarbeiten oder zu erzeugen. Mehr noch, es mußte möglich sein physikalische und soziale Modelle, soweit sie sich formalisieren lassen (Instrumente, Verhaltensmuster), im Computer zu simulieren.
Ich begann ein gigantisches Projekt, 'WANDERER': physikalische Modelle von 'Instrumenten'; Charaktere von 'Musikern', die kommen und gehen und aufeinander reagieren; eine 'Landschaft', die langsam von den Ereignissen verändert wird und die den räumlichen Klang bewirkt - das alles in einem endlosen Prozeß, der, einmal ins Leben gerufen, sich selbst fortentwickelt. Von diesem Projekt existieren eine Menge Skizzen, Aufzeichnungen, Entwicklungen von Teilbereichen. Im Wesentlichen habe ich mich nicht geirrt - so etwas ist machbar. Verschätzt habe ich mich im Umfang der Aufgabenstellung und in der Rechnerleistung: auch heute, Jahre später, mit Computern die hundertmal so schnell sind wie die von damals, ist so ein Projekt Utopie - wenn es nämlich Musik sein soll und nicht bloß ein game.
Unter den Teilentwicklungen zu dem Projekt finden sich (neben einer Sammlung von Operationen in mehrdimensionalen Gefügen und einer Reihe von Strukturgeneratoren) auch die eigenständigen Entwürfe zu verschiedenen Typen von Oszillatoren, wie sie heute unter dem Schlagwort 'physical modelling' verbreitet sind, die ich in ihrer allgemeinen Form aber lieber 'dynamische Oszillatoren' nenne.
Wenn heute in der Computermusik von 'physikalischen Modellen' die Rede ist, meint man in der Regel bestimmte Typen von Oszillations-Routinen nach dem Modell von elementaren Klangerzeugern (Saite, Membran, Pfeife, etc.), die den Musikinstrumenten zugrundeliegen. - Das ist aber bei weitem nicht alles: Jeder physikalische Vorgang, ja auch jeder soziale, kann in einem Modell dargestellt werden, und zwar in vielen Graden der Vereinfachung und der Interpretation. Der Algorithmus selber ist da das Modell und seine Konstruktion ein kreativer Akt, der das Vorbild ohneweiters auch hinter sich lassen darf. In diesem Sinne habe ich im Lauf der letzten Jahren eine Reihe von Modellen konstruiert.
1987 habe ich mit dem Modell einer schwingenden Saite die ersten Klänge erzeugt - 'soundfiles', genauergenommen, denn noch hatte ich keine Möglichkeit, die Ergebnisse hörbar zu machen, ich konnte lediglich den Schwingungsverlauf des Saitenmodelles verlangsamt am Monitor studieren. (Sie stehen heute noch als Maskottchen auf einer meiner harddisks).
1989 war dann meine Ausrüstung endlich soweit, daß ich hörbare Ergebnisse zuwegebrachte und daran gehen konnte, mit diesem Algorithmus systematisch zu arbeiten. (Einer der ersten auf diese Weise synthetisch erzeugten 'Saitenklänge' diente mir als sample für die Sammlung von Preludien und Rondos auf 'FAREWELL TEMPERED PIANO', die im Österreichpavillon in Sevilla in einer Dauerinstallation zu hören war).
Heute ist, neben vielen andern Algorithmen, dieses Saitenmodell das am weitesten entwickelte. Eine Menge von
Eigenschaften kann man dabei definieren (und kontinuierlich verändern):
Saitenlänge | Spannung | Elastizität |
zwei Arten von Dämpfung | pickup-Position | Dicke-Struktur |
punktuelle Belastungen | punktuelle Dämpfungen | Spannung |
(Präparation) | (Flageolette) |
und Dämpfung einer überlagerten Drehschwingung
Daneben sind aber auch noch andere Oszillatoren entstanden, wie zum Beispiel einer auf der Basis von freien, nur durch Gravitationskräfte aufeinander bezogenen Elementen, die in einer geeigneten Interpretation zu ganz komplexen Klangprozessen führen.
Das einfachste von allen Modellen ist ein Pendel, bei dem ein Massepunkt mit linearer Federkraft an einen Bezugspunkt (Nullpunkt) gebunden ist.
Im diesem Modell kann man Federkraft und Masse in einen Term zusammenfassen und auch die Beschleunigung läßt sich im Iterationsprozeß sofort als Geschwindigkeitsänderung einsetzen. Das Modell benötigt daher nur zwei Variable und eine Konstante :
die momentane Position des Massepunktes P
die momentane Geschwindigkeit des Massepunktes V
die Federkraft oder Spannung S
V = V - P*S P = P + V
Einmal aus dem Gleichgewicht gebracht (durch eine von 0 verschiedene Ausgangsposition P) liefert dieser simple 'Zweizeiler' eine konstante Sinusschwingung, deren Frequenz nur von der Federkraft S abhängt (wenn man nach jeder Iteration den jeweiligen Wert von P als output verwendet). Diese Federkraft hat einen Wert zwischen 0 und 2, wobei sich im unteren Bereich die Frequenz mit dem Quadrat der Federkraft ändert).
Mit einem zusätzlichen Dämpfungsfaktor D erhält man eine exponentiell verklingende Sinusschwingung:
V = (V - P*F) * D P = P + V output P
Betrachtet man die Federkraft aber als Variable, dann läßt sich die Frequenz des Pendels auf die einfachste Art modulieren, entweder durch die Daten eines beliebigen inputs (soundfile) oder in einem Netzwerk von einander modulierender Pendel - ein FM-Generator.
Die dynamischen Oszillatoren - und dieses Pendel ist der einfachste Fall davon - haben aber noch eine bemerkenswerte Eigenschaft: Jeder dynamische Oszillator ist grundsätzlich auch als Resonator verwendbar. Ersetzt man nämlich den Bezugspunkt (Nullpunkt) durch die Momentanwerte (samples) eines beliebigen inputs, dann versucht unser Massepunkt dem Schwingungsverlauf des inputs, so gut er kann, zu folgen.
Resultat ist eine Resonanz auf der entsprechenden Frequenz mit einer Stärke, die vom Dämpfungsfaktor D abhängt.
V = (V + (in-P)*F) * D
P = P + V
oder :
V = V*D + (in-P)*F
P = P + V (andere Auswirkung bei D = 0)
output P
Natürlich kann man hier sofort experimentell arbeiten und anstelle der linearen Federkraft irgendeine andere sinnvolle Bindung einführen (nichtlineare, inverse, Gravitationsbindung etc.) und erhält dann 'Resonatoren' die nicht mehr unmittelbar an das Spektrum des Initialklanges gebunden sind, sondern in eigenen komplizierten Tonhöhenbewegungen den Initialklang gleichsam umspielen. (Beispiel No.4 aus den 'Steinbutt-Variationen: Der ursprüngliche Text mit Kaskaden von inversen Resonanzen).
Wie gesagt hängt der Resonanzgrad vom Dämpfungsfaktor ab. Setzt man nun die Dämpfung sehr stark an (den Faktor D sehr klein), so daß kaum ein Überschwingen des Oszillators mehr stattfindet, dann kommt man in einen Bereich, wo der Resonator zum 'Stoßdämpfer' wird - zum Filter. Optimal wirkt dieses Filter bei einem bestimmten Verhältnis von Federkraft und Dämpfung. Man kann beide Konstanten daher näherungsweise zu einem Filterfaktor F zusammenfassen und die Formel für den allgemeinen Resonator zum Filteralgorithmus komprimieren:
V = V + ((in-P)*F - V) * F
P = P + V
out = P
Ein einfacher Tiefpaß erster Ordnung (ca. 6dB/Oktave Steilheit), dessen cutoff-Frequenz nur von dem einen Faktor F abhängt und der somit ideal als schnelles steuerbares Filter zu verwenden ist. (Für einen Hochpaß muß nur die dritte Zeile geändert werden : out = in - P) Die Werte für den Filterfaktor müssen zwischen 0 und 1 liegen, wobei bei einem F=1 das Filter vollständig offen ist - der input passiert unverändert; bei F=0 vollständig gesperrt.
Für das Verhältnis von cutoff-Frequenz zu Filterfaktor kann man folgende Näherungsformel verwenden :
F = tanh ( cutoff-frequency * 2pi / samplerate)
In den Programmen von NMS4 sind solche Filter an verschiedenen Stellen implementiert: Vor dem input-Scanner (als Antialias-Filter bei Tempotransposition nach oben), nach dem input-Scanner (zur Glättung der Interpolationsrauhigkeit bei Tempostransposition nach unten), als Standard output-Filter und in verschiedenen Transformer-Modulen. Sie können nach Belieben in Kaskaden bis zu 8 Modulen (für größere Flankensteilheit) aktiviert werden, wobei der Filterfaktor mit der Calculatorfunktion COF als Cutoff-Frequenz in Hz eingegeben werden kann. (die Toccatas in 'Farewell Tempered Piano' verwenden diesen Filtertyp systematisch)
Bei Kaskaden höherer Ordnung wird allerdings ein Buckel im Frequenzgang stark bemerkbar (vor allem in der Schaltung als Hochpaß). Für steilere Filter empfiehlt sich daher ein genauerer Näherungsalgorithmus, der auch in den neueren Versionen von NMS5 implementiert wird.
Koppelt man eine Anzahl solcher Pendel so, daß jeder Massepunkt versucht, den Bewegungen seiner Nachbarpunkten zu folgen, dann erhält man einen Oszillator, mit dem sich komplexe Spektren generieren lassen. Im Gegensatz zu additiven Syntheseverfahren, bei denen sich die Beliebigkeit der Komposition von Frequenzen leicht in einer Beliebigkeit des klanglichen Resultats wiederspiegelt, sind solche Spektren ganzheitlich: Frequenzen, Amplituden und Verlauf hängen nach einer inneren Logik zusammen.
Ab einer gewissen Anzahl von Massepunkten, von denen jeder an zwei Nachbarpunkte gebunden ist (wobei die beiden äußeren festgehalten werden), kann man bereits grundsätzlich von einem Saitenmodell sprechen. (Manchmal reichen 20 bis 30 Punkte, damit die Serie von einzelnen aneinandergekoppelten Pendel als Kontinuum wirkt). Alle Punkte sollen zunächst gleiche Masse haben, gleiche Spannung und gleiche Dämpfung. Einmal aus dem Gleichgewicht gebracht, indem man zum Beispiel irgend eine von der Ruhelage verschiedene Konstellation der Punkte vorgibt, liefert der Oszillator tatsächlich ein ganzheitliches Spektrum, dessen Frequenzen zumindest im unteren und mittleren Bereich ganzzahlige Proportionen haben. (Wenn in der Ausgangskonstellation keine seitliche Verschiebung der Punkte vorgegeben ist, dann treten auch keine seitlichen Kräfte auf, bzw. sie heben sich auf; jeder Massepunkt bewegt sich dann nur in einer Linie, in einer Dimension). So ein Modell ist die Grundlage von OSC002 in NMS4.
Vier Parameter lassen sich dabei zunächst definieren :
Dimension (Anzahl der Punkte), Spannung, Dämpfung und Pickup-Position.
Pickup-Position bedeutet einfach, daß man die Bewegung eines der Massepunkte zum output erklärt. Je nachdem, ob man einen äußeren Punkt auswählt, oder einen zentraleren, wird der resultierende Klang heller oder dumpfer, hat verschiedenen Spektralanteile.
In OSC002 kann die pickup-Position als Kontinuum betrachtet werden (Positionen zwischen zwei Punkten werden entsprechend interpoliert). Sie kann auch während des Schwingungsprozesses verändert werden, interpoliert, moduliert, oder durch beliebige input-files gesteuert, wodurch phasing-Effekte und eigenartige Modulationen möglich sind. Von einem 'Saitenklang' sind wir damit aber noch weit entfernt!
Eine einfache Überlegung kann da weiterhelfen: Bei einer realen Saite ist die Spannung von der Dehnung abhängig. (Wir ziehen die Saite in die Länge, wenn wir die Wirbel einer Gitarre oder Geige drehen). Betrachtet man den Schwingungsverlauf genauer, dann hat so eine Saite aber in jedem Moment verschiedene Länge und es muß sich daher auch die Spannung mit dem Verlauf der Schwingung zumindest geringfügig ständig verändern.
Die ersten Versuche damit haben gezeigt, daß es genügt, die Positionsdifferenzen der Punkte in der Schwingungsrichtung zu einer Art Gesamtlänge zu summieren. (Die rechenaufwendige trigonometrische Konstruktion bringt kein wesentlich besseres Ergebnis). Moduliert man nun die Spannung in jedem Moment mit dieser Längenkorrektur, dann läßt sich je nach Modulationsgrad eine mehr metallisch starre, oder gummiartig weiche Saite definieren. Damit verlassen wir aber den 'gesicherten Boden' des einfachen Modells, denn der resultierende Klang ist jetzt mehr oder weniger von der Stärke der Initiierung abhängig (wie wir es bei den Saiteninstrumenten gewohnt sind), ja, mehr noch: eine zu starke Initiierung kann den Algorithmus in Bereiche bringen, in denen er nicht mehr konvergiert, die Positionswerte der Massepunkte steigen in astronomische Bereiche - die Saite 'reißt'. (Der Rechenprozeß wird mit einem floatingpoint-error abgebrochen).
Implementieren wir noch eine zweite Art von Dämpfung, nämlich eine, die die 'Krümmung' der Saite in jedem Moment zu reduzieren trachtet, (wobei die höheren Frequenzanteile tendenziell rascher verklingen, als die tieferen) - dann haben wir alle Standardparameter für das Saitenmodell OSC002 von NMS4 :
# Dimension (Punktanzahl)
# Pickup-Position
# Spannung
# Elastizitätsfaktor
# Dämpfung
# relative Dämpfung
(Alle Parameter können unabhängig voneinander justiert, kontinuierlich verändert, moduliert und gesteuert werden, - auch die Dimension, wobei aber notwendig sprunghafte Veränderungen auftreten, nicht unähnlich den Phänomenen bei umsponnenen Saiten).
Der Saitenklang, der für die Preludes und Rondos in 'Farewell Tempered Piano' als einziges sample verwendet wurde, ist auf diese Weise generiert. Abgesehen vom Problem der Initiierung (über das noch gesondert gesprochen werden muß), darf man noch immer nicht erwarten, daß nun alles, was man mit so einem Oszillator generiert, nach Saite klingt. - Das Gegenteil ist der Fall! Nur ganz bestimmte Abstimmungen (tunings) dieser Parameter kommen in die Nähe dessen, was wir uns unter einem Saitenklang im weitesten Sinne vorstellen. (Und auch da gehen die Meinungen bisweilen auseinander).
Dynamische Oszillatoren müssen grundsätzlich initiiert werden. Im einfachsten Fall durch irgendeinen von der Ruhelage verschiedenen Ausgangszustand. Die Initiierung kann aber auch komplizierter sein und einige Zeit andauern, sie kann auch während des gesamten Schwingungsvorganges wirksam sein. Die Grenze zwischen Oszillator und Resonator ist dabei nur mehr verschwommen wahrzunehmen.
Werfen wir einmal einen Blick auf die 'Initiierung' in der Realität :
Wer ein Saiteninstrument spielt, der weiß, wie sehr die Tongebung von der Fertigkeit, vom Einfühlungsvermögen des
Spielers abhängt. Dasselbe Instrument klingt anders, wenn es von einem Anfänger, als wenn es von einem Meister
gespielt wird. (Eine Banalität, aber ich glaube, daß man bisweilen an so selbstverständliche Dinge erinnern muß, um
die Euphorie über großartige neue Möglichkeiten ins rechte Lot zu rücken). Natürlich kann man pluck-Algorithmen
und dergleichen konstruieren, die ganz passabel wirken (in OSC002 sind auch ein paar Standards implementiert).
Wenn dann aber die ewigen Nörgler an der Computermusik wieder einmal einwenden, ein reales Instrument, von einem
realen Musiker gespielt klingt doch lebendiger und organischer, dann haben sie leider in den meisten Fällen recht.
Physikalische Korrektheit ist noch lange kein musikalisches Kriterium.
Generell kann man sagen, daß eine Initiierung in einer Energiezufuhr mit einem bestimmten zeitliche Verlauf besteht,
also in einer erzwungenen Positionsänderung oder einem Geschwindigkeitszuwachs in jedem Moment, eventuell
verbunden mit einer momentanen Erhöhung der Dämpfung. Funktionskurven mit Random-Anteilen helfen da nur bis
zu einem gewissen Grad. Will man Komplexität und Vielfalt, dann ist es besser, man versucht 'natürliche' Funktionen
bzw. Verläufe in den Initiierungsprozeß einzuschleusen - mehr oder weniger große Portionen von soundfiles oder
Steuerfiles:
Einem beliebigen Punkt des Saitenmodells überlagert man einfach den Schwingungsverlauf eines input-files, entweder
zwingend oder locker gekoppelt. Ein gutes Beispiel dafür ist 'Funkenflug', der zweite Teil von 'Katharsis'. Winzige
Ausschnitte vom extrem verzerrten Rauschen eines Wasserfalles, sogenannte 'Funken', treffen auf neun sorgfältig
abgestimmte Modelle von präparierten Saiten (imaginäre Klangobjekte). Durch die Funken werden sie auf die
verschiedenste Weise zum Klingen gebracht, denn diese Funken haben verschiedene Gestalt, können schwer oder leicht
sein, langsam oder schnell, können an verschiedenen Stellen aufschlagen, können das Objekt in Ruhe treffen, oder
während es noch vom letzten Schlag in Schwingung ist .....
Eine besondere Variante für Resonanzen (für Initiierungen, die so lange dauern, daß sie als eigener Klang erkennbar sind) ist es, die Initiierung auf einen der Einspannpunkte zu verlegen, also etwa wie ein Seil, das an einem Ende fest eingespannt ist, während das andere Ende willkürlich (nach dem Schwingungsverlauf eines input-files) auf-und ab bewegt wird. Beispiele dafür sind No.6 und 8 der Steinbutt-Variationen.
Bisher haben wir das Saitenmodell als homogen betrachtet: alle Punkte mit gleicher Masse (=1, deshalb als Parameter nicht eigens ausgeführt), jeder Punkt die gleiche Spannung, die gleiche Dämpfung etc.. Das muß aber nicht so sein. Grundsätzlich könnte jeder der ausgeführten Parameter für jeden Punkt eigene Werte haben. Vom Algorithmus her wäre das kein Problem - selbst individuelle Modulation aller Parameter für jeden Punkt wäre möglich. Kompositorisch betrachtet ist so etwas aber 'Choreographie für einen Tausendfüßler', wobei die klanglichen Resultate den Aufwand kaum rechtfertigen. Zwei Sonderfälle seien aber hervorgehoben, die eine wertvolle klangliche Bereicherung bieten und in OSC002 auch implementiert sind : Punktuelle Erhöhung der Masse und punktuelle Erhöhung der Dämpfung.
Die punktuelle Erhöhung der Masse, wobei man einen bestimmten Punkt 'schwerer' nimmt als alle anderen, (wenn man ihn leichter nimmt, erhält man keine spektakulären Ergebnisse, außer daß die Saite an dieser Stelle leichter reißt), führen genau zu den Typen von unharmonischen Spektren, wie wir sie von den präparierten Saiten her kennen (sogar klingender und klarer, als das durch Präparation möglich ist, die in der Regel den freien Klang der Saite durch Nebeneffekte sehr beeinträchtigt).
Je nach Position und Massefaktor verschieben sich die Teiltöne des Spektrums und verlassen die ursprüngliche ganzzahlige Ordnung. Beispiele dafür sind der, bei der Initiierung bereits zitierte 'Funkenflug' die 'Fantasie über den Goldenen Schnitt' und die Versuche zu 'Trio II'.
Position und Massefaktor sind als eigene Parameter ausgeführt und daher ebenfalls kontinuierlich veränderbar und steuerbar. Man kann somit die 'Präparation' über die Saite laufen lassen und auch ihr 'Gewicht' kontinuierlich verändern. Punktuelle Erhöhung der Dämpfung hingegen wirkt wie Flageolette. Allerdings muß man dabei bedenken, daß eine Aneinanderreihung von Massepunkten nicht wirklich ein Kontinuum ist und daß vor allem bei einer geringen Dimension die Anzahl der Punkte auch eine gewisse harmonische Bedeutung hat und nicht unbedingt jeder Oberton per 'Flageolette' herausgeholt werden kann.
Noch ein paar Überlegungen, wie dieses Modell dem Prinzip nach weitergeführt werden könnte. Zunächst einmal zur rechteckigen Membran :
Die klanglichen Ergebnisse sind interessant, der Rechenaufwand steigt aber beträchtlich. (In OSC003 ist so ein Modell vorbereitet). Die Saite könnte man topologisch zum Ring schließen, die Membran zur in sich geschlossenen Fläche (eine Art Torus mit rechtwinkeligen Koordinaten), wenn man die Ränder gleichsetzt. Interessant wären ferner verschiedene einfache ungleichmäßige Masseverteilungen im Saitenmodell, wie konisch, konkav oder konvex. Auch Kombinationen von mehreren Modellen sind denkbar. (In der 'Grossen Fuge', dem vierten Teil von 'Katharsis' fungieren zwei überkreuzte, an einer Stelle verbundene Saitenmodelle als Resonator, als 'variabler Korpus' für die mit anderen Methoden aus Wasserrauschen gewonnenen Töne).
Dem experimentellen Programmieren sind hier kaum Grenzen gesetzt, zum Beispiel könnte man im Saitenmodell die lineare Federbindung ersetzen durch nicht lineare (keine konstante Tonhöhe mehr); trigonometrische (eine Art Frequenzmodulation); inverse bzw. Gravitationsbindung (geringe Schwingung wird schneller und höher, starke langsamer und tiefer, ein gedämpfter Ausklang beginnt tief und verschwindet in einem Glissando nach oben).
Noch ein Beispiel für einen experimentellen Ansatz, den ich noch nicht weiterverfolgt habe, von dem ich aber glaube, daß er einer systematischen Beschäftigung wert ist, 'dots in a plain' (als OSC004 implementiert):
Ein Modell von Massepunkten in einer Ebene, die durch Gravitationskräfte aufeinander bezogen sind. (auch ein Modell mit Ladung statt Gravitation, also auch mit Abstossungskräften ist möglich, hinsichtlich der Stabilität aber eher heikel). Das eigentliche Problem ist dabei nicht die Konstruktion so eines Modelles von frei aufeinander bezogenen Massepunkten, sondern seine Interpretation als hörbare Schwingung. Hier ist es in einer Variante so gelöst, daß der reziproke Abstand von einem Zentrum als Amplitude genommen wird, so daß Massepunkte, die das System 'verlassen' und in kosmischer Entfernung in ihrer Bewegung erstarren (was bisweilen vorkommt), tendenziell auch akustisch nicht mehr wirksam sind.
So ein Oszillator liefert merkwürdige komplexe, endlose Klangverläufe, die über lange Strecken stabil sein können, unter Umständen aber auch plötzlich und unvorhersehbar in einen anderen Zustand kippen. Wenn man den Schwingungsverlauf eines input-files als pulsierende Zentralmasse interpretiert, dann kann dieser Oszillator auch als Resonator verwendet werden (sofern man den Begriff der Resonanz auch auf nicht unmittelbar frequenzgebundene Abhängigigkeiten ausdehnt).
Transformer
Die Unterscheidung zwischen 'Oszillator' und 'Transformer', wie sie in NMS4 durchgeführt ist, würde ich heute nicht
mehr aufrechterhalten. Im Wesentlichen besagt sie nur, daß ein Oszillator ein Algorithmus ist, der auch ohne
soundfile-input auskommt, mit dem man sozusagen Klänge synthetisieren kann, während ein Transformer in jedem Fall
einen input benötigt. Die Sammlung von Transformern in NMS4 ist sozusagen eine Fortsetzung meiner Erfahrung mit
der Analogtechnik. G. Danczul und später W. Musil haben für mich einige wichtige und hochwertige Geräte
konstruiert, die die Grundlage all meiner früheren Arbeiten waren - zum Teil Verbesserungen von Geräten, die
vorübergehend als Effektgerät oder Synthesizerelemente im Umlauf waren und deren Eignung als 'Werkzeug' nur eine
Qualitätsfrage war (Modulatoren, Frequencyshifter, etc.); zum Teil aber auch Geräte nach eigenen Ideen (wie zB. ein
komplementärer Exponentialgenerator für Hüllkurven - in TRF004 als Algorithmus formuliert). Deutlicher noch, als
bei den Oszillatoren, die zum Teil auch instrumental aufgefaßt werden können, herrscht hier der handwerklicher Aspekt
vor:
Es sind Werkzeuge - fundamentale Funktionen, deren Wirkungsweise man kennen muß, wenn man damit arbeiten will. (Keine Garantie, daß der Klang, der herauskommt, schöner ist als der, den man hineinschickt ....) Manche dieser Transformer zeigen ihren Wert vor allem in der Kombination, in der mehrfachen Bearbeitung.
Verzerrung
Dazu gehören vor allem die verschiedenen Arten von 'Verzerrung', nichtlineare Amplitudenveränderungen, ohne die
meine früheren Arbeiten nicht vorstellbar wären ('Atem', 'Styx', 'Landschaft'). Besonders in der Bearbeitung von
Zwischenmaterial verdienen sie mehr Beachtung (wobei der oft 'schmutzige' sound der verzerrten Klänge in den
nachfolgenden Bearbeitungen wieder 'geläutert' werden und Rauhigkeit geglättet werden kann). Aber auch direkt lassen
sie sich sinnvoll einsetzen : In 'Funkenflug' ist aus Wasserrauschen mittels Verzerrung ('signed power') ein Knistern und
Prasseln abgeleitet (zusätzlich mit systematischer Intermodulation von vier verschiedenen Ausschnitten, so daß das
resultierende Geprassel in vier Kanälen scheinbar unabhängig ist, aber doch einen verborgenen gemeinsamen Verlauf
hat). Weitere extreme Verzerrung löst aus dem Geprassel sozusagen einzelne 'Funken' heraus, mit denen verschiedenen
Saitenmodelle initiiert werden.
Spektakulär können auch verschiedene trigonometrische Verzerrungen sein, bei denen die Amplituden ab einer gewissen Größe umschlagen und somit lautere Stellen eine Art Modulation erfahren (Beispiel No.?, wo ein synthetisierter Saitenklang in verschiedenem Grad trigonometrisch verzerrt wird; oder 'Miniatur 12' von Katharina Klement, wo die Verzerrung der Klaviercluster gerade an der Grenze zur Modulation gehalten wird).
Hervorheben möchte ich außerdem die Routinen, die auf komplementären exponentiellen Verläufen aufbauen. Schon in der Komposition 'Landschaft' (der Tonbandteil von 'Landschaft mit Pianist', 1986), die zur Gänze mit analogen Mitteln gearbeitet ist, spielt ein komplementärer Exponentialgenerator eine wichtige Rolle bei der Gestaltung von Hüllkurven.
Exponentielle Hüllkurven
Zwei Exponentialfunktionen (die eine positiv, die andere negativ) mit unterschiedlichem Decay bilden zusammen eine
mehr oder weniger steile Kurve, deren Verlauf mit zwei Parametern justiert werden kann.
Kaskaden von Exponentialfunktionen sind denkbar, aber bereits zwei formieren gut handhabbare, neutrale Hüllkurven, die vor allem dann zur Geltung kommen, wenn man sie auf konstante Klangverläufe aufmoduliert, die doch ein gewisses Maß innerer Bewegung haben. Beispiele dafür finden sich in No.5 der Steinbutt-Variationen (die plötzliche wuchtigen Schläge in mehreren Schichten), oder in '19/13/17' in 'Odyssee'.
DELAY-Resonator
Ein ähnliches Prinzip waltet im 'delay-resonator' (TRF005). Hier gibt es zwei rückgekoppelte Delaystrecken von
gleicher Periode, aber unterschiedlicher Rückkoppelung). Resultat ist eine mehr oder weniger steile, an-und
abschwellende Resonanz (bei einer Initiierung durch Impuls mit einem Amplitudenverlauf wie die gerade vorhin
beschriebene Hüllkurve). Mehrere Beispiele gibt es, wo solche Resonanzen (meistens mit nachfolgender Filterung) zur
Tongewinnung aus Wasserrauschen eingesetzt sind : 'Aufstieg' und 'Abstieg' in Odyssee, die 'Toccatas' in Farewell
Tempered Piano, die 'Große Fuge' in Katharsis; mit ganz kurzen Initiierungen und freiem Ausklang auch in 'Der Arme
Spielmann'. Katharina Klement verwendet den Resonator in 'Miniatur 3', um die einzelnen Klavieranschläge
minutenlang nachklingen zu lassen.
Ein Cluster von 19 solcher abgestimmter Resonanzen bildet die Räumlichkeit der 'Monologe' in Odyssee. Bemerkenswert dabei ist, daß es eigentlich ein kontinuierlicher Prozeß ist, bei dem jede Initiierung auf den jeweiligen vorigen Zustand aufbaut. Beispiele für einen unorthodoxen Einsatz so einer simple Methode sind die beiden Tänze ('Resonanz 1 und 2') in 'Odyssee' : Hier dreht sich das Verhältnis von auslösendem Klang und Resonanz gefühlsmäßig um. Ein synthetisch generiertes metallisches Geklingel, das in seiner ursprünglichen Form nie vorkommt, löst ständig melodisch variierende Resonanzen aus.
Der immer gleichbleibende Anteil des Geklingels wirkt somit als komplizierte Resonanz, während die eigentlichen Resonanzen scheinbar als auslösende Töne fungieren. [Da das alles keine didaktischen Stücke sind, ist die Sache natürlich nicht ganz so einfach : Um den Eindruck zu verstärken, gibt es hier zusätzlich einen auslösenden Impuls mit einer Resonanz ein oder zwei Oktaven darunter]
Movement in a Plain
Nicht so elementar, aber doch auch fundamental ist TRF007 - 'movement in a plain with reflections'. Geräusche von
bewegten Objekten sind heute aus unserem Alltag nicht mehr wegzudenken - ein eigener Klangtypus hinsichtlich
Lautstärke-und Tonhöhenverlauf, der auch in der musikalischen Komposition seinen Niederschlag finden muß (denn
die erlebbare Akustik ist uns notwendig Orientierung und Vorbild auch dann, wenn es nicht um Abbildung oder
Imitation geht). Lange genug habe ich solche typischen Verläufe (Amplituden-Hüllkurven und Frequenzkurven)
gleichsam 'handgezogen'. (In 'Styx' und in 'Landschaft' finden sich einige Elemente, die auf diese Weise geformt sind).
TRF006 ist ein einfaches räumliches Modell, mit dem sich derartige Prozesse ganzheitlich erzeugen lassen. In einer gedachten Fläche definiert man zwei Punkte, Ausgangspunkt und Zielpunkt, zwischen denen innerhalb einer bestimmten Zeitspanne (die Dauer eines Prozeß-Segmentes) eine gleichförmige 'Bewegung' stattfindet. Dabei wird in jedem Moment die Entfernung von einem Bezugspunkt (Zentrum) ermittelt und davon Amplitude und Zeitverzögerung (Delay) abgeleitet. Da sich die Zeitverzögerung dabei kontinuierlich verändert, ergeben sich Dopplereffekte von selbst, deren Ausmaß mit einem eigenen Parameter reguliert werden kann. Soll das Resultat stereophon sein, dann wird außerdem der jeweilige momentane Einfallswinkel in Panorama umgesetzt.
Darüber hinaus können noch Reflexionspunkte gesetzt werden, wobei komplizierte Cluster von Bewegungsverläufen entstehen, die aber doch einen inhärenten Zusammenhang haben. Beispiele dafür finden sich in No.3 der Steinbutt-Variationen : Mehrere Schleifen von Textsilben, die in unterschiedlicher Richtung und Entfernung 'vorüberziehen' und einmal auch ein Synthesizerakkord, der das Areal etwas rascher durchquert. (Derselbe Akkord, nur wesentlich langsamer und tiefer, zieht auch in No.7 nocheinmal vorüber). In einem zweiten Modus kann die lineare Bewegung durch die zwei Komponenten eines externen soundfiles (es kann auch ein eigens generierter Steuer-file in soundfile Format sein) ersetzt. Gemäß der Wellenbewegung der zwei Komponenten (Kanäle) findet eine beliebige unregelmäßige Bewegung in der Fläche statt, die genauso in Amplituden-, Delay- und Panoramaverläufe umgesetzt wird, wobei rasche Bewegungskomponenten modulativen Charakter bekommen.
Transformer für komplexe Audio-Daten
Ein eigenes Kapitel sind die komplexen Transformer (in CB1). Abgekürzt gesagt, beruhen die komplexen Audiodaten
auf der Tatsache, daß jede Sinusschwingung als Perspektive einer gleichförmigen Kreisbewegung aufgefaßt werden
kann, zu der sich immer eine zweite Komponente, der damit assoziierte Cosinus, rekonstruieren läßt. Ein Klang, bzw.
soundfile von einer bestimmten Anzahl von samples läßt sich immer als ein Gemisch von ebensovielen
Sinusschwingungen darstellen (Fouriertransformation).
Akustisch bedeutet das, daß ein mono-Signal zu einem stereo-Signal aufbereitet werden kann, dessen zweite Spur im Normalfall gehörsmäßig von der ersten nicht zu unterscheiden ist, aber in einer ganz bestimmten Phasenbeziehung dazu steht. Einige bekannte Geräte und Algorithmen benötigen grundsätzlich komplexe Audiodaten: der legendäre Frequency- Shifter, die Fouriertransformation, diverse Filter, etc. Den User 'verschont' man in der Regel damit - er muß nicht wissen, was da intern vorgeht (daß sein mono-input ert einmal komplex aufbereitet wird, dann die jeweilige Operation durchgeführt und als output wieder nur eine Komponente des Ergebnisses präsentiert wird).
Das ist aber schade! Denn das komplexe audio-Format erschließt ganz neue Bereiche für die experimentelle Arbeitsweise, die noch lange nicht ausgelotet sind. CB1 enthält zumindest einige grundlegende komplexe Routinen: Frequency-Shifter (lineare Frequenzverschiebung), Modulatoren (mit additiver oder subtraktiver Auswirkung hinsichtlich der Spektren), Radius-tresholds etc. Sehr brauchbar sind auch die komplexen Verzerrungen, bei denen Radius und Phase getrennt behandelt werden können. Ein gutes Beispiel dafür ist Nr.7 der Steinbutt-Variationen. Darin wird der Text sehr langsam genommen, vielleicht 1/10 der Originalgeschwindigkeit. Die dementsprechend auch verlangsamte Drehbewegung des komplexen Klangverlaufes wird aber durch eine Phasenmultiplikation extrem beschleunigt, wodurch die Frequenzen des Spektrums auf eigentümliche Art wieder angehoben werden. - Eine Methode mehr, das Spektrum eines Klanges zu verändern, ohne seinen zeitlichen Verlauf zu beeinträchtigen.
Um einen normalen soundfile komplex aufzubereiten, gibt es in NMS4 ein eigenes Programm CIP (complex interpreter). Man kann aber auch die Filterbank eines Frequency-Shifters anzapfen und die Aufbereitung analog durchführen. (Das hat aber nur Sinn, wenn es ein hochqualitatives Gerät ist).
Das sauberste Ergebnis aber, in dem auch die tiefen Frequenzen eine exakte Phasenverschiebung erfahren, liefert eine bestimmte Art von allpass-Filter auf der Spektralebene. (Das Programm FFTBOX, ein bereits ausgearbeiteter Teil von NMS5 enthält so eine Routine).
Das Rahmenprogramm
Bei der Entwicklung von Algorithmen zur Bearbeitung von soundfiles gibt es einige Probleme, die immer
wiederkehren: file-handeling, Parametereingabe, Status-u.Errormessages, und dergleichen mehr - Dinge, die beim
Programmieren am meisten aufhalten, denn die meisten Kernroutinen (selbst komplizierte, wie das Saitenmodell) haben
selten mehr als zwanzig Zeilen. Sehr schnell ist daher ein Rahmenprogramm entstanden, das alle diese Aufgaben
übernimmt - eine Art Prüfstand für Routinen in einem bestimmten Standard.
Dieser Standard ist denkbar einfach: Ein Set von input-Variablen, ein Set von output-Variablen und ein Set von möglichen Parametern (alle Variable und Parameter 32bit floatingpoint, audio-Daten entsprechend konvertiert), verbunden mit der Auflage, daß die Kernroutinen, wie immer sie strukturiert sind, bei jedem Aufruf grundsätzlich nur einmal durchlaufen werden - sozusagen 'am sample' arbeiten, das heißt, bei jedem call nur einen output-Wert liefern (bzw. 2 oder 4, wenn der output stereo oder quadro definiert ist).
Alle Parameter müssen dabei in der Form eingegeben werden, wie sie von den Routinen intern benötigt werden. Damit ist der Zugriff offen und übersichtlich, aber manchmal doch unbequem. Mit einer expliziten Angabe über die Parameter-Dimensionierung kann man sich die Sache aber leichter machen : Amplituden können als Faktor eingegeben werden oder in Decibel; Zeiten in Sekunden, Minuten'Sekunden oder in samples; Frequenzen in Hertz; Intervalle in Stufen temperierter Stimmung; und so weiter.
Bei manchen Routinen genügt es aber nicht, einen Klang zu generieren, oder eine Transformation durchzuführen. Sie müssen doch in einem kompositorischen Kontext getestet werden, wenn man ihre Funktion und ihre Bedeutung einschätzen will. Das Rahmenprogramm muß folglich auch einfache Motivbildungen ermöglichen, also eine zeitliche Strukturierung durch Parameterlisten. Auf dieser Basis sind die Rahmenprogramme (aus Speicherplatzgründen waren es anfangs mehrere) kontinuierlich gewachsen.
Im Sommer 1991 habe ich dann im Zuge von Kompositionsaufträgen für die EXPO '92 alles nocheinmal überarbeitet und auf den im Wesentlichen heute noch geltenden Stand gebracht: Aus der Parametereingabe ist eine Art Compiler geworden; aus dem file-handeling ein Input-Scanner und ein Output-Distributor; aus der Parameter-Dimensionierung ein Calculator und die zeitliche Strukturierung zu einem segmentierten Prozeßablauf mit unabhängiger Sequenz-Struktur für inputs und output.
Input-Scanner
Der Input-Scanner verwaltet parallel bis zu 8 soundfiles *), wobei folgende Formate und Typen automatisch erkannt
und gegebenenfalls intern konvertiert werden, ohne daß die files selbst deswegen verändert werden müssen.
Formate: | BICSF (Berkley/IRCAM/CARL-soundfiles) WAVE (single chunk) TRIPLE-DAT in Vorbereitung |
channels: | mono, stereo, quadro |
class: | 16bit integer, 32bit floatingpoint, complex polar |
Beim Einlesen der files werden die automatischen Konversionen durchgeführt, es können aber auch einige spezielle Konversionen eigens definiert werden - sehr wertvoll, wenn der betreffende input zur Parametersteuerung verwendet wird: Hüllkurven, Rasterung, Filterung, Kanalpermutation, Verzerrung etc. Jeder der 8 files kann hinsichtlich Position und scanning-speed durch Parameter definiert werden. Die scanning-speed (eine digitale Form von 'vari-speed') ist dabei nach unten hin nicht begrenzt, sie kann - vor allem für Steuerzwecke beliebig langsam genommen werden (1/1000 oder 1/10000 der Originalgeschwindigkeit), oder bis zu 512 mal schneller, auch negativ (reverse). Da die betreffenden Faktoren als Standard-Parameter ausgeführt sind, können sie übrigens auch von anderen input-files moduliert werden - eine Art Frequenzmodulation, genauer gesagt 'Tempomodulation' der soundfiles. Für jeden input können außerdem Anti-alias-Filter vorgeschaltet und Glättungsfilter nachgeschaltet werden.
Testsignale, wie Sinus und Noise, stehen ebenfalls als input zur Verfügung und schließlich können auch alle output-Variablen und side-effects der Kernroutinen als input rückgeführt werden.
Inputlisten
Am Standard-input-Kanal können die files segmentweise ausgewechselt werden. Ein eigener Parameter verweist dabei
auf einen file in einer vordefinierten inputlist. Damit können zum Beispiel sukzessive Mischungen von 128
verschiedenen files prozeßgesteuert durchgeführt werden. Die Selektion der files kann dabei auch algorithmisch oder
nach Zufallskriterien erfolgen.
In der Input-Liste selber können zudem mit jedem file 8 Konstanten assoziiert werden, die mit den files segmentweise ausgewechselt werden und auf die man sowohl im Parameter-Calculator, als auch in den input-conversions zugreifen kann. Üblicherweise verwendet man sie als eine Art cut-Daten, also etwa Beginn und Dauer, oder zur Anpassung unterschiedlicher samplerates. Sie können aber grundsätzlich auf jeden erdenkbaren Parameter bezogen werden.
Output-Distributor
Der Distributor plaziert die Ergebnisse (output-Variable der Kernmodule) in die durch Parameter festgelegten
Positionen des output-files, der wiederum von einem der oben beschriebenen Formate und Typen sein kann. (Beim
Abspeichern des output-buffers werden die Daten gegebenenfalls automatisch konvertiert). Dabei werden die neuen
Resultat grundsätzlich zu eventuell bereits bestehenden Daten an der betreffenden Position dazuaddiert (gemischt). Eine
Mischroutine im traditionellen Sinn ist somit nicht nötig. Dadurch wird natürlich ein anderes kompositorisches
Denken gefördert: Ich habe innerhalb von 15 Jahren zigtausende von Bandschnitten durchgeführt und eigentlich dabei
nur eines bedauert: daß ich selbst für geringfügige Überlappungen die einfache sequentielle Form aus technischen
Gründen verlassen muß und in parallele Schichten zerlegen, wiewohl sie von der Idee her sequentiell bleibt. Mit der
'sukzessiven Mischung' (die eben nur ein non-realtime-Prozeß gestattet) ist das Problem gelöst. Die Schnitte können
hart sein, die Elemente können sich zeitlich beliebig überlappen - man muß sich darum nicht mehr eigens kümmern.
Unvorhersehbaren Übersteuerungen läßt sich dabei durch einen 'adjust'- Modus vorbeugen. Ein overflow-Detektor entdeckt mögliche Übersteuerungen, justiert den Rechenprozeß auf einen entsprechend geringeren Pegel und korrigiert den bisherigen Inhalt des output-files danach. Werden dabei sehr viele Schichten überlagert (grundsätzlich gibt es ja auf diese Weise keine Grenze in der Anzahl der 'Stimmen'), dann kann das digitale Quantisierungsrauschen zu einem Problem werden.
In diesem Fall empfiehlt sich eine andere Methode: Man definiert den outputfile floatingpoint und wandelt ihn erst am Schluß mit einem 'optimize' in das übliche integer-Format.
Der Distributor verwaltet aber vor allem auch die Anpassung des internen outputs an das gewählte Format des output-files. Das ist so zu verstehen: Einige Kernmodule, Transformer oder Oszillatoren, arbeiten intern zwei-oder vierkanalig; andere können wahlweise in mono oder stereo betrieben werden. Das muß aber nicht unbedingt mit der Spezifikation des output-files zusammentreffen. Alle Kombinationen sind denkbar und verlangen jeweils verschiedene Behandlung. (Die komplexen Transformer zB. arbeiten intern grundsätzlich zweikanalig. Ihr Ergebnis läßt sich wiederum komplex in einem stereo-file abspeichern. Wenn ich es aber nicht weiteren komplexen Operationen unterziehen will, dann genügt es, nur einen Kanal davon als mono-file abzuspeichern). Für alle Kombinationen steht zunächst einmal ein steuerbares Tiefpaß-Filter an allen internen Kanälen zur Verfügung, sowie fade-in und fade-out, die ebenfalls durch Parameter segmentweise festgelegt werden können und je nach Sequenz-Struktur automatisch zu-und weggeschaltet werden. Ab da findet nun eine Verzweigung statt :
In der einfachsten Variante mono:mono genügt eine Amplitude. In der Variante mono:stereo gibt es außer den beiden Amplituden, für den Anteil links und den Anteil rechts, auch noch delays für jeden Anteil. Diese delays können auf Parameterebene mit den Amplituden verkoppelt werden, so daß man sich bei der Komposition mit stereo-Panorama nicht weiter darum kümmern muß, sie können aber auch völlig frei behandelt werden und ebenfalls gesteuert oder moduliert. Im delay-buffer werden Zwischenwerte interpoliert. (In 'Farewell Tempered Piano' zB. ist das stereo-Panorama insgesamt mehr mit delays realisiert, als mit Amplituden). Die Variante stereo:stereo bietet zwei Amplitudenpaare, eines für die gerade Zuordnung (links auf links und rechts auf rechts) und eines für die überkreuzte. Mit diesen vier Parametern sind alle möglichen Panorama-settings und Verengungen durchführbar. Die quadrophonen Varianten sind bislang nur prinzipell implementiert:
Vier Amplituden für mono:quadro und ebenfalls vier Amplituden für quadro:quadro (bei gerader Zuordnung). Ein universelles Vierkanal-Panorama bleibt einer späteren Version vorbehalten. Die reduzierenden Varianten (stereo:mono, quadro:mono, quadro:stereo) entsprechen den vorigen, wobei die Kanäle ausgewählt werden können.
Zero-Break
Bei Prozessen mit Ausklangscharakter (dynamische Oszillatoren, Bewegungs- Modelle, Resonanzen, etc.) ist es oft
nicht abschätzbar, wo die Grenze liegt, ab der sie für uns akustisch nicht mehr relevant sind. Will man ein
unerwünschtes 'Abreissen' des Klanges vermeiden, dann muß man zur Sicherheit etwas 'übers Ziel hinausrechnen' und
mehr oder weniger vergeudete Rechenzeit in Kauf nehmen. (Einige Prozessoren haben auch die fatale Eigenschaft, daß
sie bei manchen Operationen mit winzigen Zahlenwerten extrem langsam werden, so daß gerade der uneffiziente Teil
des Rechenprozesses die meiste Zeit beansprucht). Um dem abzuhelfen, ist am Ende des Distributors ein 'zero-counter'
nachgeschaltet, der für jeden Kanal konsekutive Null-Werte zählt, das heißt, Ergebnisse unter einem bestimmten
Schwellenwert (per default der Grenzwert, der bei der 16bit- Quantisierung gerade Null ergibt). Ab einer festlegbaren
Anzahl von Nullergebnisse besteht dann die Möglichkeit, zum nächsten Segment zu springen, zur nächsten Sequenz
von Segmenten oder überhaupt den Prozeß abzubrechen.
Parameter-Steuerung
Jedem Parameter (mit Ausnahme von Zeiten oder Modi natürlich) kann eine control-Variable zugeordnet werden, die
dieselbe Taktrate hat, wie der übrige Rechenprozeß. Die control-Variablen können von jedem beliebigen input-Kanal
genommen werden, es können aber auch feedbacks der output-Variablen sein, oder side-effects der Kernroutinen. (Eine
Sammlung elementarer Funktions-
Generatoren für die Parametersteuerung ist in Vorbereitung). Zusätzlich können ein gain (Modulationsgrad) und ein
Modus (linear, proportional oder multiplikativ) gesetzt werden. Damit kann jeder Parameter mit seinem konstanten
Listenwert von beliebigen Funktionen überlagert oder moduliert werden, oder überhaupt durch eine externe Funktion
ersetzt werden, wenn man seinen Listenwert Null setzt. (In Nr.2 der Steinbutt-Variationen werden die
Panoramabewegungen durch komplementäre Steuerung der Amplituden mit dem verlangsamten Text bewirkt. In Nr.5
folgen die Frequenzen eines Oszillators dem Wellenverlauf des extrem verlangsamten Textes. Unter den Beispielen
zum Saitenmodell finden sich welche, in denen die Saitenspannung, die pickup-Position oder die Lage der Präparation
durch Steuerung kontinuierlich verändert wird).
Parameter-Calculator
Unter den features, die die Programme von NMS4 von einem Werkzeug für Klangverarbeitung zu einer echten
Kompositions-software machen, ist in erster Linie der Parameter-Calculator zu nennen - ein aufgesetzter Assembler in
einer erweiterten Form von RPN. Ursprünglich war es lediglich eine Dimensionierung in eckiger Klammer, die einem
die Eingabe von manchmal unhandlichen Parameterwerten erleichtert : zB. Ausklingzeiten anstelle von decay-Faktoren
(die in der Regel so bei 0.9999 liegen) oder cutoff-Frequenzen anstelle eines Filter-Faktors zwischen 0 und 1.
In der jetzigen Form kann man mit jedem Parameter eine nahezu beliebig lange Reihe von Operationen assoziieren - eine 'Formel', nach der alle Listenwerte des betreffenden Parameters umgerechnet oder überhaupt generiert werden. Die Bibliothek der Calculator-Operationen enthält einmal alle mathematischen Standardoperationen, wie sie ein moderner Assembler zur Verfügung stellt (auch trigonometrische und Hyperbelfunktionen, etc.), darüber hinaus aber auch eine ständig wachsende Sammlung von komplizierteren Funktionen, die besonders für musikalische oder akustische Aufgabenstellungen nützlich sein können, wie etwa eine Näherungsfunktion für die Abweichung der Obertöne einer präparierten Saite je nach Position und Gewicht der Präparation. (In 'Trio II' ist diese Näherungsformel zur Konstruktion eines eigenen Tonsystemes verwendet, das dem unharmonischen Spektrum einer bestimmten Art von Präparation gerecht wird). Wie man nun mit diesen Calculator benutzt, ist eine reine Stilfrage.
Konventionelle Systeme sind darin nicht vorgegeben, aber genauso formulierbar wie unkonventionelle. Zum Beispiel könnte man eine temperierte Stimmung für das Saitenmodell durch folgenden Ausdruck herstellen :
[oct/12, sq, *0.1]
'oct/12' rechnet den eingegebenen Halbtonschritte in das entsprechende Intervall der zwölfstufig temperierten Stimmung um, mit 'sq' wird es quadriert (denn die Tonhöhe ändert sich mit dem Quadrat der Spannung) und schließlich mit '*0.1' auf die Spannung irgendeiner Bezugstonhöhe abgeglichen. Ordnet man dem Parameter für die Saitenspannung diesen Calculator-Ausdruck zu, dann kann man die Tonstufen der temperierten Stimmung auf die einfachste Art in ganzen Zahlen angeben: 0 repräsentiert den Bezugston, 1 einen Halbton darüber, -1 einen Halbton darunter, 12 die obere Oktave, -12 die untere Oktave. 7.1 wäre dann eine verstimmte Quint, 0.5 ein Viertelton. 'oct/24' würde überhaupt eine Vierteltonstimmung festlegen, 'oct/11.9' eine etwas gedehnte Skala, etc.
Nicht zuletzt kann man im Calculatorausdruck auch die Werte anderer Parameter einsetzen, sowohl deren Listenwerte, als auch eventuell ebenfalls umgerechnete oder generierte Effektivwerte. Somit lassen sich für jeden Parameter mehr oder weniger komplizierte Systeme konstruieren, die, einmal definiert, für die intuitive Arbeitsweise die Eingabe der Parameter so einfach wie möglich machen - in der Regel auf wenige ganze Zahlen beschränkt. Ferner stehen auch alle Möglichkeiten offen, Parameterlisten von beliebigen anderen Programmen zu interpretieren oder anzupassen, seien es nun Strukturgeneratoren oder Analyseprogramme, die auf irgendeine Weise aus soundfiles segmentierte Daten extrahieren. Die Frage, ob die Programme von NMS4 auch 'midi-fähig' sind, ist somit eigentlich auch beantwortet : Ja, sofern die midi-Daten in Listenform als Textfile vorliegen. Es ist keine Hexerei, 'note-on' und 'note-off' in Einsatzzeit und Dauer umzuwandeln, oder die etwas barocke Darstellung von Tonhöhe durch Note, Oktavlage und Abweichung in Cent auf drei Dummy-Parameter zu legen und diese zu einer Frequenz oder einer Spannung zusammenzufassen. (Ein Tutorial, das für derartige Aufgaben kompakte Formeln anbietet, ist in Vorbereitung).
Schließlich können auch Prozesse ohne irgendwelche Listenwerte, rein algorithmisch definiert werden. (In den meisten Teilen der 'Steinbutt-Variationen' ist die Segmentstruktur mit gewichteten Random-Funktionen generiert, ebenso in den 'Monologen' von 'Odyssee'). Für komplizierte Algorithmen empfiehlt es sich allerdings nach wie vor, eigene Programme zu schreiben. Aber gerade da offenbart sich eine ganz wichtige Anwendungsmöglichkeit eines Parameter-Calculators:
Wer Erfahrung hat im Konstruieren von Algorithmen, der kann täglich ein paar aus dem Ärmel schütteln, die zur Gestaltung von musikalischen Prozessen interessant sind. Das genügt aber nicht. In einem Algorithmus, der musikalische Daten liefern soll, gibt es üblicherweise an verschiedenen Stellen Konstanten, für die man einen bestimmten Wert festlegen muß - der Algorithmus braucht ein 'Tuning'. Ob nun das Resultat gut oder schlecht ausfällt, ob es überhaupt Musik ist, hängt von diesem Tuning mindestens so sehr ab, wie von der Struktur des Algorithmus selbst.
In meiner Arbeit hat sich diesbezüglich in den letzten Jahren folgende Methode bewährt: Die verschiedenen Strukturgeneratoren und soundfile- Analysatoren (die den eigentlichen individuellen Teil einer Komposition ausmachen und in dieser Form nur einmal verwendet werden oder nur im Umfeld eines bestimmten Projektes), liefern nur rohe, nicht interpretierte Daten, die ihre Interpretation und Abstimmung erst in ihrer Umsetzung durch die Programme von NMS4 erfahren - oft in vielen Versuchen von Parameter-Zuordnung, Uminterpretation und Verknüpfung. Dazu ein etwas ausführlicheres Beispiel:
In 'Farewell Tempered Piano' verwenden all diese kurzen Charakterstücke (mit Ausnahme der vier Toccata) nur ein einziges sample eines simulierten Saitenklanges. Ein eigens dafür programmierter Strukturgenerator, der sozusagen die Grundidee der Komposition repräsentiert, liefert nichts weiter als eine endliche Serie auf-und absteigender Intervalle in ganzzahligen Brüchen. Dabei ist für jedes dieser kurzen Preludes, Rondos und Arpeggios ein Set von möglichen Intervallen vorgegeben. Der Algorithmus generiert daraus eine Reihe, und zwar so, daß sich die jeweils resultierende Tonhöhe mit dem kleinstmöglichen harmonischen Schritt harmonisch immer weiter vom Ausgangston entfernt. (Ein eigenes Zahlenformat, sogenannte Primzahl-Vektoren war dazu nötig, weil die resultierenden ganzzahligen Brüche das integer-Format sehr rasch übersteigen). Die Reihe ist beendet, wenn keine Lösung mehr möglich ist. Somit liefert das Programm nichts weiter als eine Liste von zwei Reihen ganzer Zahlen - Quotient und Dividend für die Intervallfortschreitung. Das ist alles. Davon sind nun durch Calculator-Verknüpfungen alle musikalisch wirksamen Strukturen abgeleitet : Tonhöhen (scanning-speed), Zeitstrukturierung, Sequenz- Bildung, Rhythmik, Akzentuierung, Panorama, Delay, Filterung etc. Das Tuning (im weitesten Sinn) wird somit zum eigentlich interpretativen Teil der Komposition.
Sobald man davon ausgeht, daß ein Computationsprozeß, dessen Endergebnis einen Zeitfluß repräsentieren soll (soundfile), in diskrete Abschnitte (Segmente) unterteilt werden kann, gibt es grundsätzlich zwei Möglichkeiten, wie diese Segmente im Zeitkontinuum repräsentiert sind : frei, voneinander unabhängig - oder konsekutiv, aneinander gebunden (Sequenz). Inhaltlich ist damit nichts vorweggenommen: Ein Segment kann für ein ganzes, in sich geschlossenes Musikstück stehen; viele Segmente können zusammen etwas formieren, das wir als nur ein musikalisches Element auffassen. (Wenn ich die Aufnahmen von drei Sätzen einer Sinfonie als soundfiles gespeichert habe und nun diese drei soundfiles aneinanderhängen will, dann ist das ein Prozeß in drei Segmenten. Wenn ich, in Anlehnung an die alten Synthesizer, den dynamischen Verlauf eines Klanges in drei Phasen bestimmen will - attack, sustain, release - dann ist das ein Prozeß in drei Segmenten. Wenn ich drei Tonspuren bzw. soundfiles sukzessive abmischen will, dann ist das ebenfalls ein Prozeß in drei Segmenten).
In den Programmen von NMS4 können auf einfache Weise alle möglichen Sequenz-Strukturen, beliebige Kombinationen von freien und konsekutiven Segmenten, gebildet werden - und zwar völlig unabhängig für output und alle inputs. So kann zum Beispiel ein input (soundfile) kontinuierlich gescannt werden, während er aber portionsweise völlig disparat in den outputfile geschrieben wird, wobei auch die Reihenfolge der Prozeß-Segmente nicht der resultierenden zeitlichen Reihenfolge entsprechen muß und auch die Zeitrichtung für jedes Segment beliebig gewählt werden kann (einfach durch negative Dauernangabe).
Mit der Sequenz-Struktur ist eine Reihe von Automatismen verbunden. Fade-in und fade-out zB. werden nur an freien Segmentenden aktiviert, kontinuierliche Parameter-Übergänge (portamento im weitesten Sinn) nur zwischen zwei aneinander gebundenen.
Vor allem für die dynamischen Prozesse macht es einen grossen Unterschied, ob ein Segment frei beginnt, oder an ein vorangehendes gebunden ist : Bei freien Segmenten werden nämlich alle Arbeitsspeicher gelöscht (bzw. mit den Werten der 'Ruhelage' initialisiert), während für gebundene Segmente der vorige Zustand übernommen wird. Für das Saitenmodell würde das bedeuten, daß ein neuer Anschlag, oder eine Veränderung die Saite trifft, während sie noch vom vorigen in Schwingung ist. ('Funkenflug' ist ein gutes Beispiel dafür: Jedes der neun Saitenmodelle wird in einer durchgehenden Sequenz behandelt, ist praktisch ununterbrochen in Schwingung, auch wenn es dabei über lange Strecken nicht hörbar ist -es ist 'vorhanden' - als imaginäres Klangobjekt).
© 2000, zuletzt geändert am 17. Oktober 2001.