' ************************************************************************** ' * Swarm ' * a piece by Rene Mogenson ' * coded by Kristof Lauwers ' * at Logos Foundation 13-14.08.2001 '*************************************************************************** 'note: several parts of the piece use several tasks. when a tasks stops it starts the next task, so several tasks may initialise and start each other 'patterns are now constructed every time they change. we could precompute them and use string constants in stead 'to see what happens at a measure: search: case M &/ case M-1 %Swarm_Pi = 39 %Swarm_Roto_Master = 43 %swarm_together = 44 %swarm_mot = 46 'we overwrite other tasks!!!!!!!!!!! always make a separate compil for this piece %swarm_tempo = 45 %swarm_KluPi = %swarm_mot + 5 '5 %Swarm_StartButton = 9 %avvel = 28 %fvel = 36 %rotvel = &H62 %klungvel = 60 %tromvel = 60 GLOBAL Mottog AS BYTE 'contains flags for Sw_motx tasks DECLARE FUNCTION SwarmInit AS LONG DECLARE SUB Swarm_Roto_Master DECLARE SUB Swarm_Piano0 ' voices 0, 3, 6 and 8 DECLARE SUB Swarm_Piano1 ' voices 1 and 4 DECLARE SUB Swarm_Piano2 ' voices 2 and 5 DECLARE SUB Swarm_Piano3 ' voices 7 and 9 DECLARE SUB Swarm_Roto_Master DECLARE SUB Swarm_tempo 'task for acc. / rit. DECLARE SUB SW_Tempo(t AS SINGLE) 'adapts all task tempi to current App.Tempo DECLARE SUB Swarm_tutti ' task for homorithmic sections DECLARE SUB KlungPiano DECLARE SUB Sw_mot0 ' tasks for var tuning of rotomoton DECLARE SUB Sw_mot1 DECLARE SUB Sw_mot2 DECLARE SUB Sw_mot3 DECLARE SUB Sw_mot4 DECLARE SUB SW_AllOff 'only stops piano notes we switched on ourselves..(for some reason generel allnotesoff fails) DECLARE SUB SW_sync(m AS LONG) 'syncs all tasks to measure m, beat 0 FUNCTION SwarmInit AS LONG ' MSGBOX "swarm" App.Tempo = 120 DIM dummyarray(0 TO 8000) AS STATIC DWORD DIM pat(0 TO 9) AS GLOBAL STRING * 20 DIM patcount(0 TO 9) AS GLOBAL BYTE DIM ndur(0 TO 9) AS GLOBAL BYTE DIM lastnote(0 TO 9) AS GLOBAL BYTE ' DIM MotTog(0 TO 4) AS GLOBAL INTEGER DIM measure(%swarm_pi TO %swarm_klupi) AS GLOBAL WORD DIM beat(%swarm_pi TO %swarm_klupi) AS GLOBAL BYTE task(%Swarm_Pi).naam = "pi_0368" ' voices 0, 3, 6 & 8 task(%swarm_pi).channel = 0 task(%swarm_Pi).freq = .01 + (App.Tempo / 60#) * (9# / 4#) * 4# '(tempo) * (notes/tel) * (quad tempo for rests & staccato) task(%Swarm_Pi).cptr = CODEPTR(Swarm_Piano0) task(%Swarm_Pi + 1).naam = "pi_1&4" ' voices 1 and 4 task(%swarm_pi + 1).channel = 0 task(%swarm_Pi + 1).freq = (App.Tempo / 60#) * (7# / 4#) * 4# task(%Swarm_Pi + 1).cptr = CODEPTR(Swarm_Piano1) task(%Swarm_Pi + 2).naam = "pi_2&5" ' voices 1 and 4 task(%swarm_pi + 2).channel = 0 task(%swarm_Pi + 2).freq = (App.Tempo / 60#) * (5# / 4#) * 4# task(%Swarm_Pi + 2).cptr = CODEPTR(Swarm_Piano2) task(%Swarm_Pi + 3).naam = "pi_7&9" ' voices 1 and 4 task(%swarm_pi + 3).channel = 0 task(%swarm_Pi + 3).freq = (App.Tempo / 60#) * (2# / 4#) * 4# 'quadruple tempo for rests task(%Swarm_Pi + 3).cptr = CODEPTR(Swarm_Piano3) task(%Swarm_mot).naam = "mot_0" task(%swarm_mot).freq = 2 * App.Tempo / 60 task(%Swarm_mot).cptr = CODEPTR(Sw_mot0) task(%Swarm_mot + 1).naam = "mot_1" task(%swarm_mot + 1).freq = 3 * App.Tempo / 60 task(%Swarm_mot + 1).cptr = CODEPTR(Sw_mot1) task(%Swarm_mot + 2).naam = "mot_2" task(%swarm_mot + 2).freq = 5 * App.Tempo / 60 task(%Swarm_mot + 2).cptr = CODEPTR(Sw_mot2) task(%Swarm_mot + 3).naam = "mot_3" task(%swarm_mot + 3).freq = 7 * App.Tempo / 60 task(%Swarm_mot + 3).cptr = CODEPTR(Sw_mot3) task(%Swarm_mot + 4).naam = "mot_4" task(%swarm_mot + 4).freq = 9 * App.Tempo / 60 task(%Swarm_mot + 4).cptr = CODEPTR(Sw_mot4) task(%swarm_Roto_Master).naam = "Sw_Rot" task(%swarm_Roto_Master).freq = (App.Tempo /60#) / 4# task(%swarm_Roto_Master).cptr = CODEPTR(Swarm_Roto_Master) task(%swarm_together).naam = "Sw_tuti" task(%swarm_together).freq = (App.Tempo / 60#) * 4 '2 = 2*8/4 2 for stacc task(%swarm_together).cptr = CODEPTR(Swarm_tutti) task(%swarm_tempo).naam = "tempo" task(%swarm_tempo).freq = 8 task(%swarm_tempo).cptr = CODEPTR(Swarm_Tempo) task(%swarm_klupi).naam = "klupi" task(%swarm_klupi).freq = (App.Tempo / 60) * 4 task(%swarm_KluPi).cptr = CODEPTR(KlungPiano) ButnOs(%Swarm_StartButton).tag="Swarm" ButnOs(%Swarm_StartButton).cptr = CODEPTR(Swarm_Start) END FUNCTION SUB Swarm_Start 'cockpit button callback Rotomoton.Command(1) = %ROTO_POSITION OR 40 IF ISFALSE(BIT(task(Rotomoton.Motortask(1)).SWITCH, %TASK_ONOFF)) THEN StartTask Rotomoton.Motortask(1) Rotomoton.Command(2) = %ROTO_POSITION OR 40 IF ISFALSE(BIT(task(Rotomoton.Motortask(2)).SWITCH, %TASK_ONOFF)) THEN StartTask Rotomoton.Motortask(2) Rotomoton.Command(3) = %ROTO_POSITION OR 40 IF ISFALSE(BIT(task(Rotomoton.Motortask(3)).SWITCH, %TASK_ONOFF)) THEN StartTask Rotomoton.Motortask(3) Rotomoton.Command(4) = %ROTO_POSITION OR 40 IF ISFALSE(BIT(task(Rotomoton.Motortask(4)).SWITCH, %TASK_ONOFF)) THEN StartTask Rotomoton.Motortask(4) Rotomoton.Command(5) = %ROTO_POSITION OR 40 IF ISFALSE(BIT(task(Rotomoton.Motortask(5)).SWITCH, %TASK_ONOFF)) THEN StartTask Rotomoton.Motortask(5) StartTask %Swarm_Pi StartTask %Swarm_Pi + 1 StartTask %Swarm_Pi + 2 StartTask %Swarm_Pi + 3 END SUB SUB KlungPiano LOCAL i AS LONG STATIC kluster1$, kluster2$ 'for klung STATIC pia1$, pia2$, piaoff$ STATIC rot1 AS BYTE, rot2 AS BYTE STATIC coltrom AS LONG 'STATIC f AS LONG 'IF ISFALSE(f) THEN ' f = FREEFILE ' OPEN "foo.log" FOR OUTPUT AS f ' PRINT# f, "timegettime","freq","measure","measureCheck", "beat", "kluster1", "kluster2" ', "pia1","pia2","piaoff" 'END IF 'PRINT# f, timegettime, task(%swarm_klupi).freq, measure(%swarm_klupi),measure(%swarm_roto_master),beat(%swarm_klupi) ', kluster1$, kluster2$ ', pia1$, pia2$, piaoff$ IF piaoff$<>"" THEN FOR i = 1 TO LEN(piaoff$) play task(%swarm_pi).channel, ASC(MID$(piaoff$, i, 1)), 0 NEXT piaoff$ = "" END IF SELECT CASE measure(%Swarm_klupi) CASE 56 SELECT CASE beat(%swarm_klupi) CASE 0 kluster1$ = CHR$(56): kluster2$ = CHR$(51) GOTO speel1 CASE 1 TO 3, 8 TO 11 GOTO speel1 CASE ELSE GOTO speel2 END SELECT CASE 57 SELECT CASE beat(%swarm_klupi) CASE 0 ' DIALOG DOEVENTS 'crash prevention SW_Tempo 100 SW_Sync 57 kluster1$ = kluster1$ + CHR$(55): kluster2$ = kluster2$ + CHR$(50) GOTO speel1 CASE 1 TO 3, 8 TO 11 GOTO speel1 CASE ELSE GOTO speel2 END SELECT CASE 58 SELECT CASE beat(%swarm_klupi) CASE 0 SW_tempo 120 SW_Sync 58 kluster1$ = kluster1$ + CHR$(54): kluster2$ = kluster2$ + CHR$(49) GOTO speel1 CASE 1 TO 3, 8 TO 11 GOTO speel1 CASE ELSE GOTO speel2 END SELECT CASE 59 SELECT CASE beat(%swarm_klupi) CASE 0 ' SW_Sync 59 kluster1$ = kluster1$ + CHR$(53) GOTO speel1 CASE 1 TO 3, 8 TO 11 GOTO speel1 CASE ELSE GOTO speel2 END SELECT CASE 60 IF ISFALSE beat(%swarm_klupi) THEN StopTask %Swarm_Roto_Master SW_Sync 60 StartTask %Swarm_Roto_Master kluster1$ = CHR$(62, 59, 56): kluster2$ = CHR$(60, 51) 'prep for 64 StopTask %swarm_klupi EXIT SUB END IF CASE 64 SELECT CASE beat(%swarm_klupi) CASE 0 TO 3, 8 TO 11 GOTO speel1 CASE ELSE GOTO speel2 END SELECT CASE 65 SELECT CASE beat(%swarm_klupi) CASE 0 kluster2$ = kluster2$ + CHR$(59, 58, 52, 53) GOTO speel1 CASE 1 TO 3, 8 TO 11 GOTO speel1 CASE ELSE GOTO speel2 END SELECT CASE 66 SELECT CASE beat(%swarm_klupi) CASE 1 kluster1$="":kluster2$="" ' MSGBOX "66!" CASE 4 kluster1$ = CHR$(61): kluster2$ = CHR$(56) GOTO speel1 CASE 12 GOTO speel2 CASE ELSE GOTO incbeat END SELECT CASE 67 SELECT CASE beat(%swarm_klupi) CASE 1 kluster1$="":kluster2$="" ' MSGBOX "66!" CASE 4 kluster1$ = CHR$(61): kluster2$ = CHR$(56) GOTO speel1 CASE 12 GOTO speel2 CASE 13 StopTask %swarm_klupi CASE ELSE GOTO incbeat END SELECT CASE 70 SELECT CASE beat(%swarm_klupi) CASE 0, 12 GOTO speel1 CASE 10 GOTO speel2 CASE ELSE GOTO incbeat END SELECT CASE 71 SELECT CASE beat(%swarm_klupi) CASE 6 GOTO speel1 CASE 4 GOTO speel2 CASE ELSE GOTO incbeat END SELECT CASE 72 SELECT CASE beat(%swarm_klupi) CASE 0, 8 GOTO speel1 CASE 4, 10 GOTO speel2 CASE ELSE GOTO incbeat END SELECT CASE 73 SELECT CASE beat(%swarm_klupi) CASE 6, 8 GOTO speel1 CASE 4, 10 GOTO speel2 CASE ELSE GOTO incbeat END SELECT CASE 74 SELECT CASE beat(%swarm_klupi) CASE 6, 12, 14 GOTO speel1 CASE 0 GOTO speel2 CASE ELSE GOTO incbeat END SELECT CASE 75 SELECT CASE beat(%swarm_klupi) CASE 4, 10 GOTO speel1 CASE 6, 8 GOTO speel2 CASE ELSE GOTO incbeat END SELECT CASE 76 SELECT CASE beat(%swarm_klupi) CASE 0, 8, 12 GOTO speel1 CASE 4, 10 GOTO speel2 CASE ELSE GOTO incbeat END SELECT CASE 77 SELECT CASE beat(%swarm_klupi) CASE 6, 8, 12 GOTO speel1 CASE 4, 10 GOTO speel2 CASE ELSE GOTO incbeat END SELECT CASE 78 SELECT CASE beat(%swarm_klupi) CASE 4, 10, 12 GOTO speel1 CASE 0, 8 GOTO speel2 CASE ELSE GOTO incbeat END SELECT CASE 79 SELECT CASE beat(%swarm_klupi) CASE 4, 10, 12 GOTO speel1 CASE 6, 8 GOTO speel2 CASE 13 StopTask %swarm_klupi EXIT SUB CASE ELSE GOTO incbeat END SELECT CASE 107 SELECT CASE beat(%swarm_klupi) CASE 0 kluster1$ = CHR$(61, 62): kluster2$ = CHR$(54, 55) GOTO speel1 CASE 14 GOTO speel2 CASE ELSE GOTO incbeat END SELECT CASE 108 SELECT CASE beat(%swarm_klupi) CASE 6 GOTO speel1 CASE 14 GOTO speel2 CASE ELSE GOTO incbeat END SELECT CASE 109 SELECT CASE beat(%swarm_klupi) CASE 0, 14 GOTO speel1 CASE 10 GOTO speel2 'CASE 15 ' StopTask %swarm_klupi ' EXIT SUB CASE ELSE GOTO incbeat END SELECT CASE 110 IF beat(%Swarm_Klupi) = 0 THEN SW_Sync 110 StartTask %Swarm_Roto_Master StopTask %Swarm_Klupi EXIT SUB END IF CASE 112 SELECT CASE beat(%swarm_Klupi) CASE 0 kluster1$ = CHR$(62, 63): kluster2$ = CHR$(55, 56) GOTO incbeat CASE 6 GOTO speel1 CASE ELSE GOTO incbeat END SELECT 'EXIT SUB CASE 113 SELECT CASE beat(%swarm_klupi) CASE 6 GOTO speel1 CASE 0, 14 GOTO speel2 CASE ELSE GOTO incbeat END SELECT CASE 114 SELECT CASE beat(%swarm_klupi) CASE 0, 14 GOTO speel1 CASE 6 GOTO speel2 CASE ELSE GOTO incbeat END SELECT CASE 115 SELECT CASE beat(%swarm_klupi) CASE 10 GOTO speel1 CASE 4, 14 GOTO speel2 CASE 15 StopTask %swarm_klupi CASE ELSE GOTO incbeat END SELECT CASE 131 SELECT CASE beat(%swarm_klupi) CASE 0 kluster1$ = "": kluster2$ = "": pia1$ = CHR$(84, 85): pia2$ = CHR$(79, 80) GOTO speel1 CASE 8, 12 GOTO speel1 CASE 4, 10 GOTO speel2 CASE ELSE GOTO incbeat END SELECT CASE 132, 136 SELECT CASE beat(%swarm_klupi) CASE 6, 8, 12 GOTO speel1 CASE 4, 10 GOTO speel2 CASE ELSE GOTO incbeat END SELECT CASE 133, 137 SELECT CASE beat(%swarm_klupi) CASE 6, 10, 12 GOTO speel1 CASE 0, 8 GOTO speel2 CASE ELSE GOTO incbeat END SELECT CASE 134 SELECT CASE beat(%swarm_klupi) CASE 4, 10, 12 GOTO speel1 CASE 6, 8 GOTO speel2 CASE ELSE GOTO incbeat END SELECT CASE 135 SELECT CASE beat(%swarm_klupi) CASE 1 coltrom = 1 pia1$ = pia1$ + CHR$(83, 82, 81): pia2$ = pia2$ + CHR$(78, 77, 76) rot1 = &B00011 rot2 = &B11100 GOTO speel1 CASE 8, 12 GOTO speel1 CASE 4, 10 GOTO speel2 CASE ELSE GOTO incbeat END SELECT 'case 136, 137 @ 132, 133 (same rhytm) CASE 138 SELECT CASE beat(%swarm_klupi) CASE 4, 10, 12 GOTO speel1 CASE 6, 8 GOTO speel2 CASE 13 StopTask %swarm_klupi CASE ELSE GOTO incbeat END SELECT END SELECT GOTO incbeat speel1: IF kluster1$ <> "" THEN FOR i =1 TO LEN(kluster1$) play %vibi_channel, ASC(MID$(kluster1$,i,1)) + 12, %klungvel 'was klung_channel without +12 for note ... 011130 ' play %vibi_channel, ASC(MID$(kluster1$,i,1)) + 24, %klungvel 'was klung_channel without +12 for note ... 011130 NEXT END IF IF pia1$<>"" THEN piaoff$ = pia1$ FOR i = 1 TO LEN(pia1$) play task(%swarm_pi).channel, ASC(MID$(pia1$, i, 1)), %fvel NEXT END IF IF rot1 THEN FOR i = 0 TO 4 IF BIT(rot1, i) THEN CALL DWORD Task(Rotomoton.beattask(i + 1)).cptr IF ColTrom THEN Play %Troms_Channel, 24, %tromvel END IF NEXT END IF GOTO incbeat speel2: IF kluster2$ <> "" THEN FOR i =1 TO LEN(kluster2$) ' play %vibi_channel, ASC(MID$(kluster2$,i,1)) + 12, %klungvel play %vibi_channel, ASC(MID$(kluster2$,i,1)) + 24, %klungvel NEXT END IF IF pia2$<>"" THEN piaoff$ = pia2$ FOR i = 1 TO LEN(pia2$) play task(%swarm_pi).channel, ASC(MID$(pia2$, i, 1)), %fvel NEXT END IF IF rot2 THEN FOR i = 0 TO 4 IF BIT(rot2, i) THEN CALL DWORD Task(Rotomoton.beattask(i + 1)).cptr IF ColTrom THEN Play %Troms_Channel, 24, %tromvel END IF NEXT END IF 'GOTO incbeat incbeat: INCR beat(%swarm_klupi) IF beat(%swarm_klupi) > 15 THEN beat(%swarm_klupi) = 0 INCR measure(%swarm_klupi) END IF END SUB SUB Swarm_tutti LOCAL i AS BYTE LOCAL playit AS INTEGER STATIC init AS LONG STATIC playtroms AS LONG ' STATIC beat AS BYTE IF ISFALSE init THEN DIM n(0 TO 11) AS STATIC BYTE '10 &11 for klung DIM v(0 TO 11) AS STATIC BYTE DIM noff(0 TO 9) AS STATIC BYTE init = %true FOR i = 0 TO 9 v(i) = %fvel NEXT v(10) = 80 v(11) = 80 measure(%swarm_together) = 46 END IF SELECT CASE measure(%swarm_together) CASE 46 playtroms = &B11 IF ISFALSE beat(%swarm_Together) THEN patcount(0) = 8: patcount(2) = 12: patcount(3) = 8: patcount(4) = 0 patcount(5) = 10: patcount(6) = 8: patcount(7) = 2: patcount(8) = 6: patcount(9) = 0 END IF SELECT CASE beat(%swarm_together) CASE 0, 4, 8, 12 FOR i = 0 TO 9 INCR PatCount(i) IF patcount(i)>20 THEN patcount(i) = 1 n(i) = ASC(MID$(pat(i), patcount(i), 1)) 'patcount(i) INCR patcount(i) v(i) = ASC(MID$(pat(i), patcount(i), 1)) 'patcount(i) NEXT playit = %true END SELECT CASE 47 SELECT CASE beat(%swarm_together) CASE 0, 2, 6, 10, 14 FOR i = 0 TO 9 INCR PatCount(i) IF patcount(i)>20 THEN patcount(i) = 1 n(i) = ASC(MID$(pat(i), patcount(i), 1)) 'patcount(i) INCR patcount(i) v(i) = ASC(MID$(pat(i), patcount(i), 1)) 'patcount(i) NEXT playit = %true END SELECT CASE 48 IF ISFALSE beat(%swarm_together) THEN SW_tempo 100 SW_Sync 48 pat(0) = REPEAT$(20, CHR$(0)) 'rest pat(1) = REPEAT$(10, CHR$(68) + CHR$(%avvel) ) 'note 68, g# pat(2) = REPEAT$(10, CHR$(47) + CHR$(%avvel) ) 'note 47, b pat(8) = REPEAT$(20, CHR$(0)) 'rest pat(9) = REPEAT$(20, CHR$(0)) 'rest ndur(0) = %false: ndur(1) = %false: ndur(2) = %false: ndur(8) = %false: ndur(9) = %false FOR i = 3 TO 7 pat(i) = REPEAT$(20, CHR$(%avvel)): ndur(i) = 4 NEXT MID$(pat(3), 1) = CHR$(68) : MID$(pat(3), 3) = CHR$(69) : MID$(pat(3), 5) = CHR$(70) : MID$(pat(3), 7) = CHR$(71) : MID$(pat(3), 9) = CHR$(72) MID$(pat(3), 11) = CHR$(73) : MID$(pat(3), 13) = CHR$(72) : MID$(pat(3), 15) = CHR$(71) : MID$(pat(3), 17) = CHR$(70) : MID$(pat(3), 19) = CHR$(69) patcount(3) = 6 MID$(pat(4), 1) = CHR$(59) : MID$(pat(4), 3) = CHR$(60) : MID$(pat(4), 5) = CHR$(61) : MID$(pat(4), 7) = CHR$(62) : MID$(pat(4), 9) = CHR$(63) MID$(pat(4), 11) = CHR$(64) : MID$(pat(4), 13) = CHR$(63) : MID$(pat(4), 15) = CHR$(62) : MID$(pat(4), 17) = CHR$(61) : MID$(pat(4), 19) = CHR$(60) patcount(4) = 18 MID$(pat(5), 1) = CHR$(51) : MID$(pat(5), 3) = CHR$(52) : MID$(pat(5), 5) = CHR$(53) : MID$(pat(5), 7) = CHR$(54) : MID$(pat(5), 9) = CHR$(55) MID$(pat(5), 11) = CHR$(56) : MID$(pat(5), 13) = CHR$(55) : MID$(pat(5), 15) = CHR$(54) : MID$(pat(5), 17) = CHR$(53) : MID$(pat(5), 19) = CHR$(52) patcount(5) = 10 MID$(pat(6), 1) = CHR$(47) : MID$(pat(6), 3) = CHR$(48) : MID$(pat(6), 5) = CHR$(49) : MID$(pat(6), 7) = CHR$(50) : MID$(pat(6), 9) = CHR$(51) MID$(pat(6), 11) = CHR$(52) : MID$(pat(6), 13) = CHR$(51) : MID$(pat(6), 15) = CHR$(50) : MID$(pat(6), 17) = CHR$(49) : MID$(pat(6), 19) = CHR$(48) patcount(6) = 4 MID$(pat(7), 1) = CHR$(45) : MID$(pat(7), 3) = CHR$(46) : MID$(pat(7), 5) = CHR$(47) : MID$(pat(7), 7) = CHR$(48) : MID$(pat(7), 9) = CHR$(49) MID$(pat(7), 11) = CHR$(50) : MID$(pat(7), 13) = CHR$(49) : MID$(pat(7), 15) = CHR$(48) : MID$(pat(7), 17) = CHR$(47) : MID$(pat(7), 19) = CHR$(46) patcount(7) = 0: ndur(7) = 8 StartTask %swarm_tempo FOR i = 0 TO 3: StartTask %Swarm_Pi + i: NEXT StopTask %swarm_roto_master: StopTask %Swarm_together END IF CASE 92 '!!TO DO: replace stuff here above with struct similar to following DIALOG DOEVENTS 'crash prevention... IF beat(%Swarm_Together) = 0 THEN Patcount(0) = 12: patcount(1) = 16: patcount(8) = 6: patcount(9) = 8 'rest=ok END IF SELECT CASE beat(%swarm_Together) CASE 0, 2, 6, 10, 14 FOR i = 0 TO 9 INCR PatCount(i) IF patcount(i)>20 THEN patcount(i) = 1 n(i) = ASC(MID$(pat(i), patcount(i), 1)) 'patcount(i) INCR patcount(i) v(i) = ASC(MID$(pat(i), patcount(i), 1)) 'patcount(i) NEXT playit = %true END SELECT CASE 93 DIALOG DOEVENTS SELECT CASE beat(%Swarm_Together) CASE 0, 4, 6, 8, 12, 14 FOR i = 0 TO 9 INCR PatCount(i) IF patcount(i)>20 THEN patcount(i) = 1 n(i) = ASC(MID$(pat(i), patcount(i), 1)) 'patcount(i) INCR patcount(i) v(i) = ASC(MID$(pat(i), patcount(i), 1)) 'patcount(i) NEXT playit = %true END SELECT CASE 94 FOR i = 0 TO 2 ndur(i) = 4 NEXT FOR i = 3 TO 7 ndur(i) = 0 NEXT ndur(8) = 11: ndur(9) = 8 SW_Sync 94 FOR i = 0 TO 3 StartTask %Swarm_Pi + i NEXT StartTask %Swarm_Roto_Master StopTask %Swarm_Together CASE 96 IF beat(%Swarm_Together) = 0 THEN patcount(3) = 6: patcount(4) = 18: patcount(5) = 10: patcount(6) = 4: patcount(7) = 0 END IF SELECT CASE beat(%Swarm_Together) CASE 0, 4, 6, 10, 14 FOR i = 0 TO 9 INCR PatCount(i) IF patcount(i)>20 THEN patcount(i) = 1 n(i) = ASC(MID$(pat(i), patcount(i), 1)) 'patcount(i) INCR patcount(i) v(i) = ASC(MID$(pat(i), patcount(i), 1)) 'patcount(i) NEXT playit = %true END SELECT CASE 97 SELECT CASE beat(%Swarm_Together) CASE 0, 2, 6, 8 FOR i = 0 TO 9 INCR PatCount(i) IF patcount(i)>20 THEN patcount(i) = 1 n(i) = ASC(MID$(pat(i), patcount(i), 1)) 'patcount(i) INCR patcount(i) v(i) = ASC(MID$(pat(i), patcount(i), 1)) 'patcount(i) NEXT playit = %true CASE 14 '!!! 3/4!!! 4e tel = 1e v/ volgende maat ndur(0) = 0: ndur(1) = 0: ndur(2) = 0: ndur(3) = 4: ndur(4) = 4 ndur(5) = 4: ndur(6) = 11: ndur(7) = 8: ndur(8) = 11: ndur(9) = 8 patcount(5) = 0: patcount(6) = 10: patcount(7) = 4: patcount(8)= 10: patcount(9) = 4 SW_Sync 98 FOR i = 0 TO 3 StartTask %swarm_Pi + i NEXT END SELECT CASE 99 SW_AllOff IF beat(%Swarm_Together) = 0 THEN patcount(0) = 2: patcount(1) = 6: patcount(3) = 10 SELECT CASE beat(%Swarm_Together) CASE 0, 4, 8, 10, 14 FOR i = 0 TO 9 INCR PatCount(i) IF patcount(i)>20 THEN patcount(i) = 1 n(i) = ASC(MID$(pat(i), patcount(i), 1)) 'patcount(i) INCR patcount(i) v(i) = ASC(MID$(pat(i), patcount(i), 1)) 'patcount(i) NEXT playit = %true END SELECT CASE 100 SELECT CASE beat(%Swarm_Together) CASE 0, 4, 8, 10, 14 FOR i = 0 TO 9 INCR PatCount(i) IF patcount(i)>20 THEN patcount(i) = 1 n(i) = ASC(MID$(pat(i), patcount(i), 1)) 'patcount(i) INCR patcount(i) v(i) = ASC(MID$(pat(i), patcount(i), 1)) 'patcount(i) NEXT playit = %true END SELECT CASE 101 IF beat(%Swarm_Together) = 0 THEN FOR i = 0 TO 9 ndur(i) = 0 NEXT ndur(3) = 4: ndur(4) = 4: ndur(5) = 4: ndur(6) = 11: ndur(7) = 11 FOR i = 0 TO 3 StartTask %Swarm_Pi + i NEXT END IF CASE 102 IF beat(%Swarm_Together) = 0 THEN playtroms = &B10 FOR i = 0 TO 9 n(i) = 0 NEXT pat(0) = REPEAT$(20, CHR$(%fvel)) MID$(pat(0), 1) = CHR$(92) : MID$(pat(0), 3) = CHR$(93) : MID$(pat(0), 5) = CHR$(94) : MID$(pat(0), 7) = CHR$(95) : MID$(pat(0), 9) = CHR$(96) MID$(pat(0), 11) = CHR$(97) : MID$(pat(0), 13) = CHR$(96) : MID$(pat(0), 15) = CHR$(95) : MID$(pat(0), 17) = CHR$(94) : MID$(pat(0), 19) = CHR$(93) patcount(0) = 8 pat(1) = REPEAT$(20, CHR$(%fvel)) MID$(pat(1), 1) = CHR$(71) : MID$(pat(1), 3) = CHR$(72) : MID$(pat(1), 5) = CHR$(73) : MID$(pat(1), 7) = CHR$(74) : MID$(pat(1), 9) = CHR$(75) MID$(pat(1), 11) = CHR$(76) : MID$(pat(1), 13) = CHR$(75) : MID$(pat(1), 15) = CHR$(74) : MID$(pat(1), 17) = CHR$(73) : MID$(pat(1), 19) = CHR$(72) patcount(1) = 0 pat(2) = REPEAT$(20, CHR$(%fvel)) MID$(pat(2), 1) = CHR$(63) : MID$(pat(2), 3) = CHR$(64) : MID$(pat(2), 5) = CHR$(65) : MID$(pat(2), 7) = CHR$(66) : MID$(pat(2), 9) = CHR$(67) MID$(pat(2), 11) = CHR$(68) : MID$(pat(2), 13) = CHR$(67) : MID$(pat(2), 15) = CHR$(66) : MID$(pat(2), 17) = CHR$(65) : MID$(pat(2), 19) = CHR$(64) patcount(2) = 12 END IF SELECT CASE beat(%Swarm_Together) CASE 0, 4, 8, 12 FOR i = 0 TO 2 INCR PatCount(i) IF patcount(i)>20 THEN patcount(i) = 1 n(i) = ASC(MID$(pat(i), patcount(i), 1)) 'patcount(i) INCR patcount(i) v(i) = ASC(MID$(pat(i), patcount(i), 1)) 'patcount(i) NEXT playit = %true END SELECT CASE 103 SELECT CASE beat(%Swarm_Together) CASE 0, 2, 6, 10, 14 FOR i = 0 TO 2 INCR PatCount(i) IF patcount(i)>20 THEN patcount(i) = 1 n(i) = ASC(MID$(pat(i), patcount(i), 1)) 'patcount(i) INCR patcount(i) v(i) = ASC(MID$(pat(i), patcount(i), 1)) 'patcount(i) NEXT playit = %true END SELECT CASE 104 IF beat(%swarm_together) = 0 THEN patcount(0) = 16: patcount(1) = 8: patcount(1) = 0 SELECT CASE beat(%Swarm_Together) CASE 0, 2, 6, 10, 14 FOR i = 0 TO 2 INCR PatCount(i) IF patcount(i)>20 THEN patcount(i) = 1 n(i) = ASC(MID$(pat(i), patcount(i), 1)) 'patcount(i) INCR patcount(i) v(i) = ASC(MID$(pat(i), patcount(i), 1)) 'patcount(i) NEXT playit = %true END SELECT CASE 105 IF beat(%Swarm_Together) = 0 THEN SW_Sync 105 StartTask %Swarm_Roto_Master END IF CASE 107 IF beat(%Swarm_Together) = 0 THEN patcount(0) = 8: patcount(1) = 8 SELECT CASE beat(%Swarm_Together) CASE 0, 2, 6, 10, 14 FOR i = 0 TO 1 INCR PatCount(i) IF patcount(i)>20 THEN patcount(i) = 1 n(i) = ASC(MID$(pat(i), patcount(i), 1)) 'patcount(i) INCR patcount(i) v(i) = ASC(MID$(pat(i), patcount(i), 1)) 'patcount(i) NEXT playit = %true END SELECT CASE 108 SELECT CASE beat(%Swarm_Together) CASE 0, 4, 6, 8,12, 14 FOR i = 0 TO 1 INCR PatCount(i) IF patcount(i)>20 THEN patcount(i) = 1 n(i) = ASC(MID$(pat(i), patcount(i), 1)) 'patcount(i) INCR patcount(i) v(i) = ASC(MID$(pat(i), patcount(i), 1)) 'patcount(i) NEXT playit = %true END SELECT CASE 109 SELECT CASE beat(%Swarm_Together) CASE 0, 2, 6, 10, 14 FOR i = 0 TO 1 INCR PatCount(i) IF patcount(i)>20 THEN patcount(i) = 1 n(i) = ASC(MID$(pat(i), patcount(i), 1)) 'patcount(i) INCR patcount(i) v(i) = ASC(MID$(pat(i), patcount(i), 1)) 'patcount(i) NEXT playit = %true END SELECT CASE 112 IF beat(%Swarm_Together) = 0 THEN patcount(0) = 4: patcount(1) = 0 SELECT CASE beat(%Swarm_Together) CASE 0, 4, 6, 10, 14 FOR i = 0 TO 1 INCR PatCount(i) IF patcount(i)>20 THEN patcount(i) = 1 n(i) = ASC(MID$(pat(i), patcount(i), 1)) 'patcount(i) INCR patcount(i) v(i) = ASC(MID$(pat(i), patcount(i), 1)) 'patcount(i) NEXT playit = %true END SELECT CASE 113 SELECT CASE beat(%Swarm_Together) CASE 0, 4, 6, 10, 14 FOR i = 0 TO 1 INCR PatCount(i) IF patcount(i)>20 THEN patcount(i) = 1 n(i) = ASC(MID$(pat(i), patcount(i), 1)) 'patcount(i) INCR patcount(i) v(i) = ASC(MID$(pat(i), patcount(i), 1)) 'patcount(i) NEXT playit = %true END SELECT CASE 114 SELECT CASE beat(%Swarm_Together) CASE 0, 4, 8, 10, 14 FOR i = 0 TO 1 INCR PatCount(i) IF patcount(i)>20 THEN patcount(i) = 1 n(i) = ASC(MID$(pat(i), patcount(i), 1)) 'patcount(i) INCR patcount(i) v(i) = ASC(MID$(pat(i), patcount(i), 1)) 'patcount(i) NEXT playit = %true END SELECT CASE 115 SELECT CASE beat(%Swarm_Together) CASE 0, 4, 8, 10, 14 FOR i = 0 TO 1 INCR PatCount(i) IF patcount(i)>20 THEN patcount(i) = 1 n(i) = ASC(MID$(pat(i), patcount(i), 1)) 'patcount(i) INCR patcount(i) v(i) = ASC(MID$(pat(i), patcount(i), 1)) 'patcount(i) NEXT playit = %true END SELECT CASE 116 FOR i = 0 TO 3: StopTask %Swarm_Pi + i: NEXT SW_AllOff IF beat(%Swarm_Together) = 0 THEN PlayTroms = &B11 pat(0) = REPEAT$(20, CHR$(%fvel)) MID$(pat(0), 1) = CHR$(32) : MID$(pat(0), 3) = CHR$(33) : MID$(pat(0), 5) = CHR$(34) : MID$(pat(0), 7) = CHR$(35) : MID$(pat(0), 9) = CHR$(36) MID$(pat(0), 11) = CHR$(37) : MID$(pat(0), 13) = CHR$(36) : MID$(pat(0), 15) = CHR$(35) : MID$(pat(0), 17) = CHR$(34) : MID$(pat(0), 19) = CHR$(33) pat(1) = REPEAT$(20, CHR$(%fvel)) MID$(pat(1), 1) = CHR$(23) : MID$(pat(1), 3) = CHR$(24) : MID$(pat(1), 5) = CHR$(25) : MID$(pat(1), 7) = CHR$(26) : MID$(pat(1), 9) = CHR$(27) MID$(pat(1), 11) = CHR$(28) : MID$(pat(1), 13) = CHR$(27) : MID$(pat(1), 15) = CHR$(26) : MID$(pat(1), 17) = CHR$(25) : MID$(pat(1), 19) = CHR$(24) pat(2) = REPEAT$(20, CHR$(%fvel)) MID$(pat(2), 1) = CHR$(39) : MID$(pat(2), 3) = CHR$(40) : MID$(pat(2), 5) = CHR$(41) : MID$(pat(2), 7) = CHR$(42) : MID$(pat(2), 9) = CHR$(43) MID$(pat(2), 11) = CHR$(44) : MID$(pat(2), 13) = CHR$(43) : MID$(pat(2), 15) = CHR$(42) : MID$(pat(2), 17) = CHR$(41) : MID$(pat(2), 19) = CHR$(40) patcount(0) = 4: patcount(1) = 18: patcount(2) = 10: patcount(3) = 6: patcount(4) = 18 patcount(5) = 10: patcount(6) = 4: patcount(7) = 0: patcount(8) = 4: patcount(9) = 0 END IF SELECT CASE beat(%Swarm_Together) CASE 0, 4, 6, 10, 14 FOR i = 0 TO 9 INCR PatCount(i) IF patcount(i)>20 THEN patcount(i) = 1 n(i) = ASC(MID$(pat(i), patcount(i), 1)) 'patcount(i) INCR patcount(i) v(i) = ASC(MID$(pat(i), patcount(i), 1)) 'patcount(i) NEXT playit = %true END SELECT CASE 117 SELECT CASE beat(%Swarm_Together) CASE 0, 2, 6, 8 FOR i = 0 TO 9 INCR PatCount(i) IF patcount(i)>20 THEN patcount(i) = 1 n(i) = ASC(MID$(pat(i), patcount(i), 1)) 'patcount(i) INCR patcount(i) v(i) = ASC(MID$(pat(i), patcount(i), 1)) 'patcount(i) NEXT playit = %true CASE 12 '3/4 !!! DIALOG DOEVENTS '_the_ solution fr all yr problems!! SW_tempo 30 ndur(0) = 0: ndur(1) = 0: ndur(2) = 0: ndur(3) = 4: ndur(4) = 4 ndur(5) = 4: ndur(6) = 11: ndur(7) = 8: ndur(8) = 11: ndur(9) = 8 patcount(3) = 12: patcount(4) = 12: patcount(5) = 0: patcount(6) = 6 patcount(7) = 4: patcount(8) = 6: patcount(9) = 4 SW_Sync 118 FOR i = 0 TO 3 ' beat(%swarm_Pi + i) = 0: measure(%swarm_Pi + i) = 118 StartTask %Swarm_Pi + i NEXT StopTask %Swarm_Together END SELECT CASE 119 SW_AllOff IF beat(%swarm_Together) = 0 THEN patcount(0) = 2: patcount(1) = 4: patcount(2) = 10: patcount(3) = 2: patcount(4) =6 patcount(5) = 10: patcount(6) = 16: patcount(7) = 8: patcount(8) = 16:patcount(9) = 8 END IF SELECT CASE beat(%Swarm_Together) CASE 0, 4, 8, 10, 14 FOR i = 0 TO 9 INCR PatCount(i) IF patcount(i)>20 THEN patcount(i) = 1 n(i) = ASC(MID$(pat(i), patcount(i), 1)) 'patcount(i) INCR patcount(i) v(i) = ASC(MID$(pat(i), patcount(i), 1)) 'patcount(i) NEXT playit = %true END SELECT CASE 120 SELECT CASE beat(%Swarm_Together) CASE 0, 4, 8, 10, 14 FOR i = 0 TO 9 INCR PatCount(i) IF patcount(i)>20 THEN patcount(i) = 1 n(i) = ASC(MID$(pat(i), patcount(i), 1)) 'patcount(i) INCR patcount(i) v(i) = ASC(MID$(pat(i), patcount(i), 1)) 'patcount(i) NEXT playit = %true END SELECT CASE 121 SW_Sync 121 StopTask %Swarm_Together StartTask %Swarm_Roto_Master END SELECT 'speel FOR i = 0 TO 9 IF noff(i) THEN NoteOff task(%swarm_pi).channel, noff(i) noff(i) = 0 END IF NEXT IF playit THEN FOR i = 0 TO 9 IF ISFALSE n(i) THEN ITERATE FOR Play task(%Swarm_pi).channel, n(i), v(i) noff(i) = n(i) NEXT FOR i = 1 TO 5 CALL DWORD Task(Rotomoton.beattask(i)).cptr NEXT IF BIT (playtroms, 0) THEN Play %troms_channel, 24, %tromvel IF BIT (playtroms, 1) THEN Play %troms_channel, 30, %tromvel END IF 'next beat INCR beat(%swarm_together) IF beat(%swarm_together) > 15 THEN beat(%swarm_together) = 0 INCR measure(%swarm_together) END IF END SUB SUB Swarm_Roto_Master LOCAL i AS LONG IF ISFALSE measure(%swarm_Roto_Master) THEN measure(%swarm_Roto_Master) = 17 'on beginning of measure SELECT CASE measure(%swarm_Roto_Master) CASE 17 Task(Rotomoton.beattask(1)).freq = (App.Tempo / 60) * 2 / 4 'DO NOT PUT IN SW_TEMPO > might interfear with rolls Rotomoton.beattask(5) Task(Rotomoton.beattask(1)).level=%rotvel StartTask Rotomoton.beattask(1) CASE 19 Task(Rotomoton.beattask(2)).freq = (App.Tempo / 60) * 3 / 4 Task(Rotomoton.beattask(2)).level=%rotvel StartTask Rotomoton.beattask(2) CASE 21 Task(Rotomoton.beattask(3)).freq = (App.Tempo / 60) * 5 / 4 Task(Rotomoton.beattask(3)).level=%rotvel StartTask Rotomoton.beattask(3) CASE 23 Task(Rotomoton.beattask(4)).freq = (App.Tempo / 60) * 7 / 4 Task(Rotomoton.beattask(4)).level=%rotvel StartTask Rotomoton.beattask(4) CASE 25 Task(Rotomoton.beattask(5)).freq = (App.Tempo / 60) * 9 / 4 Task(Rotomoton.beattask(5)).level=%rotvel StartTask Rotomoton.beattask(5) CASE 26 'for synkro 'FOR i = 0 TO 3: measure(%swarm_pi + i) = 26: beat(%swarm_Pi + i) = %false: NEXT SW_Sync 26 CASE 27 FOR i = 1 TO 5 Rotomoton.Command(i) = %ROTO_POSITION OR 64 IF ISFALSE(BIT(task(Rotomoton.Motortask(i)).SWITCH, %TASK_ONOFF)) THEN StartTask Rotomoton.Motortask(i) NEXT AllNotesOff task(%swarm_pi).channel CASE 45 'FOR i = 0 TO 3: measure(%swarm_pi + i) = 45: beat(%swarm_Pi + i) = %false: NEXT SW_Sync 45 CASE 46 'prepare rotomoton for measure 56 Rotomoton.Command(1) = %ROTO_POSITION OR 20 Rotomoton.Command(2) = %ROTO_POSITION OR 127 Rotomoton.Command(3) = %ROTO_POSITION OR 127 Rotomoton.Command(4) = %ROTO_POSITION OR 20 Rotomoton.Command(5) = %ROTO_POSITION OR 127 FOR i = 1 TO 5 IF ISFALSE(BIT(task(Rotomoton.Motortask(i)).SWITCH, %TASK_ONOFF)) THEN StartTask Rotomoton.Motortask(i) StopTask Rotomoton.beattask(i) NEXT AllNotesOff task(%swarm_pi).channel SW_Sync 46 FOR i = 0 TO 3: StopTask %swarm_pi + i: NEXT StartTask %swarm_together 'sets own measure on first call CASE 56 ' SW_tempo 80 ' SW_Sync 56 allready done elsewhere... ' Mottog = &B01101 'start resp duudu ' FOR i = 1 TO 5: task(Rotomoton.beattask(i)).freq = 20: NEXT ' FOR i = 0 TO 4 ' StartTask Rotomoton.beattask(1 + i) ' StartTask %swarm_mot + i ' NEXT ' StartTask %swarm_klupi ' CASE 57 '>>>to klungpiano ' DIALOG DOEVENTS 'crash prevention ' SW_Tempo 100 ' SW_Sync 57 ' CASE 58 ' SW_tempo 120 ' SW_Sync 58 CASE 59 SW_Sync 59 CASE 60 'SW_Sync 60 FOR i = 0 TO 4: StopTask %swarm_mot + i: NEXT Task(Rotomoton.beattask(1)).freq = (App.Tempo / 60) * 2 / 4 Task(Rotomoton.beattask(2)).freq = (App.Tempo / 60) * 3 / 4 Task(Rotomoton.beattask(3)).freq = (App.Tempo / 60) * 5 / 4 Task(Rotomoton.beattask(4)).freq = (App.Tempo / 60) * 7 / 4 Task(Rotomoton.beattask(5)).freq = (App.Tempo / 60) * 9 / 4 patcount(3) = 16: patcount(4) = 16: patcount(5) = 0: patcount(6) = 8: patcount(7) = 8 ndur(3) = 4: ndur(4) = 4: ndur(5) = 4: ndur(6) = 11: ndur(7) = 2 FOR i = 1 TO 5: StartTask Rotomoton.beattask(i): NEXT FOR i = 0 TO 3 StartTask %swarm_pi + i NEXT CASE 64 SW_Tempo 120 SW_Sync 64 FOR i = 1 TO 5 task(Rotomoton.beattask(i)).freq = 20 NEXT FOR i = 0 TO 4: StartTask %swarm_mot + i: NEXT FOR i = 0 TO 3: StopTask %Swarm_pi + i: NEXT StartTask %swarm_klupi CASE 66 FOR i = 0 TO 4: StopTask %Swarm_mot + i: NEXT FOR i = 1 TO 4 'decr Task(Rotomoton.beattask(i)).level = Task(Rotomoton.beattask(i)).level /2 NEXT 'measure(%swarm_pi + 2) = 66: measure(%swarm_pi + 3) = 66 SW_Sync 66 ndur(5)= 4: ndur(7) = 2: ndur(2)=0: ndur(9)=0 'patcount should still be ok!! StartTask %Swarm_Pi + 2: StartTask %Swarm_Pi + 3 CASE 67 FOR i = 1 TO 5 'decr Task(Rotomoton.beattask(i)).level = Task(Rotomoton.beattask(i)).level /2 NEXT CASE 68 FOR i = 1 TO 5: StopTask Rotomoton.beattask(i): NEXT StopTask %Swarm_Roto_Master CASE 86 FOR i = 1 TO 5 Rotomoton.Command(i) = %ROTO_POSITION OR 1 IF ISFALSE(BIT(task(Rotomoton.Motortask(i)).SWITCH, %TASK_ONOFF)) THEN StartTask Rotomoton.Motortask(i) NEXT CASE 88 ' MSGBOX "88" + STR$(task(%swarm_roto_master).freq) SW_Sync 88 Play %troms_Channel, 64, 10 + %klungvel\4 'was 24 Keypress %troms_channel, 64, 100 '24 Play %troms_Channel, 48, 10 + %klungvel\4 'was 31 Keypress %troms_channel, 48, 100 'sim ... task(Rotomoton.beattask(1)).freq = 20: task(Rotomoton.beattask(1)).level = %rotvel \ 3 task(Rotomoton.beattask(2)).freq = 20: task(Rotomoton.beattask(2)).level = %rotvel \ 3 Rotomoton.Command(1) = %ROTO_POSITION OR 30 IF ISFALSE(BIT(task(Rotomoton.Motortask(1)).SWITCH, %TASK_ONOFF)) THEN StartTask Rotomoton.Motortask(1) Rotomoton.Command(2) = %ROTO_POSITION OR 30 IF ISFALSE(BIT(task(Rotomoton.Motortask(2)).SWITCH, %TASK_ONOFF)) THEN StartTask Rotomoton.Motortask(2) StartTask Rotomoton.BeatTask(1): StartTask Rotomoton.BeatTask(2) CASE 89 ' MSGBOX "89" SW_Sync 89 Play %troms_Channel, 64, %klungvel\3 '24 Keypress %troms_channel, 64, 100 '24 Play %troms_Channel, 48, %klungvel\3 Keypress %troms_channel, 48, 100 task(Rotomoton.beattask(1)).level = %rotvel \ 2: task(Rotomoton.beattask(2)).level = %rotvel \ 2 Rotomoton.Command(1) = %ROTO_POSITION OR 60 IF ISFALSE(BIT(task(Rotomoton.Motortask(1)).SWITCH, %TASK_ONOFF)) THEN StartTask Rotomoton.Motortask(1) Rotomoton.Command(2) = %ROTO_POSITION OR 60 IF ISFALSE(BIT(task(Rotomoton.Motortask(2)).SWITCH, %TASK_ONOFF)) THEN StartTask Rotomoton.Motortask(2) CASE 90 ' MSGBOX "90" 'SW_AllOff Play %troms_Channel, 64, 10 + %klungvel\4 '24 Keypress %troms_channel, 64, 100 '24 Play %troms_Channel, 48, 10 + %klungvel\4 Keypress %troms_channel, 48, 100 Play %troms_Channel, 64, 10 + %klungvel\4 '24 'keep double! Keypress %troms_channel, 64, 100 '24 Play %troms_Channel, 48, 10 + %klungvel\4 Keypress %troms_channel, 48, 100 task(Rotomoton.beattask(1)).level = %rotvel \ 4: task(Rotomoton.beattask(2)).level = %rotvel \ 4 FOR i = 3 TO 5 task(Rotomoton.beattask(i)).level = %rotvel \ 3: task(Rotomoton.beattask(i)).freq = %rotvel \ 3 Rotomoton.command(i) = %ROTO_POSITION OR 60 IF ISFALSE(BIT(task(Rotomoton.Motortask(i)).SWITCH, %TASK_ONOFF)) THEN StartTask Rotomoton.Motortask(i) StartTask Rotomoton.BeatTask(i) NEXT CASE 91 Play %troms_Channel, 64, %klungvel\2 '24 Keypress %troms_channel, 64, 100 '24 Play %troms_Channel, 48, %klungvel\2 Keypress %troms_channel, 48, 100 FOR i = 1 TO 5 task(Rotomoton.BeatTask(i)).level = %rotvel \ 2 Rotomoton.Command(i) = %ROTO_SETMAX IF ISFALSE(BIT(task(Rotomoton.Motortask(i)).SWITCH, %TASK_ONOFF)) THEN StartTask Rotomoton.Motortask(i) NEXT CASE 92 SW_Sync 92 DIALOG DOEVENTS Play %troms_Channel, 64, 0 '24 Play %troms_Channel, 48, 0 FOR i = 1 TO 5 task(Rotomoton.BeatTask(i)).level = %rotvel StopTask Rotomoton.BeatTask(i) NEXT FOR i = 0 TO 3 StopTask %Swarm_Pi + i NEXT ' measure(%Swarm_Together) = 92: StartTask %Swarm_Together SW_AllOff StartTask %Swarm_together StopTask %Swarm_Roto_Master CASE 94 Task(Rotomoton.BeatTask(1)).level = %rotvel * 3/4: Task(Rotomoton.BeatTask(2)).level = %rotvel * 3/4 StartTask Rotomoton.BeatTask(1): StartTask Rotomoton.BeatTask(2) Rotomoton.Command(1) = 0: Rotomoton.Command(2) = 0 IF ISFALSE(BIT(task(Rotomoton.Motortask(1)).SWITCH, %TASK_ONOFF)) THEN StartTask Rotomoton.Motortask(1) IF ISFALSE(BIT(task(Rotomoton.Motortask(2)).SWITCH, %TASK_ONOFF)) THEN StartTask Rotomoton.Motortask(2) CASE 95 Rotomoton.Command(1) = %ROTO_SETMAX: Rotomoton.Command(2) = %ROTO_SETMAX IF ISFALSE(BIT(task(Rotomoton.Motortask(1)).SWITCH, %TASK_ONOFF)) THEN StartTask Rotomoton.Motortask(1) IF ISFALSE(BIT(task(Rotomoton.Motortask(2)).SWITCH, %TASK_ONOFF)) THEN StartTask Rotomoton.Motortask(2) CASE 96 SW_Sync 96 StopTask Rotomoton.BeatTask(1): StopTask Rotomoton.BeatTask(2) 'prepare for mesasure 105 FOR i = 3 TO 5 Rotomoton.Command(i) = 0 IF ISFALSE(BIT(task(Rotomoton.Motortask(i)).SWITCH, %TASK_ONOFF)) THEN StartTask Rotomoton.Motortask(i) NEXT FOR i = 0 TO 3 StopTask %Swarm_Pi + i NEXT SW_AllOff StartTask %Swarm_Together StopTask %Swarm_Roto_Master CASE 105 FOR i = 1 TO 5 task(Rotomoton.beattask(i)).level = %rotvel \ 3: task(Rotomoton.beattask(i)).freq = %rotvel \ 3 Rotomoton.command(i) = %ROTO_POSITION OR 60 IF ISFALSE(BIT(task(Rotomoton.Motortask(i)).SWITCH, %TASK_ONOFF)) THEN StartTask Rotomoton.Motortask(i) StartTask Rotomoton.BeatTask(i) NEXT SW_AllOff CASE 106 FOR i = 1 TO 5 task(Rotomoton.BeatTask(i)).level = %rotvel '\ 2 Rotomoton.Command(i) = %ROTO_SETMAX IF ISFALSE(BIT(task(Rotomoton.Motortask(i)).SWITCH, %TASK_ONOFF)) THEN StartTask Rotomoton.Motortask(i) NEXT CASE 107 FOR i = 0 TO 5: StopTask Rotomoton.BeatTask(i): NEXT StopTask %Swarm_Roto_Master 'together is still on.. 'measure(%swarm_klupi) = 107: beat(%swarm_klupi) = 0 SW_Sync 107 StartTask %swarm_klupi CASE 110 Task(Rotomoton.BeatTask(1)).level = %rotvel * 3/4: Task(Rotomoton.BeatTask(2)).level = %rotvel * 3/4 StartTask Rotomoton.BeatTask(1): StartTask Rotomoton.BeatTask(2) Rotomoton.Command(1) = 0: Rotomoton.Command(2) = 0 IF ISFALSE(BIT(task(Rotomoton.Motortask(1)).SWITCH, %TASK_ONOFF)) THEN StartTask Rotomoton.Motortask(1) IF ISFALSE(BIT(task(Rotomoton.Motortask(2)).SWITCH, %TASK_ONOFF)) THEN StartTask Rotomoton.Motortask(2) CASE 111 FOR i = 1 TO 5 Rotomoton.command(i) = %ROTO_SETMAX IF ISFALSE(BIT(task(Rotomoton.Motortask(i)).SWITCH, %TASK_ONOFF)) THEN StartTask Rotomoton.Motortask(i) NEXT CASE 112 SW_Sync 112 StopTask Rotomoton.Beattask(1): StopTask Rotomoton.BeatTask(2) StopTask %Swarm_Roto_Master StartTask %Swarm_Together StartTask %swarm_klupi CASE 120 SW_Sync 120 CASE 121 SW_Sync 121 Play %troms_Channel, 64, %klungvel\3 Keypress %troms_channel, 64, 100 Play %troms_Channel, 48, %klungvel\3 Keypress %troms_channel, 48, 100 Play %troms_Channel, 64, %klungvel\3 'keep double! Keypress %troms_channel, 64, 100 Play %troms_Channel, 48, %klungvel\3 Keypress %troms_channel, 48, 100 MotTog = &B11111 FOR i = 0 TO 4 StartTask Rotomoton.beattask(1 + i) StartTask %swarm_mot + i NEXT CASE 122 Play %troms_Channel, 64, 0 Play %troms_Channel, 48, 0 SW_Sync 122 FOR i = 0 TO 9 ndur(i) = 0 NEXT ndur(6) = 11: ndur(7) = 8 patcount(6) = 12: patcount(7) = 8 StartTask %Swarm_Pi: StartTask %Swarm_Pi + 3 CASE 123 FOR i = 0 TO 4: StopTask %Swarm_Mot + i: NEXT FOR i = 1 TO 5: task(Rotomoton.BeatTask(i)).level = %Rotvel / 2: NEXT ndur(5) = 4: patcount(5) = 0 StopTask Rotomoton.beattask(4) StopTask Rotomoton.beattask(5) StartTask %Swarm_Pi + 2 CASE 124 StopTask Rotomoton.beattask(2) StopTask Rotomoton.beattask(3) FOR i = 1 TO 5: task(Rotomoton.BeatTask(i)).level = %Rotvel / 3: NEXT ndur(4) = 4: patcount(4) = 18 StartTask %Swarm_Pi + 1 CASE 125 FOR i = 1 TO 5: StopTask Rotomoton.BeatTask(i): NEXT Task(Rotomoton.beattask(1)).freq = (App.Tempo / 60) * 2 / 4 Task(Rotomoton.beattask(2)).freq = (App.Tempo / 60) * 3 / 4 Task(Rotomoton.beattask(3)).freq = (App.Tempo / 60) * 5 / 4 Task(Rotomoton.beattask(4)).freq = (App.Tempo / 60) * 7 / 4 Task(Rotomoton.beattask(5)).freq = (App.Tempo / 60) * 9 / 4 StopTask %Swarm_Roto_Master ndur(3) = 4: patcount(3) = 4 END SELECT INCR measure(%swarm_Roto_Master) CONTROL SET TEXT gh.cockpit, %GMT_TITLE, STR$(measure(%swarm_Roto_Master)) END SUB SUB Sw_mot0 IF BIT(Mottog,0) THEN Rotomoton.Command(1) = %ROTO_SETMAX IF ISFALSE(BIT(task(Rotomoton.Motortask(1)).SWITCH, %TASK_ONOFF)) THEN StartTask Rotomoton.Motortask(1) BIT RESET Mottog, 0 ELSE Rotomoton.Command(1) = 0 IF ISFALSE(BIT(task(Rotomoton.Motortask(1)).SWITCH, %TASK_ONOFF)) THEN StartTask Rotomoton.Motortask(1) BIT SET mottog, 0 END IF END SUB SUB Sw_mot1 IF BIT(Mottog,1) THEN Rotomoton.Command(2) = %ROTO_SETMAX IF ISFALSE(BIT(task(Rotomoton.Motortask(2)).SWITCH, %TASK_ONOFF)) THEN StartTask Rotomoton.Motortask(2) BIT RESET Mottog, 1 ELSE Rotomoton.Command(2) = 0 IF ISFALSE(BIT(task(Rotomoton.Motortask(2)).SWITCH, %TASK_ONOFF)) THEN StartTask Rotomoton.Motortask(2) BIT SET Mottog, 1 END IF END SUB SUB Sw_mot2 IF BIT(Mottog, 2)THEN Rotomoton.Command(3) = %ROTO_SETMAX IF ISFALSE(BIT(task(Rotomoton.Motortask(3)).SWITCH, %TASK_ONOFF)) THEN StartTask Rotomoton.Motortask(3) BIT RESET Mottog, 2 ELSE Rotomoton.Command(3) = 0 IF ISFALSE(BIT(task(Rotomoton.Motortask(3)).SWITCH, %TASK_ONOFF)) THEN StartTask Rotomoton.Motortask(3) BIT SET Mottog, 2 END IF END SUB SUB Sw_mot3 IF BIT(Mottog, 3)THEN Rotomoton.Command(4) = %ROTO_SETMAX IF ISFALSE(BIT(task(Rotomoton.Motortask(4)).SWITCH, %TASK_ONOFF)) THEN StartTask Rotomoton.Motortask(4) BIT RESET Mottog, 3 EXIT SUB ELSE Rotomoton.Command(4) = 0 IF ISFALSE(BIT(task(Rotomoton.Motortask(4)).SWITCH, %TASK_ONOFF)) THEN StartTask Rotomoton.Motortask(4) BIT SET Mottog, 3 END IF END SUB SUB Sw_mot4 IF BIT(Mottog, 4) THEN Rotomoton.Command(5) = %ROTO_SETMAX IF ISFALSE(BIT(task(Rotomoton.Motortask(5)).SWITCH, %TASK_ONOFF)) THEN StartTask Rotomoton.Motortask(5) BIT RESET Mottog, 4 EXIT SUB ELSE Rotomoton.Command(5) = 0 IF ISFALSE(BIT(task(Rotomoton.Motortask(5)).SWITCH, %TASK_ONOFF)) THEN StartTask Rotomoton.Motortask(5) BIT SET Mottog, 4 END IF END SUB 'END SUB SUB Swarm_Piano0 ' voices 0, 3 ', 6 and 8 LOCAL levl AS BYTE LOCAL i AS BYTE STATIC klDouble AS LONG STATIC kltrans AS LONG STATIC coltrom AS LONG IF ISFALSE measure(%swarm_pi) THEN 'init pat(0) = REPEAT$(20, CHR$(0)) 'rest pat(3) = REPEAT$(10, CHR$(68) + CHR$(%avvel) ) 'note 68, g# pat(6) = REPEAT$(10, CHR$(47) + CHR$(%avvel) ) 'note 47, b pat(8) = REPEAT$(20, CHR$(0)) 'rest ndur(0) = 0: ndur(3) = 2: ndur(6) = 4: ndur(8) = 0 INCR measure(%swarm_pi) END IF IF (measure(%swarm_pi) = 51) AND ((beat(%swarm_Pi) = %false) OR (beat(%swarm_Pi) = 24)) THEN 'patch for bug in score... INCR beat(%swarm_Pi) INCR Patcount(6): INCR patcount(6) EXIT SUB END IF 'Play it IF ndur(0) THEN IF ISFALSE( (beat(%swarm_pi) - ndur(0)) MOD 4 ) THEN '9 notes per measure 'note off IF LastNote(0) THEN NoteOff task(%Swarm_Pi).channel, lastnote(0) LastNote(0) = 0 END IF END IF IF ISFALSE(beat(%swarm_pi) MOD 4) THEN 'note on IF LastNote(0) THEN NoteOff task(%Swarm_Pi).channel, lastnote(0) LastNote(0) = 0 END IF INCR PatCount(0) IF PatCount(0) > 20 THEN PatCount(0) = 1 LastNote(0) = ASC(MID$(pat(0), patcount(0), 1)) INCR PatCount(0) levl = ASC(MID$(pat(0), patcount(0) , 1)) Play task(%swarm_Pi).channel, LastNote(0), levl END IF END IF IF ndur(3) THEN IF ISFALSE( (beat(%swarm_pi) - ndur(3)) MOD 4 ) THEN IF LastNote(3) THEN NoteOff task(%Swarm_Pi).channel, lastnote(3) LastNote(3) = 0 END IF END IF IF ISFALSE(beat(%swarm_pi) MOD 4) THEN IF LastNote(3) THEN NoteOff task(%Swarm_Pi).channel, lastnote(3) LastNote(3) = 0 END IF INCR PatCount(3) IF PatCount(3) > 20 THEN PatCount(3) = 1 LastNote(3) = ASC(MID$(pat(3), patcount(3), 1)) INCR PatCount(3) levl = ASC(MID$(pat(3),patcount(3), 1)) Play task(%swarm_Pi).channel, LastNote(3), levl END IF END IF IF ndur(6) THEN IF ISFALSE( (beat(%swarm_pi) - ndur(6)) MOD 12 ) THEN '3 notes per measure IF LastNote(6) THEN NoteOff task(%Swarm_Pi).channel, lastnote(6) LastNote(6) = 0 END IF END IF IF ISFALSE(beat(%swarm_pi) MOD 12) THEN IF LastNote(6) THEN NoteOff task(%Swarm_Pi).channel, lastnote(6) LastNote(6) = 0 END IF INCR PatCount(6) IF PatCount(6) > 20 THEN PatCount(6) = 1 LastNote(6) = ASC(MID$(pat(6), patcount(6), 1)) INCR PatCount(6) levl = ASC(MID$(pat(6),patcount(6), 1)) Play task(%swarm_Pi).channel, LastNote(6), levl END IF END IF IF ndur(8) THEN IF ISFALSE( (beat(%swarm_pi) - ndur(8)) MOD 12 ) THEN '3 notes per measure IF LastNote(8) THEN NoteOff task(%Swarm_Pi).channel, lastnote(8) LastNote(8) = 0 END IF END IF IF ISFALSE(beat(%swarm_pi) MOD 12) THEN IF LastNote(8) THEN NoteOff task(%Swarm_Pi).channel, lastnote(8) LastNote(8) = 0 END IF INCR PatCount(8) IF PatCount(8) > 20 THEN PatCount(8) = 1 LastNote(8) = ASC(MID$(pat(8), patcount(8), 1)) INCR PatCount(8) levl = ASC(MID$(pat(8),patcount(8), 1)) Play task(%swarm_Pi).channel, LastNote(8), levl IF coltrom THEN play %Troms_Channel, 31, %Tromvel IF kldouble = 8 THEN ' Play %vibi_channel, LastNote(8) + kltrans + 12, %klungvel Play %vibi_channel, LastNote(8) + kltrans + 24, %klungvel END IF END IF END IF 'here we should change patterns @ certain mesures IF beat(%swarm_pi) = 35 THEN SELECT CASE measure(%swarm_pi) CASE 11 '= just before measure 12 pat(6) = REPEAT$(20, CHR$(%avvel)) MID$(pat(6), 1) = CHR$(47) : MID$(pat(6), 3) = CHR$(48) : MID$(pat(6), 5) = CHR$(49) : MID$(pat(6), 7) = CHR$(50) : MID$(pat(6), 9) = CHR$(51) MID$(pat(6), 11) = CHR$(52) : MID$(pat(6), 13) = CHR$(51) : MID$(pat(6), 15) = CHR$(50) : MID$(pat(6), 17) = CHR$(49) : MID$(pat(6), 19) = CHR$(48) patcount(6) = 0: ndur(6) = 11 '?12 CASE 18 pat(3) = REPEAT$(20, CHR$(%avvel)) MID$(pat(3), 1) = CHR$(68) : MID$(pat(3), 3) = CHR$(69) : MID$(pat(3), 5) = CHR$(70) : MID$(pat(3), 7) = CHR$(71) : MID$(pat(3), 9) = CHR$(72) MID$(pat(3), 11) = CHR$(73) : MID$(pat(3), 13) = CHR$(72) : MID$(pat(3), 15) = CHR$(71) : MID$(pat(3), 17) = CHR$(70) : MID$(pat(3), 19) = CHR$(69) patcount(3) = 0:ndur(3) = 4 CASE 26 pat(3) = REPEAT$(20, CHR$(0)): pat(6) = REPEAT$(20, CHR$(0)) ndur(3) = 0: ndur(6) = 0 CASE 31 pat(6) = REPEAT$(20, CHR$(%fvel)) MID$(pat(6), 1) = CHR$(47) : MID$(pat(6), 3) = CHR$(48) : MID$(pat(6), 5) = CHR$(49) : MID$(pat(6), 7) = CHR$(50) : MID$(pat(6), 9) = CHR$(51) MID$(pat(6), 11) = CHR$(52) : MID$(pat(6), 13) = CHR$(51) : MID$(pat(6), 15) = CHR$(50) : MID$(pat(6), 17) = CHR$(49) : MID$(pat(6), 19) = CHR$(48) patcount(6) = 0: ndur(6) = 11 '?12 pat(8) = REPEAT$(20, CHR$(%fvel)) MID$(pat(8), 1) = CHR$(35) : MID$(pat(8), 3) = CHR$(36) : MID$(pat(8), 5) = CHR$(37) : MID$(pat(8), 7) = CHR$(38) : MID$(pat(8), 9) = CHR$(39) MID$(pat(8), 11) = CHR$(40) : MID$(pat(8), 13) = CHR$(39) : MID$(pat(8), 15) = CHR$(38) : MID$(pat(8), 17) = CHR$(37) : MID$(pat(8), 19) = CHR$(36) patcount(8) = 0: ndur(8) = 11 '?12 CASE 38 pat(0) = REPEAT$(20, CHR$(%fvel)) MID$(pat(0), 1) = CHR$(92) : MID$(pat(0), 3) = CHR$(93) : MID$(pat(0), 5) = CHR$(94) : MID$(pat(0), 7) = CHR$(95) : MID$(pat(0), 9) = CHR$(96) MID$(pat(0), 11) = CHR$(97) : MID$(pat(0), 13) = CHR$(96) : MID$(pat(0), 15) = CHR$(95) : MID$(pat(0), 17) = CHR$(94) : MID$(pat(0), 19) = CHR$(93) patcount(0) = 0: ndur(0) = 1 pat(3) = REPEAT$(20, CHR$(%fvel)) MID$(pat(3), 1) = CHR$(80) : MID$(pat(3), 3) = CHR$(81) : MID$(pat(3), 5) = CHR$(82) : MID$(pat(3), 7) = CHR$(83) : MID$(pat(3), 9) = CHR$(84) MID$(pat(3), 11) = CHR$(85) : MID$(pat(3), 13) = CHR$(84) : MID$(pat(3), 15) = CHR$(83) : MID$(pat(3), 17) = CHR$(82) : MID$(pat(3), 19) = CHR$(81) patcount(3) = 0: ndur(3) = 1 CASE 45 ' pat(0) = REPEAT$(20, CHR$(0)):pat(3) = REPEAT$(20, CHR$(0)): pat(6) = REPEAT$(20, CHR$(0)): pat(8) = REPEAT$(20, CHR$(0)) ' ndur(0) = 0: ndur(3) = 0: ndur(6) = 0: ndur(8) = 0 FOR i = 0 TO 3: StopTask %swarm_pi + i: NEXT CASE 49 pat(3) = REPEAT$(20, CHR$(0)): ndur(3) = 0 CASE 55 ndur(3) = %false: ndur(6) = %false ' StopTask %swarm_pi + 1 ' StopTask %swarm_pi + 2 ' StopTask %swarm_pi + 3 CASE 63 ndur(3) = %false: ndur(6) = %false ' StopTask %swarm_pi + 1 ' StopTask %swarm_pi + 2 ' StopTask %swarm_pi + 3 CASE 73 Patcount(3) = 8: ndur(3) = 4 CASE 81 pat(0) = REPEAT$(20, CHR$(%fvel)) MID$(pat(0), 1) = CHR$(32) : MID$(pat(0), 3) = CHR$(33) : MID$(pat(0), 5) = CHR$(34) : MID$(pat(0), 7) = CHR$(35) : MID$(pat(0), 9) = CHR$(36) MID$(pat(0), 11) = CHR$(37) : MID$(pat(0), 13) = CHR$(36) : MID$(pat(0), 15) = CHR$(35) : MID$(pat(0), 17) = CHR$(34) : MID$(pat(0), 19) = CHR$(33) patcount(0) = 12: ndur(0)= 4 pat(8) = REPEAT$(20, CHR$(%fvel)) MID$(pat(8), 1) = CHR$(95) : MID$(pat(8), 3) = CHR$(96) : MID$(pat(8), 5) = CHR$(97) : MID$(pat(8), 7) = CHR$(98) : MID$(pat(8), 9) = CHR$(99) MID$(pat(8), 11) = CHR$(100) : MID$(pat(8), 13) = CHR$(99) : MID$(pat(8), 15) = CHR$(98) : MID$(pat(8), 17) = CHR$(97) : MID$(pat(8), 19) = CHR$(96) patcount(8) = 6:ndur(8) = 11 klDouble = 8: klTrans = - 36 CASE 87 ' MSGBOX STR$(kldouble) CASE 89 ndur(0) = 0: ndur(8) = 0 CASE 91, 95 StopTask %Swarm_Pi CASE 98 'ndur(0) = 0: ndur(3) = 0: ndur(6) = 0: ndur(8) = 0 FOR i = 0 TO 9: ndur(i) = 0: NEXT CASE 118 ndur(3) = 0: ndur(6) = 0: ndur(8) = 0 CASE 126 ndur(8) = 11: patcount(8) = 4: kldouble = 8 CASE 129 coltrom = 1 CASE 137 kldouble = 0 CASE 138 coltrom = 0 CASE 140 ndur(0) = 0: ndur(3) = 0: ndur(6) = 0: ndur(8) = 0 END SELECT ELSEIF beat(%swarm_pi) = 0 THEN SELECT CASE measure(%swarm_pi) CASE 56 SW_AllOff 'measure(%swarm_roto_master) = 56 Mottog = &B01101 'start resp duudu SW_tempo 80 FOR i = 1 TO 5: task(Rotomoton.beattask(i)).freq = 20: NEXT SW_Sync 56 FOR i = 0 TO 4 StartTask Rotomoton.beattask(1 + i) StartTask %swarm_mot + i NEXT StartTask %swarm_klupi StartTask %swarm_roto_master StopTask %swarm_Pi EXIT SUB CASE 62 SW_Sync 62 'NEW 011130 CASE 64 'MOVED FROM BAR 63.35 @ 011130 StopTask %swarm_pi + 1 StopTask %swarm_pi + 2 StopTask %swarm_pi + 3 CASE 64 SW_AllOff StopTask %swarm_pi CASE 94 klDouble = 0 CASE 98 kldouble = 8 CASE 99 klDouble = 0 FOR i = 0 TO 3 StopTask %Swarm_Pi + i NEXT SW_Sync 99 StartTask %Swarm_Together 'StopTask %Swarm_Pi CASE 119 FOR i = 0 TO 3: stoptask %Swarm_Pi + i: NEXT SW_tempo 120 SW_Sync 119 StartTask %Swarm_Together CASE 130 coltrom = 1 CASE 135 coltrom = 0 CASE 138 ' coltrom = 0 klDouble = 0 CASE 140 SW_Sync 140 CASE 141 SW_Sync 141 FOR i = 1 TO 3 StopTask %Swarm_Pi + i NEXT ndur(0) = 0: ndur(3) = 0: ndur(6) = 0: ndur(8) = 0 ' StartTask %Swarm_tempo 'just for all notes off CASE 142 SW_ALLOff StopTask %swarm_Pi END SELECT END IF 'next beat 36 steps: 0 to 35!! INCR beat(%swarm_pi) IF beat(%swarm_pi) > 35 THEN beat(%swarm_pi) = 0 INCR measure(%swarm_pi) END IF END SUB SUB Swarm_Piano1 ' voices 1 and 4 LOCAL levl AS BYTE IF ISFALSE measure(%swarm_pi + 1) THEN 'init pat(1) = REPEAT$(20, CHR$(0)) 'rest pat(4) = REPEAT$(10, CHR$(59) + CHR$(%avvel) ) 'note 59, b ndur(1) = 0 ndur(4) = 2 INCR measure(%swarm_pi + 1) END IF 'Play it IF ndur(1) THEN IF ISFALSE( (beat(%swarm_pi + 1) - ndur(1)) MOD 4 ) THEN '9 notes per measure 'note off IF LastNote(1) THEN NoteOff task(%Swarm_Pi + 1).channel, lastnote(1) LastNote(1) = 0 END IF END IF IF ISFALSE(beat(%swarm_pi + 1) MOD 4) THEN 'note on IF LastNote(1) THEN NoteOff task(%Swarm_Pi + 1).channel, lastnote(1) LastNote(1) = 0 END IF INCR PatCount(1) IF PatCount(1) > 20 THEN PatCount(1) = 1 LastNote(1) = ASC(MID$(pat(1), patcount(1), 1)) INCR PatCount(1) levl = ASC(MID$(pat(1),patcount(1), 1)) Play task(%swarm_Pi + 1).channel, LastNote(1), levl END IF END IF IF ndur(4) THEN IF ISFALSE( (beat(%swarm_pi + 1) - ndur(4)) MOD 4 ) THEN IF LastNote(4) THEN NoteOff task(%Swarm_Pi + 1).channel, lastnote(4) LastNote(4) = 0 END IF END IF IF ISFALSE(beat(%swarm_pi + 1) MOD 4) THEN IF LastNote(4) THEN NoteOff task(%Swarm_Pi + 1).channel, lastnote(4) LastNote(4) = 0 END IF INCR PatCount(4) IF PatCount(4) > 20 THEN PatCount(4) = 1 LastNote(4) = ASC(MID$(pat(4), patcount(4), 1)) INCR PatCount(4) levl = ASC(MID$(pat(4),patcount(4), 1)) Play task(%swarm_Pi + 1).channel, LastNote(4), levl END IF END IF 'here we should change patterns @ certain mesures IF beat(%swarm_pi + 1) = 25 THEN SELECT CASE measure(%swarm_pi + 1) CASE 8 'just before 9 pat(4) = REPEAT$(20, CHR$(%avvel)) MID$(pat(4), 1) = CHR$(59) : MID$(pat(4), 3) = CHR$(60) : MID$(pat(4), 5) = CHR$(61) : MID$(pat(4), 7) = CHR$(62) : MID$(pat(4), 9) = CHR$(63) MID$(pat(4), 11) = CHR$(64) : MID$(pat(4), 13) = CHR$(63) : MID$(pat(4), 15) = CHR$(62) : MID$(pat(4), 17) = CHR$(61) : MID$(pat(4), 19) = CHR$(60) patcount(4) = 0 ndur(4) = 4 CASE 26 pat(4) = REPEAT$(20, CHR$(0)) ndur(4) = 0 CASE 28 pat(1) = REPEAT$(20, CHR$(%fvel)) MID$(pat(1), 1) = CHR$(71) : MID$(pat(1), 3) = CHR$(72) : MID$(pat(1), 5) = CHR$(73) : MID$(pat(1), 7) = CHR$(74) : MID$(pat(1), 9) = CHR$(75) MID$(pat(1), 11) = CHR$(76) : MID$(pat(1), 13) = CHR$(75) : MID$(pat(1), 15) = CHR$(74) : MID$(pat(1), 17) = CHR$(73) : MID$(pat(1), 19) = CHR$(72) patcount(1) = 0 ndur(1) = 1 pat(4) = REPEAT$(20, CHR$(%fvel)) MID$(pat(4), 1) = CHR$(59) : MID$(pat(4), 3) = CHR$(60) : MID$(pat(4), 5) = CHR$(61) : MID$(pat(4), 7) = CHR$(62) : MID$(pat(4), 9) = CHR$(63) MID$(pat(4), 11) = CHR$(64) : MID$(pat(4), 13) = CHR$(63) : MID$(pat(4), 15) = CHR$(62) : MID$(pat(4), 17) = CHR$(61) : MID$(pat(4), 19) = CHR$(60) patcount(4) = 0 ndur(4) = 1 CASE 45 ' pat(1) = REPEAT$(20, CHR$(0)) ' ndur(1) = 0 ' pat(4) = REPEAT$(20, CHR$(0)) ' ndur(4) = 0 CASE 55 ' ndur(3) = %false: ndur(6) = %false StopTask %swarm_pi + 1 StopTask %swarm_pi + 2 StopTask %swarm_pi + 3 CASE 83 pat(1) = REPEAT$(20, CHR$(%fvel)) MID$(pat(1), 1) = CHR$(23) : MID$(pat(1), 3) = CHR$(24) : MID$(pat(1), 5) = CHR$(25) : MID$(pat(1), 7) = CHR$(26) : MID$(pat(1), 9) = CHR$(27) MID$(pat(1), 11) = CHR$(28) : MID$(pat(1), 13) = CHR$(27) : MID$(pat(1), 15) = CHR$(26) : MID$(pat(1), 17) = CHR$(25) : MID$(pat(1), 19) = CHR$(24) patcount(1) = 4: ndur(1) = 4 CASE 89 ndur(1) = 0 CASE 91, 95, 98 StopTask %Swarm_Pi + 1 CASE 118 ndur(4) = 0 CASE 140 ndur(1) = 0: ndur(4) = 0 StopTask %swarm_Pi + 1 END SELECT ELSEIF beat(%swarm_pi + 1) = 0 THEN '011012 0 was 1 wich caused an osillator together with SW_Sync.... SELECT CASE measure(%swarm_pi + 1) CASE 51 pat(4) = REPEAT$(20, CHR$(0)) ndur(4) = 0 CASE 86 SW_Tempo 120 SW_Sync 86 StartTask %Swarm_Roto_Master END SELECT END IF 'next beat 28 steps: 0 to 27!! INCR beat(%swarm_pi + 1) IF beat(%swarm_pi + 1) > 27 THEN beat(%swarm_pi + 1) = 0 INCR measure(%swarm_pi + 1) END IF END SUB SUB Swarm_Piano2 ' voices 2 and 5 LOCAL levl AS BYTE STATIC kldouble AS BYTE STATIC kltrans AS INTEGER STATIC init AS LONG IF ISFALSE init THEN 'init init = %true pat(2) = REPEAT$(20, CHR$(0)) 'rest pat(5) = REPEAT$(10, CHR$(51) + CHR$(%avvel) ) 'note 51, d# ndur(2) = 0 ndur(5) = 2 INCR measure(%swarm_pi + 2) END IF 'Play it IF ndur(2) THEN IF ISFALSE( (beat(%swarm_pi + 2) - ndur(2)) MOD 4 ) THEN '9 notes per measure 'note off IF LastNote(2) THEN NoteOff task(%Swarm_Pi + 2).channel, lastnote(2) LastNote(2) = 0 END IF END IF IF ISFALSE(beat(%swarm_pi + 2) MOD 4) THEN 'note on IF LastNote(2) THEN NoteOff task(%Swarm_Pi + 2).channel, lastnote(2) LastNote(2) = 0 END IF INCR PatCount(2) IF PatCount(2) > 20 THEN PatCount(2) = 1 LastNote(2) = ASC(MID$(pat(2), patcount(2), 1)) INCR PatCount(2) levl = ASC(MID$(pat(2),patcount(2), 1)) Play task(%swarm_Pi + 2).channel, LastNote(2), levl IF kldouble = 2 THEN ' Play %vibi_channel, LastNote(2) + kltrans + 12, %klungvel Play %vibi_channel, LastNote(2) + kltrans + 24, %klungvel END IF END IF END IF IF ndur(5) THEN IF ISFALSE( (beat(%swarm_pi + 2) - ndur(5)) MOD 4 ) THEN IF LastNote(5) THEN NoteOff task(%Swarm_Pi + 2).channel, lastnote(5) LastNote(5) = 0 END IF END IF IF ISFALSE(beat(%swarm_pi + 2) MOD 4) THEN IF LastNote(5) THEN NoteOff task(%Swarm_Pi + 2).channel, lastnote(5) LastNote(5) = 0 END IF INCR PatCount(5) IF PatCount(5) > 20 THEN PatCount(5) = 1 LastNote(5) = ASC(MID$(pat(5), patcount(5), 1)) INCR PatCount(5) levl = ASC(MID$(pat(5),patcount(5), 1)) Play task(%swarm_Pi + 2).channel, LastNote(5), levl IF kldouble = 5 THEN ' Play %vibi_channel, LastNote(5) + kltrans + 12, %klungvel Play %vibi_channel, LastNote(5) + kltrans + 24, %klungvel END IF END IF END IF 'here we should change patterns @ certain mesures IF beat(%swarm_pi + 2) = 19 THEN SELECT CASE measure(%swarm_pi + 2) CASE 4 pat(5) = REPEAT$(20, CHR$(%avvel)) MID$(pat(5), 1) = CHR$(51) : MID$(pat(5), 3) = CHR$(52) : MID$(pat(5), 5) = CHR$(53) : MID$(pat(5), 7) = CHR$(54) : MID$(pat(5), 9) = CHR$(55) MID$(pat(5), 11) = CHR$(56) : MID$(pat(5), 13) = CHR$(55) : MID$(pat(5), 15) = CHR$(54) : MID$(pat(5), 17) = CHR$(53) : MID$(pat(5), 19) = CHR$(52) patcount(5) = 0 ndur(5) = 4 CASE 26 pat(2) = REPEAT$(20, CHR$(%fvel)) MID$(pat(2), 1) = CHR$(63) : MID$(pat(2), 3) = CHR$(64) : MID$(pat(2), 5) = CHR$(65) : MID$(pat(2), 7) = CHR$(66) : MID$(pat(2), 9) = CHR$(67) MID$(pat(2), 11) = CHR$(68) : MID$(pat(2), 13) = CHR$(67) : MID$(pat(2), 15) = CHR$(66) : MID$(pat(2), 17) = CHR$(65) : MID$(pat(2), 19) = CHR$(64) patcount(2) = 0: ndur(2) = 1 pat(5) = REPEAT$(20, CHR$(%fvel)) MID$(pat(5), 1) = CHR$(51) : MID$(pat(5), 3) = CHR$(52) : MID$(pat(5), 5) = CHR$(53) : MID$(pat(5), 7) = CHR$(54) : MID$(pat(5), 9) = CHR$(55) MID$(pat(5), 11) = CHR$(56) : MID$(pat(5), 13) = CHR$(55) : MID$(pat(5), 15) = CHR$(54) : MID$(pat(5), 17) = CHR$(53) : MID$(pat(5), 19) = CHR$(52) patcount(5) = 0: ndur(5) = 1 kldouble = 5:kltrans = 0 '-12 CASE 45, 48 ' kldouble = 0 ' pat(2) = REPEAT$(20, CHR$(0)) ' ndur(2) = 0 ' pat(5) = REPEAT$(20, CHR$(0)) ' ndur(5) = 0 CASE 69 kldouble = 0 StopTask %swarm_Pi + 2 CASE 85 ' MSGBOX "85" kldouble = 0 pat(2) = REPEAT$(20, CHR$(%fvel)) MID$(pat(2), 1) = CHR$(39) : MID$(pat(2), 3) = CHR$(40) : MID$(pat(2), 5) = CHR$(41) : MID$(pat(2), 7) = CHR$(42) : MID$(pat(2), 9) = CHR$(43) MID$(pat(2), 11) = CHR$(44) : MID$(pat(2), 13) = CHR$(43) : MID$(pat(2), 15) = CHR$(42) : MID$(pat(2), 17) = CHR$(41) : MID$(pat(2), 19) = CHR$(40) patcount(2) = 0: ndur(2) = 4 CASE 89 ndur(2) = 0 CASE 91, 95, 98 StopTask %Swarm_Pi + 2 CASE 118 ndur(5) = 0 CASE 140 ndur(2) = 0: ndur(5) = 0 StopTask %Swarm_Pi + 2 END SELECT ELSEIF beat(%swarm_pi + 2) = 0 THEN '1 SELECT CASE measure(%swarm_pi + 2) CASE 48 KlDouble = 0 CASE 51 kldouble = 0 pat(5) = REPEAT$(20, CHR$(0)) ndur(5) = 0 CASE 86 kldouble = 0 END SELECT END IF 'next beat INCR beat(%swarm_pi + 2) IF beat(%swarm_pi + 2) > 19 THEN beat(%swarm_pi + 2) = 0 INCR measure(%swarm_pi + 2) END IF END SUB SUB Swarm_Piano3 ' voices 7 and 9 LOCAL levl AS BYTE LOCAL i AS LONG STATIC KlDouble AS LONG STATIC KlTrans AS LONG STATIC init AS LONG STATIC coltrom AS LONG IF ISFALSE init THEN 'init pat(7) = REPEAT$(10, CHR$(45) + CHR$(%avvel)) 'note 45, a pat(9) = REPEAT$(20, CHR$(0)) 'rest ndur(7) = 2 ndur(9) = 0 init = %true INCR measure(%swarm_pi + 3) END IF 'Play it IF ndur(7) THEN IF ISFALSE( (beat(%swarm_pi + 3) - ndur(7)) MOD 4 ) THEN '2 notes per measure 'note off IF LastNote(7) THEN NoteOff task(%Swarm_Pi + 7).channel, lastnote(7) LastNote(7) = 0 END IF END IF IF ISFALSE(beat(%swarm_pi + 3) MOD 4) THEN 'note on IF LastNote(7) THEN NoteOff task(%Swarm_Pi + 3).channel, lastnote(7) LastNote(7) = 0 END IF INCR PatCount(7) IF PatCount(7) > 20 THEN PatCount(7) = 1 LastNote(7) = ASC(MID$(pat(7), patcount(7), 1)) INCR PatCount(7) levl = ASC(MID$(pat(7),patcount(7), 1)) Play task(%swarm_Pi + 3).channel, LastNote(7), levl IF kldouble = 7 THEN ' Play %vibi_channel, LastNote(7) + kltrans + 12, %klungvel Play %vibi_channel, LastNote(7) + kltrans + 24, %klungvel END IF END IF END IF IF ndur(9) THEN IF ISFALSE( (beat(%swarm_pi + 3) - ndur(9)) MOD 4 ) THEN IF LastNote(9) THEN NoteOff task(%Swarm_Pi + 3).channel, lastnote(9) LastNote(9) = 0 END IF END IF IF ISFALSE(beat(%swarm_pi + 3) MOD 4) THEN IF LastNote(9) THEN NoteOff task(%Swarm_Pi + 3).channel, lastnote(9) LastNote(9) = 0 END IF INCR PatCount(9) IF PatCount(9) > 20 THEN PatCount(9) = 1 LastNote(9) = ASC(MID$(pat(9), patcount(9), 1)) INCR PatCount(9) levl = ASC(MID$(pat(9),patcount(9), 1)) Play task(%swarm_Pi + 3).channel, LastNote(9), levl IF ColTrom THEN Play %Troms_Channel, 24, %tromvel IF kldouble = 9 THEN ' Play %vibi_channel, LastNote(9) + kltrans + 12, %klungvel Play %vibi_channel, LastNote(9) + kltrans + 24, %klungvel END IF END IF END IF 'here we should change patterns @ certain mesures ' IF (measure(%swarm_pi + 3) = 17) AND (beat(%swarm_pi + 3) = 1) THEN StartTask %Swarm_Roto_Master IF beat(%swarm_pi + 3) = 7 THEN SELECT CASE measure(%swarm_pi + 3) CASE 20 pat(7) = REPEAT$(20, CHR$(%avvel)) MID$(pat(7), 1) = CHR$(45) : MID$(pat(7), 3) = CHR$(46) : MID$(pat(7), 5) = CHR$(47) : MID$(pat(7), 7) = CHR$(48) : MID$(pat(7), 9) = CHR$(49) MID$(pat(7), 11) = CHR$(50) : MID$(pat(7), 13) = CHR$(49) : MID$(pat(7), 15) = CHR$(48) : MID$(pat(7), 17) = CHR$(47) : MID$(pat(7), 19) = CHR$(46) patcount(7) = 0: ndur(7) = 8 CASE 26 pat(7) = REPEAT$(20, CHR$(0)): ndur(7) = 1 CASE 40 pat(7) = REPEAT$(20, CHR$(%fvel)) MID$(pat(7), 1) = CHR$(45) : MID$(pat(7), 3) = CHR$(46) : MID$(pat(7), 5) = CHR$(47) : MID$(pat(7), 7) = CHR$(48) : MID$(pat(7), 9) = CHR$(49) MID$(pat(7), 11) = CHR$(50) : MID$(pat(7), 13) = CHR$(49) : MID$(pat(7), 15) = CHR$(48) : MID$(pat(7), 17) = CHR$(47) : MID$(pat(7), 19) = CHR$(46) patcount(7) = 0: ndur(7) = 8 pat(9) = REPEAT$(20, CHR$(%fvel)) MID$(pat(9), 1) = CHR$(33) : MID$(pat(9), 3) = CHR$(34) : MID$(pat(9), 5) = CHR$(35) : MID$(pat(9), 7) = CHR$(36) : MID$(pat(9), 9) = CHR$(37) MID$(pat(9), 11) = CHR$(38) : MID$(pat(9), 13) = CHR$(37) : MID$(pat(9), 15) = CHR$(36) : MID$(pat(9), 17) = CHR$(35) : MID$(pat(9), 19) = CHR$(34) patcount(9) = 0: ndur(9) = 8 CASE 45 ' pat(7) = REPEAT$(20, CHR$(0)): pat(9) = REPEAT$(20, CHR$(0)) ' ndur(7) = 0: ndur(9) = 0 CASE 79 kldouble = 7: klTrans = 12 pat(9) = REPEAT$(20, CHR$(%fvel)) MID$(pat(9), 1) = CHR$(93) : MID$(pat(9), 3) = CHR$(94) : MID$(pat(9), 5) = CHR$(95) : MID$(pat(9), 7) = CHR$(96) : MID$(pat(9), 9) = CHR$(97) MID$(pat(9), 11) = CHR$(98) : MID$(pat(9), 13) = CHR$(97) : MID$(pat(9), 15) = CHR$(96) : MID$(pat(9), 17) = CHR$(95) : MID$(pat(9), 19) = CHR$(94) patcount(9) = 0:ndur(9) = 8 CASE 89 ndur(9) = 0 klDouble = 0 CASE 91, 95, 98 klDouble = 0 StopTask %Swarm_Pi + 3 CASE 119 ndur(7) = 0: ndur(9) =0 CASE 125 ndur(9) = 8: patcount(9) = 8: kldouble= 9: kltrans = -36 CASE 128 coltrom = 1 CASE 135 coltrom = 0 CASE 138 kldouble = 0 CASE 140 ndur(7) = 0: ndur(9) = 0 StopTask %Swarm_Pi + 3 END SELECT ELSEIF beat(%swarm_Pi + 3) = 0 THEN SELECT CASE measure(%swarm_Pi + 3) CASE 17 StartTask %Swarm_Roto_Master CASE 70 SW_Sync 70 patcount(4)= 8: ndur(4) = 4 patcount(6)= 10: ndur(6) = 11 ndur(0) = 0: ndur(1) = 0: ndur(2) = 0: ndur(3) = 0: ndur(5) = 0: ndur(8) = 0: ndur(9) = 0 StartTask %swarm_Pi: StartTask %Swarm_Pi + 1: startTask %swarm_klupi CASE 78 ndur(5) = 4 'patcount still ok SW_Sync 78 StartTask %Swarm_Pi + 2 CASE 94 klDouble = 0 CASE 98 klDouble = 9 CASE 129 coltrom = 1 StartTask Rotomoton.BeatTask(1): StartTask Rotomoton.BeatTask(3) CASE 130 StartTask Rotomoton.BeatTask(2):StartTask Rotomoton.BeatTask(4) CASE 131 SW_Sync 131 StartTask Rotomoton.BeatTask(5) StartTask %swarm_klupi CASE 135 FOR i = 1 TO 5: StopTask Rotomoton.BeatTask(i): NEXT CASE 139 SW_Tempo 30 SW_Sync 139 LOCAL j AS LONG FOR i = 3 TO 9 FOR j = 2 TO 20 STEP 2 MID$(pat(i), j) = CHR$(%fvel / 2) NEXT NEXT END SELECT END IF 'next beat 18 steps: 0 to 17!! INCR beat(%swarm_pi + 3) IF beat(%swarm_pi + 3) > 7 THEN beat(%swarm_pi + 3) = 0 INCR measure(%swarm_pi + 3) CONTROL SET TEXT gh.Cockpit, %GMT_MSG1, STR$(measure(%swarm_pi + 3)) + STR$(beat(%swarm_Pi + 3)) END IF END SUB SUB Swarm_Tempo 'task ' if measure(%swarm_pi+3) > 48 and LOCAL i AS LONG STATIC restarttime AS LONG ' CONTROL SET TEXT gh.cockpit, %gmt_msg2, STR$(restarttime) + STR$(TIMER) IF (restarttime>0) AND (TIMER >= restarttime) THEN restarttime = -1 '%false SW_Tempo 20 SW_Sync 54 pat(0) = REPEAT$(20, CHR$(0)) 'rest pat(1) = REPEAT$(10, CHR$(68) + CHR$(%avvel) ) 'note 68, g# pat(2) = REPEAT$(10, CHR$(47) + CHR$(%avvel) ) 'note 47, b pat(8) = REPEAT$(20, CHR$(0)) 'rest pat(9) = REPEAT$(20, CHR$(0)) 'rest ndur(0) = %false: ndur(1) = %false: ndur(2) = %false: ndur(8) = %false: ndur(9) = %false pat(3) = REPEAT$(20, CHR$(%avvel)) MID$(pat(3), 1) = CHR$(68) : MID$(pat(3), 3) = CHR$(69) : MID$(pat(3), 5) = CHR$(70) : MID$(pat(3), 7) = CHR$(71) : MID$(pat(3), 9) = CHR$(72) MID$(pat(3), 11) = CHR$(73) : MID$(pat(3), 13) = CHR$(72) : MID$(pat(3), 15) = CHR$(71) : MID$(pat(3), 17) = CHR$(70) : MID$(pat(3), 19) = CHR$(69) patcount(3) = 14: ndur(3) = 4 pat(4) = REPEAT$(20, CHR$(%avvel)) MID$(pat(4), 1) = CHR$(59) : MID$(pat(4), 3) = CHR$(60) : MID$(pat(4), 5) = CHR$(61) : MID$(pat(4), 7) = CHR$(62) : MID$(pat(4), 9) = CHR$(63) MID$(pat(4), 11) = CHR$(64) : MID$(pat(4), 13) = CHR$(63) : MID$(pat(4), 15) = CHR$(62) : MID$(pat(4), 17) = CHR$(61) : MID$(pat(4), 19) = CHR$(60) patcount(4) = 8: ndur(4) = 6 pat(5) = REPEAT$(20, CHR$(%avvel)) MID$(pat(5), 1) = CHR$(51) : MID$(pat(5), 3) = CHR$(52) : MID$(pat(5), 5) = CHR$(53) : MID$(pat(5), 7) = CHR$(54) : MID$(pat(5), 9) = CHR$(55) MID$(pat(5), 11) = CHR$(56) : MID$(pat(5), 13) = CHR$(55) : MID$(pat(5), 15) = CHR$(54) : MID$(pat(5), 17) = CHR$(53) : MID$(pat(5), 19) = CHR$(52) patcount(5) = 0: ndur(5) = 4 pat(6) = REPEAT$(20, CHR$(%avvel)) MID$(pat(6), 1) = CHR$(47) : MID$(pat(6), 3) = CHR$(48) : MID$(pat(6), 5) = CHR$(49) : MID$(pat(6), 7) = CHR$(50) : MID$(pat(6), 9) = CHR$(51) MID$(pat(6), 11) = CHR$(52) : MID$(pat(6), 13) = CHR$(51) : MID$(pat(6), 15) = CHR$(50) : MID$(pat(6), 17) = CHR$(49) : MID$(pat(6), 19) = CHR$(48) patcount(6) = 4: ndur(6) = 11 '?12 pat(7) = REPEAT$(20, CHR$(%avvel)) MID$(pat(7), 1) = CHR$(45) : MID$(pat(7), 3) = CHR$(46) : MID$(pat(7), 5) = CHR$(47) : MID$(pat(7), 7) = CHR$(48) : MID$(pat(7), 9) = CHR$(49) MID$(pat(7), 11) = CHR$(50) : MID$(pat(7), 13) = CHR$(49) : MID$(pat(7), 15) = CHR$(48) : MID$(pat(7), 17) = CHR$(47) : MID$(pat(7), 19) = CHR$(46) patcount(7) = 14: ndur(7) = 8 FOR i = 0 TO 3: StartTask %Swarm_Pi + i: NEXT ' StopTask %Swarm_Tempo 'new 011012 END IF IF beat(%swarm_pi + 3) = 7 THEN 'end of former measuew SELECT CASE measure(%swarm_pi + 3) CASE 49 SW_Tempo 90 CASE 50 SW_Tempo 80 CASE 51 SW_Tempo 70 Stoptask %Swarm_pi Stoptask %Swarm_pi + 1 ' Stoptask %Swarm_pi + 2 Stoptask %Swarm_pi + 3 StartTask %swarm_pi StartTask %swarm_pi + 3 '<\!> CASE 52 IF ISFALSE restarttime THEN StopTask %swarm_pi StopTask %swarm_pi + 3 restarttime = TIMER + 2 * App.tempo / 60 END IF END SELECT END IF END SUB SUB SW_AllOff LOCAL i AS LONG FOR i = 0 TO 9 NoteOff task(%Swarm_Pi).channel, lastnote(i) LastNote(i) = 0 NEXT END SUB SUB SW_Tempo(t AS SINGLE) '!! this should not interfere with low level beater tasks App.tempo = t task(%swarm_Pi).freq = (App.Tempo / 60) * (9 / 4) * 4 '(tempo) * (notes/tel) * (quad tempo for rests & staccato) task(%swarm_Pi + 1).freq = (App.Tempo / 60) * (7 / 4) * 4 task(%swarm_Pi + 2).freq = (App.Tempo / 60) * (5 / 4) * 4 task(%swarm_Pi + 3).freq = (App.Tempo / 60) * (2 / 4) * 4 'quadruple tempo for rests task(%swarm_mot).freq = (2 * App.Tempo / 60) / 4 task(%swarm_mot + 1).freq = (3 * App.Tempo / 60) / 4 task(%swarm_mot + 2).freq = (5 * App.Tempo / 60) / 4 task(%swarm_mot + 3).freq = (7 * App.Tempo / 60) / 4 task(%swarm_mot + 4).freq = (9 * App.Tempo / 60) / 4 task(%swarm_klupi).freq = (App.Tempo / 60) * 4 task(%swarm_together).freq = (App.Tempo / 60) * 4 '2 = 2*8/4 2 for stacc task(%swarm_Roto_Master).freq = ((App.Tempo)/60)/4 END SUB SUB SW_Sync(m AS LONG) ' only call on beat 0 LOCAL i AS LONG FOR i = %Swarm_pi TO %swarm_mot + 4 '%swarm_klupi measure(i) = m beat(i) = 0 NEXT measure(%swarm_klupi) = m beat(%swarm_klupi) = 0 measure(%swarm_Roto_master) = m END SUB 'EOF