' *************************************** ' * * ' * test and evaluation code * ' *************************************** ' 11.09.2004: module added to GMT ' 12.09.2004; continuation of code development ' 20.09.2004: plays its very first notes over midi... ' 24.09.2004: debug session PIC1 ' 30.06.2005: sopraan verbeterd. procs. added for key alignment. ' 09.08.2005: wind waarde getest: bij blaaswind is +- 70 de beste waarde ' noten die (soms) niet spelen: 50, 51, 53, 77, 80, 83, 89, 92, 95, 96 ' 03.09.2006: teflon pads toegevoegd op hoogste rij knoppen van de melodiekant. ' 20.08.2008: Ake versie 2.0: nu met drie mikroprocessors. ' 23.08.2008: to do: ctrl's voor rotatie van de klep. ' 24.08.2008: rotatie klep kode toegevoegd. Note repeat test eveneens. ' Ake is dringend aan een grondige stembeurt toe... ' 19.09.2009: PIC firmware voor de klep herschreven. ' 20.06.2009: code adapted. gwr. %Ake_test = 8 %Ake_Motor = 9 %Ake_Lights = 10 %Ake_test1 = 11 %Ake_Test2 = 12 %Ake_Test3 = 13 %Ake_Lite120 = 32 %Ake_Lite121 = 33 %Ake_Lite122 = 34 %Ake_Lite123 = 35 %Ake_Lite124 = 36 %Ake_Lite125 = 37 %Ake_Lite126 = 38 %Ake_Lite127 = 39 %Ake_Reg_Tst = 48 ' register test %Ake_Rot_L = 49 ' rotatie van de windklep links (CCW) %Ake_Rot_R = 50 ' rotatie van de windklep rechts (CW) %Ake_Repeat = 51 ' note-repetition test. DECLARE FUNCTION InitAke () AS LONG DECLARE SUB Ake_Test () ' tests all notes DECLARE SUB Ake_Test1 () ' sopraan note row 1 DECLARE SUB Ake_Test2 () ' row 2 DECLARE SUB Ake_Test3 () ' row 3 DECLARE SUB Ake_LoLim_UD1 () ' callback DECLARE SUB Ake_HiLim_UD2 () ' callback DECLARE SUB Ake_Windslider () ' motor speed - ctrl 1 DECLARE SUB Ake_ValveSlider () ' valve position - ctrl 7 DECLARE SUB Ake_Regs () ' callback DECLARE SUB Ake_Reg_Tst () ' registertest 2008 DECLARE SUB Ake_Rot_Left () ' ctrl DECLARE SUB Ake_Rot_Right () ' ctrl DECLARE SUB Ake_Repeats () DECLARE SUB Ake_Lights () ' light test DECLARE SUB Ake_Motor () ' test motor PIC DECLARE SUB Ake_Motorslider_M () ' callback motor task, motor speed slider DECLARE SUB Ake_controlroom DECLARE CALLBACK FUNCTION CB_Ake_Controlroom GLOBAL hwCtrlAke AS LONG GLOBAL hWindTrackBar AS LONG GLOBAL hValveTrackBar AS LONG FUNCTION InitAke () AS LONG Task(%Ake_test).naam = "Aketest" Task(%Ake_test).cptr = CODEPTR(Ake_test) Task(%Ake_test).freq = 2 Task(%Ake_test).flags = %False TaskEX(%Ake_test).stopCptr = CODEPTR(MM_Ake_Off) Task(%Ake_test1).naam = "Ake_R1" Task(%Ake_test1).cptr = CODEPTR(Ake_test1) Task(%Ake_test1).freq = 6 Task(%Ake_test1).flags = %False TaskEX(%Ake_test1).stopCptr = CODEPTR(MM_Ake_Off) Task(%Ake_test2).naam = "Ake_R2" Task(%Ake_test2).cptr = CODEPTR(Ake_test2) Task(%Ake_test2).freq = 6 Task(%Ake_test2).flags = %False TaskEX(%Ake_test2).stopCptr = CODEPTR(MM_Ake_Off) Task(%Ake_test3).naam = "Ake_R3" Task(%Ake_test3).cptr = CODEPTR(Ake_test3) Task(%Ake_test3).freq = 6 Task(%Ake_test3).flags = %False TaskEX(%Ake_test3).stopCptr = CODEPTR(MM_Ake_Off) Task(%Ake_Lights).naam = "AkeLites" Task(%Ake_Lights).cptr = CODEPTR(Ake_Lights) Task(%Ake_Lights).freq = 2 Task(%Ake_Lights).flags = %False Task(%Ake_motor).naam = "AkeMotor" Task(%Ake_motor).cptr = CODEPTR(Ake_Motor) Task(%Ake_motor).freq = 10 Task(%Ake_motor).flags = %False Task(%Ake_Reg_Tst).naam = "RegTest" Task(%Ake_reg_tst).cptr = CODEPTR(Ake_Reg_Tst) Task(%Ake_reg_tst).freq = 1 Task(%Ake_reg_tst).flags = %False Task(%Ake_Rot_L).naam = "Rot_L" Task(%Ake_rot_L).cptr = CODEPTR(Ake_Rot_Left) Task(%Ake_rot_L).freq = 10 Task(%Ake_rot_L).flags = %False Task(%Ake_Rot_R).naam = "Rot_R" Task(%Ake_rot_R).cptr = CODEPTR(Ake_Rot_Right) Task(%Ake_rot_R).freq = 10 Task(%Ake_rot_R).flags = %False Task(%Ake_Repeat).naam = "Repetition" Task(%Ake_Repeat).cptr = CODEPTR(Ake_Repeats) Task(%Ake_Repeat).freq = 10 Task(%Ake_Repeat).flags = %False ButnSW(6).tag0 = "AkeCtrl tog" ButnSW(6).tag1 = "AkeCtrl tog" ButnSW(6).cptr = CODEPTR(Ake_Controlroom) SetDlgItemText gh.Cockpit, %GMT_TITLE, "" FUNCTION = %True END FUNCTION SUB Ake_Test () STATIC i AS DWORD STATIC slnr AS DWORD STATIC oldnote AS INTEGER STATIC lowpress AS BYTE STATIC highpress AS BYTE IF ISFALSE Task(%Ake_Test).tog THEN DIM TaskParamLabels(0 TO 6) AS ASCIIZ * 8 TaskParamLabels(0) = "Tempo" ' slider TaskParamLabels(1) = "Valve" ' slider - 4-way mixing valve TaskParamlabels(2) = "Wind" ' slider - motor speed TaskParamLabels(3) = "LowLim" ' UD - lowest note to test scale TaskParamLabels(4) = "HiLim" ' uD - highest note to test scale TaskParamLabels(5) = "Regs" ' UD - register solenoids: 0= prg1, 1=prg2 , 2= solenoids deactivated TaskParamLabels(6) = "BloSuc" ' UD - ctrl. 6 (2008) IF ISFALSE Task(%Ake_Test).hParam THEN slnr = %False MakeTaskParameterDialog %Ake_Test,3,Slider(),4,UDctrl(),TaskParamLabels() END IF IF slnr = %False THEN slnr = TaskEX(%Ake_Test).SliderNumbers(0) Slider(slnr+1).cptr = CODEPTR(Ake_ValveSlider) Slider(slnr+2).cptr = CODEPTR(Ake_WindSlider) UDctrl(TaskEX(%Ake_Test).UpdownNumbers(0)).cptr = CODEPTR(Ake_LoLim_UD1) ' lowest note UDctrl(TaskEX(%Ake_Test).UpdownNumbers(1)).cptr = CODEPTR(Ake_HiLim_UD2) ' highest note UDctrl(TaskEX(%Ake_Test).UpDownNumbers(0)).value = Ake.lowtes UDctrl(TaskEX(%Ake_Test).UpDownNumbers(1)).value = Ake.hightes UDctrl(TaskEX(%Ake_Test).UpDownNumbers(2)).cptr = CODEPTR(Ake_Regs) UDctrl(TaskEX(%Ake_Test).UpdownNumbers(2)).value = 2 ' off UDctrl(TaskEX(%Ake_Test).UpdownNumbers(3)).cptr = CODEPTR(Ake_BlowSuck) ' 2008 UDctrl(TaskEX(%Ake_Test).UpdownNumbers(3)).value = 0 ' suck i = UDctrl(TaskEX(%Ake_Test).UpDownNumbers(0)).value Task(%Ake_Test).freq = 2 Slider(slnr).value = Task(%Ake_Test).freq Slider(slnr+1).value = 0 ' 2008: valve pressure Slider(slnr+2).value = %False ' motor off SendMessage Slider(Slnr).h, %TBM_SETPOS,%True, Slider(Slnr).value SendMessage Slider(Slnr+1).h, %TBM_SETPOS,%True, 64 SendMessage Slider(Slnr+2).h, %TBM_SETPOS,%True, 0 END IF i = Ake.lowtes Task(%Ake_Test).tog = %True END IF ' valve = Slider(slnr+1).value ' motor = Slider(slnr+2).value IF oldnote THEN mPlay Ake.channel, oldnote, 0 oldnote = %False END IF IF Ake.ctrl(1) <> Slider(slnr+2).value THEN Controller Ake.channel, 1, Slider(slnr+2).value ' motor Ake.ctrl(1) = Slider(slnr+2).value END IF IF Ake.ctrl(7) <> Slider(slnr+1).value THEN Controller Ake.channel, 7, Slider(slnr+1).value ' valve Ake.ctrl(7) = Slider(slnr+1).value END IF mPlay Ake.channel, i, 64 CONTROL SET TEXT gh.cockpit, %GMT_MSG1, "note:" + STR$(i) oldnote = i INCR i IF i = 43 THEN i = 49 ' jump over whole IF i > UDctrl(TaskEX(%Ake_Test).UpDownNumbers(1)).value THEN i = UDctrl(TaskEX(%Ake_Test).UpDownNumbers(0)).value Task(%Ake_Test).freq = 16 * (Slider(slnr).value) / 128! IF Task(%Ake_Test).freq < 0.25 THEN Task(%Ake_Test).freq = 0.25 END SUB SUB Ake_BlowSuck () ' UD callback voor ctrl 6. (Blow suck) LOCAL bs AS BYTE LOCAL udnr AS DWORD udnr = TaskEX(%Ake_Test).UpDownNumbers(3) bs = UDCtrl(udnr).value IF bs > 1 THEN UDctrl(udnr).value = 1 : bs = UDctrl(udnr).value IF bs < 0 THEN UDctrl(udnr).value = 0 : bs = 0 SetDlgItemText Task(%Ake_Test).hparam, %GMT_TEXT0_ID + 19, "b=" & STR$(bs) Ake.ctrl(6) = bs Controller Ake.channel, 6, bs END SUB SUB Ake_ValveSlider () ' mixing valve ' 0 = suction wind maximum ' 64 = no wind ' 127 = maximum pressure wind (blowing) LOCAL slnr AS DWORD LOCAL valve AS BYTE slnr = TaskEX(%Ake_Test).SliderNumbers(1) valve = Slider(slnr).value Controller Ake.channel, 7, valve Ake.ctrl(7) = valve END SUB SUB Ake_Windslider () ' motor LOCAL slnr AS DWORD LOCAL wind AS BYTE slnr = TaskEX(%Ake_Test).SliderNumbers(2) wind = Slider(slnr).value Controller Ake.channel, 1, wind Ake.ctrl(1) = wind END SUB SUB Ake_LoLim_UD1 () ' controls the low limit of the note scale to be played. ' 19-42 = basses ' 49-94 = melody LOCAL noot AS BYTE LOCAL udnr AS DWORD udnr = TaskEX(%Ake_Test).UpDownNumbers(0) noot = UDCtrl(udnr).value IF noot = 43 THEN noot = 49 : UDctrl(udnr).value = noot IF noot = 48 THEN noot = 42 : UDctrl(udnr).value = noot ' IF noot > 42 THEN ' IF noot < 49 THEN ' noot = 49 ' UDctrl(udnr).value = noot ' end if ' END IF IF noot < Ake.lowtes THEN UDctrl(udnr).value = Ake.lowtes: noot = Ake.lowtes IF noot > UDctrl(udnr+1).value THEN UDctrl(udnr).value = UDctrl(udnr+1).value : noot = UDctrl(udnr).value SetDlgItemText Task(%Ake_Test).hparam, %GMT_TEXT0_ID + 16, "Lo=" & STR$(noot) END SUB SUB Ake_HiLim_UD2 () ' controls the high limit of the note scale to be played. LOCAL noot AS BYTE LOCAL udnr AS DWORD udnr = TaskEX(%Ake_Test).UpDownNumbers(1) noot = UDCtrl(udnr).value IF noot = 43 THEN noot = 49 : UDctrl(udnr).value = noot IF noot = 48 THEN noot = 42 : UDctrl(udnr).value = noot ' IF noot > 42 THEN ' IF noot < 49 THEN ' noot = 49 ' UDctrl(udnr).value = noot ' end if ' END IF IF noot < UDctrl(udnr-1).value THEN UDctrl(udnr).value = UDctrl(udnr-1).value : noot = UDctrl(udnr).value IF noot > Ake.Hightes THEN UDctrl(udnr).value = Ake.hightes : noot = Ake.hightes SetDlgItemText Task(%Ake_Test).hparam, %GMT_TEXT0_ID + 17, "Hi=" & STR$(noot) END SUB SUB Ake_Regs () ' controls the register solenoids on the melody side LOCAL prg AS BYTE LOCAL udnr AS DWORD udnr = TaskEX(%Ake_Test).UpDownNumbers(2) prg = UDCtrl(udnr).value IF prg > 2 THEN UDctrl(udnr).value = 2 : prg = UDctrl(udnr).value IF prg < 0 THEN UDctrl(udnr).value = 0 : prg = 0 SetDlgItemText Task(%Ake_Test).hparam, %GMT_TEXT0_ID + 18, "R=" & STR$(prg) ProgChange Ake.channel, prg END SUB SUB Ake_Lights () ' versie 1.0 - now old. ' was mapped on notes 95,96, now 120-127 ' updated 31.08.2008 STATIC cnt AS DWORD Task(%Ake_Lights).freq = 1 IF cnt MOD 5 THEN ' lang uit IF Ake.ctrl(120) THEN mPlay Ake.channel, 120, 0 ' linkerlamp, frontaal gezien. Ake.ctrl(120) = %False END IF ELSE ' kort aan IF ISFALSE Ake.ctrl(120) THEN mPlay Ake.channel, 120, 127 Ake.ctrl(120) = %True END IF END IF IF cnt MOD 7 THEN IF Ake.ctrl(121) THEN mPlay Ake.channel, 121, 0 ' rechterlamp, frontaal gezien Ake.ctrl(121) = %False END IF ELSE IF ISFALSE Ake.ctrl(121) THEN mPlay Ake.channel, 121, 127 Ake.ctrl(121) = %True END IF END IF IF cnt MOD 6 THEN ' lang uit IF Ake.ctrl(122) THEN mPlay Ake.channel, 122, 0 Ake.ctrl(122) = %False END IF ELSE ' kort aan IF ISFALSE Ake.ctrl(122) THEN mPlay Ake.channel, 122, 127 Ake.ctrl(122) = %True END IF END IF IF cnt MOD 8 THEN IF Ake.ctrl(123) THEN mPlay Ake.channel, 123, 0 Ake.ctrl(123) = %False END IF ELSE IF ISFALSE Ake.ctrl(123) THEN mPlay Ake.channel, 123, 127 Ake.ctrl(123) = %True END IF END IF INCR cnt END SUB SUB Ake_Motor () ' motor controller - windpressure STATIC slnr AS DWORD IF ISFALSE Task(%Ake_Motor).tog THEN DIM TaskParamLabels(0) AS ASCIIZ * 8 TaskParamLabels(0) = "Wind" IF ISFALSE Task(%Ake_Motor).hParam THEN slnr = %False MakeTaskParameterDialog %Ake_Motor,1,Slider(),0,UDctrl(),TaskParamLabels() END IF IF slnr = %False THEN slnr = TaskEX(%Ake_Motor).SliderNumbers(0) Slider(slnr).cptr = CODEPTR(Ake_Motorslider_M) Task(%Ake_Motor).freq = 10 Slider(slnr).value = 0 SendMessage Slider(Slnr).h, %TBM_SETPOS,%True, Slider(Slnr).value END IF IF ISFALSE Ake.ctrl(66) THEN Controller Ake.channel, 66, 127 : Ake.ctrl(66) = 127 Task(%Ake_Motor).tog = %True END IF ' make sure motor does not run idle... IF Ake.ctrl(1) <> Slider(slnr).value THEN Controller Ake.channel, 1, Slider(slnr).value ' value stored in Ake.ctrl(1) Ake.ctrl(1) = Slider(slnr).value END IF END SUB SUB Ake_Motorslider_M () ' motor speed LOCAL slnr AS DWORD slnr = TaskEX(%Ake_Motor).SliderNumbers(0) Controller Ake.channel, 1, Slider(slnr).value Ake.ctrl(1) = Slider(slnr).value END SUB SUB Ake_controlroom 'debugged kl 040928 LOCAL i AS LONG LOCAL x AS LONG LOCAL b$ IF ISFALSE hwCtrlAke THEN DIALOG NEW 0, "Ake Control",1,40 ,580, 104, %WS_CAPTION OR %WS_POPUP OR %WS_SYSMENU TO hwCtrlAke x = 5 FOR i = Ake.lowtes TO 42 '((Ake.LowTes + Ake.HighTes)/2) - 1 SELECT CASE (i MOD 12) CASE 0 CONTROL ADD CHECKBOX, hwCtrlAke, i, "C", x, 55, 18, 12, %BS_PUSHLIKE x = x + 10 CASE 1 CONTROL ADD CHECKBOX, hwCtrlAke, i, "C#", x, 43, 18, 12, %BS_PUSHLIKE x = x + 10 CASE 2 CONTROL ADD CHECKBOX, hwCtrlAke, i, "D", x, 55, 18, 12, %BS_PUSHLIKE x = x + 10 CASE 3 CONTROL ADD CHECKBOX, hwCtrlAke, i, "D#", x, 43, 18, 12, %BS_PUSHLIKE x = x + 10 CASE 4 CONTROL ADD CHECKBOX, hwCtrlAke, i, "E", x, 55, 18, 12, %BS_PUSHLIKE x = x + 20 CASE 5 CONTROL ADD CHECKBOX, hwCtrlAke, i, "F", x, 55, 18, 12, %BS_PUSHLIKE x = x + 10 CASE 6 CONTROL ADD CHECKBOX, hwCtrlAke, i, "F#", x, 43, 18, 12, %BS_PUSHLIKE x = x + 10 CASE 7 CONTROL ADD CHECKBOX, hwCtrlAke, i, "G", x, 55, 18, 12, %BS_PUSHLIKE x = x + 10 CASE 8 CONTROL ADD CHECKBOX, hwCtrlAke, i, "G#", x, 43, 18, 12, %BS_PUSHLIKE x = x + 10 CASE 9 CONTROL ADD CHECKBOX, hwCtrlAke, i, "A", x, 55, 18, 12, %BS_PUSHLIKE x = x + 10 CASE 10 CONTROL ADD CHECKBOX, hwCtrlAke, i, "Bb", x, 43, 18, 12, %BS_PUSHLIKE x = x + 10 CASE 11 CONTROL ADD CHECKBOX, hwCtrlAke, i, "B", x, 55, 18, 12, %BS_PUSHLIKE x = x + 20 END SELECT NEXT x = 5 FOR i = 49 TO Ake.HighTes '((Ake.LowTes + Ake.HighTes)/2) - 1 SELECT CASE (i MOD 12) CASE 0 CONTROL ADD CHECKBOX, hwCtrlAke, i, "C", x, 24, 18, 12, %BS_PUSHLIKE x = x + 10 CASE 1 CONTROL ADD CHECKBOX, hwCtrlAke, i, "C#", x, 12, 18, 12, %BS_PUSHLIKE x = x + 10 CASE 2 CONTROL ADD CHECKBOX, hwCtrlAke, i, "D", x, 24, 18, 12, %BS_PUSHLIKE x = x + 10 CASE 3 CONTROL ADD CHECKBOX, hwCtrlAke, i, "D#", x, 12, 18, 12, %BS_PUSHLIKE x = x + 10 CASE 4 CONTROL ADD CHECKBOX, hwCtrlAke, i, "E", x, 24, 18, 12, %BS_PUSHLIKE x = x + 20 CASE 5 CONTROL ADD CHECKBOX, hwCtrlAke, i, "F", x, 24, 18, 12, %BS_PUSHLIKE x = x + 10 CASE 6 CONTROL ADD CHECKBOX, hwCtrlAke, i, "F#", x, 12, 18, 12, %BS_PUSHLIKE x = x + 10 CASE 7 CONTROL ADD CHECKBOX, hwCtrlAke, i, "G", x, 24, 18, 12, %BS_PUSHLIKE x = x + 10 CASE 8 CONTROL ADD CHECKBOX, hwCtrlAke, i, "G#", x, 12, 18, 12, %BS_PUSHLIKE x = x + 10 CASE 9 CONTROL ADD CHECKBOX, hwCtrlAke, i, "A", x, 24, 18, 12, %BS_PUSHLIKE x = x + 10 CASE 10 CONTROL ADD CHECKBOX, hwCtrlAke, i, "Bb", x, 12, 18, 12, %BS_PUSHLIKE x = x + 10 CASE 11 CONTROL ADD CHECKBOX, hwCtrlAke, i, "B", x, 24, 18, 12, %BS_PUSHLIKE x = x + 20 END SELECT NEXT FOR i = 19 TO 30 CONTROL GET TEXT hwCtrlAke, i TO b$ b$ = "_" + b$ + "_" CONTROL SET TEXT hwCtrlAke, i, b$ NEXT CONTROL ADD LABEL, hwCtrlAke, 500, "WindPress:", 5, 76, 30, 12 CONTROL ADD "msctls_trackbar32", hwCtrlAke, 501, _ "WindPress", 36, 76, 135, 12, %WS_CHILD OR %WS_VISIBLE OR _ %TBS_HORZ OR %TBS_BOTTOM CONTROL ADD LABEL, hwCtrlAke, 503, "?", 174, 76, 30, 12 hWindTrackBar = GetDlgItem(hwCtrlAke,501) CONTROL ADD LABEL, hwCtrlAke, 560, "Valve:", 5, 89, 30, 12 CONTROL ADD "msctls_trackbar32", hwCtrlAke, 561, _ "Valve", 36, 89, 135, 12, %WS_CHILD OR %WS_VISIBLE OR _ %TBS_HORZ OR %TBS_BOTTOM CONTROL ADD LABEL, hwCtrlAke, 563, "?", 174, 89, 30, 12 hValveTrackBar = GetDlgItem(hwCtrlAke,561) SendMessage hValveTrackbar, %TBM_SETPOS,%True, 51 CONTROL ADD BUTTON, hwCtrlAke, 600, "All Off", 247, 76, 30, 12 DIALOG SHOW MODELESS hwCtrlAke CALL CB_Ake_Controlroom ELSE DIALOG END hwCtrlAke hwCtrlAke = 0 END IF END SUB CALLBACK FUNCTION CB_Ake_Controlroom LOCAL wind AS BYTE LOCAL valve AS SINGLE LOCAL i AS LONG LOCAL note AS BYTE SELECT CASE CBMSG CASE %WM_COMMAND SELECT CASE CBCTL CASE Ake.Lowtes TO Ake.hightes 'note checkboxes CONTROL GET CHECK CBHNDL, CBCTL TO i note = CBCTL mPlay Ake.channel, note, BYVAL i CASE 600 'all off FOR i = Ake.lowtes TO Ake.hightes CONTROL SET CHECK CBHNDL, i, 0 SLEEP 10 DIALOG DOEVENTS NEXT Controller Ake.channel, 123, %False SendMessage hWindTrackBar, %TBM_SETPOS, %true, 0 ' Ake.ctrl(7) = %False ' Controller Ake.channel, 7, Ake.ctrl(7) Ake.ctrl(66) = %False Controller Ake.channel, 66, %False ' motor off ' Ake.ctrl(7) = 64 ' Controller Ake.channel, 7, 64 ' windklep op nul (centraal) CONTROL SET TEXT CBHNDL, 503, "0"' END SELECT CASE %WM_HSCROLL, %WM_VSCROLL 'note: id doesn't correspond at all with the one given at creation SELECT CASE CBLPARAM ' kristof: verwarring!!! ' ctrl 7 = 4-weg mengkraan voor zuigen blazen. 64 = niks, 0=zuigen max, 127=blazen max. CASE hWindTrackBar 'wind pressure IF (LOWRD(CBWPARAM) = %TB_THUMBPOSITION) OR (LOWRD(CBWPARAM) = %TB_THUMBTRACK) THEN wind = HIWRD(CBWPARAM) ELSE wind = SendMessage (CBLPARAM, %TBM_GETPOS,%Null, %Null) END IF wind = wind * 1.27 CONTROL SET TEXT CBHNDL, 503, STR$(wind) Ake.ctrl(1) = wind Controller Ake.channel, 1, Ake.ctrl(1) CASE hValveTrackbar 'valve direction. ' voor volume sturing kan beter ctrl 7 gebruikt worden. ' blow / suck is nu ctrl 6. (V2.0)- removed again 19.06.2009 IF (LOWRD(CBWPARAM) = %TB_THUMBPOSITION) OR (LOWRD(CBWPARAM) = %TB_THUMBTRACK) THEN valve = HIWRD(CBWPARAM) ELSE valve = SendMessage (CBLPARAM, %TBM_GETPOS,%Null, %Null) END IF valve = valve * 1.27 IF INT(valve) <> Ake.ctrl(7) THEN Ake.ctrl(7) = INT(valve) Controller Ake.channel, 7, INT(valve) END IF CONTROL SET TEXT CBHNDL, 563, STR$(INT(valve)) END SELECT CASE %WM_CLOSE, %WM_QUIT hwCtrlAke = 0 'FOR i = Ake.lowtes TO Ake.hightes ' mPlay Ake.channel, i, 0 ' SLEEP 10 ' DIALOG DOEVENTS 'NEXT Controller Ake.channel, 123, %False Ake.ctrl(7) = 64 '%False Controller Ake.channel, 7, Ake.ctrl(7) Ake.ctrl(66) = %False Controller Ake.channel, 66, %False 'Ake.ctrl(6) = %False 'Controller Ake.channel, 6, %False END SELECT END FUNCTION ' testkode voor de drie toetsenrijen van het melodieklavier SUB Ake_Test1 () STATIC i AS DWORD STATIC slnr AS DWORD STATIC oldnote AS INTEGER STATIC lowpress AS BYTE STATIC highpress AS BYTE IF ISFALSE Task(%Ake_Test1).tog THEN DIM TaskParamLabels(0) AS ASCIIZ * 8 TaskParamLabels(0) = "Tempo" ' slider IF ISFALSE Task(%Ake_Test1).hParam THEN slnr = %False MakeTaskParameterDialog %Ake_Test1,1,Slider(),0,UDctrl(),TaskParamLabels() END IF IF slnr = %False THEN slnr = TaskEX(%Ake_Test1).SliderNumbers(0) Task(%Ake_Test1).freq =6 Slider(slnr).value = Task(%Ake_Test1).freq SendMessage Slider(Slnr).h, %TBM_SETPOS,%True, Slider(Slnr).value END IF i = 49 Task(%Ake_Test1).tog = %True END IF IF oldnote THEN mPlay Ake.channel, oldnote, 0 oldnote = %False END IF mPlay Ake.channel, i, 64 oldnote = i i = i + 3 ' 49, 52, 55 ... IF i > Ake.Hightes THEN i = 49 Task(%Ake_Test1).freq = 16 * (Slider(slnr).value) / 128! IF Task(%Ake_Test1).freq < 2 THEN Task(%Ake_Test1).freq = 2 END SUB SUB Ake_Test2 () STATIC i AS DWORD STATIC slnr AS DWORD STATIC oldnote AS INTEGER IF ISFALSE Task(%Ake_Test2).tog THEN DIM TaskParamLabels(0) AS ASCIIZ * 8 TaskParamLabels(0) = "Tempo" ' slider IF ISFALSE Task(%Ake_Test2).hParam THEN slnr = %False MakeTaskParameterDialog %Ake_Test2,1,Slider(),0,UDctrl(),TaskParamLabels() END IF IF slnr = %False THEN slnr = TaskEX(%Ake_Test2).SliderNumbers(0) Task(%Ake_Test2).freq =6 Slider(slnr).value = Task(%Ake_Test2).freq SendMessage Slider(Slnr).h, %TBM_SETPOS,%True, Slider(Slnr).value END IF i = 50 Task(%Ake_Test2).tog = %True END IF IF oldnote THEN mPlay Ake.channel, oldnote, 0 oldnote = %False END IF mPlay Ake.channel, i, 64 oldnote = i i = i + 3 ' 50, 53, 56 ... IF i > Ake.Hightes THEN i = 50 Task(%Ake_Test2).freq = 16 * (Slider(slnr).value) / 128! IF Task(%Ake_Test2).freq < 2 THEN Task(%Ake_Test2).freq = 2 END SUB SUB Ake_Test3 () STATIC i AS DWORD STATIC slnr AS DWORD STATIC oldnote AS INTEGER IF ISFALSE Task(%Ake_Test3).tog THEN DIM TaskParamLabels(0) AS ASCIIZ * 8 TaskParamLabels(0) = "Tempo" ' slider IF ISFALSE Task(%Ake_Test3).hParam THEN slnr = %False MakeTaskParameterDialog %Ake_Test3,1,Slider(),0,UDctrl(),TaskParamLabels() END IF IF slnr = %False THEN slnr = TaskEX(%Ake_Test3).SliderNumbers(0) Task(%Ake_Test3).freq =6 Slider(slnr).value = Task(%Ake_Test3).freq SendMessage Slider(Slnr).h, %TBM_SETPOS,%True, Slider(Slnr).value END IF i = 51 Task(%Ake_Test3).tog = %True END IF IF oldnote THEN mPlay Ake.channel, oldnote, 0 oldnote = %False END IF mPlay Ake.channel, i, 64 oldnote = i i = i + 3 ' 51, 54, 57 ... IF i > Ake.Hightes THEN i = 51 Task(%Ake_Test3).freq = 16 * (Slider(slnr).value) / 128! IF Task(%Ake_Test3).freq < 2 THEN Task(%Ake_Test3).freq = 2 END SUB SUB Ake_Reg_Tst () STATIC i AS DWORD STATIC slnr AS DWORD IF ISFALSE Task(%Ake_Reg_tst).tog THEN DIM TaskParamLabels(0) AS ASCIIZ * 8 TaskParamLabels(0) = "speed" ' slider IF ISFALSE Task(%Ake_reg_tst).hParam THEN slnr = %False MakeTaskParameterDialog %Ake_reg_tst,1,Slider(),0,UDctrl(),TaskParamLabels() END IF IF slnr = %False THEN slnr = TaskEX(%Ake_reg_tst).SliderNumbers(0) Task(%Ake_Reg_tst).freq = 1 Slider(slnr).value = Task(%Ake_reg_tst).freq * 10 SendMessage Slider(Slnr).h, %TBM_SETPOS,%True, Slider(Slnr).value END IF i = 0 Task(%Ake_reg_tst).tog = %True END IF ProgChange Ake.channel, i INCR i i = i MOD 2 Task(%Ake_reg_tst).freq = (Slider(slnr).value) / 10! IF Task(%Ake_reg_tst).freq < 0.1 THEN Task(%Ake_reg_tst).freq = 0.1 END SUB SUB Ake_Rot_Left () ' windvalve stepping motor CCW ' controller 18 ' value 0 = OFF ' 19.06.2009: not yet implemented in PIC STATIC slnr AS DWORD IF ISFALSE Task(%Ake_Rot_L).tog THEN DIM TaskParamLabels(0) AS ASCIIZ * 8 TaskParamLabels(0) = "speed" ' slider IF ISFALSE Task(%Ake_Rot_L).hParam THEN slnr = %False MakeTaskParameterDialog %Ake_rot_l,1,Slider(),0,UDctrl(),TaskParamLabels() END IF IF slnr = %False THEN slnr = TaskEX(%Ake_Rot_L).SliderNumbers(0) Task(%Ake_Rot_L).freq = 10 Slider(slnr).value = 0 ' off SendMessage Slider(Slnr).h, %TBM_SETPOS,%True, Slider(Slnr).value END IF Task(%Ake_rot_L).tog = %True END IF IF Task(%Ake_Rot_R).swit THEN stoptask %Ake_Rot_R Controller Ake.channel, 18, slider(slnr).value END SUB SUB Ake_Rot_Right () ' controller 17 ' value 0 = off ' 19.06.2009: not yer implemented n PIC STATIC slnr AS DWORD IF ISFALSE Task(%Ake_Rot_R).tog THEN DIM TaskParamLabels(0) AS ASCIIZ * 8 TaskParamLabels(0) = "speed" ' slider IF ISFALSE Task(%Ake_Rot_R).hParam THEN slnr = %False MakeTaskParameterDialog %Ake_rot_R,1,Slider(),0,UDctrl(),TaskParamLabels() END IF IF slnr = %False THEN slnr = TaskEX(%Ake_Rot_R).SliderNumbers(0) Task(%Ake_Rot_R).freq = 10 Slider(slnr).value = 0 ' off SendMessage Slider(Slnr).h, %TBM_SETPOS,%True, Slider(Slnr).value END IF Task(%Ake_rot_R).tog = %True END IF IF Task(%Ake_Rot_L).swit THEN stoptask %Ake_Rot_L Controller Ake.channel, 17, slider(slnr).value END SUB SUB Ake_Repeats () ' %Ake_Repeat ' note repetition test. STATIC note AS INTEGER STATIC cnt AS INTEGER STATIC slnr AS DWORD IF ISFALSE Task(%Ake_Repeat).tog THEN DIM TaskParamLabels(0 TO 1) AS ASCIIZ * 8 TaskParamLabels(0) = "Tempo" ' slider TaskParamLabels(1) = "Note" ' UD - note to test IF ISFALSE Task(%Ake_Repeat).hParam THEN slnr = %False MakeTaskParameterDialog %Ake_Repeat,1,Slider(),1,UDctrl(),TaskParamLabels() END IF IF slnr = %False THEN slnr = TaskEX(%Ake_Repeat).SliderNumbers(0) UDctrl(TaskEX(%Ake_Repeat).UpdownNumbers(0)).cptr = CODEPTR(Ake_Repeats_UD) ' note UDctrl(TaskEX(%Ake_Repeat).UpDownNumbers(0)).value = Ake.lowtes UDctrl(TaskEX(%Ake_Repeat).UpDownNumbers(0)).maxval = Ake.hightes note = UDctrl(TaskEX(%Ake_Repeat).UpDownNumbers(0)).value Task(%Ake_Repeat).freq = 2 Slider(slnr).value = Task(%Ake_Repeat).freq SendMessage Slider(Slnr).h, %TBM_SETPOS,%True, Slider(Slnr).value END IF cnt = %False Task(%Ake_Repeat).tog = %True END IF IF ISFALSE cnt MOD 2 THEN IF note THEN NoteOff Ake.channel, note note = %False END IF ELSE note = UDctrl(TaskEX(%Ake_Repeat).UpdownNumbers(0)).value mPlay Ake.channel, note, 64 END IF INCR cnt cnt = cnt MOD 2 Task(%Ake_Repeat).freq = MAX(slider(slnr).value, 1) ' can be destructive !!! END SUB SUB Ake_Repeats_UD () ' controls the note to be played. ' 19-42 = basses ' 49-94 = melody LOCAL noot AS BYTE LOCAL udnr AS DWORD udnr = TaskEX(%Ake_Repeat).UpDownNumbers(0) noot = UDCtrl(udnr).value IF noot = 43 THEN noot = 49 : UDctrl(udnr).value = noot IF noot = 48 THEN noot = 42 : UDctrl(udnr).value = noot IF noot < Ake.lowtes THEN UDctrl(udnr).value = Ake.lowtes: noot = Ake.lowtes IF noot > Ake.hightes THEN UDctrl(udnr).value = Ake.hightes: noot = Ake.hightes SetDlgItemText Task(%Ake_Repeat).hparam, %GMT_TEXT0_ID + 16, "N=" & STR$(noot) END SUB