DECLARE SUB pp_sonate_s() DECLARE SUB sonate_s_R() DECLARE SUB sonate_s_L() GLOBAL on_off_R AS BYTE 'aan en uit zetten van initialisatie per plugin R GLOBAL on_off_L AS BYTE ' " " " " " " " " L TYPE sonate_s_type note_R(1 TO 88) AS BYTE note_L(1 TO 88) AS BYTE noteOff_R(1 TO 88) AS BYTE noteoff_L(1 TO 88) AS BYTE gen_R(1 TO 10) AS BYTE gen_L(1 TO 10) AS BYTE plug_R AS BYTE plug_L AS BYTE mid_R AS BYTE mid_L AS BYTE END TYPE GLOBAL sonate_s AS sonate_s_type SUB sonate_s_R() 'partij voor de rechter hand LOCAL i AS SINGLE LOCAL j AS SINGLE LOCAL k AS SINGLE 'LOCAL luidst_R AS DWORD ##### + slider STATIC time AS DWORD STATIC starttime AS DWORD IF ISFALSE task(%sonate_s_R).tog THEN 'initialisatie rechter hand starttime = timegettime task(%sonate_s_R).freq = 8 task(%sonate_s_R).tog = %true on_off_r = %false 'on_off_R klaar voor init plugin 0 starttask %sonate_s_L lukascompositie_deel = 4 EXIT SUB END IF time = timegettime - starttime SELECT CASE time 'volgorde van de cellen CASE < 20000 sonate_s.plug_R = 0 CASE < 30000 sonate_s.plug_R = 1 CASE < 40000 sonate_s.plug_R = 2 CASE < 50000 sonate_s.plug_R = 3 CASE < 60000 sonate_s.plug_R = 4 CASE ELSE '### VERANDEREN: TEST ### stoptask %sonate_s_R stoptask %sonate_s_l END SELECT SELECT CASE sonate_s.plug_R CASE 0 'plugin 1: arpeggio's ----- ----- ----- ----- ----- ----- IF ISFALSE on_off_r THEN 'initialisatie plugin sonate_s.note_r(1) = 102 'beginnoot on_off_r = %true sonate_s.gen_r(2) = 2 END IF IF sonate_s.gen_r(2) = 2 THEN 'arpegg naar beneden; via willekeur terts, kwart of tri naar beneden sonate_s.noteoff_r(1) = sonate_s.note_r(1) sonate_s.gen_R(1) = RND(1,4) IF sonate_s.gen_R(1) = 1 THEN sonate_s.note_r(2) = sonate_s.noteoff_r(1) - 3 ELSEIF sonate_s.gen_R(1) = 2 THEN 'betekenis gen_r(...) sonate_s.note_r(2) = sonate_s.noteoff_r(1) - 4 '1=genereren afstand ELSEIF sonate_s.gen_r(1) = 3 THEN '2=naar boven (=1) of beneden (=2) sonate_s.note_r(2) = sonate_s.noteoff_r(1) - 5 ELSE sonate_s.note_r(2) = sonate_s.noteoff_r(1) - 6 END IF sonate_s.note_r(1) = sonate_s.note_r(2) 'noot doorgeven sonate_s.mid_r = sonate_s.note_r(2) 'toon"centrum" instellen ELSEIF sonate_s.gen_r(2) = 1 THEN 'arpegg naar boven; via willekeur terts, kwart of tri naar boven sonate_s.noteoff_r(1) = sonate_s.note_r(1) sonate_s.gen_R(1) = RND(1,4) IF sonate_s.gen_R(1) = 1 THEN sonate_s.note_r(2) = sonate_s.noteoff_r(1) + 3 ELSEIF sonate_s.gen_R(1) = 2 THEN 'betekenis gen_r(...) sonate_s.note_r(2) = sonate_s.noteoff_r(1) + 4 '1=genereren afstand ELSEIF sonate_s.gen_r(1) = 3 THEN '2=naar boven (=1) of beneden (=2) sonate_s.note_r(2) = sonate_s.noteoff_r(1) + 5 ELSE sonate_s.note_r(2) = sonate_s.noteoff_r(1) + 6 END IF sonate_s.note_r(1) = sonate_s.note_r(2) 'noot doorgeven sonate_s.mid_r = sonate_s.note_r(2) 'toon"centrum" instellen END IF SELECT CASE sonate_s.note_r(1) 'bereik van de piano en terugkaatsen CASE <= 27 sonate_s.gen_r(2) = 1 CASE >= 102 sonate_s.gen_r(2) = 2 END SELECT AddNote2Har Task(%sonate_S_R).har, sonate_S.note_r(1), 90+(sonate_S.note_r(1)/5) IF sonate_s.note_r(1) <> sonate_s.noteoff_r(1) THEN delnote2har task(%sonate_S_R).har, sonate_s.noteoff_r(1) 'if ... then omdat eerste keer noot zou blijven klinken task(%sonate_s_R).freq = 12 '### VERANDEREN ###: +INTERACTIE! CASE 1 'plugin 2.1: chromatisch ----- ----- ----- ----- ----- ----- IF ISTRUE on_off_r THEN 'initialisatie plugin on_off_r = %false sonate_s.gen_r(2) = 2 'dalen sonate_s.gen_r(4) = 0 'teller voor aantal noten in zelfde richting sonate_s.gen_r(3) = %true 'genereren of niet? END IF sonate_s.noteoff_r(1) = sonate_s.note_r(1) IF ISFALSE sonate_s.gen_r(3) THEN sonate_s.gen_r(1) = RND (1,2) 'via willekeur naar boven of naar beneden IF sonate_s.gen_r(1) = 1 THEN sonate_s.gen_r(2) = 1 'naar boven ELSE sonate_s.gen_r(2) = 2 'naar beneden END IF i = RND 'aantal noten in zelfde richting bepalen 1-12 FOR i = 1 TO 12 IF j >= (i-1)/12 AND j < i/12 THEN sonate_s.gen_r(5) = i+2 END IF NEXT i sonate_s.gen_r(3) = %true END IF 'betekenis gen_r(...) IF sonate_s.gen_r(2) = 2 THEN 'chr naar beneden '1=RND richting sonate_s.note_r(2) = sonate_s.note_r(1)-1 '2=richting ELSEIF sonate_s.gen_r(2) = 1 THEN 'chr naar boven '3=genereren of niet? sonate_s.note_r(2) = sonate_s.note_r(1)+1 '4=teller noten zelfde richting END IF '5=aantal noten zelfde richting sonate_s.note_r(1) = sonate_s.note_r(2) sonate_s.mid_r = sonate_s.note_r(1) 'toon"centrum" instellen SELECT CASE sonate_s.note_r(1) 'bereik van de piano en terugkaatsen; ook naargelang onderste stem CASE > 108 sonate_s.gen_r(2) = 2 sonate_s.gen_r(5) = 4 sonate_s.gen_r(3) = %true CASE < 60'### VERANDEREN ### =< sonate_s.mid_l+7 'uit de buurt blijven van ander "hand" sonate_s.gen_r(2) = 1 sonate_s.gen_r(5) = 12 sonate_s.gen_r(3) = %true END SELECT AddNote2Har Task(%sonate_S_R).har, sonate_S.note_r(1), 90 '### VERANDEREN ###: +INTERACTIE! IF sonate_s.note_r(1) <> sonate_s.noteoff_r(1) THEN delnote2har task(%sonate_S_R).har, sonate_s.noteoff_r(1) 'if ... then omdat eerste keer noot zou blijven klinken task(%sonate_s_R).freq = 12 '### VERANDEREN ###: +INTERACTIE! INCR sonate_s.gen_r(4) IF sonate_s.gen_r(4) >= sonate_s.gen_r(5) THEN sonate_s.gen_r(3) = %false 'richtingbepaling opnieuw aanzetten sonate_s.gen_r(4) = 0 END IF CASE 2 'plugin 2.2: HTT ----- ----- ----- ----- ----- ----- IF ISFALSE on_off_r THEN 'initialisatie plugin on_off_r = 1 sonate_s.gen_r(2) = 2 'dalen sonate_s.gen_r(4) = 0 'teller voor aantal noten in zelfde richting sonate_s.gen_r(3) = %true 'genereren of niet? END IF sonate_s.noteoff_r(1) = sonate_s.note_r(1) IF ISFALSE sonate_s.gen_r(3) THEN sonate_s.gen_r(1) = RND (1,2) 'via willekeur naar boven of naar beneden IF sonate_s.gen_r(1) = 1 THEN sonate_s.gen_r(2) = 1 'naar boven ELSE sonate_s.gen_r(2) = 2 'naar beneden END IF i = RND 'aantal noten in zelfde richting bepalen 1-12 FOR i = 1 TO 6 IF j >= (i-1)/6 AND j < i/6 THEN sonate_s.gen_r(5) = i+2 END IF NEXT i sonate_s.gen_r(3) = %true END IF 'betekenis gen_r(...) IF sonate_s.gen_r(2) = 2 THEN 'chr naar beneden '1=RND richting sonate_s.note_r(2) = sonate_s.note_r(1)-2 '2=richting ELSEIF sonate_s.gen_r(2) = 1 THEN 'chr naar boven '3=genereren of niet? sonate_s.note_r(2) = sonate_s.note_r(1)+2 '4=teller noten zelfde richting END IF '5=aantal noten zelfde richting sonate_s.note_r(1) = sonate_s.note_r(2) sonate_s.mid_r = sonate_s.note_r(1) 'toon"centrum" instellen SELECT CASE sonate_s.note_r(1) 'bereik van de piano en terugkaatsen; ook naargelang onderste stem CASE > 108 sonate_s.gen_r(2) = 2 sonate_s.gen_r(5) = 2 sonate_s.gen_r(3) = %true CASE < 60'### VERANDEREN ### =< sonate_s.mid_l+7 'uit de buurt blijven van ander "hand" sonate_s.gen_r(2) = 1 sonate_s.gen_r(5) = 6 sonate_s.gen_r(3) = %true END SELECT AddNote2Har Task(%sonate_S_R).har, sonate_S.note_r(1), 90 '### VERANDEREN ###: +INTERACTIE! IF sonate_s.note_r(1) <> sonate_s.noteoff_r(1) THEN delnote2har task(%sonate_S_R).har, sonate_s.noteoff_r(1) 'if ... then omdat eerste keer noot zou blijven klinken task(%sonate_s_R).freq = 12 '### VERANDEREN ###: +INTERACTIE! INCR sonate_s.gen_r(4) IF sonate_s.gen_r(4) >= sonate_s.gen_r(5) THEN sonate_s.gen_r(3) = %false 'richtingbepaling opnieuw aanzetten sonate_s.gen_r(4) = 0 END IF CASE 3 'plugin 3: kl sprongen (kl sec tot kl sext) ----- ----- ----- ----- ----- ----- IF on_off_r = 1 THEN 'initialisatie plugin sonate_s.gen_r(1) = 1 'genereren aan sonate_s.gen_r(4) = 0 on_off_r = %false 'betekenis gen_r(...) END IF '1=genereren? '2=genereren grootte sprong / verplaatsing IF sonate_s.gen_r(1) = 1 THEN warning"genereren aan" '3=grootte sprong (1 tot 8) sonate_s.gen_r(2) = RND '4=teller per twee om gen(1) aan en uit te zetten FOR i = 1 TO 8 'sprong '5=verplaatsing IF (sonate_s.gen_r(2) >= (i-1)/8) AND (sonate_s.gen_r(2) < i/8) THEN '6=omhoog of omlaag sonate_s.gen_r(3) = i END IF NEXT i sonate_s.gen_r(2) = RND FOR j = 1 TO 3 'verplaatsing van 0 tot gr sec IF (sonate_s.gen_r(2) >= (j-1)/3) AND (sonate_s.gen_r(2) < j/3) THEN sonate_s.gen_r(5) = j - 1 END IF NEXT j sonate_s.gen_r(2) = RND (1,2) 'richting verplaatsing IF sonate_s.gen_r(2) = 1 THEN sonate_s.gen_r(6)=%false ELSE sonate_s.gen_r(6)=%true END IF sonate_s.gen_r(1) = 0 '0 vs false etc ... ? IF sonate_s.gen_r(6)=%false THEN 'noten genereren '<> ? sonate_S.note_r(1) = sonate_S.note_r(1) - sonate_s.gen_r(5) 'bereik 0, 1, 2, 3 ? warning "noot gegenereerd naar onder" '=%true -> istrue voor ales behalve 0 END IF IF ISTRUE sonate_s.gen_r(6) THEN sonate_S.note_r(1) = sonate_S.note_r(1) + sonate_s.gen_r(5) warning"noot gegenereerd naar boven" END IF sonate_S.note_r(2) = sonate_S.note_r(1) - sonate_S.gen_r(3) END IF IF sonate_s.note_r(1) > 108 THEN 'bereik piano sonate_s.gen_r(6) = %false sonate_s.gen_r(5) = 2 warning"te hoog" END IF IF sonate_s.note_r(2) < 60 THEN 'alleen op bovenste helft piano sonate_s.gen_r(6) = %true sonate_s.gen_r(5) = 2 warning"te laag" END IF IF sonate_s.gen_r(4) = 0 THEN AddNote2Har Task(%sonate_S_R).har, sonate_S.note_r(1), 90 '### VERANDEREN ###: +INTERACTIE! 'IF sonate_s.note_r(1) <> sonate_s.noteoff_r(1) THEN delnote2har task(%sonate_S_R).har, sonate_s.noteoff_r(1) 'if ... then omdat eerste keer noot zou blijven klinken SetDlgItemText gh.Cockpit, %GMT_MSG1, STR$(sonate_s.note_r(1)) warning"afspelen 1" ELSEIF sonate_s.gen_r(4) = 1 THEN AddNote2Har Task(%sonate_S_R).har, sonate_S.note_r(2), 90 '### VERANDEREN ###: +INTERACTIE! 'IF sonate_s.note_r(2) <> sonate_s.noteoff_r(2) THEN delnote2har task(%sonate_S_R).har, sonate_s.noteoff_r(2) 'if ... then omdat eerste keer noot zou blijven klinken setDlgItemText gh.Cockpit, %GMT_MSG2, STR$(sonate_s.note_r(2)) warning"afspelen 2" ELSE warning "Fout - afspelen kl sprong", 2000 END IF task(%sonate_s_R).freq = 1 '### VERANDEREN ###: +INTERACTIE! 'sonate_S.note_r(1) = sonate_s.noteoff_r(1) 'doorgeven van de noteoff 'sonate_S.note_r(2) = sonate_s.noteoff_r(2) INCR sonate_s.gen_r(4) IF sonate_s.gen_r(4) = 2 THEN sonate_s.gen_r(1) = 1 sonate_s.gen_r(4) = 0 warning "counter gereset END IF CASE 4 'plugin 4: gr sprongen (gr sext tot gr dec) ----- ----- ----- ----- ----- ----- IF ISFALSE on_off_r THEN 'initialisatie plugin sonate_s.note_r(1) = sonate_s.mid_r 'beginnoot sonate_s.gen_r(1) = 1 'genereren aan on_off_r = %true 'betekenis gen_r(...) END IF '1=genereren? '2=genereren grootte sprong / verplaatsing IF sonate_s.gen_r(1) = 1 THEN '3=grootte sprong (1 tot 8) sonate_s.gen_r(2) = RND (0,1) '4=teller per twee om gen(1) aan en uit te zetten FOR i = 1 TO 8 '5=verplaatsing IF sonate_s.gen_r(2) >= (i-1)/8 AND sonate_s.gen_r(2) < i/8 THEN '6=omhoog of omlaag sonate_s.gen_r(3) = i END IF NEXT i sonate_s.gen_r(2) = RND (0,1) FOR i = 1 TO 3 IF sonate_s.gen_r(2) >= (i-1)/3 AND sonate_s.gen_r(2) < i/3 THEN sonate_s.gen_r(5) = i - 1 'verplaatsing van 0 tot gr sec END IF NEXT i sonate_s.gen_r(2) = RND (0,1) IF sonate_s.gen_r(2) =< 0.5 THEN sonate_s.gen_r(6)=%false ELSEIF sonate_s.gen_r(2)> 0.5 THEN sonate_s.gen_r(6)=%true END IF ELSE warning "Fout - richting + verschuiving gr sprong", 2000 END IF IF sonate_s.gen_r(6)=%false THEN sonate_S.note_r(1) = sonate_S.note_r(1) - sonate_s.gen_r(5) 'noten genereren IF sonate_s.gen_r(6)=%true THEN sonate_S.note_r(1) = sonate_S.note_r(1) + sonate_s.gen_r(5) sonate_S.note_r(2) = sonate_S.note_r(1) - sonate_S.note_r(3)-6 IF sonate_s.note_r(1) => 108 THEN sonate_s.gen_r(6) = %false sonate_s.gen_r(5) = 2 END IF IF sonate_s.note_r(2) =< 60 THEN 'alleen op bovenste helft piano sonate_s.gen_r(6) = %true sonate_s.gen_r(5) = 2 END IF IF sonate_s.gen_r(1) = 0 THEN AddNote2Har Task(%sonate_S_R).har, sonate_S.note_r(1), 90 '### VERANDEREN ###: +INTERACTIE! IF sonate_s.note_r(1) <> sonate_s.noteoff_r(1) THEN delnote2har task(%sonate_S_R).har, sonate_s.noteoff_r(1) 'if ... then omdat eerste keer noot zou blijven klinken task(%sonate_s_R).freq = 8 '### VERANDEREN ###: +INTERACTIE! ELSEIF sonate_s.gen_r(1) = 1 THEN AddNote2Har Task(%sonate_S_R).har, sonate_S.note_r(2), 90 '### VERANDEREN ###: +INTERACTIE! IF sonate_s.note_r(2) <> sonate_s.noteoff_r(2) THEN delnote2har task(%sonate_S_R).har, sonate_s.noteoff_r(2) 'if ... then omdat eerste keer noot zou blijven klinken task(%sonate_s_R).freq = 8 '### VERANDEREN ###: +INTERACTIE! ELSE warning "Fout - afspelen gr sprong", 2000 END IF sonate_S.note_r(1) = sonate_s.noteoff_r(1) 'doorgeven van de noteoff sonate_S.note_r(2) = sonate_s.noteoff_r(2) INCR sonate_s.gen_r(4) IF sonate_s.gen_r(4) = 2 THEN sonate_s.gen_r(1) = 1 sonate_s.gen_r(4) = 0 END IF CASE 5 'TEST sonate_s.gen_r(1) = RND(1,3) SetDlgItemText gh.Cockpit, %GMT_MSG1, STR$(sonate_s.gen_r(1)) task(%sonate_s_R).freq = 4 CASE ELSE '----- ----- ----- ----- ----- ----- warning "Fout - plugin arpegg", 2000 END SELECT END SUB SUB sonate_s_L() 'partij voor de linker "hand" sonate_s.mid_l = 40 END SUB