'**************************************************** '* New pieces for EMilie * '* (as cockpit was full in old module) * '* may 2014 * '* Kristof Lauwers * '**************************************************** 'included and initialized from namuda.inc %magut1 = 17 %magut2 = 18 %magut3 = 19 %magut4 = 20 %magut5 = 21 %vexa = 23 %dances = 25 %belqt = 27 %belpuff = 28 %beltrump = 29 %belbourd = 30 %belpip = 31 %belbom = 32 %belso = 33 %belkorn = 34 %belllor = 35 %winter = 37 'ook 38 en 39 en 40 %verm = 42 '42 - 47 M&M januari 2015 - verleiding %meka = 49 FUNCTION Init_emilie2 AS LONG DIM Snar2 AS GLOBAL musician ' - not done in g_mm.inc GetInstrumentParams Snar2, %IDM_Snar2 ' in g_file.dll SetRobotport (Snar2, Inifilename, hMidiO()) Task(%magut1).naam= "ExKoQtXy" Task(%magut1).freq = 8 Task(%magut1).cptr = CODEPTR(Mu_deriv1) Task(%magut2).naam="d2KoKlHe" Task(%magut2).freq = 36 Task(%magut2).cptr = CODEPTR(Mu_deriv2) Task(%magut3).naam="JerkPno" Task(%magut3).freq = 36 Task(%magut3).cptr = CODEPTR(Mu_deriv3) Task(%magut4).naam="ColSnar" Task(%magut4).freq = 15 Task(%magut4).cptr = CODEPTR(Mu_snar) Task(%magut5).naam="ColSnar2" Task(%magut5).freq = 15 Task(%magut5).cptr = CODEPTR(Mu_snar2) Task(%dances).naam="dances" Task(%dances).freq = 32 '24 Task(%dances).cptr = CODEPTR(dances) Task(%dances + 1).naam= "_colCast" Task(%dances + 1).freq=1 Task(%dances + 1).cptr = CODEPTR(dummytask) Task(%dances + 2).naam= "_ThVaTb" Task(%dances + 2).freq=1 Task(%dances + 2).cptr = CODEPTR(dummytask) Task(%dances + 3).naam= "_fluQt" Task(%dances + 3).freq=1 Task(%dances + 3).cptr = CODEPTR(dummytask) Task(%dances + 4).naam= "_edgperc Task(%dances + 4).freq=1 Task(%dances + 4).cptr = CODEPTR(dummytask) Task(%dances + 5).naam= "_spd Task(%dances + 5).freq=1 Task(%dances + 5).cptr = CODEPTR(dummytask) Task(%dances + 6).naam= "_sldPia Task(%dances + 6).freq=1 Task(%dances + 6).cptr = CODEPTR(dummytask) Task(%vexa).naam= "vexations" Task(%vexa).freq = .75 '8sten Task(%vexa).cptr = CODEPTR(Vexations) Task(%belqt).naam = "belQt" Task(%belqt).freq = 20 Task(%belqt).cptr = CODEPTR(belQt) Task(%belpuff).naam = "belPuff" Task(%belpuff).freq = 14 Task(%belpuff).cptr = CODEPTR(belPuff) Task(%beltrump).naam = "belTrump" Task(%beltrump).freq = 0.5 'reset to 12 by task itself, first run slow to give time to wind.. Task(%beltrump).cptr = CODEPTR(belTrump) Task(%belbourd).naam= "belBrd" Task(%belbourd).freq = 18 Task(%belbourd).cptr = CODEPTR(belBourd) Task(%belpip).naam= "belPip" Task(%belpip).freq = 16 Task(%belpip).cptr = CODEPTR(belPiper) Task(%belbom).naam= "belBom" Task(%belbom).freq = 11 Task(%belbom).cptr = CODEPTR(belBom) Task(%belso).naam= "belSo" Task(%belso).freq = 6 Task(%belso).cptr = CODEPTR(belSo) Task(%belkorn).naam= "belKorn" Task(%belkorn).freq = 12 Task(%belkorn).cptr = CODEPTR(belKorn) Task(%belllor).naam= "belLlor" Task(%belllor).freq = 13 Task(%belllor).cptr = CODEPTR(belLlor) Task(%winter).naam="winter" Task(%winter).freq = 24 Task(%winter).cptr = CODEPTR(winter_Base) Task(%winter + 1).naam="_perc" Task(%winter + 1).freq = 1 Task(%winter + 1).cptr = CODEPTR(dummytask) Task(%winter + 2).naam="_drone" Task(%winter + 2).freq = 1 Task(%winter + 2).cptr = CODEPTR(dummytask) Task(%winter + 3).naam="_hiiiiii" 'nb alleen actief in combi met perc! Task(%winter + 3).freq = 1 Task(%winter + 3).cptr = CODEPTR(dummytask) Task(%verm).naam="vermijding" Task(%verm).freq = 60 Task(%verm).cptr = CODEPTR(Vermijding) Task(%verm + 1).naam="_spdup" Task(%verm + 1).freq = 1 Task(%verm + 1).cptr = CODEPTR(dummytask) Task(%verm + 2).naam="_sld" Task(%verm + 2).freq = 1 Task(%verm + 2).cptr = CODEPTR(dummytask) Task(%verm + 3).naam="_flue" Task(%verm + 3).freq = 1 Task(%verm + 3).cptr = CODEPTR(dummytask) Task(%verm + 4).naam="_coll" Task(%verm + 4).freq = 1 Task(%verm + 4).cptr = CODEPTR(dummytask) task(%verm +5).naam="drip" task(%verm+5).freq = 1.6 task(%verm+5).cptr = CODEPTR(drips) task(%meka).naam="EdgXy" task(%meka).freq = 24 Task(%meka).cptr = CODEPTR(MekaEdgyXy) task(%meka + 1).naam="ColCast" task(%meka + 1).freq = 28 Task(%meka + 1).cptr = CODEPTR(MekaColCast) task(%meka + 2).naam="TColWd" task(%meka + 2).freq = 20 Task(%meka + 2).cptr = CODEPTR(MekaTheaColWd) task(%meka + 3).naam="SmPsSpr" task(%meka + 3).freq = 32 Task(%meka + 3).cptr = CODEPTR(MekaSmPsch) task(%meka + 4).naam="ExplSpi" task(%meka + 4).freq = 16 Task(%meka + 4).cptr = CODEPTR(MekaExplSpi) task(%meka + 5).naam="ImplKlung" task(%meka + 5).freq = 12 Task(%meka + 5).cptr = CODEPTR(MekaImplKlung) task(%meka + 6).naam="ColWhisp" task(%meka + 6).freq = 12 Task(%meka + 6).cptr = CODEPTR(MekaColWhisper) task(%meka + 7).naam="SldToypi" task(%meka + 7).freq = 12 Task(%meka + 7).cptr = CODEPTR(MekaSldToypi) task(%meka + 8).naam="SpdPerc" task(%meka + 8).freq = 8 Task(%meka + 8).cptr = CODEPTR(MekaSpdPerc) task(%meka + 10).naam="monMd" task(%meka + 10).freq = 8 Task(%meka + 10).cptr = CODEPTR(monmindur) MM_Hybr_On LOCAL i AS LONG FOR i = 58 TO 94 Keypress Balmec.channel, i, 1 NEXT mPlay mDisp_A.channel , 1, INT(RND * 10) mPlay mDisp_B.channel , 1, INT(RND * 10) 'danses via midiplayer playalong cptr Task(App.MidiPlayertasknr).hparam = CODEPTR(Dances_PlayAlong) FUNCTION = 1 END FUNCTION SUB monmindur CONTROL SET TEXT gh.cockpit, %GMT_AUTHOR, STR$(Task(App.MidiPlayerTasknr).rit.minduur) END SUB SUB Mu_deriv1 LOCAL expantie AS SINGLE LOCAL kontraktie AS SINGLE STATIC init AS DWORD IF ISFALSE init THEN MM_Qt_On %MM_Wind OR %MM_Motor Qt.ctrl(7) = 102 init = 1 END IF ' genormaliseerde expantie: expantie = SQR(SQR(ABS( gesture.dS1(3)))) ' genormaliseerde kontraktie kontraktie = SQR(ABS( gesture.ds1(4))) ' always positive 0-1 IF expantie > .3 THEN Qt.qhar(1) = qt.qhar(0) AddNote2QHar Qt.qhar(1), Qt.LowTes + (qt.Hightes - qt.LowTes) * (expantie - .3)/.8, 20 Qt.Ctrl(7) = (4 * Qt.ctrl(7) + expantie * 127) / 5 Controller Qt.channel, 7, Qt.ctrl(7) END IF QInstrumPLay Qt IF Kontraktie > .2 THEN AddNote2Qhar Xy.qhar(1), 65 + 43 * SQR(ABS(gesture.ds1(0))), @pDoppler.xa * 70 AddNote2Qhar Xy.qhar(1), 65 + 43 * SQR(ABS(gesture.ds1(1))), @pDoppler.ya * 70 AddNote2Qhar Xy.qhar(1), 65 + 43 * SQR(ABS(gesture.ds1(2))), @pDoppler.za * 70 END IF QInstrumPlay Xy logfile "d1 "+ STR$(expantie) + STR$(kontraktie) END SUB SUB Mu_deriv2 STATIC init AS DWORD STATIC cc AS DWORD STATIC sens AS SINGLE LOCAL d AS SINGLE IF ISFALSE init THEN Controller Korn.channel, 66, 0 Controller Klar.channel, 66, 0 Controller Fa.channel, 66, 0 Controller Korn.channel, 66, 1 Controller Klar.channel, 66, 1 Controller Fa.channel, 66, 1 Controller Korn.channel, 19, 126 Controller Fa.channel, 19, 126 Controller Klar.channel, 19, 126 Controller Korn.channel, 18, 0 Controller Fa.channel, 18, 127 Controller Klar.channel, 19, 127 Controller Fa.channel, 26, 120 'reso Controller Klar.channel, 26, 120 Slider(1).value = 20 ' 63 '90 '64 '40 '2 '64 SendMessage Slider(1).h, %TBM_SETPOS,%True, Slider(1).value warning "slider 1 for korn/klar/fa trigger level" init = 1 END IF logfile "d2" + STR$(Gesture.ds2(0)) + STR$(Gesture.ds2(1))+ STR$(Gesture.ds2(2)) CONTROL SET TEXT gh.cockpit,%GMT_MSG2, "trig:" + STR$(sens) INCR cc sens = Slider(1).value / 100 SELECT CASE cc MOD 3 CASE 0 d = SQR(ABS(gesture.ds2(0))) IF d > sens THEN Controller Korn.channel, 17, 20 + @pDoppler.xa * 107 AddNote2Har Korn.Har(1), Korn.LowTes + (Korn.HighTes - Korn.LowTes) * (d - .1) / .8, 127 END IF InstrumPlay Korn CASE 1 d = SQR(ABS(gesture.ds2(1))) IF d > sens THEN Controller Klar.channel, 7, 20 + @pDoppler.ya * 107 Controller Klar.channel, 25, 50 + @pDoppler.ya * 77 Controller Fa.channel, 29, MIN(127, @pDoppler.yf/1.5) AddNote2Har Klar.Har(1), Klar.LowTes + (Klar.HighTes - Klar.LowTes) * (d - .1) / .8, 127 END IF InstrumPlay Klar CASE 2 d = SQR(ABS(gesture.ds2(2))) IF d > sens THEN Controller Fa.channel, 7, 20 + @pDoppler.za * 107 Controller Fa.channel, 29, MIN(127, @pDoppler.zf/1,5) Controller Fa.channel, 25, 50 + MIN (57, @pDoppler.za * 77) AddNote2Har Fa.Har(1), Fa.LowTes + (Fa.HighTes - Fa.LowTes) * (d - .1) / .8, 127 END IF InstrumPlay Fa END SELECT END SUB SUB Mu_deriv3 '"jerk" STATIC cc AS DWORD LOCAL sens AS SINGLE IF ISFALSE cc THEN Slider(0).value = 15 ' 63 '90 '64 '40 '2 '64 SendMessage Slider(0).h, %TBM_SETPOS,%True, Slider(0).value warning "slider 0 for piano trigger level" END IF INCR cc logfile "d3" + STR$(Gesture.ds3(0))+ STR$(Gesture.ds3(1))+ STR$(Gesture.ds3(2)) sens = Slider(0).value / 100 CONTROL SET TEXT gh.cockpit, %GMT_MSG1, "trig:" + STR$(sens) IF BIT(cc, 0) THEN IF gesture.ds3(0) > sens THEN AddNote2Har Piano.Har(1), 24 + 24 * (gesture.ds3(0) - .2), SQR(@pDoppler.xa) * 127 IF gesture.ds3(1) > sens THEN AddNote2Har Piano.Har(1), 48 + 24 * (gesture.ds3(1) - .2), SQR(@pDoppler.ya) * 127 IF gesture.ds3(0) > sens THEN AddNote2Har Piano.Har(1), 72 + 24 * (gesture.ds3(3) - .2), SQR(@pDoppler.za) * 127 END IF InstrumPlay Piano END SUB SUB Mu_snar STATIC sens AS SINGLE STATIC cc AS DWORD STATIC roll AS INTEGER IF ISFALSE sens THEN ProgChange Snar.channel, 122 sens = .8 '1.8 - was te ongevoelig voor wat emilie er op deed END IF logfile STR$(Gesture.collision(0)) + STR$(gesture.collision(1)) IF Gesture.collision(0) > sens THEN mPlay Snar.channel, 60 + RND * 12, 20 + @pDoppler.xa * 107 roll = roll + 8 END IF IF roll THEN DECR roll mplay Snar.channel, 60 + RND * 12, MIN(127, 20 + @pDoppler.xa * roll/8 * 107) END IF IF Gesture.collision(1) > sens THEN IF ISFALSE (cc MOD 3) THEN mPlay Snar.channel, 73 + INT(RND * 2), 40 + @pDoppler.ya * 87 END IF controller Snar.channel, 11, MAX(0, SQR(@pDoppler.xa) * 127) INCR cc END SUB SUB Mu_Snar2 STATIC MinTrigVal AS SINGLE STATIC cc AS DWORD STATIC roll AS INTEGER IF ISFALSE Mintrigval THEN Mintrigval = .06 END IF IF ((@pDoppler.xa > mintrigval) AND (gesture.theacol(0) > .1)) THEN mPlay Snar2.channel, 60 + RND * 12, 20 + @pDoppler.xa * 67 roll = roll + 6 END IF IF roll THEN DECR roll mPlay Snar2.channel, 60 + RND * 12, MIN(100, 20 + @pDoppler.xa * (roll/8) * 107) 'nb roll can be > 8.. END IF IF ((@pDoppler.ya > mintrigval) AND (gesture.theacol(1) > .1)) THEN IF ISFALSE cc MOD 3 THEN mPlay Snar2.channel, 73 + INT(RND * 2), 40 + @pDoppler.xa * 87 END IF INCR cc controller Snar2.channel, 11, MAX(0, SQR(@pDoppler.xa) * 200 - 73) END SUB SUB dances STATIC colsens AS SINGLE STATIC asens AS SINGLE STATIC thcsens AS SINGLE STATIC esens AS SINGLE 'edgy STATIC spdsens AS SINGLE STATIC sdsens AS SINGLE LOCAL spf AS SINGLE STATIC cc AS DWORD STATIC kornn AS BYTE, fan AS BYTE, klarn AS BYTE STATIC basen AS BYTE STATIC picont AS INTEGER IF ISFALSE colsens THEN colsens = .9 '1.4 asens = .08 thcsens = .04 '.1 esens = .4 spdsens = 18 sdsens = 8 Progchange Casta2.channel, 122 Progchange casta.channel, 122 MM_Qt_On %MM_Motor MM_Krum_On %MM_Wind OR %MM_Motor MM_so_On MM_Heli_On kornn = Korn.LowTes fan = Fa.Lowtes klarn = klar.lowtes basen = 24 END IF INCR cc IF ISFALSE (cc MOD 96) AND RND < .33 THEN basen = basen + CHOOSE(1 + INT(RND*7), -7, -5, -2, 1, 3, 5, 7) IF basen > 30 THEN basen = basen - 12 IF basen < 18 THEN basen = basen + 12 END IF spf = 1 + .5 * SIN(cc/200) CONTROL SET TEXT gh.cockpit, %GMT_MSG2, STR$(spf) '1 taak, ritmisch, verschillende parameters zitten op verschillende modulo's ' control set text gh.cockpit, %GMT_MSG1, str$(task(%dances+1).swit) ' çollision -> castas 'naast de tellen! IF (task(%dances+1).swit > 0) AND ((cc MOD 4) > 0) THEN CONTROL SET TEXT gh.cockpit, %GMT_MSG1, STR$(cc) IF Gesture.collision(0) > colsens THEN mPlay Casta.channel, Casta.LowTes + (cc MOD 15), 40 + @pDoppler.xa * 87 END IF IF Gesture.collision(1) > colsens THEN mPlay Casta2.channel, Casta2.LowTes + (cc MOD 15), 20 + (@pDoppler.ya * 40) / (2 - cc MOD 2) END IF IF Gesture.collision(2) > colsens THEN mPlay Psch.channel, Psch.Lowtes + cc MOD 12, SQR(@pDoppler.za) * 127 END IF END IF 'theacol vacca ', op tellen IF (Task(%dances + 2).swit > 0) AND ISFALSE (cc MOD 4) THEN IF ((@pDoppler.xa > asens) AND (gesture.theacol(0) > thcsens)) THEN mPlay Vacca.channel, Vacca.LowTes + RND * 8 + 8 * ((cc \ 16) MOD 4), @pDoppler.xa * 80 END IF IF ((@pDoppler.ya > asens) AND (gesture.theacol(1) > thcsens)) THEN mPlay Temblo.channel, CHOOSE((cc\16) MOD 2 + 1, 60, 72) + ((cc\4) MOD 5), @pDoppler.ya * 127 END IF END IF 'qt on smooth IF (Task(%dances + 3).swit > 0) AND ISFALSE (cc MOD 4) THEN controller qt.channel, 7, 65 + 20 * (@pDoppler.xa + @pDoppler.ya + @pDoppler.za) IF ISFALSE (cc MOD 3) OR ISFALSE (cc MOD 5) THEN IF RND > .25 THEN IF Gesture.Edgy(0) < Gesture.Smooth(0) THEN AddNote2QHar Qt.QHar(1), MatchSpecNote(Qt.LowTes + @pDoppler.xf, basen - 12, spf), 20 IF Gesture.Edgy(1) < Gesture.Smooth(1) THEN AddNote2QHar Qt.QHar(1), MatchSpecNote(Qt.LowTes + @pDoppler.yf, basen - 12, spf), 20 IF Gesture.Edgy(2) < Gesture.Smooth(2) THEN AddNote2QHar Qt.QHar(1), MatchSpecNote(Qt.LowTes + @pDoppler.zf, basen - 12, spf), 20 QInstrumPlay Qt END IF ELSE IF RND > .5 THEN QInstrumPlay Qt END IF END IF 'tw + troms + simba @ edgy - was krum, didn't work well IF (Task(%dances+4).swit > 0) THEN ' if isfalse((cc + 2) mod 4) then ' if isfalse (cc mod 3) and (Gesture.Smooth(0) + esens) < Gesture.Edgy(0) then AddNote2Har Krum.Har(1), max(Krum.LowTes, Krum.HighTes - @pDoppler.xf/2), 20 ' IF isfalse ((cc + 1) mod 3) and (Gesture.Smooth(1) + esens) < Gesture.Edgy(1) THEN AddNote2Har Krum.Har(1), MAX(Krum.LowTes, Krum.HighTes - @pDoppler.yf/2), 20 ' IF isfalse ((cc+2) mod 3) and (Gesture.Smooth(2)+ esens) < Gesture.Edgy(2) THEN AddNote2Har Krum.Har(1), MAX(Krum.LowTes, Krum.HighTes - @pDoppler.zf/2), 20 ' end if ' InstrumPlay Krum IF (ISFALSE (cc MOD 8)) THEN IF gesture.edgy(0) > gesture.smooth(0) + esens THEN mPlay Troms.channel, 30 + RND * 7, @pDoppler.xa * 127 IF gesture.edgy(1) > gesture.smooth(1) + esens THEN mPlay Thunderwood.channel, 1 + RND * 13, @pDoppler.xa * 127 IF gesture.edgy(2) > gesture.smooth(2) + esens THEN mPlay Snar.channel, 60 + RND * 12, @pDoppler.xa * 100 END IF IF ISFALSE ((cc + 4) MOD 8) THEN IF gesture.edgy(0) > gesture.smooth(0) + esens THEN mPlay Troms.channel, 38 + RND * 9, @pDoppler.xa * 90 IF gesture.edgy(1) > gesture.smooth(1) + esens THEN mPlay Thunderwood.channel, CHOOSE(1 + INT(RND * 4),16, 17, 19, 26), @pDoppler.xa * 90 IF gesture.edgy(2) > gesture.smooth(2) + esens THEN mPlay simba.channel, CHOOSE(1 + INT(RND * 18),60, 61, 62, 63, 65, 66, 67, 68, 69, 70, 72, 73, 74, 75,80, 80, 80, 80), @pDoppler.za * 70 END IF END IF 'mopnophonic on speedup/slowdown IF task(%dances+5).swit > 0 THEN IF ISFALSE (cc MOD 6) OR ISFALSE (cc MOD 20)THEN IF gesture.speedup(0) > gesture.slowdown(0) + spdsens THEN INCR kornn logfile "u " + STR$(kornn) IF kornn > korn.Hightes THEN kornn = kornn - 12 IF @pDoppler.xa > .15 THEN AddNote2Har Korn.Har(1), MatchSpecnote(Kornn, basen, spf), @pDoppler.xa * 127 IF ISFALSE (cc MOD 8) THEN AddNote2Har So.Har(1), basen, SQR(@pDoppler.xa) * 80 END IF END IF ELSEIF gesture.slowdown(0) > gesture.speedup(0) + spdsens THEN DECR kornn logfile "d" + STR$(kornn) IF kornn < korn.Lowtes THEN kornn = kornn + 12 IF @pDoppler.xa > .15 THEN AddNote2Har Korn.Har(1), MatchSpecnote(Kornn, basen, spf), @pDoppler.xa * 127 IF ISFALSE (cc MOD 8) THEN AddNote2Har So.Har(1), basen, SQR(@pDoppler.xa) * 80 END IF END IF ELSE kornn = (5 * kornn + korn.lowtes + korn.hightes) / 7 END IF InstrumTransposeToRange Korn InstrumPlay Korn IF ISFALSE cc MOD 4 THEN InstrumPlay So END IF IF ISFALSE (cc MOD 8) OR ISFALSE (cc MOD 14) THEN IF gesture.speedup(1) > gesture.slowdown(1) + spdsens THEN INCR klarn: INCR klarn IF klarn > klar.Hightes THEN klarn = klarn - 12 IF @pDoppler.ya > .15 THEN AddNote2Har Klar.Har(1), MatchSpecnote(Klarn, basen, spf), @pDoppler.ya * 100 IF ISFALSE (cc MOD 4) THEN AddNote2Har Heli.Har(1), basen, SQR(@pDoppler.ya) * 80 END IF END IF ELSEIF gesture.slowdown(1) > gesture.speedup(1) + spdsens THEN DECR klarn IF klarn < klar.Lowtes THEN klarn = klarn + 12 IF @pDoppler.ya > .15 THEN AddNote2Har Klar.Har(1), MatchSpecnote(Klarn, basen, spf), @pDoppler.ya * 100 IF ISFALSE (cc MOD 4) THEN AddNote2Har Heli.Har(1), basen, SQR(@pDoppler.ya) * 80 END IF END IF ELSE klarn = (5 * klarn + klar.lowtes + klar.hightes) / 7 END IF InstrumTransposeToRange Klar InstrumPlay Klar IF ISFALSE cc MOD 4 THEN InstrumPlay Heli ELSEIF ISFALSE (cc + 3) MOD 7 THEN InstrumPlay Klar END IF IF ISFALSE (cc MOD 12) OR ISFALSE(cc MOD 16) THEN IF gesture.speedup(2) > gesture.slowdown(2) + spdsens THEN INCR fan: INCR fan IF fan > fa.Hightes THEN fan = fan - 12 IF @pDoppler.za > .15 THEN AddNote2Har fa.Har(1), MatchSpecnote(fan, basen, spf), @pDoppler.za * 90 ELSEIF gesture.slowdown(2) > gesture.speedup(2) + spdsens THEN DECR fan IF fan < fa.Lowtes THEN fan = fan + 12 IF @pDoppler.za > .15 THEN AddNote2Har fa.Har(1), MatchSpecnote(fan, basen, spf), @pDoppler.za * 90 ELSE fan = (5 * fan + fa.lowtes + fa.hightes) / 7 END IF InstrumTransposeToRange Fa InstrumPlay Fa ELSEIF ISFALSE (cc + 4) MOD 8 THEN InstrumPlay Fa END IF END IF IF task(%dances + 6).swit THEN IF (ISFALSE cc MOD 4) AND (picont < RND * 12) THEN IF (gesture.slowdown(0) > sdsens) THEN AddNote2Har Piano.Har(1), MatchSpecNote(Piano.LowTes + @pDoppler.xf, basen, spf), (@pDoppler.xa)^.65 * 100: INCR picont IF (gesture.slowdown(1) > sdsens) THEN AddNote2Har Piano.Har(1), MatchSpecNote(Piano.LowTes + @pDoppler.yf, basen, spf), (@pDoppler.ya)^.65 * 100: INCR picont IF (gesture.slowdown(2) > sdsens) THEN AddNote2Har Piano.Har(1), MatchSpecNote(Piano.LowTes + @pDoppler.zf, basen, spf), (@pDoppler.za)^.65 * 100: INCR picont InstrumTransposeToRange piano ELSEIF (ISFALSE cc MOD 4) THEN IF (gesture.slowdown(0) <= sdsens) THEN DECR picont IF (gesture.slowdown(1) <= sdsens) THEN DECR picont IF (gesture.slowdown(2) <= sdsens) THEN DECR picont picont = MAX(0, picont) END IF CONTROL SET TEXT gh.cockpit, %GMT_AUTHOR, STR$(picont) InstrumPlay Piano END IF END SUB SUB dummytask END SUB SUB vexations (OPT BYVAL endflag AS LONG) 'vexations with instrmentation changing according to namuda movement props.. 'ready for first rehearsal '????? how do we end? STATIC bas() AS INTEGER STATIC alt1() AS INTEGER STATIC sop1() AS INTEGER STATIC alt2() AS INTEGER STATIC sop2() AS INTEGER STATIC init AS DWORD STATIC zin AS LONG STATIC tick AS LONG STATIC basn AS INTEGER, sopn AS INTEGER, altn AS INTEGER STATIC basm AS musician, sopm AS musician, altm AS musician STATIC mintrigval AS SINGLE STATIC collisionval AS SINGLE STATIC coda AS LONG LOCAL props AS DWORD STATIC lprops AS DWORD LOCAL t AS LONG LOCAL v AS LONG STATIC hw AS DWORD IF endflag THEN coda = 1 EXIT SUB END IF IF ISFALSE init THEN init = 1 DIM bas(25) DIM alt1(25) DIM alt2(25) DIM sop1(25) DIM sop2(25) '0 = cont, -1 = rest ARRAY ASSIGN bas() = 60, 0, 57, 61, 58, 0, 63, 0, 55, 62, 60, 63, 54, 0, 61, 0, 53, 59, 54, 63, 59, 0, 64, 0, 0, -1 ARRAY ASSIGN alt1() = 69, 0, 73, 71, 73, 0, 72, 0, 70, 71, 75, 72, 76, 0, 70, 0, 69, 68, 69, 72, 74, 0, 73, 0, 0, -1 ARRAY ASSIGN alt2() = 63, 0, 65, 64, 67, 0, 66, 0, 64, 65, 69, 66, 63, 0, 64, 0, 63, 62, 63, 66, 68, 0, 67, 0, 0, -1 ARRAY ASSIGN sop1() = 75, 0, 77, 76, 79, 0, 78, 0, 76, 77, 81, 78, 75, 0, 76, 0, 75, 74, 75, 78, 80, 0, 79, 0, 0, -1 ARRAY ASSIGN sop2() = 69, 0, 73, 70, 73, 0, 72, 0, 70, 71, 75, 72, 70, 0, 71, 0, 70, 69, 70, 72, 74, 0, 73, 0, 0, -1 basm = piano: sopm = piano: altm = piano MM_Trump_On %MM_Wind OR %MM_MOTOR MM_Krum_On %MM_Wind OR %MM_MOTOR MM_Humanola_On %MM_Wind OR %MM_MOTOR MM_Qt_On %MM_Wind OR %MM_MOTOR MM_Piperola_On %MM_Wind OR %MM_Motor MM_Bomi_On %MM_Wind OR %MM_Motor Qt.ctrl(7) = 104 ' Controller Asa.channel, 7, 40 mintrigval = .08 collisionval = 1.2 DIALOG NEW 0, "einde",, , 200, 20 TO hw CONTROL ADD BUTTON, hw, 1, "Einde", 1, 1, 198, 18, CALL Vexation_end DIALOG SHOW MODELESS hw EXIT SUB END IF IF coda THEN INCR coda Controller Qt.channel, 7, MAX(0, 91 - coda * 2 ) IF coda = 50 THEN MM_AllOff StopTask %vexa EXIT SUB END IF END IF IF init = 1 THEN INCR init: EXIT SUB 'allow wind to build up.. IF ISFALSE coda THEN Task(%vexa).freq = MIN(3, (7 * Task(%vexa).freq + .75 + (@pDoppler.xf + @pDoppler.yf + @pDoppler.zf) / 100) / 8) qt.ctrl(7) = (8 * Qt.ctrl(7) + 61 + 18 * (@pDoppler.xa + @pDoppler.ya + @pDoppler.za)) / 9 Controller Qt.channel, 7, Qt.ctrl(7) ELSE Task(%vexa).freq = .75 END IF ' çheck movement props IF gesture.smooth(0) + gesture.smooth(1) + gesture.smooth(2) > 1 THEN BIT SET props, 1 END IF IF Gesture.edgy(3)> .2 THEN BIT RESET props, 1: BIT SET props, 2 'óne vector edgy -> kill smoothness IF MAX(Gesture.collision(0), Gesture.collision(1), Gesture.collision(2)) > collisionval THEN BIT RESET props, 1: BIT SET props, 4 '' IF gesture.speedup(2) > gesture.slowdown(2) + sens THEN, sens being 18 in robodomu -TO BE CHECKED IF gesture.speedup(3) > gesture.slowdown(3) + 24 THEN BIT SET props, 5: logfile "SPEEDUP" 'gwr's criterium was + 18, but then we almost always have either speedup either slowdown.. IF gesture.slowdown(3) > gesture.speedup(3) + 24 THEN BIT SET props, 6: logfile "SLOWDOWN IF (Gesture.freeze(0) + gesture.freeze(1) + gesture.freeze(2)) >= 1 THEN 'twee vectors freeze vereist.. props = 1 'óverwrites other props.. END IF IF ISFALSE props THEN props = lprops lprops = props logfile BIN$(props) + STR$(gesture.edgy(0)) IF coda THEN props = 1 'overwrite on coda - only qt! 'no movement, no sound? or do we play on? 'bas - var 1 - bas- var 2 %%% IF bas(tick) = -1 THEN instrumplay basm ELSEIF ISFALSE bas(tick) THEN ' basm.har(1) = basm.har(0) INCR tick EXIT SUB 'sic - gaat toch samen met andere stemmen.. ELSE 'choose new instrument and play note InstrumPlay basm IF props = 1 THEN 'freeze basm = Qt ELSEIF BIT(props, 1) THEN 'smooth basm = Piano ELSEIF BIT(props, 2) THEN 'édgy ' basm = trump basm = vibi t = 12 v = 20 ELSEIF BIT(props, 4) THEN 'collision/jump ' basm = vibi ' t = 12 basm = trump ELSEIF BIT(props, 5) THEN 'speedup basm = Fa ELSEIF BIT(props, 6) THEN 'slowdown basm = Heli 'Asa was te stil END IF AddNote2Har basm.har(1), bas(tick) + t, MIN(127, 40 + (20 + v) * (@pDoppler.xa + @pDoppler.ya + @pDoppler.za)) END IF CONTROL SET TEXT gh.cockpit, %GMT_MSG1, STR$(zin) + STR$(tick) CONTROL SET TEXT gh.cockpit, %GMT_MSG2, STR$(props ) 'sopraan/alt alleen op zin 1/3 IF zin = 1 THEN IF alt1(tick) = -1 THEN InstrumPlay altm ELSEIF alt1(tick) = 0 THEN altm.har(1) = altm.har(0) ELSE InstrumPlay altm IF props = 1 THEN 'freeze altm = Qt ELSEIF BIT(props, 1) THEN 'smooth altm = Piano ELSEIF BIT(props, 2) THEN 'édgy ' altm = Krum altm = Xy t = 12 v = 20 IF MAX(@pDoppler.xa, @pDoppler.ya, @pDoppler.za) > .3 THEN AddNote2Har Tubi.Har(1),alt1(tick) + t + t, MIN(127, 40 + (20 + v) * (@pDoppler.xa + @pDoppler.ya + @pDoppler.za)) InstrumPlay Tubi END IF ELSEIF BIT(props, 4) THEN 'collision/jump altm = Krum ' altm = Xy ' t = 12 ELSEIF BIT(props, 5) THEN 'speedup altm = Korn ELSEIF BIT(props, 6) THEN 'slowdown altm = Bomi END IF AddNote2Har altm.har(1), alt1(tick) + t, MIN(127, 40 + (20 + v) * (@pDoppler.xa + @pDoppler.ya + @pDoppler.za)) END IF IF sop1(tick) = -1 THEN InstrumPlay sopm ELSEIF sop1(tick) = 0 THEN sopm.har(1) = sopm.har(0) ELSE InstrumPlay sopm IF props = 1 THEN 'freeze sopm = Qt ELSEIF BIT(props, 1) THEN 'smooth sopm = Piano ELSEIF BIT(props, 2) THEN 'édgy ' sopm = Humanola sopm = Xy t = 12 v = 20 IF MAX(@pDoppler.xa, @pDoppler.ya, @pDoppler.za) > .3 THEN AddNote2Har Tubi.Har(1),sop1(tick) + t + t, MIN(127, 40 + 20 * (@pDoppler.xa + @pDoppler.ya + @pDoppler.za)) InstrumPlay Tubi END IF ELSEIF BIT(props, 4) THEN 'collision/jump sopm = Humanola ' sopm = Xy ' t = 12 ELSEIF BIT(props, 5) THEN 'speedup sopm = Ob ELSEIF BIT(props, 6) THEN 'slowdown sopm = Piperola END IF AddNote2Har sopm.har(1), sop1(tick) + t, MIN(127, 40 + 20 * (@pDoppler.xa + @pDoppler.ya + @pDoppler.za)) END IF ELSEIF zin = 3 THEN IF alt2(tick) = -1 THEN InstrumPlay altm ELSEIF alt2(tick) = 0 THEN altm.har(1) = altm.har(0) ELSE InstrumPlay altm IF props = 1 THEN 'freeze altm = Qt ELSEIF BIT(props, 1) THEN 'smooth altm = Piano ELSEIF BIT(props, 2) THEN 'édgy ' altm = Krum altm = Xy t = 12 IF MAX(@pDoppler.xa, @pDoppler.ya, @pDoppler.za) > .3 THEN AddNote2Har Tubi.Har(1),alt2(tick) + t + t, MIN(127, 40 + 20 * (@pDoppler.xa + @pDoppler.ya + @pDoppler.za)) InstrumPlay Tubi END IF ELSEIF BIT(props, 4) THEN 'collision/jump altm = Krum ' altm = Xy ' t = 12 ELSEIF BIT(props, 5) THEN 'speedup altm = Korn ELSEIF BIT(props, 6) THEN 'slowdown altm = Bomi END IF AddNote2Har altm.har(1), alt2(tick) + t, 40 + 20 * (@pDoppler.xa + @pDoppler.ya + @pDoppler.za) END IF IF sop2(tick) = -1 THEN InstrumPlay sopm ELSEIF sop2(tick) = 0 THEN sopm.har(1) = sopm.har(0) ELSE instrumplay sopm IF props = 1 THEN 'freeze sopm = Qt ELSEIF BIT(props, 1) THEN 'smooth sopm = Piano ELSEIF BIT(props, 2) THEN 'édgy ' sopm = Humanola sopm = Xy t = 12 IF MAX(@pDoppler.xa, @pDoppler.ya, @pDoppler.za) > .3 THEN AddNote2Har Tubi.Har(1),sop2(tick) + t + t, MIN(127, 40 + (20 + v) * (@pDoppler.xa + @pDoppler.ya + @pDoppler.za)) InstrumPlay Tubi END IF ELSEIF BIT(props, 4) THEN 'collision/jump sopm = Humanola ' sopm = Xy ' t = 12 ELSEIF BIT(props, 5) THEN 'speedup sopm = Ob ELSEIF BIT(props, 6) THEN 'slowdown sopm = Piperola END IF AddNote2Har sopm.har(1), sop2(tick) + t, 40 + 20 * (@pDoppler.xa + @pDoppler.ya + @pDoppler.za) END IF ELSE InstrumPlay altm 'off InstrumPlay sopm END IF 'trump staccato op vraag vna gwr - xof is niet overtuigd.. 'dit werkte toen we het uitprobeerden, maar op de repetitie niet (altijd)? IF UCASE$(TRIM$(Basm.naam))="TRUMP" THEN PlayHarDur Basm.channel, Basm.Har(1), 300 RESET Basm.Har(1).vel ELSE InstrumPlay Basm END IF instrumplay Altm InstrumPlay Sopm ' INCR tick tick = tick MOD 26 IF ISFALSE(tick) THEN INCR zin zin = zin MOD 4 END IF END SUB CALLBACK FUNCTION vexation_end IF CBMSG <> %WM_COMMAND THEN EXIT FUNCTION IF CBCTLMSG <> %BN_CLICKED THEN EXIT FUNCTION DIALOG END CBHNDL vexations 1 END FUNCTION SUB Belqt ' moduleren? STATIC cont AS LONG IF (gesture.smooth_dur(3)) AND (MAX(@pDoppler.xa, @pdoppler.ya, @pDoppler.za) > .1) THEN ' Qt.Qhar(1).vel = Qt.Qhar(0).vel AddNote2qHar Qt.qhar(1), MIN(qt.HighTes, Qt.LowTes + .7 * SQR(@pDoppler.xf)), 20 AddNote2QHar Qt.Qhar(1), MIN(qt.HighTes,Qt.LowTes + .7 * SQR(@pDoppler.yf)), 20 AddNote2Qhar Qt.Qhar(1), MIN(qt.HighTes,Qt.LowTes + .7 * SQR(@pDoppler.zf)), 20 AddNote2qHar Qt.qhar(1), MIN(qt.HighTes,Qt.LowTes + @pDoppler.xf/2), 20 AddNote2QHar Qt.Qhar(1), MIN(qt.HighTes,Qt.LowTes + @pDoppler.yf/2), 20 AddNote2Qhar Qt.Qhar(1), MIN(qt.HighTes,Qt.LowTes + @pDoppler.zf/2), 20 QInstrumPlay Qt INCR cont cont = MIN(cont, 100) ELSE ' warning "reset" + str$(timegettime) ' Qt.Qhar(0).vel = "" IF cont THEN DECR cont IF ISFALSE cont THEN QInstrumPlay Qt END IF END IF CONTROL SET TEXT gh.cockpit, %GMT_MSG1, STR$(cont) CONTROL SET TEXT gh.cockpit, %GMT_MSG2, STR$(MAX(@pDoppler.xa, @pdoppler.ya, @pDoppler.za)) controller Qt.Channel, 7, 13 + (@pDoppler.xa + @pDoppler.ya + @pDoppler.za) * 30 END SUB 'fluent similar on bourdo? SUB BelBourd STATIC sens AS SINGLE IF ISFALSE sens THEN sens = 0.625 END IF IF gesture.flue(0) > sens THEN AddNote2Har Bourdonola.Har(1), Bourdonola.Lowtes + SQR(@pDoppler.xf), 20 IF gesture.flue(1) > sens THEN AddNote2Har Bourdonola.Har(1), Bourdonola.Lowtes + .92 * SQR(@pDoppler.yf), 20 IF gesture.flue(2) > sens THEN AddNote2Har Bourdonola.Har(1), Bourdonola.Lowtes + .85 * SQR(@pDoppler.zf), 20 IF gesture.flue(0) > sens THEN AddNote2Har Bourdonola.Har(1), Bourdonola.Lowtes + @pDoppler.xf, 20 IF gesture.flue(1) > sens THEN AddNote2Har Bourdonola.Har(1), Bourdonola.Lowtes + .92 * @pDoppler.yf, 20 IF gesture.flue(2) > sens THEN AddNote2Har Bourdonola.Har(1), Bourdonola.Lowtes + .85 * @pDoppler.zf, 20 InstrumTransposeToRange Bourdonola InstrumPlay Bourdonola Controller Bourdonola.channel, 1, 5 + (@pDoppler.xa + @pDoppler.ya + @pDoppler.za) * 40 END SUB SUB BelPiper STATIC sens AS SINGLE IF ISFALSE sens THEN sens = 0.625 END IF IF gesture.flue(0) > sens THEN AddNote2Har piperola.Har(1), piperola.Lowtes + .5 * SQR(@pDoppler.xf), 20 IF gesture.flue(1) > sens THEN AddNote2Har piperola.Har(1), piperola.Lowtes + .5 * SQR(@pDoppler.yf), 20 IF gesture.flue(2) > sens THEN AddNote2Har piperola.Har(1), piperola.Lowtes + .5 * SQR(@pDoppler.zf), 20 IF gesture.flue(0) > sens THEN AddNote2Har piperola.Har(1), piperola.Lowtes + .5 * @pDoppler.xf, 20 IF gesture.flue(1) > sens THEN AddNote2Har piperola.Har(1), piperola.Lowtes + .5 * @pDoppler.yf, 20 IF gesture.flue(2) > sens THEN AddNote2Har piperola.Har(1), piperola.Lowtes + .5 * @pDoppler.zf, 20 InstrumTransposeToRange piperola InstrumPlay piperola Controller piperola.channel, 7, 5 + (@pDoppler.xa + @pDoppler.ya + @pDoppler.za) * 40 END SUB 'edgy: puff SUB belPuff IF Gesture.Edgy(0) > Gesture.Smooth(0) * 1.2 THEN AddNote2Qhar Puff.Qhar(1), 55 + SQR(@pDoppler.xf), 5 + 25 * @pDoppler.xa IF Gesture.Edgy(1) > Gesture.Smooth(1) * 1.2 THEN AddNote2Qhar Puff.Qhar(1), 55 + SQR(@pDoppler.yf), 5 + 25 * @pDoppler.ya IF Gesture.Edgy(2) > Gesture.Smooth(2) * 1.2 THEN AddNote2Qhar Puff.Qhar(1), 55 + SQR(@pDoppler.zf), 5 + 25 * @pDoppler.za IF Gesture.Edgy(0) > Gesture.Smooth(0) * 1.2 THEN AddNote2Qhar Puff.Qhar(1), 55 + @pDoppler.xf, 5 + 25 * @pDoppler.xa IF Gesture.Edgy(1) > Gesture.Smooth(1) * 1.2 THEN AddNote2Qhar Puff.Qhar(1), 55 + @pDoppler.yf, 5 + 25 * @pDoppler.ya IF Gesture.Edgy(2) > Gesture.Smooth(2) * 1.2 THEN AddNote2Qhar Puff.Qhar(1), 55 + @pDoppler.zf, 5 + 25 * @pDoppler.za QInstrumPlay Puff END SUB SUB BelTrump ' collision STATIC init AS DWORD STATIC sens AS SINGLE IF ISFALSE sens THEN MM_Trump_On %MM_Wind OR %MM_Motor sens = 1.4 Task(%belTrump).freq = 12 END IF IF Gesture.collision(0) > sens THEN AddNote2Har Trump.Har(1), Trump.LowTes+ .8 * @pDoppler.xf, 20: AddNote2Har Trump.Har(1), Trump.LowTes + SQR(@pDoppler.xf), 20: AddNote2Har Trump.Har(1), Trump.LowTes + (@pDoppler.xf)^.33, 20 IF Gesture.collision(1) > sens THEN AddNote2Har Trump.Har(1), Trump.LowTes + @pDoppler.yf, 20: AddNote2Har Trump.Har(1),Trump.LowTes + .9 * SQR(@pDoppler.yf), 20: AddNote2Har Trump.Har(1), Trump.LowTes + (@pDoppler.yf)^.33, 20 IF Gesture.collision(2) > sens THEN AddNote2Har Trump.Har(1), Trump.LowTes + .9 * @pDoppler.zf, 20: AddNote2Har Trump.Har(1),Trump.LowTes + .8 * SQR(@pDoppler.zf), 20: AddNote2Har Trump.Har(1), Trump.LowTes + (@pDoppler.zf)^.33, 20 InstrumTransposeToRange Trump InstrumPlay Trump END SUB SUB BelLlor ' collision 'doesn't want to trigger? STATIC n1 AS DWORD, n2 AS DWORD, n3 AS DWORD IF ISFALSE(n1) THEN n1 = 48 n2 = 49 n3 = 50 END IF logfile STR$(gesture.theacol(0)) + STR$(gesture.theacol(1)) + STR$(gesture.theacol(2)) + STR$(@pDoppler.xa) + STR$(@pDoppler.ya) + STR$(@pDoppler.za) + STR$(n1) + STR$(n2) + STR$(n3) IF ((@pDoppler.xa > .1) AND (gesture.theacol(0) > .1)) THEN mPlay Llor.channel, n1, 4 + @pDoppler.xa * 100 INCR n1 IF n1 > 59 THEN n1 = 48 ' warning str$(n1) END IF IF ((@pDoppler.ya > .1) AND (gesture.theacol(1) > .1)) THEN mPlay Llor.channel, n2, 4 + @pDoppler.ya * 100 INCR n2 IF n2 > 59 THEN n2 = 48 ' warning STR$(n2) END IF IF ((@pDoppler.za > .1) AND (gesture.theacol(2) > .1)) THEN mPlay Llor.channel, n3, 4 + @pDoppler.za * 100 INCR n3 IF n3 > 59 THEN n3 = 48 ' warning STR$(n3) END IF END SUB SUB BelBom STATIC n1 AS LONG, n2 AS LONG, n3 AS LONG STATIC sens AS DWORD IF ISFALSE sens THEN sens = 24 ' 18 n1 = Bomi.lowTes n2 = Bomi.lowTes + 1 n3 = Bomi.lowTes + 2 MM_Bomi_On %MM_Wind OR %MM_Motor END IF IF gesture.speedup(0) > gesture.slowdown(0) + sens THEN n1 = n1 + CHOOSE(1 + INT(RND * 6), -2, -1, 1, 1, 1,2) IF n1 > Bomi.HighTes THEN n1 = Bomi.LowTes AddNote2Har Bomi.Har(1), n1, 20 AddNote2Har Bomi.Har(1), n1 + SQR(@pDoppler.xf)/2, 20 END IF IF gesture.speedup(1) > gesture.slowdown(1) + sens THEN n2 = n2 + CHOOSE(1 + INT(RND * 6), -2, -1, 1, 1, 1,2) IF n2 > Bomi.HighTes THEN n2 = Bomi.LowTes AddNote2Har Bomi.Har(1), n2, 20 AddNote2Har Bomi.Har(1), n2 + SQR(@pDoppler.yf)/2, 20 END IF IF gesture.speedup(2) > gesture.slowdown(2) + sens THEN n3 = n3 + CHOOSE(1 + INT(RND * 6), -2, -1, 1, 1, 1,2) IF n3 > Bomi.HighTes THEN n3 = Bomi.LowTes AddNote2Har Bomi.Har(1), n3, 20 AddNote2Har Bomi.Har(1), n3 + SQR(@pDoppler.zf)/2, 20 END IF InstrumTransposeToRange Bomi InstrumPlay Bomi END SUB SUB BelSo STATIC n AS BYTE STATIC sens AS DWORD STATIC tt AS LONG IF ISFALSE n THEN n = 24 sens = 40 MM_So_On COntroller So.channel, 1, 15 So.HighTes = 49 END IF IF (MAX(@pDoppler.xa, @pDoppler.ya, @pDoppler.za)) > .1 AND (gesture.slowdown(2) < gesture.speedup(2) + sens) THEN IF RND < .1 THEN n = n - CHOOSE(1 + INT(RND * 7),-4, -2, -1, -1, 1, 2, 3) IF n < 12 THEN n = 30 IF n > 30 THEN n = n - 12 AddNote2Har So.Har(1), n, 80 AddNote2Har So.har(1),49,80 InstrumPlay So tt = -12 ELSEIF tt THEN INCR tt IF ISFALSE tt THEN InstrumPlay So END IF So.ctrl(7) = (5 * So.ctrl(7) + 5 + 110 * @pDoppler.Za) / 6 Controller So.channel, 7, So.ctrl(7) Bend So.channel, MIN(127, @pDoppler.zf), MIN(127, @pDoppler.zf) END SUB SUB BelKorn STATIC n AS BYTE STATIC sens AS DWORD STATIC tt AS LONG IF ISFALSE n THEN n = 48 sens = 10 ' 20 MM_Korn_On COntroller Korn.channel, 7, 15 Korn.ctrl(7) = 20 Korn.ctrl(10) = 64 END IF IF (MAX(@pDoppler.xa, @pDoppler.ya, @pDoppler.za)) > .04 AND (gesture.speedup(2) > gesture.slowdown(2) + sens) THEN IF RND < .1 THEN n = n - CHOOSE(1 + INT(RND * 7), -2, -1, 1, 1, 2, 3, 4) IF n < Korn.LowTes THEN n = n + 12 IF n > Korn.HighTes THEN n = Korn.LowTes AddNote2Har Korn.Har(1), n, 80 InstrumPlay Korn tt = -24 ELSEIF tt THEN INCR tt IF ISFALSE tt THEN InstrumPlay Korn: n = n - CHOOSE(1 + INT(RND * 8), -2, -1, 1, 1, 2, 3, 4, 6) END IF Korn.ctrl(7) = (5 * Korn.ctrl(7) + 15 + 100 * SQR(@pDoppler.Za)) / 6 Controller Korn.channel, 17, Korn.ctrl(7) Bend Korn.channel, MIN(127, @pDoppler.zf/2), MIN(127, @pDoppler.zf/2) Korn.ctrl(10) = (5 * Korn.ctrl(10) + 40 - 40 * SQR(@pDoppler.xa)) / 6 Controller Korn.channel, 10, Korn.ctrl(10) END SUB SUB winter_base '24hz 'iets drone STATIC basen AS CURRENCY STATIC specfac AS SINGLE LOCAL qts AS BYTE LOCAL bourds AS BYTE LOCAL pips AS BYTE STATIC cc AS CURRENCY LOCAL n AS CURRENCY LOCAL i AS BYTE LOCAL poly AS BYTE STATIC qthighn AS CURRENCY STATIC piphighn AS CURRENCY STATIC klarhighn AS CURRENCY STATIC sens AS SINGLE STATIC klok$ IF ISFALSE cc THEN MM_Qt_On %MM_Wind OR %MM_Motor MM_Bourdonola_On %MM_Wind OR %MM_Motor MM_Piperola_On %MM_wind OR %MM_Motor Controller Klar.channel, 7, 40 sens = 1.8 '1.4 END IF 'INCR cc cc = cc + .7 basen = 12 + 12 * SIN(cc/4800) ^ 2 specfac = 1.2 - COS(cc/1830)/2 qts = qt.lowTes + 24 * SIN(cc/1100)^2 CONTROL SET TEXT gh.cockpit, %GMT_MSG2, STR$(cc) + STR$(COS(cc/1830)) IF Task(%winter + 2).swit> 0 THEN Qt.ctrl(7) = (7 * Qt.ctrl(7) + 80 + (@pDoppler.xa + @pDoppler.ya + @pDoppler.za) * 10) / 8 Controller Qt.channel, 7, Qt.ctrl(7) Controller Bourdonola.channel, 1, MIN(92, Qt.ctrl(7) - 5) Controller Piperola.channel, 7, MIN(85, Qt.ctrl(7) - 10) CONTROL SET TEXT gh.cockpit, %GMT_MSG1, STR$(Basen) + STR$(specfac) bourds = bourdonola.lowTes + 18 * COS(cc/1700)^2 pips = Piperola.LowTes + 18 * SIN(cc/2300) FOR i = 1 TO 100 n = SpectralNoteF(basen, i, specfac, %ExpSpec) IF n < qts THEN ITERATE FOR INCR poly IF poly > 8 THEN EXIT FOR IF n > qt.highTes THEN EXIT FOR AddNote2Qhar qt.qhar(1), n, 20 NEXT QInstrumPlay Qt RESET poly FOR i = 1 TO 300 n = SpectralNoteF(basen, i, specfac, %ExpSpec) ' logfile "check bourd" + STR$(n) + STR$(bourds) IF n < bourds THEN ITERATE FOR INCR poly IF poly > 8 THEN EXIT FOR IF n > bourdonola.highTes THEN EXIT FOR ' logfile "k" AddNote2har bourdonola.har(1), n, 20 NEXT InstrumPlay Bourdonola RESET poly FOR i = 1 TO 300 n = SpectralNoteF(basen, i, specfac, %ExpSpec) ' logfile "check pip" + STR$(n) + STR$(pips) IF n < pips THEN ITERATE FOR INCR poly IF poly > 8 THEN EXIT FOR IF n > Piperola.highTes THEN EXIT FOR ' logfile "k" AddNote2har piperola.har(1), n, 20 NEXT InstrumPlay Piperola END IF IF Task(%winter + 1).swit> 0 THEN ' logfile "collision?" CONTROL SET TEXT gh.cockpit, %GMT_author, "perc on" IF (gesture.collision(0) > sens) AND (@pDoppler.xa > .15) THEN n = MIN(108, 72 + @pDoppler.xf/5) ' logfile "aim:" + str$(n) n = MatchSpecNote(n, basen,specfac) ' logfile "tubi" + str$(n) AddNote2QHar Tubi.QHar(1), n, 18 + @pDoppler.xa * 100 IF task(%winter + 3).swit THEN qthighn = n + 19 DO WHILE qthighn > Qt.HighTes: qthighn = qthighn - 12: LOOP END IF END IF logfile STR$(gesture.collision(0)) + STR$(gesture.collision(1)) IF (gesture.collision(1) > sens) AND (@pDoppler.ya > .15) THEN n = MIN(103, 80 + @pDoppler.yf/6) ' logfile "aim:" + STR$(n) n = MatchSpecNote(n, basen,specfac) ' logfile "tubi" + STR$(n) klok$ = klok$ + CHR$(n) ' Playkloks n, 10 + @pDoppler.ya * 90, 50, &B01011 IF task(%winter + 3).swit THEN piphighn = n + 19 DO WHILE piphighn > piperola.HighTes: piphighn = piphighn - 12: LOOP END IF END IF IF (gesture.collision(2) > sens) AND (@pDoppler.za > .15) THEN n = MIN(96, 72 + @pDoppler.zf/6) n = matchspecnote(n, basen, specfac) AddNote2Har Vibi.har(1), n, 18 + @pDoppler.za * 100 IF task(%winter + 3).swit THEN klarhighn = n + 31 DO WHILE klarhighn > klar.HighTes: klarhighn = klarhighn - 12: LOOP AddNote2Har Klar.har(1), klarhighn, 127 END IF END IF IF ISFALSE(cc MOD 9) THEN QInstrumPlay Tubi FOR i = 1 TO LEN(klok$) Playkloks ASC(klok$, i), 10 + @pDoppler.ya * 90, 50, &B01011 NEXT RESET klok$ InstrumPlay Vibi IF qthighn THEN AddNote2QHar Qt.Qhar(1), qthighn, 20: RESET qthighn IF piphighn THEN AddNote2Har Piperola.har(1), piphighn, 20: RESET piphighn IF ISFALSE Task(%winter + 2).tog THEN QInstrumPlay Qt InstrumPlay Piperola END IF InstrumPlay Klar END IF END IF END SUB SUB vermijding 'braass & cowbells '60 tps STATIC basenote AS SINGLE STATIC cc AS DWORD LOCAL note AS CURRENCY STATIC kornnote AS LONG STATIC kornoff AS DWORD STATIC kornbend AS SINGLE STATIC asanote AS LONG STATIC asaoff AS DWORD STATIC asabend AS SINGLE STATIC saxnote AS LONG STATIC saxoff AS DWORD STATIC saxbend AS SINGLE STATIC sonote AS LONG STATIC sooff AS DWORD STATIC sobend AS SINGLE STATIC helinote AS LONG STATIC helioff AS DWORD STATIC helibend AS SINGLE STATIC hornynote AS LONG STATIC hornyoff AS DWORD STATIC hornybend AS SINGLE STATIC fanote AS LONG STATIC faoff AS DWORD STATIC fabend AS SINGLE STATIC bononote AS LONG STATIC bonooff AS DWORD STATIC bonobend AS SINGLE STATIC korntout AS DWORD STATIC asatout AS DWORD STATIC saxtout AS DWORD STATIC sotout AS DWORD STATIC helitout AS DWORD STATIC bonotout AS DWORD STATIC hornytout AS DWORD STATIC klokstout AS DWORD STATIC fatout AS DWORD STATIC sens AS LONG IF ISFALSE sens THEN sens = 40 INCR cc basenote = 24 + ABS(12 * SIN(cc/1200)) 'speedup - korn asa klar IF task(%verm+1).swit THEN IF (cc > Korntout) AND (MAX(@pDoppler.xa, @pDoppler.ya, @pDoppler.za)) > .04 AND (gesture.speedup(0) > gesture.slowdown(0) + sens) THEN note = basenote + 36 + INT(RND^2 * 2) * 12 IF INT(note) <> kornnote THEN kornnote = note AddNote2Har Korn.Har(1), note, 20 + (@pDoppler.xa * 60) InstrumPlay Korn kornoff = cc + MAX(200, 1000 - (20 * @pdoppler.xf)) korntout = (2 * cc + Kornoff) / 3 EXIT SUB END IF END IF IF KornOff > 0 AND KornOff <= cc THEN InstrumPlay Korn RESET KornOff RESET kornnote END IF IF (cc > asatout) AND (MAX(@pDoppler.xa, @pDoppler.ya, @pDoppler.za)) > .04 AND (gesture.speedup(1) > gesture.slowdown(1) + sens) THEN note = basenote + 24 + 3 + INT(RND^2 * 3) * 12 IF INT(note) <> asanote THEN asanote = note AddNote2Har Asa.Har(1), note, 20 + (@pDoppler.ya * 60) InstrumPlay Asa asaoff = cc + MAX(200, 1000 - (20 * @pdoppler.yf)) asatout = (2 * cc + asaoff) / 3 EXIT SUB END IF END IF IF AsaOff > 0 AND AsaOff <= cc THEN InstrumPlay Asa RESET AsaOff RESET asanote END IF 'autosax wer klar IF (cc > saxtout) AND (MAX(@pDoppler.xa, @pDoppler.ya, @pDoppler.za)) > .04 AND (gesture.speedup(2) > gesture.slowdown(2) + sens) THEN note = basenote + 12 + 7 + INT(RND^2 * 3) * 12 IF INT(note) <> saxnote THEN saxnote = note ' AddNote2Har Autosax.Har(1), note, 20 + (@pDoppler.za * 60) ' InstrumPlay Autosax AddNote2Har Klar.Har(1), note, 20 + (@pDoppler.za * 60) InstrumPlay Klar saxoff = cc + MAX(200, 1000 - (20 * @pdoppler.zf)) saxtout = (2 * cc + saxoff) / 3 EXIT SUB END IF END IF IF SaxOff > 0 AND SaxOff <= cc THEN InstrumPlay Klar RESET SaxOff RESET Saxnote END IF END IF 'slowdown so heli bono IF task(%verm + 2).swit THEN CONTROL SET TEXT gh.cockpit, %GMT_MSG1, "spd" + STR$(timegettime) IF (cc > Sotout) AND (MAX(@pDoppler.xa, @pDoppler.ya, @pDoppler.za)) > .04 AND (gesture.slowdown(0) > gesture.speedup(0) + sens) THEN note = basenote + INT(RND^2 * 2) * 12 IF INT(note) <> sonote THEN sonote = note AddNote2Har So.Har(1), note, 20 + (@pDoppler.xa * 60) InstrumPlay So Sooff = cc + MAX(400, 2000 - (25 * @pdoppler.xf)) sotout = (2 * cc + sooff) / 3 EXIT SUB END IF END IF IF soOff > 0 AND soOff <= cc THEN InstrumPlay SO RESET soOff RESET Sonote END IF IF (cc > helitout) AND (MAX(@pDoppler.xa, @pDoppler.ya, @pDoppler.za)) > .04 AND (gesture.slowdown(1) > gesture.speedup(1) + sens) THEN note = basenote + 7 + INT(RND^2 * 3) * 12 IF INT(note) <> helinote THEN helinote = note AddNote2Har heli.Har(1), note, 20 + (@pDoppler.ya * 60) InstrumPlay hELI helioff = cc + MAX(400, 2000 - (25 * @pdoppler.yf)) helitout = (2 * cc + helioff) / 3 EXIT SUB END IF END IF IF heliOff > 0 AND heliOff <= cc THEN InstrumPlay heli RESET heliOff RESET helinote END IF IF (cc > bonotout) AND (MAX(@pDoppler.xa, @pDoppler.ya, @pDoppler.za)) > .04 AND (gesture.slowdown(2) > gesture.speedup(2) + sens) THEN note = basenote + 7 + INT(RND^2 * 3) * 12 IF INT(note) <> bononote THEN bononote = note AddNote2Har bono.Har(1), note, 20 + (@pDoppler.za * 60) InstrumPlay bono bonooff = cc + MAX(400, 2000 - (25 * @pdoppler.zf)) bonotout = (2 * cc + bonooff) / 3 EXIT SUB END IF END IF IF bonoOff > 0 AND bonoOff <= cc THEN InstrumPlay bono RESET bonoOff RESET bononote END IF END IF 'flue horny fa IF task(%verm + 3).swit THEN IF (cc > hornytout) AND (gesture.flue(0) > .625) THEN note = basenote + 10 + INT(RND^2 * 4) * 12 IF INT(note) <> hornynote THEN logfile "horny" + STR$(note) hornynote = note AddNote2Har horny.Har(1), note, 40 + (@pDoppler.za * 60) InstrumPlay horny hornyoff = cc + MAX(300, 1800 - (25 * @pdoppler.zf)) hornytout = (2 * cc + hornyoff) / 3 EXIT SUB END IF END IF IF hornyOff > 0 AND hornyOff <= cc THEN InstrumPlay horny RESET hornyOff RESET hornynote END IF IF (cc > fatout) AND (gesture.flue(1) > .625) THEN note = basenote + 14 + INT(RND^2 * 2) * 12 IF INT(note) <> fanote THEN logfile "fa" + STR$(note) fanote = note AddNote2Har fa.Har(1), note, 40 + (@pDoppler.ya * 60) InstrumPlay fa faoff = cc + MAX(300, 1000 - (40 * @pdoppler.yf)) fatout = (2 * cc + faoff) / 3 EXIT SUB END IF END IF IF faOff > 0 AND faOff <= cc THEN InstrumPlay fa RESET faOff RESET fanote END IF END IF 'pitchbends SELECT CASE cc MOD 3 CASE 0 kornbend = 8 * (kornbend + 127 * @pDoppler.xa) / 9 Bend Korn.channel, KornBend, KornBend Bend So.channel, 127 - SoBend, 127 - SoBend Bend Horny.channel, kornbend, kornbend Korn.ctrl(17) = MIN(90, (4 * Korn.ctrl(17) + 2 + 3 * @pDoppler.xf) / 5) Controller Korn.channel, 17, Korn.ctrl(17) Controller So.channel, 7, .8 * Korn.ctrl(17) controller Horny.channel, 7, MIN(127, Korn.ctrl(17) * 1.3) CASE 1 asabend = (8 * asabend + 127 * @pDoppler.ya) / 9 Bend Asa.channel, asabend, asabend Bend Heli.channel, 127 - asabend, 127 - asabend Asa.ctrl(7) = MIN(100, (4 * Asa.ctrl(7) + 2 + 3 * @pDoppler.yf) / 5) Bend Fa.channel, asabend, asabend Controller Asa.channel, 7, Asa.ctrl(7) Controller Heli.channel, 17, Asa.ctrl(7) Controller Fa.channel, 7, Asa.ctrl(7) * .5 CASE 2 saxbend = (8 * saxbend + 127 * @pDoppler.za) / 9 Bend klar.channel, saxbend, saxbend Bend Bono.channel, 127 - saxbend, 127 - saxbend klar.ctrl(7) = MIN(120, (4 * klar.ctrl(7) + 2 + 4 * @pDoppler.zf) / 5) Controller klar.channel, 7, klar.ctrl(7) Controller Bono.channel, 17, .8 * klar.ctrl(7) END SELECT IF task(%verm + 4).swit THEN IF cc > klokstout THEN IF (gesture.collision(0) > 1) AND (@pDoppler.xa > .5) THEN FOR note = basenote TO 120 STEP 12 Playkloks note, 10 + @pDoppler.xa * 40, 50, &B01 NEXT klokstout = cc + 20 EXIT SUB END IF IF (gesture.collision(1) > 1) AND (@pDoppler.ya > .5) THEN FOR note = basenote + 3 TO 120 STEP 12 Playkloks note, 10 + @pDoppler.ya * 40, 50, &B01 NEXT klokstout = cc + 20 EXIT SUB END IF IF (gesture.collision(2) > 1) AND (@pDoppler.za > .5) THEN FOR note = basenote + 7 TO 120 STEP 12 Playkloks note, 10 + @pDoppler.xa * 40, 50, &B01 NEXT klokstout = cc + 20 END IF END IF END IF END SUB SUB drips mPlay dripper.channel,15 ,30 END SUB SUB MekaEdgyXy STATIC sens AS SINGLE IF ISFALSE sens THEN sens = .3 ' .45 END IF IF gesture.edgy(0) > gesture.smooth(0) + sens THEN AddNote2qHar Xy.qhar(1), Xy.HighTes - 2 * SQR(@pDoppler.xf), 100 * @pDoppler.xa IF gesture.edgy(1) > gesture.smooth(1) + sens THEN AddNote2qHar Xy.qhar(1), Xy.HighTes - 2 * SQR(@pDoppler.yf), 100 * @pDoppler.ya IF gesture.edgy(2) > gesture.smooth(2) + sens THEN AddNote2qHar Xy.qhar(1), Xy.HighTes - 2 * SQR(@pDoppler.zf), 100 * @pDoppler.za QInstrumPlay Xy END SUB SUB MekaColCast STATIC sens AS SINGLE STATIC c1 AS LONG STATIC c2 AS LONG IF ISFALSE sens THEN sens = 1.2 END IF IF Gesture.collision(0) > sens THEN c1 = (c1 + 2) MOD 13 mPlay Casta.channel, 113 + c1, SQR(@pDoppler.xa) * 127 END IF IF Gesture.collision(1) > sens THEN c2 = (c2 + 2) MOD 13 mPlay Casta2.channel, 113 + c2, SQR(@pDoppler.ya) * 127 END IF IF (Gesture.collision(3) > 1.2 * sens) AND (@pDoppler.za > 30) THEN mPlay simba.channel, CHOOSE(1 + INT(RND * 3), 77, 78, 79) , @pDoppler.za * 60 END SUB SUB MekaTheaColWd STATIC c1 AS LONG, c2 AS LONG IF ((@pDoppler.xa > .1) AND (gesture.theacol(0) > .1)) THEN c1 = c1 + 5 IF (c1 > 6) AND (c1 < 12) THEN c1 = c1 + 6 c1 = c1 MOD 18 mPlay Temblo.channel, Temblo.lowtes + c1, @pDoppler.xa * 127 END IF IF ((@pDoppler.ya > .1) AND (gesture.theacol(1) > .1)) THEN c2 = (c2 + 4) MOD 13 mPlay thunderwood.channel, 1 + c2, @pDoppler.ya * 127 END IF END SUB SUB MekaSmPsch STATIC c1 AS LONG, c2 AS LONG IF gesture.smooth(0) > 1.1 * gesture.edgy(0) THEN c1 = (c1 + 7) MOD 12 mPlay Psch.channel, Psch.LowTes + c1, 10 + 60 * @pDoppler.xa END IF IF gesture.smooth(1) > 1.1 * gesture.edgy(1) THEN c2 = (c2 + 1) MOD 5 mPlay Springers.channel, 36 + c2, 4 + 30 * @pDoppler.ya ' ^ 1.6 END IF END SUB SUB MekaExplSpi 'piano LOCAL note AS CURRENCY IF (ISFALSE gesture.implo(0)) AND (gesture.explo(0)> @pDoppler.noise * 3) AND (@pDoppler.xf > 30) THEN note = Spiro.LowTes + gesture.Explo(0) * 100 AddNote2Har Spiro.Har(1), note, 100 AddNote2Har Spiro.Har(1), note + 3 + INT(RND * 3), 100 END IF IF (ISFALSE gesture.implo(1)) AND (gesture.explo(1)> @pDoppler.noise * 3) AND (@pDoppler.yf > 30) THEN note = Spiro.LowTes + gesture.Explo(1) * 100 AddNote2Har Spiro.Har(1), note, 100 AddNote2Har Spiro.Har(1), note + 3 + INT(RND * 3), 100 END IF IF (ISFALSE gesture.implo(2)) AND (gesture.explo(2)> @pDoppler.noise * 3) AND (@pDoppler.zf > 30) THEN note = Spiro.LowTes + gesture.Explo(2) * 100 AddNote2Har Spiro.Har(1), note, 100 AddNote2Har Spiro.Har(1), note + 3 + INT(RND * 3), 100 END IF InstrumTransposeToRange Spiro InstrumPlay Spiro END SUB SUB MekaImplKlung IF (ISFALSE(gesture.explo(0))) AND (gesture.implo(0)> @pDoppler.noise * 1) THEN AddNote2Har Klung.har(1), Klung.LowTes + 1.5 * SQR(@pDoppler.xf), @pDoppler.xa * 90 END IF IF (ISFALSE(gesture.explo(1))) AND (gesture.implo(1)> @pDoppler.noise * 1) THEN AddNote2Har Klung.har(1), Klung.LowTes + 1.5 * SQR(@pDoppler.yf), @pDoppler.ya * 90 END IF IF (ISFALSE(gesture.explo(2))) AND (gesture.implo(2)> @pDoppler.noise * 1) THEN AddNote2Har Klung.har(1), Klung.LowTes + 1.5 * SQR(@pDoppler.zf), @pDoppler.za * 90 END IF InstrumTransposeToRange Klung, 55, 96 InstrumPlay Klung END SUB SUB MekaColWhisper STATIC sens AS SINGLE STATIC w() AS SINGLE LOCAL i AS LONG IF ISFALSE sens THEN sens = 1.2 DIM w(5) END IF IF Gesture.collision(0) > sens THEN w(0) = 127 'met nieuwe caling whisper komen alleen allerhoogste waarden er door IF Gesture.collision(1) > sens THEN w(1) = 12 IF Gesture.collision(2) > sens THEN w(2) = 127 IF ((@pDoppler.xa > .1) AND (gesture.theacol(0) > .1)) THEN w(3) = 127 IF ((@pDoppler.za > .1) AND (gesture.theacol(1) > .1)) THEN w(4) = 127 IF ((@pDoppler.za > .1) AND (gesture.theacol(2) > .1)) THEN w(5) = 127 FOR i = 0 TO 5 mPlay Whisper.channel, 72 + i, w(i) w(i) = .95 * w(i) IF w(i) < 20 THEN w(i) = 0 NEXT mPlay thunderwood.channel, 25, w(0) END SUB SUB MekaSldToypi STATIC sens AS LONG IF ISFALSE sens THEN sens = 60 '40 - more then usual - shouldn't trigger too much END IF IF (gesture.slowdown(0) > gesture.speedup(0) + sens) THEN AddNote2Har Toypi.Har(1), Toypi.lowtes + 1.5 * SQR(@pDoppler.xf), @pDoppler.xa * 127 IF (gesture.slowdown(1) > gesture.speedup(1) + sens) THEN AddNote2Har Toypi.Har(1),Toypi.lowtes + 1.5 * SQR(@pDoppler.Yf), @pDoppler.Ya * 127 IF (gesture.slowdown(2) > gesture.speedup(2) + sens) THEN AddNote2Har Toypi.Har(1),Toypi.lowtes + 1.5 * SQR(@pDoppler.Zf), @pDoppler.Za * 127 InstrumTransposeToRange Toypi InstrumPlay toypi END SUB SUB MekaSpdPerc 'beperkte extra percussie geluidjes - moet niet super veel reageren STATIC sens AS LONG IF ISFALSE sens THEN sens = 60 'more then usual 40 END IF IF (gesture.speedup(0) > gesture.slowdown(0) + sens) THEN AddNote2Har Thunderwood.har(1), CHOOSE(1 + INT(RND * 4), 15, 16, 17, 26), 127 * @pDoppler.xa^2 END IF InstrumPlay Thunderwood IF (gesture.speedup(1) > gesture.slowdown(1) + sens) THEN mPlay Piperola.channel, 120 + INT(RND * 8), 127 * @pDoppler.ya END IF END SUB SUB Dances_PlayAlong (md() AS ParsedMidiType, MMTrack() AS musician, BYVAL mevents AS DWORD, BYVAL maxevents AS DWORD) STATIC init AS DWORD ' callback called everytime the player plays a note/controller/... ' 20/06/2011: now MMTrack(md(mevents).track).har(1) is filled with the current harmony for each instrument from the file, ignoring user volume scaling etc. ' nb: mapping to belly, vacca, percussion, ... is not translated for now. quartertone instruments are split in two tracks (qt and qtq, xy and xyq, ...) ' ***this just displays event count, time, status and databites in the GMT cockpit as a demonstration.. ' CONTROL SET TEXT gh.cockpit, %GMT_MSG1, STR$(mevents) + "/"+ STR$(maxevents) 'md(mevents).time is in milliseconds.. ' CONTROL SET TEXT gh.cockpit, %GMT_MSG2, STR$(md(mevents).time)+ "- "+ HEX$(md(mevents).bStat) + STR$(md(mevents).bdat1) + STR$(md(mevents).bdat2) ' ' ***get the track name like this ' CONTROL SET TEXT gh.cockpit, %GMT_MSG1, MMTrack(md(mevents).track).naam ' ***get the harmstring of the current playing notes ' showing the notes of Qt as an example, playing them back on piano ' IF TRIM$(UCASE$(MMTrack(md(mevents).track).naam)) = "QT" THEN ' ShowHar MMTrack(md(mevents).track).Har(1), 1,140,2! ' Piano.Har(1) = MMTrack(md(mevents).track).Har(1) ' InstrumPlay Piano ' END IF ' logfile FUNCNAME$ + TRIM$(UCASE$(MMTrack(md(mevents).track).naam)) + " " + HEX$(md(mevents).bstat) + " " + HEX$(md(mevents).bdat1) ' logfile STR$(@pDoppler.xf) + STR$(@pDoppler.yf) + STR$(@pDoppler.zf) ' logfile "speedfac:" + STR$(Task(App.MidiPlayerTasknr).rit.minduur) IF ( md(mevents).bstat AND &H090) <> &H090 THEN EXIT SUB 'we're only interested in notes.. ' IF RND < .001 THEN ' mPlay mDisp_A.channel , 1, INT(RND * 10) ' mPlay mDisp_B.channel , 1, INT(RND * 10) ' END IF LOCAL i AS LONG IF ISFALSE init THEN FOR i = balmec.lowtes TO balmec.hightes Keypress balmec.channel, i, 0 'stop repeats NEXT init = 1 END IF SELECT CASE TRIM$(UCASE$(MMTrack(md(mevents).track).naam)) CASE "BOURDONOLA" 'chords on tubi when there's enough movement, based on bourdonola note.. '**fearabatha IF MAX(@pDoppler.xf, @pDoppler.yf, @pDoppler.zf) > 40 THEN SELECT CASE md(mevents).bdat1 CASE 46, 50 AddNote2Har Tubi.Har(1), 82, @pDoppler.xa * 100 AddNote2Har Tubi.Har(1), 86, @pDoppler.ya * 100 AddNote2Har Tubi.Har(1), 89, @pDoppler.za * 100 AddNote2Har Tubi.Har(1), 94, @pDoppler.xa * 100 AddNote2Har Tubi.Har(1), 98, @pDoppler.ya * 100 AddNote2Har Tubi.Har(1), 101, @pDoppler.za * 100 CASE 51, 55 AddNote2Har Tubi.Har(1), 87, @pDoppler.xa * 100 AddNote2Har Tubi.Har(1), 91, @pDoppler.ya * 100 AddNote2Har Tubi.Har(1), 94, @pDoppler.za * 100 AddNote2Har Tubi.Har(1), 99, @pDoppler.xa * 100 AddNote2Har Tubi.Har(1), 103, @pDoppler.ya * 100 AddNote2Har Tubi.Har(1), 106, @pDoppler.za * 100 CASE 53 AddNote2Har Tubi.Har(1), 80, @pDoppler.xa * 100 AddNote2Har Tubi.Har(1), 84, @pDoppler.ya * 100 AddNote2Har Tubi.Har(1), 87, @pDoppler.za * 100 AddNote2Har Tubi.Har(1), 92, @pDoppler.xa * 100 AddNote2Har Tubi.Har(1), 96, @pDoppler.ya * 100 AddNote2Har Tubi.Har(1), 99, @pDoppler.za * 100 'for firemen CASE 43 AddNote2Har Tubi.Har(1), 79, @pDoppler.xa * 100 AddNote2Har Tubi.Har(1), 83, @pDoppler.ya * 100 AddNote2Har Tubi.Har(1), 86, @pDoppler.za * 100 AddNote2Har Tubi.Har(1), 91, @pDoppler.xa * 100 AddNote2Har Tubi.Har(1), 95, @pDoppler.ya * 100 AddNote2Har Tubi.Har(1), 98, @pDoppler.za * 100 CASE 45 AddNote2Har Tubi.Har(1), 81, @pDoppler.xa * 100 AddNote2Har Tubi.Har(1), 85, @pDoppler.ya * 100 AddNote2Har Tubi.Har(1), 88, @pDoppler.za * 100 AddNote2Har Tubi.Har(1), 93, @pDoppler.xa * 100 AddNote2Har Tubi.Har(1), 97, @pDoppler.ya * 100 AddNote2Har Tubi.Har(1), 100, @pDoppler.za * 100 END SELECT InstrumPlay Tubi END IF '**bluebonn CASE "SPIRO" 'on collision doube ohn casta IF ISFALSE md(mevents).bdat2 THEN EXIT SUB IF md(mevents).bdat1 < 72 THEN IF MAX(Gesture.collision(0),Gesture.collision(1),Gesture.collision(2)) > 1 THEN mPlay Casta2.channel, Casta2.LowTes + RND * 10, 20 + (@pDoppler.xa + @pDoppler.ya + @pDoppler.za) * 33 END IF END IF '**bride / wind CASE "HUMANOLA" IF ISFALSE md(mEVENTS).bdat2 THEN EXIT SUB IF MAX( gesture.explo(0) , gesture.explo(1), gesture.explo(2)) > @pDoppler.noise * 1.5 THEN mPlay Temblo.channel, CHOOSE(1 + INT(RND * 12),60,61,62,63,64,65,72,73,74,75,76,77), 30 + (@pDoppler.xa + @pDoppler.ya + @pDoppler.za) * 30 END IF CASE "XY" IF ( md(mevents).bstat AND &H090) <> &H090 THEN EXIT SUB 'we're only interested in notes.. IF ISFALSE md(mEVENTS).bdat2 THEN EXIT SUB IF MAX(Gesture.collision(0),Gesture.collision(1),Gesture.collision(2)) > 1.4 THEN mPlay Balmec.channel, md(mevents).bdat1, (@pDoppler.xa + @pDoppler.ya + @pDoppler.za) * 40 END IF '**glassglass CASE "HARMO"' - double op hybr bij voldioende beweging Hybr.ctrl(7) = MIN(127, MAX(0, (3 * Hybr.ctrl(7) + (@pDoppler.xa + @pDoppler.ya + @pDoppler.za) * 50 - 50) / 4)) Controller Hybr.channel, 7, Hybr.ctrl(7) IF Hybr.ctrl(7) > 5 THEN Hybr.Har(1) = MMTrack(md(mevents).track).Har(1) InstrumPlay Hybr '**devil CASE "QT" IF MAX(Gesture.collision(0),Gesture.collision(1),Gesture.collision(2)) > 1 THEN Playkloks md(mEvents).bstat, (@pDoppler.xa + @pDoppler.ya + @pDoppler.za) * 40, 50, &B011 END IF '**fireman CASE "PUFF" ' if nevents < 2000 then exit sub ' IF Bomi.ctrl(7) > 40 THEN Bomi.Har(1) = MMTrack(md(mevents).track).Har(1) ' InstrumPlay Bomi IF MAX(@pDoppler.xa, @pDoppler.ya, @pDoppler.za) > .5 THEN mPlay Thunderwood.channel, 1 + RND * 13, MAX(@pDoppler.xa, @pDoppler.ya, @pDoppler.za) * 80 END IF '**maryhay CASE "PLAYER" IF MAX(Gesture.collision(0),Gesture.collision(1),Gesture.collision(2)) > 1.4 THEN IF md(mevents).bdat1 > 50 THEN mPlay Balmec.channel, md(mevents).bdat1, (@pDoppler.xa + @pDoppler.ya + @pDoppler.za) * 30 END IF 'bluebonn CASE "KRUM" IF MAX( gesture.explo(0) , gesture.explo(1), gesture.explo(2)) > @pDoppler.noise THEN mPlay Snar.channel, Snar.lowtes + RND * 12, (@pDoppler.xa + @pDoppler.ya + @pDoppler.za) * 40 END IF '**water CASE "BONO" IF MAX( gesture.implo(0) , gesture.implo(1), gesture.implo(2)) > @pDoppler.noise THEN mPlay troms.channel, 24 + RND * 24,(@pDoppler.xa + @pDoppler.ya + @pDoppler.za) * 40 END IF '**glenlogie CASE "HELI" IF MAX( gesture.explo(0) , gesture.explo(1), gesture.explo(2)) > @pDoppler.noise THEN mPlay Simba.channel, CHOOSE(1 + INT(RND* 15), 60, 61, 62, 63, 65, 66, 67, 68, 69, 70, 72, 73, 74, 75, 80), (@pDoppler.xa + @pDoppler.ya + @pDoppler.za) * 30 END IF END SELECT END SUB