Skip to content

News Arts and Science Teaching Media Library Services IEM - intern Contact
  You are not logged in Link icon Log in
You are here: Home » Kunst & Forschung » Komposition » Archiv nach Zeit » Produktionen von 2000 bis 2003 » Nachricht von Charon » "Bariton - Klavier - Morphing" mittels additiver Synthese

"Bariton - Klavier - Morphing" mittels additiver Synthese

Johannes Kalitzke "Nachricht von Charon"

Thomas Musil

Diese Beschreibung gliedert sich in folgende Abschnitte:

  1. Prinzip von Morphing mittels add. Synthese
  2. Hardware-Umgebung und Betriebs-System
  3. Vorbereitungen, Analysen
  4. Bedienungs-Anleitung von morph06.pat
  5. Timing
  6. Tables
  7. File-Struktur


1. Prinzip von Morphing mittels add. Synthese

  • Primär-Ziel:
    Es gilt, einen kontinuierlichen Übergang zwischen 2 Klängen mit Partial-Ton-Struktur zu schaffen, wobei auf halbem Wege nicht die Summe beider Klänge, sondern ein neuer Zwischen-Klang zu hören ist.
  • Erweitertes Ziel:
    Der Morph soll zeit-verzerrt spielbar sein; man soll beliebig zwischen den beiden Klängen, bezüglich ihrer Grundfrequenz und ihrer Formant-Struktur, hin- und her-blenden können; die Grunfrequenzen beider Klänge sollen verstimmbar sein; ein eventuelles Vibrato eines Klanges soll regulierbar sein.
  • Voraussetzungen:
    Beide Klänge bestehen aus zeitlich langsam veränderlichen Partialton-Verläufen. (Die Modulations-Frequenzen von Partial-Frequenz und/oder Partial-Amplitude sollen kleiner 10 Hz sein.)
  • Realisierung:
    Da sich der Anfang eines Instrumental-Tones mittels add. Synthese nur mittelmäßig gut realisieren läßt, wird vom Original-Soundfile auf die add. Synthese übergeblendet. Der Kern des Morph-Synthesizers besteht aus einer Bank von 120 Oszillatoren. Jeder Oszillator ist zeitlich frei steuerbar bezüglich seiner Amplitude und seiner Frequenz, bzw. läßt sich in einen definierten Initial-Phasen-Zustand bringen. Die interpretierten Analyse-Daten eines Klanges bestehen aus einem Ensemble von je einem Partial-Amplituden-Vektor und einem Partial-Frequenz-Vektor pro Abtast-Periode (z.B. 10 ms). Die Vektorlänge beträgt z.B. 120 Teiltöne. Der Momentan-Zustand eines Klanges läßt sich zu jedem Zeitpunkt bestimmen, indem man die zeitlich benachbarten Freq.- und Ampl.-Vektoren linear interpoliert. Das Morphing von 2 Klängen funktioniert wie folgt:
    man bestimmt zu einem Zeitpunkt die interpolierten Freq.- und Ampl.-Vektoren von einem Klang A und einem Klang B, und liest aus 2 Tabellen den Freq.-Morph-Faktor bzw. den Ampl.-Morph-Faktor zu jenem Zeitpunkt, und gewichtet die Partial-Freq. von A mit dem F-M-Faktor, die Partial-Freq. von B mit (1 - F-M-Faktor), die Partial-Ampl. von A mit dem A-M-Faktor, die Partial-Ampl. von B mit (1 - A-M-Faktor), und addiert die Partial-Freq._Paare bzw. die Partial-Ampl.-Paare von A und B. Das Problem, dass die beiden Klänge A und B unterschiedlich lang sind, bzw. dass nur bestimmte Abschnitte der Klänge relevant sind, löst man insofern, indem man eine neue Gesamt-Morph-Länge bestimmt, und die Original-Daten der 2 Klänge mittels zweier Stauch/Dehn-Tabellen zeitlich verzerrt ausliest. Zusätzlich werden von beiden Klängen, in einem bestimmten Zeit-Ausschnitt, noch die Mittelwerte ihrer Partial-Ampl. und -Freq. berechnet. Damit kann man das Vibrato (Tremolo) eines Klanges zusätzlich verstärken, abschwächen oder sogar kreuz-modulieren. Mittels add. Synthese läßt sich auch noch ganz einfach die Tonhöhe transponieren, indem man die Partial-Freq. der Quell-Klänge mit einem Verstimmungs-Faktor multipliziert.

Die Amplitude, bzw. die Frequenz jedes einzelnen Oszillators wird zwischen 2 Abtast-Perioden (z.B. 10 ms) noch 441 mal linear interpoliert (SR = 44100 Hz).

Legende:

piPartial-Index (1 .... 120).
tiZeit-Index der Partial-Vektoren, alle 10 ms gesampelt (0 .... Endzeit/0.01 ms).
tbeliebige Zeit.
As[pi][ti]Amplitude des pi-ten Quell-Teiltons zur Zeit ti*0.01 ms.
Ad[pi][ti]Amplitude des pi-ten Ziel-Teiltons zur Zeit ti*0.01 ms.
As[pi][t]Amplitude des pi-ten Quell-Teiltons zur Zeit t.
Ad[pi][t]Amplitude des pi-ten Ziel-Teiltons zur Zeit t.
Am[pi][t]Amplitude des pi-ten Morph-Teiltons zur Zeit t.
Fs[pi][ti]Frequenz des pi-ten Quell-Teiltons zur Zeit ti*0.01 ms.
Fd[pi][ti]Frequenz des pi-ten Ziel-Teiltons zur Zeit ti*0.01 ms.
Fs[pi][t]Frequenz des pi-ten Quell-Teiltons zur Zeit t.
Fd[pi][t]Frequenz des pi-ten Ziel-Teiltons zur Zeit t.
Fm[pi][t]Frequenz des pi-ten Morph-Teiltons zur Zeit t.
Ma[t]Morph-Überblend-Zustand der Amplitude zur Zeit t.
Mf[t]Morph-Überblend-Zustand der Frequenz zur Zeit t.

Alle Amplituden-Berechnungen finden im logarithmisch transformierten Bereich statt (dB).

As[pi][t] = As[pi][tn] + (t - tn) * (As[pi][tn+1] - As[pi][tn]) für tn <= t/10 ms < (tn+1); Ad[pi][t] = Ad[pi][tn] + (t - tn) * (Ad[pi][tn+1] - Ad[pi][tn]) für tn <= t/10 ms < (tn+1); Fs[pi][t] = Fs[pi][tn] + (t - tn) * (Fs[pi][tn+1] - Fs[pi][tn]) für tn <= t/10 ms < (tn+1); Fd[pi][t] = Fd[pi][tn] + (t - tn) * (Fd[pi][tn+1] - Fd[pi][tn]) für tn <= t/10 ms < (tn+1); Am[pi][t] = Ma[t] * As[pi][t] + (1 - Ma[t] * Ad[pi][t]) Fm[pi][t] = Mf[t] * Fs[pi][t] + (1 - Mf[t] * Fd[pi][t]) ------------------------------------------------------------------------ 2.Hardware-Umgebung und Betriebs-System Fostex VC-8 Wandler einschalten; iem10 (linux-Rechner) starten; einloggen auf iem10; erste Unix-Shell öffnen; "rlogin pressl" 'return'; "apanel" 'return'; eventuell bei apanel noch ADAT-In und ADAT-Out anwählen; "top" 'return'. zweite Unix-Shell öffnen; "rlogin pressl" 'return'; "tcsh" 'return'; "maxmorph" 'return'; ( altes fts-Max 1.5.3 für SGI wird gestartet ) den Class-Patch "libmorph_k.pat" verkleinern; "morph06.pat" öffnen. ------------------------------------------------------------------------ 3.Vorbereitungen, Analysen ( siehe 7.File-Struktur ) ------------------------------------------------------------------------ 4.Bedienungs-Anleitung von morph06.pat Gesamt-Ansicht: [Image] a.) wenn es schnell gehen soll: Wenn "morph06.pat" geöffnet ist: 2x "start" klicken bei "system:" links oben; "out-gain"-Regler aufziehen; "Preset-Nr." wählen (0 .. 107); "recall"-Button von "file&table¶" klicken; 20 sec. warten; "start" bei "MORPH" klicken; sollte schon morphen. b.) wer es genauer wissen will: Die Bedienungs-Oberfläche von "morph06.pat" lässt sich in folgende Teile gliedern: ( Bezüglich der Schreibweise: unter "Anführungs-Zeichen stehende, unterstrichene Begriffe" sind Bedienungs-Elemente des Patches ) * System & Priority & Help [Image] Hier wird fts gestartet und gestoppt ("start", "stop"). Wenn die cpu-Leistung von fts unter 85 % liegt, kann die fts-priority eingeschalten werden; dann gibt es keine Aussetzer mehr (Toggle-Switch von "ftspriority"). Um Patcher leichter zu öffnen, oder um Numberboxes leichter zu beschreiben, soll man fts stoppen und später wieder starten. Bei "help" erscheint dieser Text. * 5-Table-Editor [Image] Hier kann man gerade Linien-Stücke innerhalb einer Table zeichnen. Dafür wählt man zuerst die Table ("sf1", "sf2", "fm", "am", "vib2"), dann x1, x2, y1, y2 und klickt dann "line". Um die Veränderung auch zu hören, muss man noch "store" bei "table-only" klicken, damit der Table-Inhalt in den Table-Interpolierer kopiert wird ( siehe File & Table & Para ). Mittels "copy" wird die gewählte Table in einen Copy-Buffer geladen, mittels "paste" kann man den Copy-Buffer in eine neugewählte Table speichern. "copy" & "paste" funktioniert nicht nur innerhalb eines Parameter-Presets, sonder gilt auch von einem Table-Preset zu einem anderen. Auch hier gilt wieder: um die Veränderung auch zu hören, muss man noch "store" bei "table-only" klicken, damit der Table-Inhalt in den Table-Interpolierer kopiert wird. * Click-Editable-Tables [Image] Falls eine der 5 Tables geschlossen wurde, kann man sie hier wieder öffnen (Doppel-Klick auf die jeweilige "table" ). * MORPH [Image] Slider "out-gain" ist für Aufnahme- und Ausgangs- Lautstärke zuständig. Mittels "start"-Button startet man: 1. den gewählten Morph, und 2. recordet ihn gleichzeitig in ein 35 sec. Sample, und 3. recordet mit einem Delay von "crossfade beg." ms ein Stereo-Sample von 1 sec. ( Die beiden Kanäle sind: Original-File-Sample und das um 10 ms verzögerte Ergebnis der add. Synthese ) Mittels "stop" unterbricht man frühzeitig den Morph, bzw. man bringt die "morph_engine" in einen definierten Anfangs-Zustand. Mittels "sync" kann man, nach erstmaligen Abspielen des Morphs, die Zeit des maximalen Kreuz-Korrelations-Wertes vom Stereo-Sample automatisch nach "samp.del." übertragen. ( damit beim Crossfade die Phasen von Sample und add. Synth. gleich sind ) Mittels "save_as" wird der recordete Morph dann in einem gewähltem Soundfile gespeichert (*.snd). Die "dB" Number-Box zeigt den Spitzen-Pegel von DAC bzw. Morph-Recorder an. "_open_addan1" öffnet und interpretiert die Quell-Dateien ( *.ADD und *.F0 ) für das File1 des add. Synthese-Controllers, und speichert den Datei-Namen unter der aktuellen Preset-Number. "_open_addan2" öffnet und interpretiert die Quell-Dateien ( *.ADD und *.F0 ) für das File2 des add. Synthese-Controllers, und speichert den Datei-Namen unter der aktuellen Preset-Number. "_open_samp" öffnet das Soundfile ( *.snd im Sun/Next-Format ) , dass am Beginn des Morphs dann übergblendet wird auf die add. Synthese, und speichert den Datei-Namen unter der aktuellen Preset-Number. * File & Table & Para [Image] Hier wird zuerst der gewünschte Preset gewählt: 0 ... 107. Mittels "load" und "save" werden die Presets geladen bzw. gespeichert. Mittels "recall" werden 1. die Parameter-Werte in die Numberboxes und in die jeweiligen Prozess-Objekte geladen, und 2. die Tables mit dem gespeicherten Inhalt neu gezeichnet. Mittels "store" werden 1. die Parameter-Werte von den Numberboxes in den Preset-Speicher kopiert, und 2. die Table-Inhalte in den Preset-Speicher und Table-Interpolierer kopiert. Um eine unnötige Verzögerung bei "recall" zu verhindern (es werden jedes mal neu die add. Analyse-Daten geladen und interpretiert, das können bis zu 2 x 10 Mbyte sein), gibt es auch "recall" von "table-only" und "recall" von "parameter-only". Die Text-Box "state" darunter gibt die jeweiligen Lade-Speicher-Aktivität an. * File-Parameter (const.) [Image] Hier werden die wichtigsten Parameter der additiven Analyse angezeigt. Erste Zeile: File 1 = z.B. Klavier; zweite Zeile: File 2 = z.B. Bariton. * Editable Parameter [Image] Hier werden die Morph-Parameter eingegeben bzw. angezeigt. Falls mehrere Number-Boxes knapp übereinander stehen, gilt: erste Zeile: add. Synthese-File 1 = z.B. Klavier; zweite Zeile: add. Synthese-File 2 = z.B. Bariton; dritte Zeile : Sample-File; die lose geordneten Number-Boxes stehen für gemeinsame Parameter. "detune [ht]" sind Frequenz-Verstimmungs-Faktoren in Halbtönen für add. Synth. 1 und 2 und Sample. Hier sollte die Verstimmung zwischen dem add. Synth.-Wert und Sample-Wert übereinstimmen, von welchem zu Morphen begonnen wird. "gain [dB]" gain in dB für add. Synth. 1 und 2 und Sample. Auch hier sollte die Verstärkung zwischen dem add. Synth.-Wert und Sample-Wert übereinstimmen, von welchem zu Morphen begonnen wird. "avrg-beg [ms]" Beginn der Berechnung von gemittelter Amplitude und gemittelter Frequenz für alle Partial-Töne. "avrg-end [ms]" Endzeitpunkt der Berechnung von gemittelter Amplitude und gemittelter Frequenz für alle Partial-Töne. "crossfade beg. [ms]" Beginn des Crossfades von Sample auf Morph-Quell-Add.Synthese. "crossfade dur. [ms]" Dauer des Crossfades. "morph-time [ms]" ist die gemeinsame Spiel-Dauer des Morphs. Daraus ergeben sich die zeitlichen Stauch/Dehn-Faktoren bezüglich der Differenzen von "end_add_synth - begin_add_synth - crossfade_beg - crossfade_dur" von file 1 und 2. Diese Zeit bildet auch den Skalierungs-Bereich der Horizontal-Achse aller 5 Tables. Zur Berechnung der gesamten Morph-Spielzeit muss man noch "crossfade_beg" + "crossfade_dur" hinzu addieren. "vibrato2-full-scale" vertikaler Skalierungs-Faktor für die Table "vibrate2". Unten 0 % Vibrato, oben Skalierungs-Faktor * 100 % Vibrato. "samp.del. [ms]" Dieser Wert wird automatisch nach dem erstmaligen Abspielen eines Morphs und anschließend gedrückten "sync" gesetzt ( siehe "sync" bei MORPH ). "osc_interpol_time [ms]" ist einerseits die Abtast-Perioden-Dauer, binnen der die add. Synth.-Werte "time-gestretcht" transformiert ausgelesen werden; bzw. die Interpolations-Zeit für die line~-Objekte der Oszillatoren. "# of used oscillators" Anzahl der aktiven Oszillatoren bei der additiven Synthese. Die Anzahl ist physikalisch begrenzt bei 120, und ist cpu-Leistungs-bedingt begrenzt bei ca. 90. Da immer 5-er-Banken von Oszillatoren geschalten werden, ist es immer sinnvoll nur Zahlen wie 5, 10, 15 .... 75, 80, 85 zu verwenden. * File-Names [Image] Hier werden die 3 Files angezeigt, die zum Morph nötig sind: "add.synth.-klavier" Filename für Additive Synthese von Klavier; "add.synth.-bariton" Filename für Additive Synthese von Bariton; "sample-name" Filename für Sample, das vor dem Crossfade und während des Crossfades gespielt wird. ------------------------------------------------------------------------ 5.Timing Abkürzungen und Beschreibungen der einzelnen Parameter und der daraus folgenden Variablen: x.......................add._synth._beginning_index (1 oder 2); mt....................morphing_time; astb1................add._synth._time_begin_1; astb2................add._synth._time_begin_2; aste1................add._synth._time_end_1; aste2................add._synth._time_end_2; cfsastb.............crossfade_sample->add._synth._time_begin; cfsasd...............crossfade_sample->add._synth._duration; dtf1..................detune_factor_1; dtf2..................detune_factor_2; dtfs =: dtfx......detune_factor_sample; hst1..................hoppsize_time_1; hst2..................hoppsize_time_2; hstx..................hoppsize_time_x; hstm.................hoppsize_time_morph; asd1 = aste1 - astb1 ..............add._synth._duration_1; asd2 = aste2 - astb2 ..............add._synth._duration_2; asdx = astex - astbx ..............add._synth._duration_x; sf1 = mt / asd1 ......................stretch_factor_1; sf2 = mt / asd2 ......................stretch_factor_2; sfx = mt / asdx ......................stretch_factor_x; ccfsastbx = sfx * round(hstx, (cfsastb * dtfx / sfx)) / dtfx .........corrected_crossfade_sample->add._synth._time_begin_x; ccfsasdx = round(hstm, cfsasd) ...................................................corrected_crossfade_sample->add._synth._duration_x; mtbt = mt - ccfsastbx - ccfsasdx ...............................................morphing_table_base_time; Unter der Voraussetzung, dass die beiden add. Analyse-File-Daten auf "mt" gedehnt bzw. gestaucht werden, unterscheiden wir prinzipiell 3 Zeit-Intervalle: 1.) reines Sample; [0 ... "ccfsastbx"] 2.) Crossfade von Sample auf add. Synthese; ["ccfsastbx" ... ("ccfsastbx" + "ccfsasdx")] (Für einen glatten Übergang gilt: die Anfangs-Werte von f-morph- und a-morph-Table müssen beide entweder 0% oder 100 % betragen) 3.) reine add. Synthese. [("ccfsastbx" + "ccfsasdx") ... "mt"]. Annahme: x = 1; Morph von 1 nach 2; Nach dem Start-Bang wird Sample-File (identisch zu add. Analyse-File 1) von 0 ms bis 2000 ms gestartet mit einer Steigung von 0 ms bis ("dtf1"*2000) ms. Bei "ccfsastbx" ms wird die Phase, Ampl. und Freq. von add. Synthese gesetzt; gleichzeitig werden die Freq.- und Ampl.-Werte der Oszillatoren-line~-Objekte mit den Rampen-Werten zur Zeit ("ccfsastbx" + "hstm") ms beschickt; zur selben Zeit wird die Minimal-Fehler-Analyse gestartet. Die nächsten "ccfsasdx" ms wird vom Sample auf die add. Synthese übergeblendet; das Sample wird noch weiter ausgelesen. Bei ("ccfsastbx" + "ccfsasdx") ms angekommen, ist das Sample völlig ausgeblendet, die add. Synthese voll eingeblendet. Ab diesem Zeitpunkt wird das erste mal über die Tables transformiert; der Zeitpunkt "ty" in Echtzeit wird folgendermaßen in die add. Analyse-Zeit-Vektoren transformiert: (Annahme: die Tables sind 128 x 128 groß) tya = ty - (ccfsastbx + ccfsasdx); if(tya < 0) {tyd1 = tyd2 = tya}; else { tyb = 128 * tya / mtbt; tyc1 = mtbt * Stretch-Table_1(tyb) / 128; tyc2 = mtbt *Stretch-Table_2(tyb) / 128; tyd1 = tyc1 + (ccfsastbx + ccfsasdx); tyd2 = tyc2 + (ccfsastbx + ccfsasdx); } tye1 = tyd1 / sf1; tye2 = tyd2 / sf2; Ampl1-Freq1 = interpol(tye1); Ampl2-Freq2 = interpol(tye2). Während der Crossfade-Periode extrapoliert man die 5 Tables nach folgender Vorschrift: die beiden Stretch-Tables werden im neg.-neg.-Quadranten als 45 Grad-Gerade interpretiert; für die beiden Morph-Tables und die Vibrato2-Table gilt: die negativen Zeit-Werte werden auf Null geclippt. (Vorausgesetzt die Table-Werte sind in den richtigen Extrem-Zuständen) Am Ende bei "mt" ms angekommen, wird der Morphing-Prozess beendet, indem alle Partial-Amplituden auf 0.0 gesetzt werden. ------------------------------------------------------------------------ 6.Tables: * stretch1 vertikal: Sample-Ort von File1 = Klavier; horizontal: Morph-Basis-Zeit; * stretch2 vertikal: Sample-Ort von File2 = Bariton; horizontal: Morph-Basis-Zeit; * f-morph vertikal: Frequenz-Morph-Parameter (0 = 100 % Klavier; 127 = 100 % Bariton); horizontal: Morph-Basis-Zeit; * a-morph vertikal: Amplituden-Morph-Parameter (0 = 100 % Klavier; 127 = 100 % Bariton); horizontal: Morph-Basis-Zeit; * vibrate2 vertikal: Vibratio-Parameter von File2 ( 0 = 100 % devibriert; [127 / vibrato2-full-scale] = Original-Bariton-Vibrato; 127 = 100 * vibrato2-full-scale % Bariton-Vibrato ); horizontal: Morph-Basis-Zeit; ------------------------------------------------------------------------ 7.File-Struktur vom home-Verzeichnis aus ( z.B. ~ = /Net/iem/Benutzer/rrh ) wird folgender Ordner-Baum aufgebaut: ~/fts/lib für Max-fts-Projekt-Bibliotheken. ~/fts/lib/config/origin ~/fts/lib/config/o2r10k ~/fts/lib/config/o2r5k für die verschiedenen Architekturen die jeweiligen IO-Konfigurationen. ~/fts/lib/iem für die max-startup-scripts mit iem-Bibliothek und dem iem-Klassen-Patch. ~/fts/lib/iem/abs für die Abstraktions-Patches der iem-Bibliothek. ~/fts/lib/iem/help für die help-Patches der iem-Bibliothek-Abstraktions-Patches und der iem-Bibliothek-externals. ~/fts/lib/morph_k für die max-startup-scripts mit iem-Bibliothek, morph_k-Bibliothek und dem morph_k-Klassen-Patch. ~/fts/lib/morph_k/abs für die Abstraktions-Patches der morph_k-Bibliothek. ~/fts/lib/morph_k/help für die help-Patches der morph_k-Bibliothek-Abstraktions-Patches und der morph_k-Bibliothek-externals. ~/fts/lib/morph_k/addan/klav ~/fts/lib/morph_k/addan/bla ~/fts/lib/morph_k/addan/ble ~/fts/lib/morph_k/addan/bli ~/fts/lib/morph_k/addan/blo ~/fts/lib/morph_k/addan/bll ~/fts/lib/morph_k/addan/blm für die Ergebnisse der additiven Analyse mittels "addan"-Programmes; klav ... Klavier, bla ... bariton_lang_A, ble ... bariton_lang_E, bli ... bariton_lang_I, blo ... bariton_lang_O, bll ... bariton_lang_L, blm ... bariton_lang_M; man muss die Analyse-Dateien *.ADD und *.F0 (partials und fundamental) mittels "Fetch"-Programm in das Unix-Netz kopieren und dann unbenennen ( im jeweiligen Ordner mit den jeweiligen extensions ); z.B. Bariton_lang_A in bla; Bariton_kurz_L in bkl; *.ADD in *.add; *.F0 in *.f0; und nur die Kurzbezeichnung der Tonhöhe verwenden: gg für GG = G, hh für HH = H, cis für CIS = #c, e für E = e, fis für FIS = *f, ais für AIS = #a, c1 für C1 = c1, es1 für ES1 = be1, f1 für F1 = f1. ~/fts/lib/morph_k/sound/klav ~/fts/lib/morph_k/sound/bla ~/fts/lib/morph_k/sound/ble ~/fts/lib/morph_k/sound/bli ~/fts/lib/morph_k/sound/blo ~/fts/lib/morph_k/sound/bll ~/fts/lib/morph_k/sound/blm für die jeweiligen Original-Sounds der additiven Analyse; das "addan"-Programm benötigt ein *.aiff-File, dieses muss man mittels "Fetch"-Programm in das Unix-Netz kopieren und eventuell erst mit der extension *.aiff versehen; dann in ein *.snd umwandeln und in den jeweiligen richtigen Ordner moven. ~/fts/lib/morph_k/presets für die jeweiligen Presets von Morph.pat; morph_kbl steht für morph, klavier, Bariton, lang; pbank.fix steht für pbank-object Fix-Parameter = Filenames; fibank.para steht für float-int-bank-object mit variablen Parameter; tab.amorph steht für table-pool-object mit speicherbaren table-sets und Amplituden-Morph-Verlauf; tab.fmorph steht für table-pool-object mit speicherbaren table-sets und Frequenz-Morph-Verlauf; tab.vibrate2 steht für table-pool-object mit speicherbaren table-sets und Vibrations-Verlauf von File 2; tab.stretch1 steht für table-pool-object mit speicherbaren table-sets und Time-Stretching-Verlauf von File 1; tab.stretch2 steht für table-pool-object mit speicherbaren table-sets und Time-Stretching-Verlauf von File 2. ~/fts/lib/origin ~/fts/lib/o2r10k ~/fts/lib/o2r5k für die verschiedenen Architekturen die jeweiligen dynamisch link-baren Bibliotheks-Dateien von iem und morph_k. ------------------------------------------------------------------------


Last modified 01.02.2011