'"Amorgos" - Jelle Meander ' - "Geroll & Bijzonder Blauw" ' - "Krung Thep" / bijzonder rood ' - "Sje Po" / bijzonder paars 'coding: kristof lauwers '"Geroll": springers (shakers en zwaailicht), belly, PD patch over UDP '"Krung Thep": tubi, autosax '"Sje Po": tubi, sax, belly, PD patch GLOBAL AM_Belly AS musician GLOBAL AM_Springs AS musician GLOBAL AM_Tubi AS musician GLOBAL AM_Sax AS musician GLOBAL AM_UdpOut AS LONG GLOBAL bellystat AS WORD GLOBAL destip AS LONG DECLARE FUNCTION AM_Init AS LONG DECLARE FUNCTION GR_Main AS LONG 'task DECLARE FUNCTION GR_Bellytask AS LONG DECLARE FUNCTION KT_Main(OPT BYVAL nextstat AS LONG) AS LONG DECLARE CALLBACK FUNCTION CBKT_Main DECLARE SUB KT_FillTubiHar(BYVAL grondnoot AS SINGLE) DECLARE FUNCTION SjePo_Main AS LONG DECLARE SUB AM_Springerpanic %grmain = 32 'tasknr %grbelly = 33 %ktmain = 34 %sjepomain = 35 %pdport = 3000 'port for udp-ing to PD %shakemaxfreq = 20 %shakeritmefreq = 5 'ritme voor sekties 5, 6, 9 %shakeloud = 54 'velo voor shakers %shakequiet = 24 $pd_path = "c:\pd\bin\pd.exe -asio c:\b\pb\gmt\kristof\amorgos\playwaves.pd" FUNCTION AM_Init AS LONG LOCAL i AS LONG LOCAL hostname$ LOCAL ip AS LONG LOCAL portnum AS LONG portnum = %pdport HOST ADDR TO ip HOST NAME TO hostname$ destip = ip OR &HFF000000 RANDOMIZE TIMER GetInstrumentParams AM_Belly, %ID_BELLY GetInstrumentParams AM_Springs, %ID_SPRINGERS GetInstrumentParams AM_Tubi, %ID_TUBI GetInstrumentParams AM_SAX, %ID_AUTOSAX SetRobotPort AM_Belly, "", hMidiO() SetRobotPort AM_Springs, "", hMidiO() SetRobotPort AM_Tubi, "", hMidiO() SetRobotPort AM_Sax, "", hMidiO() task(%grmain).naam = "geroll" task(%grmain).freq = %ShakeMaxFreq '20 task(%grmain).cptr = CODEPTR(GR_Main) task(%grbelly).naam = "gr_bel" task(%grbelly).freq = 4 task(%grbelly).cptr = CODEPTR(GR_BellyTask) task(%ktmain).naam = "Krung Thep" task(%ktmain).freq = .2 task(%ktmain).cptr = CODEPTR(KT_Main) task(%sjepomain).naam = "Sje Po" task(%sjepomain).freq = %ShakeMaxFreq task(%sjepomain).cptr = CODEPTR(SjePo_main) Modemess AM_Belly.channel, &H44, 0 'belly listen!! not matchtask.. i = SHELL($pd_path) SLEEP 1000 MSGBOX "please wait until PD has started up and then click ok",,FUNCNAME$ g_net_init App g_net_send "2" + CHR$(10), 0 ButnOs(1).tag = "SirenOff":ButnOs(1).cptr = CODEPTR(AM_SpringerPanic) ' local f as long ' local buf$ ' f = FREEFILE ' UDP OPEN AS f ' buf$ = "500" + CHR$(10) ' UDP SEND f, AT destip, portnum, buf$ ' UDP CLOSE f 'TO DO: init instruments. belly to dir4ekt listen END FUNCTION FUNCTION GR_Main AS LONG'task STATIC nexttime AS DOUBLE STATIC sectioncount AS LONG STATIC timings() AS LONG 'duur van sekties in seconden STATIC springersstat AS WORD ': 00000xxx 000000yy xxx bits voor 100 = laag, 010 = midden, 001 = hoog | yyy bits voor 001 = licht, 010 = dens, 100 = homoritimisch, 011 = minder dens STATIC lastbellytime AS LONG ' n.v.t zo snel ritme ad lib STATIC lastspringerstime AS LONG STATIC this AS LONG STATIC shaker AS BYTE STATIC lightvelo AS BYTE STATIC shkritme AS DWORD STATIC shkritmecount AS DWORD ' g_net_send "3333" + CHR$(10), 0 'STR$(1000 + (RND * 100)), 0 IF ISFALSE nexttime THEN 'init this = %grmain shkritme = &B010111011101011111 ' &B111110101110111010 'voor shkaers sekties 5,6,9 van achter naar voor te lezen!! 'mogelijk + zwaai DIM timings(16) '0 = dummy timings(1) = 11 timings(2) = 13 timings(3) = 17 timings(4) = 19 timings(5) = 23 timings(6) = 23 timings(7) = 11 timings(8) = 13 timings(9) = 17 timings(10) = 11 timings(11) = 13 timings(12) = 17 timings(13) = 13 timings(14) = 11 timings(15) = 11 timings(16) = 11 sectioncount = 1 bellystat = 0 springersstat = 0 CONTROL SET TEXT gh.cockpit, %GMT_MSG1, STR$(sectioncount) nexttime = TIMER + timings(sectioncount) shaker = 124 StartTask %GRBelly END IF IF nexttime <= TIMER THEN INCR sectioncount CONTROL SET TEXT gh.cockpit, %GMT_MSG1, "sektie:" + FORMAT$(sectioncount, "00") Play AM_Springs.channel, 2, 0 'light off SELECT CASE sectioncount CASE 2 springersstat = &B01 task(this).freq = %shakemaxfreq g_net_send "100" + CHR$(10), 0 CASE 3 bellystat = &B0000000100000001: springersstat = 0 task(this).freq = %shakeritmefreq g_net_send "4" + CHR$(10), 0 CASE 4 bellystat = 0 g_net_send "100" + CHR$(10), 0 CASE 5 task(this).freq = %shakeritmefreq: springersstat = &B010 g_net_send "6" + CHR$(10), 0 CASE 6 bellystat = &B0000011100000010 'shakers blijven g_net_send "100" + CHR$(10), 0 CASE 7: bellystat = &B0000011100000001: springersstat = 0 CASE 8: bellystat = 0 CASE 9 g_net_send "10" + CHR$(10), 0 springersstat = &B010: task(this).freq = %shakeritmefreq CASE 10 springersstat = 0 g_net_send "100" + CHR$(10), 0 CASE 11 bellystat = &B0000011000000001 g_net_send "11" + CHR$(10), 0 SLEEP 1 g_net_send "100" + CHR$(10), 0 CASE 12: bellystat = &B0000001000000011: springersstat = &B0100 CASE 13 bellystat = &B0000001100000010 'shakers blijven g_net_send "14" + CHR$(10), 0 CASE 14 bellystat = 0 'shakers blijven g_net_send "100" + CHR$(10), 0 CASE 15 Play AM_Springs.channel, 1, 0 bellystat = &B0000010000000010: springersstat = 0 g_net_send "15" + CHR$(10), 0 SLEEP 1 g_net_send "100" + CHR$(10), 0 CASE 16 bellystat = &B0000101000000100: springersstat = &B01: task(this).freq = %shakemaxfreq g_net_send "16" + CHR$(10), 0 SLEEP 1 g_net_send "100" + CHR$(10), 0 CASE 17 stoptask %grmain Stoptask %grbelly Play AM_Springs.channel, 2, 0 Play AM_Springs.channel, 1, 0 Play AM_Springs.channel, 2, 0 ' g_net_send "1000" + CHR$(10), 0 END SELECT nexttime = nexttime + timings(sectioncount) END IF SELECT CASE springersstat CASE &B01 '"zo snel mogelijk, + zwaailicht" ' task(this).freq = %shakemaxfreq EVT hier randomizen?? zenuwachtige indruk vs gewoon zo snel mogelijk shaken IF BIT(shaker, 0) THEN Play AM_Springs.channel, shaker, %shakeloud 'velo moet genoeg zijn om recht te blijven staan, maar ook n veel meer (max tempo...) !!!!!!! ELSE Play AM_SPrings.channel, shaker, %shakequiet END IF lightvelo = (5 * lightvelo + 84 + 43 * RND) / 6 lightvelo = lightvelo AND &HFE Play AM_Springs.channel, 2, lightvelo 'zwaailicht Play AM_Springs.channel, 1, 0 INCR shaker: IF shaker > 127 THEN shaker = 124 CASE &B010 ' "Rietme" IF BIT(shkritme, shkritmecount) THEN IF ISFALSE BIT(shkritme, shkritmecount + 1) THEN Play AM_Springs.channel, 127, %shakeloud 'kwarten , op luidste shaker Play AM_Springs.channel, 124, %shakequiet 'kwarten , op luidste shaker ELSE 'evt l/r shaker gebruiken voor kwart resp achtste..? Play AM_Springs.channel, 125, %shakeloud 'achtsten END IF Play AM_Springs.channel, 1, 0 END IF INCR shkritmecount: IF shkritmecount > 17 THEN shkritmecount = 0 CASE &B0100 'ad lib, abrupt/verstoord, idem zwaailicht IF RND > .7 THEN task(this).freq = 0.4 + 8 * RND ^ 2 'check random fct.. ELSE task(this).freq = MAX(0.5, task(this).freq - RND) END IF shaker = 124 + RND * 3 ' bit set shaker, 0 Play AM_Springs.channel, shaker, %shakeloud + 10 Play AM_Springs.channel, 2, RND * 127 Play AM_Springs.channel, 1, 0 CASE 0 'do nothing CASE ELSE 'we have a bug MSGBOX "unknown CASE springersstat " + BIN$(springersstat),, FUNCNAME$ + " heeft beestjes" END SELECT END FUNCTION FUNCTION GR_Bellytask AS LONG STATIC this AS LONG LOCAL density AS BYTE LOCAL tess AS BYTE LOCAL bel AS BYTE LOCAL frq AS SINGLE IF ISFALSE this THEN this = %grbelly END IF IF ISFALSE bellystat THEN EXIT FUNCTION density = LOBYT(bellystat) tess = HIBYT(bellystat) SELECT CASE density CASE &B001 'licht '1 bel tegelijk, min velocity!! SELECT CASE tess CASE &B001: bel = 92 + RND * 11 'alleen hoog ' 3 CASE &B0111: bel = 68 + RND ^ 2 * 35 'alle ' 7 CASE &B0110: bel = 68 + RND ^ 2 * 24 'laag-mid, 11 END SELECT Play AM_Belly.channel, bel, 1 frq = .3 + 2 * RND ^ 3 CASE &B010 'dens '1, soms 2, heel af en toe 3 bellen, vluggere tempo's SELECT CASE tess CASE &B0111 'laag mid hoog, 6 bel = 68 + RND * 35: Play AM_Belly.channel, bel, 1 frq = .5 + 8 * RND IF RND > .63 THEN bel = 80 + RND * 23: Play AM_Belly.channel, bel, 1 frq = .5 + 5 * RND ^ 2 IF RND > .6 THEN bel = 92 + RND * 12: Play AM_Belly.channel, bel, 1 frq = .5 + 2 * RND ^ 2 END IF END IF CASE &B0011 'mid & hoog, 13 bel = 80 + RND * 23: Play AM_Belly.channel, bel, 1 frq = .7 + 8 * RND IF RND > .63 THEN bel = 80 + RND * 23: Play AM_Belly.channel, bel, 1 frq = .7 + 5 * RND ^ 2 IF RND > .6 THEN bel = 92 + RND * 12: Play AM_Belly.channel, bel, 1 frq = .7 + 2 * RND ^ 2 END IF END IF CASE &B0100 'alleen laag, 15 bel = 68 + RND * 12: Play AM_Belly.channel, bel, 1 frq = .5 + 4 * RND IF RND > .6 THEN bel = 68 + SQR(RND) * 12: Play AM_Belly.channel, bel, 1 frq = .5 + 3 * RND ^ 2 IF RND > .6 THEN bel = 68 + SQR(RND) * 12: Play AM_Belly.channel, bel, 1 frq = .5 + 2 * RND ^ 2 END IF END IF CASE ELSE MSGBOX "invalid tess " + BIN$(tess),, FUNCNAME$ END SELECT CASE &B011 'minder licht 12 'alleen mid freq bel = 80 + RND * 12: Play AM_Belly.channel, bel, 1 frq = .3 + 4 * RND IF RND > .7 THEN bel = 80 + RND * 12: Play AM_Belly.channel, bel, 1 frq = .3 + 3 * RND END IF CASE &B0100 'homoritmisch dens bel = 68 + RND * 12: Play AM_Belly.channel, bel, 1 bel = 90 + RND * 12: Play AM_Belly.channel, bel, 1 frq = .7 + 4 * RND IF RND > .3 THEN bel = 90 + RND * 12: Play AM_Belly.channel, bel, 1 frq = .7 + 3 * RND^3 IF RND > .3 THEN frq = .7 + 2 * SQR(RND) bel = 68 + SQR(RND) * 12: Play AM_Belly.channel, bel, 1 END IF END IF CASE ELSE MSGBOX "invalid density " + BIN$(density),, FUNCNAME$ END SELECT task(this).freq = INT(frq * 5) / 5 'quantize op vijfden van sec CONTROL SET TEXT gh.cockpit, %GMT_TITLE, FORMAT$(task(this).freq, "00.00") END FUNCTION FUNCTION KT_Main(OPT BYVAL nextstat AS LONG) AS LONG 'tubi and sax 'voices comes through sax 'feedback controlled manually @ mixer that also sends voice! STATIC this AS LONG STATIC hDlg AS LONG STATIC stat AS LONG STATIC grondfreq AS SINGLE STATIC cc AS SINGLE STATIC note AS BYTE LOCAL vol AS BYTE LOCAL item$() LOCAL i AS LONG IF hDlg AND nextstat = - 1 THEN this = %false IF nextstat = -2 THEN DIALOG END hDlg: hDlg = %false: this = %false: EXIT FUNCTION 'switch off IF ISFALSE this THEN this = %ktmain REDIM item$(15) 'FOR i = 0 TO 15: item$(i) = TRIM$(STR$(i + 1)): NEXT item$(0) = "1) hart & tubi" item$(1) = "2) Tubi.clusters: e" item$(2) = "3) Tubi + stem: DIaVOloTOpos" item$(3) = "4) Tubi + hart & sax" item$(4) = "5) sax dood" item$(5) = "6) Tape" item$(6) = "7) Terugvoederen: e > a" item$(7) = "8) Tape" item$(8) = "9) Autosax: a ~ e" item$(9) = "10) stem" item$(10) = "11) Tubi.clustert: a" item$(11) = "12) Veel hart" item$(12) = "13) [tacet]" item$(13) = "14) fbck in adem en wijfelen" item$(14) = "15) Inslikken aanhef" item$(15) = "16) h !" DIALOG NEW 0, "Krung Thep", 1, 1, 112, 150 TO hDlg CONTROL ADD LISTBOX, hDlg, 1, item$(), 2, 2, 108, 132, %LBS_NOTIFY OR %WS_VSCROLL CALL CBKT_Main CONTROL ADD BUTTON, hDlg, 2, "&next", 2, 135, 108, 12, %BS_DEFAULT CALL CBKT_Main DIALOG SHOW MODELESS hDlg ModeMess AM_SAX.channel, 7, 0 'mute sax midi ModeMess AM_SAX.channel, 16, 0 'mute sax fbck END IF IF nextstat THEN CONTROL SET TEXT gh.cockpit, %GMT_MSG1, STR$(nextstat) stat = nextstat 'stat init SELECT CASE stat CASE 2, 3, 4, 11 task(this).freq = .15 CASE 5 task(this).freq = 30 cc = 0 CASE 7 task(this).freq = 10 cc = 0 ' CONTROL SET TEXT gh.cockpit, %GMT_TEXT_SLIDER0, "Low FeedBack" CONTROL SET TEXT gh.cockpit, %GMT_TEXT_SLIDER1, "High FeedBack" 'het volgende ziet er in elk geval fout uit.. (2 * slider(0)) SendMessage Slider(0).h, %TBM_SETPOS,%True, 5 SendMessage Slider(0).h, %TBM_SETPOS,%True, 10 ' note = 49 Play AM_Sax.channel, note, 1 '(do feedback manually) ' vol = Slider(0).value + ABS((COS(cc) + SIN(.5 + cc * .7))/2 * Slider(1).value - Slider(0).value) ' ModeMess AM_Sax.channel, 16, vol 'sax fbck CASE 9 task(this).freq = 20 END SELECT EXIT FUNCTION END IF SELECT CASE stat CASE 1 ' "Het hart en tubi" CASE 2 ' "Tubi spuit eerder langzaam clusters die neigen naar e" KT_FillTubiHar 28 ShowHar AM_Tubi.Har(1), 1,140,2! InsTrumPlay AM_Tubi Task(this).freq = MAX(.06, (Task(this).freq + RND^4) / 2) CASE 3 ' "Tubi is er nog steeds alsook een stem, oei, DIaVOloTOpos" KT_FillTubiHar 28 ShowHar AM_Tubi.Har(1), 1,140,2! InsTrumPlay AM_Tubi Task(this).freq = MAX(.04, (Task(this).freq + RND^6) / 2) CASE 4 ' "Tubi is er nog steeds en het hart voelt autosax" KT_FillTubiHar 28 ShowHar AM_Tubi.Har(1), 1,140,2! InsTrumPlay AM_Tubi Task(this).freq = MAX(.06, (Task(this).freq + RND^4) / 2) CASE 5 ' "Tubi zwijgt terwijl de autosax tikt voor dood, lijkt het wel" cc = cc + Pi/140 IF RND >= ABS(COS(cc) * SIN(.5 + cc * .7)) THEN EXIT FUNCTION IF cc > .7 * Pi^2 THEN cc = 0 CONTROL SET TEXT gh.cockpit, %GMT_MSG1, STR$(cc) note = AM_Sax.lowTes + RND^2 * (AM_Sax.HighTes - AM_Sax.LowTes) Play AM_Sax.channel, note, 1 Play AM_Sax.channel, note, 0 CASE 6 ' "Tape neemt het tikken over, nog doder, lijkt het wel" CASE 7 ' "Terugvoederen van e naar a (los angeles)" ' cc = cc + Pi/100 '0 > Pi in 10" ' vol = Slider(0).value + ABS((COS(cc) + COS(.1 + cc * .7))/2 * Slider(1).value - Slider(0).value) '' ModeMess AM_Sax.channel, 16, vol 'sax fbck ' CONTROL SET TEXT gh.cockpit, %GMT_TEXT0_ID + 10, STR$((9 * Pi - cc) / (9 * Pi)) ' IF (note = 49) OR note = 60 THEN ' fbck = e ' IF RND < ABS((9 * Pi - cc) / (9* pi)) THEN EXIT FUNCTION ' note = 67 ' IF RND > .5 THEN note = 89 ' ELSE 'a ' IF RND > ABS((9 * Pi - cc) / (9* pi)) THEN EXIT FUNCTION ' note = 49 ' IF RND > .6 THEN note = 60 ' END IF ' IF cc = 18 * pi THEN cc = 0 ' Play AM_Sax.channel, note, 1 CASE 8 ' "Tape verwijst" CASE 9 ' "Autosax wijfelt tussen a en e, oei" ' "Stem ook, maar niet echt. Eerder krrr en ssss" IF RND > .15 THEN EXIT FUNCTION SELECT CASE RND CASE > .75: note = 49 CASE > .5: note = 60 CASE > .25: note = 67 CASE ELSE: note = 89 END SELECT Play AM_Sax.channel, note, 1 CASE 10 ' "Echter (aanhef):" CASE 11 ' "Tubi clustert opnieuw, maar neigt nu meer naar a" KT_FillTubiHar 21 ShowHar AM_Tubi.Har(1), 1,140,2! InsTrumPlay AM_Tubi Task(this).freq = MAX(.1, (Task(this).freq + RND^4) / 2) CASE 12 ' "Veel hart, oei" CASE 13 ' "[tacet]" CASE 14 ' "Terugvoederen in adem en wijfelen" CASE 15 ' "Inslikken aanhef" CASE 16 ' "h !" END SELECT END FUNCTION SUB KT_FillTubiHar(BYVAL grondnoot AS SINGLE) 'fills tubi har with cluster with strong grondtoon component LOCAL grondfreq AS SINGLE LOCAL i AS LONG LOCAL f AS SINGLE LOCAL ctr AS LONG LOCAL h AS HarmType Grondnoot = Grondnoot MOD 12 + 24 grondfreq = NF2F(grondnoot) 'mi ctr = FIX(NF2F(72)/grondfreq) + 10 + RND^3 * ((CEIL(NF2F(96)/grondfreq) - FIX(NF2F(72)/grondfreq)) - 20) ' CONTROL SET TEXT gh.cockpit, %GMT_MSG2, STR$(CEIL(NF2F(108)/grondfreq)) ' CONTROL SET TEXT gh.cockpit, %GMT_MSG1, STR$(ctr) +STR$(grondfreq) FOR i = ctr - 10 TO ctr + 10 IF (RND < .5) OR (ABS(LOG2(i) - INT(LOG2(i))) < .01) THEN f = i * grondfreq f = F2NF(f) IF f > 109 THEN EXIT FOR SELECT CASE FRAC(f) CASE < .25, > .75 AddNote2Har h, INT(f), 74 - i CASE ELSE AddNote2Har h, INT(f) - 36, 74 - i END SELECT END IF NEXT FillHarType h IF (QuestTcHar(h, .5) MOD 12) = 4 THEN AM_Tubi.Har(1).vel = SolveHar(h, -1, 0) ELSE AM_Tubi.Har(1).vel = SolveHar (h, 4, 0) END IF AM_Tubi.Har(1).vel = SumHar(AM_Tubi.Har(1), h) IF (QuestTcHar(h, .5) MOD 12) = 4 THEN h.vel = SolveHar(AM_Tubi.Har(1), -1, 0) ELSE h.vel = SolveHar (AM_Tubi.Har(1), 4, 0) END IF AM_Tubi.Har(1).vel = SumHar(AM_Tubi.Har(1), h) END SUB CALLBACK FUNCTION CBKT_Main LOCAL b$ IF CBMSG = %WM_CLOSE THEN KT_Main -1 IF CBMSG <> %WM_COMMAND THEN EXIT FUNCTION SELECT CASE CBCTL CASE 1 IF CBCTLMSG <> %LBN_SELCHANGE THEN EXIT FUNCTION LISTBOX GET TEXT CBHNDL, CBCTL TO b$ KT_Main VAL(b$) CASE 2 LISTBOX GET TEXT CBHNDL, 1 TO b$ LISTBOX SELECT CBHNDL, 1, VAL(b$) + 1 KT_Main VAL(b$) + 1 END SELECT END FUNCTION 'functions for third part - Sje Po - bijzonder paars FUNCTION SjePo_Main AS LONG STATIC this AS LONG STATIC sectioncount AS LONG STATIC timings() AS LONG STATIC nexttime AS LONG STATIC cc AS LONG STATIC lightvelo AS BYTE LOCAL vel AS BYTE LOCAL bel AS BYTE LOCAL note AS BYTE LOCAL frq AS SINGLE IF ISFALSE(this) THEN this = %sjepomain DIM timings(8) timings(1) = 16: timings(2) = 16: timings(3) = 16: timings(4) = 48: timings(5) = 32 timings(6) = 48: timings(7) = 16: timings(8) = 16: timings(9) = 16: timings(10) = 16 timings(11) = 1 '(dummy) g_net_send "51" + CHR$(10), 0 'prepare for file to be played next section - onbe long file for this whole part END IF IF nexttime <= TIMER THEN INCR sectioncount nexttime = TIMER + timings(sectioncount) CONTROL SET TEXT gh.cockpit, %GMT_MSG1, "Section" + STR$(sectioncount) + " - duration:"+STR$(timings(sectioncount)) 'section end/inits SELECT CASE sectioncount CASE 1 '16" sirene (bij shakers) (f) task(this).freq = 1 Play AM_Springs.channel, 1, 120 ' g_net_send "51" + CHR$(10), 0 'prepare for file to be played next section - onbe long file for this whole part g_net_Send "100" + CHR$(10), 0 'now play it!! EXIT FUNCTION CASE 2 '16" tape Play AM_Springs.channel, 1, 0 ' g_net_Send "100" + CHR$(10), 0 'now play it!! EXIT FUNCTION CASE 3 'eerste 16" van 1'04'' tubi in a cfr. krung thep Task(this).freq = .2 CASE 4 'vervolg tubi ook clicks in autosax (niet te vol eerder aarzelend en at random, geeft echt niet als er af en toe stiltes vallen) Task(this).freq = 10 ' g_net_send "52" + CHR$(10), 0 CASE 5 '32" tape task(this).freq = 2 ' g_net_send "100" + CHR$(10), 0 CASE 6 '48" belly (cfr. Geröll, opnieuw niet te vol en at random, alle registers) ' g_net_send "53" + CHR$(10), 0 CASE 7 '1e 16" van 48" tape ' g_net_send "100" + CHR$(10), 0 CASE 8 'middenste 16 van 48" tape " + zwaailight CASE 9 'laatste 16" van 48" tape Play AM_Springs.channel, 2, 0 'zwaailicht af CASE 10 '16" tacet CASE 11 'einde StopTask this END SELECT END IF 'seciont specific continuos SELECT CASE sectioncount CASE 1 vel = MAX(40, RND * 120) Play AM_Springs.channel, 1, vel CASE 3 KT_FillTubiHar 21 ShowHar AM_Tubi.Har(1), 1,140,2! InsTrumPlay AM_Tubi Task(this).freq = MAX(.1, (Task(this).freq + RND^4) / 2) CASE 4 'task freq = 10 INCR cc IF (ISFALSE(cc MOD 7)) AND (RND > .9) THEN KT_FillTubiHar 21 ShowHar AM_Tubi.Har(1), 1,140,2! InsTrumPlay AM_Tubi END IF IF (RND < COS(cc * Pi / 70)^2) OR (RND < SIN(cc * Pi/90)^ 3) THEN note = AM_Sax.lowTes + RND^2 * (AM_Sax.HighTes - AM_Sax.LowTes) Play AM_Sax.channel, note, 1 Play AM_Sax.channel, note, 0 END IF CASE 6 bel = 68 + RND * 35: Play AM_Belly.channel, bel, 1 frq = .3 + 3 * RND IF RND > .8 THEN bel = 86 + RND * 14: Play AM_Belly.channel, bel, 1 frq = .2 + 2 * RND END IF task(this).freq = INT(frq * 5) / 5 'quantize op vijfden van sec CASE 8 lightvelo = (5 * lightvelo + 84 + 43 * RND) / 6 lightvelo = lightvelo AND &HFE Play AM_Springs.channel, 2, lightvelo 'zwaailicht Play AM_Springs.channel, 1, 0 ' lightvelo = (5 * lightvelo + 84 + 43 * RND) / 6 ' lightvelo = lightvelo AND &HFE ' Play AM_Springs.channel, 2, RND * 127 ' Play AM_Springs.channel, 2, lightvelo 'zwaailicht END SELECT END FUNCTION SUB AM_Springerpanic NoteOff AM_Springs.channel, 1 NoteOff AM_Springs.channel, 2 END SUB