' *************************************************************************** ' * * ' *************************************************************************** '31.07.2000 tested with midi simulation; works '19.08.2000 listen procedure done and debugged. see 'about troms.txt' for docu on exact implementation... '31.08.2000 wavesimulation done !! bug in stochrom !! '18.09.2000: AfroTroms added GWR '21.09.2000: listens to server '12.10.2000: run through gwr ' Now crashes sometimes on wave simulation with ... '02.05.2001: new piece 'betatroms' added by KL '05.08.2001: bitcount function moved to g_indep.dll ' start coding for NiDAQ DIO support ' complete module restructured and many procs. placed in DLL ' %trm constant removed in order to make tasks relocatable and code more readable... '07.02.2002: support for USB port added '10.02.2002: code changed: now troms type resides in g_n*h.dll. Here we use only the pointer to it! '06.04.2004: Revision of Troms hardware started. Should become midi controller robot... '10.04.2004: Previous code module renamed troms_2000.inc and bi. ' Troms support removed from g_n*h.dll '************************************************************************************************** ' new test code for troms: '12.04.2004: resource code adapted, constants modified. ' Tromstype will be removed. '15.04.2004: some bugs removed. '06.11.2004: adapted to g_mm.inc '07.11.2004: pre 2004 kode removed. If kl needs it: we have a backup op Miel. '10.04.2006: code for added. '14.04.2006: snar volledig afgewerkt. '25.10.2006: New firmware for Troms. Sys-ex now implemented. ' roffel-tasks added. '20.04.2014: Test code added for made for Aphex Twin.(Richard James) %Snar2_rof = 40 %Snar2_rims = 41 %Snar2_lites = 42 %Snar2_snares = 43 %Snar2_shuffle = 44 %Snar2_Minvel = 45 '---------- FUNCTION InitTroms () AS LONG LOCAL retval AS LONG ' only for : ' is not a member of the robot orchestra DIM Snar2 AS GLOBAL musician ' - not done in g_mm.inc GetInstrumentParams Snar2, %IDM_Snar2 ' in g_file.dll retval = SetRobotport (Snar2, Inifilename, hMidiO()) Task(%Troms_Test).naam = "" Task(%Troms_Test).cptr = CODEPTR(Troms_Test) Task(%Troms_Test).freq = 4 Task(%Troms_Test).flags = %False Task(%Troms_Lights).naam = "TromLite" Task(%Troms_Lights).cptr = CODEPTR(Troms_Lights) Task(%Troms_Lights).freq = 3 Task(%Troms_Lights).flags = %False TaskEX(%Troms_Lights).StopCptr = CODEPTR(Troms_Lights_Stop) Task(%Troms_Damper).naam = "TromDamp" Task(%Troms_Damper).cptr = CODEPTR(Troms_Damper) Task(%Troms_Damper).freq = 1 Task(%Troms_Damper).flags = %False TaskEX(%Troms_Damper).StopCptr = CODEPTR(Troms_Damper_Stop) Task(%troms_afro).naam = "AfroTrom" ' 18.09.2000 gwr - x-lat 12.04.2004 Task(%troms_afro).freq = 4 Task(%troms_afro).cPtr = CODEPTR(AfroTroms) TaskEX(%troms_afro).StopCptr = CODEPTR(MM_Troms_Off) Task(%TromsETroms).naam = "E-Troms" Task(%TromsETroms).freq = 8 Task(%TromsETroms).cptr = CODEPTR(TromsETroms) TaskEX(%TromsEtroms).StopCptr = CODEPTR(MM_Troms_Off) ' Task(%snar_Test).naam = "roffel" Task(%snar_Test).cptr = CODEPTR(Snar_Test) ' 32 Task(%snar_Test).freq = 4 Task(%snar_Test).flags = %False Task(%snar_rims).naam = "rimshot" Task(%snar_rims).cptr = CODEPTR(Snar_rims) ' 33 Task(%snar_rims).freq = 4 Task(%snar_rims).flags = %False Task(%snar_lites).naam = "lites" Task(%snar_lites).cptr = CODEPTR(Snar_lites) ' 34 Task(%snar_lites).freq = 4 Task(%snar_lites).flags = %False Task(%snar_snares).naam = "snares" Task(%snar_snares).cptr = CODEPTR(Snar_snares) ' 35 Task(%snar_snares).freq = 2 Task(%snar_snares).flags = %False ' Task(%snar2_rof).naam = "rof_2" Task(%snar2_rof).cptr = CODEPTR(Snar2_rof) ' 40 Task(%snar2_rof).freq = 4 Task(%snar2_rof).flags = %False Task(%snar2_rims).naam = "rim_2" Task(%snar2_rims).cptr = CODEPTR(Snar2_rims) ' 41 Task(%snar2_rims).freq = 4 Task(%snar2_rims).flags = %False Task(%snar2_lites).naam = "lites2" Task(%snar2_lites).cptr = CODEPTR(Snar2_lites) ' 42 Task(%snar2_lites).freq = 4 Task(%snar2_lites).flags = %False Task(%snar2_snares).naam = "snares2" Task(%snar2_snares).cptr = CODEPTR(Snar2_snares) ' 43 Task(%snar2_snares).freq = 2 Task(%snar2_snares).flags = %False Task(%snar2_shuffle).naam = "shuffle2" Task(%snar2_shuffle).cptr = CODEPTR(Snar2_shuffle) ' 44 Task(%snar2_shuffle).freq = 2 Task(%snar2_shuffle).flags = %False Task(%snar2_minvel).naam = "MinVel2" Task(%snar2_minvel).cptr = CODEPTR(Snar2_minvel) ' 45 Task(%snar2_minvel).freq = 20 Task(%snar2_minvel).flags = %False ' only for Task(%MM_SysxTask).naam = "SendSysx" Task(%MM_SysxTask).freq = .33 Task(%MM_SysxTask).cptr = CODEPTR(MM_Sysx) 'in m_robots.inc ' roffelprocs voor troms Task(%troms_bas).naam = "bass" Task(%troms_bas).cptr = CODEPTR(Troms_bas) Task(%troms_bas).freq = 2 Task(%troms_bas).flags = %False Task(%troms_ten).naam = "tenor" Task(%troms_ten).cptr = CODEPTR(Troms_ten) Task(%troms_ten).freq = 2 Task(%troms_ten).flags = %False Task(%troms_med).naam = "middrum" Task(%troms_med).cptr = CODEPTR(Troms_med) Task(%troms_med).freq = 2 Task(%troms_med).flags = %False Task(%troms_LBongo).naam = "LRedBong" Task(%troms_LBongo).cptr = CODEPTR(Troms_LBongo) Task(%troms_LBongo).freq = 2 Task(%troms_LBongo).flags = %False Task(%troms_HBongo).naam = "HRedBong" Task(%troms_HBongo).cptr = CODEPTR(Troms_HBongo) Task(%troms_HBongo).freq = 2 Task(%troms_HBongo).flags = %False Task(%troms_LMiniBongo).naam = "L-LpBong" Task(%troms_LMiniBongo).cptr = CODEPTR(Troms_LMiniBongo) Task(%troms_LMiniBongo).freq = 2 Task(%troms_LMiniBongo).flags = %False Task(%troms_HMiniBongo).naam = "H-LpBong" Task(%troms_HMiniBongo).cptr = CODEPTR(Troms_HMiniBongo) Task(%troms_HMiniBongo).freq = 2 Task(%troms_HMiniBongo).flags = %False Task(%troms_Cymbal).naam = "Cymbal" Task(%troms_Cymbal).cptr = CODEPTR(Troms_Cymbal) Task(%troms_Cymbal).freq = 2 Task(%troms_Cymbal).flags = %False Task(%troms_soft).naam = "SoftBas" Task(%troms_soft).cptr = CODEPTR(Troms_soft) Task(%troms_soft).freq = 2 Task(%troms_soft).flags = %False Task(%MM_SysxTask).naam = "SendSysx" Task(%MM_SysxTask).freq = .33 Task(%MM_SysxTask).cptr = CODEPTR(MM_Sysx) 'in m_robots.inc Warning "Selecting program change 122 for snar!" ProgChange Snar.Channel, 122 SetDlgItemText gh.Cockpit, %GMT_TITLE , "" SetDlgItemText gh.Cockpit, %GMT_AUTHOR , $gwr FUNCTION = %True END FUNCTION SUB Troms_Test () STATIC i AS DWORD STATIC slnr AS DWORD IF ISFALSE Task(%Troms_Test).tog THEN DIM TaskParamLabels(0 TO 3) AS ASCIIZ * 8 TaskParamLabels(0) = "Tempo" TaskParamLabels(1) = "Level" TaskParamLabels(2) = "LowLim" TaskParamLabels(3) = "HiLim" IF ISFALSE Task(%Troms_Test).hParam THEN slnr = %False MakeTaskParameterDialog %Troms_Test,2,Slider(),2,UDctrl(),TaskParamLabels() END IF IF slnr = %False THEN slnr = TaskEX(%Troms_Test).SliderNumbers(0) UDctrl(TaskEX(%Troms_Test).UpdownNumbers(0)).cptr = CODEPTR(Troms_LoLim_UD1) ' lowest note UDctrl(TaskEX(%Troms_Test).UpdownNumbers(1)).cptr = CODEPTR(Troms_HiLim_UD2) ' highest note UDctrl(TaskEX(%Troms_Test).UpDownNumbers(0)).value = 23 '18 ' 23 = soft beater on bassdrum ' 24-47 as before ' 48 = cymbal ' 49 = not used yet UDctrl(TaskEX(%Troms_Test).UpDownNumbers(1)).value = 49 i = UDctrl(TaskEX(%Troms_Test).UpDownNumbers(0)).value '55 Task(%Troms_Test).freq = 2 Slider(slnr).value = Task(%Troms_Test).freq SendMessage Slider(Slnr).h, %TBM_SETPOS,%True, Slider(Slnr).value SendMessage Slider(Slnr+1).h, %TBM_SETPOS,%True, 4 ' low level on init. END IF i = 23 Task(%Troms_Test).tog = %True END IF mPlay Troms.channel, i, Slider(slnr+1).value ' normal notes INCR i IF i > UDctrl(TaskEX(%Troms_Test).UpDownNumbers(1)).value THEN i = UDctrl(TaskEX(%Troms_Test).UpDownNumbers(0)).value Task(%Troms_Test).freq = 32! * (Slider(slnr).value) / 128! END SUB SUB Troms_LoLim_UD1 () ' controls the low limit of the note scale to be played. LOCAL noot AS BYTE LOCAL udnr AS DWORD udnr = TaskEX(%Troms_Test).UpDownNumbers(0) noot = UDCtrl(udnr).value IF noot < 23 THEN UDctrl(udnr).value = 23 : noot = 23 IF noot > UDctrl(udnr+1).value THEN UDctrl(udnr).value = UDctrl(udnr+1).value : noot = UDctrl(udnr).value SetDlgItemText Task(%Troms_Test).hparam, %GMT_TEXT0_ID + 16, "Lo=" & STR$(noot) END SUB SUB Troms_HiLim_UD2 () ' controls the high limit of the note scale to be played. LOCAL noot AS BYTE LOCAL udnr AS DWORD udnr = TaskEX(%Troms_Test).UpDownNumbers(1) noot = UDCtrl(udnr).value IF noot < UDctrl(udnr-1).value THEN UDctrl(udnr).value = UDctrl(udnr-1).value : noot = UDctrl(udnr).value IF noot > 49 THEN UDctrl(udnr).value = 49 : noot = 49 SetDlgItemText Task(%Troms_Test).hparam, %GMT_TEXT0_ID + 17, "Hi=" & STR$(noot) END SUB SUB Troms_Lights () ' notes 18, 19,20 18 = basslight, 19 = tenorlight, 20 = snaredrum light ' ON/OFF only, no velocity STATIC i AS LONG IF ISFALSE Task(%Troms_lights).tog THEN i = 18 Task(%Troms_lights).tog = %True END IF mPlay Troms.channel, i, %False INCR i IF i > 20 THEN i = 18 mPlay Troms.channel, i, 64 END SUB SUB Troms_Lights_Stop () mPlay Troms.channel, 18, %False mPlay Troms.channel, 19, %False mPlay Troms.channel, 20, %False END SUB SUB Troms_Damper () ' revised 25.10.2006 STATIC i AS LONG STATIC slnr AS LONG STATIC damp AS LONG IF ISFALSE Task(%Troms_Damper).tog THEN DIM TaskParamLabels(0 TO 2) AS ASCIIZ * 8 TaskParamLabels(0) = "Tempo" ' if 0, we have a on/off with the UD controller TaskParamLabels(1) = "Level" ' terugslagkracht TaskParamLabels(2) = "On/Off" IF ISFALSE Task(%Troms_Damper).hParam THEN slnr = %False MakeTaskParameterDialog %Troms_Damper,2,Slider(),1,UDctrl(),TaskParamLabels() END IF IF slnr = %False THEN slnr = TaskEX(%Troms_Damper).SliderNumbers(0) UDctrl(TaskEX(%Troms_Damper).UpdownNumbers(0)).cptr = CODEPTR(Troms_Damper_UD1) ' ON/OFF switch UDctrl(TaskEX(%Troms_Damper).UpDownNumbers(0)).value = 0 ' damper off SetDlgItemText Task(%Troms_Damper).hparam, %GMT_TEXT0_ID + 16, "Off" END IF Task(%Troms_Damper).tog = %True END IF IF ISFALSE UDctrl(TaskEX(%Troms_Damper).UpDownNumbers(0)).value THEN ' damper off IF damp THEN 'Noteoff Troms.channel, 21 'mPlay Troms.channel, 22, Slider(slnr+1).value ' pulse note 22 ' new firmware 25.10.2006: Release Troms.channel, 21, Slider(slnr+1).value damp = %False END IF ELSE ' damper on IF ISFALSE damp THEN mPlay Troms.channel, 21, 127 damp = %True END IF END IF IF Slider(slnr).value > %False THEN IF ISFALSE i THEN Release Troms.channel, 21, slider(slnr+1).value 'mPlay Troms.channel, 21, %False ' damper off, should cause a pulse on note 22 'mPlay Troms.channel, 22, Slider(slnr+1).value ' pulse note 22 ELSE mPlay Troms.channel, 21, 127 ' damper ON END IF INCR i i = i AND 1 Task(%Troms_Damper).freq = Slider(slnr).value / 12 ELSE ' niks Task(%Troms_Damper).freq = 10 END IF END SUB SUB Troms_Damper_UD1 () ' on off switch for damper LOCAL n AS BYTE LOCAL udnr AS DWORD udnr = TaskEX(%Troms_Damper).UpDownNumbers(0) n = UDCtrl(udnr).value IF n < 0 THEN UDctrl(udnr).value = 0 : n = 0 IF n > 0 THEN UDctrl(udnr).value = 1 : n = 1 IF n = 0 THEN SetDlgItemText Task(%Troms_Damper).hparam, %GMT_TEXT0_ID + 16, "On" ELSE SetDlgItemText Task(%Troms_Damper).hparam, %GMT_TEXT0_ID + 16, "Off" END IF END SUB SUB Troms_Damper_Stop () Release Troms.channel, 21, 36 'mPlay Troms.channel, 22, 36 END SUB ' demo compositions for SUB AfroTroms () ' new version 12.04.2004 ' this piece can be interrupted and restarted any time. It will restart where it left off... ' it has only the parameters speed and velocity. STATIC i AS BYTE ' binary pattern STATIC j AS BYTE ' rotator STATIC sl0 AS LONG STATIC sl1 AS LONG LOCAL level AS BYTE STATIC bcnt AS BYTE, tcnt AS BYTE, acnt AS BYTE, lbcnt AS BYTE, hbcnt AS BYTE, mlcnt AS BYTE, mhcnt AS BYTE IF ISFALSE Task(%troms_Afro).tog THEN App.Tempo = 30 Task(%troms_Afro).tog = %true DIM TaskParamLabels(0 TO 1) AS ASCIIZ * 8 TaskParamLabels(0) = "Tempo" TaskParamLabels(1) = "Level" IF ISFALSE Task(%Troms_Afro).hParam THEN sl0 = %False MakeTaskParameterDialog %Troms_Afro,2,Slider(),0,UDctrl(),TaskParamLabels() END IF IF sl0 = %False THEN sl0 = TaskEX(%Troms_Afro).SliderNumbers(0) sl1 = TaskEX(%Troms_Afro).SliderNumbers(1) Slider(sl0).minval = 10 ' tempo slider Slider(sl0).maxval = 120 Slider(sl0).resetval = App.Tempo Slider(sl0).stap = 1 Slider(sl0).value = App.Tempo ' Slider(sl0).tag = "MM" Slider(sl0).stap = 1 Slider(sl1).minval = 5 ' level slider Slider(sl1).maxval = 127 Slider(sl1).stap = 1 Slider(sl1).value = 80 ' Slider(sl1).tag = "Vol" SendMessage Slider(sl0).h, %TBM_SETRANGE,%True, MakeLong(Slider(sl0).minval, Slider(sl0).maxval) SendMessage Slider(sl0).h, %TBM_SETPAGESIZE,0,Slider(sl0).stap SendMessage Slider(sl0).h, %TBM_SETPOS,%True, Slider(sl0).value SendMessage Slider(sl1).h, %TBM_SETRANGE,%True, MakeLong(Slider(sl1).minval, Slider(sl1).maxval) SendMessage Slider(sl0).h, %TBM_SETPAGESIZE,0,Slider(sl1).stap SendMessage Slider(sl1).h, %TBM_SETPOS,%True, Slider(sl1).value END IF SetDlgItemText gh.Cockpit, %GMT_TITLE , "" SetDlgItemText gh.Cockpit, %GMT_AUTHOR , $gwr END IF ' speed: change this tasks's frequency. Task(%Troms_Afro).freq = Slider(sl0).value * 8 / 60! ' MM480, of zestienden in MM120 ' here starts the playing algorithm: level = Slider(sl1).value ROTATE LEFT i,j IF BIT (i,0) THEN mPlay Troms.channel, 24 + bcnt, level INCR bcnt IF bcnt > 5 THEN bcnt = 0 END IF IF BIT (i,1) THEN mPlay Troms.channel, 30 + tcnt, level INCR tcnt IF tcnt > 3 THEN tcnt = 0 END IF IF BIT (i,2) THEN mPlay Troms.channel, 34 + acnt, level INCR acnt IF acnt > 3 THEN acnt = 0 END IF IF BIT (i,3) THEN mPlay Troms.channel, 38 + lbcnt,level INCR lbcnt IF lbcnt > 2 THEN lbcnt = 0 END IF IF BIT (i,4) THEN mPlay Troms.channel, 41 + hbcnt, level INCR hbcnt IF hbcnt > 2 THEN hbcnt = 0 END IF IF BIT (i,5) THEN mPlay Troms.channel, 44 + mlcnt, level INCR mlcnt IF mlcnt > 1 THEN mlcnt = 0 END IF IF BIT (i,6) THEN mPlay Troms.channel, 46 + mhcnt, level INCR mhcnt IF mhcnt > 1 THEN mhcnt = 0 END IF ROTATE RIGHT i,j IF i < 127 THEN INCR i EXIT SUB ELSE i = 0 INCR j END IF IF j > 7 THEN j = 0 END SUB SUB TromsETroms () ' X-lat 12.04.2004 STATIC COUNT AS LONG STATIC hoek AS DWORD STATIC increm AS SINGLE STATIC sl0 AS LONG STATIC sl1 AS LONG LOCAL i AS LONG LOCAL blevel AS INTEGER,tlevel AS INTEGER, alevel AS INTEGER, lblevel AS INTEGER, hblevel AS INTEGER, mllevel AS INTEGER, mhlevel AS INTEGER STATIC bcnt AS BYTE, acnt AS BYTE, tcnt AS BYTE, lbcnt AS BYTE, hbcnt AS BYTE, mlcnt AS BYTE, mhcnt AS BYTE IF ISFALSE increm THEN increm = 1 IF ISFALSE Task(%TromsETroms).tog THEN Task(%TromsETroms).tog=%true Slider(0).minval = 1 Slider(0).maxval = 127 Slider(0).stap = 1 Slider(0).value = 60 Slider(0).tag = "Vol" Slider(1).minval = 5 Slider(1).maxval = 14 'bps ??? Slider(1).stap = 1 Slider(1).value = 10 Slider(1).tag = "Bps" SendMessage Slider(0).h, %TBM_SETRANGE,%True, MakeLong(Slider(0).minval, Slider(0).maxval) SendMessage Slider(0).h, %TBM_SETPAGESIZE,0,Slider(0).stap SendMessage Slider(0).h, %TBM_SETPOS,%True, Slider(0).value SendMessage Slider(1).h, %TBM_SETRANGE,%True, MakeLong(Slider(1).minval, Slider(1).maxval) SendMessage Slider(1).h, %TBM_SETPOS,%True, Slider(1).value sl0 = Slider(0).value sl1 = Slider(1).value SetDlgItemText gh.Cockpit, %GMT_TITLE , "" SetDlgItemText gh.Cockpit, %GMT_AUTHOR , $gwr SetDlgItemText gh.Cockpit, %GMT_TEXT_SLIDER0 , Slider(0).tag SetDlgItemText gh.Cockpit, %GMT_TEXT_SLIDER1 , Slider(1).tag END IF IF sl0<>Slider(0).value THEN sl0=Slider(0).value task(%TromsETroms).level = sl0 END IF task(%tromsETroms).freq = Slider(1).value INCR hoek blevel = ABS(SIN(Pi * hoek/160) * SIN(Pi*hoek/270) * Slider(0).value) tlevel = ABS(SIN(Pi * hoek/161) * SIN(Pi*hoek/272) * Slider(0).value) alevel = ABS(SIN(Pi * hoek/162) * SIN(Pi*hoek/274) * Slider(0).value) lblevel = ABS(SIN(Pi * hoek/163) * SIN(Pi*hoek/276) * Slider(0).value) hblevel = ABS(SIN(Pi * hoek/164) * SIN(Pi*hoek/278) * Slider(0).value) mllevel = ABS(SIN(Pi * hoek/165) * SIN(Pi*hoek/280) * Slider(0).value) mhlevel = ABS(SIN(Pi * hoek/166) * SIN(Pi*hoek/282) * Slider(0).value) BEGIN: COUNT = COUNT + increm INCR hoek SELECT CASE COUNT MOD 7 CASE 1 'Trom_Bas mPlay Troms.channel, 24 + bcnt,blevel INCR bcnt IF bcnt > 5 THEN bcnt = 0 IF (COUNT\7 > 8) THEN increm=-increm - .2 : GOTO BEGIN CASE 2 IF COUNT\7 > 4 THEN GOTO BEGIN 'Trom_Ten mPlay Troms.channel, 30 + tcnt, tlevel INCR tcnt IF tcnt > 3 THEN tcnt = 0 CASE 3 IF COUNT\7 > 4 THEN GOTO BEGIN 'Trom_Alt mPlay Troms.channel, 34 + acnt, alevel INCR acnt IF acnt > 3 THEN acnt = 0 CASE 4 IF COUNT\7 > 3 THEN GOTO BEGIN 'Trom_LoBo mPlay Troms.channel, 38 + lbcnt, lblevel INCR lbcnt IF lbcnt > 2 THEN lbcnt = 0 CASE 5 IF COUNT\7 > 3 THEN GOTO BEGIN 'Trom_HiBo mPlay Troms.channel, 41 + hbcnt, hblevel INCR hbcnt IF hbcnt > 2 THEN hbcnt = 0 CASE 6 IF COUNT\7 > 2 THEN GOTO BEGIN 'Trom_MLBo mPlay Troms.channel, 44 + mlcnt, mllevel INCR mlcnt IF mlcnt > 1 THEN mlcnt = 0 CASE 0 IF COUNT <= 0 THEN increm = - increm: GOTO BEGIN IF COUNT\7 > 2 THEN GOTO BEGIN 'Trom_MHBo mPlay Troms.channel, 46 + mhcnt, mhlevel INCR mhcnt IF mhcnt > 2 THEN mhcnt = 0 ' met cimbaal ! END SELECT IF increm>6 THEN COUNT = 0 increm = increm/7 END IF END SUB SUB Snar_Test () ' 32 - 10.04.2000 ' roffeltest. STATIC i AS DWORD STATIC slnr AS DWORD IF ISFALSE Task(%Snar_Test).tog THEN DIM TaskParamLabels(0 TO 3) AS ASCIIZ * 8 TaskParamLabels(0) = "Tempo" TaskParamLabels(1) = "Level" TaskParamLabels(2) = "LowLim" TaskParamLabels(3) = "HiLim" IF ISFALSE Task(%Snar_Test).hParam THEN slnr = %False MakeTaskParameterDialog %Snar_Test,2,Slider(),2,UDctrl(),TaskParamLabels() END IF IF slnr = %False THEN slnr = TaskEX(%Snar_Test).SliderNumbers(0) UDctrl(TaskEX(%Snar_Test).UpdownNumbers(0)).cptr = CODEPTR(Snar_LoLim_UD1) ' lowest note UDctrl(TaskEX(%Snar_Test).UpdownNumbers(1)).cptr = CODEPTR(Snar_HiLim_UD2) ' highest note UDctrl(TaskEX(%Snar_Test).UpDownNumbers(0)).value = 60 UDctrl(TaskEX(%Snar_Test).UpDownNumbers(1)).value = 72 i = UDctrl(TaskEX(%Snar_Test).UpDownNumbers(0)).value Task(%Snar_Test).freq = 6 Slider(slnr).value = Task(%Snar_Test).freq SendMessage Slider(Slnr).h, %TBM_SETPOS,%True, Slider(Slnr).value SendMessage Slider(Slnr+1).h, %TBM_SETPOS,%True, 12 ' low level on init. END IF i = 60 Task(%Snar_Test).tog = %True END IF mPlay Snar.channel, i, Slider(slnr+1).value ' normal notes INCR i IF i > UDctrl(TaskEX(%Snar_Test).UpDownNumbers(1)).value THEN i = UDctrl(TaskEX(%Snar_Test).UpDownNumbers(0)).value Task(%Snar_Test).freq = 32! * (Slider(slnr).value) / 128! END SUB SUB Snar_LoLim_UD1 () ' controls the low limit of the note scale to be played. LOCAL noot AS BYTE LOCAL udnr AS DWORD udnr = TaskEX(%Snar_Test).UpDownNumbers(0) noot = UDCtrl(udnr).value IF noot < 60 THEN UDctrl(udnr).value = 60 : noot = 60 IF noot > UDctrl(udnr+1).value THEN UDctrl(udnr).value = UDctrl(udnr+1).value : noot = UDctrl(udnr).value SetDlgItemText Task(%Snar_Test).hparam, %GMT_TEXT0_ID + 16, "Lo=" & STR$(noot) END SUB SUB Snar_HiLim_UD2 () ' controls the high limit of the note scale to be played. LOCAL noot AS BYTE LOCAL udnr AS DWORD udnr = TaskEX(%Snar_Test).UpDownNumbers(1) noot = UDCtrl(udnr).value IF noot < UDctrl(udnr-1).value THEN UDctrl(udnr).value = UDctrl(udnr-1).value : noot = UDctrl(udnr).value IF noot > 72 THEN UDctrl(udnr).value = 72 : noot = 72 SetDlgItemText Task(%Snar_Test).hparam, %GMT_TEXT0_ID + 17, "Hi=" & STR$(noot) END SUB SUB Snar_Lites () ' 34 ' lampjes test - notes 75-76-77 ' ON/OFF only, no velocity STATIC i AS LONG IF ISFALSE Task(%Snar_lites).tog THEN i = 75 Task(%snar_lites).tog = %True END IF mPlay Snar.channel, i, %False INCR i IF i > 77 THEN i = 75 mPlay Snar.channel, i, 64 END SUB SUB Snar_Rims () ' task 33 ' rimshot test ' notes 73-74 STATIC i AS DWORD STATIC slnr AS DWORD IF ISFALSE Task(%Snar_Rims).tog THEN DIM TaskParamLabels(0 TO 1) AS ASCIIZ * 8 TaskParamLabels(0) = "Tempo" TaskParamLabels(1) = "Level" IF ISFALSE Task(%Snar_Rims).hParam THEN slnr = %False MakeTaskParameterDialog %Snar_Rims,2,Slider(),0,UDctrl(),TaskParamLabels() END IF IF slnr = %False THEN slnr = TaskEX(%Snar_Rims).SliderNumbers(0) Task(%Snar_Rims).freq = 3 Slider(slnr).value = Task(%Snar_Rims).freq SendMessage Slider(Slnr).h, %TBM_SETPOS,%True, Slider(Slnr).value Slider(slnr+1).value = 12 SendMessage Slider(Slnr+1).h, %TBM_SETPOS,%True, 12 ' low level on init. END IF i = 73 Task(%Snar_Rims).tog = %True END IF mPlay Snar.channel, i, Slider(slnr+1).value ' rimshot INCR i IF i > 74 THEN i = 73 Task(%Snar_Rims).freq = 32! * (Slider(slnr).value) / 128! END SUB SUB Snar_snares () ' 35 ' controller 11: snares on/off STATIC i AS DWORD STATIC slnr AS DWORD IF ISFALSE Task(%Snar_snares).tog THEN DIM TaskParamLabels(0 TO 1) AS ASCIIZ * 8 TaskParamLabels(0) = "Tempo" TaskParamLabels(1) = "Force" IF ISFALSE Task(%Snar_Snares).hParam THEN slnr = %False MakeTaskParameterDialog %Snar_snares,2,Slider(),0,UDctrl(),TaskParamLabels() END IF IF slnr = %False THEN slnr = TaskEX(%Snar_Snares).SliderNumbers(0) Task(%Snar_Snares).freq = 1 Slider(slnr).value = Task(%Snar_Snares).freq SendMessage Slider(Slnr).h, %TBM_SETPOS,%True, Slider(Slnr).value SendMessage Slider(Slnr+1).h, %TBM_SETPOS,%True, 127 ' max level on init. END IF i = %False Task(%Snar_Snares).tog = %True END IF IF ISFALSE i THEN Controller Snar.channel, 11, %False Snar.ctrl(11) = %False ELSE Controller Snar.channel, 11, Slider(slnr+1).value Snar.ctrl(11) = Slider(slnr+1).value END IF INCR i IF i> 1 THEN i= %False Task(%Snar_Snares).freq = (Slider(slnr).value) * 0.125! END SUB SUB Troms_Bas () STATIC i AS DWORD STATIC slnr AS DWORD IF ISFALSE Task(%Troms_bas).tog THEN DIM TaskParamLabels(0 TO 1) AS ASCIIZ * 8 TaskParamLabels(0) = "Tempo" TaskParamLabels(1) = "Level" IF ISFALSE Task(%Troms_Bas).hParam THEN slnr = %False MakeTaskParameterDialog %Troms_Bas,2,Slider(),0,UDctrl(),TaskParamLabels() END IF IF slnr = %False THEN slnr = TaskEX(%Troms_Bas).SliderNumbers(0) ' 23 = soft beater on bassdrum Task(%Troms_Bas).freq = 2 Slider(slnr).value = Task(%Troms_Bas).freq * 4 SendMessage Slider(Slnr).h, %TBM_SETPOS,%True, Slider(Slnr).value SendMessage Slider(Slnr+1).h, %TBM_SETPOS,%True, 4 ' low level on init. END IF i = 24 Task(%Troms_Bas).tog = %True END IF mPlay Troms.channel, i, Slider(slnr+1).value ' normal beaters INCR i IF i > 29 THEN i = 24 Task(%Troms_Bas).freq = MAX((Slider(slnr).value) / 4.0, 0.25) END SUB SUB Troms_Ten () STATIC i AS DWORD STATIC slnr AS DWORD IF ISFALSE Task(%Troms_Ten).tog THEN DIM TaskParamLabels(0 TO 1) AS ASCIIZ * 8 TaskParamLabels(0) = "Tempo" TaskParamLabels(1) = "Level" IF ISFALSE Task(%Troms_Ten).hParam THEN slnr = %False MakeTaskParameterDialog %Troms_Ten,2,Slider(),0,UDctrl(),TaskParamLabels() END IF IF slnr = %False THEN slnr = TaskEX(%Troms_Ten).SliderNumbers(0) Task(%Troms_Ten).freq = 2 Slider(slnr).value = Task(%Troms_Ten).freq * 4 SendMessage Slider(Slnr).h, %TBM_SETPOS,%True, Slider(Slnr).value SendMessage Slider(Slnr+1).h, %TBM_SETPOS,%True, 4 ' low level on init. END IF i = 30 Task(%Troms_Ten).tog = %True END IF mPlay Troms.channel, i, Slider(slnr+1).value INCR i IF i > 33 THEN i = 30 Task(%Troms_Ten).freq = MAX((Slider(slnr).value) / 4.0, 0.25) END SUB SUB Troms_Med () STATIC i AS DWORD STATIC slnr AS DWORD IF ISFALSE Task(%Troms_Med).tog THEN DIM TaskParamLabels(0 TO 1) AS ASCIIZ * 8 TaskParamLabels(0) = "Tempo" TaskParamLabels(1) = "Level" IF ISFALSE Task(%Troms_Med).hParam THEN slnr = %False MakeTaskParameterDialog %Troms_Med,2,Slider(),0,UDctrl(),TaskParamLabels() END IF IF slnr = %False THEN slnr = TaskEX(%Troms_Med).SliderNumbers(0) Task(%Troms_Med).freq = 2 Slider(slnr).value = Task(%Troms_Med).freq * 4 SendMessage Slider(Slnr).h, %TBM_SETPOS,%True, Slider(Slnr).value SendMessage Slider(Slnr+1).h, %TBM_SETPOS,%True, 4 ' low level on init. END IF i = 34 Task(%Troms_Med).tog = %True END IF mPlay Troms.channel, i, Slider(slnr+1).value INCR i IF i > 37 THEN i = 34 Task(%Troms_Med).freq = MAX((Slider(slnr).value) / 4.0, 0.25) END SUB SUB Troms_LBongo () STATIC i AS DWORD STATIC slnr AS DWORD IF ISFALSE Task(%Troms_LBongo).tog THEN DIM TaskParamLabels(0 TO 1) AS ASCIIZ * 8 TaskParamLabels(0) = "Tempo" TaskParamLabels(1) = "Level" IF ISFALSE Task(%Troms_LBongo).hParam THEN slnr = %False MakeTaskParameterDialog %Troms_LBongo,2,Slider(),0,UDctrl(),TaskParamLabels() END IF IF slnr = %False THEN slnr = TaskEX(%Troms_LBongo).SliderNumbers(0) Task(%Troms_LBongo).freq = 2 Slider(slnr).value = Task(%Troms_LBongo).freq * 4 SendMessage Slider(Slnr).h, %TBM_SETPOS,%True, Slider(Slnr).value SendMessage Slider(Slnr+1).h, %TBM_SETPOS,%True, 4 ' low level on init. END IF i = 38 Task(%Troms_LBongo).tog = %True END IF mPlay Troms.channel, i, Slider(slnr+1).value INCR i IF i > 40 THEN i = 38 Task(%Troms_LBongo).freq = MAX((Slider(slnr).value) / 4.0, 0.25) END SUB SUB Troms_HBongo () STATIC i AS DWORD STATIC slnr AS DWORD IF ISFALSE Task(%Troms_HBongo).tog THEN DIM TaskParamLabels(0 TO 1) AS ASCIIZ * 8 TaskParamLabels(0) = "Tempo" TaskParamLabels(1) = "Level" IF ISFALSE Task(%Troms_HBongo).hParam THEN slnr = %False MakeTaskParameterDialog %Troms_HBongo,2,Slider(),0,UDctrl(),TaskParamLabels() END IF IF slnr = %False THEN slnr = TaskEX(%Troms_HBongo).SliderNumbers(0) ' 23 = soft beater on bassdrum Task(%Troms_HBongo).freq = 2 Slider(slnr).value = Task(%Troms_HBongo).freq * 4 SendMessage Slider(Slnr).h, %TBM_SETPOS,%True, Slider(Slnr).value SendMessage Slider(Slnr+1).h, %TBM_SETPOS,%True, 4 ' low level on init. END IF i = 41 Task(%Troms_HBongo).tog = %True END IF mPlay Troms.channel, i, Slider(slnr+1).value INCR i IF i > 43 THEN i = 41 Task(%Troms_HBongo).freq = MAX((Slider(slnr).value) / 4.0, 0.25) END SUB SUB Troms_LMiniBongo () STATIC i AS DWORD STATIC slnr AS DWORD IF ISFALSE Task(%Troms_LMiniBongo).tog THEN DIM TaskParamLabels(0 TO 1) AS ASCIIZ * 8 TaskParamLabels(0) = "Tempo" TaskParamLabels(1) = "Level" IF ISFALSE Task(%Troms_LMiniBongo).hParam THEN slnr = %False MakeTaskParameterDialog %Troms_LMiniBongo,2,Slider(),0,UDctrl(),TaskParamLabels() END IF IF slnr = %False THEN slnr = TaskEX(%Troms_LMiniBongo).SliderNumbers(0) Task(%Troms_LMiniBongo).freq = 2 Slider(slnr).value = Task(%Troms_LMiniBongo).freq * 4 SendMessage Slider(Slnr).h, %TBM_SETPOS,%True, Slider(Slnr).value SendMessage Slider(Slnr+1).h, %TBM_SETPOS,%True, 4 ' low level on init. END IF i = 44 Task(%Troms_LMiniBongo).tog = %True END IF mPlay Troms.channel, i, Slider(slnr+1).value INCR i IF i > 45 THEN i = 44 Task(%Troms_LMiniBongo).freq = MAX((Slider(slnr).value) / 4.0, 0.25) END SUB SUB Troms_HMiniBongo () STATIC i AS DWORD STATIC slnr AS DWORD IF ISFALSE Task(%Troms_HMiniBongo).tog THEN DIM TaskParamLabels(0 TO 1) AS ASCIIZ * 8 TaskParamLabels(0) = "Tempo" TaskParamLabels(1) = "Level" IF ISFALSE Task(%Troms_HMiniBongo).hParam THEN slnr = %False MakeTaskParameterDialog %Troms_HMiniBongo,2,Slider(),0,UDctrl(),TaskParamLabels() END IF IF slnr = %False THEN slnr = TaskEX(%Troms_HMiniBongo).SliderNumbers(0) Task(%Troms_HMiniBongo).freq = 2 Slider(slnr).value = Task(%Troms_HMiniBongo).freq * 4 SendMessage Slider(Slnr).h, %TBM_SETPOS,%True, Slider(Slnr).value SendMessage Slider(Slnr+1).h, %TBM_SETPOS,%True, 4 ' low level on init. END IF i = 46 Task(%Troms_HMiniBongo).tog = %True END IF mPlay Troms.channel, i, Slider(slnr+1).value INCR i IF i > 47 THEN i = 46 Task(%Troms_HMiniBongo).freq = MAX((Slider(slnr).value) / 4.0, 0.25) END SUB SUB Troms_Cymbal () STATIC slnr AS DWORD IF ISFALSE Task(%Troms_Cymbal).tog THEN DIM TaskParamLabels(0 TO 1) AS ASCIIZ * 8 TaskParamLabels(0) = "Tempo" TaskParamLabels(1) = "Level" IF ISFALSE Task(%Troms_Cymbal).hParam THEN slnr = %False MakeTaskParameterDialog %Troms_Cymbal,2,Slider(),0,UDctrl(),TaskParamLabels() END IF IF slnr = %False THEN slnr = TaskEX(%Troms_Cymbal).SliderNumbers(0) Task(%Troms_Cymbal).freq = 2 Slider(slnr).value = Task(%Troms_Cymbal).freq * 4 SendMessage Slider(Slnr).h, %TBM_SETPOS,%True, Slider(Slnr).value SendMessage Slider(Slnr+1).h, %TBM_SETPOS,%True, 4 ' low level on init. END IF Task(%Troms_Cymbal).tog = %True END IF mPlay Troms.channel, 48, Slider(slnr+1).value Task(%Troms_Cymbal).freq = MAX((Slider(slnr).value) / 4.0, 0.25) END SUB SUB Troms_Soft () STATIC slnr AS DWORD IF ISFALSE Task(%Troms_Soft).tog THEN DIM TaskParamLabels(0 TO 1) AS ASCIIZ * 8 TaskParamLabels(0) = "Tempo" TaskParamLabels(1) = "Level" IF ISFALSE Task(%Troms_Soft).hParam THEN slnr = %False MakeTaskParameterDialog %Troms_Soft,2,Slider(),0,UDctrl(),TaskParamLabels() END IF IF slnr = %False THEN slnr = TaskEX(%Troms_Soft).SliderNumbers(0) ' 23 = soft beater on bassdrum Task(%Troms_Soft).freq = 2 Slider(slnr).value = Task(%Troms_Soft).freq * 4 SendMessage Slider(Slnr).h, %TBM_SETPOS,%True, Slider(Slnr).value SendMessage Slider(Slnr+1).h, %TBM_SETPOS,%True, 4 ' low level on init. END IF Task(%Troms_Soft).tog = %True END IF mPlay Troms.channel, 23, Slider(slnr+1).value Task(%Troms_Soft).freq = MAX((Slider(slnr).value) / 4.0, 0.25) END SUB ' procedures for : ' 20.04.2014 SUB Snar2_Rof () ' roffeltest. STATIC i AS DWORD STATIC slnr AS DWORD IF ISFALSE Task(%Snar2_rof).tog THEN DIM TaskParamLabels(0 TO 3) AS ASCIIZ * 8 TaskParamLabels(0) = "Tempo" TaskParamLabels(1) = "Level" TaskParamLabels(2) = "LowLim" TaskParamLabels(3) = "HiLim" IF ISFALSE Task(%Snar2_rof).hParam THEN slnr = %False MakeTaskParameterDialog %Snar2_rof,2,Slider(),2,UDctrl(),TaskParamLabels() END IF IF slnr = %False THEN slnr = TaskEX(%Snar2_rof).SliderNumbers(0) UDctrl(TaskEX(%Snar2_rof).UpdownNumbers(0)).cptr = CODEPTR(Snar2_LoLim_UD1) ' lowest note UDctrl(TaskEX(%Snar2_rof).UpdownNumbers(1)).cptr = CODEPTR(Snar2_HiLim_UD2) ' highest note UDctrl(TaskEX(%Snar2_rof).UpDownNumbers(0)).value = 60 UDctrl(TaskEX(%Snar2_rof).UpDownNumbers(1)).value = 72 i = UDctrl(TaskEX(%Snar2_rof).UpDownNumbers(0)).value Task(%Snar2_rof).freq = 6 Slider(slnr).value = Task(%Snar2_rof).freq SendMessage Slider(Slnr).h, %TBM_SETPOS,%True, Slider(Slnr).value SendMessage Slider(Slnr+1).h, %TBM_SETPOS,%True, 12 ' low level on init. END IF i = 60 Task(%Snar2_rof).tog = %True END IF mPlay Snar2.channel, i, Slider(slnr+1).value ' normal notes INCR i IF i > UDctrl(TaskEX(%Snar2_rof).UpDownNumbers(1)).value THEN i = UDctrl(TaskEX(%Snar2_rof).UpDownNumbers(0)).value Task(%Snar2_rof).freq = 32! * (Slider(slnr).value) / 128! END SUB SUB Snar2_LoLim_UD1 () ' controls the low limit of the note scale to be played. LOCAL noot AS BYTE LOCAL udnr AS DWORD udnr = TaskEX(%Snar2_rof).UpDownNumbers(0) noot = UDCtrl(udnr).value IF noot < 60 THEN UDctrl(udnr).value = 60 : noot = 60 IF noot > UDctrl(udnr+1).value THEN UDctrl(udnr).value = UDctrl(udnr+1).value : noot = UDctrl(udnr).value SetDlgItemText Task(%Snar2_rof).hparam, %GMT_TEXT0_ID + 16, "Lo=" & STR$(noot) END SUB SUB Snar2_HiLim_UD2 () ' controls the high limit of the note scale to be played. LOCAL noot AS BYTE LOCAL udnr AS DWORD udnr = TaskEX(%Snar2_rof).UpDownNumbers(1) noot = UDCtrl(udnr).value IF noot < UDctrl(udnr-1).value THEN UDctrl(udnr).value = UDctrl(udnr-1).value : noot = UDctrl(udnr).value IF noot > 72 THEN UDctrl(udnr).value = 72 : noot = 72 SetDlgItemText Task(%Snar2_rof).hparam, %GMT_TEXT0_ID + 17, "Hi=" & STR$(noot) END SUB SUB Snar2_Lites () ' lampjes test - notes 120-121 ' with flashing. ' we need to add a velo slider here. STATIC i AS LONG STATIC slnr AS DWORD IF ISFALSE Task(%Snar2_lites).tog THEN DIM TaskParamlabels(0) AS ASCIIZ * 8 TaskParamLabels(0) = "velo" IF ISFALSE Task(%Snar2_lites).hParam THEN RESET slnr MakeTaskParameterDialog %Snar2_lites, 1, Slider(), 0, UDctrl(), TaskParamLabels() END IF IF ISFALSE slnr THEN slnr = TaskEX(%Snar2_lites).sliderNumbers(0) Slider(slnr).value = 64 Sendmessage Slider(slnr).h, %TBM_SETPOS, %True, Slider(slnr).value END IF i = 120 Task(%snar2_lites).tog = %True END IF mPlay Snar2.channel, i, %False INCR i IF i > 121 THEN i = 120 mPlay Snar2.channel, i, Slider(slnr).value END SUB SUB Snar2_Rims () ' rimshot test ' notes 73-74 STATIC i AS DWORD STATIC slnr AS DWORD IF ISFALSE Task(%Snar2_Rims).tog THEN DIM TaskParamLabels(0 TO 1) AS ASCIIZ * 8 TaskParamLabels(0) = "Tempo" TaskParamLabels(1) = "Level" IF ISFALSE Task(%Snar2_Rims).hParam THEN slnr = %False MakeTaskParameterDialog %Snar2_Rims,2,Slider(),0,UDctrl(),TaskParamLabels() END IF IF slnr = %False THEN slnr = TaskEX(%Snar2_Rims).SliderNumbers(0) Task(%Snar2_Rims).freq = 3 Slider(slnr).value = Task(%Snar2_Rims).freq SendMessage Slider(Slnr).h, %TBM_SETPOS,%True, Slider(Slnr).value Slider(slnr+1).value = 12 SendMessage Slider(Slnr+1).h, %TBM_SETPOS,%True, 12 ' low level on init. END IF i = 73 Task(%Snar2_Rims).tog = %True END IF mPlay Snar2.channel, i, Slider(slnr+1).value ' rimshot INCR i IF i > 74 THEN i = 73 Task(%Snar2_Rims).freq = MAX( 1, 32! * (Slider(slnr).value) / 128!) END SUB SUB Snar2_snares () ' 35 ' controller 11: snares on/off ' needs tests for both solenoids, ctrl 9 and 10 STATIC i AS DWORD STATIC slnr AS DWORD IF ISFALSE Task(%Snar2_snares).tog THEN DIM TaskParamLabels(0 TO 1) AS ASCIIZ * 8 TaskParamLabels(0) = "Tempo" TaskParamLabels(1) = "Force" IF ISFALSE Task(%Snar2_Snares).hParam THEN slnr = %False MakeTaskParameterDialog %Snar2_snares,2,Slider(),0,UDctrl(),TaskParamLabels() END IF IF slnr = %False THEN slnr = TaskEX(%Snar2_Snares).SliderNumbers(0) Task(%Snar2_Snares).freq = 1 Slider(slnr).value = Task(%Snar2_Snares).freq SendMessage Slider(Slnr).h, %TBM_SETPOS,%True, Slider(Slnr).value SendMessage Slider(Slnr+1).h, %TBM_SETPOS,%True, 127 ' max level on init. END IF i = %False Task(%Snar2_Snares).tog = %True END IF IF ISFALSE i THEN Controller Snar2.channel, 11, %False Snar.ctrl(11) = %False ELSE Controller Snar2.channel, 11, Slider(slnr+1).value Snar.ctrl(11) = Slider(slnr+1).value END IF INCR i IF i> 1 THEN i= %False Task(%Snar2_Snares).freq = MAX(0.1,(Slider(slnr).value) * 0.125!) END SUB SUB Snar2_shuffle () ' 44 ' controller 9-10: snares on/off ' tests for both solenoids, ctrl 9 and 10 STATIC i AS LONG STATIC slnr AS DWORD IF ISFALSE Task(%Snar2_shuffle).tog THEN DIM TaskParamLabels(0 TO 1) AS ASCIIZ * 8 TaskParamLabels(0) = "Tempo" TaskParamLabels(1) = "Force" IF ISFALSE Task(%Snar2_Shuffle).hParam THEN slnr = %False MakeTaskParameterDialog %Snar2_shuffle,2,Slider(),0,UDctrl(),TaskParamLabels() END IF IF slnr = %False THEN slnr = TaskEX(%Snar2_Shuffle).SliderNumbers(0) Task(%Snar2_Shuffle).freq = 1 Slider(slnr).value = Task(%Snar2_Shuffle).freq SendMessage Slider(Slnr).h, %TBM_SETPOS,%True, Slider(Slnr).value SendMessage Slider(Slnr+1).h, %TBM_SETPOS,%True, 80 ' max 100% duty cycle level on init. END IF RESET i Task(%Snar2_Shuffle).tog = %True END IF IF ISFALSE i THEN Controller Snar2.channel, 9, %False RESET Snar.ctrl(9) Controller Snar2.channel, 10, Slider(slnr+1).value Snar.ctrl(10) = Slider(slnr+1).value ELSE Controller Snar2.channel, 9, Slider(slnr+1).value Snar.ctrl(9) = Slider(slnr+1).value Controller Snar2.channel, 10, %False RESET snar.ctrl(10) END IF INCR i i = i MOD 2 Task(%Snar2_Shuffle).freq = MAX(0.1,(Slider(slnr).value) * 0.125!) END SUB SUB Snar2_Minvel () ' 45 ' tests for ctrl 14,15 and 16 STATIC slnr AS DWORD IF ISFALSE Task(%Snar2_Minvel).tog THEN DIM TaskParamLabels(0 TO 2) AS ASCIIZ * 8 TaskParamLabels(0) = "CC14" TaskParamLabels(1) = "CC15" Taskparamlabels(2) = "CC16" IF ISFALSE Task(%Snar2_Minvel).hParam THEN slnr = %False MakeTaskParameterDialog %Snar2_Minvel,3,Slider(),0,UDctrl(),TaskParamLabels() END IF IF slnr = %False THEN slnr = TaskEX(%Snar2_Minvel).SliderNumbers(0) Task(%Snar2_Minvel).freq = 10 Slider(slnr).value = 1 Slider(slnr+1).value =1 Slider(slnr+2).value =1 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 Task(%Snar2_Minvel).tog = %True END IF IF Snar2.ctrl(14) <> Slider(slnr).value THEN Controller Snar2.channel, 14, Slider(slnr).value ' minimum pulse for velocity scaling of the drumbeaters Snar2.ctrl(14) = Slider(slnr).value END IF IF Snar2.ctrl(15) <> Slider(slnr+1).value THEN Controller Snar2.channel, 15, Slider(slnr+1).value ' minimum pulse for velocity scaling of the rimshots Snar2.ctrl(15) = Slider(slnr+1).value END IF IF Snar2.ctrl(16) <> Slider(slnr+2).value THEN Controller Snar2.channel, 16, Slider(slnr+2).value ' minimum force for the snare solenoids Snar2.ctrl(16) = Slider(slnr+2).value END IF Task(%Snar2_Minvel).freq = 10 END SUB 'EOF