'modules voor namuda 2016 GLOBAL n16_base AS SINGLE GLOBAL n16_fac AS SINGLE %n16_params = 16 %n16_chi = 18 %n16_tinti = 19 %n16_ahf = 20 %n16_qt = 21 'not used in the end %n16_vibi = 21 %n16_perc = 22 %n16_xy = 23 %n16_iq = 24 %n16_chi2 = 25 %n16_spiro = 26 %n16_bourd = 27 %n16_piano = 28 %n16_bomi = 29 %n16_tp = 30 %n16_whisp = 31 %n16_fb = 32 '%n16_fbw = 33 %n16_rot = 33 %n16_bt = 34 %btseq = 35 %flpl = 48 %flel = 49 DECLARE FUNCTION Init_gf2016 () AS LONG FUNCTION Init_gf2016 AS LONG 'çhi bounds Controller Chi.channel, 74, 10 Controller Chi.channel, 75, 80 Controller Asa.channel, 25, 40 Controller Asa.channel, 26, 110 controller Asa.channel, 7, 127 MM_Horny_On ' Controller Horny.channel, 25, 40 ' Controller Horny.channel, 26, 110 controller Horny.channel, 7, 127 Controller Fa.channel, 25, 40 Controller Fa.channel, 26, 110 Controller Fa.channel, 17, 40 'blaast horny en asa helemaal weg met 'default' setting 127 Controller Bomi.channel, 1, 80 MM_Tinti_On ProgChange Piano.channel,123 Task(%n16_params).naam="ModPrms" Task(%n16_params).freq = 4 Task(%n16_params).cptr = CODEPTR(n16_params) Task(%n16_chi).naam= "ChiStil" Task(%n16_chi).cptr = CODEPTR(n16_chistilstand) Task(%n16_chi).freq = 6 TaskEx(%n16_chi).stopcptr = CODEPTR(chistilloff) Task(%n16_chi2).naam= "ChiSpd" Task(%n16_chi2).cptr = CODEPTR(n16_chi) Task(%n16_chi2).freq = 12 TaskEx(%n16_chi2).stopcptr = CODEPTR(chistilloff) Task(%n16_tinti).naam= "TintiCol" Task(%n16_tinti).cptr = CODEPTR(n16_tinti) Task(%n16_tinti).freq = 18 Task(%n16_ahf).naam= "EdgWnd" Task(%n16_ahf).cptr = CODEPTR(n16_asahornyfa) Task(%n16_ahf).freq = 11 TaskEx(%n16_ahf).stopcptr = CODEPTR(ahfoff) ' Task(%n16_qt).naam= "QtSMth" ' Task(%n16_qt).cptr = CODEPTR(n16_qt) ' Task(%n16_qt).freq = 16 Task(%n16_vibi).naam= "VibImp" Task(%n16_vibi).cptr = CODEPTR(n16_vibi) Task(%n16_vibi).freq = 16 Task(%n16_perc).naam= "ThcPerc" Task(%n16_perc).cptr = CODEPTR(n16_perc) Task(%n16_perc).freq = 24 Task(%n16_xy).naam="ExplXy" Task(%n16_xy).cptr = CODEPTR(n16_xy) Task(%n16_xy).freq = 14 Task(%n16_iq).naam="ImpQt" '"ImpWhisp" Task(%n16_iq).cptr = CODEPTR (n16_QtSoft) ' CODEPTR(n16_whisper) 'replacement for whisper after it burnt it'smotors Task(%n16_iq).freq = 6 Task(%n16_whisp).naam="ImpWhisp" Task(%n16_whisp).cptr = CODEPTR(n16_whisper) 'replacement for whisper after it burnt it'smotors Task(%n16_whisp).freq = 6 Task(%n16_spiro).naam="SpirSld" Task(%n16_spiro).freq = 16 Task(%n16_spiro).cptr= CODEPTR(n16_Spiro) Task(%n16_piano).naam="pnoCont" Task(%n16_piano).freq = 6 Task(%n16_piano).cptr = CODEPTR(n16_piano) ' Task(%n16_bourd).naam="BrdFlue" ' Task(%n16_bourd).freq = 8 ' Task(%n16_bourd).cptr= CODEPTR(n16_Bourdonola) ' TaskEx(%n16_bourd).stopcptr = CODEPTR(MM_Bourdonola_off) ' ' Task(%n16_bomi).naam="BmiCont" ' Task(%n16_bomi).freq = 8 ' Task(%n16_bomi).cptr = CODEPTR(n16_bomi) ' TaskEx(%n16_bomi).stopcptr = CODEPTR(MM_bomi_off) Task(%n16_fb).naam="FlxBnd" Task(%n16_fb).freq = 1 Task(%n16_fb).cptr = CODEPTR(n16_flexbend) ' Task(%n16_fbw).naam="FlxBow" ' Task(%n16_fbw).freq = 4 ' Task(%n16_fbw).cptr = CODEPTR(n16_bow) Task(%n16_rot).naam="FRtBt" 'rotating beaters Task(%n16_rot).freq = 4 Task(%n16_rot).cptr = CODEPTR(n16_rot) Task(%n16_bt).naam="FlxBeat" Task(%n16_bt).freq = 17 Task(%n16_bt).cptr = CODEPTR(n16_beat) Task(%flpl).naam="FlxPiLi" Task(%flpl).freq = 8 Task(%flpl).cptr = CODEPTR(Flex_Pilights) TaskEx(%flpl).stopcptr = CODEPTR(Flex_Pilights_stop) Task(%flel).naam="FlxELi" Task(%flel).freq = 8 Task(%flel).cptr = CODEPTR(Flex_Elights) Taskex(%flel).stopcptr = CODEPTR(Flex_Elights) Task(%btseq).naam="btSeq" Task(%btseq).freq=15 Task(%btseq).cptr=CODEPTR(BeatSeq) task(%n16_tp).naam="SldToypi" task(%n16_tp).freq = 12 Task(%n16_tp).cptr = CODEPTR(n16_SldToypi) starttask %n16_params Flex_manual n16_base = 18 n16_fac = 1 FUNCTION = 1 END FUNCTION SUB n16_chi 'speedup -> shake STATIC sens AS SINGLE STATIC p AS LONG IF ISFALSE sens THEN sens = 18 controller chi.channel,66,127 'ultrasound still not working.. what more do we need? END IF IF gesture.speedup(0) > gesture.slowdown(0) + sens THEN mPlay Chi.channel, 98, @pDoppler.xa * 127 'óver en weer INCR p END IF IF gesture.speedup(1) > gesture.slowdown(1) + sens THEN mPlay Chi.channel, 99, @pDoppler.ya *127 'vibra INCR p ELSE mPlay Chi.channel, 99, 0 END IF 'carier IF p THEN controller chi.channel,65, 127 controller chi.channel,8,100 END IF Controller Chi.channel, 31, MIN(76, 39 + MAX(@pDoppler.xf, @pDoppler.yf, @pDoppler.zf)/10) Controller Chi.channel,7, 20 + 100 * MAX(@pDoppler.xa, @pDoppler.ya, @pDoppler.za) ' logfile STR$(MIN(76, 39 + MAX(@pDoppler.xf, @pDoppler.yf, @pDoppler.zf)/10)) + "- "+ STR$( 20 + 100 * MAX(@pDoppler.xa, @pDoppler.ya, @pDoppler.za)) END SUB SUB n16_chistilstand 'minimale chi op stilstand STATIC stat AS LONG IF gesture.freeze(0) OR gesture.freeze(1) OR gesture.freeze(2) THEN IF ISFALSE stat THEN mPlay Chi.channel, 102, 1 stat = 1 controller chi.channel, 65,0 'ultrasound af END IF ELSE IF stat THEN mPlay Chi.channel, 102, 0 controller chi.channel, 65, 127 'ultrasound aan (zodat het werkt voor andere chi task) stat = 0 END IF END IF END SUB SUB chistilloff mPlay Chi.channel, 102, 0 ' controller Chi.channel,65, 127 controller Chi.channel, 8, 0 END SUB SUB n16_tinti 'collision STATIC sens AS SINGLE STATIC cc AS DWORD LOCAL flag AS LONG IF ISFALSE sens THEN sens = 1.2 Controller Tinti.channel, 30, 100 INCR cc END IF IF Gesture.collision(0) > sens THEN mPlay Tinti.channel, MIN(127, 89 + @pDoppler.xf/4), @pDoppler.xa * 127: INCR flag IF Gesture.collision(1) > sens THEN mPlay Tinti.channel, MIN(127, 89 + @pDoppler.yf/4), @pDoppler.ya * 127: INCR flag IF Gesture.collision(2) > sens THEN mPlay Tinti.channel, MIN(127, 89 + @pDoppler.zf/4), @pDoppler.za * 127: INCR flag IF ISFALSE flag THEN Controller Tinti.channel,123,0: EXIT SUB logfile STR$(flag) Controller Tinti.channel, 31, INT(12 + 16 * ABS(SIN(cc/600)) ) Controller Tinti.channel, 7, 40 + (@pDoppler.xa + @pDoppler.ya + @pDoppler.za) * 25 END SUB SUB n16_hybr 'slowdown STATIC sens AS LONG STATIC i AS LONG IF ISFALSE sens THEN sens = 8 Controller Hybr.channel, 16,4 Controller Hybr.channel, 19, 126 Controller Hybr.channel, 3, 80 'vibrato depth Controller Hybr.channel, 5, 5 'tremolo Controller Hybr.channel, 6, 1 FOR i = 23 TO 62 Controller Hybr.channel, i, 50 NEXT END IF Controller Hybr.channel, 4, MIN(127, MAX(@pDoppler.xf, @pDoppler.yf, @pDoppler.zf)/10) 'vibrato speed IF (gesture.slowdown(0) > sens) THEN AddNote2Har Hybr.har(1), Hybr.LowTes + @pDoppler.xa * 39, 100 IF (gesture.slowdown(1) > sens) THEN AddNote2Har Hybr.har(1), Hybr.LowTes+ @pDoppler.ya * 39, 100 IF (gesture.slowdown(2) > sens) THEN AddNote2Har Hybr.har(1), Hybr.LowTes + @pDoppler.za * 39, 100 logfile TRIM$(Hybr.har(1).vel) InstrumPlay Hybr END SUB SUB n16_asahornyfa 'édgy STATIC nx AS CURRENCY, ny AS CURRENCY, nz AS CURRENCY IF gesture.edgy_dur(0) THEN nx = MIN(Asa.HighTes, Asa.LowTes + @pDoppler.xf/5) MatchSpecNote(nx, n16_base, n16_fac) NoteCentOn Asa.channel, nx, @pdoppler.xa * 127 ELSE Controller Asa.channel, 123, 127 END IF IF gesture.edgy_dur(1) THEN ny = MIN(Horny.HighTes, 35 + @pDoppler.yf/5) MatchSpecNote(ny, n16_base, n16_fac) NoteCentOn Horny.channel, ny, 64 + SQR(@pdoppler.ya) * 64 logfile "horny"+ STR$(ny) ELSE Controller Horny.channel, 123, 127 END IF IF gesture.edgy_dur(2) THEN nz = MIN(Fa.HighTes, Fa.LowTes + @pDoppler.zf/5) MatchSpecNote(nz, n16_base, n16_fac) NoteCentOn Fa.channel, nx, @pdoppler.za * 60 ELSE Controller Fa.channel, 123, 127 END IF END SUB SUB ahfoff MM_Fa_Off MM_Asa_Off MM_horny_off END SUB SUB n16_qt 'smooth LOCAL n AS CURRENCY STATIC init AS DWORD IF ISFALSE init THEN init = 1 MM_Qt_On %MM_WIND OR %MM_MOTOR END IF IF Gesture.Edgy(0) < Gesture.Smooth(0) THEN n = Qt.LowTes + @pDoppler.xf / 3 MatchSpecnote (n, n16_base, n16_fac) AddNote2QHar Qt.Qhar(1), n, 100 END IF IF Gesture.Edgy(1) < Gesture.Smooth(1) THEN n = Qt.LowTes + @pDoppler.yf / 3 MatchSpecnote (n, n16_base, n16_fac) AddNote2QHar Qt.Qhar(1), n, 100 END IF IF Gesture.Edgy(2) < Gesture.Smooth(2) THEN n = Qt.LowTes + @pDoppler.zf / 3 MatchSpecnote (n, n16_base, n16_fac) AddNote2QHar Qt.Qhar(1), n, 100 END IF qInstrumPlay Qt END SUB SUB n16_perc 'theacol @ tm=emblo/troms/casta2 STATIC sens AS SINGLE IF ISFALSE sens THEN sens = 1 END IF IF gesture.theacol(0) > sens THEN mPlay Temblo.channel, CHOOSE(@pDoppler.xf/8, 60,61, 62, 63, 64, 65, 72, 73, 74, 75, 76 ELSE 77), @pDoppler.xa * 127 END IF IF gesture.theacol(1) > sens THEN mPlay Troms.channel, MIN(48, 30 + @pDoppler.yf/6), @pDoppler.ya * 127 END IF IF gesture.theacol(2) > sens THEN mPlay casta2.channel, MIN(casta2.hightes, casta2.LowTes + @pDoppler.zf/10), @pDoppler.za * 127 END IF END SUB SUB n16_xy 'éxplo xy LOCAL note AS CURRENCY IF (ISFALSE gesture.implo(0)) AND (gesture.explo(0)> @pDoppler.noise * 3) AND (@pDoppler.xf > 30) THEN note = 65 + gesture.Explo(0) * 100 note = matchspecnote(note, n16_base, n16_fac ) AddNote2qHar Xy.qhar(1), note, @pDoppler.xa * 127 END IF IF (ISFALSE gesture.implo(1)) AND (gesture.explo(1)> @pDoppler.noise * 3) AND (@pDoppler.yf > 30) THEN note = 65 + gesture.Explo(1) * 100 note = matchspecnote(note, n16_base, n16_fac ) AddNote2qHar Xy.qhar(1), note, @pDoppler.ya * 127 END IF IF (ISFALSE gesture.implo(2)) AND (gesture.explo(2)> @pDoppler.noise * 3) AND (@pDoppler.zf > 30) THEN note = 65 + gesture.Explo(2) * 100 note = matchspecnote(note, n16_base, n16_fac) AddNote2qHar Xy.qhar(1), note, @pDoppler.za * 127 END IF QInstrumPlay Xy END SUB SUB n16_whisper 'implo IF (ISFALSE(gesture.explo(0))) AND (gesture.implo(0)> @pDoppler.noise * 1) THEN AddNote2Har Whisper.Har(1), 72, SQR(@pDoppler.xa) * 127 AddNote2Har Whisper.Har(1), 73, SQR(@pDoppler.xa) * 127 AddNote2Har Whisper.Har(1), 74, SQR(@pDoppler.xa) * 127 END IF IF (ISFALSE(gesture.explo(1))) AND (gesture.implo(1)> @pDoppler.noise * 1) THEN AddNote2Har Whisper.Har(1), 75, SQR(@pDoppler.ya) * 127 AddNote2Har Whisper.Har(1), 76, SQR(@pDoppler.ya) * 127 AddNote2Har Whisper.Har(1), 77, SQR(@pDoppler.ya) * 127 END IF IF (ISFALSE(gesture.explo(2))) AND (gesture.implo(2)> @pDoppler.noise * 1) THEN AddNote2Har Whisper.Har(1), 78, SQR(@pDoppler.xa) * 127 AddNote2Har Whisper.Har(1), 79, SQR(@pDoppler.xa) * 127 AddNote2Har Whisper.Har(1), 80, SQR(@pDoppler.xa) * 127 END IF InstrumPlay Whisper END SUB 'qt vqriqnt qs whisper's motors burnt SUB n16_qtsoft 'implo STATIC cc AS DWORD ' incr cc '' cc = cc mod 28 cc = RND * 28 IF (ISFALSE(gesture.explo(0))) AND (gesture.implo(0)> @pDoppler.noise * 1) THEN AddNote2Har Qt.Har(1), 72 + cc, 20 AddNote2Har Qt.Har(1), 73 + cc , 20 AddNote2Har Qt.Har(1), 74 + cc, 20 END IF IF (ISFALSE(gesture.explo(1))) AND (gesture.implo(1)> @pDoppler.noise * 1) THEN AddNote2Har Whisper.Har(1), 75 + cc, 20 AddNote2Har Whisper.Har(1), 76 + cc, 20 AddNote2Har Whisper.Har(1), 77 + cc, 20 END IF IF (ISFALSE(gesture.explo(2))) AND (gesture.implo(2)> @pDoppler.noise * 1) THEN AddNote2Har Whisper.Har(1), 78 + cc, 20 AddNote2Har Whisper.Har(1), 79 + cc, 20 AddNote2Har Whisper.Har(1), 80+ cc, 20 END IF InstrumPlay Qt Controller Qt.channel, 7, 10 + 15 * (@pDoppler.xa + @pDoppler.ya + @pDoppler.za) END SUB SUB n16_vibi LOCAL n AS SINGLE IF (ISFALSE(gesture.explo(0))) AND (gesture.implo(0)> @pDoppler.noise * 1) THEN n = vibi.Lowtes + @pDoppler.xf DO WHILE n > vibi.HighTes n = n - 12 LOOP n = matchspecnote(n, n16_base, n16_fac) mPlay Vibi.channel, n, @pDoppler.xa * 10 END IF IF (ISFALSE(gesture.explo(1))) AND (gesture.implo(1)> @pDoppler.noise * 1) THEN n = vibi.Lowtes + @pDoppler.yf DO WHILE n > vibi.HighTes n = n - 12 LOOP n = matchspecnote(n, n16_base, n16_fac) mPlay Vibi.channel, n, @pDoppler.ya * 10 END IF IF (ISFALSE(gesture.explo(2))) AND (gesture.implo(2)> @pDoppler.noise * 1) THEN n = vibi.Lowtes + @pDoppler.zf DO WHILE n > vibi.HighTes n = n - 12 LOOP n = matchspecnote(n, n16_base, n16_fac) mPlay Vibi.channel, n, @pDoppler.za * 10 END IF END SUB SUB n16_spiro 'slowdwon STATIC sens AS LONG LOCAL n AS CURRENCY IF ISFALSE sens THEN sens = 40 END IF IF (gesture.slowdown(0) > gesture.speedup(0) + sens) THEN n = Spiro.LowTes + 3 * SQR(@pDoppler.xf) n = matchspecnote(n, n16_base, n16_fac) AddNote2Har Spiro.Har(1), n, 100 END IF IF (gesture.slowdown(1) > gesture.speedup(1) + sens) THEN n = Spiro.LowTes + 3 * SQR(@pDoppler.yf) n = matchspecnote(n, n16_BASE, n16_fac) AddNote2Har Spiro.Har(1), n, 100 END IF IF (gesture.slowdown(2) > gesture.speedup(2) + sens) THEN n = Spiro.LowTes + 3 * SQR(@pDoppler.zf) n = matchspecnote(n, n16_BASE, n16_fac) AddNote2Har Spiro.Har(1), n, 100 END IF InstrumPlay Spiro END SUB SUB n16_bourdonola 'fluent STATIC sens AS SINGLE LOCAL n AS CURRENCY IF ISFALSE sens THEN MM_bourdonola_On %MM_Wind OR %MM_motor sens = .625 END IF IF (gesture.flue(0) > sens) THEN n = Bourdonola.LowTes + 2 * SQR(@pDoppler.xf) n = matchspecnote(n, n16_base, n16_fac) AddNote2Har Bourdonola.Har(1), n, 100 END IF IF (gesture.flue(1) > sens) THEN n = Bourdonola.LowTes + 2 * SQR(@pDoppler.yf) n = matchspecnote(n, n16_base, n16_fac) AddNote2Har Bourdonola.Har(1), n, 100 END IF IF (gesture.flue(2) > sens) THEN n = Bourdonola.LowTes + 2 * SQR(@pDoppler.zf) n = matchspecnote(n, n16_base, n16_fac) AddNote2Har Bourdonola.Har(1), n, 100 END IF InstrumPlay Bourdonola END SUB SUB n16_piano 'continuous task 'play spectral chord, interactive vlume STATIC cc AS CURRENCY STATIC oldbase AS SINGLE LOCAL note AS SINGLE IF oldbase <> n16_base THEN RESET cc oldbase = n16_base END IF IF (INT(cc) MOD 16) THEN note = piano.lowtes + 12 + cc * (4 + RND * 4) ELSE note = piano.lowtes + 12 RESET cc END IF IF note > Piano.Hightes THEN RESET cc EXIT SUB END IF note=matchspecnote(note, n16_base, n16_fac) 'zelfs met 1 als start genoeg ruis om zonder beweging hoorbaar te spelen.. 'éxtreme scaling ncessary to get some dynamic range out of the piano.. strange PlayDur piano.channel, note, INT(MIN(127, (1 + 400 * (MAX(@pDoppler.xa, @pDoppler.ya, @pDoppler.za)^2)))), 2000 logfile "pvel"+ STR$(INT(MIN(127, (1 + 400 * (MAX(@pDoppler.xa, @pDoppler.ya, @pDoppler.za)^2))))) cc = cc - .4 + RND CONTROL SET TEXT gh.cockpit, %GMT_MSG2,STR$(CC) IF cc < 4 THEN INCR cc 'take bigger steps as we don't have so many notes in the spectrum in the lowest range END SUB SUB n16_bomi 'continuous task - playsspectral notes in it's range LOCAL i, j AS LONG LOCAL n AS BYTE Controller Bomi.channel, 7,50 + 6 * (@pDoppler.xa + @pDoppler.ya+ @pDoppler.za) FOR i = 1 TO 100 n = Spectralnote(n16_base, i, n16_fac, %ExpSpec) IF n > Bomi.LowTes THEN EXIT FOR NEXT AddNote2Har Bomi.Har(1), n, 40 j = i FOR i = j TO 6 + j n = Spectralnote(n16_base, i, n16_fac, %ExpSpec) AddNote2Har Bomi.Har(1), n, 40 NEXT InstrumPlay Bomi 'tremulant @ amp and speed Controller Bomi.channel, 11, MIN(100, 40 + 6 * SQR(MAX(@pDoppler.xf, @pDoppler.yf, @pDoppler.zf))) Controller Bomi.channel, 12, 60 * MAX(@pDoppler.xa, @pDoppler.ya, @pDoppler.za) ' logfile "trem"+ str$(MIN(100, 40 + 4 * SQR(MAX(@pDoppler.xf, @pDoppler.yf, @pDoppler.zf))))+ STR$(40 * MAX(@pDoppler.xa, @pDoppler.ya, @pDoppler.za)) END SUB SUB n16_params 'modulate basenote and specfac STATIC cc AS DWORD INCR cc n16_fac = 1 + SIN(cc/200)/6 IF gesture.collision(3) THEN 'ónly change basenote on collisions n16_base = n16_BASE + CHOOSE(9*(RND^2),2 -2, 3, -3, -4, 4, -5 ELSE 5 ) IF n16_base > 24 THEN n16_base = n16_base - 12 IF n16_base < 12 THEN n16_base = n16_base + 12 logfile "new base"+ STR$(n16_base) END IF CONTROL SET TEXT gh.cockpit, %GMT_MSG1, "base:"+ STR$(n16_base) + " - specfac:" +STR$(n16_fac) END SUB TYPE FlexExType PiPos AS BYTE EPos AS BYTE END TYPE GLOBAL FlexEx AS FlexExType 'some macro's to control flex - local here for now, but maybe it makes sense to include them in g_mm.inc? MACRO Pi_Pos (ps, spd) Controller Flex.channel, 45, 0 'pitchbend goes to pi blade FlexEx.PiPos = ps '0=stretched, 235 fully bent Bend Flex.channel, (FlexEx.PiPos MOD 128), (FlexEx.PiPos \ 128) 'lsb, msb AddNote2Har Flex.Har(1), 36, spd 'we only update harmony for reference, not for use with playhar mPlay Flex.channel, 36, spd END MACRO MACRO E_Pos (ps, spd) Controller Flex.channel, 45, 127 'pitchbend goes to e blade FlexEx.EPos = ps '0=stretched, 235 fully bent Bend Flex.channel, (FlexEx.EPos MOD 128), (FlexEx.PiPos \ 128) AddNote2Har Flex.Har(1), 37, spd 'we only update harmony for reference, not for use with playhar mPlay Flex.channel, 37, spd END MACRO MACRO FrontBow(dir, spd) 'dir: clockwise=0, counter=1 'again we only use harmony to keep track, don't use playhar! logfile "FrontBow "+ STR$(dir) + STR$(spd) SELECT CASE dir CASE 0 'çlockwise ' AddNote2Har Flex.Har(1), 48, spd ' DelNote2Har Flex.Har(1), 49 mPlay Flex.channel, 48, spd CASE 1 ' AddNote2Har Flex.Har(1), 49, spd ' DelNote2Har Flex.Har(1), 48 mPLAY Flex.channel, 49, spd CASE 1 END SELECT END MACRO MACRO BackBow(dir, spd) 'dir: clockwise=0, counter=1 'again we only use harmony to keep track, don't use playhar! logfile "BackBow "+ STR$(dir) + STR$(spd) SELECT CASE dir CASE 0 'çlockwise ' AddNote2Har Flex.Har(1), 50, spd ' DelNote2Har Flex.Har(1), 51 mPLAY Flex.channel, 50, spd CASE 1 ' AddNote2Har Flex.Har(1), 51, spd ' DelNote2Har Flex.Har(1), 50 mPLAY Flex.channel, 51, spd END SELECT END MACRO MACRO FrontPress(dir, force) 'dir -1=pi, 0=center 1=e logfile "FrontPress "+ STR$(dir) + STR$(force) SELECT CASE dir CASE 0 ' DelNote2Har Flex.Har(1), 62 ' DelNote2Har Flex.Har(1),63 mPlay Flex.channel, 65, 64 CASE -1 ' AddNote2Har Flex.Har(1), 62, force ' DelNote2Har Flex.Har(1), 63 mPLAY Flex.channel, 62,force CASE 1 ' AddNote2Har Flex.Har(1), 63, force ' DelNote2Har Flex.Har(1), 62 mPLAY Flex.channel, 63, force END SELECT END MACRO MACRO BackPress(dir, force) 'dir -1=pi, 0=center 1=e logfile "BackPress "+ STR$(dir) + STR$(force) SELECT CASE dir CASE 0 ' DelNote2Har Flex.Har(1), 60 ' DelNote2Har Flex.Har(1), 61 mPlay Flex.channel, 64, 64 CASE -1 ' AddNote2Har Flex.Har(1), 60, force ' DelNote2Har Flex.Har(1), 61 mPLAY Flex.channel, 60, force CASE 1 ' AddNote2Har Flex.Har(1), 61, force ' DelNote2Har Flex.Har(1), 60 mPLAY Flex.channel, 61, force END SELECT END MACRO SUB n16_flexbend ' non-interactive, ballet of bending, taskfreq 1 ' beaters and bows go in other (interactive) tasks ' pi-saw pos: note36 / e-saw pos 37, velobyte = speed - first set positions STATIC cc AS DWORD STATIC tout AS DWORD CONTROL SET TEXT gh.cockpit, %GMT_MSG2, STR$(cc) 'to be tested - check what the actual time is a movement take and adapt values here.. SELECT CASE cc 'seconds.. CASE 0 'stretch completely ' Pi_Pos (0, 100) ' ' E_Pos (0, 100) cc = 9 CASE 10 Pi_Pos (50, 10) CASE 30 E_Pos (50, 10) CASE 48 Pi_Pos (5, 15) CASE 60 E_Pos (100, 15) CASE 70 Pi_Pos (80, 20) CASE 80 E_Pos (30, 20) CASE 90 Pi_Pos (30, 20) CASE 100 E_Pos (20, 40) CASE 110 Pi_Pos (200, 50) CASE 120 E_Pos (0, 10) CASE 130 Pi_Pos (50, 30) CASE 140 E_Pos(200, 60) CASE > 150 IF cc < tout THEN INCR cc: EXIT SUB IF RND < .15 THEN Pi_Pos (RND * 230, 20 + RND * 80) tout = cc + 7 ELSEIF RND < .18 THEN E_Pos (RND * 230, 20 + RND * 80) tout = cc + 7 END IF ' ánd so on.. first check actual speed END SELECT INCR cc END SUB SUB n16_bow 'smooth STATIC frontb, backb AS LONG '1 = claimed for smooth(0), 2 = claimed for smooth(1) IF (Gesture.Edgy(0) < Gesture.Smooth(0)) AND (@pDoppler.xa > .04) THEN 'x-direction, pi, bow may vary smtchkbw: IF frontb = 1 THEN 'we stick with this bow FrontPress (-1, SQR(@pDoppler.xa) * 100) FrontBow (-1, MIN(20 + SQR(@pDoppler.xf), 100)) 'clcokwise/counterclockwise? we might need to multiply frontd with -1 here.. ELSEIF backb = 1 THEN BackPress (-1, SQR(@pDoppler.xa) * 100) BackBow (-1, MIN(20 + SQR(@pDoppler.xf), 100)) 'clcokwise/counterclockwise? we might need to multiply frontd with -1 here.. ELSE 'none claimed yet - if one is claimed, take the other, else random selection IF frontb = 2 THEN backb = 1 GOTO smtchkbw END IF IF backb = 2 THEN frontb = 1 GOTO smtchkbw END IF frontb = CHOOSE(1 + INT(RND * 2), 1, -1) END IF ELSE IF frontb = 1 THEN frontPress (0, 0) frontBow (0, 0) RESET frontb END IF IF backb = 1 THEN BackPress (0, 0) BackBow (0, 0) RESET backb END IF END IF IF (Gesture.Edgy(1) < Gesture.Smooth(1)) AND (@pDoppler.ya > .04) THEN 'x-direction, pi, bow may vary smtchkbw2: IF frontb = 2 THEN 'we stick with this bow FrontPress (1, SQR(@pDoppler.ya) * 100) FrontBow (1, MIN(20 + SQR(@pDoppler.yf), 100)) 'clcokwise/counterclockwise? we might need to multiply frontd with -1 here.. ELSEIF backb = 2 THEN BackPress (1, SQR(@pDoppler.ya) * 100) BackBow (1, MIN(20 + SQR(@pDoppler.yf), 100)) 'clcokwise/counterclockwise? we might need to multiply frontd with -1 here.. ELSE 'none claimed yet - if one is claimed, take the other, else random selection IF frontb = 1 THEN backb = 2 GOTO smtchkbw2 END IF IF backb = 1 THEN frontb = 2 GOTO smtchkbw2 END IF frontb = CHOOSE(1 + INT(RND * 2), 1, -1) END IF ELSE IF frontb = 2 THEN frontPress (0, 0) frontBow (0, 0) RESET frontb END IF IF backb = 2 THEN BackPress (0, 0) BackBow (0, 0) RESET backb END IF END IF END SUB SUB n16_rot 'motot beaters @ edgy LOCAL velo AS BYTE IF (Gesture.Edgy(0) < Gesture.Smooth(0)) AND (@pDoppler.xa > .03) THEN velo = 20 + SQR(@pDoppler.xa * 100) AddNote2Har Flex.Har(1), 72, velo mPlay Flex.channel, 72, velo ELSE DelNote2Har Flex.Har(1), 72 mPlay Flex.channel, 72, 0 END IF IF (Gesture.Edgy(1) < Gesture.Smooth(1)) AND (@pDoppler.ya > .03) THEN velo = 50 + SQR(@pDoppler.ya * 70) AddNote2Har Flex.Har(1), 84, velo mPlay Flex.channel, 84, velo ELSE DelNote2Har Flex.Har(1), 84 mPlay Flex.channel, 84, 0 END IF END SUB SUB n16_beat 'beaters on collision STATIC sens AS SINGLE IF ISFALSE sens THEN sens = 1 IF Gesture.collision(0) > sens THEN mPlay Flex.channel, 74 + INT(RND * 2), SQR(@pDoppler.xa) * 127 IF Gesture.collision(1) > sens THEN mPlay Flex.channel, 86 + INT(RND * 2), SQR(@pDoppler.xa) * 127 END SUB SUB Flex_Manual 'for now just control over bend positions and speed. 'ínteractive tasks for beaters etc.. STATIC hw AS DWORD STATIC hPi AS DWORD STATIC hE AS DWORD STATIC hps AS DWORD STATIC hes AS DWORD STATIC hfp AS DWORD STATIC hfb AS DWORD STATIC hbp AS DWORD STATIC hbb AS DWORD STATIC hpm AS DWORD 'beater motor STATIC hem AS DWORD STATIC hpm2 AS DWORD STATIC hem2 AS DWORD IF ISFALSE hw THEN MM_Flex_On DIALOG NEW 0 , "Flex control",20 ,20, 400,300, %WS_CAPTION OR %WS_POPUP TO hw 'pi blade CONTROL ADD LABEL, hw, 1000, "PiPos", 1,1,30, 12 CONTROL ADD "msctls_trackbar32", hw,1001, "pibend", 32, 1, 220, 12 , %WS_CHILD OR %WS_VISIBLE OR %TBS_HORZ OR %TBS_NOTICKS CONTROL ADD LABEL, hw, 1005, "0", 254, 1, 40, 12, %SS_SUNKEN CONTROL ADD LABEL, hw, 1002, "Speed", 1,17,30, 12 CONTROL ADD "msctls_trackbar32", hw,1003, "pispeed", 32, 17, 220, 12 , %WS_CHILD OR %WS_VISIBLE OR %TBS_HORZ OR %TBS_NOTICKS CONTROL ADD LABEL, hw, 1006, "64", 254, 17, 40, 12, %SS_SUNKEN CONTROL ADD BUTTON,hw, 1100, "go", 304, 1, 30, 28 ', CALL CbFm CONTROL ADD BUTTON, hw , 1120, "<<", 336, 1, 30, 28', CALL CbFm CONTROL ADD BUTTON, hw, 1130, ">>", 368, 1, 30, 28', CALL CbFm ' e blade CONTROL ADD LABEL, hw, 2000, "EPos", 1,51,30, 12 CONTROL ADD "msctls_trackbar32", hw,2001, "Ebend", 32, 51, 220, 12 , %WS_CHILD OR %WS_VISIBLE OR %TBS_HORZ OR %TBS_NOTICKS CONTROL ADD LABEL, hw, 2005, "0", 254, 51, 40, 12, %SS_SUNKEN CONTROL ADD LABEL, hw, 2002, "Speed", 1,67,30, 12 CONTROL ADD "msctls_trackbar32", hw,2003, "Epeed", 32, 67, 220, 12 , %WS_CHILD OR %WS_VISIBLE OR %TBS_HORZ OR %TBS_NOTICKS CONTROL ADD LABEL, hw, 2006, "64", 254, 67, 40, 12, %SS_SUNKEN CONTROL ADD BUTTON,hw, 2100, "go", 304, 51, 30, 28 ', CALL CbFm CONTROL ADD BUTTON, hw , 2120, "<<", 336, 51, 30, 28', CALL CbFm CONTROL ADD BUTTON, hw, 2130, ">>", 368, 51, 30, 28', CALL CbFm ' front bow CONTROL ADD LABEL, hw, 3000, "FPres", 1, 101, 30, 12 CONTROL ADD "msctls_trackbar32", hw,3001, "fdir", 32, 101, 220, 12 , %WS_CHILD OR %WS_VISIBLE OR %TBS_HORZ OR %TBS_NOTICKS CONTROL ADD LABEL, hw, 3002, "BowSpd", 1, 117,30,12 CONTROL ADD LABEL, hw, 3005, "0", 254, 101, 40, 12 CONTROL ADD "msctls_trackbar32", hw, 3003, "fbow", 32, 117, 220, 12 , %WS_CHILD OR %WS_VISIBLE OR %TBS_HORZ OR %TBS_NOTICKS CONTROL ADD LABEL, hw, 3006, "0", 254, 117, 40, 12 CONTROL ADD BUTTON, hw, 3100, "go", 304, 101, 30, 28 CONTROL ADD BUTTON, hw, 3200, "stop", 336, 101, 30, 28 ' back bow CONTROL ADD LABEL, hw, 4000, "FPres", 1, 151, 30, 12 CONTROL ADD "msctls_trackbar32", hw,4001, "fdir", 32, 151, 220, 12 , %WS_CHILD OR %WS_VISIBLE OR %TBS_HORZ OR %TBS_NOTICKS CONTROL ADD LABEL, hw, 4002, "BowSpd", 1, 167,30,12 CONTROL ADD LABEL, hw, 4005, "0", 254, 151, 40, 12 CONTROL ADD "msctls_trackbar32", hw, 4003, "fbow", 32, 167, 220, 12 , %WS_CHILD OR %WS_VISIBLE OR %TBS_HORZ OR %TBS_NOTICKS CONTROL ADD LABEL, hw, 4006, "0", 254, 167, 40, 12 CONTROL ADD BUTTON, hw, 4100, "go", 304, 151, 30, 28 CONTROL ADD BUTTON, hw, 4200, "stop", 336, 151, 30, 28 'beater motors CONTROL ADD LABEL, hw, 5000, "BtMot",1, 201, 30, 12 CONTROL ADD "msctls_trackbar32", hw, 5010, "btmot", 32, 201, 220, 12 , %WS_CHILD OR %WS_VISIBLE OR %TBS_HORZ OR %TBS_NOTICKS CONTROL ADD LABEL, hw, 5011, "0", 254, 201, 30,28 CONTROL ADD "msctls_trackbar32", hw, 5020, "btmote", 32, 217, 220, 12 , %WS_CHILD OR %WS_VISIBLE OR %TBS_HORZ OR %TBS_NOTICKS CONTROL ADD LABEL, hw, 5021, "0", 254, 217, 30,28 CONTROL ADD "msctls_trackbar32", hw, 5030, "btmot2", 32, 233, 220, 12 , %WS_CHILD OR %WS_VISIBLE OR %TBS_HORZ OR %TBS_NOTICKS CONTROL ADD LABEL, hw, 5031, "0", 254, 233, 30,28 CONTROL ADD "msctls_trackbar32", hw, 5040, "btmote2", 32, 249, 220, 12 , %WS_CHILD OR %WS_VISIBLE OR %TBS_HORZ OR %TBS_NOTICKS CONTROL ADD LABEL, hw, 5041, "0", 254, 249, 30,28 CONTROL ADD BUTTON, hw, 5100, "rnd", 304, 201, 30, 28 CONTROL ADD BUTTON, hw, 5110, "0", 336, 201, 30, 28 CONTROL ADD BUTTON, hw, 6000,"cc66", 1, 277, 201, 30 CONTROL ADD BUTTON, hw,7000, "PB1", 203, 277, 32, 30 CONTROL ADD BUTTON, hw, 7001, "PB2", 236,277, 32, 30 CONTROL ADD BUTTON, hw,7002, "EB1", 269, 277, 32, 30 CONTROL ADD BUTTON, hw, 7003, "EB2", 302,277, 32, 30 ' évt nog voor speed, bow speed, bow force.. DIALOG SHOW MODELESS hw, CALL CbFm warning "hw"+ STR$(hw) CONTROL HANDLE hw, 1001 TO hPi LOCAL rs AS DWORD DIALOG DOEVENTS ' control send hw, 1001, %PBM_SETRANGE, 0, MAKLNG(0,234) to rs rs=SendMessage (hPi, %TBM_SETRANGE, 0, MAKLNG(0,234)) DIALOG DOEVENTS ' MSGBOX STR$(rs),,"res" CONTROL HANDLE hw, 1003 TO hPs CONTROL HANDLE hw, 2001 TO he CONTROL HANDLE hw, 2003 TO hEs CONTROL HANDLE hw, 3001 TO hfp CONTROL HANDLE hw, 3003 TO hfb CONTROL HANDLE hw, 4001 TO hbp CONTROL HANDLE hw, 4003 TO hbb CONTROL HANDLE hw, 5010 TO hpm CONTROL HANDLE hw, 5020 TO hem CONTROL HANDLE hw, 5030 TO hpm2 CONTROL HANDLE hw, 5040 TO hem2 DIALOG DOEVENTS SendMessage hPs, %TBM_SETRANGE, 0, MAKLNG(0,127) SendMessage hE, %TBM_SETRANGE, 0, MAKLNG(0,234) SendMessage hEs, %TBM_SETRANGE, 0, MAKLNG(0,127) SendMessage (hPs, %TBM_SETPOS, %true, 64) SendMessage hEs, %TBM_SETPOS, %true, 64 SendMessage hfp, %TBM_SETRANGE, 0, MAKLNG(-127,127) SendMessage hfp, %TBM_SETPOS, %true, 0 SendMessage hfb, %TBM_SETRANGE, 0, MAKLNG(-127,127) SendMessage hfb, %TBM_SETPOS, %true, 0 SendMessage hbp, %TBM_SETRANGE, 0, MAKLNG(-127,127) SendMessage hbp, %TBM_SETPOS, %true, 0 SendMessage hbb, %TBM_SETRANGE, 0, MAKLNG(-127,127) SendMessage hbb, %TBM_SETPOS, %true, 0 SendMessage hPs, %TBM_SETPAGESIZE, 0, 10 SendMessage he, %TBM_SETPAGESIZE, 0, 10 SendMessage hes, %TBM_SETPAGESIZE, 0, 10 SendMessage hfp, %TBM_SETPAGESIZE, 0, 10 SendMessage hfb, %TBM_SETPAGESIZE, 0, 10 SendMessage hbp, %TBM_SETPAGESIZE, 0, 10 SendMessage hbb, %TBM_SETPAGESIZE, 0, 10 SendMessage hPm, %TBM_SETRANGE, 0, MAKLNG(0,127) SendMessage hem, %TBM_SETRANGE, 0, MAKLNG(0,127) SendMessage hPm2, %TBM_SETRANGE, 0, MAKLNG(0,127) SendMessage hem2, %TBM_SETRANGE, 0, MAKLNG(0,127) END IF END SUB CALLBACK FUNCTION cbfm STATIC hPi AS DWORD STATIC hE AS DWORD STATIC hps AS DWORD STATIC hes AS DWORD STATIC hfp AS DWORD STATIC hfb AS DWORD STATIC hbp AS DWORD STATIC hbb AS DWORD STATIC hpm AS DWORD STATIC hem AS DWORD STATIC hpm2 AS DWORD STATIC hem2 AS DWORD LOCAL vl AS LONG LOCAL valu AS BYTE LOCAL sp AS LONG IF CBMSG = %WM_COMMAND THEN IF ISFALSE hPi THEN 'here we're sure the window is fully created CONTROL HANDLE CBHNDL, 1001 TO hPi CONTROL HANDLE CBHNDL, 1003 TO hPs CONTROL HANDLE CBHNDL, 2001 TO hE CONTROL HANDLE CBHNDL, 2003 TO hEs CONTROL HANDLE CBHNDL, 3001 TO hfp CONTROL HANDLE CBHNDL, 3003 TO hfb CONTROL HANDLE CBHNDL, 4001 TO hbp CONTROL HANDLE CBHNDL, 4003 TO hbb CONTROL HANDLE CBHNDL, 5010 TO hpm CONTROL HANDLE CBHNDL, 5020 TO hem END IF IF CBCTLMSG = %BN_CLICKED THEN SELECT CASE CBCTL CASE 1100 controller Flex.channel, 45, 0 valu = SendMessage (hPi, %TBM_GETPOS,%Null, %Null) sp = SendMessage (hPs, %TBM_GETPOS,%Null, %Null) Bend Flex.channel, (valu MOD 128), valu\128 mPlay Flex.channel,36,sp warning "pi"+ STR$(valu) + STR$(sp) CASE 1120 sp = SendMessage (hPs, %TBM_GETPOS,%Null, %Null) warning "pi full bend" + STR$(sp) mPlay Flex.channel, 40, sp CASE 1130 sp = SendMessage (hPs, %TBM_GETPOS,%Null, %Null) warning "pi full stretch" + STR$(sp) mPlay Flex.channel, 38, sp CASE 2100 controller Flex.channel, 45, 127 valu = SendMessage (he, %TBM_GETPOS,%Null, %Null) sp = SendMessage (hes, %TBM_GETPOS,%Null, %Null) Bend Flex.channel, (valu MOD 128), valu\128 mPlay Flex.channel, 37, sp warning "e"+ STR$(valu) + STR$(sp) CASE 2120 sp = SendMessage (hes, %TBM_GETPOS,%Null, %Null) warning "e full bend" + STR$(sp) mPlay Flex.channel, 41, sp CASE 2130 sp = SendMessage (hes, %TBM_GETPOS,%Null, %Null) warning "e full stretch" + STR$(sp) mPlay Flex.channel, 39, sp CASE 3100 sp = SendMessage (hfp, %TBM_GETPOS,%Null, %Null) SELECT CASE sp CASE < 0 'left mPlay Flex.channel, 60, ABS(sp) warning "f left"+ STR$(ABS(sp)) CASE 0 mPlay Flex.channel, 64, 0 warning "f center CASE ELSE mPlay Flex.channel, 61, sp warning "f right"+ STR$(ABS(sp)) END SELECT sp = SendMessage (hfb, %TBM_GETPOS,%Null, %Null) SELECT CASE sp CASE < 0 'ccw mPlay Flex.channel, 49, ABS(sp) warning "f ccw"+ STR$(ABS(sp)) CASE ELSE 'cw mPlay Flex.channel, 48, sp warning "f cw"+ STR$(ABS(sp)) END SELECT CASE 3200 mPlay Flex.channel, 60, 0 mPlay Flex.channel, 64, 0 CASE 4100 sp = SendMessage (hbp, %TBM_GETPOS,%Null, %Null) SELECT CASE sp CASE < 0 'left mPlay Flex.channel, 62, ABS(sp) warning "left"+ STR$(ABS(sp)) CASE 0 mPlay Flex.channel, 65, 0 CASE ELSE mPlay Flex.channel, 63, sp warning "right"+ STR$(ABS(sp)) END SELECT sp = SendMessage (hbb, %TBM_GETPOS,%Null, %Null) SELECT CASE sp CASE < 0 'ccw mPlay Flex.channel, 51, ABS(sp) warning "ccw"+ STR$(ABS(sp)) CASE ELSE 'cw mPlay Flex.channel, 50, sp warning "cw"+ STR$(ABS(sp)) END SELECT CASE 4200 mPlay Flex.channel, 62, 0 mPlay Flex.channel, 65, 0 CASE 6000 controller flex.channel, 66, 127 CASE 7000: mPlay Flex.channel, 74, 40 + RND * 80 CASE 7001: mPlay Flex.channel, 75, 40 + RND * 80 CASE 7002: mPlay Flex.channel, 86, 40 + RND * 80 CASE 7003: mPlay Flex.channel, 87, 40 + RND * 80 CASE 5100 warning "bmotors rnd" vl = INT(RND * 60) SendMessage hpm, %TBM_SETPOS, %true, vl mPlay Flex.channel, 73, vl vl = INT(RND * 60) mPlay Flex.channel, 85, vl SendMessage hem, %TBM_SETPOS, %true, vl vl = INT(RND * 60) mPlay Flex.channel, 72, vl SendMessage hpm2, %TBM_SETPOS, %true, vl vl = INT(RND * 60) mPlay Flex.channel, 84, vl SendMessage hem2, %TBM_SETPOS, %true, vl CASE 5110 warning "bmotors off" SendMessage hpm, %TBM_SETPOS, %true, 0 mPlay Flex.channel, 73, 0 SendMessage hpm, %TBM_SETPOS, %true, 0 mPlay Flex.channel, 72, 0 SendMessage hpm, %TBM_SETPOS, %true, 0 mPlay Flex.channel, 85, 0 SendMessage hpm, %TBM_SETPOS, %true, 0 mPlay Flex.channel, 84, 0 END SELECT END IF END IF SELECT CASE CBMSG CASE %WM_HSCROLL, %WM_VSCROLL 'note: id doesn't correspond at all with the one given at creation IF ISFALSE hPi THEN 'here we're sure the window is fully created CONTROL HANDLE CBHNDL, 1001 TO hPi CONTROL HANDLE CBHNDL, 1003 TO hPs CONTROL HANDLE CBHNDL, 2001 TO hE CONTROL HANDLE CBHNDL, 2003 TO hEs CONTROL HANDLE CBHNDL, 3001 TO hfp CONTROL HANDLE CBHNDL, 3003 TO hfb CONTROL HANDLE CBHNDL, 4001 TO hbp CONTROL HANDLE CBHNDL, 4003 TO hbb CONTROL HANDLE CBHNDL, 5010 TO hpm CONTROL HANDLE CBHNDL, 5020 TO hem CONTROL HANDLE CBHNDL, 5030 TO hpm2 CONTROL HANDLE CBHNDL, 5040 TO hem2 END IF SELECT CASE CBLPARAM CASE hPi vl = SendMessage (CBLPARAM, %TBM_GETPOS,%Null, %Null) CONTROL SET TEXT CBHNDL, 1005, STR$(vl) CASE hPs vl = SendMessage (CBLPARAM, %TBM_GETPOS,%Null, %Null) CONTROL SET TEXT CBHNDL, 1006, STR$(vl) CASE hE vl = SendMessage (CBLPARAM, %TBM_GETPOS,%Null, %Null) CONTROL SET TEXT CBHNDL, 2005, STR$(vl) CASE hEs vl = SendMessage (CBLPARAM, %TBM_GETPOS,%Null, %Null) CONTROL SET TEXT CBHNDL, 2006, STR$(vl) CASE hfp vl = SendMessage (CBLPARAM, %TBM_GETPOS,%Null, %Null) IF vl < 0 THEN CONTROL SET TEXT CBHNDL, 3005, "L" + STR$(ABS(vl)) ELSEIF vl = 0 THEN CONTROL SET TEXT CBHNDL, 3005, "0" ELSE CONTROL SET TEXT CBHNDL, 3005, "R" + STR$(ABS(vl)) END IF CASE hfb vl = SendMessage (CBLPARAM, %TBM_GETPOS,%Null, %Null) IF vl < 0 THEN CONTROL SET TEXT CBHNDL, 3006, "CCW" + STR$(ABS(vl)) ELSEIF vl = 0 THEN CONTROL SET TEXT CBHNDL, 3006, "0" ELSE CONTROL SET TEXT CBHNDL, 3006, "CW" + STR$(ABS(vl)) END IF CASE hbp vl = SendMessage (CBLPARAM, %TBM_GETPOS,%Null, %Null) IF vl < 0 THEN CONTROL SET TEXT CBHNDL, 4005, "L" + STR$(ABS(vl)) ELSEIF vl = 0 THEN CONTROL SET TEXT CBHNDL, 4005, "0" ELSE CONTROL SET TEXT CBHNDL, 4005, "R" + STR$(ABS(vl)) END IF CASE hbb vl = SendMessage (CBLPARAM, %TBM_GETPOS,%Null, %Null) IF vl < 0 THEN CONTROL SET TEXT CBHNDL, 4006, "CCW" + STR$(ABS(vl)) ELSEIF vl = 0 THEN CONTROL SET TEXT CBHNDL, 4006, "0" ELSE CONTROL SET TEXT CBHNDL, 4006, "CW" + STR$(ABS(vl)) END IF CASE hpm '73 beater motor vl = SendMessage (CBLPARAM, %TBM_GETPOS,%Null, %Null) CONTROL SET TEXT CBHNDL, 5011, STR$(vl) mPlay Flex.channel, 73, vl warning "73" + STR$(vl) CASE hem vl = SendMessage (CBLPARAM, %TBM_GETPOS,%Null, %Null) CONTROL SET TEXT CBHNDL, 5021, STR$(vl) mPlay Flex.channel, 85, vl warning "85" + STR$(vl) CASE hpm2 '73 beater motor vl = SendMessage (CBLPARAM, %TBM_GETPOS,%Null, %Null) CONTROL SET TEXT CBHNDL, 5031, STR$(vl) mPlay Flex.channel, 72, vl warning "72" + STR$(vl) CASE hem2 vl = SendMessage (CBLPARAM, %TBM_GETPOS,%Null, %Null) CONTROL SET TEXT CBHNDL, 5041, STR$(vl) mPlay Flex.channel, 84, vl warning "84" + STR$(vl) END SELECT END SELECT END FUNCTION SUB Flex_ELights () STATIC n AS INTEGER NoteOff Flex.channel, 120 + n INCR n IF n> 3 THEN RESET n mPlay Flex.channel, 120 + INT(RND * 4) , 64 END SUB SUB Flex_Elights_Stop () NoteOff Flex.channel, 120 NoteOff Flex.channel, 121 NoteOff Flex.channel, 122 NoteOff Flex.channel, 123 END SUB SUB Flex_PiLights () STATIC n AS INTEGER NoteOff Flex.channel, 124 + n INCR n IF n> 3 THEN RESET n mPlay Flex.channel, 124 + INT(RND * 4) , 64 END SUB SUB Flex_PiLights_Stop () NoteOff Flex.channel, 124 NoteOff Flex.channel, 125 NoteOff Flex.channel, 126 NoteOff Flex.channel, 127 END SUB SUB BeatSeq '15/sec LOCAL ch AS SINGLE STATIC cc AS DWORD INCR cc ch = (cc/(15 * 1800)) IF RND < ch THEN mPlay Flex.channel, CHOOSE(INT(RND*4) + 1, 74, 75,86, 87), RND * 127 END IF END SUB 'borrowed fromemilie.inc SUB n16_SldToypi STATIC sens AS LONG IF ISFALSE sens THEN sens = 40 '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