'************************************************** '* * '* a microtonal Bb cornet playing robot by * '* dr.Godfried-Willem Raes * '* 2016 - 2021 * '* note: this code module is also used for * '* testing sold to Alain Van Zeveren * '************************************************** ' hardware tests and development code ' 28.01.2008: debugged gwr. ' 20.11.2008: hardware revision. ' 12.12.2008: Further work on 'Brass Calls' ' 13-14.12.2008: schaafwerk Just Calls for Brass ' 15.12.2008: duration of Just Calls now ca. 6'24". cnt = 677, final tc = 31.76 ' 16.12.2008: duration running on Xi is different, ca.5'30" ' 18.12.2008: Premiere van Just Calls ' 02.05.2009: PIC1 and PIC2 firmware debugged and reprogrammed. ' 23.05.2009: PIC1 (Hor.motor) firmware debugged and improved. (jt, still has erratic behaviour) ' 31.10.2010: Complete redesign of midihub board and firmware (gwr now) ' 02.11.2010: update buttons added by krl ' 04.11.2010: Pir application demo added krl ' PIC1 firmware version 2.0: first release version. ' source code: http://www.logosfoundation.org/instrum_gwr/Korn/picworks/Korn_hub.bas ' 09.01.2014: to be done: add a demo for gesture interactive playing with movement. ' --- copied from Korn --- ' adapting for ---------------------------------- ' all occurences of korn replaced with bug. ' 04.12.2016: revision for the mappings on ' 05.12.2016: further coding ' 09.12.2016: AM modulation implemented on PIC. Test code added. ' 11.12.2016: starting to add test code for the hub board. ' 17.12.2016: Prog. changes implemented. ' 25.12.2016: Further coding... hor movement. ' 02.01.2017: red light on note 125 bug solved. ' 08.12.2020: Work on a serious upgrade of the 24EP pic firmware ' CC1 and CC15 implemented now. ' 09.12.2020: CC80 implemented as well as an entire gamut of tunings (CC20). ' ---------------------------------------------------- ' 16.06.2021: this testcode can also be used for . ' 22.06.2021: tests for controllers 40-43 on trumpeter added. ' 07.07.2021: test for CC2, vibrato start time added for trumpeter. ' 08.07.2021: ambitus gap for trumpeter filled. Test proc. adapted. ' ----------------------------------------------------- ' 04.10.2021: testcode also used for ? - bug and trumpeter have the same channel though... ' so we decided to add the testcode to the module. Flut and cornalto are on the same channel ' tweede kolom cockpit: %Bug_scale = 17 ' toonladder test %Bug_test = 18 ' repeated note test %Bug_Qscale = 19 ' kwarttoons toonladder test %Bug_Vibrato = 21 ' pitch modulation test %Bug_Tremolo = 22 ' tremolo test - AM modulation %Bug_Noise = 23 ' jitter/noise test - ctrl 1 - new 08.12.2020 %Bug_ProgChange = 25 %Bug_Red125 = 28 ' light with flashing test %Bug_Lefteye = 29 'note 121 %Bug_Righteye = 30 'note 120 %Bug_Red127 = 31 'note 127 on hub board ' derde kolom in cockpit: controllers %Bug_adsr = 32 ' adsr control %Bug_13 = 33 ' ctrl 13: valve control %Bug_20 = 34 ' ctrl 20 ' main tuning to diapason %Bug_CC80 = 35 %Bug_Hormove = 36 ' ctrl 10 ' panning %Bug_Vermove = 37 ' ctrl 11 %Bug_25 = 41 ' ctrl 25 ' valve velo controller %Bug_26 = 42 ' ctrl 26 ] valve release time controller %Bug_lites = 43 %Bug_LR = 44 ' left right movement horizontal in steps %Bug_UD = 45 ' up down movement in steps %Bug_67 = 48 'calibrate left %Bug_68 = 49 'calibrate right '%Bug_69 = 50 'calibrate center - no longer implemented in PIC %Bug_70 = 51 'complete calibration procedure H + V %Bug_71 = 52 'calibrate horizontal only %Bug_80 = 35 %Trumpeter_33 = 54 ' controller lookup tables valves %Trumpeter_pedals = 55 ' test pedal notes on trumpeter. %Trumpeter_CC40 = 57 %Trumpeter_CC41 = 58 %Trumpeter_CC42 = 59 %Trumpeter_CC43 = 60 %Trumpeter_params = 61 ' controllers 100 to 110 ' vierde kolom cockpit %Bug_Moves = 63 '61 - just a demo DECLARE FUNCTION Init_Bug () AS LONG DECLARE SUB Bug_Scale () DECLARE SUB Bug_Scale_UD0 () DECLARE SUB Bug_Scale_UD1 () DECLARE SUB Bug_Scale_UD2 () DECLARE SUB Bug_Hormove () DECLARE SUB Bug_SL10 () DECLARE SUB Bug_Vermove () ' tilt DECLARE SUB Bug_SL11 () DECLARE SUB Bug_Vibrato () DECLARE SUB Bug_Tremolo () DECLARE SUB Bug_13 () ' valves DECLARE SUB Bug_13_UD0 () DECLARE SUB Bug_18 () DECLARE SUB Bug_SL18 () DECLARE SUB Bug_20 () ' tuning DECLARE SUB Bug_SL20 () DECLARE SUB Bug_CC80 () ' dynamic scaling DECLARE SUB Bug_25 () ' valve velo DECLARE SUB Bug_26 () ' valve release DECLARE SUB Bug_lites () DECLARE SUB Bug_Lites_UD () DECLARE SUB Bug_Test () DECLARE SUB Bug_UD0 () DECLARE SUB Bug_UD1 () DECLARE SUB Bug_UD2 () DECLARE SUB Bug_ProgChange () DECLARE FUNCTION Bug_MotPosCal () AS LONG ' callback for one shot ctrl.70 DECLARE SUB Bug_Moves () DECLARE SUB Bug_Qscale () ' quartertone scale test DECLARE SUB Bug_LR () DECLARE SUB Bug_UD () 'DECLARE SUB Bug_31 () DECLARE SUB Bug_67 () DECLARE SUB Bug_68 () DECLARE SUB Bug_69 () DECLARE SUB Bug_70 () DECLARE SUB Bug_71 () DECLARE SUB Bug_Red125 () DECLARE SUB Bug_Red125_Stop () DECLARE SUB Bug_Red127 () DECLARE SUB Bug_Red127_Stop () DECLARE SUB Bug_Lefteye () DECLARE SUB Bug_Lefteye_Stop () DECLARE SUB Bug_Righteye () DECLARE SUB Bug_Righteye_Stop () DECLARE SUB Bug_Fingerings DECLARE CALLBACK FUNCTION CB_Bug_Fingerings DECLARE SUB Trumpeter_CC40 () DECLARE SUB Trumpeter_CC41 () DECLARE SUB Trumpeter_CC42 () DECLARE SUB Trumpeter_CC43 () FUNCTION Init_Bug () AS LONG LOCAL retval AS LONG LOCAL m AS ASCIIZ * 30 ' GetInstrumentParams Bug, %IDM_Bug ' retval = SetRobotPort (Bug, Inifilename, hMidiO()) Task(%Bug_Scale).naam = "Scale" Task(%Bug_Scale).cptr = CODEPTR(Bug_Scale) Task(%Bug_Scale).freq = 2 Task(%Bug_Scale).flags = %False Task(%Bug_Test).naam = "Test" Task(%Bug_Test).cptr = CODEPTR(Bug_Test) Task(%Bug_Test).freq = 4 Task(%Bug_Test).flags = %False Task(%Bug_QScale).naam = "QScale" Task(%Bug_QScale).cptr = CODEPTR(Bug_QScale) Task(%Bug_QScale).freq = 2.5 Task(%Bug_QScale).flags = %False Task(%Bug_Hormove).naam = "HorMov" Task(%Bug_Hormove).cptr = CODEPTR(Bug_Hormove) Task(%Bug_Hormove).freq = 10 Task(%Bug_Hormove).flags = %False Task(%Bug_ProgChange).naam = "Program" Task(%Bug_ProgChange).cptr = CODEPTR(Bug_ProgChange) Task(%Bug_Progchange).freq = 1 Task(%Bug_ProgChange).flags = %False Task(%Bug_noise).naam = "Noise" Task(%Bug_noise).cptr = CODEPTR(Bug_Noise) ' implemented 08.12.2020 Task(%Bug_noise).freq = 10 Task(%Bug_noise).flags = %False Task(%Bug_Vermove).naam = "VerMov" Task(%Bug_Vermove).cptr = CODEPTR(Bug_Vermove) Task(%Bug_Vermove).freq = 2 Task(%Bug_Vermove).flags = %False Task(%Bug_LR).naam = "Mot:L-R" Task(%Bug_LR).cptr = CODEPTR(Bug_LR) Task(%Bug_LR).freq = 1 Task(%Bug_LR).flags = %False Task(%Bug_UD).naam = "Mot:U-D" Task(%Bug_UD).cptr = CODEPTR(Bug_UD) Task(%Bug_UD).freq = 1 Task(%Bug_UD).flags = %False Task(%Bug_Lites).naam = "lites" Task(%Bug_Lites).cptr = CODEPTR(Bug_Lites) Task(%Bug_Lites).freq = 2 Task(%Bug_Lites).flags = %False Task(%Bug_adsr).naam = "adsr" Task(%Bug_adsr).cptr = CODEPTR(Bug_adsr) Task(%Bug_adsr).freq = 10 Task(%Bug_adsr).flags = %False Task(%Bug_13).naam = "V_C13" ' fingerings Task(%Bug_13).cptr = CODEPTR(Bug_13) Task(%Bug_13).freq = 10 Task(%Bug_13).flags = %False Task(%Bug_tremolo).naam = "Tremolo" ' amplitude modulation Task(%Bug_tremolo).cptr = CODEPTR(Bug_Tremolo) Task(%Bug_tremolo).freq = 16 Task(%Bug_tremolo).flags = %False TaskEX(%Bug_tremolo).stopcptr = CODEPTR(Bug_Tremolo_Stop) Task(%Bug_20).naam = "Tun_C20" ' tuning controller Task(%Bug_20).cptr = CODEPTR(Bug_20) Task(%Bug_20).freq = 10 Task(%Bug_20).flags = %False Task(%Bug_CC80).naam = "CC80" ' dynamic range controller Task(%Bug_CC80).cptr = CODEPTR(Bug_CC80) Task(%Bug_CC80).freq = 2 Task(%Bug_CC80).flags = %False Task(%Bug_25).naam = "Valv_C25" ' valve velocity controller Task(%Bug_25).freq = 8 Task(%Bug_25).cptr = CODEPTR(Bug_25) Task(%Bug_26).naam = "Valv_C26" ' valve release controller Task(%Bug_26).freq = 8 Task(%Bug_26).cptr = CODEPTR(Bug_26) Task(%Trumpeter_33).naam = "Trp_C33" ' valve lookup controller Task(%Trumpeter_33).freq = 4 Task(%Trumpeter_33).cptr = CODEPTR(Trumpeter_33) Task(%Trumpeter_pedals).naam = "Trp_ped" ' test for the pedal tones Task(%Trumpeter_pedals).freq = 4 Task(%Trumpeter_pedals).cptr = CODEPTR(Trumpeter_Pedals) Task(%Bug_vibrato).naam = "Vibrato" ' frequency modulation: CC3-4 Task(%Bug_vibrato).freq = 12 Task(%Bug_vibrato).cptr = CODEPTR(Bug_Vibrato) TaskEx(%Bug_Vibrato).stopcptr = CODEPTR(Bug_Vibrato_Stop) Task(%Bug_Moves).naam = "Moves" Task(%Bug_Moves).freq = 4 Task(%Bug_Moves).cptr= CODEPTR(Bug_Moves) Task(%Bug_Red125).naam = "Red125" Task(%Bug_Red125).freq = 1 Task(%Bug_Red125).cptr = CODEPTR(Bug_Red125) TaskEX(%Bug_Red125).stopCptr = CODEPTR(Bug_Red125_Stop) Task(%Bug_Red127).naam = "Red127" Task(%Bug_Red127).freq = 1 Task(%Bug_Red127).cptr = CODEPTR(Bug_Red127) TaskEX(%Bug_Red127).stopCptr = CODEPTR(Bug_Red127_Stop) Task(%Bug_Lefteye).naam = "Left121" Task(%Bug_Lefteye).freq = 1 Task(%Bug_Lefteye).cptr = CODEPTR(Bug_Lefteye) TaskEX(%Bug_Lefteye).stopCptr = CODEPTR(Bug_Lefteye_Stop) Task(%Bug_Righteye).naam = "Right120" Task(%Bug_Righteye).freq = 1 Task(%Bug_Righteye).cptr = CODEPTR(Bug_Righteye) TaskEX(%Bug_Righteye).stopCptr = CODEPTR(Bug_Righteye_Stop) Task(%Trumpeter_CC40).naam = "CC40Sub" Task(%Trumpeter_CC40).cptr = CODEPTR(Trumpeter_CC40) Task(%Trumpeter_CC40).freq = 1 Task(%Trumpeter_CC40).flags = %False Task(%Trumpeter_CC41).naam = "CC41Low" Task(%Trumpeter_CC41).cptr = CODEPTR(Trumpeter_CC41) Task(%Trumpeter_CC41).freq = 1 Task(%Trumpeter_CC41).flags = %False Task(%Trumpeter_CC42).naam = "CC42Med" Task(%Trumpeter_CC42).cptr = CODEPTR(Trumpeter_CC42) Task(%Trumpeter_CC42).freq = 1 Task(%Trumpeter_CC42).flags = %False Task(%Trumpeter_CC43).naam = "CC43Hi" Task(%Trumpeter_CC43).cptr = CODEPTR(Trumpeter_CC43) Task(%Trumpeter_CC43).freq = 1 Task(%Trumpeter_CC43).flags = %False Task(%Trumpeter_params).naam = "params" Task(%Trumpeter_params).cptr = CODEPTR(Trumpeter_params) Task(%Trumpeter_params).freq = 1 Task(%Trumpeter_params).flags = %False ' ButnSw(7).tag0 = "Valves" ' ButnSw(7).tag1 = "Valves" ' ButnSw(7).cptr = CODEPTR(Bug_Valves) ButnOs(9).tag = "fingers" ButnOs(9).cptr = CODEPTR(Bug_Fingerings) ButnOS(10).tag = "Bug Off" ButnOS(10).cptr = CODEPTR(MM_Bug_Off) ' ' calibration button for motors - ctrl.70 ' ButnOS(11).tag = "MotPos" ' ButnOS(11).cptr = CODEPTR(Bug_MotPosCal) ' m = " test & debug" SendMessage gh.Cockpit, %WM_SETTEXT,0, VARPTR(m) SetDlgItemText gh.Cockpit, %GMT_TITLE, "" SetDlgItemText gh.Cockpit, %GMT_AUTHOR, $gwr SetDlgItemText gh.Cockpit, %GMT_MSG1, "test and evaluation procedures 2020" SetDlgItemText gh.Cockpit, %GMT_MSG2, "for our robot, a flugelhorn." MM_Bug_On FUNCTION = %True END FUNCTION SUB Bug_Scale () LOCAL i AS DWORD STATIC onoff AS DWORD STATIC cnt AS LONG STATIC TaskParamLabels() AS ASCIIZ*8 STATIC slnr AS INTEGER STATIC udnr AS INTEGER STATIC n AS INTEGER IF ISFALSE Task(%Bug_Scale).tog THEN IF ISFALSE Task(%Bug_Scale).hParam THEN DIM TaskParamLabels(4) TaskParamLabels(0)="velo" TaskParamLabels(1)="speed" TaskParamLabels(2)="step" TaskParamLabels(3)= "hilim" TaskParamLabels(4)="lowlim" MakeTaskParameterDialog %Bug_Scale,2, Slider(),3,UdCtrl(), TaskParamLabels() slnr = TaskEX(%Bug_Scale).SliderNumbers(0) Slider(slnr).value = 84 SendMessage Slider(Slnr).h, %TBM_SETPOS,%True, Slider(Slnr).value Slider(slnr+1).value = 36 SendMessage Slider(Slnr+1).h, %TBM_SETPOS,%True, Slider(Slnr+1).value IF udnr = %False THEN udnr = TaskEX(%Bug_Scale).UpDownNumbers(0) UDctrl(udnr).cptr = CODEPTR(Bug_Scale_UD0) ' step size UDctrl(udnr).value = 1 UDctrl(udnr).minval = 0 UDctrl(udnr).maxval = 12 UDctrl(udnr).stap = 1 UDctrl(udnr+1).cptr = CODEPTR(Bug_Scale_UD1) ' high note limit UDctrl(udnr+1).value = 94 'Bug.hightes UDctrl(udnr+1).minval = 52 'Bug.lowtes UDctrl(udnr+1).maxval = 94 'Bug.Hightes UDctrl(udnr+2).cptr = CODEPTR(Bug_Scale_UD2) ' low note limit UDctrl(udnr+2).value = 52 UDctrl(udnr+2).minval = 52 'Bug.lowtes UDctrl(udnr+2).maxval = 94 'Bug.Hightes END IF END IF Controller Bug.channel, 66, 127 Task(%Bug_Scale).tog = %True cnt = Bug.Lowtes EXIT SUB END IF IF ISFALSE onoff THEN IF n THEN mPlay Bug.channel, n, 0 n = %False onoff = %True ELSE n = cnt mPlay Bug.channel, n, Slider(slnr).value cnt = cnt + UDCtrl(udnr).value IF cnt > UDctrl(udnr+1).value THEN cnt = UDctrl(udnr+2).value onoff = %False END IF Task(%Bug_Scale).freq = MAX(0.25,Slider(slnr+1).value / 8) END SUB SUB Bug_Scale_UD0 () ' callback on parameter UpDowns step size LOCAL value AS BYTE LOCAL udnr AS DWORD udnr = TaskEX(%Bug_Scale).UpdownNumbers(0) value = UDCtrl(udnr).value IF value > 12 THEN UDctrl(udnr).value = 12 : value = 12 IF value < 0 THEN UDCTRL(udnr).value = 0 : value = 0 SetDlgItemText Task(%Bug_Scale).hparam, %GMT_TEXT0_ID + 16, "s=" & STR$(value) END SUB SUB Bug_Scale_UD1 () ' controls the high limit of the note scale to be played. LOCAL noot AS BYTE LOCAL udnr AS DWORD udnr = TaskEX(%Bug_Scale).UpDownNumbers(1) noot = UDCtrl(udnr).value IF noot < UDctrl(udnr+1).value THEN UDctrl(udnr).value = UDctrl(udnr+1).value : noot = UDctrl(udnr+1).value ' IF noot > Bug.HighTes THEN UDctrl(udnr).value = Bug.HighTes : noot = Bug.hightes SetDlgItemText Task(%Bug_Scale).hparam, %GMT_TEXT0_ID + 17, "Hi=" & STR$(noot) END SUB SUB Bug_Scale_UD2 () ' controls the low limit of the note scale to be played. LOCAL noot AS BYTE LOCAL udnr AS DWORD udnr = TaskEX(%Bug_Scale).UpDownNumbers(2) noot = UDCtrl(udnr).value ' IF noot < Bug.lowtes THEN UDctrl(udnr).value = Bug.lowtes : noot = Bug.lowtes IF noot > UDctrl(udnr-1).value THEN UDctrl(udnr).value = UDctrl(udnr-1).value : noot = UDctrl(udnr-1).value SetDlgItemText Task(%Bug_Scale).hparam, %GMT_TEXT0_ID + 18, "Lo=" & STR$(noot) END SUB SUB Bug_QScale () ' quartertone scale test for robot ' 10.12.2016: gwr STATIC onoff AS DWORD STATIC TaskParamLabels() AS ASCIIZ*8 STATIC slnr AS INTEGER STATIC n AS INTEGER IF ISFALSE Task(%Bug_Qscale).tog THEN IF ISFALSE Task(%Bug_QScale).hParam THEN DIM TaskParamLabels(2) TaskParamLabels(0)="velo" TaskParamLabels(1)="speed" MakeTaskParameterDialog %Bug_QScale,2, Slider(),0,UdCtrl(), TaskParamLabels() slnr = TaskEX(%Bug_QScale).SliderNumbers(0) Slider(slnr).value = 64 SendMessage Slider(Slnr).h, %TBM_SETPOS,%True, Slider(Slnr).value Controller Bug.channel, 17, 84 Bug.ctrl(17) = 84 Controller Bug.channel, 18, 104 Bug.ctrl(18) = 104 Slider(slnr+1).value = 30 SendMessage Slider(Slnr+1).h, %TBM_SETPOS,%True, Slider(Slnr+1).value END IF Controller Bug.channel, 66, 127 Task(%Bug_QScale).tog = %True n = Bug.Lowtes END IF IF ISFALSE onoff THEN Bend Bug.channel, 0, 64 ' if this is required there is a bug in the pic firmware. ' as of 23.11.2008 we do have this bug on Korn however!!! ' we should not have the problem with mPlay Bug.channel, n, 0 ' was Slider(slnr).value ' ????????????????????? onoff = %True ELSE mPlay Bug.channel, n, Slider(slnr).value Bend Bug.channel, 0, 127 ' or, 64 + 50 = 114 if a step corresponded to a cent, as we first wanted. ' this coding conforms to the Korn PIC implementation and was tested ' to be correct 24.11.2008 - gwr. ' to be checked again with onoff = %False INCR n END IF IF n > Bug.hightes THEN n= Bug.lowtes Task(%Bug_QScale).freq = MAX(0.25,Slider(slnr+1).value / 4) END SUB SUB Bug_ProgChange () ' 17.12.2016: test voor de program changes: different waveform lookup tables. ' 18.12.2016: sliders added voor de golfvormparameters 100-110 STATIC TaskParamLabels() AS ASCIIZ*8 STATIC udnr, slnr AS DWORD STATIC prog AS INTEGER IF ISFALSE Task(%Bug_ProgChange).tog THEN IF ISFALSE Task(%Bug_ProgChange).hParam THEN DIM TaskParamLabels(4) TaskParamlabels(0)="param1" TaskParamlabels(1)="param2" TaskParamlabels(2)="param3" TaskParamlabels(3)="param4" TaskParamLabels(4)="prog" MakeTaskParameterDialog %Bug_Progchange,4, Slider(),1,UdCtrl(), TaskParamLabels() IF udnr = %False THEN udnr = TaskEX(%Bug_ProgChange).UpDownNumbers(0) UDctrl(udnr).cptr = CODEPTR(Bug_ProgChange_UD0) ' prog.nr. UDctrl(udnr).value = 0 UDctrl(udnr).minval = 0 UDctrl(udnr).maxval = 127 UDctrl(udnr).stap = 1 END IF IF ISFALSE slnr THEN slnr = TaskEX(%Bug_ProgChange).Slidernumbers(0) END IF END IF RESET prog Controller Bug.channel, 66, 127 Task(%Bug_ProgChange).tog = %True END IF ' controllers 100-103: Beauchamps params ' 104 ' 105-106 ' 107 ' 108 Assin ' 109-110 dirty IF UDctrl(udnr).value <> prog THEN prog = UDctrl(udnr).value ' initialize the sliders to default values: SELECT CASE prog CASE 5 ' parametric1 Bug.ctrl(100) = 27 * 2 ' divided by 2 in the PIC IF slider(slnr).value <> Bug.ctrl(100) THEN SendMessage Slider(Slnr).h, %TBM_SETPOS,%True, Bug.ctrl(100) slider(slnr).value = Bug.ctrl(100) END IF Bug.ctrl(101) = 83 IF slider(slnr+1).value <> Bug.ctrl(101) THEN SendMessage Slider(Slnr+1).h, %TBM_SETPOS,%True, Bug.ctrl(101) slider(slnr+1).value = Bug.ctrl(101) END IF Bug.ctrl(102) = 96 IF slider(slnr+2).value > Bug.ctrl(102) THEN SendMessage Slider(Slnr+2).h, %TBM_SETPOS,%True, Bug.ctrl(102) slider(slnr+2).value = Bug.ctrl(102) END IF Bug.ctrl(103) = 110 IF slider(slnr+3).value > Bug.ctrl(103) THEN SendMessage Slider(Slnr+3).h, %TBM_SETPOS,%True, Bug.ctrl(103) slider(slnr+3).value = Bug.ctrl(103) END IF CASE 6 ' smooth square 1 parameter: symmetry Bug.ctrl(104) = 42 IF slider(slnr).value <> Bug.ctrl(104) THEN SendMessage Slider(Slnr).h, %TBM_SETPOS,%True, Bug.ctrl(104) slider(slnr).value = Bug.ctrl(104) END IF ' reset the other sliders: IF slider(slnr+1).value > 0 THEN SendMessage Slider(Slnr+1).h, %TBM_SETPOS,%True, 0 slider(slnr+1).value = 0 END IF IF slider(slnr+2).value > 0 THEN SendMessage Slider(Slnr+2).h, %TBM_SETPOS,%True, 0 slider(slnr+2).value = 0 END IF IF slider(slnr+3).value > 0 THEN SendMessage Slider(Slnr+3).h, %TBM_SETPOS,%True, 0 slider(slnr+3).value = 0 END IF CASE 7 ' triangle Bug.ctrl(105) = 42 IF slider(slnr).value <> Bug.ctrl(105) THEN SendMessage Slider(Slnr).h, %TBM_SETPOS,%True, Bug.ctrl(105) slider(slnr).value = Bug.ctrl(105) END IF Bug.ctrl(106) = 85 IF slider(slnr+1).value <> Bug.ctrl(106) THEN SendMessage Slider(Slnr+1).h, %TBM_SETPOS,%True, Bug.ctrl(106) slider(slnr+1).value = Bug.ctrl(106) END IF ' reset : IF slider(slnr+2).value > 0 THEN SendMessage Slider(Slnr+2).h, %TBM_SETPOS,%True, 0 slider(slnr+2).value = 0 END IF IF slider(slnr+3).value > 0 THEN SendMessage Slider(Slnr+3).h, %TBM_SETPOS,%True, 0 slider(slnr+3).value = 0 END IF CASE 9 ' pulse Bug.ctrl(107) = 8 IF slider(slnr).value <> Bug.ctrl(107) THEN SendMessage Slider(Slnr).h, %TBM_SETPOS,%True, Bug.ctrl(107) slider(slnr).value = Bug.ctrl(107) END IF ' reset the other sliders: IF slider(slnr+1).value > 0 THEN SendMessage Slider(Slnr+1).h, %TBM_SETPOS,%True, 0 slider(slnr+1).value = 0 END IF IF slider(slnr+2).value > 0 THEN SendMessage Slider(Slnr+2).h, %TBM_SETPOS,%True, 0 slider(slnr+2).value = 0 END IF IF slider(slnr+3).value > 0 THEN SendMessage Slider(Slnr+3).h, %TBM_SETPOS,%True, 0 slider(slnr+3).value = 0 END IF CASE 10 ' assin Bug.ctrl(108) = 64 IF slider(slnr).value <> Bug.ctrl(108) THEN SendMessage Slider(Slnr).h, %TBM_SETPOS,%True, Bug.ctrl(108) slider(slnr).value = Bug.ctrl(108) END IF ' reset the other sliders: IF slider(slnr+1).value > 0 THEN SendMessage Slider(Slnr+1).h, %TBM_SETPOS,%True, 0 slider(slnr+1).value = 0 END IF IF slider(slnr+2).value > 0 THEN SendMessage Slider(Slnr+2).h, %TBM_SETPOS,%True, 0 slider(slnr+2).value = 0 END IF IF slider(slnr+3).value > 0 THEN SendMessage Slider(Slnr+3).h, %TBM_SETPOS,%True, 0 slider(slnr+3).value = 0 END IF CASE 11 ' dirty Bug.ctrl(109) = 20 ' symmetry IF slider(slnr).value <> Bug.ctrl(109) THEN SendMessage Slider(Slnr).h, %TBM_SETPOS,%True, Bug.ctrl(109) slider(slnr).value = Bug.ctrl(109) END IF Bug.ctrl(110) = 64 ' noisyness IF slider(slnr+1).value <> Bug.ctrl(110) THEN SendMessage Slider(Slnr+1).h, %TBM_SETPOS,%True, Bug.ctrl(110) slider(slnr+1).value = Bug.ctrl(110) END IF IF slider(slnr+2).value > 0 THEN SendMessage Slider(Slnr+2).h, %TBM_SETPOS,%True, 0 slider(slnr+2).value = 0 END IF IF slider(slnr+3).value > 0 THEN SendMessage Slider(Slnr+3).h, %TBM_SETPOS,%True, 0 slider(slnr+3).value = 0 END IF CASE ELSE ' reset the sliders IF slider(slnr).value > 0 THEN SendMessage Slider(Slnr).h, %TBM_SETPOS,%True, 0 slider(slnr).value = 0 END IF IF slider(slnr+1).value > 0 THEN SendMessage Slider(Slnr+1).h, %TBM_SETPOS,%True, 0 slider(slnr+1).value = 0 END IF IF slider(slnr+2).value > 0 THEN SendMessage Slider(Slnr+2).h, %TBM_SETPOS,%True, 0 slider(slnr+2).value = 0 END IF IF slider(slnr+3).value > 0 THEN SendMessage Slider(Slnr+3).h, %TBM_SETPOS,%True, 0 slider(slnr+3).value = 0 END IF END SELECT END IF SELECT CASE UDctrl(udnr).value ' programma 'case 0 ' sine wave - no params 'case 1 ' sin x / x 'case 2 ' sin^2 x 'case 3 ' sin^3 x 'case 4 ' beauchamp CASE 5 ' parametric 1 : 4 parameters IF slider(slnr).value <> Bug.ctrl(100) THEN ' p1 Bug.ctrl(100) = Slider(slnr).value Controller Bug.channel, 100, Bug.ctrl(100) END IF IF slider(slnr+1).value <> Bug.ctrl(101) THEN ' p2 Bug.ctrl(101) = Slider(slnr+1).value Controller Bug.channel, 101, Bug.ctrl(101) END IF IF slider(slnr+2).value <> Bug.ctrl(102) THEN ' p3 Bug.ctrl(102) = Slider(slnr+2).value Controller Bug.channel, 102, Bug.ctrl(102) END IF IF slider(slnr+3).value <> Bug.ctrl(103) THEN ' p4 Bug.ctrl(103) = Slider(slnr+3).value Controller Bug.channel, 103, Bug.ctrl(103) END IF CASE 6 ' smoothsquare - parameter steers symmetry p5 IF slider(slnr).value <> Bug.ctrl(104) THEN ' p5 Bug.ctrl(104) = Slider(slnr).value Controller Bug.channel, 104, Bug.ctrl(104) END IF CASE 7 ' triangle - 2 parameters IF slider(slnr).value <> Bug.ctrl(105) THEN ' p6 Bug.ctrl(105) = Slider(slnr).value Controller Bug.channel, 105, Bug.ctrl(105) END IF IF slider(slnr+1).value <> Bug.ctrl(106) THEN ' p7 Bug.ctrl(106) = Slider(slnr+1).value Controller Bug.channel, 106, Bug.ctrl(106) END IF 'case 8 ' no params - linear sawtooth CASE 9 ' pulse IF slider(slnr).value <> Bug.ctrl(107) THEN ' p8 Bug.ctrl(107) = Slider(slnr).value Controller Bug.channel, 107, Bug.ctrl(107) END IF CASE 10 IF slider(slnr).value <> Bug.ctrl(108) THEN ' p9 Bug.ctrl(108) = Slider(slnr).value Controller Bug.channel, 108, Bug.ctrl(108) END IF CASE 11 ' dirty IF slider(slnr).value <> Bug.ctrl(109) THEN ' p6 Bug.ctrl(109) = Slider(slnr).value Controller Bug.channel, 109, Bug.ctrl(109) END IF IF slider(slnr+1).value <> Bug.ctrl(110) THEN ' p7 Bug.ctrl(110) = Slider(slnr+1).value Controller Bug.channel, 110, Bug.ctrl(110) END IF CASE ELSE ' reset the sliders IF slider(slnr).value > 0 THEN SendMessage Slider(Slnr).h, %TBM_SETPOS,%True, 0 slider(slnr).value = 0 END IF IF slider(slnr+1).value > 0 THEN SendMessage Slider(Slnr+1).h, %TBM_SETPOS,%True, 0 slider(slnr+1).value = 0 END IF IF slider(slnr+2).value > 0 THEN SendMessage Slider(Slnr+2).h, %TBM_SETPOS,%True, 0 slider(slnr+2).value = 0 END IF IF slider(slnr+3).value > 0 THEN SendMessage Slider(Slnr+3).h, %TBM_SETPOS,%True, 0 slider(slnr+3).value = 0 END IF END SELECT END SUB SUB Bug_ProgChange_UD0 () ' callback on parameter UpDowns LOCAL value AS BYTE LOCAL udnr AS DWORD udnr = TaskEX(%Bug_ProgChange).UpdownNumbers(0) value = UDCtrl(udnr).value IF value > 127 THEN UDctrl(udnr).value = 127 : value = 127 IF value < 0 THEN UDCTRL(udnr).value = 0 : value = 0 ProgChange Bug.channel, value SetDlgItemText Task(%Bug_ProgChange).hparam, %GMT_TEXT0_ID + 16, "p=" & STR$(value) END SUB SUB Bug_Noise () ' noise ctrl 1. ' 20.12.2016: not yet implemented. ' 09.12.2020: implemented now. STATIC cnt AS LONG STATIC slnr AS DWORD STATIC TaskParamLabels() AS ASCIIZ*8 IF ISFALSE Task(%Bug_noise).tog THEN IF ISFALSE Task(%Bug_noise).hParam THEN DIM TaskParamLabels(0) TaskParamLabels(0)="Noise" MakeTaskParameterDialog %Bug_Noise,1, Slider(),0,UdCtrl(), TaskParamLabels() slnr = TaskEX(%Bug_Noise).SliderNumbers(0) Slider(slnr).value = 20 SendMessage Slider(Slnr).h, %TBM_SETPOS,%True, Slider(Slnr).value END IF Task(%Bug_Noise).tog = %True END IF IF Slider(slnr).value <> Bug.ctrl(1) THEN Bug.ctrl(1) = Slider(slnr).value Controller bug.channel, 1, Bug.ctrl(1) END IF END SUB SUB Bug_Hormove () ' controller 10 test : panning ' 04.12.2016: adapted to Bug ' 09.12.2020: defaults updated. STATIC slnr AS DWORD STATIC TaskParamLabels() AS ASCIIZ*8 STATIC hw AS DWORD IF ISFALSE Task(%Bug_Hormove).tog THEN IF ISFALSE Task(%Bug_Hormove).hParam THEN DIM TaskParamLabels(2) TaskParamLabels(0)="Hor" TaskParamLabels(1)="Speed" TaskParamlabels(2)="Acc" MakeTaskParameterDialog %Bug_hormove,3, Slider(),0,UdCtrl(), TaskParamLabels() slnr = TaskEX(%Bug_hormove).SliderNumbers(0) Slider(slnr).cptr = CODEPTR(Bug_SL10) Slider(slnr).value = 64 SendMessage Slider(Slnr).h, %TBM_SETPOS,%True, Slider(Slnr).value Slider(slnr+1).cptr = CODEPTR(Bug_SL31) Slider(slnr+1).value = 80 '32 SendMessage Slider(Slnr+1).h, %TBM_SETPOS,%True, Slider(Slnr+1).value Slider(slnr+2).cptr = CODEPTR(Bug_SL32) Slider(slnr+2).value = 100 '64 SendMessage Slider(Slnr+2).h, %TBM_SETPOS,%True, Slider(Slnr+2).value Controller Bug.channel, 10, 64 Bug.ctrl(10) = 64 Controller Bug.channel, 31, 32 Bug.ctrl(31) = 80 '32 Controller Bug.channel, 32, 64 Bug.ctrl(32) = 100 '64 END IF Task(%Bug_Hormove).freq = 1 Task(%Bug_Hormove).tog = %True END IF END SUB SUB Bug_SL10 () ' slider callback - horizontal movement STATIC slnr AS DWORD slnr = TaskEX(%Bug_Hormove).SliderNumbers(0) IF slider(slnr).value <> Bug.ctrl(10) THEN 'update only when button is clicked now Bug.ctrl(10) = Slider(slnr).value Controller Bug.channel, 10, Bug.ctrl(10) END IF END SUB SUB Bug_SL31 () ' slider callback - horizontal movement speed STATIC slnr AS DWORD slnr = TaskEX(%Bug_Hormove).SliderNumbers(1) IF slider(slnr).value <> Bug.ctrl(31) THEN 'update only when button is clicked now Bug.ctrl(31) = Slider(slnr).value Controller Bug.channel, 31, Bug.ctrl(31) END IF END SUB SUB Bug_SL32 () ' slider callback - horizontal movement acceleration STATIC slnr AS DWORD slnr = TaskEX(%Bug_Hormove).SliderNumbers(2) IF slider(slnr).value <> Bug.ctrl(32) THEN 'update only when button is clicked now Bug.ctrl(32) = Slider(slnr).value Controller Bug.channel, 32, Bug.ctrl(32) END IF END SUB SUB Bug_LR () ' periodic horizontal movement - panning ctrl 10. STATIC cnt AS LONG STATIC slnr AS DWORD STATIC TaskParamLabels() AS ASCIIZ*8 LOCAL amplitude AS LONG IF ISFALSE Task(%Bug_LR).tog THEN IF ISFALSE Task(%Bug_LR).hParam THEN DIM TaskParamLabels(0) TaskParamLabels(0)="Ampli" MakeTaskParameterDialog %Bug_LR,1, Slider(),0,UdCtrl(), TaskParamLabels() slnr = TaskEX(%Bug_LR).SliderNumbers(0) Slider(slnr).value = 0 SendMessage Slider(Slnr).h, %TBM_SETPOS,%True, Slider(Slnr).value END IF RESET cnt Task(%Bug_LR).freq = 1 Task(%Bug_LR).tog = %True END IF 'Task(%Bug_LR).freq = MAX(Slider(slnr).value / 20, 0.05) amplitude = Slider(slnr).value / 2 IF ISFALSE cnt MOD 2 THEN Controller Bug.channel, 10, MIN(64 + amplitude, 127) Bug.ctrl(10) = MIN(64 + amplitude, 127) ELSE Controller Bug.channel, 10, MAX(64 - amplitude, 0) Bug.ctrl(10) = MAX(64 - amplitude, 0) END IF INCR cnt Task(%Bug_LR).freq = MAX(0.25, amplitude / 32) END SUB SUB Bug_UD () ' periodic vertical movement - ctrl 11 ' hardware en firmware test STATIC cnt AS LONG STATIC slnr AS DWORD STATIC TaskParamLabels() AS ASCIIZ*8 LOCAL amplitude AS LONG IF ISFALSE Task(%Bug_UD).tog THEN IF ISFALSE Task(%Bug_UD).hParam THEN DIM TaskParamLabels(0) TaskParamLabels(0)="Ampli" MakeTaskParameterDialog %Bug_UD,1, Slider(),0,UdCtrl(), TaskParamLabels() slnr = TaskEX(%Bug_UD).SliderNumbers(0) Slider(slnr).value = 64 SendMessage Slider(Slnr).h, %TBM_SETPOS,%True, Slider(Slnr).value END IF RESET cnt Task(%Bug_UD).freq = 0.2 'Slider(slnr).value / 20 ' range = 0.05 - 6.35Hz Task(%Bug_UD).tog = %True END IF amplitude = Slider(slnr).value / 2 IF ISFALSE cnt MOD 2 THEN Controller Bug.channel, 11, MIN(64 + amplitude,127) Bug.ctrl(11) = MIN(64 + amplitude,127) ELSE Controller Bug.channel, 11, MAX(64 - amplitude,0) Bug.ctrl(11) = MAX(64 - amplitude,0) END IF INCR cnt END SUB SUB Bug_Vermove () ' controller 11 test - vertical movement - sollpos up-down ' controller 33 test - vertical motor speed ' Hub board STATIC slnr AS DWORD STATIC TaskParamLabels() AS ASCIIZ*8 IF ISFALSE Task(%Bug_Vermove).tog THEN IF ISFALSE Task(%Bug_Vermove).hParam THEN DIM TaskParamLabels(1) TaskParamLabels(0)="Tilt" TaskParamLabels(1)="Speed" MakeTaskParameterDialog %Bug_Vermove,2, Slider(),0,UdCtrl(), TaskParamLabels() slnr = TaskEX(%Bug_Vermove).SliderNumbers(0) Slider(slnr).cptr = CODEPTR(Bug_SL11) Slider(slnr).value = 64 SendMessage Slider(Slnr).h, %TBM_SETPOS,%True, Slider(Slnr).value Slider(slnr+1).value = 16 SendMessage Slider(Slnr+1).h, %TBM_SETPOS,%True, Slider(Slnr+1).value END IF Task(%Bug_Vermove).freq = 10 Task(%Bug_VERmove).tog = %True END IF IF slider(slnr+1).value <> Bug.ctrl(33) THEN Bug.ctrl(33) = Slider(slnr+1).value Controller Bug.channel, 33, Bug.ctrl(33) END IF Task(%Bug_Vermove).freq = 2 END SUB SUB Bug_SL11 () ' slider callback - vertical movement STATIC slnr AS DWORD slnr = TaskEX(%Bug_Vermove).SliderNumbers(0) IF slider(slnr).value <> Bug.ctrl(11) THEN Bug.ctrl(11) = Slider(slnr).value Controller Bug.channel, 11, Bug.ctrl(11) END IF END SUB SUB Bug_Vibrato () '09.12.2016: test for PIC based FM in ' controllers 2, 3 and 4 '07.07.2021: CC23 added for trumpeter tests. STATIC slnr AS DWORD STATIC TaskParamLabels() AS ASCIIZ*8 IF ISFALSE Task(%Bug_vibrato).tog THEN IF ISFALSE Task(%Bug_vibrato).hParam THEN DIM TaskParamLabels(2) TaskParamLabels(0)="Speed" ' ctrl 4 TaskParamlabels(1)="Depth" ' ctrl 3 TaskParamLabels(2)="Delay" ' ctrl 2 - for trumpeter only... MakeTaskParameterDialog %Bug_vibrato,3, Slider(),0,UdCtrl(), TaskParamLabels() slnr = TaskEX(%Bug_vibrato).SliderNumbers(0) Slider(slnr).value = 0 Slider(slnr+1).value = 0 slider(slnr+2).value = 64 ' 500 ms SendMessage Slider(Slnr).h, %TBM_SETPOS,%True, Slider(Slnr).value Sendmessage Slider(slnr+1).h, %TBM_SETPOS,%True, Slider(slnr+1).value Sendmessage Slider(slnr+2).h, %TBM_SETPOS,%True, Slider(slnr+2).value END IF MM_Bug_On Task(%Bug_Vibrato).tog = %True Task(%Bug_Vibrato).freq = 8 END IF IF Slider(slnr).value <> Bug.ctrl(4) THEN ' FM speed Controller Bug.channel, 4, slider(slnr).value Bug.ctrl(4) = slider(slnr).value END IF IF Slider(slnr+1).value <> Bug.ctrl(3) THEN ' FM depth Controller Bug.channel, 3, slider(slnr+1).value Bug.ctrl(3) = slider(slnr+1).value END IF IF Slider(slnr+2).value <> Bug.ctrl(2) THEN ' FM delay Controller Bug.channel, 2, slider(slnr+2).value Bug.ctrl(2) = slider(slnr+2).value END IF END SUB SUB Bug_Vibrato_Stop () ' reset Controller Bug.channel, 4, 0 RESET Bug.ctrl(4) Controller Bug.channel, 3, 0 RESET Bug.ctrl(3) END SUB SUB Bug_adsr () ' This controls the enveloppe ' CC15 added 08.12.2020 ' 09.12.2020: defaults updated. STATIC slnr AS DWORD STATIC TaskParamLabels() AS ASCIIZ*8 IF ISFALSE Task(%Bug_adsr).tog THEN IF ISFALSE Task(%Bug_adsr).hParam THEN DIM TaskParamLabels(4) TaskParamLabels(0)="C7" TaskParamlabels(1)="C15" TaskParamLabels(2)="c16" TaskParamlabels(3)="c17" TaskParamlabels(4)="c18" TaskParamLabels(5)="c19" MakeTaskParameterDialog %Bug_adsr,6, Slider(),0,UdCtrl(), TaskParamLabels() slnr = TaskEX(%Bug_adsr).SliderNumbers(0) Slider(slnr).cptr = CODEPTR(Bug_SL7) Slider(slnr).value = 100 Bug.ctrl(7) = 100 SendMessage Slider(Slnr).h, %TBM_SETPOS,%True, Slider(Slnr).value Slider(slnr+1).cptr = CODEPTR(Bug_SL15) Slider(slnr+1).value = 40 Bug.ctrl(15) = 40 SendMessage Slider(Slnr+1).h, %TBM_SETPOS,%True, Slider(Slnr+1).value Slider(slnr+2).cptr = CODEPTR(Bug_SL16) Slider(slnr+2).value = 16 Bug.ctrl(16) = 16 SendMessage Slider(Slnr+2).h, %TBM_SETPOS,%True, Slider(Slnr+2).value Slider(slnr+3).cptr = CODEPTR(Bug_SL17) Slider(slnr+3).value = 127 Bug.ctrl(17) = 127 SendMessage Slider(Slnr+3).h, %TBM_SETPOS,%True, Slider(Slnr+3).value Slider(slnr+4).cptr = CODEPTR(Bug_SL18) Slider(slnr+4).value = 18 Bug.ctrl(18) = 18 SendMessage Slider(Slnr+4).h, %TBM_SETPOS,%True, Slider(Slnr+4).value Slider(slnr+5).cptr = CODEPTR(Bug_SL19) Slider(slnr+5).value = 64 Bug.ctrl(19) = 64 SendMessage Slider(Slnr+5).h, %TBM_SETPOS,%True, Slider(Slnr+5).value END IF Task(%Bug_adsr).freq = 10 Task(%Bug_adsr).tog = %True END IF Task(%Bug_adsr).freq = 0.5 END SUB SUB Bug_SL7 () ' slider callback STATIC slnr AS DWORD slnr = TaskEX(%Bug_adsr).SliderNumbers(0) IF slider(slnr).value <> Bug.ctrl(7) THEN Bug.ctrl(7) = Slider(slnr).value Controller Bug.channel, 7, Bug.ctrl(7) END IF END SUB SUB Bug_SL15 () ' slider callback STATIC slnr AS DWORD slnr = TaskEX(%Bug_adsr).SliderNumbers(1) IF slider(slnr).value <> Bug.ctrl(15) THEN Bug.ctrl(15) = Slider(slnr).value Controller Bug.channel, 15, Bug.ctrl(15) END IF END SUB SUB Bug_SL16 () ' slider callback STATIC slnr AS DWORD slnr = TaskEX(%Bug_adsr).SliderNumbers(2) IF slider(slnr).value <> Bug.ctrl(16) THEN Bug.ctrl(16) = Slider(slnr).value Controller Bug.channel, 16, Bug.ctrl(16) END IF END SUB SUB Bug_SL17 () ' slider callback STATIC slnr AS DWORD slnr = TaskEX(%Bug_adsr).SliderNumbers(3) IF slider(slnr).value <> Bug.ctrl(17) THEN Bug.ctrl(17) = Slider(slnr).value Controller Bug.channel, 17, Bug.ctrl(17) END IF END SUB SUB Bug_SL18 () ' slider callback STATIC slnr AS DWORD slnr = TaskEX(%Bug_adsr).SliderNumbers(4) IF slider(slnr).value <> Bug.ctrl(18) THEN Bug.ctrl(18) = Slider(slnr).value Controller Bug.channel, 18, Bug.ctrl(18) END IF END SUB SUB Bug_SL19 () ' slider callback STATIC slnr AS DWORD slnr = TaskEX(%Bug_adsr).SliderNumbers(5) IF slider(slnr).value <> Bug.ctrl(19) THEN Bug.ctrl(19) = Slider(slnr).value Controller Bug.channel, 19, Bug.ctrl(19) END IF END SUB SUB Bug_Tremolo () ' controller test for tremolo - DS pic controlled. ' 09.12.2016 - synth board STATIC slnr AS DWORD STATIC TaskParamLabels() AS ASCIIZ*8 STATIC cnt AS DWORD IF ISFALSE Task(%Bug_tremolo).tog THEN IF ISFALSE Task(%Bug_tremolo).hParam THEN DIM TaskParamLabels(1) TaskParamLabels(0)="Speed" ' ctrl 6 TaskParamlabels(1)="Depth" ' ctrl 5 MakeTaskParameterDialog %Bug_tremolo,2, Slider(),0,UdCtrl(), TaskParamLabels() slnr = TaskEX(%Bug_tremolo).SliderNumbers(0) Slider(slnr).value = 8 Slider(slnr+1).value = 20 SendMessage Slider(Slnr).h, %TBM_SETPOS,%True, Slider(Slnr).value Sendmessage Slider(slnr+1).h, %TBM_SETPOS,%True, Slider(slnr+1).value END IF cnt = %False MM_Bug_On Task(%Bug_Tremolo).tog = %True Task(%Bug_Tremolo).freq = 12 END IF IF Slider(slnr).value <> Bug.ctrl(6) THEN ' AM speed Controller Bug.channel, 6, slider(slnr).value Bug.ctrl(6) = slider(slnr).value END IF IF Slider(slnr+1).value <> Bug.ctrl(5) THEN ' AM depth Controller Bug.channel, 5, slider(slnr+1).value Bug.ctrl(5) = slider(slnr+1).value END IF END SUB SUB Bug_Tremolo_Stop () Controller Bug.channel, 5, 0 Bug.ctrl(6) = 0 Controller Bug.channel, 6, 0 Bug.ctrl(6) = 0 END SUB SUB Bug_25 () ' controller 25 , as on bono ' steers de velocities wherewith the solenoids will activate the valves. ' controlled by PIC2 on the pulse/velo board. ' This controller is for hardware development and not intended to be used by composers. STATIC slnr AS DWORD STATIC TaskParamLabels() AS ASCIIZ*8 IF ISFALSE Task(%Bug_25).tog THEN IF ISFALSE Task(%Bug_25).hParam THEN DIM TaskParamLabels(0) TaskParamLabels(0)="valv25" MakeTaskParameterDialog %Bug_25,1, Slider(),0,UdCtrl(), TaskParamLabels() slnr = TaskEX(%Bug_25).SliderNumbers(0) Bug.ctrl(25) = 64 Slider(slnr).value = Bug.ctrl(25) SendMessage Slider(Slnr).h, %TBM_SETPOS,%True, Slider(Slnr).value END IF Task(%Bug_25).freq = 50 Task(%Bug_25).tog = %True END IF IF slider(slnr).value <> Bug.ctrl(25) THEN Bug.ctrl(25) = Slider(slnr).value Controller Bug.channel, 25, Bug.ctrl(25) END IF END SUB SUB Bug_26 () ' controller 26 ' steers the relase time for the valves. ' controlled by PIC2 on the pulse/velo board. ' This controller is for hardware development and not intended to be used by composers. STATIC slnr AS DWORD STATIC TaskParamLabels() AS ASCIIZ*8 IF ISFALSE Task(%Bug_26).tog THEN IF ISFALSE Task(%Bug_26).hParam THEN DIM TaskParamLabels(0) TaskParamLabels(0)="valv26" MakeTaskParameterDialog %Bug_26,1, Slider(),0,UdCtrl(), TaskParamLabels() slnr = TaskEX(%Bug_26).SliderNumbers(0) Bug.ctrl(26) = 64 Slider(slnr).value = Bug.ctrl(26) SendMessage Slider(Slnr).h, %TBM_SETPOS,%True, Slider(Slnr).value END IF Task(%Bug_26).freq = 50 Task(%Bug_26).tog = %True END IF IF slider(slnr).value <> Bug.ctrl(26) THEN Bug.ctrl(26) = Slider(slnr).value Controller Bug.channel, 26, Bug.ctrl(26) END IF END SUB SUB Bug_20 () ' tuning to diapason. [quartertone up max. range] ' controller 20 ' 2016 not yet implemented on Bug ' 09.12.2020: Now fully implemented! STATIC slnr AS DWORD STATIC TaskParamLabels() AS ASCIIZ*8 IF ISFALSE Task(%Bug_20).tog THEN IF ISFALSE Task(%Bug_20).hParam THEN DIM TaskParamLabels(0) TaskParamLabels(0)="tune" MakeTaskParameterDialog %Bug_20,1, Slider(),0,UdCtrl(), TaskParamLabels() slnr = TaskEX(%Bug_20).SliderNumbers(0) Slider(slnr).cptr = CODEPTR(Bug_SL20) Slider(slnr).value = 64 ' 440Hz, see doc. Bug.ctrl(20) = 64 SendMessage Slider(Slnr).h, %TBM_SETPOS,%True, Slider(Slnr).value END IF Task(%Bug_20).freq = 0.45 Task(%Bug_20).tog = %True END IF END SUB SUB Bug_SL20 () ' slider callback STATIC slnr AS DWORD slnr = TaskEX(%Bug_20).SliderNumbers(0) IF slider(slnr).value <> Bug.ctrl(20) THEN Bug.ctrl(20) = Slider(slnr).value Controller Bug.channel, 20, Bug.ctrl(20) END IF END SUB SUB Bug_Lites () ' 04.12.2016: adapted to Bug ' on/off test only ' lites 120-125 also flash STATIC cnt AS LONG STATIC udnr AS DWORD STATIC slnr AS DWORD STATIC lite AS BYTE IF ISFALSE Task(%Bug_Lites).tog THEN DIM TaskParamLabels(0 TO 1) AS ASCIIZ * 8 TaskParamLabels(0) = "Speed" TaskParamLabels(1) = "Nr." IF ISFALSE Task(%Bug_Lites).hParam THEN MakeTaskParameterDialog %Bug_Lites,1,Slider(),1,UDctrl(),TaskParamLabels() END IF IF slnr = %False THEN slnr = TaskEX(%Bug_Lites).SliderNumbers(0) Slider(slnr).minval =1 ' tempo Slider(slnr).maxval = 127 Slider(slnr).value = 16 SendMessage Slider(Slnr).h, %TBM_SETPOS,%True, Slider(Slnr).value END IF IF udnr = %False THEN udnr = TaskEX(%Bug_Lites).UpDownNumbers(0) UDctrl(udnr).cptr = CODEPTR(Bug_Lites_UD) ' nr. updown UDctrl(udnr).value = 120 UDctrl(udnr).minval = 120 UDctrl(udnr).maxval = 127 UDctrl(udnr).stap = 1 END IF Task(%Bug_Lites).tog = %True END IF IF lite <> UDctrl(udnr).value THEN NoteOff Bug.channel, lite RESET Bug.ctrl(50 + lite - 120) lite = UDctrl(udnr).value END IF IF ISFALSE cnt MOD 2 THEN IF lite < 126 THEN IF lite <> Bug.ctrl(50 + lite - 120) THEN mPlay Bug.channel, lite, Slider(slnr).value lite = Bug.ctrl(50 + lite -120) END IF ELSE mPlay Bug.channel, lite, 127 END IF ELSE IF lite > 125 THEN mPlay Bug.channel, lite, 0 END IF END IF INCR cnt Task(%Bug_Lites).freq = MAX(1,(Slider(slnr).value / 4)) END SUB SUB Bug_Lites_UD () ' callback on parameter UpDowns. : lite number LOCAL value AS BYTE LOCAL udnr AS DWORD udnr = TaskEX(%Bug_Lites).UpdownNumbers(0) value = UDCtrl(udnr).value IF value > 127 THEN UDctrl(udnr).value = 127 : value = 127 IF value < 120 THEN UDCTRL(udnr).value = 120 : value = 120 SetDlgItemText Task(%Bug_Lites).hparam, %GMT_TEXT0_ID + 16, STR$(value) END SUB SUB Bug_Test() ' tests the Synth board STATIC slnr AS DWORD STATIC udnr AS DWORD LOCAL value AS LONG STATIC noot AS BYTE STATIC onfreq AS SINGLE STATIC offFreq AS SINGLE STATIC oldnote AS BYTE STATIC resetval AS BYTE LOCAL velo AS BYTE LOCAL period AS SINGLE LOCAL onpart AS SINGLE LOCAL offpart AS SINGLE IF ISFALSE Task(%Bug_Test).tog THEN DIM TaskParamLabels(0 TO 4) AS ASCIIZ * 8 TaskParamLabels(0) = "Tempo" ' rescaled in proc. TaskParamLabels(1) = "Velo" ' drive volume 0-127 - velocity byte TaskParamLabels(2) = "Bend" ' pitch-bend value ' SL2 - was UD2 TaskParamLabels(3) = "Stac" ' staccato - legato up down ' UD0 TaskParamLabels(4) = "Note" ' pitch ' UD1 IF ISFALSE Task(%Bug_Test).hParam THEN MakeTaskParameterDialog %Bug_Test,3,Slider(),2,UDctrl(),TaskParamLabels() END IF IF slnr = %False THEN slnr = TaskEX(%Bug_Test).SliderNumbers(0) Slider(slnr).minval =1 ' tempo Slider(slnr).maxval = 127 Slider(slnr).value = 8 SendMessage Slider(Slnr).h, %TBM_SETPOS,%True, Slider(Slnr).value Slider(slnr+2).value = 64 Slider(slnr+2).minval = 0 Slider(slnr+2).maxval = 127 SendMessage Slider(slnr + 2).h, %TBM_SETPOS, %True, Slider(slnr + 2).value END IF IF udnr = %False THEN udnr = TaskEX(%Bug_Test).UpDownNumbers(0) UDctrl(udnr).cptr = CODEPTR(Bug_UD0) ' staccato - legato updown UDctrl(udnr).value = 50 UDctrl(udnr).minval = 0 UDctrl(udnr).maxval = 100 UDctrl(udnr).stap = 1 UDctrl(udnr+1).cptr = CODEPTR(Bug_UD1) ' pitch - note UDctrl(udnr+1).value = Bug.lowtes ' for trumpeter, it should be 40, to cover pedals. UDctrl(udnr+1).minval = 40 ' Bug.lowtes UDctrl(udnr+1).maxval = Bug.Hightes resetval = 64 END IF Controller Bug.channel, 66, 127 Task(%Bug_Test).tog = %True END IF period = 1! / (Slider(slnr).value / 10!) ' tempo Task(%Bug_Test).tempo = 60 / period ' on-off periods: onpart = period * (UDctrl(udnr).value / 100!) ' 0 - 100 offpart = period - onpart ' 100 - 0 IF UDctrl(udnr).value < 1 THEN ' silence IF oldnote THEN NoteOff Bug.channel, oldnote oldnote = %False END IF offFreq = 1! / period Task(%Bug_Test).freq = OffFreq EXIT SUB ELSE onfreq = 1!/onpart END IF IF UDctrl(udnr).value > 99 THEN ' legato, send no note offs oldnote = %False ELSE offFreq = 1! /Offpart END IF IF oldnote THEN NoteOff Bug.channel, oldnote Task(%Bug_Test).freq = OffFreq oldnote = %False ELSE noot = UDctrl(udnr+1).value velo = Slider(slnr+1).value mPlay Bug.channel, noot, velo Bend Bug.channel, 0, Slider(slnr + 2).value ' lsb, msb order Task(%Bug_Test).freq = OnFreq oldnote = noot END IF IF Task(%Bug_Test).freq < 0.2 THEN Task(%Bug_Test).freq = 0.2 END SUB SUB Bug_UD0 () ' callback on parameter UpDowns. : on/off proportion LOCAL value AS BYTE LOCAL udnr AS DWORD udnr = TaskEX(%Bug_Test).UpdownNumbers(0) value = UDCtrl(udnr).value IF value > 99 THEN UDctrl(udnr).value = 100 : value = 100 IF value < 0 THEN UDCTRL(udnr).value = 0 : value = 0 SetDlgItemText Task(%Bug_Test).hparam, %GMT_TEXT0_ID + 16, "L=" & STR$(value) END SUB SUB Bug_UD1 () ' controls the notes to be played. LOCAL noot AS BYTE LOCAL udnr AS DWORD udnr = TaskEX(%Bug_Test).UpDownNumbers(1) noot = UDCtrl(udnr).value SetDlgItemText Task(%Bug_Test).hparam, %GMT_TEXT0_ID + 17, "N=" & STR$(noot) END SUB 'SUB Bug_UD2 () '' ' pitchbend UD - has to be send for each note!!! ' LOCAL value AS BYTE ' LOCAL udnr AS DWORD ' udnr = TaskEX(%Bug_Test).UpDownNumbers(2) ' value = UDCtrl(udnr).value ' IF value > 127 THEN value = 127 ' IF value < 0 THEN value = 0 ' SetDlgItemText Task(%Bug_Test).hparam, %GMT_TEXT0_ID + 18, "b=" & STR$(value) ' ' sending is in the main task. 'END SUB SUB Bug_Moves () '11.12.2016: adapted to STATIC h AS LONG STATIC v AS LONG STATIC hs AS LONG STATIC vs AS LONG STATIC slnr AS DWORD STATIC cnt AS DWORD STATIC stepsize AS LONG IF ISFALSE task(%Bug_Moves).tog THEN DIM TaskParamLabels(0 TO 1) AS ASCIIZ * 8 TaskParamLabels(0) = "v-hor" TaskParamLabels(1) = "v-ver" IF ISFALSE Task(%Bug_Moves).hParam THEN MakeTaskParameterDialog %Bug_Moves,2,Slider(),0,UDctrl(),TaskParamLabels() END IF IF slnr = %False THEN slnr = TaskEX(%Bug_Moves).SliderNumbers(0) Slider(slnr).minval = 2 ' hor tempo Slider(slnr).maxval = 127 Slider(slnr).value = 4 SendMessage Slider(Slnr).h, %TBM_SETPOS,%True, Slider(Slnr).value Slider(slnr+1).minval = 2 ' ver tempo Slider(slnr+1).maxval = 127 Slider(slnr+1).value = 4 SendMessage Slider(Slnr+1).h, %TBM_SETPOS,%True, Slider(Slnr+1).value END IF h = 64 v = 82 stepsize = 4 hs = stepsize '1 vs = stepsize '1 cnt = %False Task(%Bug_Moves).tog = %True END IF IF ISFALSE cnt MOD (128 - Slider(slnr).value) THEN h = h + hs END IF IF h > 127 THEN h = 127 IF h < 0 THEN h = 0 IF ISFALSE cnt MOD (128 - Slider(slnr+1).value) THEN v = v + vs END IF IF v > 127 THEN v = 127 IF v < 0 THEN v = 0 IF h <> Bug.ctrl(10) THEN Controller Bug.channel, 10, h Bug.ctrl(10) = h END IF IF v <> Bug.ctrl(11) THEN Controller Bug.channel, 11, v Bug.ctrl(11) = v END IF IF h => 127 THEN hs = - stepsize END IF IF h <= 0 THEN hs = stepsize END IF IF v >= 127 THEN vs = -stepsize END IF IF v <= 0 THEN vs = stepsize END IF INCR cnt Task(%Bug_Moves).freq = 8 END SUB SUB Bug_13 () ' adapted to ' 20.12.2016: adapted. ' should work on and LOCAL i AS DWORD STATIC onoff AS DWORD STATIC cnt AS LONG STATIC TaskParamLabels() AS ASCIIZ*8 STATIC slnr AS INTEGER STATIC udnr AS INTEGER STATIC n AS INTEGER IF ISFALSE Task(%Bug_13).tog THEN IF ISFALSE Task(%Bug_13).hParam THEN DIM TaskParamLabels(1) 'TaskParamLabels(0)="bits345" TaskParamLabels(0)="Valves" MakeTaskParameterDialog %Bug_13,0, Slider(),1,UdCtrl(), TaskParamLabels() ' slnr = TaskEX(%Bug_13).SliderNumbers(0) ' Slider(slnr).value = 0 ' SendMessage Slider(Slnr).h, %TBM_SETPOS,%True, Slider(Slnr).value IF udnr = %False THEN udnr = TaskEX(%Bug_13).UpDownNumbers(0) UDctrl(udnr).cptr = CODEPTR(Bug_13_UD0) ' step size UDctrl(udnr).value = 0 UDctrl(udnr).minval = 0 UDctrl(udnr).maxval = 7 UDctrl(udnr).stap = 1 END IF END IF Task(%Bug_13).tog = %True END IF Task(%Bug_13).freq = 20 END SUB SUB Bug_13_UD0 () ' callback on parameter UpDowns lowest 3 bits LOCAL value AS BYTE LOCAL udnr AS DWORD udnr = TaskEX(%Bug_13).UpdownNumbers(0) value = UDCtrl(udnr).value IF value > 7 THEN UDctrl(udnr).value = 7 : value = 7 IF value < 0 THEN UDCTRL(udnr).value = 0 : value = 0 IF Bug.ctrl(13) <> value THEN Bug.ctrl(13) = value Controller Bug.channel, 13, value END IF SetDlgItemText Task(%Bug_13).hparam, %GMT_TEXT0_ID + 16, "s=" & STR$(value) END SUB SUB Bug_Fingerings () STATIC hw AS LONG IF ISFALSE hw THEN DIALOG NEW 0, "fingerings", ,,100, 50 TO hw CONTROL ADD LABEL, hw, 1, "valves", 1, 1, 89, 12 CONTROL ADD CHECKBOX, hw, 2, "1", 10, 14, 12, 12, %BS_PUSHLIKE CONTROL ADD CHECKBOX, hw, 3, "2", 24, 14, 12, 12, %BS_PUSHLIKE CONTROL ADD CHECKBOX, hw, 4, "3", 38, 14, 12, 12, %BS_PUSHLIKE DIALOG SHOW MODELESS hw, CALL CB_Bug_Fingerings END IF END SUB CALLBACK FUNCTION CB_Bug_Fingerings ' adapted to gwr LOCAL i AS LONG LOCAL cc AS BYTE IF CBMSG <> %WM_COMMAND THEN EXIT FUNCTION IF CBCTLMSG <> %BN_CLICKED THEN EXIT FUNCTION RESET cc ' on Korn: cc = &B100 CONTROL GET CHECK CBHNDL, 2 TO i IF i THEN BIT SET cc, 0 CONTROL GET CHECK CBHNDL, 3 TO i IF i THEN BIT SET cc, 1 CONTROL GET CHECK CBHNDL, 4 TO i IF i THEN BIT SET cc, 2 CONTROL SET TEXT gh.cockpit, %GMT_Msg1, BIN$(cc) Controller Bug.channel, 13, cc END FUNCTION 'SUB Bug_31 () ' 'horizontal motor speed ' STATIC slnr AS DWORD ' STATIC TaskParamLabels() AS ASCIIZ*8 ' IF ISFALSE Task(%Bug_31).tog THEN ' IF ISFALSE Task(%Bug_31).hParam THEN ' DIM TaskParamLabels(0) ' TaskParamLabels(0)="Speed" ' MakeTaskParameterDialog %Bug_31,1, Slider(),0,UdCtrl(), TaskParamLabels() ' slnr = TaskEX(%Bug_31).SliderNumbers(0) ' Slider(slnr).value = 64 ' SendMessage Slider(Slnr).h, %TBM_SETPOS,%True, Slider(Slnr).value ' END IF ' Task(%Bug_31).freq = 4 ' Task(%Bug_31).tog = %TRue ' END IF ' Task(%Bug_31).freq = 4 ' IF Slider(slnr).value <> Bug.ctrl(31) THEN ' Bug.ctrl(31) = Slider(slnr).value ' Controller Bug.channel, 31, Bug.ctrl(31) ' END IF ' 'END SUB 'SUB Bug_32 () ' 'horizontal motor acceleration ' STATIC slnr AS DWORD ' STATIC TaskParamLabels() AS ASCIIZ*8 ' IF ISFALSE Task(%Bug_32).tog THEN ' IF ISFALSE Task(%Bug_32).hParam THEN ' DIM TaskParamLabels(0) ' TaskParamLabels(0)="Accel" ' MakeTaskParameterDialog %Bug_32,1, Slider(),0,UdCtrl(), TaskParamLabels() ' slnr = TaskEX(%Bug_32).SliderNumbers(0) ' Slider(slnr).value = 64 ' SendMessage Slider(Slnr).h, %TBM_SETPOS,%True, Slider(Slnr).value ' END IF ' Task(%Bug_32).freq = 1 ' Task(%Bug_32).tog = %TRue ' END IF ' Task(%Bug_32).freq = 1 ' IF Slider(slnr).value <> Bug.ctrl(32) THEN ' Bug.ctrl(32) = Slider(slnr).value ' Controller Bug.channel, 32, Bug.ctrl(32) ' END IF ' 'END SUB 'SUB Bug_67 () ' Controller Bug.channel, 67, 64 ' stoptask %Bug_67 'END SUB 'SUB Bug_68 () ' Controller Bug.channel, 68, 64 ' stoptask %Bug_68 'END SUB 'SUB Bug_69 () ' Controller Bug.channel, 69, 64 ' stoptask %Bug_69 'END SUB 'SUB Bug_70 () ' Controller Bug.channel, 70, 64 ' stoptask %Bug_70 'END SUB 'SUB Bug_71 () ' Controller Bug.channel, 71, 64 ' stoptask %Bug_71 'END SUB SUB Bug_Red125 () 'Bug flashing red lite (led) 'underside horn assembly 'output 9 on the valve board. STATIC slnr AS DWORD STATIC oldvelo AS BYTE STATIC TaskParamLabels() AS ASCIIZ*8 IF ISFALSE Task(%Bug_Red125).tog THEN IF ISFALSE Task(%Bug_Red125).hParam THEN DIM TaskParamLabels(0) TaskParamLabels(0)="Speed" MakeTaskParameterDialog %Bug_Red125,1, Slider(),0,UdCtrl(), TaskParamLabels() slnr = TaskEX(%Bug_Red125).SliderNumbers(0) oldvelo = 64 Slider(slnr).value = 64 Slider(slnr).minval = 0 Slider(slnr).maxval = 127 SendMessage Slider(Slnr).h, %TBM_SETPOS,%True, Slider(Slnr).value END IF Task(%Bug_Red125).freq = 64 Task(%Bug_Red125).tog = %True END IF Task(%Bug_Red125).freq = 4 IF Slider(slnr).value <> oldvelo THEN oldvelo = Slider(slnr).value mPlay Bug.channel, 125, oldvelo END IF END SUB SUB Bug_Red125_Stop () NoteOff Bug.channel, 125 END SUB SUB Bug_Red127 () 'Bug red lite on Hub board - no flashing. STATIC slnr AS DWORD 'STATIC oldvelo AS BYTE 'STATIC TaskParamLabels() AS ASCIIZ*8 IF ISFALSE Task(%Bug_Red127).tog THEN 'IF ISFALSE Task(%Bug_Red127).hParam THEN ' DIM TaskParamLabels(0) ' TaskParamLabels(0)="Speed" ' MakeTaskParameterDialog %Bug_Red127,1, Slider(),0,UdCtrl(), TaskParamLabels() ' slnr = TaskEX(%Bug_Red127).SliderNumbers(0) ' oldvelo = 64 ' Slider(slnr).value = 64 ' Slider(slnr).minval = 0 ' Slider(slnr).maxval = 127 ' SendMessage Slider(Slnr).h, %TBM_SETPOS,%True, Slider(Slnr).value 'END IF Task(%Bug_Red127).freq = 1 Task(%Bug_Red127).tog = %True mPlay Bug.channel, 127, 64 ' ON END IF ' Task(%Bug_Red127).freq = 1 ' IF Slider(slnr).value <> oldvelo THEN ' oldvelo = Slider(slnr).value ' mPlay Bug.channel, 125, oldvelo ' END IF END SUB SUB Bug_Red127_Stop () NoteOff Bug.channel, 127 END SUB SUB Bug_Lefteye () 'Bug flashing tungsten lite 121 STATIC slnr AS DWORD STATIC oldvelo AS BYTE STATIC TaskParamLabels() AS ASCIIZ*8 IF ISFALSE Task(%Bug_Lefteye).tog THEN IF ISFALSE Task(%Bug_Lefteye).hParam THEN DIM TaskParamLabels(0) TaskParamLabels(0)="Speed" MakeTaskParameterDialog %Bug_Lefteye,1, Slider(),0,UdCtrl(), TaskParamLabels() slnr = TaskEX(%Bug_Lefteye).SliderNumbers(0) oldvelo = 64 Slider(slnr).value = 64 Slider(slnr).minval = 0 Slider(slnr).maxval = 127 SendMessage Slider(Slnr).h, %TBM_SETPOS,%True, Slider(Slnr).value END IF Task(%Bug_Lefteye).freq = 64 Task(%Bug_Lefteye).tog = %TRue END IF Task(%Bug_Lefteye).freq = 4 IF Slider(slnr).value <> oldvelo THEN oldvelo = Slider(slnr).value mPlay Bug.channel, 121, oldvelo END IF END SUB SUB Bug_Lefteye_Stop () NoteOff Bug.channel, 121 END SUB SUB Bug_Righteye () 'Bug flashing tungsten lite 120 STATIC slnr AS DWORD STATIC oldvelo AS BYTE STATIC TaskParamLabels() AS ASCIIZ*8 IF ISFALSE Task(%Bug_Righteye).tog THEN IF ISFALSE Task(%Bug_Righteye).hParam THEN DIM TaskParamLabels(0) TaskParamLabels(0)="Speed" MakeTaskParameterDialog %Bug_Righteye,1, Slider(),0,UdCtrl(), TaskParamLabels() slnr = TaskEX(%Bug_Righteye).SliderNumbers(0) oldvelo = 64 Slider(slnr).value = 64 Slider(slnr).minval = 0 Slider(slnr).maxval = 127 SendMessage Slider(Slnr).h, %TBM_SETPOS,%True, Slider(Slnr).value END IF Task(%Bug_Righteye).freq = 64 Task(%Bug_Righteye).tog = %TRue END IF Task(%Bug_Righteye).freq = 4 IF Slider(slnr).value <> oldvelo THEN oldvelo = Slider(slnr).value mPlay Bug.channel, 120, oldvelo END IF END SUB SUB Bug_Righteye_Stop () NoteOff Bug.channel, 120 END SUB SUB Bug_CC80 () ' dynamic scaling to 20db-30dB-40dB-50dB-60dB ' controller 80 ' implemented 13.02.2020 - flut and so ' 23.03.2020: added for autosax ' 26.10.2020: added for the horn on Rumo, ' 02.12.2020: PIC firmware extended. Now we have ranges 20,30,40,50,60dB ' 09.12.2020: Implemented for STATIC slnr AS DWORD STATIC TaskParamLabels() AS ASCIIZ*8 IF ISFALSE Task(%Bug_CC80).tog THEN IF ISFALSE Task(%Bug_CC80).hParam THEN DIM TaskParamLabels(0) TaskParamLabels(0)="CC80" MakeTaskParameterDialog %Bug_CC80,1, Slider(),0,UdCtrl(), TaskParamLabels() slnr = TaskEX(%Bug_CC80).SliderNumbers(0) Bug.ctrl(80) = 64 ' set to 40dB - this is the default on cold boot Slider(slnr).value = Bug.ctrl(80) SendMessage Slider(Slnr).h, %TBM_SETPOS,%True, Slider(Slnr).value END IF Task(%Bug_CC80).freq = 2 Task(%Bug_CC80).tog = %True END IF IF (slider(slnr).value + 1) \ 32 <> (Bug.ctrl(80)+1) \ 32 THEN ' = Rotate right value, 5 Bug.ctrl(80) = slider(slnr).value Controller Bug.channel, 80, Bug.ctrl(80) END IF END SUB SUB Trumpeter_33 () ' controller 33 ' changes the valve lookups ' only values between 0 and 22 are accepted here! STATIC slnr, CC33 AS DWORD STATIC TaskParamLabels() AS ASCIIZ*8 IF ISFALSE Task(%Trumpeter_33).tog THEN IF ISFALSE Task(%Trumpeter_33).hParam THEN DIM TaskParamLabels(0) TaskParamLabels(0)="Trp_C33" MakeTaskParameterDialog %Trumpeter_33,1, Slider(),0,UdCtrl(), TaskParamLabels() slnr = TaskEX(%Trumpeter_33).SliderNumbers(0) CC33 = 10 Slider(slnr).value = CC33 SendMessage Slider(Slnr).h, %TBM_SETPOS,%True, Slider(Slnr).value END IF Task(%Trumpeter_33).freq = 5 Task(%Trumpeter_33).tog = %True END IF IF slider(slnr).value <> CC33 THEN CC33 = Slider(slnr).value IF CC33 < 23 THEN ' else, just disregard. Controller Bug.channel, 33, CC33 END IF END IF END SUB SUB Trumpeter_Pedals () ' 17.06.2021 ' test for the pedal tones on the trumpet. These are not implemented on nor on . ' note range 47-51 added, although these notes are acoustically impossible. LOCAL i AS DWORD STATIC onoff AS DWORD STATIC cnt AS LONG STATIC TaskParamLabels() AS ASCIIZ*8 STATIC slnr AS INTEGER STATIC n AS INTEGER IF ISFALSE Task(%Trumpeter_Pedals).tog THEN IF ISFALSE Task(%Trumpeter_Pedals).hParam THEN DIM TaskParamLabels(1) TaskParamLabels(0)="velo" TaskParamLabels(1)="speed" MakeTaskParameterDialog %Trumpeter_Pedals,2, Slider(),0,UdCtrl(), TaskParamLabels() slnr = TaskEX(%Trumpeter_Pedals).SliderNumbers(0) Slider(slnr).value = 84 SendMessage Slider(Slnr).h, %TBM_SETPOS,%True, Slider(Slnr).value Slider(slnr+1).value = 36 SendMessage Slider(Slnr+1).h, %TBM_SETPOS,%True, Slider(Slnr+1).value END IF IF ISFALSE Bug.ctrl(66) THEN Controller Bug.channel, 66, 127 Bug.ctrl(66) = 127 END IF Task(%Trumpeter_Pedals).tog = %True cnt = 40 EXIT SUB END IF IF ISFALSE onoff THEN IF n THEN mPlay Bug.channel, n, 0 n = %False onoff = %True ELSE n = cnt mPlay Bug.channel, n, Slider(slnr).value INCR cnt 'IF cnt > 46 THEN cnt = 40 IF cnt > 51 THEN cnt = 40 onoff = %False END IF Task(%Trumpeter_Pedals).freq = MAX(0.25,Slider(slnr+1).value / 8) END SUB SUB Trumpeter_CC40 () ' sets waveform for the sub register STATIC TaskParamLabels() AS ASCIIZ*8 STATIC udnr , prog AS DWORD IF ISFALSE Task(%Trumpeter_CC40).tog THEN IF ISFALSE Task(%Trumpeter_CC40).hParam THEN DIM TaskParamLabels(0) MakeTaskParameterDialog %Trumpeter_CC40,0, Slider(),1,UdCtrl(), TaskParamLabels() IF udnr = %False THEN udnr = TaskEX(%Trumpeter_CC40).UpDownNumbers(0) UDctrl(udnr).cptr = CODEPTR(Trumpeter_CC40_UD0) ' prog.nr. UDctrl(udnr).value = 0 UDctrl(udnr).minval = 0 UDctrl(udnr).maxval = 14 UDctrl(udnr).stap = 1 END IF RESET prog END IF Task(%Trumpeter_CC40).tog = %True END IF IF UDctrl(udnr).value <> prog THEN prog = UDctrl(udnr).value Controller Bug.channel, 40, prog Bug.ctrl(40) = prog END IF END SUB SUB Trumpeter_CC40_UD0 () ' callback on parameter UpDowns LOCAL value AS BYTE LOCAL udnr AS DWORD udnr = TaskEX(%Trumpeter_CC40).UpdownNumbers(0) value = UDCtrl(udnr).value IF value > 14 THEN UDctrl(udnr).value =14 : value = 14 IF value < 0 THEN UDCTRL(udnr).value = 0 : value = 0 SetDlgItemText Task(%Trumpeter_CC40).hparam, %GMT_TEXT0_ID + 16, "p=" & STR$(value) END SUB SUB Trumpeter_CC41 () ' sets waveform for the low register STATIC TaskParamLabels() AS ASCIIZ*8 STATIC udnr , prog AS DWORD IF ISFALSE Task(%Trumpeter_CC41).tog THEN IF ISFALSE Task(%Trumpeter_CC41).hParam THEN DIM TaskParamLabels(0) MakeTaskParameterDialog %Trumpeter_CC41,0, Slider(),1,UdCtrl(), TaskParamLabels() IF udnr = %False THEN udnr = TaskEX(%Trumpeter_CC41).UpDownNumbers(0) UDctrl(udnr).cptr = CODEPTR(Trumpeter_CC41_UD0) ' prog.nr. UDctrl(udnr).value = 0 UDctrl(udnr).minval = 0 UDctrl(udnr).maxval = 14 UDctrl(udnr).stap = 1 END IF RESET prog END IF Task(%Trumpeter_CC41).tog = %True END IF IF UDctrl(udnr).value <> prog THEN prog = UDctrl(udnr).value Controller Bug.channel, 41, prog Bug.ctrl(41) = prog END IF END SUB SUB Trumpeter_CC41_UD0 () ' callback on parameter UpDowns LOCAL value AS BYTE LOCAL udnr AS DWORD udnr = TaskEX(%Trumpeter_CC41).UpdownNumbers(0) value = UDCtrl(udnr).value IF value > 14 THEN UDctrl(udnr).value = 14 : value = 14 IF value < 0 THEN UDCTRL(udnr).value = 0 : value = 0 SetDlgItemText Task(%Trumpeter_CC41).hparam, %GMT_TEXT0_ID + 16, "p=" & STR$(value) END SUB SUB Trumpeter_CC42 () ' sets waveform for the med register STATIC TaskParamLabels() AS ASCIIZ*8 STATIC udnr , prog AS DWORD IF ISFALSE Task(%Trumpeter_CC42).tog THEN IF ISFALSE Task(%Trumpeter_CC42).hParam THEN DIM TaskParamLabels(0) MakeTaskParameterDialog %Trumpeter_CC42,0, Slider(),1,UdCtrl(), TaskParamLabels() IF udnr = %False THEN udnr = TaskEX(%Trumpeter_CC42).UpDownNumbers(0) UDctrl(udnr).cptr = CODEPTR(Trumpeter_CC42_UD0) ' prog.nr. UDctrl(udnr).value = 0 UDctrl(udnr).minval = 0 UDctrl(udnr).maxval = 14 UDctrl(udnr).stap = 1 END IF RESET prog END IF Task(%Trumpeter_CC42).tog = %True END IF IF UDctrl(udnr).value <> prog THEN prog = UDctrl(udnr).value Controller Bug.channel, 42, prog bug.ctrl(42) = prog END IF END SUB SUB Trumpeter_CC42_UD0 () ' callback on parameter UpDowns LOCAL value AS BYTE LOCAL udnr AS DWORD udnr = TaskEX(%Trumpeter_CC42).UpdownNumbers(0) value = UDCtrl(udnr).value IF value > 14 THEN UDctrl(udnr).value = 14 : value = 14 IF value < 0 THEN UDCTRL(udnr).value = 0 : value = 0 SetDlgItemText Task(%Trumpeter_CC42).hparam, %GMT_TEXT0_ID + 16, "p=" & STR$(value) END SUB SUB Trumpeter_CC43 () ' sets waveform for the high register STATIC TaskParamLabels() AS ASCIIZ*8 STATIC udnr , prog AS DWORD IF ISFALSE Task(%Trumpeter_CC43).tog THEN IF ISFALSE Task(%Trumpeter_CC43).hParam THEN DIM TaskParamLabels(0) MakeTaskParameterDialog %Trumpeter_CC43,0, Slider(),1,UdCtrl(), TaskParamLabels() IF udnr = %False THEN udnr = TaskEX(%Trumpeter_CC43).UpDownNumbers(0) UDctrl(udnr).cptr = CODEPTR(Trumpeter_CC43_UD0) ' prog.nr. UDctrl(udnr).value = 0 UDctrl(udnr).minval = 0 UDctrl(udnr).maxval = 14 UDctrl(udnr).stap = 1 END IF RESET prog END IF ' ' just for debugging and test: [03.03.2021] ' DIM HuntWav0(1023) AS STATIC INTEGER ' Trumpeter_Waves Huntwav0() ' this created the lookup file for the PIC '------------------------------ Task(%Trumpeter_CC43).tog = %True END IF IF UDctrl(udnr).value <> prog THEN prog = UDctrl(udnr).value Controller Bug.channel, 43, prog Bug.ctrl(43) = prog END IF END SUB SUB Trumpeter_CC43_UD0 () ' callback on parameter UpDowns LOCAL value AS BYTE LOCAL udnr AS DWORD udnr = TaskEX(%Trumpeter_CC43).UpdownNumbers(0) value = UDCtrl(udnr).value IF value > 14 THEN UDctrl(udnr).value = 14 : value = 14 IF value < 0 THEN UDCTRL(udnr).value = 0 : value = 0 SetDlgItemText Task(%Trumpeter_CC43).hparam, %GMT_TEXT0_ID + 16, "p=" & STR$(value) END SUB SUB Trumpeter_params () ' sets waveform parameters ' 24.06.2021 - gwr STATIC TaskParamLabels() AS ASCIIZ*8 STATIC slnr, i AS DWORD STATIC p1, p2,p3,p4,p5,p6,p7,p8,p9,p10,p11,p12 AS INTEGER IF ISFALSE Task(%Trumpeter_params).tog THEN IF ISFALSE Task(%Trumpeter_params).hParam THEN DIM TaskParamLabels(10) TaskParamLabels(0)="p1-w0" TaskParamLabels(1)="p2-w0" TaskParamLabels(2)="p3-w0" TaskParamLabels(3)= "p4-w0" TaskParamLabels(4)="p5-w2" TaskParamLabels(5)="p6-w4" TaskParamLabels(6)="p7-w4" TaskParamLabels(7)="p8-w12" TaskParamLabels(8)= "p9-w13" TaskParamLabels(9)="p10-w14" TaskParamLabels(10)="p11-w14" MakeTaskParameterDialog %Trumpeter_CC43,11, Slider(),0,UdCtrl(), TaskParamLabels() IF slnr = %False THEN slnr = TaskEX(%Trumpeter_params).SliderNumbers(0) 'Symbol p1_default = 27 ' parametric1 'Symbol p2_default = 83 'Symbol p3_default = 96 'Symbol p4_default = 110 'Symbol p5_default = 42 ' square 'Symbol p6_default = 42 ' triangle 'Symbol p7_default = 85 'Symbol p8_default = 8 ' pulse 'Symbol p9_default = 64 ' assin 'Symbol p10_default = 20 ' dirty assin symmetry 'Symbol p11_default = 64 ' dirty assin noisyness Bug.ctrl(100) = 27 Bug.ctrl(101) = 83 Bug.ctrl(102) = 96 Bug.ctrl(103) = 110 Bug.ctrl(104) = 42 Bug.ctrl(105) = 42 Bug.ctrl(106) = 85 Bug.ctrl(107) = 8 Bug.ctrl(108) = 64 Bug.ctrl(109) = 20 Bug.ctrl(110) = 64 FOR i = 0 TO 10 Slider(slnr+i).value = Bug.ctrl(100+i) SendMessage Slider(Slnr+i).h, %TBM_SETPOS,%True, Slider(Slnr+i).value NEXT i END IF END IF Task(%Trumpeter_params).tog = %True END IF IF Slider(slnr).value <> Bug.ctrl(100) THEN Bug.ctrl(100) = Slider(slnr).value Controller Bug.channel, 100, Bug.ctrl(100) p1 = Bug.ctrl(100) END IF IF Slider(slnr+1).value <> Bug.ctrl(101) THEN Bug.ctrl(101) = Slider(slnr+1).value Controller Bug.channel, 101, Bug.ctrl(101) p2 = Bug.ctrl(101) END IF IF Slider(slnr+2).value <> Bug.ctrl(102) THEN Bug.ctrl(102) = Slider(slnr+2).value Controller Bug.channel, 102, Bug.ctrl(102) p3 = Bug.ctrl(102) END IF IF Slider(slnr+3).value <> Bug.ctrl(103) THEN Bug.ctrl(103) = Slider(slnr+3).value Controller Bug.channel, 103, Bug.ctrl(103) p4 = Bug.ctrl(103) END IF IF Slider(slnr+4).value <> Bug.ctrl(104) THEN Bug.ctrl(104) = Slider(slnr+4).value Controller Bug.channel, 104, Bug.ctrl(104) p5 = Bug.ctrl(104) END IF IF Slider(slnr+5).value <> Bug.ctrl(105) THEN Bug.ctrl(105) = Slider(slnr+5).value Controller Bug.channel, 105, Bug.ctrl(105) p6 = Bug.ctrl(105) END IF IF Slider(slnr+6).value <> Bug.ctrl(106) THEN Bug.ctrl(106) = Slider(slnr+6).value Controller Bug.channel, 106, Bug.ctrl(106) p7 = Bug.ctrl(106) END IF IF Slider(slnr+7).value <> Bug.ctrl(107) THEN Bug.ctrl(107) = Slider(slnr+7).value Controller Bug.channel, 107, Bug.ctrl(107) p8 = Bug.ctrl(107) END IF IF Slider(slnr+8).value <> Bug.ctrl(108) THEN Bug.ctrl(108) = Slider(slnr+8).value Controller Bug.channel, 108, Bug.ctrl(108) p9 = Bug.ctrl(108) END IF IF Slider(slnr+9).value <> Bug.ctrl(109) THEN Bug.ctrl(109) = Slider(slnr+9).value Controller Bug.channel, 109, Bug.ctrl(109) p10 = Bug.ctrl(109) END IF IF Slider(slnr+10).value <> Bug.ctrl(110) THEN Bug.ctrl(110) = Slider(slnr+10).value Controller Bug.channel, 110, Bug.ctrl(110) p11 = Bug.ctrl(110) END IF END SUB