' ******************************************** '* Namuda Study #11 * '* Prime 2011 * '********************************************* '* Namuda Study #31 * '* Sense 2013 * ' ******************************************** 'both pieces are spectral compositions 'code for Prime 2011 (january 2011) - Namuda Study #11 'reconsidered for reworking, 01.2013 - Namuda Study #31 ' seems to have persistent timer problems... (blocking tasks!) ' 26.01.2013: Code module isolated from Robodomi ' Now contains the code for Namuda Study #11 and #31 ' since these are sharing a lot of procedures. ' 03.02.2013: debug Ob behavior, debug functionality of Klar ' to do: add Heli and Fa ' first rehearsal with Dominica ' 09.02.2013: code improved. We removed also some bugs from the old prime code, thus that piece ' will not sound as it did anymore. ' Heli and Fa added. ' to be done: check why tubi isn't doing anything... ' 10.02.2013: second rehearsal with Dominica for #31, Sense. 'Prime 2011: %T2011_WBS = 32 '16 seems impossible... %T2011 = 33 'meta %Prime_End = 34 %Prime = 2011 'Sense 2013: %T2013_WBS = 32 %T2013 = 33 %Sense_End = 34 %Sense = 2013 ' common playing tasks: %T157 = 18 %T163 = 19 %T167 = 20 %T173 = 21 %T179 = 22 %T181 = 23 %T191 = 24 %T193 = 25 %T197 = 26 %T199 = 27 %T211 = 28 %T661 = 29 %T673 = 30 %T677 = 31 TYPE Prime_2011 DWORD tik AS DWORD '0-2011 tc AS LONG 'tonal center prop AS SINGLE 'normalized time counter 0-1 angle AS SINGLE 'in rad. spekfak AS SINGLE piece AS WORD ' added 30.01.2013, takes constant values %Prime or %Sense END TYPE GLOBAL Prim AS Prime_2011 'procs for Prime_2011, Namuda study #11 DECLARE FUNCTION Init_Sense2013 () AS LONG ' Namuda Study #31 DECLARE SUB T2013 () DECLARE SUB T2013_Stop () DECLARE SUB Sense_End () DECLARE FUNCTION Init_Prime2011 () AS LONG ' Namuda Study #11 DECLARE SUB T2011 () DECLARE SUB T2011_Stop () DECLARE SUB T157 () ' qt DECLARE SUB T163 () ' ob DECLARE SUB T167 () ' korn DECLARE SUB T173 () ' xy DECLARE SUB T179 () DECLARE SUB T181 () DECLARE SUB T191 () DECLARE SUB T193 () DECLARE SUB T197 () DECLARE SUB T199 () ' toypi DECLARE SUB T211 () DECLARE SUB T661 () DECLARE SUB T673 () DECLARE SUB T677 () DECLARE SUB Prime_End () FUNCTION Init_Prime2011 () AS LONG ' Namuda Study January 2011 ClearTasks Prim.piece = %Prime Task(%T2011_WBS).naam = "WBS..." ' wait before start Task(%T2011_WBS).cptr = CODEPTR(T2011_WBS) Task(%T2011_WBS).freq = 1 TaskEX(%T2011_WBS).stopcptr = CODEPTR(T2011_WBS_Stop) Task(%T2011).naam = "Prime" Task(%T2011).cptr = CODEPTR(T2011) Task(%T2011).freq = 4 '1 Hz would give us a duration of 33 minutes... '2 Hz --> 16'30" '3 Hz --> 11' '4 Hz --> 8'37" '5 Hz --> 6'40" '10Hz --> 3'20" (quick test mode) ' Task(%T2011).duur = 2011 'in s - 33' Task(%T2011).flags = %False TaskEX(%T2011).stopcptr = CODEPTR(T2011_Stop) Task(%T157).naam = "T157" 'qt Task(%T157).cptr = CODEPTR(T157) Task(%T157).freq = 157 / 20 '15.7 Task(%T157).flags = %False Task(%T163).naam = "T163" 'ob Task(%T163).cptr = CODEPTR(T163) Task(%T163).freq = 163 / 20 Task(%T163).flags = %False Task(%T167).naam = "T167" 'korn Task(%T167).cptr = CODEPTR(T167) Task(%T167).freq = 167 / 20 Task(%T167).flags = %False Task(%T173).naam = "T173" 'xy Task(%T173).cptr = CODEPTR(T173) Task(%T173).freq = 173 / 20 Task(%T173).flags = %False Task(%T179).naam = "T179" Task(%T179).cptr = CODEPTR(T179) Task(%T179).freq = 179 / 20 Task(%T179).flags = %False Task(%T181).naam = "T181" Task(%T181).cptr = CODEPTR(T181) Task(%T181).freq = 181 / 20 Task(%T181).flags = %False Task(%T191).naam = "T191" Task(%T191).cptr = CODEPTR(T191) Task(%T191).freq = 191 / 20 Task(%T191).flags = %False Task(%T193).naam = "T193" Task(%T193).cptr = CODEPTR(T193) Task(%T193).freq = 193 / 20 Task(%T193).flags = %False Task(%T197).naam = "T197" Task(%T197).cptr = CODEPTR(T197) Task(%T197).freq = 197 / 20 Task(%T197).flags = %False Task(%T199).naam = "T199" Task(%T199).cptr = CODEPTR(T199) Task(%T199).freq = 199 / 20 Task(%T199).flags = %False Task(%T211).naam = "T211" Task(%T211).cptr = CODEPTR(T211) Task(%T211).freq = 221 / 20 Task(%T211).flags = %False ' Task(%T661).naam = "T661" ' Task(%T661).cptr = CODEPTR(T661) ' Task(%T661).freq = 661 / 100 ' Task(%T661).flags = %False ' ' Task(%T673).naam = "T673" ' Task(%T673).cptr = CODEPTR(T673) ' Task(%T673).freq = 673 / 100 ' Task(%T673).flags = %False ' ' Task(%T677).naam = "T677" ' Task(%T677).cptr = CODEPTR(T677) ' Task(%T677).freq = 677 / 100 ' Task(%T677).flags = %False Task(%Prime_End).naam = "Ending" Task(%Prime_End).cptr = CODEPTR(Prime_End) Task(%Prime_End).freq = 6 Task(%Prime_End).flags = %False FUNCTION = %True END FUNCTION FUNCTION Init_Sense2013 () AS LONG ' instruments to add in: Klar, Spiro, Fa 'Analyze_Number 2013 ' new function in g_indep.dll, 29.01.2013 ' 2013 = 149 + 157 + 163 + 167 + 173 + 179 + 181 + 191 + 193 + 197 + 263 ' 2013 = 3 x 11 x 61 ClearTasks Prim.piece = %Sense Task(%T2013_WBS).naam = "Wait..." ' wait before start Task(%T2013_WBS).cptr = CODEPTR(T2013_WBS) Task(%T2013_WBS).freq = 1 Task(%T2013_WBS).flags = %PERTIM_TASK TaskEX(%T2013_WBS).stopcptr = CODEPTR(T2013_WBS_Stop) Task(%T2013).naam = "Sense" Task(%T2013).cptr = CODEPTR(T2013) Task(%T2013).freq = 3 '2 '4 '10 '1 Hz would give us a duration of 33 minutes... '2 Hz --> 16'30" '3 Hz --> 11' '4 Hz --> 8'37" --- this is the setting for Prime2011 '5 Hz --> 6'40" '10Hz --> 3'20" (quick test mode) ' Task(%T2013).duur = Task(%T2013).flags = %PERTIM_Task TaskEX(%T2013).stopcptr = CODEPTR(T2013_Stop) Task(%T157).naam = "Qt157" 'qt Task(%T157).cptr = CODEPTR(T157) Task(%T157).freq = 157 / 20 '15.7 Task(%T157).flags = %False Task(%T163).naam = "Ob163" 'ob Task(%T163).cptr = CODEPTR(T163) Task(%T163).freq = 163 / 20 Task(%T163).flags = %False Task(%T167).naam = "Kor167" 'korn Task(%T167).cptr = CODEPTR(T167) Task(%T167).freq = 167 / 20 Task(%T167).flags = %False Task(%T173).naam = "Xy173" 'xy Task(%T173).cptr = CODEPTR(T173) Task(%T173).freq = 173 / 20 Task(%T173).flags = %False Task(%T179).naam = "BoSa179" Task(%T179).cptr = CODEPTR(T179) Task(%T179).freq = 179 / 20 Task(%T179).flags = %False Task(%T181).naam = "Bomi181" Task(%T181).cptr = CODEPTR(T181) Task(%T181).freq = 181 / 20 Task(%T181).flags = %False Task(%T191).naam = "Puff191" Task(%T191).cptr = CODEPTR(T191) Task(%T191).freq = 191 / 20 Task(%T191).flags = %False Task(%T193).naam = "Pia193" Task(%T193).cptr = CODEPTR(T193) Task(%T193).freq = 193 / 20 Task(%T193).flags = %False Task(%T197).naam = "Klok197" Task(%T197).cptr = CODEPTR(T197) Task(%T197).freq = 197 / 20 Task(%T197).flags = %False Task(%T199).naam = "Toypi149" '"Toypi199" Task(%T199).cptr = CODEPTR(T199) Task(%T199).freq = 149/10 '199 / 20 Task(%T199).flags = %False Task(%T211).naam = "Bour263" '"Bour211" Task(%T211).cptr = CODEPTR(T211) Task(%T211).freq = 263 / 20 '211 / 20 Task(%T211).flags = %False ' Task(%T661).naam = "nc661" ' Task(%T661).cptr = CODEPTR(T661) ' Task(%T661).freq = 661 / 100 ' Task(%T661).flags = %False ' ' Task(%T673).naam = "nc673" ' Task(%T673).cptr = CODEPTR(T673) ' Task(%T673).freq = 673 / 100 ' Task(%T673).flags = %False ' ' Task(%T677).naam = "nc677" ' Task(%T677).cptr = CODEPTR(T677) ' Task(%T677).freq = 677 / 100 ' Task(%T677).flags = %False Task(%Sense_End).naam = "Ending" Task(%Sense_End).cptr = CODEPTR(Sense_End) Task(%Sense_End).freq = 6 Task(%Sense_End).flags = %False MM_Vibi_On MM_Spiro_On MM_Tubi_On FUNCTION = %True END FUNCTION '*************** code for 'Sense 2013' *********************************************** 'out of timers problem (Microsoft...) SUB T2013_WBS () 'wait before start code... STATIC cnt AS LONG IF ISFALSE task(%T2013_WBS).tog THEN RESET cnt MM_HarmO_Off MM_Harma_Off Task(%T2013_WBS).tog = %True END IF INCR cnt IF cnt > 15 THEN Stoptask %T2013_WBS END SUB SUB T2013_WBS_Stop () StartTask %T2013 END SUB SUB T2013 () 'this is the metatask for 'Sense', Namuda Study #31 'this is too much tasks with the classical timers. result: after trying to start too many tasks, 'this task is never called again and prim.tik stays 1.. 'seems to work with the timerqeuetimers. '2013: Reoccuring timer problems... '09.03.2013: seems solved. Feeling uncertain though. LOCAL i, modcnt AS DWORD LOCAL n AS SINGLE STATIC omodcnt, noot AS LONG STATIC trumpflag, humanolaflag, krumflag, pianoflag, spiroflag, vibiflag AS LONG 'logfile FUNCNAME$ IF ISFALSE Task(%T2013).tog THEN IF ISFALSE Task(%Gesture_Analyser).tog THEN starttask %Gesture_Analyser RESET Prim MM_Trump_On MM_Humanola_On MM_Krum_On MM_Vibi_On MM_Tubi_On MM_Spiro_On Controller Qt.channel, 7 , 8 Qt.ctrl(7) = 8 'MM_HarmO_Off 'MM_Harma_Off FOR i = %T157 TO %T193 '%T677 IF ISFALSE task(i).tog THEN starttask i 'SLEEP 100 NEXT i IF ISFALSE Task(%T211).tog THEN starttask %T211 Task(%T2013).tog = %True END IF Prim.prop = Prim.tik / 2013! '0-1, float Prim.angle = Prim.prop * Pi 'in rad. , semicircle modcnt = INT(Prim.prop * 12) '0-11, discrete IF modcnt <> omodcnt THEN Prim.tc = (Prim.tc + 5) MOD 12 'we gaan doorheen de gehele kwartencirkel omodcnt = modcnt addnote2Har vibi.har(1), 60 + Prim.tc, 27 + (gesture.flue_val(3) * 100) i = 1 noot = 24 + Prim.tc DO n = SpectralNote(noot, i, Prim.spekfak, %ExpSpec) INCR i IF n =< Vibi.hightes THEN addNote2Har vibi.har(1), n,37 + (gesture.flue_val(3) * 90) ELSE EXIT DO END IF LOOP Instrumplay Vibi Vibiflag = Prim.tik + 20 ' hold time logfile TIME$ & " Tc=" & STR$(Prim.tc) 'debug ok now 16.01.2013 END IF Prim.spekfak = 0.5 + Prim.prop '0.5 - 1.5 INCR Prim.tik 'we insert chordal effects everytime we cross a prime component count: 'following lines are the note-off's for the chords. IF trumpflag THEN Instrumplay Trump : RESET Trumpflag IF humanolaflag THEN Instrumplay Humanola : RESET humanolaflag IF krumflag THEN Instrumplay Krum : RESET Krumflag IF pianoflag THEN Instrumplay Piano : RESET Pianoflag IF Spiroflag THEN IF Prim.tik > SpiroFlag THEN Instrumplay Spiro RESET Spiroflag END IF END IF IF VibiFlag THEN IF Prim.tik > VibiFlag THEN Instrumplay Vibi RESET Vibiflag END IF END IF IF prim.tik > 150 THEN IF ISFALSE prim.tik MOD 157 THEN '12 times i = 1 noot = 24 + Prim.tc DO n = Spectralnote (noot,i, Prim.spekfak, %ExpSpec) INCR i IF n < Trump.hightes THEN addNote2Har trump.har(1), n, 127 ELSE EXIT DO END IF LOOP Instrumplay Trump Trumpflag = %True END IF ' IF ISFALSE prim.tik MOD 163 THEN ' '12 times ' END IF ' IF ISFALSE prim.tik MOD 167 THEN ' '12 times ' END IF ' IF ISFALSE prim.tik MOD 173 THEN ' ' 11 times ' ' n = SpectralnoteF (noot, gesture.smooth(0) * 36, Prim.spekfak, %ExpSpec) ' ' addNote2QHar qt.qhar(1), n, @pDoppler.xa * 127 ' END IF IF ISFALSE prim.tik MOD 179 THEN i = 1 noot = 24 + Prim.tc DO n = Spectralnote (noot,i, Prim.spekfak, %ExpSpec) INCR i IF n <= Humanola.hightes THEN addNote2Har Humanola.har(1), n, 127 ELSE EXIT DO END IF LOOP Instrumplay humanola humanolaflag = %True '11 times END IF IF ISFALSE prim.tik MOD 183 THEN ' added 26.01.2013 i = 1 noot = 24 + Prim.tc DO n = Spectralnote (noot,i, Prim.spekfak, %ExpSpec) INCR i IF n <= Spiro.hightes THEN addNote2Har Spiro.har(1), n, 42 ELSE EXIT DO END IF LOOP Instrumplay Spiro Spiroflag = Prim.tik + 10 ' hold time '11 times END IF ' IF ISFALSE prim.tik MOD 191 THEN ' '10 times ' END IF ' IF ISFALSE prim.tik MOD 193 THEN ' '10 times ' END IF ' IF ISFALSE prim.tik MOD 197 THEN ' '10 times ' END IF IF ISFALSE prim.tik MOD 199 THEN '10 times i = 1 noot = 24 + prim.tc DO n = Spectralnote (noot,i, Prim.spekfak, %ExpSpec) INCR i IF n < Krum.hightes THEN addNote2Har Krum.har(1), n, 127 ELSE EXIT DO END IF LOOP Instrumplay Krum Krumflag = %True END IF IF ISFALSE prim.tik MOD 671 THEN ' in Prime: MOD 661 THEN ' 2013 = 3 x 11 x 61, or 3 x 671 '3 times i = 1 noot = 24 + prim.tc DO n = Spectralnote (noot,i, Prim.spekfak, %ExpSpec) INCR i IF n =< Piano.hightes THEN addNote2Har Piano.har(1), n, 85 ELSE EXIT DO END IF LOOP Instrumplay Piano Pianoflag = %True END IF ' logfile str$(prim.tik) + str$(prim.tik MOD 677) IF ISFALSE prim.tik MOD 677 THEN MM_Tubi_On '2 times i = 1 noot = 60 + prim.tc ' logfile "base " + str$(noot) DO n = SpectralnoteF (noot, i , Prim.spekfak, %ExpSpec) ' logfile " check" + str$(n) INCR i IF n <= Tubi.Hightes THEN ' logfile "tubi add" + str$(n) addNote2QHar tubi.qhar(1), n, 127 ELSE ' logfile "too high for tubi" EXIT DO END IF LOOP logfile "tubiplay" QInstrumplay Tubi ' lijkt niet te werken... na test van xof: werk wel, maar slechts om de 225.66 seconden aan taakfreq. 3.. END IF END IF 'scoring: SELECT CASE prim.tik 'opbouw ... 'CASE 167 'dit is op de eerste modulatie CASE 1005 ' dit is halfweg, hier is prim.spekfak = 1 , platonisch spektrum. IF ISFALSE Task(%T197).tog THEN starttask %T197 'collision op klokken CASE 1513 IF ISFALSE Task(%T199).tog THEN starttask %T199 'theacol op toypi - lijkt niks te doen 'out of timers? 'afbouw voor ending: CASE 1844 'dit is op de laatste modulatie. IF ISFALSE Task(%Sense_End).tog THEN starttask %Sense_End END IF CASE 1968 '43 mPlay Snar.channel, 73, 127 CASE 1970 '41 IF Task(%T179).tog THEN stoptask %T179 MM_Bono_Off END IF mPlay Snar.channel, 74, 127 CASE 1974 '37 IF Task(%T157).tog THEN 'qt stoptask %T157 MM_Qt_Off END IF mPlay Snar.channel, 73, 127 CASE 1980 '31 IF Task(%T163).tog THEN stoptask %T163 MM_Ob_Off END IF mPlay Snar.channel, 74, 127 CASE 1982 '29 IF Task(%T193).tog THEN stoptask %T193 MM_Piano_Off END IF mPlay Snar.channel, 73, 127 CASE 1988 '23 IF Task(%T181).tog THEN stoptask %T181 MM_Bomi_Off END IF mPlay Snar.channel, 74, 127 CASE 1992 '19 IF Task(%T167).tog THEN stoptask %T167 MM_Korn_Off END IF mPlay Snar.channel, 73, 127 CASE 1994 '17 IF Task(%T173).tog THEN stoptask %T173 MM_Xy_Off END IF mPlay Snar.channel, 74, 127 CASE 1998 '13 IF Task(%T191).tog THEN stoptask %T191 MM_Puff_Off END IF mPlay Snar.channel, 73, 127 CASE 2001 '11 IF Task(%T197).tog THEN stoptask %T197 'MM_xx_Off END IF mPlay Snar.channel, 74, 127 CASE 2007 '7 IF Task(%T199).tog THEN stoptask %T199 'MM_xx_Off END IF mPlay Snar.channel, 73, 127 CASE 2009 '5 mPlay Springers.channel, 36, 127 mPlay Snar.channel, 74, 127 CASE 2010 '3 mPlay Springers.channel, 37, 127 mPlay Snar.channel, 73, 127 CASE 2011 '2 mPlay Springers.channel, 38, 127 mPlay Snar.channel, 74, 127 CASE 2012 '1 mPlay Springers.channel, 39, 127 mPlay Snar.channel, 73, 127 CASE 2013 mPlay Llor.channel,39 , 127 mPlay Snar.channel, 74, 127 stoptask %T2013 END SELECT END SUB SUB T2013_Stop () stoptask %T157 stoptask %T163 stoptask %T167 stoptask %T173 stoptask %T179 stoptask %T181 stoptask %T191 stoptask %T193 stoptask %T197 stoptask %T199 stoptask %T211 ' stoptask %T661 ' stoptask %T673 ' stoptask %T677 MM_AllOff '%MM_Notes END SUB '*************** code for 'Prime 2011' *********************************************** ' not modified in 2013! ' out of timers problem (Microsoft...) SUB T2011_WBS () 'wait before start code... STATIC cnt AS LONG IF ISFALSE task(%T2011_WBS).tog THEN RESET cnt MM_HarmO_Off MM_Harma_Off Task(%T2011_WBS).tog = %True END IF INCR cnt IF cnt > 15 THEN Stoptask %T2011_WBS END SUB SUB T2011_WBS_Stop () StartTask %T2011 END SUB SUB T2011 () 'this is the metatask. 'this is too much tasks with the classical timers. result: after trying to start too many tasks, 'this task is never called again and prim.tik stays 1.. 'seems to work with the timerqeuetimers. '09.01.2011: first rehearsal with Dominica. '10.01.2011: ending added. '2013: Reoccuring timer problems... LOCAL i, modcnt AS DWORD LOCAL n AS SINGLE STATIC omodcnt, noot AS LONG STATIC trumpflag, humanolaflag, krumflag, pianoflag AS LONG 'logfile FUNCNAME$ IF ISFALSE Task(%T2011).tog THEN IF ISFALSE Task(%Gesture_Analyser).tog THEN starttask %Gesture_Analyser RESET Prim MM_Trump_On MM_Humanola_On MM_Krum_On Controller Qt.channel, 7 , 8 Qt.ctrl(7) = 8 'MM_HarmO_Off 'MM_Harma_Off FOR i = %T157 TO %T193 '%T677 IF ISFALSE task(i).tog THEN starttask i 'SLEEP 100 NEXT i IF ISFALSE Task(%T211).tog THEN starttask %T211 Task(%T2011).tog = %True END IF Prim.prop = Prim.tik / 2011! '0-1, float Prim.angle = Prim.prop * Pi 'in rad. , semicircle modcnt = INT(Prim.prop * 12) '0-11, discrete IF modcnt <> omodcnt THEN Prim.tc = (Prim.tc + 7) MOD 12 'we gaan doorheen de gehele kwintencirkel omodcnt = modcnt logfile STR$(Prim.tc) 'debug ok now 07.01.2011 END IF Prim.spekfak = 0.5 + Prim.prop '0.5 - 1.5 INCR Prim.tik 'we can insert chordal effects everytime we cross a prime component count: 'following lines are the note-off's for the chords. IF trumpflag THEN Instrumplay Trump : RESET Trumpflag IF humanolaflag THEN Instrumplay Humanola : RESET humanolaflag IF krumflag THEN Instrumplay Krum : RESET Krumflag IF pianoflag THEN Instrumplay Piano : RESET Pianoflag IF prim.tik > 150 THEN IF ISFALSE prim.tik MOD 157 THEN '12 times i = 1 noot = 24 + Prim.tc DO n = Spectralnote (noot,i, Prim.spekfak, %ExpSpec) INCR i IF n < Trump.hightes THEN addNote2Har trump.har(1), n, 127 ELSE EXIT DO END IF LOOP Instrumplay Trump Trumpflag = %True END IF IF ISFALSE prim.tik MOD 163 THEN '12 times END IF IF ISFALSE prim.tik MOD 167 THEN '12 times END IF IF ISFALSE prim.tik MOD 173 THEN '11 times ' n = SpectralnoteF (noot, gesture.smooth(0) * 36, Prim.spekfak, %ExpSpec) ' addNote2QHar qt.qhar(1), n, @pDoppler.xa * 127 END IF IF ISFALSE prim.tik MOD 179 THEN i = 1 noot = 24 + Prim.tc DO n = Spectralnote (noot,i, Prim.spekfak, %ExpSpec) INCR i IF n <= Humanola.hightes THEN addNote2Har Humanola.har(1), n, 127 ELSE EXIT DO END IF LOOP Instrumplay humanola humanolaflag = %True '11 times END IF IF ISFALSE prim.tik MOD 181 THEN '11 times END IF IF ISFALSE prim.tik MOD 191 THEN '10 times END IF IF ISFALSE prim.tik MOD 193 THEN '10 times END IF IF ISFALSE prim.tik MOD 197 THEN '10 times END IF IF ISFALSE prim.tik MOD 199 THEN '10 times i = 1 noot = 24 + prim.tc DO n = Spectralnote (noot,i, Prim.spekfak, %ExpSpec) INCR i IF n < Krum.hightes THEN addNote2Har Krum.har(1), n, 127 ELSE EXIT DO END IF LOOP Instrumplay Krum Krumflag = %True END IF IF ISFALSE prim.tik MOD 661 THEN '3 times i = 1 noot = 24 + prim.tc DO n = Spectralnote (noot,i, Prim.spekfak, %ExpSpec) INCR i IF n =< Piano.hightes THEN addNote2Har Piano.har(1), n, 85 ELSE EXIT DO END IF LOOP Instrumplay Piano Pianoflag = %True END IF IF ISFALSE prim.tik MOD 673 THEN '2 times END IF IF ISFALSE prim.tik MOD 677 THEN '2 times i = 1 noot = 60 + prim.tc DO n = SpectralnoteF (noot, i , Prim.spekfak, %ExpSpec) INCR i IF n <= Tubi.Hightes THEN addNote2QHar tubi.qhar(1), n, 127 ELSE EXIT DO END IF LOOP QInstrumplay Tubi END IF END IF 'scoring: SELECT CASE prim.tik 'opbouw ... CASE 167 'dit is op de eerste modulatie 'if isfalse Task()... mPlay Vibi.channel, 60 + Prim.tc, 84 'de enige vibi noot in het stuk... CASE 1005 ' dit is halfweg, hier is prim.spekfak = 1 , platonisch spektrum. IF ISFALSE Task(%T197).tog THEN starttask %T197 'collision op klokken CASE 1513 IF ISFALSE Task(%T199).tog THEN starttask %T199 'theacol op toypi - lijkt niks te doen 'afbouw voor ending: CASE 1844 'dit is op de laatste modulatie. IF ISFALSE Task(%Prime_End).tog THEN starttask %Prime_End END IF CASE 1968 '43 mPlay Snar.channel, 73, 127 CASE 1970 '41 IF Task(%T179).tog THEN stoptask %T179 MM_Bono_Off END IF mPlay Snar.channel, 74, 127 CASE 1974 '37 IF Task(%T157).tog THEN 'qt stoptask %T157 MM_Qt_Off END IF mPlay Snar.channel, 73, 127 CASE 1980 '31 IF Task(%T163).tog THEN stoptask %T163 MM_Ob_Off END IF mPlay Snar.channel, 74, 127 CASE 1982 '29 IF Task(%T193).tog THEN stoptask %T193 MM_Piano_Off END IF mPlay Snar.channel, 73, 127 CASE 1988 '23 IF Task(%T181).tog THEN stoptask %T181 MM_Bomi_Off END IF mPlay Snar.channel, 74, 127 CASE 1992 '19 IF Task(%T167).tog THEN stoptask %T167 MM_Korn_Off END IF mPlay Snar.channel, 73, 127 CASE 1994 '17 IF Task(%T173).tog THEN stoptask %T173 MM_Xy_Off END IF mPlay Snar.channel, 74, 127 CASE 1998 '13 IF Task(%T191).tog THEN stoptask %T191 MM_Puff_Off END IF mPlay Snar.channel, 73, 127 CASE 2000 '11 IF Task(%T197).tog THEN stoptask %T197 'MM_xx_Off END IF mPlay Snar.channel, 74, 127 CASE 2004 '7 IF Task(%T199).tog THEN stoptask %T199 'MM_xx_Off END IF mPlay Snar.channel, 73, 127 CASE 2006 '5 mPlay Springers.channel, 36, 127 mPlay Snar.channel, 74, 127 CASE 2008 '3 mPlay Springers.channel, 37, 127 mPlay Snar.channel, 73, 127 CASE 2009 '2 mPlay Springers.channel, 38, 127 mPlay Snar.channel, 74, 127 CASE 2010 '1 mPlay Springers.channel, 39, 127 mPlay Snar.channel, 73, 127 CASE 2011 mPlay Llor.channel,39 , 127 mPlay Snar.channel, 74, 127 ' stoptask %T157 ' stoptask %T163 ' stoptask %T167 ' stoptask %T173 ' stoptask %T179 ' stoptask %T181 ' stoptask %T191 ' stoptask %T193 ' stoptask %T197 ' stoptask %T199 ' stoptask %T211 ' ' stoptask %T661 ' stoptask %T673 ' stoptask %T677 stoptask %T2011 END SELECT END SUB SUB T2011_Stop () stoptask %T157 stoptask %T163 stoptask %T167 stoptask %T173 stoptask %T179 stoptask %T181 stoptask %T191 stoptask %T193 stoptask %T197 stoptask %T199 stoptask %T211 stoptask %T661 stoptask %T673 stoptask %T677 MM_AllOff '%MM_Notes END SUB SUB T157 () 'Qt - smooth property LOCAL angle, n AS SINGLE LOCAL wind AS INTEGER STATIC noot, tog, lite AS INTEGER IF ISFALSE Task(%T157).tog THEN MM_Qt_On Task(%T157).tog = %True END IF angle = (prim.tik MOD 157) * Pi / 157! 'traject 0- Pi noot = 36 + Prim.tc 'interaktieve modulatie: IF gesture.smooth_dur(3) THEN ' spectral notes!!! n = SpectralnoteF (noot, gesture.smooth(0) * 36, Prim.spekfak, %ExpSpec) addNote2QHar qt.qhar(1), n, @pDoppler.xa * 127 n = SpectralnoteF (noot, gesture.smooth(1) * 36, Prim.spekfak, %ExpSpec) addNote2QHar qt.qhar(1), n, @pDoppler.ya * 127 n = SpectralnoteF (noot, gesture.smooth(2) * 36, Prim.spekfak, %ExpSpec) addNote2QHar qt.qhar(1), n, @pDoppler.za * 127 QInstrumPlay Qt tog = %True ELSE IF tog THEN Qinstrumplay Qt tog = %False END IF END IF 'windmodulatie in funktie van sin^2(angle) wind = 10 + (((SIN(angle))^2) * 90.0) ' logfile "ängle:"+ STR$(angle) + "- wind:" + STR$(wind) ók now IF wind <> qt.ctrl(7) THEN Controller Qt.channel, 7, wind qt.ctrl(7) = wind END IF IF wind > (%MM_Qt_Motor - 15) THEN IF ISFALSE lite THEN MM_Qt_On %MM_Lights lite = %True END IF ELSE IF lite THEN MM_Qt_Off %MM_Lights RESET lite END IF END IF END SUB SUB T163 () 'Ob - fluency property 'to do: use flue_val() for ob position! ' for sense: Klar added, alternating with Ob. Also implemented for Prime. ' 09.02.2013: debug session. Some changes affecting both Prime and Sense. LOCAL angle AS SINGLE LOCAL noot, velo AS INTEGER STATIC n,nk, sens AS SINGLE STATIC tog,ktog, vol, lite, klite, cnt, ocnt, smo, smk AS INTEGER IF ISFALSE Task(%T163).tog THEN smo = 36 ' for autoregulation of range smk = 36 MM_Ob_On MM_Klar_On 'IF prim.piece = %sense THEN MM_Klar_On RESET cnt, ocnt sens = 0.3 '0.625 in rob3, but that seems too much Task(%T163).tog = %True END IF angle = (prim.tik MOD 163) * Pi / 163! 'traject 0- Pi cnt = (prim.tik \ 163) MOD 2 IF cnt <> ocnt THEN MM_Ob_Off %MM_Notes OR %MM_Lights MM_Klar_Off %MM_Notes OR %MM_Lights ocnt = cnt END IF ' logfile FUNCNAME$ + STR$(angle) + STR$(noot) + STR$(gesture.flue(3)) 'interaktieve modulatie: IF gesture.flue(3) > sens THEN' gesture.flue_dur(3) THEN 'flue_dur is always 0 SELECT CASE cnt CASE 0 noot = 48 + Prim.tc '10.02.2013, was 60+ op 10.01.2011 n = SpectralnoteF (noot, MAX(gesture.flue(0), gesture.flue(1), gesture.flue(2)) * smo, Prim.spekfak, %ExpSpec) IF n > Ob.hightes THEN logfile "Ob range T163: " & STR$(smo) ' loopt van 36 tot 9 nu. DECR smo RESET tog ELSE IF n >= Ob.lowtes THEN NoteFOn Ob, n,MAX(@pDoppler.xa * 127, @pDoppler.ya * 127, @pDoppler.za * 127) tog = %True ELSE RESET tog ' risk for stuck notes! END IF END IF CASE 1 noot = 24 + Prim.tc n = SpectralnoteF (noot, MAX(gesture.flue(0), gesture.flue(1), gesture.flue(2)) * smk, Prim.spekfak, %ExpSpec) IF n > Klar.hightes THEN logfile "Klar range T163: " & STR$(smk) ' loopt van 36 tot 24 DECR smk RESET tog ELSE ' dynamics reduced for extreme high notes: IF n >= Klar.lowtes THEN velo = (127 - n)/2 ' loopt van (84 tot 21) / 2 NoteFOn Klar, n, velo * MAX(@pDoppler.xa, @pDoppler.ya, @pDoppler.za) tog = %True ELSE RESET tog END IF END IF END SELECT ELSE IF tog THEN SELECT CASE cnt CASE 0 NoteFOff Ob, n ' - seems not to work well on the highest note(s); 02.02.2013 CASE 1 NoteFOff Klar, n END SELECT RESET tog END IF END IF SELECT CASE cnt CASE 0 'amplitude modulatie in funktie van sin(angle) vol = 27 + (SIN(angle) * 100!) IF vol <> ob.ctrl(7) THEN Controller Ob.channel, 7, vol Ob.ctrl(7) = vol END IF IF vol > 70 THEN IF ISFALSE lite THEN MM_Ob_On %MM_Lights lite = %True END IF ELSE IF lite THEN MM_Ob_Off %MM_Lights RESET lite END IF END IF CASE 1 'amplitude modulatie in funktie van sin(angle) vol = 12 + (SIN(angle) * 75!) IF vol <> klar.ctrl(7) THEN Controller Klar.channel, 7, vol Klar.ctrl(7) = vol END IF IF vol > 48 THEN IF ISFALSE klite THEN MM_Klar_On %MM_Lights klite = %True END IF ELSE IF klite THEN MM_Klar_Off %MM_Lights RESET klite END IF END IF END SELECT END SUB SUB T167 () 'Korn - fixspeed property 'to do: use something for korn position! (start PIR sensors?) ' we may want to alternate here with ' 09.02.2013: Fa added, alternating with Korn LOCAL angle,n AS SINGLE LOCAL velo, cnt AS INTEGER STATIC noot, tog, vol, flite, klite, ocnt, sfk, sff AS INTEGER STATIC sens AS SINGLE IF ISFALSE Task(%T167).tog THEN MM_Korn_On IF prim.piece = %prime THEN sens = .5 'sens taken from RoboBomi_To ELSE sens = .72 ' may even be larger. END IF MM_Fa_On sfk = 24 ' for autoregulation sff = 36 RESET cnt, ocnt Task(%T167).tog = %True END IF angle = (prim.tik MOD 167) * Pi / 167! 'traject 0- Pi cnt = (prim.tik \ 167) MOD 2 IF cnt <> ocnt THEN MM_Korn_Off %MM_Notes OR %MM_Lights MM_Fa_Off %MM_Notes OR %MM_Lights ocnt = cnt END IF ' logfile "fixspeed:" + STR$(gesture.fixspeed(3)) + "/dur"+ STR$(gesture.fixspeed_dur(3)) + "/ val:"+ STR$(gesture.fixspeed_val(3)) 'interaktieve modulatie: IF gesture.fixspeed(3) > sens THEN 'gesture.fixspeed_dur(3) THEN '_dur(3) is always 0 .. 'spectral notes!!! SELECT CASE cnt CASE 0 noot = 48 + Prim.tc n = SpectralnoteF (noot, sfk * MAX(gesture.fixspeed(0), gesture.fixspeed(1), gesture.fixspeed(2)), Prim.spekfak, %ExpSpec) IF n > Korn.hightes THEN MM_Korn_Off %MM_Notes RESET tog DECR sfk ELSE IF n >= Korn.lowtes THEN NoteFOn Korn, n,MAX(@pDoppler.xa * 127, @pDoppler.ya * 127, @pDoppler.za * 127) tog = %True END IF END IF CASE 1 noot = 36 + Prim.tc n = SpectralnoteF (noot, sff * MAX(gesture.fixspeed(0), gesture.fixspeed(1), gesture.fixspeed(2)), Prim.spekfak, %ExpSpec) IF n > Fa.Hightes THEN MM_Fa_Off %MM_Notes RESET tog DECR sff ELSE IF n>= Fa.lowtes THEN velo = (127 - n)/3 ' velo goes down with pitch range: (93 to 36)/3 NoteFOn Fa, n, velo * MAX(@pDoppler.xa, @pDoppler.ya, @pDoppler.za) tog = %True END IF END IF END SELECT ELSE IF tog THEN SELECT CASE cnt CASE 0 'NoteFOff Korn, n ' seems shaky... MM_Korn_Off %MM_Notes ' we still get stuck notes... CASE 1 'NoteFOff Fa, n MM_Fa_Off %MM_Notes END SELECT RESET tog END IF END IF 'amplitude modulatie in funktie van sin(angle) SELECT CASE cnt CASE 0 vol = 27 + (SIN(angle) * 100!) IF vol <> Korn.ctrl(7) THEN Controller Korn.channel, 7, vol Korn.ctrl(7) = vol END IF IF vol > 96 THEN IF ISFALSE klite THEN MM_Korn_On %MM_Lights klite = %True END IF ELSE IF klite THEN MM_Korn_Off %MM_Lights RESET klite END IF END IF CASE 1 vol = 6 + ((SIN(angle))^2 * 40!) ' if still too loud, use sin^2 IF vol <> Fa.ctrl(7) THEN Controller Fa.channel, 7, vol Fa.ctrl(7) = vol END IF IF vol > 25 THEN IF ISFALSE flite THEN MM_Fa_On %MM_Lights flite = %True END IF ELSE IF flite THEN MM_Fa_Off %MM_Lights RESET flite END IF END IF END SELECT END SUB SUB T173 () 'Xy - edgy property 'working fine. LOCAL angle, n AS SINGLE LOCAL wind AS INTEGER STATIC noot, tog, lite AS INTEGER IF ISFALSE Task(%T173).tog THEN MM_Xy_On Task(%T173).tog = %True END IF angle = (prim.tik MOD 173) * Pi / 157! 'traject 0- Pi noot = 48 + Prim.tc 'rechecked 09.01.2010 o.k. 'interaktieve modulatie: IF gesture.edgy_dur(3) THEN ' spectral notes!!! n = SpectralnoteF (noot, gesture.edgy(0) * 36, Prim.spekfak, %ExpSpec) addNote2QHar xy.qhar(1), n, @pDoppler.xa * 127 n = SpectralnoteF (noot, gesture.edgy(1) * 36, Prim.spekfak, %ExpSpec) addNote2QHar xy.qhar(1), n, @pDoppler.ya * 127 n = SpectralnoteF (noot, gesture.edgy(2) * 36, Prim.spekfak, %ExpSpec) addNote2QHar xy.qhar(1), n, @pDoppler.za * 127 QInstrumPlay Xy IF ISFALSE tog THEN MM_Xy_On %MM_Lights tog = %True END IF ELSE IF tog THEN ' Qinstrumplay Xy - note off not required. MM_Xy_Off %MM_Lights tog = %False END IF END IF END SUB SUB T179 () 'Bono - speedup property '08.01.2010: Musically o.k. 'here we may want to alternate autosax and Bono 'bono-autosax alternation added 16.01.2011, we could go further and add in Heli as well. '08.02.2013: Heli added. (for Namuda Study #31, Sense) LOCAL angle AS SINGLE LOCAL cnt AS INTEGER STATIC n AS SINGLE STATIC noot, tog, vol, lite, ocnt AS INTEGER STATIC sens AS SINGLE IF ISFALSE Task(%T179).tog THEN RESET ocnt MM_Bono_On MM_Autosax_On MM_Heli_On Controller Autosax.channel, 7, 125 sens = 18 'in Hz Task(%T179).tog = %True END IF angle = (prim.tik MOD 179) * Pi / 179! 'traject 0- Pi cnt = (prim.tik \ 179) MOD 3 '0 - 1 - 2 alternate for bono / autosax / heli IF cnt <> ocnt THEN SELECT CASE ocnt CASE %False NoteFOff Bono, n MM_Bono_Off %MM_Notes OR %MM_Lights CASE 1 NoteFOff Autosax, n MM_Autosax_Off %MM_Notes OR %MM_Lights CASE 2 NoteFOff Heli, n MM_Heli_Off %MM_Notes OR %MM_Lights END SELECT ocnt = cnt END IF ' noot = (bono.lowtes MOD 12) + Prim.tc '= Prim.tc ' noot = ((1 + (bono.lowtes \ 12)) * 12) + (noot MOD 12) 'basisnoot = Prim.tc + 12 noot = Prim.tc + 12 ' logfile FUNCNAME$ + STR$(angle) + STR$(noot) + STR$(gesture.flue(3)) 'interaktieve modulatie: IF gesture.speedup(3) > gesture.slowdown(3) + sens THEN 'spectral notes!!! n = SpectralnoteF (noot, MIN(gesture.speedup_val(3)/ 5, 24), Prim.spekfak, %ExpSpec) SELECT CASE cnt CASE %False NoteFOn Bono, n, MIN(gesture.speedup_val(3), 127) ' * 2 may be way too much CASE 1 NoteFOn Autosax, n, MIN(gesture.speedup_val(3), 127) CASE 2 NoteFOn Heli, n, MIN(gesture.speedup_val(3), 127) END SELECT tog = %True ELSE IF tog THEN SELECT CASE cnt CASE %False NoteFOff Bono, n CASE 1 NoteFOff Autosax, n CASE 2 NoteFOff Heli, n END SELECT tog = %False END IF END IF 'amplitude modulatie in funktie van sin(angle) vol = 27 + (SIN(angle) * 100!) ' IF vol <> bono.ctrl(7) THEN 'geeft ff throughout... ' Controller bono.channel, 7, vol ' bono.ctrl(7) = vol ' END IF 'IF ISFALSE cnt THEN SELECT CASE cnt CASE %False IF vol <> bono.ctrl(17) THEN Controller bono.channel, 17, vol bono.ctrl(17) = vol END IF IF vol > 78 THEN IF ISFALSE lite THEN MM_Bono_On %MM_Lights lite = %True END IF ELSE IF lite THEN MM_Bono_Off %MM_Lights RESET lite END IF END IF CASE 1 IF vol <> autosax.ctrl(17) THEN Controller autosax.channel, 17, vol autosax.ctrl(17) = vol END IF CASE 2 IF vol <> heli.ctrl(17) THEN Controller heli.channel, 17, vol heli.ctrl(17) = vol END IF IF vol > 78 THEN IF ISFALSE lite THEN MM_Heli_On %MM_Lights lite = %True END IF ELSE IF lite THEN MM_Heli_Off %MM_Lights RESET lite END IF END IF END SELECT END SUB SUB T181 () 'Bomi - slowdown property '08.01.2010: Failure on first try. Wind works, no notes. '09.01.2010: now it works. LOCAL angle, n AS SINGLE LOCAL wind AS INTEGER STATIC noot, tog, lite, sens AS INTEGER IF ISFALSE Task(%T181).tog THEN MM_Bomi_On sens = 12 Task(%T181).tog = %True END IF angle = (prim.tik MOD 181) * Pi / 181! 'traject 0- Pi noot = 36 + Prim.tc 'interaktieve modulatie: 'IF gesture.slowdown_dur(3) THEN - dit werkt niet!!! IF gesture.slowdown(3) > sens AND gesture.slowdown(3) > gesture.speedup(3) THEN ' spectral notes!!! n = Spectralnote (noot, MIN(gesture.slowdown(0)/ 5, 20), Prim.spekfak, %ExpSpec) 'logfile "Bomi: " + STR$(n) 'for debug addNote2Har Bomi.har(1), n, @pDoppler.xa * 127 n = Spectralnote (noot, MIN(gesture.slowdown(1)/5,20), Prim.spekfak, %ExpSpec) addNote2Har Bomi.har(1), n, @pDoppler.ya * 127 n = Spectralnote (noot, MIN(gesture.slowdown(2)/5,20), Prim.spekfak, %ExpSpec) addNote2Har Bomi.har(1), n, @pDoppler.za * 127 InstrumPlay Bomi tog = %True ELSE IF tog THEN instrumplay Bomi tog = %False END IF END IF 'windmodulatie in funktie van sin(angle) wind = 18 + (((SIN(angle))^2) * 100.0) ' logfile "ängle:"+ STR$(angle) + "- wind:" + STR$(wind) ók now IF wind <> bomi.ctrl(7) THEN Controller Bomi.channel, 7, wind Bomi.ctrl(7) = wind END IF 'lights: IF wind > %MM_Bomi_Motor THEN IF ISFALSE lite THEN MM_Bomi_On %MM_Lights lite = %True END IF ELSE IF lite THEN MM_Bomi_Off %MM_Lights RESET lite END IF END IF END SUB SUB T191 () 'implode @ Puff 'failed on first tests 08.01.2010 'now works - 09.01.2011 LOCAL angle, n AS SINGLE LOCAL wind AS INTEGER STATIC noot, tog, lite AS INTEGER IF ISFALSE Task(%T191).tog THEN MM_Puff_On Task(%T191).tog = %True END IF angle = (prim.tik MOD 191) * Pi / 191! 'traject 0- Pi noot = 36 + Prim.tc 'velo modulatie in funktie van sin(angle) wind = 1 + (SIN(angle) * 63.0) 'interaktieve modulatie: IF gesture.implo_dur(0) OR gesture.implo_dur(1) OR gesture.implo_dur(2) THEN ' spectral notes!!! n = SpectralnoteF (noot, gesture.implo(0) * 36, Prim.spekfak, %ExpSpec) addNote2QHar puff.qhar(1), n, MIN(@pDoppler.xa * 63, wind) n = SpectralnoteF (noot, gesture.implo(1) * 36, Prim.spekfak, %ExpSpec) addNote2QHar puff.qhar(1), n, MIN( @pDoppler.ya * 63, wind) n = SpectralnoteF (noot, gesture.implo(2) * 36, Prim.spekfak, %ExpSpec) addNote2QHar puff.qhar(1), n, MIN( @pDoppler.za * 63, wind) QInstrumPlay Puff 'has bug: also switches lights!!! tog = %True ELSE IF tog THEN 'Qinstrumplay puff - noteoff not required. tog = %False END IF END IF IF wind > 48 THEN IF ISFALSE lite THEN MM_Puff_On %MM_Lights lite = %True END IF ELSE IF lite THEN MM_Puff_Off %MM_Lights RESET lite END IF END IF END SUB SUB T193 () 'explode @ piano LOCAL angle, n AS SINGLE LOCAL velo AS INTEGER STATIC noot, tog, lite AS INTEGER IF ISFALSE Task(%T193).tog THEN MM_Piano_On Task(%T193).tog = %True END IF angle = (prim.tik MOD 193) * Pi / 193! 'traject 0- Pi noot = 24 + Prim.tc 'velo modulatie in funktie van sin(angle) velo = SIN(angle) * 63.0 'interaktieve modulatie: IF gesture.explo_dur(0) OR gesture.explo_dur(1) OR gesture.explo_dur(2) THEN ' spectral notes!!! n = Spectralnote (noot, gesture.explo(0) * 36, Prim.spekfak, %ExpSpec) addNote2Har piano.har(1), n, MIN(@pDoppler.xa * 63, velo) n = Spectralnote (noot, gesture.explo(1) * 36, Prim.spekfak, %ExpSpec) addNote2Har piano.har(1), n, MIN( @pDoppler.ya * 63, velo) n = Spectralnote (noot, gesture.explo(2) * 36, Prim.spekfak, %ExpSpec) addNote2Har piano.har(1), n, MIN( @pDoppler.za * 63, velo) InstrumPlay Piano tog = %True ELSE IF tog THEN instrumplay piano ' - noteoff required. tog = %False END IF END IF IF velo > 52 THEN IF ISFALSE lite THEN MM_Piano_On %MM_Lights lite = %True END IF ELSE IF lite THEN MM_Piano_Off %MM_Lights RESET lite END IF END IF END SUB SUB T197 () 'collision @ klokken ' belly - vacca - vitello - should also do Llor LOCAL noot, vel, i AS INTEGER LOCAL n, angle, velfak AS SINGLE LOCAL RESo AS LONG STATIC sens AS SINGLE STATIC lite AS LONG IF ISFALSE Task(%T197).tog THEN MM_Belly_On MM_Vitello_On sens = 1.4 Task(%T197).tog = %True END IF angle = (prim.tik MOD 197) * Pi / 197! 'traject 0- Pi velfak = 127 * SIN(angle) IF Gesture.collision(0) > sens THEN 'take vitello here noot = 96 - Gesture.collision(0) * 8 n = MatchSpecNote(noot, 36+ Prim.tc, prim.spekfak) ' logfile "vitello check note"+ STR$(noot) vel = MIN(velfak, 15 + Gesture.impact(0)) RESo = PlayVitello(n, vel, 30) IF ISFALSE RESo THEN FOR i = 1 TO 10 'try other notes in spectrum RESo = PlayVitello (Matchspecnote(noot + i, 36 + Prim.tc, prim.spekfak),vel, 50 ) IF RESo THEN EXIT FOR RESo = PlayVitello (Matchspecnote(noot - i, 36 + Prim.tc, prim.spekfak), vel, 50) NEXT END IF ' logfile "reso:"+ STR$(reso) MM_Vitello_On %MM_Lights ELSE MM_Vitello_Off %MM_Lights END IF IF Gesture.collision(1) > sens THEN noot = 96 - Gesture.collision(1) * 8 noot = MatchSpecNote(noot, 36 + prim.tc, prim.spekfak) 'logfile "vacca check note"+ STR$(noot) vel = MIN(velfak, 15 + Gesture.impact(1)) RESo = PlayVacca (noot, vel, 30 ) IF ISFALSE RESo THEN FOR i = 1 TO 12 'try other notes in spectrum RESo = PlayVacca (Matchspecnote(noot + i, 36 + Prim.tc, prim.spekfak), vel, 50) IF RESo THEN EXIT FOR RESo = PlayVacca (Matchspecnote(noot - i, 36 + Prim.tc, prim.spekfak), vel, 50) NEXT END IF ' logfile "reso:"+ STR$(reso) ELSE ' mPlay Vacca.channel, MIN(48 + ((Gesture.collision(1)) *8),88), MIN(Gesture.impact(1) * 127, 127) END IF IF Gesture.collision(2) > sens THEN 'belly : 68-102 ' hoe groter de collision hoe lager de klok noot = 96 - Gesture.collision(2) * 8 noot = MatchSpecNote(noot, 36 + Prim.tc, prim.spekfak) vel = MIN(velfak, 15 + Gesture.impact(2)) RESo = PlayBelly(noot, vel, 30) IF ISFALSE RESo THEN FOR i = 1 TO 12 'try other notes in spectrum) RESo = PlayBelly (Matchspecnote(noot + i, 36+prim.tc, prim.spekfak), vel, 50) IF RESo THEN EXIT FOR RESo = PlayBelly (Matchspecnote(noot - i, 36+prim.tc, prim.spekfak), vel, 50 ) NEXT END IF 'logfile "reso:"+ STR$(reso) ' mPlay Belly.channel,MAX( 102 - (Gesture.collision(2) * 8), 68) , MIN(Gesture.impact(2) * 150, 127) 'new ' mPlay Psch.channel, MIN(72 + ((Gesture.collision(2))*3),83), MIN(Gesture.impact(2) * 160, 127) MM_Psch_On %MM_Lights ELSE MM_Psch_Off %MM_Lights END IF IF velfak > 96 THEN IF ISFALSE lite THEN MM_Belly_On %MM_Lights lite = %True END IF ELSE IF lite THEN MM_Belly_Off %MM_Lights RESET lite END IF END IF END SUB SUB T199 () 'theatrical collision @ tubi, vibi or toypi '09.02.2013: coding improved. LOCAL angle, n AS SINGLE LOCAL velo, noot AS INTEGER STATIC lite, tog,sf AS INTEGER IF ISFALSE Task(%T199).tog THEN 'sens = 1 sf = 36 Task(%T199).tog = %True END IF SELECT CASE prim.piece CASE %Prime angle = (prim.tik MOD 199) * Pi / 199! 'traject 0- Pi CASE %Sense angle = (prim.tik MOD 149) * Pi / 149! 'traject 0- Pi CASE ELSE EXIT SUB END SELECT velo = 64 * SIN(angle) 'nb: this is below 0 half of the time.. ??? dat is onmogelijk. ' if sin(angle) < 0 then msgbox "BIG ERROR" : exit sub - o.k. noot = 60 + Prim.tc '36 + Prim.tc 'velo modulatie in funktie van sin(angle) 'interaktieve modulatie: 'xof question: are you sure .theacol(3) ever happens? ' answer: yes, but not so often it seems. ' that combined with the angle construction causing velo to be < 0 half of the time might explain why it is not heard? ' also, when theacol(3) is true, the actual collision often only happens in one vector,, resulting in the notes of the other vectors ' ending up to be the basenote - below the range of toypi thus.. ' logfile "theacol(3):" + STR$(gesture.theacol(3)) ' IF gesture.theacol(3) THEN ' spectral notes!!! IF gesture.theacol(0) THEN n = Spectralnote (noot, gesture.impact(0) * sf, Prim.spekfak, %ExpSpec) IF n > Toypi.hightes THEN DECR sf ELSE ' logfile "toypi:"+ str$(n) addNote2Har toypi.har(1), n, MIN(@pDoppler.xa * 63, velo) END IF END IF IF gesture.theacol(1) THEN n = Spectralnote (noot, gesture.impact(1) * sf, Prim.spekfak, %ExpSpec) IF n > Toypi.hightes THEN DECR sf ELSE ' logfile "toypi:"+ STR$(n) addNote2Har toypi.har(1), n, MIN( @pDoppler.ya * 63, velo) END IF END IF IF gesture.theacol(2) THEN n = Spectralnote (noot, gesture.impact(2) * sf, Prim.spekfak, %ExpSpec) ' logfile "toypi:"+ STR$(n) IF n > Toypi.hightes THEN DECR sf ELSE addNote2Har toypi.har(1), n, MIN( @pDoppler.za * 63, velo) END IF END IF InstrumPlay toypi ' tog = %True ' ELSE ' IF tog THEN ' 'instrumplay toypi ' - noteoff not required. ' tog = %False ' END IF ' END IF 'lites IF velo > 54 THEN IF ISFALSE lite THEN MM_Toypi_On %MM_Lights lite = %True END IF ELSE IF lite THEN MM_Toypi_Off %MM_Lights RESET lite END IF END IF END SUB SUB T211 () 'freeze @ Bourdonola 'add So for Sense. LOCAL angle, n AS SINGLE LOCAL wind AS INTEGER STATIC noot, tog, lite AS INTEGER IF ISFALSE Task(%T211).tog THEN MM_Bourdonola_On IF prim.piece = %Sense THEN MM_So_On Task(%T211).tog = %True END IF SELECT CASE prim.piece CASE %Prime angle = (prim.tik MOD 211) * Pi / 211! 'traject 0- Pi CASE %Sense angle = (prim.tik MOD 263) * Pi / 263! 'traject 0- Pi CASE ELSE EXIT SUB END SELECT noot = 36 + Prim.tc 'grondtoon 'interaktieve modulatie: IF (gesture.freeze(0)) OR (gesture.freeze(1)) OR (gesture.freeze(2)) THEN 'it should happen frequently ' spectral note fundamental addNote2Har Bourdonola.har(1), noot,127 InstrumPlay Bourdonola IF prim.piece = %sense THEN mPlay So.channel, noot -12, @pDoppler.xa * 127 END IF tog = %True ELSE IF tog THEN instrumplay Bourdonola IF prim.piece = %Sense THEN mPlay So.channel, noot-12, %False tog = %False END IF END IF 'windmodulatie in funktie van sin^2(angle) wind = 18 + (((SIN(angle))^2) * 100.0) ' logfile "angle:"+ STR$(angle) + "- wind:" + STR$(wind) ók now IF wind <> Bourdonola.ctrl(1) THEN Controller Bourdonola.channel, 1, wind Bourdonola.ctrl(1) = wind END IF IF wind > %MM_Bourdonola_Motor THEN IF ISFALSE lite THEN MM_Bourdonola_On %MM_Lights MM_So_On %MM_Lights lite = %True END IF ELSE IF lite THEN MM_Bourdonola_Off %MM_Lights MM_So_Off %MM_Lights RESET lite END IF END IF END SUB '2011 = 661 + 673 + 677: '2013 = 631 + 739 + 643 SUB T661 () 'to do - not used in prime LOCAL angle AS SINGLE IF ISFALSE Task(%T661).tog THEN Task(%T661).tog = %True END IF SELECT CASE prim.piece CASE %Prime angle = (prim.tik MOD 661) * Pi / 661! 'traject 0- Pi CASE %Sense angle = (prim.tik MOD 631) * Pi / 631! 'traject 0- Pi CASE ELSE EXIT SUB END SELECT END SUB SUB T673 () 'to do - not used in prime LOCAL angle AS SINGLE IF ISFALSE Task(%T673).tog THEN Task(%T673).tog = %True END IF SELECT CASE prim.piece CASE %Prime angle = (prim.tik MOD 673) * Pi / 673! 'traject 0- Pi CASE %Sense angle = (prim.tik MOD 739) * Pi / 739! 'traject 0- Pi CASE ELSE EXIT SUB END SELECT END SUB SUB T677 () 'to do - not used in prime LOCAL angle AS SINGLE IF ISFALSE Task(%T677).tog THEN Task(%T677).tog = %True END IF SELECT CASE prim.piece CASE %Prime angle = (prim.tik MOD 677) * Pi / 677! 'traject 0- Pi CASE %Sense angle = (prim.tik MOD 643) * Pi / 643! 'traject 0- Pi CASE ELSE EXIT SUB END SELECT END SUB SUB Prime_End () 'uses Harma and Harmo for the ending. 'added 10.01.2011 LOCAL cnt, noot AS LONG LOCAL angle AS SINGLE STATIC endcnt, startcnt, oldnoot, wind AS LONG IF ISFALSE task(%Prime_End).tog THEN cnt = 0 oldnoot = %False startcnt = Prim.tik endcnt = 2011 - Prim.tik Task(%Prime_End).tog = %True MM_Harma_On MM_HarmO_On Controller Harma.channel, 7, 1 Controller HarmO.channel, 7, 1 Controller HarmO.channel, 75, %False Controller HarmO.channel, 76, %False Controller HarmO.channel, 77, %False Controller HarmO.channel, 78, %False Controller Harmo.channel, 1, 111 Controller HarmO.channel, 74, 127 'subbas register END IF cnt = Prim.tik - startcnt angle = (cnt / endcnt) * HalfPi 'traject 0- Pi/2 wind = 1 + (120 * SIN(angle)) noot = 24 + Prim.tc 'grondtoon IF oldnoot <> noot THEN mPlay HarmO.channel, noot, 32 mPlay HarmO.channel, noot + 12, 45 'subbas noot mPlay Harma.channel, noot, 64 oldnoot = noot END IF IF HarmO.ctrl(7) <> wind THEN Controller HarmO.channel, 7, wind Controller Harma.channel, 7, wind * 0.6 Harma.ctrl(7) = wind * 0.6 HarmO.ctrl(7) = wind END IF IF cnt = endcnt\2 THEN MM_HarmO_On %MM_Red MM_Harma_On %MM_Red END IF IF cnt >= endcnt THEN stoptask %Prime_End END SUB SUB Sense_End () 'uses Harma and Harmo for the ending. 'added 10.01.2011 ' overgenomen in Sense, 2013 LOCAL cnt, noot AS LONG LOCAL angle AS SINGLE STATIC endcnt, startcnt, oldnoot, wind AS LONG IF ISFALSE task(%Sense_End).tog THEN cnt = 0 oldnoot = %False startcnt = Prim.tik endcnt = 2013 - Prim.tik Task(%Sense_End).tog = %True MM_Harma_On MM_HarmO_On Controller Harma.channel, 7, 1 Controller HarmO.channel, 7, 1 Controller HarmO.channel, 75, %False Controller HarmO.channel, 76, %False Controller HarmO.channel, 77, %False Controller HarmO.channel, 78, %False Controller Harmo.channel, 1, 111 Controller HarmO.channel, 74, 127 'subbas register END IF cnt = Prim.tik - startcnt angle = (cnt / endcnt) * HalfPi 'traject 0- Pi/2 wind = 1 + (120 * SIN(angle)) noot = 24 + Prim.tc 'grondtoon IF oldnoot <> noot THEN mPlay HarmO.channel, noot, 32 mPlay HarmO.channel, noot + 12, 45 'subbas noot mPlay Harma.channel, noot, 64 oldnoot = noot END IF IF HarmO.ctrl(7) <> wind THEN Controller HarmO.channel, 7, wind Controller Harma.channel, 7, wind * 0.6 Harma.ctrl(7) = wind * 0.6 HarmO.ctrl(7) = wind END IF IF cnt = endcnt\2 THEN MM_HarmO_On %MM_Red MM_Harma_On %MM_Red END IF IF cnt >= endcnt THEN stoptask %Sense_End END SUB