'vann der harst pieces for gentse feesten DECLARE FUNCTION VDH_Init AS LONG DECLARE SUB Hoku 'voor 7dagen taken: GLOBAL lijn() AS DWORD GLOBAL slur() AS DWORD DECLARE SUB zevendagen(OPT BYVAL setstopflag AS LONG) DECLARE SUB zevendagen2(OPT BYVAL setstartflag AS LONG) 'laatste sectie van zeven dagen %hoku = 16 %zevend = 17 FUNCTION VDH_Init AS LONG Warning "When Hoku finishes 7 dagen is started automatically. put on 7 dagen2 to finish 1st zeven dagen task ad lib somewhere during canon section Task(%hoku).naam = "Hoku" Task(%hoku).freq = 8 Task(%hoku).cptr = CODEPTR(Hoku) Task(%zevend).naam="7d1" Task(%zevend).freq = 32 'zelfde tempo als hierboven, maar non legato en vandaar 4 tocks per tel Task(%zevend).cptr = CODEPTR(zevendagen) Task(%zevend + 1).naam="7d2" Task(%zevend + 1).freq = 32 'zelfde tempo als hierboven, maar non legato en vandaar 4 tocks per tel Task(%zevend + 1).cptr = CODEPTR(zevendagen2) Init_MM MM_PanicButtonWindow FUNCTION = 1 END FUNCTION SUB Hoku 'piece by Dick van der Harst 'from 'Gathering of the clan - Concert Suite' STATIC arythms() AS BYTE STATIC brythms() AS BYTE STATIC init AS DWORD STATIC cc AS DWORD STATIC ccc AS DWORD STATIC notes() AS LONG LOCAL wind AS BYTE LOCAL velo AS BYTE LOCAL instrum AS musician LOCAL i AS LONG LOCAL ps AS LONG LOCAL b$ IF ISFALSE init THEN init = 1 REDIM arythms(15) REDIM brythms(15) REDIM notes(11) ARRAY ASSIGN arythms() = &B10110000, &B00101101, &B10110100, &B01001100, &B00101101, &B00101101, &B10110100, &B01000110, &B11001010, &B01101100, &B11001101, &B11011110, &B01101101, &B01101010, &B01000111 ARRAY ASSIGN brythms() = &B01000000, &B00010010, &B01001000, &B10110000, &B01010010, &B11010010, &B01001011, &B10111001, &B00110101, &B11011011, &B01110110, &B01111011, &B01101110, &B01001101, &B00101011 ARRAY ASSIGN notes() = Xy.LowTes, Piano.lowtes, bourdonola.lowtes, harma.lowtes, ake.lowtes, klung.lowtes, bako.lowtes, piperola.lowtes, krum.lowtes, So.lowtes + 7, vibi.lowtes, tubi.lowtes FOR i = LBOUND(notes) TO UBOUND(notes): notes(i) = notes(i) + INT(RND * 4): NEXT cc = 0 'measure counter ccc = 0 'beat counter ProgChange Xy.channel, 122 ProgChange Piano.channel, 122 MM_Bourdonola_On %MM_Motor: controller Bourdonola.channel, 1, 70: Bourdonola.ctrl(1) = 70 MM_Harma_On %MM_Motor: Controller Harma.channel, 7, 50: Harma.ctrl(7) = 50 MM_Ake_On %MM_Wind OR %MM_Motor MM_Piperola_On %MM_Motor: Controller Piperola.channel, 7, 80: Piperola.ctrl(7) = 80 MM_Krum_On %MM_Motor OR %MM_Wind MM_So_On %MM_Motor OR %MM_Wind MM_Bako_On %MM_Motor: Controller Bako.channel, 7, 40: Bako.ctrl(7) = 40 EXIT SUB END IF 'compute velo velo = 25 + 75 * ((cc MOD 60) / 60) logfile "Velo:" + STR$(velo) 'wind controllers wind = 70 + 22 * ((cc MOD 60) / 60) IF wind <> Bourdonola.ctrl(1) THEN Bourdonola.ctrl(1) = wind: Controller Bourdonola.channel,1 , bourdonola.ctrl(1) wind = 70 + 20 * (cc MOD 60) / 60 IF wind <> Harma.ctrl(7) THEN Harma.ctrl(7) = wind: Controller Harma.channel, 7, harma.ctrl(7) wind = 80 + 24 * ((cc MOD 60) / 60) IF wind <> Piperola.channel THEN Piperola.ctrl(7) = wind: Controller Piperola.channel, 7, Piperola.ctrl(7) wind = 70 + cc MOD 30 IF wind <> Bako.ctrl(7) THEN Bako.ctrl(7) = wind: Controller Bako.channel, 7, Bako.ctrl(7) IF BIT(arythms(cc\4), 7 - (ccc MOD 8)) THEN 'was bug!!! we had the bytes swapped!!!! 'play in a group - Xy, piano, bourdonola, harma, ake, klung mPlay Xy.channel, notes(0), velo AddNote2Har Piano.Har(1), notes(1), velo InstrumPlay Piano AddNote2Har Bourdonola.Har(1), notes(2), velo AddNote2Har Bourdonola.Har(1), notes(2) + 12, velo InstrumPlay Bourdonola AddNote2Har Harma.Har(1), notes(3), 20 AddNote2Har Harma.Har(1), notes(3) + 12, 20 InstrumPlay Harma AddNote2Har Ake.Har(1), notes(4),20 AddNote2Har Ake.Har(1), notes(4) + 12,20 InstrumPlay Ake mPlay Klung.channel, notes(5), MIN(127, velo + 10) mPlay Troms.Channel, Troms.Lowtes + 16, velo b$ = "groep 1: " FOR i = 0 TO 5 b$ = b$ + STR$(notes(i)) NEXT logfile b$ FOR i = 0 TO 5 SELECT CASE i CASE 0: instrum = xy CASE 1: instrum = piano CASE 2: instrum = Bourdonola CASE 3: instrum = Harma CASE 4: Instrum = Ake CASE 5: Instrum = Klung END SELECT ps = CHOOSE(INT(RND * (1 + .66 * (instrum.HighTes - instrum.lowtes) / 240)), 1) 'over 240 stappen (= gespeelde noten)zouden we zo ongeveer van lowtes naar hightes moeten geraken.. IF ps THEN logfile "mod note" + STR$(i) + ":" + STR$(notes(i)) +": + " + STR$(ps) notes(i) = notes(i) + ps logfile " result:" + STR$(notes(i)) END IF IF notes(i) > instrum.HighTes THEN notes(i) = notes(i) - 12 NEXT ELSE 'notesoff InstrumPlay Piano InstrumPlay Bourdonola InstrumPlay Harma InstrumPlay Ake logfile "off 1" END IF IF BIT(brythms(cc\4), 7 - (ccc MOD 8)) THEN 'was bug!!! we had the bytes swapped!!!! 'play b group - Bako, piperola, krum, so, vibi, tubi AddNote2Har Bako.Har(1), notes(6), 4 AddNote2Har Bako.Har(1), notes(6) + 12, 4 InstrumPlay Bako AddNote2Har Piperola.Har(1), notes(7), 20 InstrumPlay Piperola AddNote2Har Krum.Har(1), notes(8), 20 InstrumPlay Krum AddNote2Har So.Har(1), notes(9), velo: So_Play So AddNote2Har Vibi.Har(1), notes(10), 20 InstrumPlay Vibi mPlay Vibi.channel, notes(10), velo mPlay Tubi.channel, notes(11), velo - 8 FOR i = 6 TO 11 SELECT CASE i CASE 6: instrum = Bako CASE 7: instrum = piperola CASE 8: instrum = Krum CASE 9: instrum = So: So.LowTes = So.Lowtes + 7: So.HighTes = So.HighTes - 5 CASE 10: Instrum = Vibi CASE 11: Instrum = Tubi: Instrum.lowtes = 72 END SELECT ps = CHOOSE(INT(RND * (1 + .66 * (instrum.HighTes - instrum.lowtes) / 240)), 1 + INT(RND * 2)) 'over 120 stappen (= gespeelde noten)zouden we zo ongeveer van lowtes naar hightes moeten geraken.. IF ps THEN logfile "mod note" + STR$(i) + ":" + STR$(notes(i)) +": + " + STR$(ps) notes(i) = notes(i) + ps logfile " result:" + STR$(notes(i)) END IF IF notes(i) > instrum.HighTes THEN notes(i) = notes(i) - 12 NEXT b$ = "groep 2: " FOR i = 6 TO 11 b$ = b$ + STR$(notes(i)) NEXT logfile b$ ELSE 'notesoff InstrumPlay Bako InstrumPlay Piperola InstrumPlay Krum So_Play So InstrumPlay Vibi logfile "off 2" END IF INCR ccc IF ISFALSE(ccc MOD 8) THEN INCR cc logfile "counters:" + STR$(cc) + STR$(ccc) IF cc > 60 THEN init = 0 StopTask %hoku StartTask %ZevenD END IF END SUB SUB zevendagen(OPT BYVAL setstopflag AS LONG) '7 dagen in de week by Dick van der Harst 'from 'Gathering of the clan - Concert Suite' 'instrumenten die in aanmerkig komen: piano, ake, krum,piperola, (klung), harma, vibi 'taak loopt aan 4 * temp v 8tsten -> af op 3/4 'stemmen: ' 0: vibi ' 1: piano ' 2: piperola ' 3: harma ' 4: ake ' 5: krum STATIC init AS LONG 'also used as section counter STATIC cc()AS DWORD STATIC ccc() AS DWORD STATIC tick AS WORD STATIC onflag AS WORD STATIC voices AS WORD STATIC stopflag AS LONG LOCAL i AS DWORD IF setstopflag THEN stopflag = 1 EXIT SUB END IF IF ISFALSE init THEN init = 1 DIM lijn(6) DIM slur(6) DIM cc(5) DIM ccc(5) RESET cc(5) 'for when we call it a second time.. RESET ccc(5) 'aanzetten van noten ARRAY ASSIGN lijn() = &B10000000100011000010000011000010, &B00100000001000110000100000110000, &B00000011000001100000100000110000, _ &B10010010001100000001001101100011, &B01110100010011000100110010000101, &B11101101001110110110011110110110,_ &B00111011011001111011011011101101 'onderstaand array bevat 1-en voor elke tweede tel van een kwartnoot/derde tel gepunte kwart ARRAY ASSIGN slur() = &B01000000010000100001000000000001, &B00010000000100000000010000000000, &B00000000000000010100000000000010, _ &B01101101000000000000000000010000, &B00000000000000000000000001000000, &B00000010000000001001000000001001, _ &B00000000100100000000100100000010 MM_Harma_On %MM_Wind OR %MM_Motor MM_Ake_On %MM_Wind OR %MM_Motor MM_Piperola_On %MM_Wind OR %MM_Motor MM_Krum_On %MM_Wind OR %MM_Motor 'MM_Snar_On Controller Snar.channel, 11, 127 Controller Vibi.channel, 64, 0 Controller Vibi.channel, 24, 0 Controller vibi.channel, 23, 30 EXIT SUB END IF SELECT CASE init CASE 1 'iedereen tesamen ' INCR tick SELECT CASE (tick MOD 4) CASE 0 IF BIT(lijn(ccc(0)\2), cc(0) MOD 32) THEN mPlay Vibi.channel, IIF(ccc(0)\2 = 5, 64, 63), SWITCH(ISFALSE(cc(0) MOD 8), 100, ISFALSE(cc(0) MOD 4), 80, 1, 64) mPlay Vibi.channel, IIF(ccc(0)\2 = 5, 76, 75), SWITCH(ISFALSE(cc(0) MOD 8), 100, ISFALSE(cc(0) MOD 4), 80, 1, 64) mPlay Piano.channel, IIF(ccc(0)\2 = 5, 76, 75), SWITCH(ISFALSE(cc(0) MOD 8), 100, ISFALSE(cc(0) MOD 4), 80, 1, 64) mPlay Piano.channel, IIF(ccc(0)\2 = 5, 64, 63), SWITCH(ISFALSE(cc(0) MOD 8), 100, ISFALSE(cc(0) MOD 4), 80, 1, 64) mPlay Piperola.channel, IIF(ccc(0)\2 = 5, 64, 63), SWITCH(ISFALSE(cc(0) MOD 8), 100, ISFALSE(cc(0) MOD 4), 80, 1, 64) mPlay Piperola.channel, IIF(ccc(0)\2 = 5, 76, 75), SWITCH(ISFALSE(cc(0) MOD 8), 100, ISFALSE(cc(0) MOD 4), 80, 1, 64) mPlay Harma.channel, IIF(ccc(0)\2 = 5, 64, 63), SWITCH(ISFALSE(cc(0) MOD 8), 100, ISFALSE(cc(0) MOD 4), 80, 1, 64) mPlay Harma.channel, IIF(ccc(0)\2 = 5, 76, 75), SWITCH(ISFALSE(cc(0) MOD 8), 100, ISFALSE(cc(0) MOD 4), 80, 1, 64) mPlay Ake.channel, IIF(ccc(0)\2 = 5, 64, 63), SWITCH(ISFALSE(cc(0) MOD 8), 100, ISFALSE(cc(0) MOD 4), 80, 1, 64) mPlay Ake.channel, IIF(ccc(0)\2 = 5, 76, 75), SWITCH(ISFALSE(cc(0) MOD 8), 100, ISFALSE(cc(0) MOD 4), 80, 1, 64) mPlay Krum.channel, IIF(ccc(0)\2 = 5, 64, 63), SWITCH(ISFALSE(cc(0) MOD 8), 100, ISFALSE(cc(0) MOD 4), 80, 1, 64) mPlay Krum.channel, IIF(ccc(0)\2 = 5, 76, 75), SWITCH(ISFALSE(cc(0) MOD 8), 100, ISFALSE(cc(0) MOD 4), 80, 1, 64) mPlay Snar.channel, Snar.LowTes + cc(0) MOD 8, SWITCH(ISFALSE(cc(0) MOD 8), 100, ISFALSE(cc(0) MOD 4), 80, 1, 64) onflag = 1 END IF CASE 3 'als noot gespeeld en no slur, then notesoff IF (onflag > 0) AND ISFALSE(BIT(slur(ccc(0)\2), cc(0) MOD 32)) THEN mPlay Vibi.channel, IIF(ccc(0)\2 = 5, 64, 63), 0 mPlay Vibi.channel, IIF(ccc(0)\2 = 5, 76, 75), 0 mPlay Piano.channel, IIF(ccc(0)\2 = 5, 64, 63), 0 mPlay Piano.channel, IIF(ccc(0)\2 = 5, 76, 7), 0 mPlay Piperola.channel, IIF(ccc(0)\2 = 5, 64, 63), 0 mPlay Piperola.channel, IIF(ccc(0)\2 = 5, 76, 75), 0 mPlay Harma.channel, IIF(ccc(0)\2 = 5, 64, 63), 0 mPlay Harma.channel, IIF(ccc(0)\2 = 5, 76, 75), 0 mPlay Ake.channel, IIF(ccc(0)\2 = 5, 64, 63), 0 mPlay Ake.channel, IIF(ccc(0)\2 = 5, 76, 75), 0 mPlay Krum.channel, IIF(ccc(0)\2 = 5, 64, 63), 0 mPlay Krum.channel, IIF(ccc(0)\2 = 5, 76, 75), 0 onflag = 0 END IF INCR tick EXIT SUB 'don't let counter increase yet CASE ELSE: INCR tick:EXIT SUB END SELECT INCR cc(0) IF ISFALSE(cc(0) MOD 32) THEN INCR ccc(0) IF ccc(0) > 13 THEN init = 2 cc(0) = 0 ccc(0) = 0 END IF END IF CASE 2 'canon ' INCR tick SELECT CASE (tick MOD 4) CASE 0 IF BIT(lijn(ccc(0)\2), cc(0) MOD 32) THEN mPlay Vibi.channel, IIF(ccc(0)\2 = 5, 64, 63), SWITCH(ISFALSE(cc(0) MOD 8), 100, ISFALSE(cc(0) MOD 4), 80, 1, 64) mPlay Vibi.channel, IIF(ccc(0)\2 = 5, 76, 75), SWITCH(ISFALSE(cc(0) MOD 8), 100, ISFALSE(cc(0) MOD 4), 80, 1, 64) mPlay Snar.channel, Snar.LowTes, SWITCH(ISFALSE(cc(0) MOD 8), 100, ISFALSE(cc(0) MOD 4), 80, 1, 64) BIT SET onflag, 0 END IF IF (init > 2) AND BIT(lijn(ccc(1)\2), cc(1) MOD 32) THEN mPlay Piano.channel, IIF(ccc(1)\2 = 5, 64, 63), SWITCH(ISFALSE(cc(1) MOD 8), 100, ISFALSE(cc(1) MOD 4), 80, 1, 64) mPlay Piano.channel, IIF(ccc(1)\2 = 5, 76, 75), SWITCH(ISFALSE(cc(1) MOD 8), 100, ISFALSE(cc(1) MOD 4), 80, 1, 64) mPlay Snar.channel, Snar.LowTes + 1, SWITCH(ISFALSE(cc(1) MOD 8), 100, ISFALSE(cc(1) MOD 4), 80, 1, 64) BIT SET onflag, 1 END IF IF (init > 3) AND BIT(lijn(ccc(2)\2), cc(2) MOD 32) THEN mPlay Piperola.channel, IIF(ccc(2)\2 = 5, 64, 63), SWITCH(ISFALSE(cc(2) MOD 8), 100, ISFALSE(cc(2) MOD 4), 80, 1, 64) mPlay Piperola.channel, IIF(ccc(2)\2 = 5, 76, 75), SWITCH(ISFALSE(cc(2) MOD 8), 100, ISFALSE(cc(2) MOD 4), 80, 1, 64) mPlay Snar.channel, Snar.LowTes + 2, SWITCH(ISFALSE(cc(2) MOD 8), 100, ISFALSE(cc(2) MOD 4), 80, 1, 64) BIT SET onflag, 2 END IF IF (init > 4) AND BIT(lijn(ccc(3)\2), cc(3) MOD 32) THEN mPlay Harma.channel, IIF(ccc(3)\2 = 5, 64, 63), SWITCH(ISFALSE(cc(3) MOD 8), 100, ISFALSE(cc(3) MOD 4), 80, 1, 64) mPlay Harma.channel, IIF(ccc(3)\2 = 5, 76, 75), SWITCH(ISFALSE(cc(3) MOD 8), 100, ISFALSE(cc(3) MOD 4), 80, 1, 64) mPlay Snar.channel, Snar.LowTes + 3, SWITCH(ISFALSE(cc(3) MOD 8), 100, ISFALSE(cc(3) MOD 4), 80, 1, 64) BIT SET onflag, 3 END IF IF (init > 5) AND BIT(lijn(ccc(4)\2), cc(4) MOD 32) THEN mPlay Ake.channel, IIF(ccc(4)\2 = 5, 64, 63), SWITCH(ISFALSE(cc(4) MOD 8), 100, ISFALSE(cc(4) MOD 4), 80, 1, 64) mPlay Ake.channel, IIF(ccc(4)\2 = 5, 76, 75), SWITCH(ISFALSE(cc(4) MOD 8), 100, ISFALSE(cc(4) MOD 4), 80, 1, 64) mPlay Snar.channel, Snar.LowTes + 4, SWITCH(ISFALSE(cc(4) MOD 8), 100, ISFALSE(cc(4) MOD 4), 80, 1, 64) BIT SET onflag, 4 END IF IF (init > 6) AND BIT(lijn(ccc(5)\2), cc(5) MOD 32) THEN mPlay Krum.channel, IIF(ccc(5)\2 = 5, 64, 63), SWITCH(ISFALSE(cc(5) MOD 8), 100, ISFALSE(cc(5) MOD 4), 80, 1, 64) mPlay Krum.channel, IIF(ccc(5)\2 = 5, 76, 75), SWITCH(ISFALSE(cc(5) MOD 8), 100, ISFALSE(cc(5) MOD 4), 80, 1, 64) mPlay Snar.channel, Snar.LowTes + 5, SWITCH(ISFALSE(cc(5) MOD 8), 100, ISFALSE(cc(5) MOD 4), 80, 1, 64) BIT SET onflag, 5 END IF CASE 3 IF BIT(onflag, 0) AND ISFALSE(BIT(slur(ccc(0)\2), cc(0) MOD 32)) THEN mPlay Vibi.channel, IIF(ccc(0)\2 = 5, 64, 63), 0 mPlay Vibi.channel, IIF(ccc(0)\2 = 5, 76, 75), 0 mPlay Snar.channel, Snar.LowTes, SWITCH(ISFALSE(cc(0) MOD 8), 100, ISFALSE(cc(0) MOD 4), 80, 1, 64) BIT RESET onflag, 0 END IF IF BIT(onflag, 1) AND ISFALSE(BIT(slur(ccc(1)\2), cc(1) MOD 32)) THEN mPlay Piano.channel, IIF(ccc(1)\2 = 5, 64, 63), 0 mPlay Piano.channel, IIF(ccc(1)\2 = 5, 76, 75), 0 BIT RESET onflag, 1 END IF IF BIT(onflag, 2) AND ISFALSE(BIT(slur(ccc(2)\2), cc(2) MOD 32)) THEN mPlay Piperola.channel, IIF(ccc(2)\2 = 5, 64, 63), 0 mPlay Piperola.channel, IIF(ccc(2)\2 = 5, 76, 75), 0 BIT RESET onflag, 2 END IF IF BIT(onflag, 3) AND ISFALSE(BIT(slur(ccc(3)\2), cc(3) MOD 32)) THEN mPlay Harma.channel, IIF(ccc(3)\2 = 5, 64, 63), 0 mPlay Harma.channel, IIF(ccc(3)\2 = 5, 76, 75), 0 BIT RESET onflag, 3 END IF IF BIT(onflag, 4) AND ISFALSE(BIT(slur(ccc(4)\2), cc(4) MOD 32))THEN mPlay Ake.channel, IIF(ccc(4)\2 = 5, 64, 63), 0 mPlay Ake.channel, IIF(ccc(4)\2 = 5, 76, 75), 0 BIT RESET onflag, 4 END IF IF BIT(onflag, 5) AND ISFALSE(BIT(slur(ccc(5)\2), cc(5) MOD 32)) THEN mPlay Krum.channel, IIF(ccc(0)\2 = 5, 76, 75), 0 mPlay Krum.channel, IIF(ccc(0)\2 = 5, 76, 75), 0 BIT RESET onflag, 5 END IF INCR tick EXIT SUB CASE ELSE: INCR tick: EXIT SUB END SELECT FOR i = LBOUND(cc) TO UBOUND(cc) INCR cc(i) IF ISFALSE(cc(i) MOD 32) THEN INCR ccc(i) IF ISFALSE(i) AND ISFALSE(BIT(ccc(i), 0)) THEN INCR init END IF NEXT CASE -1 '6/7 split - other task END SELECT INCR tick IF stopflag THEN IF ISFALSE (cc(0) MOD 32) THEN StopTask %zevend init = 0 zevendagen2 1 stopflag = 0 StartTask %zevend + 1 END IF END IF END SUB SUB zevendagen2(OPT BYVAL setstartflag AS LONG) 'laatste sectie van zeven dagen 'tbd - moet 7d1 stopen STATIC startflag AS DWORD STATIC tick AS DWORD STATIC cc() AS DWORD STATIC onflag AS DWORD IF setstartflag THEN startflag = 1 DIM cc(1) RESET cc(1) EXIT SUB END IF IF ISFALSE startflag THEN Zevendagen 1 'set stopflag StopTask %zevend + 1 EXIT SUB END IF SELECT CASE tick CASE 0 IF BIT(lijn(5), cc(0) MOD 32) THEN mPlay Vibi.channel, 63, SWITCH(ISFALSE(cc(0) MOD 8), 100, ISFALSE(cc(0) MOD 4), 80, 1, 64) mPlay Vibi.channel, 75, SWITCH(ISFALSE(cc(0) MOD 8), 100, ISFALSE(cc(0) MOD 4), 80, 1, 64) mPlay Piperola.channel, 63, SWITCH(ISFALSE(cc(0) MOD 8), 100, ISFALSE(cc(0) MOD 4), 80, 1, 64) mPlay Piperola.channel, 75, SWITCH(ISFALSE(cc(0) MOD 8), 100, ISFALSE(cc(0) MOD 4), 80, 1, 64) mPlay Ake.channel, 63, SWITCH(ISFALSE(cc(0) MOD 8), 100, ISFALSE(cc(0) MOD 4), 80, 1, 64) mPlay Ake.channel, 75, SWITCH(ISFALSE(cc(0) MOD 8), 100, ISFALSE(cc(0) MOD 4), 80, 1, 64) mPlay Snar.channel, Snar.LowTes, SWITCH(ISFALSE(cc(0) MOD 8), 100, ISFALSE(cc(0) MOD 4), 80, 1, 64) BIT SET onflag, 0 END IF IF BIT(lijn(6), cc(1) MOD 32) THEN mPlay Piano.channel, 64, SWITCH(ISFALSE(cc(1) MOD 8), 100, ISFALSE(cc(1) MOD 4), 80, 1, 64) mPlay Piano.channel, 76, SWITCH(ISFALSE(cc(1) MOD 8), 100, ISFALSE(cc(1) MOD 4), 80, 1, 64) mPlay Harma.channel, 64, SWITCH(ISFALSE(cc(1) MOD 8), 100, ISFALSE(cc(1) MOD 4), 80, 1, 64) mPlay Harma.channel, 76, SWITCH(ISFALSE(cc(1) MOD 8), 100, ISFALSE(cc(1) MOD 4), 80, 1, 64) mPlay Krum.channel, 64, SWITCH(ISFALSE(cc(1) MOD 8), 100, ISFALSE(cc(1) MOD 4), 80, 1, 64) mPlay Krum.channel, 76, SWITCH(ISFALSE(cc(1) MOD 8), 100, ISFALSE(cc(1) MOD 4), 80, 1, 64) mPlay Snar.channel, Snar.LowTes + 1, SWITCH(ISFALSE(cc(1) MOD 8), 100, ISFALSE(cc(1) MOD 4), 80, 1, 64) BIT SET onflag, 1 END IF CASE 3 IF BIT (onflag, 0) AND ISFALSE(BIT(slur(5), cc(0) MOD 32))THEN END IF IF BIT (onflag, 1) AND ISFALSE(BIT(slur(6), cc(1) MOD 32)) THEN END IF INCR tick EXIT SUB END SELECT INCR cc(0) IF cc(0)>32 THEN StopTask %zevend + 1 startflag = 0 ' init = 0 END IF END SUB 'iets voor met bart maris 'ritmische patroontes, imitatieprincipes (?), ...