stockhausen-studie ii dt widgets.csd

Upload: frangomez18

Post on 04-Apr-2018

222 views

Category:

Documents


0 download

TRANSCRIPT

  • 7/30/2019 Stockhausen-Studie II Dt Widgets.csd

    1/35

    -odac -m0ksmps = 16nchnls = 20dbfs = 1

    ;============================================================================;;============================================================================;;============================================================================;; KARLHEINZ STOCKHAUSEN: STUDIE II (1954) ;;============================================================================;;============================================================================;; GENERIERT IN CSOUND VON JOACHIM HEINTZ ;; VERSION 1, NOVEMBER 2009 ;;============================================================================;;============================================================================;;============================================================================;

    ;Dies ist keine Transkription der "Studie II" Stockhausens, wie man sie nach ;;der Partitur leicht anfertigen kann. Es ist eine Generierung smtlicher ;;musikalischer Ereignisse in Echtzeit und aus zwei Grundlagen: ;

    ;1) der Folge 3 - 5 - 1 - 4 - 2, und ;;2) einer Reihe von Entscheidungen und "Methoden" (also beschreibbaren Regeln,;Verfahren) auf verschiedenen Ebenen, die dazu fhren, dass aus der ursprng-;;lichen Zahlenfolge zunchst ausgedehnte Reihenfolgen oder Zahlenquadrate ;;entstehen, dann eine Vorordnung der Tonhhen, Dauern und Lautstrken, und ;;schlielich die Ableitung der einzelnen musikalischen Ereignisse in den fnf;;Teilen. ;; ;;Wenn etwas einer beschreibbaren Regel folgt, ist es auch programmierbar. ;;Die Nachprogrammierung des Kompositionsprozesses selbst zeigt aber auch, wie;;vielfltig und phantasievoll die Verfahren waren, die Stockhausen hier ange-;;wandt hat, und wie sehr die musikalische Intuition immer wieder den Aus- ;;schlag gegeben hat bei der Frage, ob eine Verfahrensweise so weiterlaufen ;

    ;soll wie bisher oder gendert werden soll. Dieses bestndige Hinhren auf ;;das, was entsteht, und die Bereitschaft, darauf zu reagieren mit den eigenen;;Methoden und Verfahrensweisen: das lsst sich heute noch von diesem Stck ;;lernen.; ;;Diese Arbeit wre nicht mglich gewesen ohne die umfassende Analyse von ;;Heinz Silberhorn (Die Reihentechnik in Stockhausens Studie II, Rohrdorfer ;;Musikverlag 1980). Es bleiben nur wenige Leerstellen; vor allem die Frage ;;nach den Hllkurven. Ich bin davon berzeugt, dass mindestens die Hllkurven;;fr die Teile 1 bis 4 seriell ableitbar sind. Bei den Teilen 2 und 4 sind ;;die Fnferreihen schon sichtbar (s.u.). Ich hoffe, die Ableitungen lassen ;;sich finden und in sptere Versionen einarbeiten. ;; ;

    ;In dieser ersten Version habe ich nicht gekennzeichnet, wo Stockhausens ;;(meist kleine) Abweichungen von den Reihenablufen bernommen werden und wo ;;nicht. Das soll in spteren Versionen geschehen, und dem Benutzer die Wahl ;;gelassen werden. Auch sonst habe ich noch viele Ideen fr die nchste Ver- ;;sion. ber Korrekturen, Anregungen und Kritik (an jh at joachimheintz.de) ;;freue ich mich und werde versuchen, sie einzuarbeiten. ;; ;; joachim heintz, 15.11.09 ;

    ; (fr QuteCsound: Courier 18, Tab 70);

  • 7/30/2019 Stockhausen-Studie II Dt Widgets.csd

    2/35

    ;============================================================================;;============================================================================;; INHALTSVERZEICHNIS ;;============================================================================;; I. OPCODE-DEFINITIONEN ;; A. ALLGEMEINE FUNKTIONEN ;; B. SPEZIELLERE METHODEN FR STOCKHAUSENS STUDIE II (SS2_...) ;; 1. ZUR GENERIERUNG DER REIHEN ;; 2. ZU DEN GRUNDTABELLEN ;; 3. ERZEUGUNG VON TABELLEN EINES PARAMETERS FR EINEN TEIL ;; 4. SPEZIELLE VERFAHREN IN EINIGEN TEILEN ;; 5. GENERIERUNG DER STARTZEITEN ;; 6. LAUTSTRKEN UND HLLKURVEN ;; 7. AUSLSEN DER EREIGNISSE ;; II. GENERIERUNG DER STRUKTUREN UND KLNGE ;; A. DIE REIHEN UND DIE ZAHLENQUADRATE ;; B. GRUNDTABELLEN FR FREQUENZEN, DAUERN, INTENSITTEN ;; C. DIE EREIGNISSE IN DEN EINZELNEN TEILEN ;; 1. TEIL 1 ;; 2. TEIL 2 ;; 3. TEIL 3 ;

    ; 4. TEIL 4 ;; 5. TEIL 5 ;; 6. CODA ;; 7. BERECHNUNG DER GESAMTDAUER UND AUDIO-OUTPUT ;; 8. UNTERINSTRUMENT ZUR ERZEUGUNG EINER KLANGMISCHUNG ;;============================================================================;;============================================================================;

    ;============================================================================;;============================================================================;;============================================================================;; I. OPCODE-DEFINITIONEN ;

    ;============================================================================;;============================================================================;;============================================================================;

    ;============================================================================;;============================================================================;; A. ALLGEMEINE FUNKTIONEN ;;============================================================================;;============================================================================;

    opcode TabCopyGroupIn_i, 0, iiiii;setzt eine gruppe von werten von einer tabelle (array, liste) in eine andere. a

    rgumente:;basistabelle, erster index zu lesen, wie viele indices zu lesen, zieltabelle, erster index zu schreibenisrc, istrtindx, ihowmany, idest, istrtwrite xinireadindx = istrtindxloop:ival tab_i ireadindx, isrc

    tabw_i ival, istrtwrite, idestistrtwrite = istrtwrite + 1

    loop_lt ireadindx, 1, istrtindx+ihowmany, loop

  • 7/30/2019 Stockhausen-Studie II Dt Widgets.csd

    3/35

    endop

    opcode TabMkPartCp_i, i, iiio;kopiert ihowmany werte beginnend bei index istrtindx in der basistabelle isrc zu einer neuen tabelle (beginnend bei index istrtwrite mit 0 als default) und gibt dessen bezeichnung icop zurckisrc, istrtindx, ihowmany, istrtwrite xinicop ftgen 0, 0, -(ihowmany + istrtwrite), -2, 0ireadindx = istrtindxloop:ival tab_i ireadindx, isrc

    tabw_i ival, istrtwrite, icopistrtwrite = istrtwrite + 1

    loop_lt ireadindx, 1, istrtindx+ihowmany, loopxout icop

    endop

    opcode TabMkCp_i, i, i;schafft eine neue tabelle icop als kopie von isrc und gibt ihre bezeichnung zurckisrc xinisrclen = ftlen(isrc)icop ftgen 0, 0, -isrclen, -2, 0

    tableicopy icop, isrc

    xout icopendop

    opcode TabMultRecurs_i, i, iii;setzt istart auf index 0 der neu geschaffenen tabelle ift. multipliziert die folgenden werte rekursiv mit imult bis isize erreicht ist, und gibt ift zurckisize, istart, imult xinift ftgen 0, 0, -isize, -2, 0indx = 0loop:ival = istart * (imult indx)

    tabw_i ival, indx, iftloop_lt indx, 1, isize, loop

    xout iftendop

    opcode TabMkNewByHop_i, i, ii;macht eine neue tabelle indem es im abstand ihop durch ift hoppelt. gibt iftreszurckift, ihop xinihowmany = ftlen(ift)iftres ftgen 0, 0, -ihowmany, -2, 0indx = 0loop:iread = indx * ihopiread = (iread >= ihowmany ? iread % ihowmany : iread)

    ival tab_i iread, ifttabw_i ival, indx, iftresloop_lt indx, 1, ihowmany, loopxout iftres

    endop

    opcode TabMkTbFrmGrpMx_i, i, ii;erzeugt eine neue tabelle die die maxima von gruppen von indices in iftsrc enthlt, die durch iftgrp angegeben werden, und gibt dessen bezeichnung iftout zurckiftsrc, iftgrp xin

  • 7/30/2019 Stockhausen-Studie II Dt Widgets.csd

    4/35

    iftout ftgen 0, 0, -ftlen(iftgrp), -2, 0indxiftgrp = 0indxabs = 0loop1:indxels = 0igrplen tab_i indxiftgrp, iftgrpicomval tab_i indxabs, iftsrc; erster wert jeder gruppe als vergleichloop2:ival tab_i indxabs, iftsrcicomval = (ival > icomval ? ival : icomval)indxabs = indxabs + 1

    loop_lt indxels, 1, igrplen, loop2tabw_i icomval, indxiftgrp, iftoutloop_lt indxiftgrp, 1, ftlen(iftgrp), loop1xout iftout

    endop

    opcode TabRvrs_i, i, i;gibt eine kopie von iftin in rcklufiger ordnung als iftout zurckiftin xiniftlen = ftlen(iftin)iftout ftgen 0, 0, -iftlen, -2, 0

    tableicopy iftout, iftinindx = 0

    loop:iread tab_i indx, iftintabw_i iread, iftlen-indx-1, iftoutloop_lt indx, 1, iftlen, loopxout iftout

    endop

    opcode TabValIn, i, ii;untersucht ob irgendein wert in der tabelle itable gleich ivalsuch ist;gibt als ergebnisindex -1 raus wenn nicht, sonst den index in dem der identische wert stehtivalsuch, itable xinilen = ftlen(itable)

    indx init 0loop:ival tab_i indx, itableiresult = (ival == ivalsuch ? indx : -1)indx = indx + 1if iresult == -1 && indx < ilen igoto loop

    xout iresultendop

    opcode TableAppend2_i, i, iii;hngt ift2 und ift3 an ift1 und gibt die resultierende tabelle ift zurckift1, ift2, ift3 xinilen1 = ftlen(ift1)

    ilen2 = ftlen(ift2)ilen3 = ftlen(ift3)ilen = ilen1+ilen2+ilen3ift ftgen 0, 0, -ilen, -2, 0indxread = 0indxwrite = 0loop1:ival tab_i indxread, ift1

    tabw_i ival, indxwrite, iftindxwrite = indxwrite + 1

  • 7/30/2019 Stockhausen-Studie II Dt Widgets.csd

    5/35

    loop_lt indxread, 1, ilen1, loop1indxread = 0loop2:ival tab_i indxread, ift2

    tabw_i ival, indxwrite, iftindxwrite = indxwrite + 1

    loop_lt indxread, 1, ilen2, loop2indxread = 0loop3:ival tab_i indxread, ift3

    tabw_i ival, indxwrite, iftindxwrite = indxwrite + 1

    loop_lt indxread, 1, ilen3, loop3xout ift

    endop

    opcode TableDumpSimp, 0, iio;druckt den inhalt einer tabelle in einfacher weiseifn, iprec, ippr xin; tabelle, nachkommastellen, parameter pro zeile (maximum= 32, default = 10)ippr = (ippr == 0 ? 10 : ippr)iend = ftlen(ifn)indx = 0Sformat sprintf "%%.%d f\t", iprec

    Sdump = ""loop:ival tab_i indx, ifnSnew sprintf Sformat, ivalSdump strcat Sdump, Snewindx = indx + 1imod = indx % ippr

    if imod == 0 thenputs Sdump, 1

    Sdump = ""endifif indx < iend igoto loop

    puts Sdump, 1

    endop

    opcode TableDumpSimpS, 0, iiSo;druckt den inhalt einer tabelle in einfacher weise, mit einer zustzlichen zeichenkette als 'einleitung'ifn, iprec, String, ippr xin; tabelle, nachkommastellen, zeichenkette, parameter pro zeile (maximum = 32, default = 10)ippr = (ippr == 0 ? 10 : ippr)iend = ftlen(ifn)indx = 0

    puts String, 1Sformat sprintf "%%.%d f\t", iprecSdump = ""

    loop:ival tab_i indx, ifnSnew sprintf Sformat, ivalSdump strcat Sdump, Snewindx = indx + 1imod = indx % ippr

    if imod == 0 thenputs Sdump, 1

    Sdump = ""endif

  • 7/30/2019 Stockhausen-Studie II Dt Widgets.csd

    6/35

    if indx < iend igoto loopputs Sdump, 1

    endop

    opcode ShowLED_a, 0, Sakkk;zeigt ein audiosignal in einem outvalue-kanal, in dB oder reinen amplituden;Soutchan: string als name des outvalue-kanals;asig: audio signal das angezeigt werden soll;kdispfreq: erneuerungsfrequenz der anzeige (Hz);idb: 1 = in dB anzeigen, 0 = in reinen amplitudes anzei (beides im bereich 0-1);idbrange: wenn idb=1: wie viele dB-schritte werden angezeigt (zb wenn idbrange=36 sieht man nichts von einem signal unterhalb von -36 dB)Soutchan, asig, ktrig, kdb, kdbrange xinkdispval max_k asig, ktrig, 1

    if kdb != 0 thenkdb = dbfsamp(kdispval)kval = (kdbrange + kdb) / kdbrange

    elsekval = kdispval

    endifif ktrig == 1 then

    outvalue Soutchan, kvalendif

    endop

    opcode ShowOver_a, 0, Sakk;zeigt wenn asig grer als 1 war und bleibt khold sekunden auf dieser anzeige;Soutchan: string als name des outvalue-kanals;kdispfreq: erneuerungsfrequenz der anzeige (Hz)Soutchan, asig, ktrig, khold xinkon init 0ktim timeskstart init 0kend init 0khold = (khold < .01 ? .01 : khold); avoiding too shorthold timeskmax max_k asig, ktrig, 1

    if kon == 0 && kmax > 1 && ktrig == 1 thenkstart = ktimkend = kstart + khold

    outvalue Soutchan, kmaxkon = 1

    endifif kon == 1 && ktim > kend && ktrig == 1 then

    outvalue Soutchan, 0kon = 0

    endifendop

    ;============================================================================;;============================================================================;; B. SPEZIELLERE METHODEN FR STOCKHAUSENS STUDIE II (SS2_...) ;;============================================================================;;============================================================================;

    ;============================================================================;; 1. ZUR GENERIERUNG DER REIHEN ;

  • 7/30/2019 Stockhausen-Studie II Dt Widgets.csd

    7/35

    ;============================================================================;

    opcode SS2_TP1Val, i, iiii;errechnet einen neuen wert aus ival und dem transpositionsintervall interv, imrahmen von iminval und imaxvalival, interv, iminval, imaxval xinivalneu = ival + intervires = (ivalneu > imaxval ? ivalneu - imaxval : (ivalneu < iminval ? ivalneu + imaxval : ivalneu))

    xout iresendop

    opcode SS2_Transp, i, iiii;transponiert die "intervallfolge" einer reihe auf einen bestimmten anfangswertift, iminval, imaxval, itransval xin; reihe, tiefster und hchster wert, und wertauf den transponiert werden sollifttrans TabMkCp_i iftiftlen = ftlen(ift)indx = 0loop:ival tab_i indx, iftindxnext = (indx + 1 < iftlen ? indx + 1 : (indx + 1) - iftlen)ivalnext tab_i indxnext, ift

    interv = ivalnext - ivalires SS2_TP1Val itransval, interv, iminval, imaxvaltabw_i itransval, indx, ifttrans

    itransval = iresloop_lt indx, 1, iftlen, loopxout ifttrans

    endop

    opcode SS2_Transp_R, i, i;transponiert eine reihe indem es ihre einzelwerte im abstand ihop als anfang einer neuen zeile nimmt (bei ihop = 1 beginnen die zeilen der reihe 3-5-1-4-2 mitgenau diesen zahlen; bei ihop = 2 beginnen die zeilen mit 3-1-2-5-4, usw), und schreibt alles hintereinander

    ift xin; eine reihe mit fnf wertenires ftgen 0, 0, -(ftlen(ift) 2), -2, 0indx = 0loop:itransval tab_i indx, iftiftres SS2_Transp ift, 1, 5, itransval

    TabCopyGroupIn_i iftres, 0, ftlen(ift), ires, indx * 5loop_lt indx, 1, ftlen(ift), loopxout ires

    endop

    opcode SS2_Hop1, i, iii;macht die zeilenanfnge fr R2-R5 aus den zeilen von R1 mit bestimmten hoppelgren

    ift, istart, ihop xinidest ftgen 0, 0, -5, -2, 0TabCopyGroupIn_i ift, istart, 5, idest, 0

    ifttransvals TabMkNewByHop_i idest, ihopftfree idest, 0xout ifttransvals

    endop

    opcode SS2_Hop2, i, ii;analysiert den abstand in der sich die elemente von ifn2 in ifn1 befinden und g

  • 7/30/2019 Stockhausen-Studie II Dt Widgets.csd

    8/35

    ibt diese abstnde als neue tabelle zurckifn1, ifn2 xiniftreslen = ftlen(ifn2) - 1ifnabst ftgen 0, 0, -iftreslen, -2, 0indx = 0loop:ival1 tab_i indx, ifn2; nchster wert in ifn2indx1 TabValIn ival1, ifn1; an welchem index steht dieser wertin ifn1ival2 tab_i indx+1, ifn2; nchster wert in ifn2indx2 TabValIn ival2, ifn1; an welchem index steht dieser wertin ifn1iabst = indx2 - indx1iabst = (iabst < 0 ? iabst + 5 : iabst)

    tabw_i iabst, indx, ifnabstloop_lt indx, 1, iftreslen, loopxout ifnabst

    endop

    opcode SS2_Hop3, i, iii;nimmt eine reihe, eine abstandsreihe und das startelement und macht daraus eineneue fnferreiheifn, ifnabst, istartval xinilen = ftlen(ifn)

    iftres ftgen 0, 0, -ilen, -2, 0tabw_i istartval, 0, iftres; istartval ist das erste resultatindx = 0ival = istartval; mit istartval beginnenindxifn TabValIn ival, ifn; wo ist es in ifnloop:iabst tab_i indx, ifnabst; ersten abstand nehmenindxnext = indxifn + iabst; index bei dem der nchste wert ist: im allgemeinen ...indxnext = (indxnext >= ilen ? indxnext % ilen : indxnext);... und in wirklichkeitival tab_i indxnext, ifn; diesen wert nehmen

    tabw_i ival, indx+1, iftres; in iftres schreibenindxifn = indxnext; dort weitermachen wo man aufgehrt hatloop_lt indx, 1, ilen-1, loop; 4 mal wiederholenxout iftres

    endop

    opcode SS2_HopAbst, i, i;gibt die abstnde der elemente der zeilen 2-5 zu denen der zeile 1 in einem zahlenquadrat herausiftquadr xinifterste TabMkPartCp_i iftquadr, 0, 5; erste zeileiftzeil ftgen 0, 0, -5, -2, 0iftres ftgen 0, 0, -16, -2, 0

    indx = 5iwrite = 0loop:

    TabCopyGroupIn_i iftquadr, indx, 5, iftzeil, 0; zeilen 2-5 im verlauf des loopsiftabst SS2_Hop2 ifterste, iftzeil

    TabCopyGroupIn_i iftabst, 0, 4, iftres, iwriteiwrite = iwrite + 4

    loop_lt indx, 5, ftlen(iftquadr), loopxout iftres

  • 7/30/2019 Stockhausen-Studie II Dt Widgets.csd

    9/35

    endop

    opcode SS2_Hop, i, iiii;macht ein neues zahlenquadrat aus einem anderen, der angabe einer zeile in ihm,der hoppelgre und der abstandsliste. gibt die bezeichnung des neuen quadrats zurckift, istart, ihop, iftabst xin; erstes zahlenquadrat, reihenbeginn, hoppelgre, abstandslisteiftkopf ftgen 0, 0, -5, -2, 0

    TabCopyGroupIn_i ift, istart, 5, iftkopf, 0; zeile aus ift als kopfzeile des neuen quadratsifttransvals SS2_Hop1 ift, istart, ihop; zeilenanfnge fr das quadrat ausder kopfzeileiftres ftgen 0, 0, -25, -2, 0; ergebnisliste

    TabCopyGroupIn_i iftkopf, 0, 5, iftres, 0; mit iftkopf als erstem elementindx = 1loop:istartval tab_i indx, ifttransvals; anfang der neuen zeileiabstzeil TabMkPartCp_i iftabst, (indx - 1) * 4, 4; zeile aus der abstandslisteiftneuzeil SS2_Hop3 iftkopf, iabstzeil, istartval; ganze neue zeile

    TabCopyGroupIn_i iftneuzeil, 0, 5, iftres, indx * 5loop_lt indx, 1, 5,loopxout iftres

    endopopcode SS2_Umk, i, i

    ;kehrt eine reihe quasi intervallmig um (1->5, 2->4, 4->2, 5->1)iftreihe xiniftumkehr TabMkCp_i iftreiheindx = 0loop:ival tab_i indx, iftreihe

    tabw_i 6 - ival, indx, iftumkehrloop_lt indx, 1, ftlen(iftreihe), loopxout iftumkehr

    endop

    ;============================================================================;; 2. ZU DEN GRUNDTABELLEN ;;============================================================================;

    opcode SS2_IndxAusGSS, i, iii;gibt den index fr eine tabelle aus den drei werten Gruppe, Spalte, Stelle;zB fr 1-1-1 ist der index=0, fr 2-1-1 ist der index=25, usw.igrup, ispalt, istel xinigrupval = (igrup - 1) * 5ispstval = ispalt * (istel - 1)

    indx = igrupval + ispstvalxout indxendop

    opcode SS2_FreqsAusGTSS, iiiii, iiiii;gibt aus den angaben fr Gruppe-Transposition-Spalte-Stelle die 5 frequenzen destongemischsifreqtab, igrup, itrans, ispalt, istel xinigrup = igrup + itrans - 1indx SS2_IndxAusGSS igrup, ispalt, istel

  • 7/30/2019 Stockhausen-Studie II Dt Widgets.csd

    10/35

    ifreq1 tab_i indx, ifreqtabifreq2 tab_i indx + ispalt, ifreqtabifreq3 tab_i indx + (2*ispalt), ifreqtabifreq4 tab_i indx + (3*ispalt), ifreqtabifreq5 tab_i indx + (4*ispalt), ifreqtab

    xout ifreq1, ifreq2, ifreq3, ifreq4, ifreq5endop

    opcode SS2_ValsAusGTSS, i, iiiii;gibt aus den angaben fr Gruppe-Transposition-Spalte-Stelle die intensitt oder dauerivaltab, igrup, itrans, ispalt, istel xinigrup = igrup + itrans - 1indx SS2_IndxAusGSS igrup, ispalt, istelival tab_i indx, ivaltab

    xout ivalendop

    opcode SS2_MkGlob_dB_Tab, i, ii;fllt eine tabelle mit werten von istart bis imin mit schritten von -1, und rckwrts, wenn imin erreichtistart, imin xinilen = (abs(imin-istart) * 2) + 1iftres ftgen 0, 0, -ilen, -2, 0

    indx = 0incr = 0loop:ival = istart + incr

    tabw_i ival, indx, iftresif (indx < (ilen/2 - 1)) thenincr = incr - 1elseincr = incr + 1endif

    loop_lt indx, 1, ilen, loopxout iftres

    endop

    ;============================================================================;; 3. ERZEUGUNG VON TABELLEN EINES PARAMETERS FR EINEN TEIL ;;============================================================================;

    opcode SS2_MkParamTab_Meth1, i, iiiiiiiii;die erste methode, um eine tabelle mit parametern fr einen teil zu bekommen: einfester wert fr die transposition, gruppe und spalte bewegen sich wie iftcount, bei den stellen ein wert fr jede note.;wenn eine frequenztabelle erzeugt wird, hat sie 5 werte fr jeden ton; bei dauernoder intensitten ist es nur einer

    ;iftbas = frequenz-, dauern- oder lautstrkentabelle als grundvorrat;iftcount = ftable der angibt wie oft ein bestimmter typ sich wiederholt;iftgrup = ftable mit angabe der (untransponierten) gruppen;itrans = transpositions"intervall";iftspalt = ftable mit angabe der spalten;iftstel1-3 sind die ftables mit angaben ber die stellen (wechseln bei jedem ton,die anderen bleiben bei einem typ gleich);ifreqjn = 0=dauern- oder lautstrkentabelle, 1=freqtabelleiftbas, iftcount, iftgrup, itrans, iftspalt, iftstel1, iftstel2, iftstel3, ifreqjn xin

  • 7/30/2019 Stockhausen-Studie II Dt Widgets.csd

    11/35

    iftstel TableAppend2_i iftstel1, iftstel2, iftstel3if ifreqjn == 0 theniftout ftgen 0, 0, -ftlen(iftstel), -2, 0; tabelle fr dauern oder dbselseiftout ftgen 0, 0, -(ftlen(iftstel) * 5), -2, 0; tabelle fr frequenzenendifindxcount = 0indxtonabs = 0seq:icount tab_i indxcount, iftcountigrup tab_i indxcount, iftgrupispalt tab_i indxcount, iftspaltindxton = 0ton:istel tab_i indxtonabs, iftstelif ifreqjn == 0 thenival SS2_ValsAusGTSS iftbas, igrup, itrans, ispalt, istel

    tabw_i ival, indxtonabs, iftoutelseifq1, ifq2, ifq3, ifq4, ifq5 SS2_FreqsAusGTSS iftbas, igrup, itrans, ispalt, istel

    tabw_i ifq1, indxtonabs * 5, iftout

    tabw_i ifq2, indxtonabs * 5 + 1, iftouttabw_i ifq3, indxtonabs * 5 + 2, iftouttabw_i ifq4, indxtonabs * 5 + 3, iftouttabw_i ifq5, indxtonabs * 5 + 4, iftout

    endifindxtonabs = indxtonabs + 1

    loop_lt indxton, 1, icount, tonloop_lt indxcount, 1, ftlen(iftcount), seqxout iftout

    endop

    opcode SS2_MkParamTab_Meth2, i, iiiiiiii;;die zweite methode eine tabelle mit parametern fr einen teil zu bekommen:

    ;1. die gruppe wechselt von ton zu ton (es werden dieselben reihen benutzt wie zur bestimmung der stellen);2. die transposition wechselt mit einem wert pro sequenz;sonst alles wie bei methode 1iftbas, iftcount, ifttrans, iftspalt, iftstel1, iftstel2, iftstel3, ifreqjn xiniftstel TableAppend2_i iftstel1, iftstel2, iftstel3if ifreqjn == 0 theniftout ftgen 0, 0, -ftlen(iftstel), -2, 0; tabelle fr dauern oder dbselseiftout ftgen 0, 0, -(ftlen(iftstel) * 5), -2, 0; tabelle fr frequenzenendif

    indxcount = 0indxtonabs = 0seq:icount tab_i indxcount, iftcountispalt tab_i indxcount, iftspaltitrans tab_i indxcount, ifttransindxton = 0ton:istel tab_i indxtonabs, iftsteligrup = istel

  • 7/30/2019 Stockhausen-Studie II Dt Widgets.csd

    12/35

    if ifreqjn == 0 thenival SS2_ValsAusGTSS iftbas, igrup, itrans, ispalt, istel

    tabw_i ival, indxtonabs, iftoutelseifq1, ifq2, ifq3, ifq4, ifq5 SS2_FreqsAusGTSS iftbas, igrup, itrans, ispalt, istel

    tabw_i ifq1, indxtonabs * 5, iftouttabw_i ifq2, indxtonabs * 5 + 1, iftouttabw_i ifq3, indxtonabs * 5 + 2, iftouttabw_i ifq4, indxtonabs * 5 + 3, iftouttabw_i ifq5, indxtonabs * 5 + 4, iftout

    endifindxtonabs = indxtonabs + 1

    loop_lt indxton, 1, icount, tonloop_lt indxcount, 1, ftlen(iftcount), seqxout iftout

    endop

    ;============================================================================;; 4. SPEZIELLE VERFAHREN IN EINIGEN TEILEN ;;============================================================================;

    opcode SS2_Freqtab_5, i, iiiiiiiii

    ;;alles wie teil 3 und 4 aber in bestimmten sequenzen wird als gruppe eine 2 gesetzt (sonst bleibt das verfahren wie es war). diese sequenzen werden hier durchdie beiden fnferreihen irpl5a und irpl5b angegeben. die erste zahl der reihe bezeichnet eine position in der ersten seqenzgruppe (zwischen 1 und 5), die zweite in der zweiten, und so weiter, fr jede der beiden reihen.;bei der allerletzten sequenz (gruppe 5, sequenz 5) wird die spalte auf 3 gesetztift_Freqs, iftcount, ifttrans, iftspalt, iftstel1, iftstel2, iftstel3, iftrpl1,iftrpl2 xiniftstel TableAppend2_i iftstel1, iftstel2, iftstel3iftfreqs ftgen 0, 0, -(ftlen(iftstel) * 5), -2, 0indxseqgrp = 0indxtonabs = 0

    seqgrp:indxseq = 0irplseq1 tab_i indxseqgrp, iftrpl1irplseq2 tab_i indxseqgrp, iftrpl2seq:indxcount = (indxseqgrp * 5) + indxseqicount tab_i indxcount, iftcountif indxseqgrp == 4 && indxseq == 4 then; beim letzten malispalt = 3; spalte auf 3 setzenelseispalt tab_i indxcount, iftspaltendifitrans tab_i indxcount, ifttrans

    indxton = 0ton:istel tab_i indxtonabs, iftstelif indxseq+1 == irplseq1 || indxseq+1 == irplseq2 then; wenn zu ndernde sequenzigrup = 2; gruppe auf 2 setzenelseigrup = istel; sonst gruppe gleich stelleendififq1, ifq2, ifq3, ifq4, ifq5 SS2_FreqsAusGTSS ift_Freqs, igrup, itrans, ispalt, istel

  • 7/30/2019 Stockhausen-Studie II Dt Widgets.csd

    13/35

    tabw_i ifq1, indxtonabs * 5, iftfreqstabw_i ifq2, indxtonabs * 5 + 1, iftfreqstabw_i ifq3, indxtonabs * 5 + 2, iftfreqstabw_i ifq4, indxtonabs * 5 + 3, iftfreqstabw_i ifq5, indxtonabs * 5 + 4, iftfreqs

    indxtonabs = indxtonabs + 1loop_lt indxton, 1, icount, tonloop_lt indxseq, 1, 5, seqloop_lt indxseqgrp, 1, 5, seqgrpxout iftfreqs;enthlt alle freqs dieses teils, quasi in

    fnferpacksendop

    opcode SS2_durs2, i, iiiiftdur, iftcount, iftenv xin; ursprngliche dauerntabelle, tabelle mit anzahl derelemente pro sequenz, tabelle mit der hllkurve fr je eine sequenz (1-5, siehe denopcode SS2_dbs_2)iftout ftgen 0, 0, -ftlen(iftdur), -2, 0indxseq = 0indxnotabs = 0seq:indxnote = 0iduraccum = 0indxabsseq = indxnotabs; absoluter index in iftdur am beginn

    einer sequenzicount tab_i indxseq, iftcountienv tab_i indxseq, iftenvnote:if ienv == 1 || ienv == 2 then; gemeinsamer beginn: erste dauer normal, alle anderen summieren sichidurnorm tab_i indxnotabs, iftdur; dauer aus der normalen tabelleidur = idurnorm + iduraccum; reale dauer = summe der vorherigen dauern dieser sequenz plus idurnormiduraccum = idur; das ist der nchste wert fr die angesammeltendauern

    tabw_i idur, indxnotabs, iftout; dauer in iftout schrei

    benelse; gemeinsames ende: letzte dauer normal, alle anderen summieren sich rckwrtsindxback = indxabsseq + icount - indxnote - 1; zhlt rckwrtsidurnorm tab_i indxback, iftdur; dauer aus der normalen tabelleidur = idurnorm + iduraccum; reale dauer = summe der vorherigen dauern dieser sequenz plus idurnormiduraccum = idur; das ist der nchste wert fr die angesammeltendauern

    tabw_i idur, indxback, iftout; dauer in iftout schreibenendifindxnotabs = indxnotabs + 1

    loop_lt indxnote, 1, icount, note

    loop_lt indxseq, 1, ftlen(iftcount), seqxout iftoutendop

    opcode SS2_durs4, i, iiiiftdur, iftcount, iftenv xin; ursprngliche dauerntabelle, tabelle mit anzahl derelemente pro sequenz, tabelle mit der hllkurve fr je eine sequenz (1-5, siehe denopcode SS2_dbs_4)iftout ftgen 0, 0, -ftlen(iftdur), -2, 0indxseq = 0

  • 7/30/2019 Stockhausen-Studie II Dt Widgets.csd

    14/35

    indxnotabs = 0seq:indxnote = 0iduraccum = 0indxabsseq = indxnotabs; absoluter index in iftdur am beginneiner sequenzicount tab_i indxseq, iftcountienv tab_i indxseq, iftenvnote:if ienv == 1 || ienv == 2 || ienv == 5 then; gemeinsamer beginn: erste dauer normal, alle anderen summieren sichidurnorm tab_i indxnotabs, iftdur; dauer aus der normalen tabelleidur = idurnorm + iduraccum; reale dauer = summe der vorherigen dauern dieser sequenz plus idurnormiduraccum = idur; das ist der nchste wert fr die angesammeltendauern

    tabw_i idur, indxnotabs, iftout; dauer in iftout schreibenelse; gemeinsames ende: letzte dauer normal, alle anderen summieren sich rckwrtsindxback = indxabsseq + icount - indxnote - 1; zhlt rckwrtsidurnorm tab_i indxback, iftdur; dauer aus der normalen tabelleidur = idurnorm + iduraccum; reale dauer = summe der vorherigen dauern dieser sequenz plus idurnorm

    iduraccum = idur; das ist der nchste wert fr die angesammeltendauerntabw_i idur, indxback, iftout; dauer in iftout schreibe

    nendifindxnotabs = indxnotabs + 1

    loop_lt indxnote, 1, icount, noteloop_lt indxseq, 1, ftlen(iftcount), seqxout iftout

    endop

    opcode SS2_durs5, i, iiii;ndert die dauern, die bei den akkorden autreten, nach dem blichen prinzip (gemein

    samer anfang: erste dauer bleibt, andere dauern addieren sich; gemeinsames ende:letzte dauer bleibt, andere dauern addieren sich rckwrts)iftdur, ifttyps, iftcount, iftenv xin; ursprngliche dauerntabelle, tabelle mit den in teil 5 vorkommenden typen (1-3), tabelle mit anzahl der elemente pro sequenz, tabelle mit der hllkurve fr je eine sequenz (1-6, siehe bei instr 1)iftout ftgen 0, 0, -ftlen(iftdur), -2, 0indxseq = 0indxnotabs = 0indxenv = 0seq:indxnote = 0iduraccum = 0indxabsseq = indxnotabs; absoluter index in iftdur am beginn

    einer sequenzicount tab_i indxseq, iftcountityp tab_i indxseq, ifttypsnote:if ityp == 2 then; wenn akkord:ienv tab_i indxenv, iftenvif ienv == 1 || ienv == 2 || ienv == 5 then; gemeinsamer beginn: erste dauer normal, alle anderen summieren sichidurnorm tab_i indxnotabs, iftdur; dauer aus der normalen tabelle

  • 7/30/2019 Stockhausen-Studie II Dt Widgets.csd

    15/35

    idur = idurnorm + iduraccum; reale dauer = summe der vorherigen dauern dieser sequenz plus idurnormiduraccum = idur; das ist der nchste wert fr die angesammeltendauern

    tabw_i idur, indxnotabs, iftout; dauer in iftout schreibenelse; gemeinsames ende: letzte dauer normal, alle anderen summieren sich rckwrtsindxback = indxabsseq + icount - indxnote - 1; zhlt rckwrtsidurnorm tab_i indxback, iftdur; dauer aus der normalen tabelleidur = idurnorm + iduraccum; reale dauer = summe der vorherigen dauern dieser sequenz plus idurnormiduraccum = idur; das ist der nchste wert fr die angesammeltendauern

    tabw_i idur, indxback, iftout; dauer in iftout schreibenendifelse; sonst dauer aus der normalen tabelle in iftout schreibenidur tab_i indxnotabs, iftdur

    tabw_i idur, indxnotabs, iftoutendifindxnotabs = indxnotabs + 1

    loop_lt indxnote, 1, icount, noteindxenv = (ityp == 2 ? indxenv+1 : indxenv); indxenv rauf wenn wert in gebrauch war

    loop_lt indxseq, 1, ftlen(iftcount), seqxout iftoutendop

    ;============================================================================;; 5. GENERIERUNG DER STARTZEITEN ;;============================================================================;

    opcode SS2_Starts_part, i, iiiiiiiii;hat als ersten index istartabs (den absoluten startpunkt in cm), dann die 24 weiteren startpunkte der sequenzen;als index 25 (also 26.wert) wird der startpunkt des nchsten teils weitergegeben

    ift_Durs, iftcount, iftgrup, itrans, iftspalt, iftstel1, iftstel2, iftstel3, istartabs xiniftstel TableAppend2_i iftstel1, iftstel2, iftstel3iftstarts ftgen 0, 0, -(ftlen(iftcount)+1), -2, istartabsindxcount = 0indxtonabs = 0seq:icount tab_i indxcount, iftcountigrup tab_i indxcount, iftgrupispalt tab_i indxcount, iftspaltindxton = 0idurabs = 0ton:

    istel tab_i indxtonabs, iftstelidur SS2_ValsAusGTSS ift_Durs, igrup, itrans, ispalt, istelindxtonabs = indxtonabs + 1idurabs = idurabs + idur; dauer einer 1-5 ton gruppe in cm

    loop_lt indxton, 1, icount, tonistartabs = istartabs + idurabs

    tabw_i istartabs, indxcount+1, iftstartsloop_lt indxcount, 1, ftlen(iftcount), seqxout iftstarts

    endop

  • 7/30/2019 Stockhausen-Studie II Dt Widgets.csd

    16/35

  • 7/30/2019 Stockhausen-Studie II Dt Widgets.csd

    17/35

    einsame startsistart2 = istartseqelse; sonst startpunkt als differenz zur maximaldauer der sequenzidur2 tab_i indxtonabs, iftdursistart2 = istartseq + (imaxdur - idur2)endif

    tabw_i istart2, indxtonabs, iftout; wert fr diesen tonaus dieser berechnung

    tabw_i istartabs, indxtonabs+1, iftout; wert fr den nchsten ton aus normaler tabelleelse; typ=3: isolierte ereignisse, oder letzter ton einer sequenz vom typ=1

    tabw_i istartabs, indxtonabs+1, iftoutendifindxtonabs = indxtonabs + 1

    loop_lt indxton, 1, icount, tonindxenv = (ityp == 2 ? indxenv+1 : indxenv); indxenv rauf wenn wert in gebrauch war

    loop_lt indxseq, 1, ftlen(iftcount), seqxout iftout

    endop

    ;============================================================================;; 6. LAUTSTRKEN UND HLLKURVEN ;

    ;============================================================================;opcode SS2_dbs_1, ii, iiiii

    ;nimmt an, dass die hllkurven in teil 1 folgenden regeln folgen:;a) crescendi werden grundstzlich isoliert ausgefhrt, beginnen also bei -40 dB;b) diminuendi werden dann isoliert ausgefhrt (enden also bei -40 dB) wenn sie; - entweder durch ein crescendo abgelst werden; - oder der nchste ton lauter ist (sonst wrde bei einer verbindung ein cresc enstehen); - oder der aktuelle ton der letzte einer sequenz ist;c) sonst haben diminuendi als endwert den startwert der folgenden noteiftdb, iftenv, indxnotabs, indxnote, icount xinidb tab_i indxnotabs, iftdb

    ienv tab_i indxnotabs, iftenvif indxnote != icount-1 then; idbnext und ienvnext berechnen wenn es relevant istidbnext tab_i indxnotabs+1, iftdbienvnext tab_i indxnotabs+1, iftenvelse ; anderfalls idiotenwerte nehmenidbnext = 0ienvnext = 1endifif ienv == 1 then; isoliertes crescendo (bei -40 db beginnend)idb1 = -40idb2 = idbelseif indxnote == icount-1 || ienvnext == 1 || idbnext > idb then; isoliertes d

    iminuendo (bis -40 db fallend)idb1 = idbidb2 = -40else ;wenn dim gefolgt von anderem dim und nicht letzter ton: dim geht auf startwert des nchsten dimsidb1 = idbidb2 = idbnextendif

    xout idb1, idb2endop

  • 7/30/2019 Stockhausen-Studie II Dt Widgets.csd

    18/35

  • 7/30/2019 Stockhausen-Studie II Dt Widgets.csd

    19/35

    xout iftdbsendop

    opcode SS2_dbtab_4, i, iiiiiiiii;nur die krzeste note einer sequenz bekommt ihre gewohnte dauer aus der intensitts-tabelle; die anderen ziehen den wert ihrer stellenposition von dieser db-zahl ab und setzen das ergebnis fr die nachfolgenden der seq als neuen bezugswertift_Intens, iftcount, iftgrup, itrans, iftspalt, iftstel1, iftstel2, iftstel3, iftenv xiniftstel TableAppend2_i iftstel1, iftstel2, iftstel3iftdbs ftgen 0, 0, -ftlen(iftstel), -2, 0indxcount = 0indxtonabs = 0seq:icount tab_i indxcount, iftcountispalt tab_i indxcount, iftspaltigrup tab_i indxcount, iftgrupienv tab_i indxcount, iftenvindxton = 0idbref = 0; db-bezugswert (wird berschrieben)indxabsseq = indxtonabs; absoluter index in iftstel am beginneiner sequenzton:if ienv == 1 || ienv == 2 || ienv == 5 then; gemeinsamer beginn:

    istel tab_i indxtonabs, iftstel; normale zhlung der stelleif indxton == 0 then; beim ersten malidb SS2_ValsAusGTSS ift_Intens, igrup, itrans, ispalt, istel; db-wert aus der tabelle holenidbref = idb; und als referenz setzenelse; alle anderenidb = idbref - istel; ziehen ihre stelle als db abidbref = idb; und setzen das als neue referenzendif

    tabw_i idb, indxtonabs, iftdbs; und schreiben ihn in iftdbselse; gemeinsames ende:indxback = indxabsseq + icount - indxton - 1; rckwrtigen zhler

    einsetzenistel tab_i indxback, iftstel; erst letzter ton einer sequenz, dann vorletzter etcif indxton == 0 then; beim ersten malidb SS2_ValsAusGTSS ift_Intens, igrup, itrans, ispalt, istel; db-wert aus der tabelle holenidbref = idb; und als referenz setzenelse; alle anderenidb = idbref - istel; ziehen ihre stelle als db abidbref = idb; und setzen das als neue referenzendif

    tabw_i idb, indxback, iftdbs; und schreiben ihn von hinten nach vorn in die positionen dieser sequenz

    endifindxtonabs = indxtonabs + 1loop_lt indxton, 1, icount, tonloop_lt indxcount, 1, ftlen(iftcount), seqxout iftdbs

    endop

    opcode SS2_dbtab_5b, i, ii;korrigiert die werte in iftdbs_5a, die iftkorr angibtiftdbs_5a, iftkorr xin

  • 7/30/2019 Stockhausen-Studie II Dt Widgets.csd

    20/35

    iftout TabMkCp_i iftdbs_5aindxkorr = 0loop:iwhich tab_i indxkorr, iftkorrikorrval tab_i indxkorr+1, iftkorr

    tabw_i ikorrval, iwhich, iftoutloop_lt indxkorr, 2, ftlen(iftkorr), loopxout iftout

    endop

    opcode SS2_dbs_4, ii, iiiiidb, ienv, imaxdur, idur xin; db wert fr diesen ton, hllkurventyp (1-5), dauer deslngsten tons dieser sequenz, dauer dieses tons;;mgliche hllkurventypen (ienv); 1 = gemeinsamer beginn, diminuendo, abbruch der krzeren tne hher als -40 dB wegengemeinsamem "fluchtpunkt"; 2 = gemeinsamer beginn, crescendo der einzeltne; 3 = gemeinsames ende, diminuendo der einzeltne; 4 = gemeinsames ende, crescendo, anfang der krzeren tne hher als -40 dB wegen gemeinsamem "fluchtpunkt"; 5 = gemeinsamer beginn, diminuendo der einzeltneif ienv == 2 then; einfaches cresc ber die dauer des tonsidb1 = -40idb2 = idb

    elseif ienv == 3 || ienv == 5 then; einfaches dimidb1 = idbidb2 = -40elseif ienv == 1 then; dim aber krzere tne gehen nicht bis -40 dBidb1 = idbirel = idur / imaxduridbdiff = idb1 + 35; wieviele db zwischen dem maximum und -35 alsendpunkt (da in der partitur nur raum von entsprechend 5 db zwischen -30 und -40)idb2 = idb1 - (irel * idbdiff)idb2 = (idb2

  • 7/30/2019 Stockhausen-Studie II Dt Widgets.csd

    21/35

    indxenv2 = 0; leseindex in hllkurven fr typ 2 (eine pro sequenz)seq:indxnot = 0icrescalign = 0; ob ein cresc bei typ1 nicht bei dem endwert des vorigen dims anfngticount tab_i indxseq, iftcountimaxdur tab_i indxseq, iftmxgrpdrsityp tab_i indxseq, ifttypnote:idb tab_i indxnotabs, iftdbidur tab_i indxnotabs, iftdur

    if ityp == 3 then; ISOLIERTE EINZELTNEidb1 = idbidb2 = -40

    tabw_i idb1, indxnotabs * 2, iftouttabw_i idb2, (indxnotabs * 2) + 1, iftout

    elseif ityp == 2 then; AKKORDEienv2 tab_i indxenv2, iftenv2; hllkurventyp holenif ienv2 == 2 || ienv2 == 6 then; einfaches cresc ber die dauer des tonsidb1 = -40idb2 = idb

    elseif ienv2 == 3 || ienv2 == 5 then; einfaches dimidb1 = idbidb2 = -40elseif ienv2 == 1 then; dim aber krzere tne gehen nicht bis -40 dBidb1 = idbirel = idur / imaxduridbdiff = idb1 + 35; wieviele db zwischen dem maximum und -35 alsendpunkt (da in der partitur nur raum von entsprechend 5 db zwischen -30 und -40)idb2 = idb1 - (irel * idbdiff)idb2 = (idb2

  • 7/30/2019 Stockhausen-Studie II Dt Widgets.csd

    22/35

    endifelseif ienv1 == 2 then; diminuendoif (indxnot != icount - 1) then; nchsten db wert und nchste hllkurve holen wenn n

    icht letzte note einer sequenzidbnext tab_i indxnotabs + 1, iftdb; nchster db-wert aus der tabelleienvnext tab_i indxenv1 + 1, iftenv1; nchster wert fr hllkurve (cresc oder dim)else ;sonst idiotenwert nehmen

    idbnext = 0ienvnext = 2endifif (indxnot == icount - 1) || (ienvnext == 2 && idbnext > idb) || (ienvnext ==1 && idbnext < idb) || (ienvnext == 1 && idb < -21) then; wenn (1) letzter tonder sequenz, oder (2) folgendes dim und dessen db-wert grer als dieser db-wert, oder (3) folgendes cresc und dessen db-wert kleiner als dieser db-wert, oder (4) folgendes cresc und gegenwrtiger db-wert ist -22 oder kleiner: dim bis -40 dbidb1 = idbidb2 = -40else;if ienvnext == 1 then; wenn cresc anschliet auf -25 db zurck (zwei stellen: 3.3

    und 4.4)idb1 = idbidb2 = -25icrescalign = 1; zeichen fr den folgenden ton setzen

    else ; sonst geht dim auf startwert des nchsten tons zurckidb1 = idbidb2 = idbnexticrescalign = 1; zeichen fr den folgenden ton setzen

    endifendifendif

    tabw_i idb1, indxnotabs * 2, iftouttabw_i idb2, (indxnotabs * 2) + 1, iftout

    endif

    indxnotabs = indxnotabs + 1indxenv1 = (ityp == 1 ? indxenv1+1 : indxenv1); indices fr i

    ftenv1 und iftenv 2 ...loop_lt indxnot, 1, icount, noteindxenv2 = (ityp == 2 ? indxenv2+1 : indxenv2); ... weiterschalten wenn einer dran war

    loop_lt indxseq, 1, ftlen(iftcount), seq

    xout iftoutendop

    ;============================================================================;; 7. AUSLSEN DER EREIGNISSE ;;============================================================================;

    opcode SS2_TrigEvents_1, 0, iiiiiiii;lst die events fr teil 1 aus und druckt sie aus wenn iprintjn=1iftstarts, iftcounts, iftfreqs, iftdurs, iftdb, iftenv, isubinstr, iprintjn xinindxseq = 0indxnotabs = 0seq:indxnote = 0idurshift tab_i indxseq, iftstartsicount tab_i indxseq, iftcounts

  • 7/30/2019 Stockhausen-Studie II Dt Widgets.csd

    23/35

  • 7/30/2019 Stockhausen-Studie II Dt Widgets.csd

    24/35

  • 7/30/2019 Stockhausen-Studie II Dt Widgets.csd

    25/35

  • 7/30/2019 Stockhausen-Studie II Dt Widgets.csd

    26/35

    idb2 = -30elseidb2 = -40endifidb1 = idbendif

    event_i "i", isubinstr, istart/76.2, idur/76.2, ifq1, ifq2, ifq3, ifq4, ifq5, idb1, idb2if iprintjn == 1 then

    prints "Coda.%d%t%t%.2f%t%t%.3f%t%t%.2f%t%t%.3f%t%t%.2f%t%t%.2f%t%t%.0f%t%.0f%n", indx+1, istart, istart/76.2, idur, idur/76.2, ifq1,ifq5, idb1, idb2endifistart = istart + idur

    loop_lt indx, 1, ftlen(iftser), loopxout istart; zeit nach dem ende des letzten events

    endop

    ;============================================================================;;============================================================================;;============================================================================;; II. GENERIERUNG DER STRUKTUREN UND KLNGE ;;============================================================================;

    ;============================================================================;;============================================================================;

    instr 1;;GUI-INPUT UND ALLGEMEINE EINSTELLUNGENisubinstr = 10; instrument das die klnge aufhrtkprintlines invalue "printlines"; ob jede note mit ihren werten augedruckt werden soll (0=nein, 1=ja)iprintlines = i(kprintlines)kwdmix invalue "wdmix";(zwischen 0=trocken und 1=hallig)kroomsize invalue "roomsize"; 0-1 (fr freeverb)khfdamp invalue "hfdamp"; abschwchung der hohen frequenzen (0-1) (fr freeverb)kshowdb invalue "showdb"; 0=reine amplituden, 1=db als anzeige in der GUI

    kdbrange invalue "dbrange"; wenn db-anzeige: welcher bereich wird angezeigt

    ;============================================================================;;============================================================================;; A. DIE REIHEN UND DIE ZAHLENQUADRATE ;;============================================================================;;============================================================================;iReihe ftgen 0, 0, -5, -2, 3, 5, 1, 4, 2; das einzig gegebeneifzwaf = 5 (1/25); 25ste wurzel aus 5ift_R1 SS2_Transp_R iReihe; macht aus der grundreihe das erste zahlenquadrat R1

    ift_Abst_R1 SS2_HopAbst ift_R1; abstnde der elemente der zeilen 2-5 in R1zu den elementen von zeile 1ift_R2 SS2_Hop ift_R1, 5, 2, ift_Abst_R1; zahlenquadrat R2ift_R3 SS2_Hop ift_R1, 10, 3, ift_Abst_R1; zahlenquadrat R3ift_R4 SS2_Hop ift_R1, 15, 4, ift_Abst_R1; zahlenquadrat R4ift_R5 SS2_Hop ift_R1, 20, 5, ift_Abst_R1; zahlenquadrat R5ift_U1 SS2_Umk ift_R1; umkehrung von R1ift_U2 SS2_Umk ift_R2; umkehrung von R2ift_U3 SS2_Umk ift_R3; umkehrung von R3ift_U4 SS2_Umk ift_R4; umkehrung von R4

  • 7/30/2019 Stockhausen-Studie II Dt Widgets.csd

    27/35

    ift_U5 SS2_Umk ift_R5; umkehrung von R5prints "%n%nERZEUGE ZAHLENQUADRATE:%n%n"TableDumpSimpS ift_R1, 0, "\nR1:", 5TableDumpSimpS ift_R2, 0, "R2:", 5TableDumpSimpS ift_R3, 0, "R3:", 5TableDumpSimpS ift_R4, 0, "R4:", 5TableDumpSimpS ift_R5, 0, "R5:", 5TableDumpSimpS ift_U1, 0, "U1:", 5TableDumpSimpS ift_U2, 0, "U2:", 5TableDumpSimpS ift_U3, 0, "U3:", 5TableDumpSimpS ift_U4, 0, "U4:", 5TableDumpSimpS ift_U5, 0, "U5:", 5

    ;============================================================================;;============================================================================;; B. GRUNDTABELLEN FR FREQUENZEN, DAUERN, INTENSITTEN ;;============================================================================;;============================================================================;

    ;81 frequenzen auf der basis 100 hz im verhltnis 5^(1/25)ift_Freqs TabMultRecurs_i 81, 100, ifzwaf;dauern auf der basis 2.5 cm (0.039 sec) im selben verhltnisift_Durs TabMultRecurs_i 61, 2.5, ifzwaf; dauern in centimetern (1 sec =

    76.2 cm)ift_Durs TabRvrs_i ift_Durs; umgekehrte reihenfolge;intensitten zwischen -30 und 0 als "hin und her"ift_Intens SS2_MkGlob_dB_Tab 0, -30

    prints "%n%nERZEUGE MATERIALTABELLEN:%n%n"TableDumpSimpS ift_Freqs, 0, "\nFREQUENZEN (Hz):", 5TableDumpSimpS ift_Durs, 2, "\nDAUERN (cm):", 5TableDumpSimpS ift_Intens, 0, "\nINTENSITTEN (dB):", 5

    ;============================================================================;;============================================================================;

    ; C. DIE EREIGNISSE IN DEN EINZELNEN TEILEN ;;============================================================================;;============================================================================;

    ;Ich benutze folgende, an Silberhorns Terminologie angelehnte Ausdrcke: ;;a) 5 Sinustne bilden einen KLANG oder eine KLANGMISCHUNG. Jede im Verlauf ;; des Stcks vorkommende Klangmischung wird als EREIGNIS, TON oder NOTE ;; bezeichnet. ;;b) 1-5 Tne bilden eine SEQUENZ. ;;c) 5 Sequenzen bilden eine GRUPPE ODER SEQUENZGRUPPE. ;;d) 5 Sequenzgruppen bilden einen TEIL. ;;e) 5 Teile bilden, zusammen mit der "Coda", das ganze Stck. ;

    ;============================================================================;; 1. TEIL 1 ;;============================================================================;

    ;;eine hllkurve fr jede note in diesem teil (1=crescendo, 2=diminuendo)iftenv_1 ftgen 0, 0, -75, -2, 2, 1, 1, 2, 2, 1, 2,2, 2, 1, 2, 2, 2, 1, 2,\

    2, 1, 1, 2, 2, 2,

  • 7/30/2019 Stockhausen-Studie II Dt Widgets.csd

    28/35

    1, 2, 1, 2, 2, 1, 2, 1, 2,\1, 2, 1, 2, 2, 1, 2,

    2, 2, 2, 1, 2, 2, 2, 1,\2, 2, 2, 2, 1, 2, 2,

    1, 2, 2, 1, 2, 2, 1, 2,\1, 2, 2, 2, 1, 2, 1,

    2, 2, 2, 1, 2, 1, 2, 2istart_1 = 0; absoluter startzeitpunkt dieses teilsiftcounts_1 = ift_R5; R5 bestimmt die anzahl der elemente in jeder sequenziftfreqs_1 SS2_MkParamTab_Meth1 ift_Freqs, iftcounts_1, ift_R1, 3, ift_R2,ift_R1, ift_R2, ift_R3, 1; liste mit allen frequenzeniftdurs_1 SS2_MkParamTab_Meth1 ift_Durs, iftcounts_1, ift_R3, 1, ift_R4, ift_R3, ift_R4, ift_R5, 0; liste mit dauerniftdb_1 SS2_MkParamTab_Meth1 ift_Intens, iftcounts_1, ift_R2, 5, ift_R3, ift_R2,ift_R3, ift_R4, 0; liste mit intensitteniftstarts_1 SS2_Starts_part ift_Durs, iftcounts_1, ift_R4, 1, ift_U5, ift_R4, ift_R5, ift_R1, istart_1; startzeiten (eine pro sequenz)

    prints "%n%n"; TableDumpSimp iftfreqs_1, 0, 5; TableDumpSimp iftdurs_1, 0, 5; TableDumpSimp iftdb_1, 0, 5; TableDumpSimp iftstarts_1, 1, 5

    prints "%n%nERZEUGE EVENTLISTE TEIL 1 (Events als Teil.Sequenzgruppe.Sequenz.Ton):%n%n"prints "Event%t%tStart (cm)%tStart (sec)%tDauer (cm)%tD

    auer (sec)%tFreqInf (Hz)%tFreqSup (Hz)%tdB1%tdB2%n"SS2_TrigEvents_1 iftstarts_1, iftcounts_1, iftfreqs_1, iftdurs_1

    , iftdb_1, iftenv_1, isubinstr, iprintlines

    ;============================================================================;; 2. TEIL 2 ;;============================================================================;

    ;;TABELLE FR DIE MGLICHEN HLLKURVEN IN TEIL 2:; 1 = gemeinsamer beginn, diminuendo, abbruch der krzeren tne hher als -40 dB wegengemeinsamem "fluchtpunkt"; 2 = gemeinsamer beginn, crescendo der einzeltne; 3 = gemeinsames ende, diminuendo der einzeltne; 4 = gemeinsames ende, crescendo, anfang der krzeren tne hher als -40 dB wegen gemeinsamem "fluchtpunkt"; 5 = gemeinsames ende, crescendo der einzeltneiftenv_2 ftgen 0, 0, -25, -2, 1, 2, 4, 3, 5,\

    1, 4, 3, 5, 2,\1, 4, 5, 2, 3,\4, 3, 1, 5, 2,\3, 1, 4, 5, 2

    istart_2 tab_i ftlen(iftstarts_1) - 1, iftstarts_1; absoluter startzeitpunkt dieses teilsiftcounts_2 = ift_R1; R1 bestimmt die anzahl der elemente in jeder sequenziftfreqs_2 SS2_MkParamTab_Meth1 ift_Freqs, iftcounts_2, ift_R2, 5, ift_R3,ift_R4, ift_R5, ift_R1, 1; liste mit allen frequenzeniftdurnorm_2 SS2_MkParamTab_Meth1 ift_Durs, iftcounts_2, ift_R4, 3, ift_R5, ift_R1, ift_R2, ift_R3, 0; liste mit "eigentlichen" dauerniftdurs_2 SS2_durs2 iftdurnorm_2, iftcounts_2, iftenv_2; liste mit modifizierten dauern (s.o. bei opcode SS2_durs2)

  • 7/30/2019 Stockhausen-Studie II Dt Widgets.csd

    29/35

    iftdb_2 SS2_MkParamTab_Meth1 ift_Intens, iftcounts_2, ift_R3, 2, ift_R4, ift_R5,ift_R1, ift_R2, 0; liste mit intensitteniftstarts_2 SS2_Starts_part ift_Durs, iftcounts_2, ift_R5, 3, ift_U1, ift_R2, ift_R3, ift_R4, istart_2; startzeiten (1 pro seq)

    prints "%n%n"; TableDumpSimp iftfreqs_2, 0, 5; TableDumpSimp iftdurs_2, 2, 5; TableDumpSimp iftdb_2, 0, 5; TableDumpSimp iftstarts_2, 1, 5

    prints "%n%nERZEUGE EVENTLISTE TEIL 2 (Events als Teil.Sequenzgruppe.Sequenz.Ton):%n%n"

    prints "Event%t%tStart (cm)%tStart (sec)%tDauer (cm)%tDauer (sec)%tFreqInf (Hz)%tFreqSup (Hz)%tdB1%tdB2%n";

    SS2_TrigEvents_2 iftstarts_2, iftcounts_2, iftfreqs_2, iftdurs_2, iftdb_2, iftenv_2, isubinstr, iprintlines

    ;============================================================================;; 3. TEIL 3 ;;============================================================================;

    istart_3 tab_i ftlen(iftstarts_2) - 1, iftstarts_2; absoluter startzeitpunkt dieses teilsiftcounts_3 = ift_R2; R2 bestimmt die anzahl der elemente in j

    eder sequenziftfreqs_3 SS2_MkParamTab_Meth2 ift_Freqs, iftcounts_3, ift_R3, ift_R4, ift_R2, ift_R3, ift_R4, 1; liste mit allen frequenzeniftdurs_3 SS2_MkParamTab_Meth1 ift_Durs, iftcounts_3, ift_R5, 4, ift_R1, ift_R4, ift_R5, ift_R1, 0; liste mit dauerniftdb_3 SS2_MkParamTab_Meth2 ift_Intens, iftcounts_3, ift_R4, ift_R5, ift_R4, ift_R5, ift_R1, 0; liste mit intensitteniftstarts_3 SS2_Starts_3 ift_Durs, iftcounts_3, ift_R1, 4, ift_U2, ift_R5, ift_R1, ift_R2, istart_3; startzeiten (eine pro note); prints "%n%n"; TableDumpSimp iftfreqs_3, 0, 5; TableDumpSimp iftdurs_3, 2, 5; TableDumpSimp iftdb_3, 0, 5

    ; TableDumpSimp iftstarts_3, 1, 5prints "%n%nERZEUGE EVENTLISTE TEIL 3 (Events als Teil.Sequenzgruppe.Sequenz.Ton):%n%n"

    prints "Event%t%tStart (cm)%tStart (sec)%tDauer (cm)%tDauer (sec)%tFreqInf (Hz)%tFreqSup (Hz)%tdB1%tdB2%n"

    SS2_TrigEvents_3 iftstarts_3, iftcounts_3, iftfreqs_3, iftdurs_3, iftdb_3, isubinstr, iprintlines

    ;============================================================================;; 4. TEIL 4 ;;============================================================================;

    ;;TABELLE FR DIE MGLICHEN HLLKURVEN IN TEIL 4:; 1 = gemeinsamer beginn, diminuendo, abbruch der krzeren tne hher als -40 dB wegengemeinsamem "fluchtpunkt"; 2 = gemeinsamer beginn, crescendo der einzeltne; 3 = gemeinsames ende, diminuendo der einzeltne; 4 = gemeinsames ende, crescendo, anfang der krzeren tne hher als -40 dB wegen gemeinsamem "fluchtpunkt"; 5 = gemeinsamer beginn, diminuendo der einzeltne (dies der einzige unterschiedzu den in teil 2 gebrauchten formen)iftenv_4 ftgen 0, 0, -25, -2, 2, 5, 4, 3, 1,\

  • 7/30/2019 Stockhausen-Studie II Dt Widgets.csd

    30/35

    2, 1, 5, 4, 3,\2, 3, 1, 4, 5,\2, 5, 1, 3, 4,\2, 3, 5, 1, 4

    istart_4 tab_i ftlen(iftstarts_3) - 1, iftstarts_3; absoluter startzeitpunkt dieses teilsiftcounts_4 = ift_R3; R3 bestimmt die anzahl der elemente in jeder sequenziftfreqs_4 SS2_MkParamTab_Meth2 ift_Freqs, iftcounts_4, ift_R4, ift_R5, ift_R5, ift_R1, ift_R2, 1; liste mit allen frequenzeniftdurnorm_4 SS2_MkParamTab_Meth1 ift_Durs, iftcounts_4, ift_R1, 2, ift_R2, ift_R2, ift_R3, ift_R4, 0; liste mit "eigentlichen" dauerniftdurs_4 SS2_durs4 iftdurnorm_4, iftcounts_4, iftenv_4; liste mit modifizierten dauern (s.o. bei opcode SS2_durs2)iftdb_4 SS2_dbtab_4 ift_Intens, iftcounts_4, ift_R5, 1, ift_R1, ift_R1, ift_R2, ift_R3, iftenv_4; liste mit intensitteniftstarts_4 SS2_Starts_part ift_Durs, iftcounts_4, ift_R2, 2, ift_U3, ift_R3, ift_R4, ift_R5, istart_4; startzeiten (1 pro seq); prints "%n%n"; TableDumpSimp iftfreqs_4, 0, 5; TableDumpSimp iftdurs_4, 2, 5; TableDumpSimp iftdb_4, 0, 5

    ; TableDumpSimp iftstarts_4, 1, 5prints "%n%nERZEUGE EVENTLISTE TEIL 4 (Events als Teil.Sequenzgruppe.Sequenz.Ton):%n%n"

    prints "Event%t%tStart (cm)%tStart (sec)%tDauer (cm)%tDauer (sec)%tFreqInf (Hz)%tFreqSup (Hz)%tdB1%tdB2%n";

    SS2_TrigEvents_4 iftstarts_4, iftcounts_4, iftfreqs_4, iftdurs_4, iftdb_4, iftenv_4, isubinstr, iprintlines

    ;============================================================================;; 5. TEIL 5 ;;============================================================================;

    ;;ABSOLUTE STARTZEIT (in cm)istart_5 tab_i ftlen(iftstarts_4) - 1, iftstarts_4;;TNE PRO SEQUENZiftcounts_5 = ift_R4; R4 bestimmt die anzahl der elemente in jeder sequenz

    ;;EREIGNISTYPEN;1 = wie in Teil 1 (Einzeltne aneinander anschlieend), 2 = wie in Teil 2 und 4 (Akkorde geimsam beginnend oder endend), 3 = wie in Teil 3 (Einzeltne isoliert)ifteventtyps_5 ftgen 0, 0, -25, -2, 3, 1, 2, 1, 2,\

    2, 3, 2, 1, 1,\2, 3, 1, 2, 1,\

    2, 2, 3, 1, 1,\2, 2, 1, 1, 3

    ;;HLLKURVEN;A) FR EREIGNISSE VOM TYP 1 (mehrere tne hintereinander mit je eigener hllkurve);insgesamt gibt es 10 sequenzen vom typ 1; hier durch zeilenwechsel getrennt (1=cresc, 2=dim)iftenv_5_typ1 ftgen 0, 0, -30, -2, 2,\

    1, 2, 2, 1, 2,\2, 2, 1, 2,\

  • 7/30/2019 Stockhausen-Studie II Dt Widgets.csd

    31/35

    2,\1, 2, 1,\1, 2,\1, 2, 2, 1,\2, 1, 2,\2, 2, 2, 2, 2,\1, 2

    ;B) FR EREIGNISSE VOM TYP 2 (akkorde) (diesmal alle hllkurventypen, also 6); 1 = gemeinsamer beginn, diminuendo, abbruch der krzeren tne hher als -40 dB wegengemeinsamem "fluchtpunkt"; 2 = gemeinsamer beginn, crescendo der einzeltne; 3 = gemeinsames ende, diminuendo der einzeltne; 4 = gemeinsames ende, crescendo, anfang der krzeren tne hher als -40 dB wegen gemeinsamem "fluchtpunkt"; 5 = gemeinsamer beginn, diminuendo der einzeltne; 6 = gemeinsames ende, crescendo der einzeltne;insgesamt gibt es 10 sequenzen vom typ 2 (s.o. ifteventtyps_5: in jeder sequenzgruppe 2)iftenv_5_typ2 ftgen 0, 0, -10, -2, 5, 6, 3, 2, 1, 4, 2, 3, 2, 3

    ;;FREQUENZEN;eigentlich wre es so (selbe methode wie in teil 3 und 4);(iftfreqs_5 SS2_Freqtab_3 ift_Freqs, iftcounts_5, ift_R5, ift_R1, ift_R3, if

    t_R4, ift_R5);aber in verschiedenen sequenzen wird eine 2 an die stelle der (untransponierten) gruppe gesetzt.;diese sequenzen lassen sich in 2 fnferreihen darstellen (jeweils position in einer sequenzgruppe):irpl5a ftgen 0, 0, -5, -2, 1, 4, 2, 5, 3; das macht noch einen guten eindruck ...irpl5b ftgen 0, 0, -5, -2, 2, 2, 5, 3, 5; aber das ist gar keine ordentliche reihe =(;deshalb wirds jetzt so:iftfreqs_5 SS2_Freqtab_5 ift_Freqs, iftcounts_5, ift_R5, ift_R1, ift_R3, ift_R4, ift_R5, irpl5a, irpl5b

    ;;DAUERN;grundlegende dauerntabelleiftdurs_5a SS2_MkParamTab_Meth2 ift_Durs, iftcounts_5, ift_R2, ift_R3, ift_R5, ift_R1, ift_R2, 0;vernderung der dauern bei akkorden (wie in teil 2 und 4)iftdurs_5 SS2_durs5 iftdurs_5a, ifteventtyps_5, iftcounts_5, iftenv_5_typ2

    ;;STARTSiftstarts_5a SS2_MkParamTab_Meth2 ift_Durs, iftcounts_5, ift_R3, ift_U4, ift_R1, ift_R2, ift_R3, 0iftstarts_5 SS2_Starts_5 iftstarts_5a, iftcounts_5, ifteventtyps_5, iftdurs_5, iftenv_5_typ2, istart_5

    ;;LAUTSTRKENiftdbs_5a SS2_MkParamTab_Meth2 ift_Intens, iftcounts_5, ift_R1, ift_R2, ift_R4, ift_R5, ift_R1, 0;von dieser vermutlichen Grundlage gibt es so viele Abweichungen, dass vorerst nur eine Liste dieser Abweichungen sinnvoll: Paare aus zu-ersetzender-index und wert-an-dieser-stelle;(die liste knnte ziemlich reduziert werden durch anwendung einiger regeln - nchstesmal ...)iftkorrdbs_5 ftgen 0, 0, -92, -2,\

  • 7/30/2019 Stockhausen-Studie II Dt Widgets.csd

    32/35

    0, -22, 1, -18, 2, -17, 3, -15,\6, -18,\7, -26, 8, -27, 9, -30, 10, -29, 11

    , -28,\12, -21, 13, -18,\19, -30,\21, -22, 22, -29, 23, -18,\25, -4,\31, -12, 32, -13, 33, -17, 34, -4,\36, -21, 38, -10,\39, -30, 40, -29, 41, -27,\46, -23,\47, -15,\48, -24, 50, -13,\53, -21, 54, -9, 55, -21, 56, -13,\59, -7,\61, -14, 62, -11, 63, -7, 64, -5,\66, -11, 67, -13, 68, -18, 69, -21,\70, -29, 71, -23,\73, -19

    iftdbs_5b SS2_dbtab_5b iftdbs_5a, iftkorrdbs_5iftdbs_5 SS2_dbs_5 iftdbs_5b, iftcounts_5, ifteventtyps_5, iftenv_5_typ1, iftenv_5_typ2, iftdurs_5

    ;;AUSLSEN DER EREIGNISSEprints "%n%nERZEUGE EVENTLISTE TEIL 5 (Events als Teil.Sequenzgruppe.Sequenz.Ton):%n%n"

    prints "Event%t%tStart (cm)%tStart (sec)%tDauer (cm)%tDauer (sec)%tFreqInf (Hz)%tFreqSup (Hz)%tdB1%tdB2%n"

    SS2_TrigEvents_5 iftstarts_5, iftfreqs_5, iftdurs_5, iftdbs_5, iftcounts_5, isubinstr, iprintlines

    ; TableDumpSimp iftfreqs_5, 0, 5; TableDumpSimp iftdurs_5, 2, 5; TableDumpSimp iftstarts_5a, 1, 5; TableDumpSimp iftstarts_5, 1, 5; TableDumpSimp iftdbs_5b, 0, 5

    ; TableDumpSimp iftdbs_5, 0, 10

    ;============================================================================;; 6. CODA ;;============================================================================;

    istart_coda tab_i ftlen(iftstarts_5) - 1, iftstarts_5prints "%n%nERZEUGE EVENTLISTE CODA (Events als Teil.Se

    quenzgruppe.Sequenz.Ton):%n%n"prints "Event%t%tStart (cm)%tStart (sec)%tDauer (cm)%tD

    auer (sec)%tFreqInf (Hz)%tFreqSup (Hz)%tdB1%tdB2%n"

    iend SS2_TrigEvents_Coda ift_Durs, ift_Freqs, ift_Intens, iReihe, istart_coda, isubinstr, iprintlines

    ;============================================================================;; 7. BERECHNUNG DER GESAMTDAUER UND AUDIO-OUTPUT ;;============================================================================;

    ;; reine gesamtdauern plus nachhallzeit berechnenp3 = (iend / 76.2) + 5

  • 7/30/2019 Stockhausen-Studie II Dt Widgets.csd

    33/35

    ;; trockenes signal von instr 10 empfangen und mit verhallung mischengadryL init 0gadryR init 0awetL, awetR freeverb gadryL, gadryR, kroomsize, khfdampaoutL = (1-kwdmix) * gadryL + (kwdmix * awetL)aoutR = (1-kwdmix) * gadryR + (kwdmix * awetR)

    outs aoutL, aoutR;; an die GUI schickenkTrigDisp metro 10

    ShowLED_a "outL", aoutL, kTrigDisp, kshowdb, kdbrangeShowLED_a "outR", aoutR, kTrigDisp, kshowdb, kdbrangeShowOver_a "outLover", aoutL, kTrigDisp, 2ShowOver_a "outRover", aoutR, kTrigDisp, 2

    ;; globales audio zurcksetzengadryL = 0gadryR = 0endin

    ;============================================================================;; 8. UNTERINSTRUMENT ZUR ERZEUGUNG EINER KLANGMISCHUNG ;;============================================================================;

    instr 10

    ifreq1 = p4ifreq2 = p5ifreq3 = p6ifreq4 = p7ifreq5 = p8idb1 = p9; -dB am anfangidb2 = p10; -dB am endekpanwidth invalue "panwidth"; 0=mono, 1=breites stereopanorama (tief=links, hoch=rechts)kampcorr invalue "vol"; lautstrkefaktor (je nach hallanteil einstellen)adb linseg idb1, p3, idb2aenv linen ampdb(adb), .01, p3, .01a1 oscili aenv*kampcorr, ifreq1, 1

    a2 oscili aenv*kampcorr, ifreq2, 1a3 oscili aenv*kampcorr, ifreq3, 1a4 oscili aenv*kampcorr, ifreq4, 1a5 oscili aenv*kampcorr, ifreq5, 1aout sum a1, a2, a3, a4, a5;stereo-panoramairel = (log(ifreq1/100) / log(5)) * 25; ergibt werte zwischen 0=tiefste und 60=hchste frequenzipan = irel / 60; 0-1kpan = (ipan * kpanwidth) + (1 - kpanwidth) / 2; spreizung um 0.5 als zentrum jenach kpanwidthaL, aR pan2 aout, kpangadryL = gadryL+aL

    gadryR = gadryR+aRendin

    f 1 0 4096 10 1; sinusi 1 0 1; p3 wird intern berechnete

  • 7/30/2019 Stockhausen-Studie II Dt Widgets.csd

    34/35

    Version: 3Render: RealAsk: YesFunctions: ioObjectListing: WindowWindowBounds: 400 22 421 728CurrentView: ioIOViewEdit: OnOptions: -b128 -A -s -m167 -RioView background {43690, 43690, 32639}ioText {24, 86} {365, 249} label 0.000000 0.00100 "" center "Lucida Grande" 16 {0, 0, 0} {65280, 65280, 65280} nobackground border Hall (freeverb)ioText {24, 364} {365, 180} label 0.000000 0.00100 "" center "Lucida Grande" 16{0, 0, 0} {65280, 65280, 65280} nobackground border Panorama und LautstrkeioSlider {31, 507} {250, 29} 0.000000 0.500000 0.200000 volioText {155, 475} {97, 32} label 0.000000 0.00100 "" center "Lucida Grande" 12 {0, 0, 0} {65280, 65280, 65280} nobackground noborder LautstrkeioMeter {28, 558} {336, 22} {0, 59904, 0} "out1_post" 0.363636 "outL" 0.000000 fill 1 0 mouseioMeter {362, 558} {27, 22} {50176, 3584, 3072} "outLover" 0.000000 "outLover" 0.000000 fill 1 0 mouse

    ioMeter {28, 585} {336, 22} {0, 59904, 0} "out2_post" 0.526316 "outR" 0.000000 fill 1 0 mouseioMeter {362, 585} {27, 22} {50176, 3584, 3072} "outRover" 0.000000 "outRover" 0.000000 fill 1 0 mouseioSlider {126, 145} {160, 31} 0.000000 1.000000 0.443750 wdmixioText {28, 144} {97, 32} label 0.000000 0.00100 "" center "Lucida Grande" 12 {0, 0, 0} {65280, 65280, 65280} nobackground noborder TrockenioText {288, 145} {97, 31} label 0.000000 0.00100 "" center "Lucida Grande" 12 {0, 0, 0} {65280, 65280, 65280} nobackground noborder VerhalltioText {148, 116} {110, 29} label 0.000000 0.00100 "" center "Lucida Grande" 12{0, 0, 0} {65280, 65280, 65280} nobackground noborder MischungioSlider {128, 211} {160, 31} 0.000000 1.000000 0.525000 roomsizeioText {30, 210} {97, 32} label 0.000000 0.00100 "" center "Lucida Grande" 12 {0

    , 0, 0} {65280, 65280, 65280} nobackground noborder KleinioText {290, 211} {97, 31} label 0.000000 0.00100 "" center "Lucida Grande" 12 {0, 0, 0} {65280, 65280, 65280} nobackground noborder GroioText {146, 177} {110, 30} label 0.000000 0.00100 "" center "Lucida Grande" 12{0, 0, 0} {65280, 65280, 65280} nobackground noborder RaumgreioSlider {128, 279} {160, 31} 0.000000 1.000000 0.456250 hfdampioText {30, 278} {97, 32} label 0.000000 0.00100 "" center "Lucida Grande" 12 {0, 0, 0} {65280, 65280, 65280} nobackground noborder NeinioText {290, 279} {97, 31} label 0.000000 0.00100 "" center "Lucida Grande" 12 {0, 0, 0} {65280, 65280, 65280} nobackground noborder JaioText {31, 245} {352, 31} label 0.000000 0.00100 "" center "Lucida Grande" 12 {0, 0, 0} {65280, 65280, 65280} nobackground noborder Abschwchung der hohen Frequenzen

    ioSlider {150, 428} {132, 32} 0.000000 1.000000 1.000000 panwidthioText {27, 429} {122, 32} label 0.000000 0.00100 "" center "Lucida Grande" 12 {0, 0, 0} {65280, 65280, 65280} nobackground noborder Eng (Mono)ioText {284, 429} {97, 31} label 0.000000 0.00100 "" center "Lucida Grande" 12 {0, 0, 0} {65280, 65280, 65280} nobackground noborder WeitioText {28, 396} {352, 31} label 0.000000 0.00100 "" center "Lucida Grande" 12 {0, 0, 0} {65280, 65280, 65280} nobackground noborder StereopanoramaioText {281, 506} {98, 31} display 0.000000 0.00100 "vol" center "Lucida Grande"12 {0, 0, 0} {65280, 65280, 65280} nobackground noborder 0.2000ioText {24, 8} {366, 78} label 0.000000 0.00100 "" center "Lucida Grande" 16 {0,

  • 7/30/2019 Stockhausen-Studie II Dt Widgets.csd

    35/35

    0, 0} {65280, 65280, 65280} nobackground noborder KARLHEINZ STOCKHAUSEN: STUDIEIIIn Csound generiert von Joachim HeintzVersion 1, November 2009ioCheckbox {30, 659} {20, 20} on printlinesioText {54, 655} {352, 31} label 0.000000 0.00100 "" left "Lucida Grande" 12 {0,0, 0} {65280, 65280, 65280} nobackground noborder Alle Klangereignisse in der Konsole ausgebenioText {309, 615} {80, 25} editnum 40.000000 0.100000 "dbrange" left "Lucida Grande" 8 {0, 0, 0} {65280, 65280, 65280} nobackground noborder 40.000000ioText {230, 614} {80, 26} label 0.000000 0.00100 "" left "Helvetica" 12 {0, 0,0} {65280, 65280, 65280} nobackground noborder dB-BereichioText {27, 616} {91, 25} label 0.000000 0.00100 "" left "Helvetica" 12 {0, 0, 0} {65280, 65280, 65280} nobackground noborder Anzeige alsioMenu {117, 615} {109, 26} 1 303 "Amplituden,dB" showdb