' *************************************************************** ' * test and debug code for midi controlled robots and automats * ' * * ' *************************************************************** ' 20.05.2003: creation date of this module ' 25.05.2003: revision & clean up ' 20.05.2004: ADXL code moved to g_interfaces.inc in demo compilation. ' 06.11.2004: adapted to g_mm.inc ' 10.02.2005: rebuild of piperola hardware: now 2 pic controllers ' many midi controllers added ' 14.02.2005: new test code written ' 15.02.2005: test module for channel aftertouch commands added ' added test code for lights. ' 17.02.2005: individual test procs. added for percussion elements. ' 02.03.2005: both pics reprogrammed. New controllers implemented. ' 17.07.2005: now shares cockpit with bourdonola only. ' 06.12.2007: Piperola retuned and upgraded. Windpressure setting now is 85. ' 29.12.2008: repair session on not playing note 104. ' PIPEROLA TASKS %Test_Piperola = 18 '32 %Test_Tremulant = 19 '33 %Test_Piperola_Perc = 20 '34 %Piperola_Tune = 21 '35 %Test_Pip_Aft = 22 '36 %Test_Pip_Light = 23 '37 %Pipp1 = 24 %Pipp2 = 25 %Pipp3 = 26 %Pipp4 = 27 %Pipp5 = 28 %Pipp6 = 29 %Pipp7 = 30 %Pipp8 = 31 %Pip118 = 10 %Pip119 = 11 DECLARE SUB Piperola_Test () DECLARE SUB Piperola_Test_UD () DECLARE SUB Tremulant_Test () DECLARE SUB Piperola_Percussie () DECLARE SUB Piperola_AfterTouch () DECLARE SUB Piperola_Aftertouch_UD () DECLARE SUB Piperola_Lights () ' 118 & 119 DECLARE SUB Piperola_Lights_Off () DECLARE SUB Piperola_Tune () DECLARE SUB Piperola_Tune_UD () DECLARE FUNCTION Init_Piperola () AS LONG DECLARE SUB Piper_controlroom DECLARE CALLBACK FUNCTION CB_Piper_Controlroom DECLARE SUB P120 () DECLARE SUB P121 () DECLARE SUB P122 () DECLARE SUB P123 () DECLARE SUB P124 () DECLARE SUB P125 () DECLARE SUB P126 () DECLARE SUB P127 () DECLARE SUB P118 () ' lite DECLARE SUB P119 () ' lite FUNCTION Init_piperola () AS LONG LOCAL retval AS LONG ' GetInstrumentParams Piperola, %IDM_PIPEROLA ' not required? ' retval = SetRobotPort (Piperola, IniFilename , hMidiO()) Task(%Test_Piperola).naam = "Piperola" Task(%Test_Piperola).cptr = CODEPTR(Piperola_Test) Task(%Test_Piperola).freq = 20 Task(%Test_Piperola).channel = Piperola.Channel Task(%Test_Piperola).flags = %False TaskEX(%Test_Piperola).StopCptr = CODEPTR(MM_PIperola_Off) Task(%Test_Tremulant).naam = "Tremulant" Task(%Test_Tremulant).cptr = CODEPTR(Tremulant_Test) Task(%Test_Tremulant).freq = 20 Task(%Test_Tremulant).channel = Piperola.Channel Task(%Test_Piperola_Perc).naam = "PipPerc" Task(%Test_Piperola_Perc).cptr = CODEPTR(Piperola_Percussie) Task(%Test_Piperola_Perc).freq = 20 Task(%Test_Piperola_Perc).flags = %False Task(%Test_Piperola_Perc).channel = Piperola.Channel Task(%Piperola_Tune).naam = "Tune" Task(%Piperola_Tune).cptr = CODEPTR(Piperola_Tune) Task(%Piperola_Tune).freq = 10 Task(%Piperola_Tune).channel = Piperola.channel TaskEX(%Piperola_Tune).StopCptr = CODEPTR(MM_Piperola_Off) Task(%Test_Pip_Aft).naam = "Tst-Aft" Task(%Test_Pip_Aft).cptr = CODEPTR(Piperola_Aftertouch) Task(%Test_Pip_Aft).freq = 20 Task(%Test_Pip_Aft).channel = Piperola.channel TaskEX(%Test_Pip_Aft).StopCptr = CODEPTR(MM_Piperola_Off) Task(%Test_Pip_Light).naam = "PipLites" Task(%Test_Pip_Light).cptr = CODEPTR(Piperola_Lights) Task(%Test_Pip_Light).freq = 4 Task(%Test_Pip_Light).channel = Piperola.channel TaskEX(%Test_Pip_Light).stopcptr = CODEPTR(Piperola_Lights_Off) Task(%Pipp1).naam = "120" Task(%Pipp1).cptr = CODEPTR(P120) Task(%Pipp1).freq = 4 Task(%Pipp2).naam = "121" Task(%Pipp2).cptr = CODEPTR(P121) Task(%Pipp2).freq = 4 Task(%Pipp3).naam = "122" Task(%Pipp3).cptr = CODEPTR(P122) Task(%Pipp3).freq = 4 Task(%Pipp4).naam = "123" Task(%Pipp4).cptr = CODEPTR(P123) Task(%Pipp4).freq = 4 Task(%Pipp5).naam = "124" Task(%Pipp5).cptr = CODEPTR(P124) Task(%Pipp5).freq = 4 Task(%Pipp6).naam = "125" Task(%Pipp6).cptr = CODEPTR(P125) Task(%Pipp6).freq = 4 Task(%Pipp7).naam = "126" Task(%Pipp7).cptr = CODEPTR(P126) Task(%Pipp7).freq = 4 Task(%Pipp8).naam = "127" Task(%Pipp8).cptr = CODEPTR(P127) Task(%Pipp8).freq = 4 Task(%Pip118).naam ="L118" Task(%Pip118).cptr = CODEPTR(P118) Task(%Pip118).freq = 2 Task(%Pip119).naam ="L119" Task(%Pip119).cptr = CODEPTR(P119) Task(%Pip119).freq = 2 ButnSW(7).tag0 = "PiperCtrl tog" ButnSW(7).tag1 = "PiperCtrl tog" ButnSW(7).cptr = CODEPTR(Piper_Controlroom) FUNCTION = %True END FUNCTION SUB Piperola_Test() ' scale test for piperola PWM motor controll and tremulant circuit, using the velo byte. STATIC i% STATIC toets% STATIC slnr AS BYTE STATIC udnr AS BYTE IF ISFALSE Task(%Test_Piperola).tog THEN LOCAL testid%, testhandle AS LONG toets% = %True i% = piperola.lowtes ' create a parameter window: ' The handle for this window will be returned in Task(Tasknr).hParam DIM TaskParamLabels(0 TO 3) AS ASCIIZ * 8 TaskParamLabels(0) = "Tempo" TaskParamLabels(1) = "Wind" ' controller 7 TaskParamLabels(2) = "sfz" ' here we use velo for sfz control TaskParamlabels(3) = "+/-" ' overpressure/underpressure control IF ISFALSE Task(%Test_Piperola).hParam THEN MakeTaskParameterDialog %Test_Piperola,3,Slider(),1,UDctrl(),TaskParamLabels() ' retrieve the slider values in Slider().value ' the slider handles are in: Slider().h, defined as type slidercontroller. END IF IF ISFALSE udnr THEN udnr = TaskEX(%Test_Piperola).UpDownNumbers(0) UDctrl(udnr).cptr = CODEPTR(Piperola_Test_UD) UDctrl(udnr).value = %False END IF IF ISFALSE slnr THEN slnr = TaskEX(%Test_Piperola).SliderNumbers(1) ' wind Slider(slnr).value = %MM_Piperola_Motor SendMessage Slider(Slnr).h, %TBM_SETPOS,%True, Slider(Slnr).value END IF Task(%Test_Piperola).tog = %True END IF IF Slider(slnr).value <> Piperola.ctrl(7) THEN Piperola.ctrl(7) = Slider(slnr).value ' 0-127 IF ISFALSE Piperola.ctrl(65) THEN Piperola.ctrl(65) = %True ' motor switch Controller Piperola.channel, 65, %True END IF Controller Piperola.channel, 7, piperola.ctrl(7) ' motor speed END IF SELECT CASE Udctrl(udnr).value CASE %False IF Piperola.ctrl(10) <> 5 THEN ' set controller to sfz overpressure mode using the velo byte value Controller Piperola.channel, 10, 5 ' 0101 Piperola.ctrl(10) = 5 END IF CASE %True IF Piperola.ctrl(10) <> 6 THEN ' set controller to underpressure mode using the velo byte value Controller Piperola.channel, 10, 6 ' 0110 Piperola.ctrl(10) = 6 END IF END SELECT IF toets% THEN ' tremulant solenoid ON - gives sfz accent on note-on mPlay Piperola.channel,i%, Slider(slnr+1).value toets% = %False ELSE NoteOff Piperola.channel, i% toets% = %True INCR i% IF i% > piperola.hightes THEN i% = piperola.lowtes END IF Task(%Test_Piperola).freq = Slider(slnr-1).value / 2! IF Task(%Test_Piperola).freq < 0.5 THEN Task(%Test_Piperola).freq = 0.5 END SUB SUB Piperola_Test_UD () ' callback on parameter UpDowns. LOCAL udnr AS DWORD udnr = TaskEX(%Test_Piperola).UpdownNumbers(0) IF UDctrl(udnr).value <= %False THEN UDctrl(udnr).value = %False SetDlgItemText Task(%Test_Piperola).hparam, %GMT_TEXT0_ID + 16, "sf+" ELSE UDctrl(udnr).value = %True SetDlgItemText Task(%Test_Piperola).hparam, %GMT_TEXT0_ID + 16, "sf-" END IF END SUB SUB Tremulant_Test () ' test for piperola tremulant circuit - now uses controller. ' ctrl 10 must be set to 16, ctrl 11 controls the tremulant frequency. ' rewritten 14.02.2005 STATIC slnr AS BYTE IF ISFALSE Task(%Test_Tremulant).tog THEN Task(%Test_tremulant).tog = %True DIM TaskParamLabels(0) AS ASCIIZ * 8 TaskParamLabels(0) = "Trem" IF ISFALSE Task(%Test_Tremulant).hParam THEN MakeTaskParameterDialog %Test_Tremulant,1,Slider(),0,UDctrl(),TaskParamLabels() END IF slnr = TaskEX(%Test_Tremulant).SliderNumbers(0) Slider(slnr).value = 40 ' 4Hz SendMessage Slider(Slnr).h, %TBM_SETPOS,%True, Slider(Slnr).value END IF IF Piperola.ctrl(10) <> 16 THEN Controller Piperola.channel, 10, 16 Piperola.ctrl(10) = 16 END IF IF Slider(slnr).value <> piperola.ctrl(11) THEN Controller Piperola.channel, 11, Slider(slnr).value Piperola.ctrl(11) = Slider(slnr).value END IF Task(%Test_Tremulant).freq = 8 END SUB SUB Piperola_Percussie () ' test for piperola Percussion ' new version with velo, 14.02.2005 STATIC i% STATIC slnr AS BYTE IF ISFALSE Task(%Test_Piperola_Perc).tog THEN Task(%Test_Piperola_Perc).tog = %True i% = 120 DIM TaskParamLabels(1) AS ASCIIZ * 8 TaskParamLabels(0) = "Tempo" TaskParamlabels(1) = "Velo" IF ISFALSE Task(%Test_Piperola_Perc).hParam THEN MakeTaskParameterDialog %Test_Piperola_Perc,2,Slider(),0,UDctrl(),TaskParamLabels() END IF IF slnr = %False THEN slnr = TaskEX(%Test_Piperola_Perc).SliderNumbers(0) Slider(slnr+1).value = 64 SendMessage Slider(Slnr).h, %TBM_SETPOS,%True, Slider(Slnr+1).value END IF END IF mPlay Piperola.channel, i%, Slider(slnr+1).value INCR i% IF i% > 127 THEN i% = 120 Task(%Test_Piperola_Perc).freq = 32! * (Slider(slnr).value) / 128! IF Task(%Test_Piperola_Perc).freq < 0.5 THEN Task(%Test_Piperola_Perc).freq = 0.5 END SUB SUB piperola_Tune () ' procedure to facilitate tuning STATIC slnr AS DWORD STATIC udnr AS DWORD STATIC value AS DWORD STATIC motor AS DWORD IF ISFALSE Task(%Piperola_Tune).tog THEN DIM TaskParamLabels(1) AS ASCIIZ * 8 TaskParamLabels(0) = "Wind" TaskParamLabels(1) = "Note" ' up-down IF ISFALSE Task(%Piperola_Tune).hParam THEN MakeTaskParameterDialog %Piperola_Tune,1,Slider(),1,UDctrl(),TaskParamLabels() END IF IF slnr = %False THEN slnr = TaskEX(%Piperola_Tune).SliderNumbers(0) Slider(slnr).value = %MM_Piperola_Motor SendMessage Slider(Slnr).h, %TBM_SETPOS,%True, Slider(Slnr).value END IF IF udnr = %False THEN udnr = TaskEX(%Piperola_Tune).UpDownNumbers(0) UDctrl(udnr).cptr = CODEPTR(Piperola_Tune_UD) UDctrl(udnr).value = Piperola.Lowtes END IF Task(%Piperola_Tune).tog = %True END IF IF ISFALSE Piperola.ctrl(65) THEN Controller Piperola.channel, 65, %True Piperola.ctrl(65) = %True END IF IF Piperola.ctrl(10) THEN IF Task(%Test_Tremulant).tog THEN ' tremulant can be tested here. IF Piperola.ctrl(10) <> 16 THEN Piperola.ctrl(10) = 16 Controller Piperola.channel, 10, 16 END IF ELSE Controller Piperola.channel, 10 ,%False ' no sfz !!! Piperola.ctrl(10) = %False END IF END IF IF Slider(slnr).value <> piperola.ctrl(7) THEN piperola.ctrl(7) = Slider(slnr).value ' 0-127 controller Piperola.channel, 7, Piperola.ctrl(7) END IF END SUB SUB Piperola_Tune_UD () ' callback on parameter UpDowns. LOCAL note AS BYTE STATIC oldnote AS BYTE LOCAL udnr AS DWORD udnr = TaskEX(%Piperola_Tune).UpdownNumbers(0) note = UDCtrl(udnr).value SetDlgItemText Task(%Piperola_Tune).hparam, %GMT_TEXT0_ID + 16, "N=" & STR$(note) IF (note >= Piperola.Lowtes) AND (note <= Piperola.Hightes) THEN IF oldnote THEN NoteOff Piperola.channel, oldnote oldnote = %False END IF mPlay Piperola.channel, note, 64 oldnote = note ELSE IF note < Piperola.Lowtes THEN UDctrl(udnr).value = Piperola.lowtes -1 END IF IF note > Piperola.Hightes THEN UDctrl(udnr).value = Piperola.hightes + 1 END IF END IF END SUB SUB Piperola_AfterTouch () ' test for piperola PWM motor controll and tremulant circuit STATIC i% STATIC toets% STATIC slnr AS BYTE STATIC udnr AS BYTE IF ISFALSE Task(%Test_Pip_Aft).tog THEN LOCAL testid%, testhandle AS LONG Task(%Test_Pip_Aft).tog = %True toets% = %True i% = piperola.lowtes DIM TaskParamLabels(0 TO 3) AS ASCIIZ * 8 TaskParamLabels(0) = "Tempo" ' tempo of note scale TaskParamLabels(1) = "Wind" ' wind pressure TaskParamLabels(2) = "sfz" ' here we use channel pressure for sfz control TaskParamlabels(3) = "+/-" ' overpressure/underpressure control IF ISFALSE Task(%Test_Pip_Aft).hParam THEN MakeTaskParameterDialog %Test_Pip_Aft,3,Slider(),1,UDctrl(),TaskParamLabels() END IF IF ISFALSE udnr THEN udnr = TaskEX(%Test_Pip_Aft).UpDownNumbers(0) UDctrl(udnr).cptr = CODEPTR(Piperola_Aftertouch_UD) UDctrl(udnr).value = %False END IF IF slnr = %False THEN slnr = TaskEX(%Test_Pip_Aft).SliderNumbers(1) ' wind Slider(slnr).value = %MM_Piperola_Motor SendMessage Slider(Slnr).h, %TBM_SETPOS,%True, Slider(Slnr).value END IF END IF IF Slider(slnr).value <> Piperola.ctrl(7) THEN Piperola.ctrl(7) = Slider(slnr).value ' 0-127 Controller Piperola.channel, 7, piperola.ctrl(7) IF ISFALSE Piperola.ctrl(65) THEN Piperola.ctrl(65) = %True Controller Piperola.channel, 65, %True END IF END IF SELECT CASE Udctrl(udnr).value CASE %False IF Piperola.ctrl(10) <> 9 THEN ' set controller to sfz overpressure mode using the channel pressure value Controller Piperola.channel, 10, 9 Piperola.ctrl(10) = 9 END IF CASE %True IF Piperola.ctrl(10) <> 10 THEN ' set controller to underpressure mode using the channel pressure value Controller Piperola.channel, 10, 10 Piperola.ctrl(10) = 10 END IF END SELECT IF toets% THEN ' tremulant solenoid ON - gives sfz accent on note-on mPlay Piperola.channel,i%, 64 Aftertouch Piperola.channel, Slider(slnr+1).value ' does not have to come synchronous with notes. toets% = %False ELSE NoteOff Piperola.channel, i% toets% = %True INCR i% IF i% > piperola.hightes THEN i% = piperola.lowtes END IF Task(%Test_Pip_Aft).freq = 32! * (Slider(slnr-1).value) / 128! IF Task(%Test_Pip_Aft).freq < 0.5 THEN Task(%Test_Pip_Aft).freq = 0.5 END SUB SUB Piperola_Aftertouch_UD () ' 15.02.2005 LOCAL udnr AS DWORD udnr = TaskEX(%Test_Pip_aft).UpdownNumbers(0) IF UDctrl(udnr).value <= %False THEN UDctrl(udnr).value = %False SetDlgItemText Task(%Test_Pip_Aft).hparam, %GMT_TEXT0_ID + 16, "sf+" ELSE UDctrl(udnr).value = %True SetDlgItemText Task(%Test_Pip_Aft).hparam, %GMT_TEXT0_ID + 16, "sf-" END IF END SUB SUB P118 () ' %Pip118 - 29.12.2008 STATIC cnt AS LONG IF ISFALSE cnt MOD 2 THEN mPlay Piperola.channel, 118, 127 ELSE NoteOff Piperola.channel, 118 END IF INCR cnt END SUB SUB P119 () ' %Pip119 - 29.12.2008 STATIC cnt AS LONG IF ISFALSE cnt MOD 2 THEN mPlay Piperola.channel, 119, 127 ELSE NoteOff Piperola.channel, 119 END IF INCR cnt END SUB SUB Piperola_Lights () ' test for piperola lights STATIC i% STATIC slnr AS BYTE IF ISFALSE Task(%Test_Pip_Light).tog THEN Task(%Test_Pip_Light).tog = %True i% = 0 DIM TaskParamLabels(0) AS ASCIIZ * 8 TaskParamLabels(0) = "Tempo" IF ISFALSE Task(%Test_Pip_Light).hParam THEN MakeTaskParameterDialog %Test_Pip_Light,1,Slider(),0,UDctrl(),TaskParamLabels() END IF IF slnr = %False THEN slnr = TaskEX(%Test_Pip_Light).SliderNumbers(0) END IF END IF IF ISFALSE i% MOD 2 THEN mPlay Piperola.channel, 118, 64 NoteOff Piperola.channel, 119 ELSE mPlay Piperola.channel, 119, 64 NoteOff Piperola.channel, 118 END IF INCR i% IF i% > 2 THEN i% = 0 END IF Task(%Test_Pip_Light).freq = 32! * (Slider(slnr).value) / 128! IF Task(%Test_Pip_Light).freq < 0.5 THEN Task(%Test_Pip_Light).freq = 0.5 END SUB SUB Piperola_Lights_Off () MM_PIperola_Off %MM_Lights END SUB SUB Piper_controlroom LOCAL i AS LONG LOCAL x AS LONG IF ISFALSE hwCtrlPiper THEN DIALOG NEW 0, "Piperola Control",1,1 ,600, 60, %WS_CAPTION OR %WS_POPUP OR %WS_SYSMENU TO hwCtrlPiper x = 5 FOR i = Piperola.lowtes TO Piperola.HighTes SELECT CASE (i MOD 12) CASE 0 CONTROL ADD CHECKBOX, hwCtrlPiper, i, "C", x, 24, 18, 12, %BS_PUSHLIKE x = x + 10 CASE 1 CONTROL ADD CHECKBOX, hwCtrlPiper, i, "C#", x, 12, 18, 12, %BS_PUSHLIKE x = x + 10 CASE 2 CONTROL ADD CHECKBOX, hwCtrlPiper, i, "D", x, 24, 18, 12, %BS_PUSHLIKE x = x + 10 CASE 3 CONTROL ADD CHECKBOX, hwCtrlPiper, i, "D#", x, 12, 18, 12, %BS_PUSHLIKE x = x + 10 CASE 4 CONTROL ADD CHECKBOX, hwCtrlPiper, i, "E", x, 24, 18, 12, %BS_PUSHLIKE x = x + 20 CASE 5 CONTROL ADD CHECKBOX, hwCtrlPiper, i, "F", x, 24, 18, 12, %BS_PUSHLIKE x = x + 10 CASE 6 CONTROL ADD CHECKBOX, hwCtrlPiper, i, "F#", x, 12, 18, 12, %BS_PUSHLIKE x = x + 10 CASE 7 CONTROL ADD CHECKBOX, hwCtrlPiper, i, "G", x, 24, 18, 12, %BS_PUSHLIKE x = x + 10 CASE 8 CONTROL ADD CHECKBOX, hwCtrlPiper, i, "G#", x, 12, 18, 12, %BS_PUSHLIKE x = x + 10 CASE 9 CONTROL ADD CHECKBOX, hwCtrlPiper, i, "A", x, 24, 18, 12, %BS_PUSHLIKE x = x + 10 CASE 10 CONTROL ADD CHECKBOX, hwCtrlPiper, i, "Bb", x, 12, 18, 12, %BS_PUSHLIKE x = x + 10 CASE 11 CONTROL ADD CHECKBOX, hwCtrlPiper, i, "B", x, 24, 18, 12, %BS_PUSHLIKE x = x + 20 END SELECT NEXT CONTROL ADD LABEL, hwCtrlPiper, 500, "Wind:", 5, 45, 30, 12 CONTROL ADD "msctls_trackbar32", hwCtrlPiper, 501, _ "Wind", 36, 45, 135, 12, %WS_CHILD OR %WS_VISIBLE OR _ %TBS_HORZ OR %TBS_BOTTOM CONTROL ADD LABEL, hwCtrlPiper, 503, "?", 174, 45, 30, 12 CONTROL ADD BUTTON, hwCtrlPiper, 600, "All Off", 206, 45, 30, 12 DIALOG SHOW MODELESS hwCtrlPiper CALL CB_Piper_Controlroom ELSE DIALOG END hwCtrlPiper hwCtrlPiper = 0 END IF END SUB CALLBACK FUNCTION CB_Piper_Controlroom LOCAL wind AS BYTE LOCAL i AS LONG LOCAL note AS BYTE SELECT CASE CBMSG CASE %WM_COMMAND SELECT CASE CBCTL CASE Piperola.Lowtes TO Piperola.hightes 'checkboxes CONTROL GET CHECK CBHNDL, CBCTL TO i note = CBCTL mPlay Piperola.channel, note, BYVAL i CASE 600 FOR i = piperola.lowtes TO piperola.hightes CONTROL SET CHECK CBHNDL, i, 0 DIALOG DOEVENTS NEXT Controller Piperola.channel, 123, %False CONTROL HANDLE CBHNDL, 501 TO i SendMessage i, %TBM_SETPOS, %true, 0 MM_Piperola_Off %MM_Motor 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 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) Piperola.ctrl(7) = wind MM_Piperola_On %MM_Motor CASE %WM_CLOSE, %WM_QUIT hwCtrlPiper = 0 FOR i = piperola.lowtes TO piperola.hightes DIALOG DOEVENTS NEXT Controller Piperola.channel, 123, %False MM_Piperola_Off %MM_Motor END SELECT END FUNCTION SUB P120 () ' test for piperola Percussion - note 120 STATIC slnr AS BYTE IF ISFALSE Task(%Pipp1).tog THEN Task(%Pipp1).tog = %True DIM TaskParamLabels(1) AS ASCIIZ * 8 TaskParamLabels(0) = "Tempo" TaskParamlabels(1) = "Velo" IF ISFALSE Task(%Pipp1).hParam THEN MakeTaskParameterDialog %Pipp1,2,Slider(),0,UDctrl(),TaskParamLabels() END IF IF slnr = %False THEN slnr = TaskEX(%Pipp1).SliderNumbers(0) Slider(slnr+1).value = 1 SendMessage Slider(Slnr).h, %TBM_SETPOS,%True, Slider(Slnr+1).value END IF END IF mPlay Piperola.channel, 120, Slider(slnr+1).value Task(%Pipp1).freq = Slider(slnr).value / 4! IF Task(%Pipp1).freq < 0.5 THEN Task(%Pipp1).freq = 0.5 END SUB SUB P121 () ' test for piperola Percussion - note 121 STATIC slnr AS BYTE IF ISFALSE Task(%Pipp2).tog THEN Task(%Pipp2).tog = %True DIM TaskParamLabels(1) AS ASCIIZ * 8 TaskParamLabels(0) = "Tempo" TaskParamlabels(1) = "Velo" IF ISFALSE Task(%Pipp2).hParam THEN MakeTaskParameterDialog %Pipp2,2,Slider(),0,UDctrl(),TaskParamLabels() END IF IF slnr = %False THEN slnr = TaskEX(%Pipp2).SliderNumbers(0) Slider(slnr+1).value = 1 SendMessage Slider(Slnr).h, %TBM_SETPOS,%True, Slider(Slnr+1).value END IF END IF mPlay Piperola.channel, 121, Slider(slnr+1).value Task(%Pipp2).freq = Slider(slnr).value / 4! IF Task(%Pipp2).freq < 0.5 THEN Task(%Pipp2).freq = 0.5 END SUB SUB P122 () ' test for piperola Percussion - note 122 STATIC slnr AS BYTE IF ISFALSE Task(%Pipp3).tog THEN Task(%Pipp3).tog = %True DIM TaskParamLabels(1) AS ASCIIZ * 8 TaskParamLabels(0) = "Tempo" TaskParamlabels(1) = "Velo" IF ISFALSE Task(%Pipp3).hParam THEN MakeTaskParameterDialog %Pipp3,2,Slider(),0,UDctrl(),TaskParamLabels() END IF IF slnr = %False THEN slnr = TaskEX(%Pipp3).SliderNumbers(0) Slider(slnr+1).value = 1 SendMessage Slider(Slnr).h, %TBM_SETPOS,%True, Slider(Slnr+1).value END IF END IF mPlay Piperola.channel, 122, Slider(slnr+1).value Task(%Pipp3).freq = Slider(slnr).value / 4! IF Task(%Pipp3).freq < 0.5 THEN Task(%Pipp3).freq = 0.5 END SUB SUB P123 () ' test for piperola Percussion - note 123 STATIC slnr AS BYTE IF ISFALSE Task(%Pipp4).tog THEN Task(%Pipp4).tog = %True DIM TaskParamLabels(1) AS ASCIIZ * 8 TaskParamLabels(0) = "Tempo" TaskParamlabels(1) = "Velo" IF ISFALSE Task(%Pipp4).hParam THEN MakeTaskParameterDialog %Pipp4,2,Slider(),0,UDctrl(),TaskParamLabels() END IF IF slnr = %False THEN slnr = TaskEX(%Pipp4).SliderNumbers(0) Slider(slnr+1).value = 1 SendMessage Slider(Slnr).h, %TBM_SETPOS,%True, Slider(Slnr+1).value END IF END IF mPlay Piperola.channel, 123, Slider(slnr+1).value Task(%Pipp4).freq = Slider(slnr).value / 4! IF Task(%Pipp4).freq < 0.5 THEN Task(%Pipp4).freq = 0.5 END SUB SUB P124 () ' test for piperola Percussion - note 124 STATIC slnr AS BYTE IF ISFALSE Task(%Pipp5).tog THEN Task(%Pipp5).tog = %True DIM TaskParamLabels(1) AS ASCIIZ * 8 TaskParamLabels(0) = "Tempo" TaskParamlabels(1) = "Velo" IF ISFALSE Task(%Pipp5).hParam THEN MakeTaskParameterDialog %Pipp5,2,Slider(),0,UDctrl(),TaskParamLabels() END IF IF slnr = %False THEN slnr = TaskEX(%Pipp5).SliderNumbers(0) Slider(slnr+1).value = 1 SendMessage Slider(Slnr).h, %TBM_SETPOS,%True, Slider(Slnr+1).value END IF END IF mPlay Piperola.channel, 124, Slider(slnr+1).value Task(%Pipp5).freq = Slider(slnr).value / 4! IF Task(%Pipp5).freq < 0.5 THEN Task(%Pipp5).freq = 0.5 END SUB SUB P125 () ' test for piperola Percussion - note 125 STATIC slnr AS BYTE IF ISFALSE Task(%Pipp6).tog THEN Task(%Pipp6).tog = %True DIM TaskParamLabels(1) AS ASCIIZ * 8 TaskParamLabels(0) = "Tempo" TaskParamlabels(1) = "Velo" IF ISFALSE Task(%Pipp6).hParam THEN MakeTaskParameterDialog %Pipp6,2,Slider(),0,UDctrl(),TaskParamLabels() END IF IF slnr = %False THEN slnr = TaskEX(%Pipp6).SliderNumbers(0) Slider(slnr+1).value = 1 SendMessage Slider(Slnr).h, %TBM_SETPOS,%True, Slider(Slnr+1).value END IF END IF mPlay Piperola.channel, 125, Slider(slnr+1).value Task(%Pipp6).freq = Slider(slnr).value / 4! IF Task(%Pipp6).freq < 0.5 THEN Task(%Pipp6).freq = 0.5 END SUB SUB P126 () ' test for piperola Percussion - note 126 STATIC slnr AS BYTE IF ISFALSE Task(%Pipp7).tog THEN Task(%Pipp7).tog = %True DIM TaskParamLabels(1) AS ASCIIZ * 8 TaskParamLabels(0) = "Tempo" TaskParamlabels(1) = "Velo" IF ISFALSE Task(%Pipp7).hParam THEN MakeTaskParameterDialog %Pipp7,2,Slider(),0,UDctrl(),TaskParamLabels() END IF IF slnr = %False THEN slnr = TaskEX(%Pipp7).SliderNumbers(0) Slider(slnr+1).value = 1 SendMessage Slider(Slnr).h, %TBM_SETPOS,%True, Slider(Slnr+1).value END IF END IF mPlay Piperola.channel, 126, Slider(slnr+1).value Task(%Pipp7).freq = Slider(slnr).value / 4! IF Task(%Pipp7).freq < 0.5 THEN Task(%Pipp7).freq = 0.5 END SUB SUB P127 () ' test for piperola Percussion - note 127 STATIC slnr AS BYTE IF ISFALSE Task(%Pipp8).tog THEN Task(%Pipp8).tog = %True DIM TaskParamLabels(1) AS ASCIIZ * 8 TaskParamLabels(0) = "Tempo" TaskParamlabels(1) = "Velo" IF ISFALSE Task(%Pipp8).hParam THEN MakeTaskParameterDialog %Pipp8,2,Slider(),0,UDctrl(),TaskParamLabels() END IF IF slnr = %False THEN slnr = TaskEX(%Pipp8).SliderNumbers(0) Slider(slnr+1).value = 1 SendMessage Slider(Slnr).h, %TBM_SETPOS,%True, Slider(Slnr+1).value END IF END IF mPlay Piperola.channel, 127, Slider(slnr+1).value Task(%Pipp8).freq = Slider(slnr).value / 4! IF Task(%Pipp8).freq < 0.5 THEN Task(%Pipp8).freq = 0.5 END SUB '[EOF]