' ****************************************** ' * * ' * test and evaluation code * ' * Prof.dr.Godfried-Willem Raes * ' * belongs to the slagwerk compilation * ' ****************************************** ' 16.08.2013: first coding. ' 19.08.2013: version 1.0 ready for testing. ' All components should be testable now... ' Pipe order changed! the upper row is now 73,74,75,76,77,79,80,78 ' Firmware in the quad-pic board to be adapted! ' 20.08.2013: Firmware version 1.1 now. ' 02.11.2013: Sleigh bells mapped on note 86 added on whisper ' 14.04.2015: repair session on whisper as all fans died... ' 15.04.2015: CC66 fully implemented. Whisper will no longer work without it. %Whisper_rep = 18 %Whisper_test = 19 %Whisper_RubString = 20 ' hub board PIC %Whisper_Gambler = 21 ' hub board PIC %Whisper_Shake1 = 23 ' 83 -hub board, frontal shaker, with autorepeat %Whisper_Shake2 = 24 ' 84 - with autorepeat, quad pic board, PIC4 %Whisper_Shake3 = 25 ' 85 %Whisper_Bells = 26 ' 86 - hub board %Whisper_Res9 = 27 '48 %Res_1_2 = 28 '49 %Res_3_4 = 29 '50 %Res_5_6 = 30 '51 %Res_7_8 = 31 '52 %Whisper_Lite1 = 32 ' note 120 %Whisper_Lite2 = 33 %Whisper_Lite3 = 34 %Whisper_Lite4 = 35 %Whisper_CC66 = 38 %Whispers = 48 DECLARE FUNCTION Init_Whisper () AS LONG DECLARE SUB Whisper_lite1 () DECLARE SUB Whisper_lite2 () DECLARE SUB Whisper_lite3 () DECLARE SUB Whisper_lite4 () DECLARE SUB Whisper_Bells () DECLARE SUB Whisper_Shaker1 () DECLARE SUB Whisper_Shaker2 () DECLARE SUB Whisper_Shaker3 () DECLARE SUB Whisper_RubString () DECLARE SUB Whisper_Gambler () DECLARE SUB Whisper_Res9 () DECLARE SUB Res_1_2 () DECLARE SUB Res_3_4 () DECLARE SUB Res_5_6 () DECLARE SUB Res_7_8 () DECLARE SUB Whisper_CC66 () 'kleine demo: DECLARE SUB Whispers () FUNCTION Init_Whisper () AS LONG LOCAL retval AS LONG LOCAL m AS ASCIIZ * 20 LOCAL i AS LONG m = " test code" Sendmessage gh.Cockpit, %WM_SETTEXT,0, VARPTR(m) ' cockpit titel ' hardware tests: Task(%Whisper_Rep).naam = "RepTst" Task(%Whisper_Rep).cptr = CODEPTR(Whisper_Rep) Task(%Whisper_Rep).freq = 1 Task(%Whisper_Rep).flags = %False Task(%Whisper_Test).naam = "HardTst" Task(%Whisper_test).cptr = CODEPTR(Whisper_Test) Task(%Whisper_Test).freq = 1 Task(%Whisper_Test).flags = %False Task(%Whisper_lite1).cptr = CODEPTR(Whisper_Lite1) Task(%Whisper_lite1).naam = "L1" Task(%Whisper_lite1).freq = 1 Task(%Whisper_lite1).flags = %False TaskEx(%Whisper_lite1).stopcptr = CODEPTR(Whisper_Lite1_Stop) Task(%Whisper_lite2).cptr = CODEPTR(Whisper_Lite2) Task(%Whisper_lite2).naam = "L2" Task(%Whisper_lite2).freq = 1 Task(%Whisper_lite2).flags = %False TaskEx(%Whisper_lite2).stopcptr = CODEPTR(Whisper_Lite2_Stop) Task(%Whisper_lite3).cptr = CODEPTR(Whisper_Lite3) Task(%Whisper_lite3).naam = "L3" Task(%Whisper_lite3).freq = 1 Task(%Whisper_lite3).flags = %False TaskEx(%Whisper_lite3).stopcptr = CODEPTR(Whisper_Lite3_Stop) Task(%Whisper_lite4).cptr = CODEPTR(Whisper_Lite4) Task(%Whisper_lite4).naam = "L4" Task(%Whisper_lite4).freq = 1 Task(%Whisper_lite4).flags = %False TaskEx(%Whisper_lite4).stopcptr = CODEPTR(Whisper_Lite4_Stop) Task(%Whisper_Bells).cptr = CODEPTR(Whisper_Bells) Task(%Whisper_Bells).naam = "Bells" Task(%Whisper_Bells).freq = 1 Task(%Whisper_Bells).flags = %False TaskEX(%Whisper_Bells).stopcptr = CODEPTR(Whisper_Bells_Stop) Task(%Whisper_Shake1).cptr = CODEPTR(Whisper_Shaker1) Task(%Whisper_Shake1).naam = "Marac1" Task(%Whisper_Shake1).freq = 1 Task(%Whisper_Shake1).flags = %False TaskEx(%Whisper_Shake1).stopcptr = CODEPTR(Whisper_Shaker1_Stop) Task(%Whisper_Shake2).cptr = CODEPTR(Whisper_Shaker2) Task(%Whisper_Shake2).naam = "Marac2" Task(%Whisper_Shake2).freq = 1 Task(%Whisper_Shake2).flags = %False TaskEx(%Whisper_Shake2).stopcptr = CODEPTR(Whisper_Shaker2_Stop) Task(%Whisper_Shake3).cptr = CODEPTR(Whisper_Shaker3) Task(%Whisper_Shake3).naam = "Marac3" Task(%Whisper_Shake3).freq = 1 Task(%Whisper_Shake3).flags = %False TaskEx(%Whisper_Shake3).stopcptr = CODEPTR(Whisper_Shaker3_Stop) Task(%Whisper_Gambler).cptr = CODEPTR(Whisper_Gambler) Task(%Whisper_Gambler).naam = "Lotto" Task(%Whisper_Gambler).freq = 1 Task(%Whisper_Gambler).flags = %False TaskEx(%Whisper_Gambler).stopcptr = CODEPTR(Whisper_Gambler_Stop) Task(%Whisper_RubString).cptr = CODEPTR(Whisper_RubString) Task(%Whisper_RubString).naam = "String" Task(%Whisper_RubString).freq = 1 Task(%Whisper_RubString).flags = %False TaskEx(%Whisper_RubString).stopcptr = CODEPTR(Whisper_RubString_Stop) Task(%Whisper_Res9).cptr = CODEPTR(Whisper_Res9) ' note 72 Task(%Whisper_Res9).naam = "Res 0" Task(%Whisper_Res9).freq = 50 Task(%Whisper_Res9).flags = %False TaskEx(%Whisper_Res9).stopcptr = CODEPTR(Whisper_Res9_Stop) Task(%Res_1_2).cptr = CODEPTR(Res_1_2) ' notes 73-74 Task(%Res_1_2).naam = "Res 12" Task(%Res_1_2).freq = 51 Task(%Res_1_2).flags = %False TaskEx(%Res_1_2).stopcptr = CODEPTR(Res_1_2_Stop) Task(%Res_3_4).cptr = CODEPTR(Res_3_4) ' notes 75-76 Task(%Res_3_4).naam = "Res 34" Task(%Res_3_4).freq = 52 Task(%Res_3_4).flags = %False TaskEx(%Res_3_4).stopcptr = CODEPTR(Res_3_4_Stop) Task(%Res_5_6).cptr = CODEPTR(Res_5_6) ' notes 77,79 Task(%Res_5_6).naam = "Res 56" Task(%Res_5_6).freq = 52 Task(%Res_5_6).flags = %False TaskEx(%Res_5_6).stopcptr = CODEPTR(Res_5_6_Stop) Task(%Res_7_8).cptr = CODEPTR(Res_7_8) ' notes 78,80 Task(%Res_7_8).naam = "Res 78" Task(%Res_7_8).freq = 53 Task(%Res_7_8).flags = %False TaskEx(%Res_7_8).stopcptr = CODEPTR(Res_7_8_Stop) Task(%Whisper_CC66).cptr = CODEPTR(Whisper_CC66) ' 15.04.2015 Task(%Whisper_CC66).naam = "Whispers" Task(%Whisper_CC66).freq = 20 Task(%Whisper_CC66).flags = %False Task(%Whispers).cptr = CODEPTR(Whispers) ' demo stukje Task(%Whispers).naam = "Whispers" Task(%Whispers).freq = 256 Task(%Whispers).flags = %False TaskEx(%Whispers).stopcptr = CODEPTR(Whispers_Stop) FUNCTION = %True END FUNCTION SUB Whisper_Rep () ' test note repeats STATIC note, cnt AS INTEGER LOCAL velo AS INTEGER LOCAL v AS SINGLE STATIC slnr AS DWORD STATIC udnr AS DWORD IF ISFALSE Task(%Whisper_Rep).tog THEN DIM TaskParamLabels(0 TO 2) AS ASCIIZ * 8 TaskParamLabels(0) = "Tempo" TaskParamLabels(1) = "Level" TaskParamLabels(2) = "Note" IF ISFALSE Task(%Whisper_rep).hParam THEN slnr = %False MakeTaskParameterDialog %Whisper_Rep,2,Slider(),1,UDctrl(),TaskParamLabels() END IF IF slnr = %False THEN slnr = TaskEX(%Whisper_Rep).SliderNumbers(0) UDctrl(TaskEX(%Whisper_rep).UpdownNumbers(0)).cptr = CODEPTR(Whisper_Note_UD1) ' note UDctrl(TaskEX(%Whisper_rep).UpDownNumbers(0)).value = Whisper.lowtes ' = 72 Task(%Whisper_rep).freq = 1 Slider(slnr).value = Task(%Whisper_rep).freq SendMessage Slider(Slnr).h, %TBM_SETPOS,%True, Slider(Slnr).value SendMessage Slider(Slnr+1).h, %TBM_SETPOS,%True, 1 ' low level on init. udnr = TaskEX(%Whisper_rep).UpDownNumbers(0) END IF ' MM_Whisper_On Task(%Whisper_rep).tog = %True END IF IF ISFALSE cnt MOD 2 THEN note = UDctrl(udnr).value v = Slider(slnr+1).value mPlay Whisper.channel, note, v ELSE mPlay Whisper.channel, note, %False END IF INCR cnt Task(%Whisper_Rep).freq = 0.125 +(Slider(slnr).value) / 8! END SUB SUB Whisper_Note_UD1 () ' controls the repetition note to be played. ' resonators only LOCAL noot AS BYTE STATIC oldnoot AS BYTE LOCAL udnr AS DWORD udnr = TaskEX(%Whisper_Rep).UpDownNumbers(0) noot = UDCtrl(udnr).value SELECT CASE noot CASE < Whisper.lowtes UDctrl(udnr).value = Whisper.lowtes : noot = Whisper.lowtes CASE > 80 'Whisper.hightes UDctrl(udnr).value = 80 : noot = 80 'Whisper.hightes : noot = Whisper.hightes END SELECT SetDlgItemText Task(%Whisper_Rep).hparam, %GMT_TEXT0_ID + 16, "N=" & STR$(noot) oldnoot = noot END SUB SUB Whisper_Test () ' test note repeats STATIC note, cnt AS INTEGER LOCAL velo AS INTEGER STATIC slnr AS DWORD STATIC udnr AS DWORD IF ISFALSE Task(%Whisper_Test).tog THEN DIM TaskParamLabels(0 TO 2) AS ASCIIZ * 8 TaskParamLabels(0) = "Tempo" TaskParamLabels(1) = "Level" TaskParamLabels(2) = "Note" IF ISFALSE Task(%Whisper_Test).hParam THEN slnr = %False MakeTaskParameterDialog %Whisper_Test,2,Slider(),1,UDctrl(),TaskParamLabels() END IF IF slnr = %False THEN slnr = TaskEX(%Whisper_Test).SliderNumbers(0) UDctrl(TaskEX(%Whisper_Test).UpdownNumbers(0)).cptr = CODEPTR(Whisper_HWNote_UD1) ' note UDctrl(TaskEX(%Whisper_Test).UpDownNumbers(0)).value = Whisper.lowtes Task(%Whisper_Test).freq = 1 Slider(slnr).value = Task(%Whisper_Test).freq SendMessage Slider(Slnr).h, %TBM_SETPOS,%True, Slider(Slnr).value SendMessage Slider(Slnr+1).h, %TBM_SETPOS,%True, 1 ' low level on init. udnr = TaskEX(%Whisper_Test).UpDownNumbers(0) END IF Task(%Whisper_Test).tog = %True END IF IF ISFALSE cnt MOD 2 THEN note = UDctrl(udnr).value velo = Slider(slnr+1).value ' for PIC test, so no rescaling here. mPlay Whisper.channel, note, velo ELSE NoteOff Whisper.channel, note END IF INCR cnt Task(%Whisper_Test).freq = 0.1 + (Slider(slnr).value) / 10! END SUB SUB Whisper_HWNote_UD1 () ' controls the note to be played. LOCAL noot AS BYTE LOCAL udnr AS DWORD udnr = TaskEX(%Whisper_Test).UpDownNumbers(0) noot = UDCtrl(udnr).value IF noot < Whisper.lowtes THEN UDctrl(udnr).value = Whisper.lowtes : noot = Whisper.lowtes IF noot > Whisper.hightes THEN UDctrl(udnr).value = Whisper.hightes : noot = Whisper.hightes SetDlgItemText Task(%Whisper_Test).hparam, %GMT_TEXT0_ID + 16, "N=" & STR$(noot) END SUB SUB Whisper_RubString () ' rubbed string - Hub board STATIC note, cnt AS INTEGER LOCAL velo AS INTEGER STATIC slnr AS DWORD IF ISFALSE Task(%Whisper_RubString).tog THEN DIM TaskParamLabels(0 TO 1) AS ASCIIZ * 8 TaskParamLabels(0) = "Tempo" TaskParamLabels(1) = "Level" IF ISFALSE Task(%Whisper_RubString).hParam THEN slnr = %False MakeTaskParameterDialog %Whisper_RubString,2,Slider(),0,UDctrl(),TaskParamLabels() END IF IF slnr = %False THEN slnr = TaskEX(%Whisper_RubString).SliderNumbers(0) Task(%Whisper_RubString).freq = 1 Slider(slnr).value = Task(%Whisper_RubString).freq SendMessage Slider(Slnr).h, %TBM_SETPOS,%True, Slider(Slnr).value SendMessage Slider(Slnr+1).h, %TBM_SETPOS,%True, 64 ' medium level on init. END IF RESET cnt note = 81 Task(%Whisper_RubString).tog = %True END IF IF ISFALSE cnt MOD 2 THEN velo = Slider(slnr+1).value ' for PIC test, so no rescaling here. Steers motor speed in PWM mPlay Whisper.channel, note, velo ' we have to send noteoff commands as well here ELSE NoteOff Whisper.channel, note END IF Task(%Whisper_RubString).freq = 0.1 + (Slider(slnr).value) / 8! INCR cnt END SUB SUB Whisper_RubString_Stop () NoteOff Whisper.channel, 81 END SUB SUB Whisper_Gambler () ' gambling machine ' no velocity implemented for now. ' velo byte should steer repetition rate. Midihub board. STATIC note, cnt AS INTEGER LOCAL velo AS INTEGER STATIC slnr AS DWORD IF ISFALSE Task(%Whisper_Gambler).tog THEN DIM TaskParamLabels(0 TO 1) AS ASCIIZ * 8 TaskParamLabels(0) = "Tempo" TaskParamLabels(1) = "Level" IF ISFALSE Task(%Whisper_Gambler).hParam THEN slnr = %False MakeTaskParameterDialog %Whisper_Gambler,2,Slider(),0,UDctrl(),TaskParamLabels() END IF IF slnr = %False THEN slnr = TaskEX(%Whisper_Gambler).SliderNumbers(0) Task(%Whisper_Gambler).freq = 1 Slider(slnr).value = Task(%Whisper_Gambler).freq SendMessage Slider(Slnr).h, %TBM_SETPOS,%True, Slider(Slnr).value SendMessage Slider(Slnr+1).h, %TBM_SETPOS,%True, 127 ' maximum level on init. Slider(slnr+1).value = 127 END IF RESET cnt note = 82 Task(%Whisper_Gambler).tog = %True END IF IF ISFALSE cnt MOD 2 THEN velo = Slider(slnr+1).value ' for PIC test, so no rescaling here. Steers motor speed in PWM mPlay Whisper.channel, note, velo ' we have to send noteoff commands as well here ELSE NoteOff Whisper.channel, note END IF Task(%Whisper_Gambler).freq = 0.1 + (Slider(slnr).value) / 8! INCR cnt END SUB SUB Whisper_Gambler_Stop () NoteOff Whisper.channel, 82 END SUB SUB Whisper_lite1 () ' changed to test autoflashing. STATIC cnt AS DWORD STATIC slnr AS DWORD STATIC noot AS DWORD IF ISFALSE Task(%Whisper_Lite1).tog THEN DIM TaskParamLabels(0) AS ASCIIZ * 8 TaskParamLabels(0) = "Tempo" IF ISFALSE Task(%Whisper_lite1).hParam THEN slnr = %False MakeTaskParameterDialog %Whisper_Lite1,1,Slider(),0,UDctrl(),TaskParamLabels() END IF IF slnr = %False THEN slnr = TaskEX(%Whisper_Lite1).SliderNumbers(0) Task(%Whisper_lite1).freq = 0.33 Slider(slnr).value = 100 SendMessage Slider(Slnr).h, %TBM_SETPOS,%True, Slider(Slnr).value END IF cnt = %False noot = 120 Task(%Whisper_lite1).tog = %True END IF IF ISFALSE cnt THEN mPlay Whisper.channel, noot, Slider(slnr).value cnt = %True ELSE NoteOff Whisper.channel, noot cnt = %False END IF 'Task(%Whisper_Lite1).freq = (Slider(slnr).value) / 2! END SUB SUB Whisper_Lite1_Stop () NoteOff Whisper.channel, 120 END SUB SUB Whisper_lite2 () STATIC cnt AS DWORD STATIC slnr AS DWORD STATIC noot AS BYTE IF ISFALSE Task(%Whisper_Lite2).tog THEN DIM TaskParamLabels(0) AS ASCIIZ * 8 TaskParamLabels(0) = "Tempo" IF ISFALSE Task(%Whisper_Lite2).hParam THEN slnr = %False MakeTaskParameterDialog %Whisper_Lite2,1,Slider(),0,UDctrl(),TaskParamLabels() END IF IF slnr = %False THEN slnr = TaskEX(%Whisper_Lite2).SliderNumbers(0) Task(%Whisper_Lite2).freq = 0.33 Slider(slnr).value = 106 SendMessage Slider(Slnr).h, %TBM_SETPOS,%True, Slider(Slnr).value END IF cnt = %False noot = 121 Task(%Whisper_Lite2).tog = %True END IF IF ISFALSE cnt THEN mPlay Whisper.channel, noot, slider(slnr).value cnt = %True ELSE NoteOff Whisper.channel, noot cnt = %False END IF 'Task(%Whisper_Lite2).freq = (Slider(slnr).value) / 2! END SUB SUB Whisper_Lite2_Stop () NoteOff Whisper.channel, 121 END SUB SUB Whisper_lite3 () STATIC cnt AS DWORD STATIC slnr AS DWORD STATIC noot AS BYTE IF ISFALSE Task(%Whisper_Lite3).tog THEN DIM TaskParamLabels(0) AS ASCIIZ * 8 TaskParamLabels(0) = "Tempo" IF ISFALSE Task(%Whisper_Lite3).hParam THEN slnr = %False MakeTaskParameterDialog %Whisper_Lite3,1,Slider(),0,UDctrl(),TaskParamLabels() END IF IF slnr = %False THEN slnr = TaskEX(%Whisper_Lite3).SliderNumbers(0) Task(%Whisper_Lite3).freq = 0.33 Slider(slnr).value = 124 SendMessage Slider(Slnr).h, %TBM_SETPOS,%True, Slider(Slnr).value END IF cnt = %False noot = 122 Task(%Whisper_Lite3).tog = %True END IF IF ISFALSE cnt THEN mPlay Whisper.channel, noot, Slider(slnr).value cnt = %True ELSE NoteOff Whisper.channel, noot cnt = %False END IF 'Task(%Whisper_Lite3).freq = (Slider(slnr).value) / 2! END SUB SUB Whisper_Lite3_Stop () NoteOff Whisper.channel, 122 END SUB SUB Whisper_lite4 () STATIC cnt AS DWORD STATIC slnr AS DWORD STATIC noot AS BYTE IF ISFALSE Task(%Whisper_Lite4).tog THEN DIM TaskParamLabels(0) AS ASCIIZ * 8 TaskParamLabels(0) = "Tempo" IF ISFALSE Task(%Whisper_Lite4).hParam THEN slnr = %False MakeTaskParameterDialog %Whisper_Lite4,1,Slider(),0,UDctrl(),TaskParamLabels() END IF IF slnr = %False THEN slnr = TaskEX(%Whisper_Lite4).SliderNumbers(0) Task(%Whisper_Lite4).freq = 0.33 Slider(slnr).value = 127 SendMessage Slider(Slnr).h, %TBM_SETPOS,%True, Slider(Slnr).value END IF cnt = %False noot = 123 Task(%Whisper_Lite4).tog = %True END IF IF ISFALSE cnt THEN mPlay Whisper.channel, noot, Slider(slnr).value cnt = %True ELSE NoteOff Whisper.channel, noot cnt = %False END IF 'Task(%Whisper_Lite4).freq = (Slider(slnr).value) / 2! END SUB SUB Whisper_Lite4_Stop () NoteOff Whisper.channel, 123 END SUB SUB Whisper_Bells () ' this is mapped on midi note 86, sleigh bells STATIC cnt AS DWORD STATIC slnr AS DWORD STATIC noot AS BYTE IF ISFALSE Task(%Whisper_Bells).tog THEN DIM TaskParamLabels(0) AS ASCIIZ * 8 TaskParamLabels(0) = "Tempo" IF ISFALSE Task(%Whisper_Bells).hParam THEN slnr = %False MakeTaskParameterDialog %Whisper_Bells,1,Slider(),0,UDctrl(),TaskParamLabels() END IF IF slnr = %False THEN slnr = TaskEX(%Whisper_Bells).SliderNumbers(0) Task(%Whisper_Bells).freq = 2 Slider(slnr).value = Task(%Whisper_Bells).freq SendMessage Slider(Slnr).h, %TBM_SETPOS,%True, Slider(Slnr).value END IF cnt = %False noot = 86 Task(%Whisper_Bells).tog = %True END IF IF ISFALSE cnt THEN mPlay Whisper.channel, noot, 127 cnt = %True ELSE NoteOff Whisper.channel, noot cnt = %False END IF Task(%Whisper_Bells).freq = (Slider(slnr).value) / 2! END SUB SUB Whisper_Bells_Stop () NoteOff Whisper.channel, 86 END SUB SUB Whisper_Shaker1 () ' tests o.k. - frontal shaker ' has autorepeats implemented? Probably not. (Midihub board) ' implemented on the hub board in version 1.1 ' not functioning apparently ' 20.08.2013: Firmware version 1.2, now functions o.k. STATIC cnt AS DWORD STATIC slnr AS DWORD IF ISFALSE Task(%Whisper_Shake1).tog THEN DIM TaskParamLabels(1) AS ASCIIZ * 8 TaskParamLabels(0) = "Tempo" TaskParamLabels(1) = "Reps" IF ISFALSE Task(%Whisper_Shake1).hParam THEN slnr = %False MakeTaskParameterDialog %Whisper_Shake1,2,Slider(),0,UDctrl(),TaskParamLabels() END IF IF slnr = %False THEN slnr = TaskEX(%Whisper_Shake1).SliderNumbers(0) Task(%Whisper_Shake1).freq = 1 Slider(slnr).value = Task(%Whisper_Shake1).freq SendMessage Slider(Slnr).h, %TBM_SETPOS,%True, Slider(Slnr).value Slider(slnr+1).value = 110 SendMessage Slider(Slnr+1).h, %TBM_SETPOS,%True, Slider(Slnr+1).value END IF cnt = %False Task(%Whisper_Shake1).tog = %True END IF IF ISFALSE cnt THEN mPlay Whisper.channel, 83, MAX(1,Slider(slnr+1).value) cnt = %True ELSE NoteOff Whisper.channel, 83 cnt = %False END IF Task(%Whisper_Shake1).freq = MAX(0.125, (Slider(slnr).value) / 8!) END SUB SUB Whisper_Shaker1_Stop () NoteOff Whisper.channel, 83 END SUB SUB Whisper_Shaker2 () ' ok. Back shaker - quad PIC board ' has autorepeats implemented. Quad PIC board, PIC4 STATIC cnt AS DWORD STATIC slnr AS DWORD IF ISFALSE Task(%Whisper_Shake2).tog THEN DIM TaskParamLabels(1) AS ASCIIZ * 8 TaskParamLabels(0) = "Tempo" TaskParamLabels(1) = "Reps" IF ISFALSE Task(%Whisper_Shake2).hParam THEN slnr = %False MakeTaskParameterDialog %Whisper_Shake2,2,Slider(),0,UDctrl(),TaskParamLabels() END IF IF slnr = %False THEN slnr = TaskEX(%Whisper_Shake2).SliderNumbers(0) Task(%Whisper_Shake2).freq = 0.5 Slider(slnr).value = Task(%Whisper_Shake2).freq SendMessage Slider(Slnr).h, %TBM_SETPOS,%True, Slider(Slnr).value Slider(slnr+1).value = 114 SendMessage Slider(Slnr+1).h, %TBM_SETPOS,%True, Slider(Slnr+1).value END IF cnt = %False Task(%Whisper_Shake2).tog = %True END IF IF ISFALSE cnt THEN mPlay Whisper.channel, 84, MAX(1,Slider(slnr+1).value) cnt = %True ELSE NoteOff Whisper.channel, 84 cnt = %False END IF Task(%Whisper_Shake2).freq = MAX(0.125, (Slider(slnr).value) / 8!) END SUB SUB Whisper_Shaker2_Stop () NoteOff Whisper.channel, 84 END SUB SUB Whisper_Shaker3 () ' ok Back shaker, quad pic board STATIC cnt AS DWORD STATIC slnr AS DWORD IF ISFALSE Task(%Whisper_Shake3).tog THEN DIM TaskParamLabels(1) AS ASCIIZ * 8 TaskParamLabels(0) = "Tempo" TaskParamLabels(1) = "Reps" IF ISFALSE Task(%Whisper_Shake3).hParam THEN slnr = %False MakeTaskParameterDialog %Whisper_Shake3,2,Slider(),0,UDctrl(),TaskParamLabels() END IF IF slnr = %False THEN slnr = TaskEX(%Whisper_Shake3).SliderNumbers(0) Task(%Whisper_Shake3).freq = 0.5 Slider(slnr).value = Task(%Whisper_Shake3).freq SendMessage Slider(Slnr).h, %TBM_SETPOS,%True, Slider(Slnr).value Slider(slnr+1).value = 120 SendMessage Slider(Slnr+1).h, %TBM_SETPOS,%True, Slider(Slnr+1).value END IF cnt = %False Task(%Whisper_Shake3).tog = %True END IF IF ISFALSE cnt THEN mPlay Whisper.channel, 85, MAX(1,Slider(slnr+1).value) cnt = %True ELSE NoteOff Whisper.channel, 85 cnt = %False END IF Task(%Whisper_Shake3).freq = MAX(0.125,(Slider(slnr).value) / 8!) END SUB SUB Whisper_Shaker3_Stop () NoteOff Whisper.channel, 85 END SUB SUB Whisper_Res9 () ' dit is de ventilator op de hoorn onderaan de windlade. ' sturing door midi-hub board. STATIC slnr AS DWORD STATIC noot, value AS DWORD IF ISFALSE Task(%Whisper_Res9).tog THEN DIM TaskParamLabels(0) AS ASCIIZ * 8 TaskParamLabels(0) = "Wind" IF ISFALSE Task(%Whisper_Res9).hParam THEN slnr = %False MakeTaskParameterDialog %Whisper_Res9,1,Slider(),0,UDctrl(),TaskParamLabels() END IF IF slnr = %False THEN slnr = TaskEX(%Whisper_Res9).SliderNumbers(0) Task(%Whisper_Res9).freq = 20 Slider(slnr).value = 10 SendMessage Slider(Slnr).h, %TBM_SETPOS,%True, Slider(Slnr).value END IF noot = 72 RESET value Task(%Whisper_Res9).tog = %True END IF IF Slider(slnr).value <> value THEN mPlay Whisper.channel, noot, Slider(slnr).value value = Slider(slnr).value END IF END SUB SUB Whisper_Res9_Stop () Noteoff Whisper.channel, 72 END SUB SUB Res_1_2 () STATIC slnr AS DWORD STATIC noot1, noot2, value1, value2 AS DWORD IF ISFALSE Task(%Res_1_2).tog THEN DIM TaskParamLabels(1) AS ASCIIZ * 8 TaskParamLabels(0) = "Wind 1" TaskParamLabels(1) = "Wind 2" IF ISFALSE Task(%Res_1_2).hParam THEN slnr = %False MakeTaskParameterDialog %Res_1_2,2,Slider(),0,UDctrl(),TaskParamLabels() END IF IF slnr = %False THEN slnr = TaskEX(%Res_1_2).SliderNumbers(0) Task(%Res_1_2).freq = 16 Slider(slnr).value = 0 Slider(slnr+1).value = 0 SendMessage Slider(Slnr).h, %TBM_SETPOS,%True, Slider(Slnr).value SendMessage Slider(Slnr+1).h, %TBM_SETPOS,%True, Slider(Slnr+1).value END IF noot1 = 73 noot2 = 74 RESET value1, value2 Task(%Res_1_2).tog = %True END IF IF Slider(slnr).value <> value1 THEN mPlay Whisper.channel, noot1, Slider(slnr).value value1 = Slider(slnr).value END IF IF Slider(slnr+1).value <> value2 THEN mPlay Whisper.channel, noot2, Slider(slnr+1).value value2 = Slider(slnr+1).value END IF END SUB SUB Res_1_2_Stop () Noteoff Whisper.channel, 73 NoteOff Whisper.channel, 74 END SUB SUB Res_3_4 () STATIC slnr AS DWORD STATIC noot1, noot2, value1, value2 AS DWORD IF ISFALSE Task(%Res_3_4).tog THEN DIM TaskParamLabels(1) AS ASCIIZ * 8 TaskParamLabels(0) = "Wind 3" TaskParamLabels(1) = "Wind 4" IF ISFALSE Task(%Res_3_4).hParam THEN slnr = %False MakeTaskParameterDialog %Res_3_4,2,Slider(),0,UDctrl(),TaskParamLabels() END IF IF slnr = %False THEN slnr = TaskEX(%Res_3_4).SliderNumbers(0) Task(%Res_3_4).freq = 15 Slider(slnr).value = 0 Slider(slnr+1).value = 0 SendMessage Slider(Slnr).h, %TBM_SETPOS,%True, Slider(Slnr).value SendMessage Slider(Slnr+1).h, %TBM_SETPOS,%True, Slider(Slnr+1).value END IF noot1 = 75 noot2 = 76 RESET Value1, value2 Task(%Res_3_4).tog = %True END IF IF Slider(slnr).value <> value1 THEN mPlay Whisper.channel, noot1, Slider(slnr).value value1 = Slider(slnr).value END IF IF Slider(slnr+1).value <> value2 THEN mPlay Whisper.channel, noot2, Slider(slnr+1).value value2 = Slider(slnr+1).value END IF END SUB SUB Res_3_4_Stop () Noteoff Whisper.channel, 75 NoteOff Whisper.channel, 76 END SUB SUB Res_5_6 () STATIC slnr AS DWORD STATIC noot1, noot2, value1, value2 AS DWORD IF ISFALSE Task(%Res_5_6).tog THEN DIM TaskParamLabels(1) AS ASCIIZ * 8 TaskParamLabels(0) = "Wind 5" TaskParamLabels(1) = "Wind 6" IF ISFALSE Task(%Res_5_6).hParam THEN slnr = %False MakeTaskParameterDialog %Res_5_6,2,Slider(),0,UDctrl(),TaskParamLabels() END IF IF slnr = %False THEN slnr = TaskEX(%Res_5_6).SliderNumbers(0) Task(%Res_5_6).freq = 14 Slider(slnr).value = 0 Slider(slnr+1).value = 0 SendMessage Slider(Slnr).h, %TBM_SETPOS,%True, Slider(Slnr).value SendMessage Slider(Slnr+1).h, %TBM_SETPOS,%True, Slider(Slnr+1).value END IF noot1 = 77 ' pic3 noot2 = 78 ' pic4 RESET value1, value2 Task(%Res_5_6).tog = %True END IF IF Slider(slnr).value <> value1 THEN mPlay Whisper.channel, noot1, Slider(slnr).value value1 = Slider(slnr).value END IF IF Slider(slnr+1).value <> value2 THEN mPlay Whisper.channel, noot2, Slider(slnr+1).value value2 = Slider(slnr+1).value END IF END SUB SUB Res_5_6_Stop () Noteoff Whisper.channel, 77 NoteOff Whisper.channel, 78 END SUB SUB Res_7_8 () STATIC slnr AS DWORD STATIC noot1, noot2, value1, value2 AS DWORD IF ISFALSE Task(%Res_7_8).tog THEN DIM TaskParamLabels(1) AS ASCIIZ * 8 TaskParamLabels(0) = "Wind 7" TaskParamLabels(1) = "Wind 8" IF ISFALSE Task(%Res_7_8).hParam THEN slnr = %False MakeTaskParameterDialog %Res_7_8,2,Slider(),0,UDctrl(),TaskParamLabels() END IF IF slnr = %False THEN slnr = TaskEX(%Res_7_8).SliderNumbers(0) Task(%Res_7_8).freq = 17 Slider(slnr).value = 0 Slider(slnr+1).value = 0 SendMessage Slider(Slnr).h, %TBM_SETPOS,%True, Slider(Slnr).value SendMessage Slider(Slnr+1).h, %TBM_SETPOS,%True, Slider(Slnr+1).value END IF noot1 = 79 ' pic3 noot2 = 80 ' pic4 RESET value1, value2 Task(%Res_7_8).tog = %True END IF IF Slider(slnr).value <> value1 THEN mPlay Whisper.channel, noot1, Slider(slnr).value value1 = Slider(slnr).value END IF IF Slider(slnr+1).value <> value2 THEN mPlay Whisper.channel, noot2, Slider(slnr+1).value value2 = Slider(slnr+1).value END IF END SUB SUB Res_7_8_Stop () Noteoff Whisper.channel, 79 NoteOff Whisper.channel, 80 END SUB SUB Whisper_CC66 () ' to test CC66 STATIC slnr AS DWORD STATIC value, oldvalue AS DWORD IF ISFALSE Task(%Whisper_CC66).tog THEN DIM TaskParamLabels(0) AS ASCIIZ * 8 TaskParamLabels(0) = "CC66" IF ISFALSE Task(%Whisper_CC66).hParam THEN slnr = %False MakeTaskParameterDialog %Whisper_CC66,1,Slider(),0,UDctrl(),TaskParamLabels() END IF IF slnr = %False THEN slnr = TaskEX(%Whisper_CC66).SliderNumbers(0) Slider(slnr).value = 0 SendMessage Slider(Slnr).h, %TBM_SETPOS,%True, Slider(Slnr).value END IF Task(%Whisper_CC66).tog = %True END IF IF Slider(slnr).value <> 0 THEN value = 85 ELSE RESET value END IF IF value <> oldvalue THEN Controller Whisper.channel, 66, value Whisper.ctrl(66) = value oldvalue = value END IF END SUB '************************************************************************************ SUB Whispers () ' demostukje gwr. STATIC sectie, cnt, n, m, i, noot, velo, T AS DWORD IF ISFALSE Task(%Whispers).tog THEN RESET cnt, sectie, n, m logfile "Whispers for Whisper - timelog" logfile TIME$ & " " & STR$(sectie) T = timeGetTime Controller Whisper.channel, 66, 83 ' switch ON! Task(%Whispers).freq = 10 Task(%Whispers).tog = %True END IF n = cnt MOD 128 m = cnt \ 128 INCR cnt SELECT CASE Sectie CASE 0 ' intro: cavity resonators van hoog naar laag IF m < 9 THEN mPlay Whisper.channel, 80 - m, n IF n = 0 THEN logfile "resonator: " & STR$(80-m) IF n = 127 THEN NoteOff Whisper.channel, 80 - m ELSE ' exit condition INCR Sectie logfile TIME$ & " " & STR$(sectie) & STR$(m) & STR$(n) & " start lotto molen " END IF CASE 1 ' de lotto molen komt op gang SELECT CASE n MOD 4 CASE 0 mPlay Whisper.channel, 120, 127 NoteOff Whisper.channel, 123 CASE 1 mPlay Whisper.channel, 121, 127 NoteOff Whisper.channel, 120 CASE 2 mPlay Whisper.channel, 122, 127 NoteOff Whisper.channel, 121 CASE 3 mPlay Whisper.channel, 123, 127 NoteOff Whisper.channel, 122 END SELECT mPlay Whisper.channel, 82, n ' van 0 tot 127 IF n = 127 THEN INCR sectie logfile TIME$ & " " & STR$(sectie) & STR$(m) & STR$(n) & " lotto molen op maximum " FOR i = 120 TO 123 mPlay Whisper.channel, i, 127 ' all lights on NEXT i END IF CASE 2 mPlay Whisper.channel, 82, 127 ' lotto bal aan op max. IF m = 12 THEN INCR sectie logfile TIME$ & " " & STR$(sectie) & STR$(m) & STR$(n) & " rubbed string starts " END IF CASE 3 mPlay Whisper.channel, 81, n ' rubbed string IF n = 127 THEN INCR sectie NoteOff Whisper.channel, 81 logfile TIME$ & " " & STR$(sectie) & STR$(m) & STR$(n) & " start frontale shaker" NoteOff Whisper.channel, 122 NoteOff Whisper.channel, 123 END IF CASE 4 Task(%Whispers).freq = 0.8 mPlay Whisper.channel, 83, 10 + (RND(1) * 48) IF n = 20 THEN INCR sectie NoteOff Whisper.channel, 83 logfile TIME$ & " " & STR$(sectie) & STR$(m) & STR$(n)& " add back shaker... " NoteOff Whisper.channel, 120 mPlay Whisper.channel, 121, 48 END IF CASE 5 Task(%Whispers).freq = 1 mPlay Whisper.channel, 83, 10 + RND(1) * 48 mPlay Whisper.channel, 84, 10 + RND(1) * 48 IF n = 30 THEN INCR sectie NoteOff Whisper.channel, 83 NoteOff Whisper.channel, 84 logfile TIME$ & " " & STR$(sectie) & STR$(m) & STR$(n) & " all shakers together... " mPlay Whisper.channel, 122, 52 END IF CASE 6 Task(%Whispers).freq = 1.2 mPlay Whisper.channel, 83, 10 + RND(1) * 64 mPlay Whisper.channel, 84, 10 + RND(1) * 64 mPlay Whisper.channel, 85, 6 + RND(1) * 48 IF n = 127 THEN INCR sectie NoteOff Whisper.channel, 83 NoteOff Whisper.channel, 84 NoteOff Whisper.channel, 85 logfile TIME$ & " " & STR$(sectie) & STR$(m) & STR$(n) & " all shakers should stop and restart in sync" END IF CASE 7 ' shakers in sync: mPlay Whisper.channel, 83, 24 mPlay Whisper.channel, 84, 18 mPlay Whisper.channel, 85, 12 mPlay Whisper.channel, 86, 6 ' sleigh bells ' exit konditie: IF n = 16 THEN INCR sectie mPlay Whisper.channel, 82, 127 NoteOff Whisper.channel, 83 NoteOff Whisper.channel, 84 NoteOff Whisper.channel, 85 NoteOff Whisper.channel, 86 logfile TIME$ & " " & STR$(sectie) & STR$(m) & STR$(n) & " all shakers should stop, start resonators " END IF CASE 8 ' alle resonatoren en overige onderdelen dooreen: Task(%Whispers).freq = 4 noot = 72 + (RND(1) * 15) velo = MAX(1, RND(1) * 127) mPlay Whisper.channel, noot, velo IF n = RND(1) * 126 THEN INCR sectie Controller Whisper.channel, 123, %False ' this will make the cage stop also END IF ' lampjes: mPlay Whisper.channel, 120, 40 + (RND(1) * 70) mPlay Whisper.channel, 121, 40 + (RND(1) * 70) mPlay Whisper.channel, 122, 10 + (RND(1) * 70) mPlay Whisper.channel, 123, 10 + (RND(1) * 70) IF n = 127 THEN INCR sectie Controller Whisper.channel, 123, %False logfile TIME$ & " " & STR$(sectie) & STR$(m) & STR$(n) & " start afbouw resonatoren" END IF CASE 9 ' afbouw Task(%Whispers).freq = 2 FOR i = 72 TO 80 mPlay Whisper.channel, i, RND(1) * (127 - n) NEXT i IF n = 127 THEN INCR sectie NoteOff Whisper.channel, 73 NoteOff Whisper.channel, 72 NoteOff Whisper.channel, 74 NoteOff Whisper.channel, 76 NoteOff Whisper.channel, 78 NoteOff Whisper.channel, 75 NoteOff Whisper.channel, 77 NoteOff Whisper.channel, 79 NoteOff Whisper.channel, 80 logfile TIME$ & " " & STR$(sectie) & STR$(m) & STR$(n) & " slot met rubbed string" ' alle lampjes aan: FOR i = 120 TO 123 mPlay Whisper.channel, i, 127 NEXT i 'exit sub END IF SELECT CASE n MOD 4 CASE 0 mPlay Whisper.channel, 120, 127 NoteOff Whisper.channel, 123 CASE 1 mPlay Whisper.channel, 121, 127 NoteOff Whisper.channel, 120 CASE 2 mPlay Whisper.channel, 122, 127 NoteOff Whisper.channel, 121 CASE 3 mPlay Whisper.channel, 123, 127 NoteOff Whisper.channel, 122 END SELECT CASE 10 IF n = 1 THEN NoteOff Whisper.channel, 73 NoteOff Whisper.channel, 72 NoteOff Whisper.channel, 74 NoteOff Whisper.channel, 76 NoteOff Whisper.channel, 78 NoteOff Whisper.channel, 75 NoteOff Whisper.channel, 77 NoteOff Whisper.channel, 79 NoteOff Whisper.channel, 80 END IF ' slot met rubbed string: Task(%Whispers).freq = 5 mPlay Whisper.channel, 81, 127 - n IF (127-n) < 48 THEN INCR sectie logfile TIME$ & " " & STR$(sectie) & STR$(m) & STR$(n) & " ending with rubbed string glis. down" END IF CASE 11 Controller Whisper.channel, 123, %False logfile TIME$ & " " & STR$(sectie) & STR$(m) & STR$(n) logfile "Duur=" & STR$((TimeGetTime - T) / 1000) logfile "The end" Stoptask %Whispers END SELECT END SUB SUB Whispers_Stop () NoteOff Whisper.channel, 83 NoteOff Whisper.channel, 84 NoteOff Whisper.channel, 85 NoteOff Whisper.channel, 86 Controller Whisper.channel, 123, 0 END SUB 'EOF