'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 %improv = 20 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 = 28 '32 '16 '4 * 8 Task(%hoku).cptr = CODEPTR(Hoku) Task(%zevend).naam="7d1" Task(%zevend).freq = 29 '32 '16 '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 = 29 '32 '16 '32 'zelfde tempo als hierboven, maar non legato en vandaar 4 tocks per tel Task(%zevend + 1).cptr = CODEPTR(zevendagen2) ' Task(%improv).naam = "impro" 'voor impro met bart maris ' Task(%improv).freq = 10 'reads its actual freq from slider ' Task(%improv).cptr = CODEPTR(improv) Init_MM MM_PanicButtonWindow 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 Progchange Troms.channel, 122 Controller Vibi.channel, 64, 0 Controller Vibi.channel, 24, 0 Controller vibi.channel, 23, 40 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 STATIC tick AS DWORD 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) + 7 + INT(RND * 4): NEXT cc = 0 'measure counter ccc = 0 'beat counter EXIT SUB END IF 'compute velo velo = 30 + 80 * ((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 60) / 2 IF wind <> Bako.ctrl(7) THEN Bako.ctrl(7) = wind: Controller Bako.channel, 7, Bako.ctrl(7) SELECT CASE tick MOD 4 CASE 0 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 mPlay Xy.channel, notes(0) + 12, velo AddNote2Har Piano.Har(1), notes(1), velo AddNote2Har Piano.Har(1), notes(1) + 12, 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 mPlay Simba.channel, 78, 50 'licht mPlay Xy.channel, 123 + INT(RND * 4), 1 mPlay Bourdonola.channel, 32 + INT(RND * 4), 1 mPlay Harma.channel, 91 + INT(RND * 6), 1 mPlay Troms.channel, 18 + INT(RND * 3), 1 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 + .5 * (instrum.HighTes - instrum.lowtes) / 280)), 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 AddNote2Har Piperola.Har(1), notes(7) + 12, 20 InstrumPlay Piperola AddNote2Har Krum.Har(1), notes(8), 20 InstrumPlay Krum AddNote2Har So.Har(1), notes(9), velo: InstrumPlay So AddNote2Har Vibi.Har(1), notes(10), 20 InstrumPlay Vibi mPlay Vibi.channel, notes(10), velo mPlay Tubi.channel, notes(11), velo - 8 mPlay Troms.Channel, Troms.Lowtes + 6, velo mPlay Simba.channel, 79, 50 'licht mPlay Bako.channel, 10 + INT(RND * 13), 1 mPlay Piperola.channel, 32 + INT(RND * 4), 1 mPlay Krum.channel, 100 + INT(RND * 3), 1 mPlay Troms.channel,18 + INT(RND * 3), 1 FOR i = 6 TO 11 SELECT CASE i CASE 6: instrum = Bako CASE 7: instrum = piperola CASE 8: instrum = Krum CASE 9: instrum = So: instrum.LowTes = So.Lowtes + 7: instrum.HighTes = So.HighTes - 5 CASE 10: Instrum = Vibi CASE 11: Instrum = Tubi: Instrum.lowtes = 72 END SELECT ps = CHOOSE(INT(RND * (1 + .5 * (instrum.HighTes - instrum.lowtes) / 240)), 1) '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 > 59 THEN init = 0 ' MM_AllOFf %MM_Notes 'nie werk nie voor bako.. InstrumPlay Piano InstrumPlay Bourdonola InstrumPlay Harma InstrumPlay Ake InstrumPlay Bako InstrumPlay Piperola InstrumPlay Krum InstrumPlay So InstrumPlay Vibi MM_AllLightsOff StopTask %hoku StartTask %ZevenD END IF CASE 3 'tick: notes off for non legato InstrumPlay Piano InstrumPlay Bourdonola InstrumPlay Harma InstrumPlay Ake InstrumPlay Bako InstrumPlay Piperola InstrumPlay Krum InstrumPlay So InstrumPlay Vibi MM_AllLightsOff CASE ELSE 'do nothing END SELECT INCR tick 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, &B00000011000001101000000000001100, _ &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, 40 Controller Piperola.channel, 7, 120 Controller Harma.channel, 7, 100 EXIT SUB END IF logfile "section:" + STR$(init) SELECT CASE init CASE 1 'iedereen tesamen ' INCR tick SELECT CASE (tick MOD 4) CASE 0 IF BIT(lijn(ccc(0)\2), 31 - (cc(0) MOD 32)) THEN AddNote2Har Vibi.Har(1), IIF(ccc(0)\2 = 5, 64, 63), SWITCH(ISFALSE(cc(0) MOD 8), 100, ISFALSE(cc(0) MOD 4), 80, 1, 60) AddNote2Har Vibi.Har(1), IIF(ccc(0)\2 = 5, 76, 75), SWITCH(ISFALSE(cc(0) MOD 8), 100, ISFALSE(cc(0) MOD 4), 80, 1, 60) InstrumPlay Vibi AddNote2Har Piano.Har(1), IIF(ccc(0)\2 = 5, 76, 75), SWITCH(ISFALSE(cc(0) MOD 8), 100, ISFALSE(cc(0) MOD 4), 70, 1, 40) AddNote2Har Piano.Har(1), IIF(ccc(0)\2 = 5, 64, 63), SWITCH(ISFALSE(cc(0) MOD 8), 100, ISFALSE(cc(0) MOD 4), 70, 1, 44) InstrumPlay Piano AddNote2Har Piperola.Har(1), IIF(ccc(0)\2 = 5, 64, 63), SWITCH(ISFALSE(cc(0) MOD 8), 100, ISFALSE(cc(0) MOD 4), 80, 1, 64) AddNote2Har Piperola.Har(1), IIF(ccc(0)\2 = 5, 76, 75), SWITCH(ISFALSE(cc(0) MOD 8), 100, ISFALSE(cc(0) MOD 4), 80, 1, 64) InstrumPlay Piperola AddNote2Har Harma.Har(1), IIF(ccc(0)\2 = 5, 64, 63), SWITCH(ISFALSE(cc(0) MOD 8), 100, ISFALSE(cc(0) MOD 4), 80, 1, 64) AddNote2Har Harma.Har(1), IIF(ccc(0)\2 = 5, 76, 75), SWITCH(ISFALSE(cc(0) MOD 8), 100, ISFALSE(cc(0) MOD 4), 80, 1, 64) InstrumPlay Harma AddNote2Har Ake.Har(1), IIF(ccc(0)\2 = 5, 64, 63), SWITCH(ISFALSE(cc(0) MOD 8), 100, ISFALSE(cc(0) MOD 4), 80, 1, 64) AddNote2Har Ake.Har(1), IIF(ccc(0)\2 = 5, 76, 75), SWITCH(ISFALSE(cc(0) MOD 8), 100, ISFALSE(cc(0) MOD 4), 80, 1, 64) InstrumPlay Ake AddNote2Har Krum.Har(1), IIF(ccc(0)\2 = 5, 64, 63), SWITCH(ISFALSE(cc(0) MOD 8), 100, ISFALSE(cc(0) MOD 4), 80, 1, 64) AddNote2Har Krum.Har(1), IIF(ccc(0)\2 = 5, 76, 75), SWITCH(ISFALSE(cc(0) MOD 8), 100, ISFALSE(cc(0) MOD 4), 80, 1, 64) InstrumPlay Krum mPlay Snar.channel, Snar.LowTes + cc(0) MOD 8, SWITCH(ISFALSE(cc(0) MOD 8), 80, ISFALSE(cc(0) MOD 4), 70, 1, 60) 'licht mPlay Piperola.channel, 32 + INT(RND * 4), 1 mPlay Krum.channel, 100 + INT(RND * 3), 1 mPlay Troms.channel,18 + INT(RND * 3), 1 mPlay Harma.channel, 91 + INT(RND * 6), 1 onflag = 1 END IF CASE 3 'als noot gespeeld en no slur, then notesoff IF (onflag > 0) AND ISFALSE(BIT(slur(ccc(0)\2), 31 - (cc(0) MOD 32))) THEN InstrumPlay Vibi InstrumPlay Piano InstrumPlay Piperola InstrumPlay Harma InstrumPlay Ake InstrumPlay Krum MM_AllLightsOff 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 InstrumPlay Vibi InstrumPlay Piano InstrumPlay Piperola InstrumPlay Harma InstrumPlay Ake InstrumPlay Krum RESET cc() RESET ccc() RESET tick EXIT SUB END IF END IF CASE >= 2 'canon ' INCR tick SELECT CASE (tick MOD 4) CASE 0 IF BIT(lijn((ccc(0)\2) MOD 13), 31 - (cc(0) MOD 32)) THEN AddNote2Har Vibi.Har(1), IIF((ccc(0)\2) MOD 13 = 5, 64, 63), SWITCH(ISFALSE(cc(0) MOD 8), 100, ISFALSE(cc(0) MOD 4), 85, 1, 70) AddNote2Har Vibi.Har(1), IIF((ccc(0)\2) MOD 13 = 5, 76, 75), SWITCH(ISFALSE(cc(0) MOD 8), 100, ISFALSE(cc(0) MOD 4), 85, 1, 70) InstrumPlay Vibi ' mPlay Snar.channel, Snar.LowTes, SWITCH(ISFALSE(cc(0) MOD 8), 60, ISFALSE(cc(0) MOD 4), 50, 1, 40) BIT SET onflag, 0 END IF IF (init > 2) AND BIT(lijn((ccc(1)\2) MOD 13), 31 - (cc(1) MOD 32)) THEN AddNote2Har Piano.Har(1), IIF((ccc(1)\2) MOD 13 = 5, 64, 63), SWITCH(ISFALSE(cc(1) MOD 8), 100, ISFALSE(cc(1) MOD 4), 90, 1, 80) AddNote2Har Piano.Har(1), IIF((ccc(1)\2) MOD 13 = 5, 76, 75), SWITCH(ISFALSE(cc(1) MOD 8), 100, ISFALSE(cc(1) MOD 4), 90, 1, 80) mPlay Troms.channel, 30, SWITCH(ISFALSE(cc(1) MOD 8), 100, ISFALSE(cc(1) MOD 4), 90, 1, 80) InstrumPlay Piano ' mPlay Snar.channel, Snar.LowTes + 1, SWITCH(ISFALSE(cc(1) MOD 8), 70, ISFALSE(cc(1) MOD 4), 60, 1, 50) BIT SET onflag, 1 END IF IF (init > 3) AND BIT(lijn((ccc(2)\2) MOD 13), 31 - (cc(2) MOD 32)) THEN AddNote2Har Krum.Har(1), IIF((ccc(5)\2) MOD 13 = 5, 64, 63), SWITCH(ISFALSE(cc(5) MOD 8), 100, ISFALSE(cc(5) MOD 4), 80, 1, 64) AddNote2Har Krum.Har(1), IIF((ccc(5)\2) MOD 13 = 5, 76, 75), SWITCH(ISFALSE(cc(5) MOD 8), 100, ISFALSE(cc(5) MOD 4), 80, 1, 64) InstrumPlay Krum mPlay Krum.channel, 100 + INT(RND * 3), 1 ' mPlay Snar.channel, Snar.LowTes + 2, SWITCH(ISFALSE(cc(2) MOD 8), 70, ISFALSE(cc(2) MOD 4), 60, 1, 50) BIT SET onflag, 2 END IF IF (init > 4) AND BIT(lijn((ccc(3)\2) MOD 13), 31 - (cc(3) MOD 32)) THEN AddNote2Har Harma.Har(1), IIF((ccc(3)\2) MOD 13 = 5, 64, 63), SWITCH(ISFALSE(cc(3) MOD 8), 100, ISFALSE(cc(3) MOD 4), 80, 1, 64) AddNote2Har Harma.Har(1), IIF((ccc(3)\2) MOD 13 = 5, 76, 75), SWITCH(ISFALSE(cc(3) MOD 8), 100, ISFALSE(cc(3) MOD 4), 80, 1, 64) AddNote2Har Harma.Har(1), IIF((ccc(3)\2) MOD 13 = 5, 88, 87), SWITCH(ISFALSE(cc(3) MOD 8), 100, ISFALSE(cc(3) MOD 4), 80, 1, 64) mPlay Harma.channel, 91 + INT(RND * 6), 1 InstrumPlay Harma ' mPlay Snar.channel, Snar.LowTes + 3, SWITCH(ISFALSE(cc(3) MOD 8), 70, ISFALSE(cc(3) MOD 4), 60, 1, 50) BIT SET onflag, 3 END IF IF (init > 5) AND BIT(lijn((ccc(4)\2) MOD 13), 31 - (cc(4) MOD 32)) THEN AddNote2Har Ake.Har(1), IIF((ccc(4)\2) MOD 13 = 5, 64, 63), SWITCH(ISFALSE(cc(4) MOD 8), 100, ISFALSE(cc(4) MOD 4), 80, 1, 64) AddNote2Har Ake.Har(1), IIF((ccc(4)\2) MOD 13 = 5, 76, 75), SWITCH(ISFALSE(cc(4) MOD 8), 100, ISFALSE(cc(4) MOD 4), 80, 1, 64) AddNote2Har Ake.Har(1), IIF((ccc(4)\2) MOD 13 = 5, 88, 87), SWITCH(ISFALSE(cc(4) MOD 8), 100, ISFALSE(cc(4) MOD 4), 80, 1, 64) InstrumPlay Ake ' mPlay Snar.channel, Snar.LowTes + 4, SWITCH(ISFALSE(cc(4) MOD 8), 70, ISFALSE(cc(4) MOD 4), 60, 1, 50) BIT SET onflag, 4 END IF IF (init > 6) AND BIT(lijn((ccc(5)\2) MOD 13), 31 - (cc(5) MOD 32)) THEN ' mPlay Snar.channel, Snar.LowTes + 5, SWITCH(ISFALSE(cc(5) MOD 8), 70, ISFALSE(cc(5) MOD 4), 60, 1, 50) mPlay Piperola.channel, 32 + INT(RND * 4), 1 AddNote2Har Piperola.Har(1), IIF((ccc(2)\2) MOD 13 = 5, 64, 63), SWITCH(ISFALSE(cc(2) MOD 8), 100, ISFALSE(cc(2) MOD 4), 80, 1, 64) AddNote2Har Piperola.Har(1), IIF((ccc(2)\2) MOD 13 = 5, 76, 75), SWITCH(ISFALSE(cc(2) MOD 8), 100, ISFALSE(cc(2) MOD 4), 80, 1, 64) AddNote2Har Piperola.Har(1), IIF((ccc(2)\2) MOD 13 = 5, 88, 87), SWITCH(ISFALSE(cc(2) MOD 8), 100, ISFALSE(cc(2) MOD 4), 80, 1, 64) InstrumPlay Piperola BIT SET onflag, 5 END IF ' incr tick CASE 3 IF BIT(onflag, 0) AND ISFALSE(BIT(slur((ccc(0)\2) MOD 13), 31 - (cc(0) MOD 32))) THEN InstrumPlay Vibi ' 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) MOD 13), 31 - (cc(1) MOD 32))) THEN InstrumPlay Piano BIT RESET onflag, 1 END IF IF BIT(onflag, 2) AND ISFALSE(BIT(slur((ccc(2)\2) MOD 13), 31 - (cc(2) MOD 32))) THEN InstrumPlay Krum MM_Krum_Off %MM_Lights BIT RESET onflag, 2 END IF IF BIT(onflag, 3) AND ISFALSE(BIT(slur((ccc(3)\2) MOD 13), 31 - (cc(3) MOD 32))) THEN InstrumPlay Harma MM_Harma_Off %MM_Lights BIT RESET onflag, 3 END IF IF BIT(onflag, 4) AND ISFALSE(BIT(slur((ccc(4)\2) MOD 13), 31 - (cc(4) MOD 32)))THEN InstrumPlay Ake BIT RESET onflag, 4 END IF IF BIT(onflag, 5) AND ISFALSE(BIT(slur((ccc(5)\2) MOD 13), 31 - (cc(5) MOD 32))) THEN InstrumPlay Piperola MM_Piperola_Off %MM_Lights BIT RESET onflag, 5 END IF INCR tick EXIT SUB CASE ELSE: INCR tick: EXIT SUB END SELECT 'here we only get when tick mod 4 = 0... FOR i = LBOUND(cc) TO UBOUND(cc) IF ((init - 2) < i) THEN ITERATE FOR INCR cc(i) IF ISFALSE(cc(i) MOD 32) THEN INCR ccc(i) IF ccc(i) > 9 THEN ccc(i) = 0 IF ISFALSE(i) AND ISFALSE(cc(i) MOD 64) THEN INCR init 'AND ISFALSE(BIT(ccc(i), 0)) 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 MOD 4 CASE 0 IF BIT(lijn(5), 31 - (cc(0) MOD 32)) THEN AddNote2Har Vibi.Har(1), 63, SWITCH(ISFALSE(cc(0) MOD 8), 100, ISFALSE(cc(0) MOD 4), 80, 1, 64) AddNote2Har Vibi.Har(1), 75, SWITCH(ISFALSE(cc(0) MOD 8), 100, ISFALSE(cc(0) MOD 4), 80, 1, 64) InstrumPlay Vibi AddNote2Har Piperola.Har(1), 63, SWITCH(ISFALSE(cc(0) MOD 8), 100, ISFALSE(cc(0) MOD 4), 80, 1, 64) AddNote2Har Piperola.Har(1), 75, SWITCH(ISFALSE(cc(0) MOD 8), 100, ISFALSE(cc(0) MOD 4), 80, 1, 64) Instrumplay Piperola mPlay Piperola.channel, 32 + INT(RND * 4), 1 AddNote2Har Ake.Har(1), 63, SWITCH(ISFALSE(cc(0) MOD 8), 100, ISFALSE(cc(0) MOD 4), 80, 1, 64) AddNote2Har Ake.Har(1), 75, SWITCH(ISFALSE(cc(0) MOD 8), 100, ISFALSE(cc(0) MOD 4), 80, 1, 64) InstrumPlay Ake ' mPlay Snar.channel, Snar.LowTes, SWITCH(ISFALSE(cc(0) MOD 8), 80, ISFALSE(cc(0) MOD 4), 70, 1, 50) ' mPlay Snar.channel, 75 + int(rnd * 3), 1 ' mPlay Troms.channel, 30, SWITCH(ISFALSE(cc(1) MOD 8), 100, ISFALSE(cc(1) MOD 4), 90, 1, 80) BIT SET onflag, 0 END IF IF BIT(lijn(6), 31 - (cc(1) MOD 32)) THEN AddNote2Har Piano.Har(1), 64, SWITCH(ISFALSE(cc(1) MOD 8), 100, ISFALSE(cc(1) MOD 4), 80, 1, 64) AddNote2Har Piano.Har(1), 76, SWITCH(ISFALSE(cc(1) MOD 8), 100, ISFALSE(cc(1) MOD 4), 80, 1, 64) InstrumPlay Piano AddNote2Har Harma.Har(1), 64, SWITCH(ISFALSE(cc(1) MOD 8), 100, ISFALSE(cc(1) MOD 4), 80, 1, 64) AddNote2Har Harma.Har(1), 76, SWITCH(ISFALSE(cc(1) MOD 8), 100, ISFALSE(cc(1) MOD 4), 80, 1, 64) InstrumPlay Harma mPlay Harma.channel, 91 + INT(RND * 6), 1 AddNote2Har Krum.Har(1), 64, SWITCH(ISFALSE(cc(1) MOD 8), 100, ISFALSE(cc(1) MOD 4), 80, 1, 64) AddNote2Har Krum.Har(1), 76, SWITCH(ISFALSE(cc(1) MOD 8), 100, ISFALSE(cc(1) MOD 4), 80, 1, 64) InstrumPlay Krum mPlay Krum.channel, 100 + INT(RND * 3), 1 ' mPlay Snar.channel, Snar.LowTes + 1, SWITCH(ISFALSE(cc(1) MOD 8), 80, ISFALSE(cc(1) MOD 4), 70, 1, 50) ' mPlay Troms.channel, 30, SWITCH(ISFALSE(cc(1) MOD 8), 100, ISFALSE(cc(1) MOD 4), 90, 1, 80) BIT SET onflag, 1 END IF INCR tick CASE 3 IF BIT (onflag, 0) AND ISFALSE(BIT(slur(5), 31 - (cc(0) MOD 32)))THEN InstrumPlay Vibi InstrumPlay Piperola InstrumPlay Ake MM_AllLightsOff END IF IF BIT (onflag, 1) AND ISFALSE(BIT(slur(6), 31 - (cc(1) MOD 32))) THEN InstrumPlay Piano InstrumPlay Harma InstrumPlay Krum MM_AllLightsOff END IF INCR tick EXIT SUB CASE ELSE INCR tick EXIT SUB END SELECT INCR cc(0) INCR cc(1) IF cc(0)>64 THEN StopTask %zevend + 1 startflag = 0 InstrumPlay Vibi InstrumPlay Piperola InstrumPlay Ake InstrumPlay Piano InstrumPlay Harma InstrumPlay Krum MM_AllLightsOff MM_Harma_Off %MM_Wind ' init = 0 END IF END SUB 'iets voor met bart maris 'ritmische patroontes, imitatieprincipes (?), ... SUB improv 'params: tempo, density, basepitch STATIC ritme$() STATIC init AS DWORD STATIC ticks AS DWORD '32sten STATIC beats AS DWORD 'achtsten STATIC patsel AS DWORD STATIC patc AS LONG 'moet negatief kunnen gaan STATIC velo AS BYTE STATIC slnr AS DWORD LOCAL dens AS SINGLE '[0-1] LOCAL accnt AS LONG 'flag LOCAL t() AS ASCIIZ * 8 IF ISFALSE init THEN DIM ritme$(13) 'basisritme basdrum 'we bewegen door dit array rnd l/r max 2 stappen) ARRAY ASSIGN ritme$() = CHR$(3,3,2,0), CHR$(3,4,1,0), CHR$(3, 3, 2,0), CHR$(4,4,0), CHR$(3, 3, 2,0), CHR$(3,3,3,3,2,2,0), CHR$(8,0),CHR$(2,2,3,1,0), CHR$(3,3,3,3,0), CHR$(6,2), CHR$(3,2,0), CHR$(3,2,0),CHR$(2,2,2,2,0), CHR$(4,4,0) DIM t(2) ARRAY ASSIGN t() = "temp", "density", "volume" MakeTaskParameterDialog %improv,2,Slider(),1,UDctrl(),T() slnr = TaskEX(%improv).SliderNumbers(0) slider(slnr).value = 32 SendMessage Slider(slnr).h, %TBM_SETPOS, %true, Slider(slnr).value Slider(slnr + 1).value = 20 SendMessage Slider(slnr + 1).h, %TBM_SETPOS, %true, Slider(slnr + 1).value Slider(slnr + 2).value = 32 SendMessage Slider(slnr + 2).h, %TBM_SETPOS, %true, Slider(slnr + 2).value MM_Thunderwood_On Progchange Thunderwood.channel, 122 END IF dens = slider(slnr + 1).value / 127 task(%improv).freq = 1 + Slider(slnr).value/6 INCR ticks SELECT CASE ticks MOD 4 CASE 0 'bass drum IF ISFALSE beats THEN accnt = 1 velo = Slider(slnr + 2).value mPlay Troms.channel, 30 + RND * 2 * patsel, velo INCR patc IF ISFALSE(ASC(ritme$(patsel), patc)) THEN 'end of pattern patsel = patsel - 2 +INT(RND * 5) IF patsel < 0 THEN patsel = UBOUND(ritme$) + 1 + patsel IF patsel > UBOUND(ritme$) THEN patsel = patsel - (UBOUND(ritme$) + 1) patc = 1 END IF beats = ASC(ritme$(patsel), patc) END IF DECR beats IF dens > .2 THEN 'absolute limit IF RND < dens THEN 'random factor mPlay Troms.channel, 38 + INT(RND * 11), .75 * velo 'bongo's + cymbal ELSEIF RND < dens THEN mPlay Thunderwood.channel, 1 + INT(RND * 15), .75 * velo 'woodblocks END IF END IF IF dens > .75 THEN IF RND ^ beats > (1-dens) THEN 'geeft vlak na de beat meer (kans op) ademruimte mPlay Casta2.channel, Casta2.LowTes + RND (Casta2.HighTes - Casta2.LowTes), .5 * velo END IF END IF CASE 1 'only on very high density someth light CASE 2 CASE 3 'only on very high density someth light END SELECT END SUB