'******************************************************************* '* < Springers > * '* Version 2.0 * '******************************************************************* '30.08.2000: dll procs. added gwr '31.08.2000: coding by kl ' first results: nothing working: ' Hardware debug by gwr: ' 3 bugs: 1: power supply was 120V... instead of 60V ' 2: 2N2222 too slow! use BS170's on velo boards. Logic 0 level was too high with transistor. ' 3: motor not working. PWM circuit O.K. : 150mF bypass on +15V power added. ' 78L05 substituted for 10V zener ' now, shakers working o.k. ' siren o.k. but depends on shaker data... as well. Maybe requires more stable power supply. ' PWM signal is audible on motor, as predicted. This technology is not usable for silent instruments! '09.09.2000: siren bearing welded. Light functional. '11.09.2000:light & siren all right after changing ports '13.09.00: listen proc made. still to be tested '21.09.00 : frame for listening to server. we still have to work on pieces... '10.10.00: brass drum constructed for spring 4 '12.10.00: start new piece by gwr: SpringShake using all components of the springers setup '14.10.00: further refinements... '16.10.00: last visit before try out '05.08.01: dll functions changed for NiDAQ support '08.08.2001: hardware fault repaired. '09.09.2001: Springers compilation ran for 9 hours without a glitch in St.Truiden. '12.09.2001: code added. (start) '04.06.2002: dll changed for multiport use. '24.07.2004: midiin speed improved and listenmask added. '31.08.2006: old code renamed spring_2000.inc and bi. Now springers became a midi robot. ' still to be rewritten with the appropriate midi functions. '01.09.2006: old hardware code midified (kl) - still to be tested ' springers and siren still work with note + velo -> should become pitchbend? '02.09.2006: functional again as midi robot. ' pitch bend on siren still to be done. Limit on siren speed also. ' Now, never go higher than 110 in midi. ' Controller 70 has some bug on the pic level. ' new tasks to test the new mappings: %springer1 = 17 %springer2 = 18 %springer3 = 19 %springer4 = 20 %springer5 = 21 %springer6 = 22 %shaker1 = 23 %shaker2 = 24 %sirene = 25 %light = 26 '--------------------------------- %springtask1 = %spr %springtask2 = %spr + 1 %springtask3 = %spr + 2 %springtask4 = %spr + 3 %shakertask1 = %spr + 4 %shakertask2 = %spr + 5 %sirentask = %spr + 7 %lighttask = %spr + 6 %sirtst = %spr + 8 'sirentest tasknr %lighttst = %spr + 9 ' **************************************************************************************** FUNCTION Init_Springers () AS LONG LOCAL m AS ASCIIZ*40 LOCAL i AS LONG Task(%springer1).naam = "Spr1" Task(%springer1).cptr = CODEPTR(Springer1) Task(%springer1).freq = 2 Task(%springer2).naam = "Spr2" Task(%springer2).CPTR = CODEPTR(Springer2) Task(%springer2).freq = 2 Task(%springer3).naam = "Spr3" Task(%springer3).CPTR = CODEPTR(Springer3) Task(%springer3).freq = 2 Task(%springer4).naam = "Spr4" Task(%springer4).CPTR = CODEPTR(Springer4) Task(%springer4).freq = 2 Task(%springer5).naam = "Spr5" Task(%springer5).CPTR = CODEPTR(Springer5) Task(%springer5).freq = 2 Task(%springer6).naam = "Spr6" Task(%springer6).CPTR = CODEPTR(Springer6) Task(%springer6).freq = 2 Task(%shaker1).naam = "Maraca1" Task(%shaker1).CPTR = CODEPTR(Shaker1) Task(%shaker1).freq = 2 Task(%shaker2).naam = "Maraca2" Task(%shaker2).CPTR = CODEPTR(Shaker2) Task(%shaker2).freq = 2 Task(%sirene).naam = "Sirene" Task(%sirene).CPTR = CODEPTR(Sirene) Task(%sirene).freq = 2 TaskEX(%sirene).StopCptr = CODEPTR(Sirene_Off) Task(%light).naam = "Police" Task(%light).CPTR = CODEPTR(Police_Light) Task(%light).freq = 2 TaskEX(%light).StopCptr = CODEPTR(Police_Light_off) Task(%sirtst).naam="tstSir" Task(%sirtst).freq = 4 'find best value... Task(%sirtst).cptr = CODEPTR(SirenTest) TaskEx(%sirtst).StartCptr = CODEPTR(StartSirenTest) TaskEx(%sirtst).StopCptr = CODEPTR(StopSirenTest) Task(%lighttst).naam="tstlight" Task(%lighttst).freq = 4 'find best value... Task(%lighttst).cptr = CODEPTR(lightTest) TaskEx(%lighttst).StartCptr = CODEPTR(StartlightTest) TaskEx(%lighttst).StopCptr = CODEPTR(StoplightTest) Task(%Springs_4Springs).naam = "4Springs" ' correct title Task(%Springs_4Springs).cptr = CODEPTR(ForSprings) '15.10.2000 changed CODEPTR(SpringPiece) Task(%Springs_4Springs).freq = .2 TaskEX(%Springs_4Springs).StopCptr = CODEPTR(ForSprings_Stop) Task(%Springs_Shaky).naam = "ShakeIt" ' full title = Shake It, for maraca duo Task(%Springs_Shaky).cPtr = CODEPTR(ShakeIt) Task(%Springs_Shaky).freq = 5 TaskEX(%Springs_Shaky).stopCptr = CODEPTR(ShakeIt_Stop) Task(%SpringShake).naam = "SpriShak" ' full title = SpringShake - uses all elements Task(%SpringShake).cPtr = CODEPTR(SpringShake) Task(%SpringShake).freq = Pi2 TaskEX(%SpringShake).StopCptr = CODEPTR(SpringShake_Stop) Task(%Springtask1).naam = "spring1" Task(%Springtask1).cptr = CODEPTR(Spring1) Task(%Springtask1).freq = 1 Task(%Springtask2).naam = "spring2" Task(%Springtask2).cptr = CODEPTR(spring2) Task(%Springtask2).freq = 1.1 Task(%Springtask3).naam = "spring3" Task(%Springtask3).cptr = CODEPTR(spring3) Task(%Springtask3).freq = 1.2 Task(%Springtask4).naam = "spring4" Task(%Springtask4).cptr = CODEPTR(spring4) Task(%Springtask4).freq = 1.3 Task(%shakertask1).naam = "maraca1" Task(%shakertask1).cptr = CODEPTR(Shake1) Task(%shakertask1).freq = 2 Task(%shakertask2).naam = "maraca2" Task(%shakertask2).cptr = CODEPTR(Shake2) Task(%shakertask2).freq = 2 Task(%lighttask).naam = "Light" Task(%lighttask).cptr = CODEPTR(SPR_light_task) Task(%lighttask).freq = 1 Task(%sirentask).naam = "Siren" Task(%sirentask).cptr = CODEPTR(SPR_Siren_Task) Task(%sirentask).freq = 2 '0.5 Task(%MM_SysxTask).naam = "SendSysx" Task(%MM_SysxTask).freq = .33 Task(%MM_SysxTask).cptr = CODEPTR(MM_Sysx) 'in m_robots.inc 'delete unecessary buttons ButnSW(2).tag0 = "" ButnSW(3).tag0 = "" ButnSW(4).tag0 = "" ButnSW(5).tag0 = "" ButnSW(6).tag0 = "" ButnSW(7).tag0 = "" ButnSW(8).tag0 = "" ButnSW(9).tag0 = "" ButnSW(10).tag0 = "" ButnSW(11).tag0 = "" ButnOS(4).tag = "" ButnOS(5).tag = "" ButnOS(6).tag = "" ButnOS(8).tag = "" ButnOS(9).tag = "" ButnOS(3).tag = "Down " ButnOs(3).cptr = CODEPTR(shakedown) 'GetProcAddress(gh.gnh,m) 'CODEPTR(shakedown) ButnOs(4).tag="ShkTst" ButnOs(4).cptr=CODEPTR(testShakers) ButnOs(5).tag="spring1" ButnOs(5).cptr=CODEPTR(testspring1) ButnOs(6).tag="spring2" ButnOs(6).cptr=CODEPTR(testspring2) ButnOs(7).tag="spring3" ButnOs(7).cptr=CODEPTR(testspring3) ButnOs(8).tag="spring4" ButnOs(8).cptr=CODEPTR(testspring4) ' MSGBOX HEX$(ButnOs(8).cptr) SetDlgItemText gh.Cockpit, %GMT_TITLE, "" ProgChange Springers.channel, 122 warning "setting springers to patch 122" ' ButnOS(10).tag = "PANIC" ' 'm = UCASE$("Springers_AllOff") ' ButnOs(10).cptr = CODEPTR(MM_Springers_Off) 'GetProcAddress(gh.gnh,m) END FUNCTION SUB SpringLog(a$)'debug routine STATIC hDlgDb AS LONG IF ISFALSE hDlgDb THEN DIALOG NEW %HWND_DESKTOP,"Springers debug window",1,1,200,50 TO hDlgDb CONTROL ADD LABEL, hDlgDb,1,a$,1,1,198,49 DIALOG SHOW MODELESS hDlgDb END IF CONTROL SET TEXT hDlgDb,1,a$ END SUB SUB testshakers () IF ISFALSE hDlgShk THEN Task(%shakertask1).level = 1 Task(%shakertask2).level = 1 Task(%shakertask1).freq = .5 Task(%shakertask2).freq = .5 DIALOG NEW %HWND_DESKTOP,"testshakers",1,50,200,230 TO hDlgShk CONTROL ADD LABEL, hDlgShk,-1,"SHAKER 1",5,5,90,12 CONTROL ADD LABEL, hDlgShk,-1,"VELO",10,20,50,12 CONTROL ADD BUTTON, hDlgShk,1,">>",15,35,70,12 CALL CBShk CONTROL ADD BUTTON, hDlgShk,2,">",15,50,70,12 CALL CBShk CONTROL ADD BUTTON, hDlgShk,3,"<",15,65,70,12 CALL CBShk CONTROL ADD BUTTON, hDlgShk,4,"<<",15,80,70,12 CALL CBShk CONTROL ADD LABEL, hDlgShk,5,"1",70,20,20,12 CONTROL ADD LABEL, hDlgShk,-1,"SPEED",10,100,50,12 CONTROL ADD BUTTON, hDlgShk,6,">>",15,115,70,12 CALL CBShk CONTROL ADD BUTTON, hDlgShk,7,">",15,130,70,12 CALL CBShk CONTROL ADD BUTTON, hDlgShk,8,"<",15,145,70,12 CALL CBShk CONTROL ADD BUTTON, hDlgShk,9,"<<",15,160,70,12 CALL CBShk CONTROL ADD LABEL, hDlgShk,10,".5",70,100,20,12 CONTROL ADD LABEL, hDlgShk,-1,"SHAKER 2",105,5,90,12 CONTROL ADD LABEL, hDlgShk,-1,"VELO",110,20,50,12 CONTROL ADD BUTTON, hDlgShk,11,">>",115,35,70,12 CALL CBShk CONTROL ADD BUTTON, hDlgShk,12,">",115,50,70,12 CALL CBShk CONTROL ADD BUTTON, hDlgShk,13,"<",115,65,70,12 CALL CBShk CONTROL ADD BUTTON, hDlgShk,14,"<<",115,80,70,12 CALL CBShk CONTROL ADD LABEL, hDlgShk,15,"1",170,20,20,12 CONTROL ADD LABEL, hDlgShk,-1,"SPEED",110,100,50,12 CONTROL ADD BUTTON, hDlgShk,16,">>",115,115,70,12 CALL CBShk CONTROL ADD BUTTON, hDlgShk,17,">",115,130,70,12 CALL CBShk CONTROL ADD BUTTON, hDlgShk,18,"<",115,145,70,12 CALL CBShk CONTROL ADD BUTTON, hDlgShk,19,"<<",115,160,70,12 CALL CBShk CONTROL ADD LABEL, hDlgShk,20,".5",170,100,20,12 CONTROL ADD LABEL, hDlgShk,-1,"Put on/off the shakers manually by clicking their radiobuttons. "+_ "Here you can only change their params.",10,185,180,40 DIALOG SHOW MODELESS hDlgShk END IF END SUB CALLBACK FUNCTION CBShk () LOCAL ID AS LONG LOCAL velo AS LONG LOCAL SPEED AS SINGLE IF CBCTLMSG <> %BN_CLICKED THEN EXIT FUNCTION ID=CBCTL SELECT CASE ID CASE 1 velo = task(%shakertask1).level + 10 IF velo > 127 THEN velo = 127 task(%shakertask1).level = velo CONTROL SET TEXT hDlgShk, 5,STR$(velo) CASE 2 velo = task(%shakertask1).level + 1 IF velo > 127 THEN velo = 127 task(%shakertask1).level = velo CONTROL SET TEXT hDlgShk, 5,STR$(velo) CASE 3 velo = task(%shakertask1).level - 1 IF velo < 1 THEN velo = 1 task(%shakertask1).level = velo CONTROL SET TEXT hDlgShk, 5,STR$(velo) CASE 4 velo = task(%shakertask1).level - 10 IF velo < 1 THEN velo = 1 task(%shakertask1).level = velo CONTROL SET TEXT hDlgShk, 5,STR$(velo) CASE 6 SPEED=task(%shakertask1).freq + 1 IF SPEED > 6 THEN SPEED = 6 SPEED=ROUND(SPEED,1) task(%shakertask1).freq = SPEED CONTROL SET TEXT hDlgShk,10,STR$(SPEED) CASE 7 SPEED=task(%shakertask1).freq + .1 IF SPEED > 6 THEN SPEED = 6 SPEED=ROUND(SPEED,1) task(%shakertask1).freq = SPEED CONTROL SET TEXT hDlgShk,10,STR$(SPEED) CASE 8 SPEED=task(%shakertask1).freq - .1 IF SPEED <.5 THEN SPEED = .5 SPEED=ROUND(SPEED,1) task(%shakertask1).freq = SPEED CONTROL SET TEXT hDlgShk,10,STR$(SPEED) CASE 9 SPEED=task(%shakertask1).freq - 1 IF SPEED <.5 THEN SPEED = .5 SPEED=ROUND(SPEED,1) task(%shakertask1).freq = SPEED CONTROL SET TEXT hDlgShk,10,STR$(SPEED) CASE 11 velo = task(%shakertask2).level + 10 IF velo > 127 THEN velo = 127 task(%shakertask2).level = velo CONTROL SET TEXT hDlgShk, 15,STR$(velo) CASE 12 velo = task(%shakertask2).level + 1 IF velo > 127 THEN velo = 127 task(%shakertask2).level = velo CONTROL SET TEXT hDlgShk, 15,STR$(velo) CASE 13 velo = task(%shakertask2).level - 1 IF velo < 1 THEN velo = 1 task(%shakertask2).level = velo CONTROL SET TEXT hDlgShk, 15,STR$(velo) CASE 14 velo = task(%shakertask2).level - 10 IF velo < 1 THEN velo = 1 task(%shakertask2).level = velo CONTROL SET TEXT hDlgShk, 15,STR$(velo) CASE 16 SPEED=task(%shakertask2).freq + 1 IF SPEED > 6 THEN SPEED = 6 SPEED=ROUND(SPEED,1) task(%shakertask2).freq = SPEED CONTROL SET TEXT hDlgShk,20,STR$(SPEED) CASE 17 SPEED=task(%shakertask2).freq + .1 IF SPEED > 6 THEN SPEED = 6 SPEED=ROUND(SPEED,1) task(%shakertask2).freq = SPEED CONTROL SET TEXT hDlgShk,20,STR$(SPEED) CASE 18 SPEED=task(%shakertask2).freq - .1 IF SPEED <.5 THEN SPEED = .5 SPEED=ROUND(SPEED,1) task(%shakertask2).freq = SPEED CONTROL SET TEXT hDlgShk,20,STR$(SPEED) CASE 19 SPEED=task(%shakertask2).freq - 1 IF SPEED <.5 THEN SPEED = .5 SPEED=ROUND(SPEED,1) task(%shakertask2).freq = SPEED CONTROL SET TEXT hDlgShk,20,STR$(SPEED) END SELECT END FUNCTION SUB testspring1 () STATIC hDlg AS LONG task(%springtask1).level = 10 IF ISFALSE hDlg THEN DIALOG NEW %HWND_DESKTOP,"spring 1",1,1,50,120 TO hDlg CONTROL ADD LABEL, hDlg,-1,"speed:" ,1,1,20,10 CONTROL ADD LABEL, hDlg, 1,STR$(task(%springtask1).freq),25,1,20,10 CONTROL ADD LABEL, hDlg,-1,"velo:" ,1,14,20,10 CONTROL ADD LABEL, hDlg, 2,"10",25,14,20,10 CONTROL ADD BUTTON, hDlg,3,"V >",3,30,44,12 CALL CBSpr CONTROL ADD BUTTON, hDlg,4,"V <",3,44,44,12 CALL CBSpr CONTROL ADD BUTTON, hDlg, 5,"S >>", 3,58,44,12 CALL CBSpr CONTROL ADD BUTTON, hDlg, 6,"S >",3,72,44,12 CALL CBSpr CONTROL ADD BUTTON, hDlg, 7,"S <", 3,86,44,12 CALL CBSpr CONTROL ADD BUTTON, hDlg, 8,"S <<",3,100,44,12 CALL CBSpr DIALOG SHOW MODELESS hDlg END IF END SUB SUB testspring2 () STATIC hDlg AS LONG task(%springtask2).level = 10 IF ISFALSE hDlg THEN DIALOG NEW %HWND_DESKTOP,"spring 2",1,1,50,120 TO hDlg CONTROL ADD LABEL, hDlg,-1,"speed:" ,1,1,20,10 CONTROL ADD LABEL, hDlg, 11,STR$(task(%springtask2).freq),25,1,20,10 CONTROL ADD LABEL, hDlg,-1,"velo:" ,1,14,20,10 CONTROL ADD LABEL, hDlg, 12,"10",25,14,20,10 CONTROL ADD BUTTON, hDlg,13,"V >",3,30,44,12 CALL CBSpr CONTROL ADD BUTTON, hDlg,14,"V <",3,44,44,12 CALL CBSpr CONTROL ADD BUTTON, hDlg, 15,"S >>", 3,58,44,12 CALL CBSpr CONTROL ADD BUTTON, hDlg, 16,"S >",3,72,44,12 CALL CBSpr CONTROL ADD BUTTON, hDlg, 17,"S <", 3,86,44,12 CALL CBSpr CONTROL ADD BUTTON, hDlg, 18,"S <<",3,100,44,12 CALL CBSpr DIALOG SHOW MODELESS hDlg END IF END SUB SUB testspring3 () STATIC hDlg AS LONG task(%springtask3).level = 10 IF ISFALSE hDlg THEN DIALOG NEW %HWND_DESKTOP,"spring 3",1,1,50,120 TO hDlg CONTROL ADD LABEL, hDlg,-1,"speed:" ,1,1,20,10 CONTROL ADD LABEL, hDlg, 21,STR$(task(%springtask3).freq),25,1,20,10 CONTROL ADD LABEL, hDlg,-1,"velo:" ,1,14,20,10 CONTROL ADD LABEL, hDlg, 22,"10",25,14,20,10 CONTROL ADD BUTTON, hDlg,23,"V >",3,30,44,12 CALL CBSpr CONTROL ADD BUTTON, hDlg,24,"V <",3,44,44,12 CALL CBSpr CONTROL ADD BUTTON, hDlg, 25,"S >>", 3,58,44,12 CALL CBSpr CONTROL ADD BUTTON, hDlg, 26,"S >",3,72,44,12 CALL CBSpr CONTROL ADD BUTTON, hDlg, 27,"S <", 3,86,44,12 CALL CBSpr CONTROL ADD BUTTON, hDlg, 28,"S <<",3,100,44,12 CALL CBSpr DIALOG SHOW MODELESS hDlg END IF END SUB SUB testspring4 () STATIC hDlg AS LONG task(%springtask4).level = 10 IF ISFALSE hDlg THEN DIALOG NEW %HWND_DESKTOP,"spring 4",1,1,50,120 TO hDlg CONTROL ADD LABEL, hDlg,-1,"speed:" ,1,1,20,10 CONTROL ADD LABEL, hDlg, 31,STR$(task(%springtask4).freq),25,1,20,10 CONTROL ADD LABEL, hDlg,-1,"velo:" ,1,14,20,10 CONTROL ADD LABEL, hDlg, 32,"10",25,14,20,10 CONTROL ADD BUTTON, hDlg,33,"V >",3,30,44,12 CALL CBSpr CONTROL ADD BUTTON, hDlg,34,"V <",3,44,44,12 CALL CBSpr CONTROL ADD BUTTON, hDlg, 35,"S >>", 3,58,44,12 CALL CBSpr CONTROL ADD BUTTON, hDlg, 36,"S >",3,72,44,12 CALL CBSpr CONTROL ADD BUTTON, hDlg, 37,"S <", 3,86,44,12 CALL CBSpr CONTROL ADD BUTTON, hDlg, 38,"S <<",3,100,44,12 CALL CBSpr DIALOG SHOW MODELESS hDlg END IF END SUB CALLBACK FUNCTION CBSpr () LOCAL ID AS LONG LOCAL msg AS LONG LOCAL velo AS LONG LOCAL freq AS SINGLE LOCAL nr AS LONG msg=CBCTLMSG IF msg<>%BN_CLICKED THEN EXIT FUNCTION ID=CBCTL IF ID > 30 THEN nr=3 ID=ID-30 ELSEIF ID > 20 THEN nr =2 ID=ID-20 ELSEIF ID >10 THEN nr=1 ID=ID-10 END IF SELECT CASE ID CASE 3 velo = task(%springtask1+nr).level + 2 IF velo > 127 THEN velo = 127 task(%springtask1+nr).level = velo CONTROL SET TEXT CBHNDL, 10*nr + 2,STR$(velo) CASE 4 velo = task(%springtask1+nr).level - 2 IF velo < 1 THEN velo = 1 task(%springtask1+nr).level = velo CONTROL SET TEXT CBHNDL, 10*nr + 2,STR$(velo) CASE 5 freq = task(%springtask1+nr).freq + 5 freq=ROUND(freq,1) task(%springtask1+nr).freq = freq CONTROL SET TEXT CBHNDL,10*nr + 1,STR$(freq) CASE 6 freq = task(%springtask1+nr).freq + .1 freq=ROUND(freq,1) task(%springtask1+nr).freq = freq CONTROL SET TEXT CBHNDL,10*nr + 1,STR$(freq) CASE 7 freq = task(%springtask1+nr).freq - .1 freq=ROUND(freq,1) IF freq<.2 THEN freq=.2 task(%springtask1+nr).freq = freq CONTROL SET TEXT CBHNDL,10*nr + 1,STR$(freq) CASE 8 freq = task(%springtask1+nr).freq - 5 freq=ROUND(freq,1) IF freq<.4 THEN freq=.4 task(%springtask1+nr).freq = freq CONTROL SET TEXT CBHNDL,10*nr + 1,STR$(freq) END SELECT END FUNCTION SUB ForSprings () ' procedure formerly called: SpringPiece () ' this piece is called <4 Springs> ' very dirty coding... STATIC cntRep AS LONG STATIC cntSpring AS LONG STATIC maxrep AS LONG STATIC sl0 AS LONG STATIC sl1 AS LONG STATIC delta1 AS SINGLE STATIC delta2 AS SINGLE STATIC delta3 AS SINGLE STATIC delta4 AS SINGLE STATIC speed1 AS SINGLE STATIC speed2 AS SINGLE STATIC speed3 AS SINGLE STATIC speed4 AS SINGLE STATIC MaxSpeed1 AS SINGLE STATIC MaxSpeed2 AS SINGLE STATIC MaxSpeed3 AS SINGLE STATIC MaxSpeed4 AS SINGLE LOCAL speedfaktor AS SINGLE IF ISFALSE task(%Springs_4Springs).tog THEN task(%Springs_4Springs).tog=%true cntRep =1 cntSpring =1 maxrep = 1 speed1 = .8 speed2 = .8 speed3 = .8 speed4 = .8 delta1 = 1.1 delta2 = 1.11 delta3 = 1.12 delta4 = 1.13 MaxSpeed1 = 25 MaxSpeed2 = 27 MaxSpeed3 = 29 MaxSpeed4 = 31 Slider(0).value = 64 '20 ' speed Slider(0).tag = "Speed" Slider(0).minval = 1 Slider(0).maxval = 127 Slider(1).value = 5 '40 ' level Slider(1).tag = "Level" Slider(1).minval = 1 Slider(1).maxval = 127 SendMessage Slider(0).h, %TBM_SETRANGE,%True, MakeLong(Slider(0).minval, Slider(0).maxval) SendMessage Slider(1).h, %TBM_SETRANGE,%True, MakeLong(Slider(1).minval, Slider(1).maxval) SendMessage Slider(0).h, %TBM_SETPOS,%True, Slider(0).value SendMessage Slider(1).h, %TBM_SETPOS,%True, Slider(1).value SetDlgItemText gh.Cockpit, %GMT_TEXT_SLIDER0, Slider(0).tag SetDlgItemText gh.Cockpit, %GMT_TEXT_SLIDER1, Slider(1).tag SetDlgItemText gh.Cockpit, %GMT_TITLE , "<4 Springs>" SetDlgItemText gh.Cockpit, %GMT_AUTHOR , $gwr END IF speedfaktor = Slider(0).value / 64 ' 0.016 to 1.98 IF speedfaktor < 0.2 THEN speedfaktor = 0.2 SELECT CASE cntSpring CASE 1 task(%springtask1).level = (Slider(1).value / 4) + ((128- Slider(0).value) * 3 / 4) ' was: velo1 mPlay Springers.channel, 120, task(%springtask1).level ' doet dit wat 'spring1' deed ??? INCR cntRep task(%Springs_4Springs).freq = speed1 * speedfaktor IF cntRep > maxrep THEN cntRep=1 speed1 = speed1 * delta1 IF speed1 > MaxSpeed1 THEN delta1 = .7 ' voor afbouw cntSpring = 1 + CINT((RND(1) * 5)) END IF CASE 2 task(%springtask2).level = (Slider(1).value / 4) + ((128- Slider(0).value) * 3 / 4) ' was : velo2 'spring2 mPlay Springers.channel, 121, task(%springtask2).level INCR cntRep task(%Springs_4Springs).freq = speed2 * speedfaktor IF cntRep > maxrep THEN cntRep = 1 speed2 = speed2 * delta2 IF speed2 > MaxSpeed2 THEN delta2 = .7 cntSpring = 1 + CINT((RND(1) * 5)) END IF CASE 3 task(%springtask3).level = (Slider(1).value / 4) + ((128- Slider(0).value) * 3 / 4)' was velo3 'spring3 mPlay Springers.channel, 122, task(%springtask3).level INCR cntRep task(%Springs_4Springs).freq = speed3 * speedfaktor IF cntRep > maxrep THEN cntRep = 1 speed3 = speed3 * delta3 IF speed3 > MaxSpeed3 THEN delta3 = .7 cntSpring = 1 + CINT((RND(1) * 5)) END IF CASE 4 task(%springtask4).level =(Slider(1).value / 4) + ((128- Slider(0).value) * 3 / 4) ' velo4 'spring4 mPlay Springers.channel, 123, task(%springtask4).level INCR cntRep task(%Springs_4Springs).freq = speed4 * speedfaktor IF cntRep > maxrep THEN cntRep = 1 speed4 = speed4 * delta4 IF speed4 > MaxSpeed4 THEN delta4 = .7 cntSpring = 1 + CINT((RND(1) * 5)) END IF CASE ELSE INCR MaxRep cntSpring = 1 + CINT((RND(1) * 5)) END SELECT ' nieuw 08.08.2001" Task(%Lighttask).level = Task(%Springs_4Springs).freq * 4 IF ISFALSE Task(%Lighttask).tog THEN starttask %Lighttask END SUB SUB ShakeIt () ' same code as previous maracaduo by kl. STATIC tog AS LONG STATIC sl0 AS LONG STATIC sl1 AS LONG IF ISFALSE task(%Springs_Shaky).tog THEN Slider(0).value = 20 Slider(1).value = 2 Slider(0).minval = 1 Slider(0).maxval = 127 'was = 12, incompatible with easy server controll. Slider(0).tag = "tempo" Slider(1).minval = 1 Slider(1).maxval = 127 Slider(1).tag = "level" SendMessage Slider(0).h, %TBM_SETRANGE,%True, MakeLong(Slider(0).minval, Slider(0).maxval) SendMessage Slider(1).h, %TBM_SETRANGE,%True, MakeLong(Slider(1).minval, Slider(1).maxval) SendMessage Slider(0).h, %TBM_SETPOS,%True, Slider(0).value SendMessage Slider(1).h, %TBM_SETPOS,%True, Slider(1).value SetDlgItemText gh.Cockpit, %GMT_TEXT_SLIDER0, Slider(0).tag SetDlgItemText gh.Cockpit, %GMT_TEXT_SLIDER1, Slider(1).tag SetDlgItemText gh.Cockpit, %GMT_TITLE , "" SetDlgItemText gh.Cockpit, %GMT_AUTHOR, $krl task(%Springs_Shaky).tog=%true END IF task(%Springs_Shaky).freq = slider(0).value / 10 ' limit shaking frequency: IF task(%Springs_Shaky).freq > 12 THEN task(%Springs_Shaky).freq = 12 task(%shakertask1).freq = slider(0).value/10 task(%shakertask2).freq = slider(0).value/9 task(%shakertask1).level = slider(1).value task(%shakertask2).level = slider(1).value IF slider(1).value THEN IF ISFALSE BIT(task(%shakertask1).swit, %TASK_ONOFF) THEN starttask %spr + 4 IF ISFALSE BIT(task(%shakertask2).swit, %TASK_ONOFF) THEN starttask %spr + 5 ELSE StopTask %shakertask1 StopTask %shakertask2 END IF END SUB SUB SpringShake () ' written by GWR - 12.10.2000 ' springshaketask = %sprpc + 2 ' This piece has 2 interactive parameters: global speed and velocity. STATIC f1 AS SINGLE STATIC fmax AS SINGLE ' maximum frequency for spring 4, the shortest spring STATIC f2 AS SINGLE STATIC f3 AS SINGLE STATIC f4 AS SINGLE STATIC sl0 AS LONG STATIC sl1 AS LONG STATIC counter AS DWORD STATIC sirentimer AS DWORD LOCAL ang AS DOUBLE LOCAL pitch AS WORD ' for siren LOCAL shake1flag AS BYTE LOCAL shake2flag AS BYTE LOCAL sirenflag AS BYTE LOCAL lightflag AS BYTE LOCAL track AS LONG IF ISFALSE Task(%SpringShake).tog THEN ShakeDown Slider(0).value = 1'20 ' speed Slider(0).tag = "Speed" Slider(0).minval = 1 Slider(0).maxval = 127 Slider(1).value = 5 '40 ' level Slider(1).tag = "Level" Slider(1).minval = 1 Slider(1).maxval = 127 SendMessage Slider(0).h, %TBM_SETRANGE,%True, MakeLong(Slider(0).minval, Slider(0).maxval) SendMessage Slider(1).h, %TBM_SETRANGE,%True, MakeLong(Slider(1).minval, Slider(1).maxval) SendMessage Slider(0).h, %TBM_SETPOS,%True, Slider(0).value SendMessage Slider(1).h, %TBM_SETPOS,%True, Slider(1).value SetDlgItemText gh.Cockpit, %GMT_TEXT_SLIDER0, Slider(0).tag SetDlgItemText gh.Cockpit, %GMT_TEXT_SLIDER1, Slider(1).tag SetDlgItemText gh.Cockpit, %GMT_TITLE , "" SetDlgItemText gh.Cockpit, %GMT_AUTHOR , $gwr counter = %False Task(%SpringShake).tog = %True END IF fmax = Slider(0).value / 2.54 ' thus 50Hz will be maximum frequency for spring 4 ' minimum will be 0.39 Hz f1 = fmax / 3.333333 f2 = fmax / 2.201011 ' E6 series f3 = fmax / 1.510101 f4 = fmax ang = counter / 100 ' 0 ' was 100 ' this value has to be checked carefully ' 6.28 = Pi2 is a full cycle Task(%springtask1).freq = f1*(ABS(SIN(f1 * ang))) ' spring 1 - rectified sinewave IF Task(%springtask1).freq < 0.056 THEN Task(%springtask1).freq = 0.056 Task(%springtask2).freq = f2* (ABS(SIN(f2 * ang))) ' spring 2 IF Task(%springtask2).freq < 0.068 THEN Task(%springtask2).freq = 0.68 Task(%springtask3).freq = f3* (ABS(SIN(f3 * ang))) ' spring 3 IF Task(%springtask3).freq < 0.082 THEN Task(%springtask3).freq = 0.082 Task(%springtask4).freq = f4* (ABS(SIN(f4 * ang))) ' spring 4 IF Task(%springtask4).freq < 0.1 THEN Task(%springtask4).freq = 0.1 Task(%springtask1).level = (Slider(1).value / 4) + ((128 - Slider(0).value)* 3 / 4) ' this formula makes the velocity go down with increasing frequency Task(%springtask2).level = (Slider(1).value / 4) + ((128 - Slider(0).value)* 3 / 4) Task(%springtask3).level = (Slider(1).value / 4) + ((128 - Slider(0).value)* 3 / 4) Task(%springtask4).level = (Slider(1).value / 4) + ((128 - Slider(0).value)* 3 / 4) IF ISFALSE task(%springtask1).tog THEN starttask %springtask1 END IF IF ISFALSE task(%springtask2).tog THEN starttask %springtask2 END IF IF ISFALSE Task(%springtask3).tog THEN starttask %springtask3 END IF IF ISFALSE Task(%springtask4).tog THEN starttask %springtask4 END IF ' now the conditional algorithm for the shakers and the siren sirenflag = %False shake1flag = %False shake2flag = %False lightflag = %False SELECT CASE ABS(Task(%springtask1).freq - Task(%springtask2).freq) CASE < 0.03 '0.1 INCR sirenflag INCR shake1flag CASE < 0.1 INCR shake2flag CASE > 5 INCR lightflag END SELECT SELECT CASE ABS(Task(%springtask3).freq - Task(%springtask4).freq) CASE < 0.03 '0.1 INCR sirenflag INCR shake1flag CASE < 0.1 INCR shake2flag CASE > 5 INCR lightflag END SELECT SELECT CASE ABS(Task(%springtask1).freq - Task(%springtask3).freq) CASE < 0.03 '1 INCR sirenflag INCR shake1flag CASE < 0.1 ' was 0.3 INCR shake2flag CASE > 5 INCR lightflag END SELECT SELECT CASE ABS(Task(%springtask1).freq - Task(%springtask4).freq) CASE < 0.03 INCR sirenflag INCR shake1flag CASE < 0.1 INCR shake2flag CASE > 5 INCR lightflag END SELECT IF sirenflag = 4 THEN ' sound siren with frequency derived from frequencies of springs pitch =Task(%springtask1).freq + Task(%springtask2).freq + Task(%springtask3).freq + Task(%springtask4).freq 'Springers_siren pitch ' dll procedure - uses Exp.Port 2 on multiplexboard. - PWM modulator. mPlay Springers.channel, 1, pitch sirentimer = timeGetTime + 4000 ' in milliseconds ELSE ' stop siren (but if it was on, we should give it time to come to speed...) IF timeGetTime > sirentimer THEN 'Springers_siren %False mPlay Springers.channel, 1, %False sirentimer = %False END IF END IF IF lightflag THEN ' this cannot happen with the siren on pitch = (lightflag * 31) AND 254 'springers_light pitch mPlay Springers.channel, 2, pitch ELSE mPlay Springers.channel, 2, %False END IF IF shake1flag THEN ' start shake 1 Task(%shakertask1).freq = shake1flag Task(%shakertask1).level = slider(1).value IF ISFALSE Task(%shakertask1).tog THEN starttask %shakertask1 END IF ELSE ' stop shake 1 IF Task(%shakertask1).tog THEN stoptask %shakertask1 ShakeDown END IF END IF IF shake2flag THEN ' start shake 2 Task(%shakertask2).freq = shake2flag Task(%shakertask2).level = slider(1).value IF ISFALSE Task(%shakertask2).tog THEN StartTask %shakertask2 END IF ELSE IF Task(%shakertask2).tog THEN StopTask %shakertask2 ShakeDown END IF END IF INCR counter END SUB SUB SpringShake_Stop () EXPORT ' this procedure is called on reception of a TaskStopcommand in the DLL proc StopTask StopTask %springtask1 StopTask %springtask2 StopTask %springtask3 StopTask %springtask4 StopTask %shakertask1 ' shaker 1 StopTask %shakertask2 ' shakersdown: ShakeDown ' light off Noteoff Springers.channel, 2 'springers_light %True ' siren off NoteOff Springers.channel, 1 'Springers_siren %False ' we could also reset all startup parameters for this piece. END SUB SUB ForSprings_Stop () EXPORT ' this procedure is called on reception of a TaskStopcommand in the DLL proc StopTask StopTask %springtask1 StopTask %springtask2 StopTask %springtask3 StopTask %springtask4 ' light off mPlay Springers.channel, 2, %False END SUB SUB ShakeIt_Stop () EXPORT ' this procedure is called on reception of a TaskStopcommand in the DLL proc StopTask StopTask %shakertask1 StopTask %shakertask2 END SUB SUB StartSirenTest DIM TaskParamLabels(0 TO 1) AS ASCIIZ * 8 task(%sirentask).level = 1 TaskParamLabels(0) = "level" TaskParamLabels(1) = "dur" IF ISFALSE Task(%sirtst).hParam THEN MakeTaskParameterdialog %sirtst,2,Slider(),0,UDctrl(),Taskparamlabels() END IF slider(TaskEX(%sirtst).SliderNumbers(0)).value = 1 slider(TaskEX(%sirtst).SliderNumbers(1)).value = 1 SendMessage Slider(TaskEX(%sirtst).SliderNumbers(0)).h, %TBM_SETPOS,%True, 1 SendMessage Slider(TaskEX(%sirtst).SliderNumbers(1)).h, %TBM_SETPOS,%True, 1 task(%sirtst).level = 1 task(%sirtst).duur = 1 StartTask %sirentask END SUB SUB SirenTest STATIC dur AS DWORD task(%sirentask).level = slider(TaskEx(%sirtst).SliderNumbers(0)).value task(%sirentask).duur = slider(TaskEx(%sirtst).SliderNumbers(1)).value / 5 'limitation: if the user stays to long on a high value we reset the slider to 1 IF task(%sirentask).level > 64 THEN IF ISFALSE dur THEN dur = TIMER ELSEIF (TIMER - dur) > 10 THEN slider(TaskEX(%sirtst).SliderNumbers(0)).value = 1 SendMessage Slider(TaskEX(%sirtst).SliderNumbers(0)).h, %TBM_SETPOS,%True, 1 dur = %false END IF END IF CONTROL SET TEXT gh.cockpit, %GMT_MSG1, STR$(task(%sirentask).level) CONTROL SET TEXT gh.cockpit, %GMT_MSG2, STR$(task(%sirentask).duur) END SUB SUB StopSirenTest () task(%sirtst).level = 0 task(%sirtst).duur = 0 CALL DWORD task(%sirentask).cptr StopTask %sirentask END SUB SUB StartLightTest () DIM TaskParamLabels(0 TO 0) AS ASCIIZ * 8 task(%Lighttask).level = 1 TaskParamLabels(0) = "level" ' TaskParamLabels(1) = "dur" IF ISFALSE Task(%Lighttst).hParam THEN MakeTaskParameterdialog %lighttst,1,Slider(),0,UDctrl(),Taskparamlabels() END IF slider(TaskEX(%Lighttst).SliderNumbers(0)).value = 2 ' slider(TaskEX(%Lighttst).SliderNumbers(1)).value = 1 SendMessage Slider(TaskEX(%Lighttst).SliderNumbers(0)).h, %TBM_SETPOS,%True, 1 ' SendMessage Slider(TaskEX(%Lighttst).SliderNumbers(1)).h, %TBM_SETPOS,%True, 1 task(%Lighttst).level = 1 ' task(%Lighttst).duur = 1 StartTask %Lighttask END SUB SUB LightTest task(%Lighttask).level = slider(TaskEx(%Lighttst).SliderNumbers(0)).value IF ISFALSE task(%Lighttask).swit THEN StartTask %Lighttask ' task(%Lighttask).duur = slider(TaskEx(%Lighttst).SliderNumbers(1)).value CONTROL SET TEXT gh.cockpit, %GMT_MSG1, STR$(task(%Lighttask).level) ' CONTROL SET TEXT gh.cockpit, %GMT_MSG2, STR$(task(%sirentask).duur) END SUB SUB StopLightTest task(%Lighttst).level = 0 ' task(%Lighttst).duur = 0 StopTask %Lighttask END SUB ' coding for twin towers by G.-W.Raes. SUB TwinTow_1 () ' for piperola STATIC Mel1() AS BYTE STATIC tog AS DWORD IF ISFALSE tog THEN REDIM Mel1(0 TO 11) AS STATIC BYTE Mel1(0)= 60 : Mel1(1) = 61 : Mel1(2) = 62 : Mel1(3)=65 Mel1(4)=68 : Mel1(5) =70 : Mel1(6) = 76 : Mel1(7)=78 Mel1(8) = 79 : Mel1(9) = 81 : Mel1(10) =83 : Mel1(11)= 87 tog = %True END IF END SUB SUB TwinTow_2 () ' for piperola STATIC Mel2() AS BYTE STATIC tog AS DWORD IF ISFALSE tog THEN REDIM Mel2(0 TO 11) AS STATIC BYTE Mel2(0)= 63 : Mel2(1) = 67 : Mel2(2) = 69 : Mel2(3)=71 Mel2(4)=72 : Mel2(5) =74 : Mel2(6) = 80 : Mel2(7)=82 Mel2(8) = 85 : Mel2(9) = 88 : Mel2(10) =89 : Mel2(11)= 90 tog = %True END IF END SUB SUB Shakedown () mPlay Springers.channel, 124, 100 ' tentative mPlay Springers.channel, 126, 100 END SUB 'te midificeren ex-dlkl taken SUB spring1 () EXPORT ' task code. IF ISFALSE(Task(%springtask1).level) THEN EXIT SUB IF ISFALSE Task(%springtask1).tog THEN Task(%springtask1).tog = %True IF Task(%springtask1).freq > 60 THEN 'we still should check out the real max value... Task(%springtask1).freq = 60 EXIT SUB END IF mPlay Springers.channel, 120, Task(%springtask1).level END SUB SUB spring2 () EXPORT IF ISFALSE(Task(%springtask2).level) THEN EXIT SUB IF ISFALSE Task(%springtask2).tog THEN Task(%springtask2).tog = %True IF Task(%springtask2).freq > 60 THEN 'we still should check out the real max value... Task(%springtask2).freq = 60 EXIT SUB END IF mPlay Springers.channel, 121, Task(%springtask2).level END SUB SUB spring3 () EXPORT IF ISFALSE(Task(%springtask3).level) THEN EXIT SUB IF ISFALSE Task(%springtask3).tog THEN Task(%springtask3).tog = %True IF Task(%springtask3).freq > 60 THEN 'we still should check out the real max value... Task(%springtask3).freq = 60 EXIT SUB END IF mPlay Springers.channel, 122, Task(%springtask3).level END SUB SUB spring4 () EXPORT IF ISFALSE(Task(%springtask4).level) THEN EXIT SUB IF ISFALSE Task(%springtask4).tog THEN Task(%springtask4).tog = %True IF Task(%springtask4).freq > 60 THEN 'we still should check out the real max value... Task(%springtask4).freq = 60 EXIT SUB END IF mPlay Springers.channel, 123, Task(%springtask4).level END SUB SUB shake1 () EXPORT 'calls dll's shaker1 STATIC tog AS DWORD IF ISFALSE(Task(%shakertask1).level) THEN EXIT SUB IF Task(%shakertask1).freq > 6 THEN 'we still should check out the real max value... Task(%shakertask1).freq = 6 EXIT SUB END IF IF ISFALSE tog THEN mPlay Springers.channel, 124, Task(%springtask4).level 'down tog = %true ELSE mPlay Springers.channel, 125, Task(%springtask4).level 'up IF IsShaker1Up THEN tog = %false END IF END SUB SUB shake2 () EXPORT STATIC tog AS DWORD IF ISFALSE(Task(%shakertask2).level) THEN EXIT SUB IF Task(%shakertask2).freq > 6 THEN 'we still should check out the real max value... Task(%shakertask2).freq = 6 EXIT SUB END IF IF ISFALSE tog THEN mPlay Springers.channel, 126, Task(%springtask4).level tog = %true ELSE mPlay Springers.channel, 127, Task(%springtask4).level IF IsShaker2Up THEN tog = %false END IF END SUB SUB SPR_light_task () EXPORT 'voorlopig noot implementatie - moet pitchbend worden (?) LOCAL value AS BYTE STATIC oldvalue AS BYTE IF ISFALSE Task(%lighttask).tog THEN Task(%lighttask).tog = %true value = Task(%lighttask).level AND 254 ' = &HFE IF Task(%lighttask).freq > 4 THEN Task(%lighttask).freq = 4 IF value <=1 THEN oldvalue = %False mPlay Springers.channel,2, 0 ' light off StopTask %lighttask EXIT SUB END IF value = 35 + (value * 0.7) SHIFT LEFT value, 1 IF value <> oldvalue THEN mPlay Springers.channel,2, value oldvalue = value END IF END SUB SUB SPR_Siren_task () EXPORT 'task.level contains the value that should be reached in task.duur seconds 'task.duur is reset when destination is reached LOCAL value AS DWORD STATIC oldvalue AS DWORD STATIC COUNT AS SINGLE STATIC FromValue AS SINGLE 'value from where we are coming STATIC LastDest AS LONG 'wanted destination on last call ' here also we pass the value for the siren via Task.level IF ISFALSE Task(%sirentask).tog THEN Task(%sirentask).tog = %true value = 1 oldvalue = 1 lastdest = 1 END IF IF LastDest <> Task(%sirentask).level THEN '.level has changed we move from were we where to new .level in .duur time LastDest = Task(%sirentask).level FromValue = OldValue COUNT = %false END IF IF ISFALSE Task(%sirentask).duur THEN value = Task(%sirentask).level fromvalue = value COUNT = %false ELSE COUNT = COUNT + (1 / Task(%sirentask).freq) value = fromvalue + (Task(%sirentask).level - fromvalue) * (COUNT / Task(%sirentask).duur) END IF IF value > 127 THEN value = 127 IF COUNT >= Task(%sirentask).duur THEN 'destination reached FromValue = value COUNT = %false Task(%sirentask).duur = %false END IF IF value <> oldvalue THEN mPlay Springers.channel, 1, value ' original mapping on note 1, now 24 should also work. oldvalue = value END IF END SUB FUNCTION IsShaker1Up () EXPORT AS LONG 'this function returns true when the shaker velo is big enough to make the shaker stay up at the current shaker frequency FUNCTION = %false SELECT CASE Task(%shakertask1).freq CASE > 5.9 FUNCTION = %true:EXIT FUNCTION CASE > 5.4 IF Task(%shakertask1).level > 20 THEN FUNCTION = %true:EXIT FUNCTION CASE > 4.4 IF Task(%shakertask1).level > 25 THEN FUNCTION = %true:EXIT FUNCTION CASE > 3.9 IF Task(%shakertask1).level > 27 THEN FUNCTION = %true:EXIT FUNCTION CASE > 3.4 IF Task(%shakertask1).level > 31 THEN FUNCTION = %true:EXIT FUNCTION CASE > 2.9 IF Task(%shakertask1).level > 36 THEN FUNCTION = %true:EXIT FUNCTION CASE > 2.4 IF Task(%shakertask1).level > 44 THEN FUNCTION = %true:EXIT FUNCTION CASE > 1.9 IF Task(%shakertask1).level > 53 THEN FUNCTION = %true:EXIT FUNCTION CASE > 1.4 IF Task(%shakertask1).level > 67 THEN FUNCTION = %true:EXIT FUNCTION CASE ELSE IF Task(%shakertask1).level > 55 THEN FUNCTION = %true END SELECT END FUNCTION FUNCTION IsShaker2Up () EXPORT AS LONG FUNCTION = %false SELECT CASE Task(%shakertask2).freq CASE > 5.9 FUNCTION=%true: EXIT FUNCTION CASE > 5.4 IF Task(%shakertask2).level > 11 THEN FUNCTION=%true: EXIT FUNCTION CASE > 4.9 IF Task(%shakertask2).level > 15 THEN FUNCTION=%true: EXIT FUNCTION CASE > 4.4 IF Task(%shakertask2).level > 26 THEN FUNCTION=%true: EXIT FUNCTION CASE > 3.4 IF Task(%shakertask2).level > 36 THEN FUNCTION=%true: EXIT FUNCTION CASE > 2.9 IF Task(%shakertask2).level > 56 THEN FUNCTION=%true: EXIT FUNCTION CASE > 2.4 IF Task(%shakertask2).level > 66 THEN FUNCTION=%true: EXIT FUNCTION CASE > 1.9 IF Task(%shakertask2).level > 84 THEN FUNCTION=%true: EXIT FUNCTION CASE ELSE IF Task(%shakertask2).level > 80 THEN FUNCTION=%true END SELECT END FUNCTION ' tasks for the new implementation and mapping: SUB Springer1() STATIC slnr AS DWORD IF ISFALSE Task(%Springer1).tog THEN DIM TaskParamLabels(0 TO 1) AS ASCIIZ * 8 TaskParamLabels(0) = "speed" TaskParamLabels(1) = "velo" IF ISFALSE Task(%Springer1).hParam THEN MakeTaskParameterdialog %Springer1,2,Slider(),0,UDctrl(),Taskparamlabels() END IF slider(TaskEX(%Springer1).SliderNumbers(0)).value = 2 slider(TaskEX(%Springer1).SliderNumbers(1)).value = 1 SendMessage Slider(TaskEX(%Springer1).SliderNumbers(0)).h, %TBM_SETPOS,%True, 1 SendMessage Slider(TaskEX(%Springer1).SliderNumbers(1)).h, %TBM_SETPOS,%True, 1 slnr = TaskEX(%Springer1).SliderNumbers(0) Task(%Springer1).tog = %True END IF mPlay Springers.channel, 36, Slider(slnr+1).value Task(%Springer1).freq = MAX(1, Slider(slnr).value / 3) END SUB SUB Springer2 () STATIC slnr AS DWORD IF ISFALSE Task(%Springer2).tog THEN DIM TaskParamLabels(0 TO 1) AS ASCIIZ * 8 TaskParamLabels(0) = "speed" TaskParamLabels(1) = "velo" IF ISFALSE Task(%Springer2).hParam THEN MakeTaskParameterdialog %Springer2,2,Slider(),0,UDctrl(),Taskparamlabels() END IF slider(TaskEX(%Springer2).SliderNumbers(0)).value = 2 slider(TaskEX(%Springer2).SliderNumbers(1)).value = 1 SendMessage Slider(TaskEX(%Springer2).SliderNumbers(0)).h, %TBM_SETPOS,%True, 1 SendMessage Slider(TaskEX(%Springer2).SliderNumbers(1)).h, %TBM_SETPOS,%True, 1 slnr = TaskEX(%Springer2).SliderNumbers(0) Task(%Springer2).tog = %True END IF mPlay Springers.channel, 37, Slider(slnr+1).value Task(%Springer2).freq = MAX(1, Slider(slnr).value / 3) END SUB SUB Springer3 () STATIC slnr AS DWORD IF ISFALSE Task(%Springer3).tog THEN DIM TaskParamLabels(0 TO 1) AS ASCIIZ * 8 TaskParamLabels(0) = "speed" TaskParamLabels(1) = "velo" IF ISFALSE Task(%Springer3).hParam THEN MakeTaskParameterdialog %Springer3,2,Slider(),0,UDctrl(),Taskparamlabels() END IF slider(TaskEX(%Springer3).SliderNumbers(0)).value = 2 slider(TaskEX(%Springer3).SliderNumbers(1)).value = 1 SendMessage Slider(TaskEX(%Springer3).SliderNumbers(0)).h, %TBM_SETPOS,%True, 1 SendMessage Slider(TaskEX(%Springer3).SliderNumbers(1)).h, %TBM_SETPOS,%True, 1 slnr = TaskEX(%Springer3).SliderNumbers(0) Task(%Springer3).tog = %True END IF mPlay Springers.channel, 38, Slider(slnr+1).value Task(%Springer3).freq = MAX(1, Slider(slnr).value / 3) END SUB SUB springer4 () STATIC slnr AS DWORD IF ISFALSE Task(%Springer4).tog THEN DIM TaskParamLabels(0 TO 1) AS ASCIIZ * 8 TaskParamLabels(0) = "speed" TaskParamLabels(1) = "velo" IF ISFALSE Task(%Springer4).hParam THEN MakeTaskParameterdialog %Springer4,2,Slider(),0,UDctrl(),Taskparamlabels() END IF slider(TaskEX(%Springer4).SliderNumbers(0)).value = 2 slider(TaskEX(%Springer4).SliderNumbers(1)).value = 1 SendMessage Slider(TaskEX(%Springer4).SliderNumbers(0)).h, %TBM_SETPOS,%True, 1 SendMessage Slider(TaskEX(%Springer4).SliderNumbers(1)).h, %TBM_SETPOS,%True, 1 slnr = TaskEX(%Springer4).SliderNumbers(0) Task(%Springer4).tog = %True END IF mPlay Springers.channel, 39, Slider(slnr+1).value Task(%Springer4).freq = MAX(1, Slider(slnr).value / 3) END SUB SUB Springer5 () STATIC slnr AS DWORD IF ISFALSE Task(%Springer5).tog THEN DIM TaskParamLabels(0 TO 1) AS ASCIIZ * 8 TaskParamLabels(0) = "speed" TaskParamLabels(1) = "velo" IF ISFALSE Task(%Springer5).hParam THEN MakeTaskParameterdialog %Springer5,2,Slider(),0,UDctrl(),Taskparamlabels() END IF slider(TaskEX(%Springer5).SliderNumbers(0)).value = 2 slider(TaskEX(%Springer5).SliderNumbers(1)).value = 1 SendMessage Slider(TaskEX(%Springer5).SliderNumbers(0)).h, %TBM_SETPOS,%True, 1 SendMessage Slider(TaskEX(%Springer5).SliderNumbers(1)).h, %TBM_SETPOS,%True, 1 slnr = TaskEX(%Springer5).SliderNumbers(0) Task(%Springer5).tog = %True END IF mPlay Springers.channel, 40, Slider(slnr+1).value Task(%Springer5).freq = MAX(1, Slider(slnr).value / 3) END SUB SUB Springer6 () STATIC slnr AS DWORD IF ISFALSE Task(%Springer6).tog THEN DIM TaskParamLabels(0 TO 1) AS ASCIIZ * 8 TaskParamLabels(0) = "speed" TaskParamLabels(1) = "velo" IF ISFALSE Task(%Springer6).hParam THEN MakeTaskParameterdialog %Springer6,2,Slider(),0,UDctrl(),Taskparamlabels() END IF slider(TaskEX(%Springer6).SliderNumbers(0)).value = 2 slider(TaskEX(%Springer6).SliderNumbers(1)).value = 1 SendMessage Slider(TaskEX(%Springer6).SliderNumbers(0)).h, %TBM_SETPOS,%True, 1 SendMessage Slider(TaskEX(%Springer6).SliderNumbers(1)).h, %TBM_SETPOS,%True, 1 slnr = TaskEX(%Springer6).SliderNumbers(0) Task(%Springer6).tog = %True END IF mPlay Springers.channel, 41, Slider(slnr+1).value Task(%Springer6).freq = MAX(1, Slider(slnr).value / 3) END SUB SUB Shaker1 () STATIC slnr AS DWORD STATIC cnt AS LONG IF ISFALSE Task(%Shaker1).tog THEN DIM TaskParamLabels(0 TO 1) AS ASCIIZ * 8 TaskParamLabels(0) = "speed" TaskParamLabels(1) = "velo" IF ISFALSE Task(%Shaker1).hParam THEN MakeTaskParameterdialog %Shaker1,2,Slider(),0,UDctrl(),Taskparamlabels() END IF slider(TaskEX(%Shaker1).SliderNumbers(0)).value = 2 slider(TaskEX(%Shaker1).SliderNumbers(1)).value = 1 SendMessage Slider(TaskEX(%Shaker1).SliderNumbers(0)).h, %TBM_SETPOS,%True, 1 SendMessage Slider(TaskEX(%Shaker1).SliderNumbers(1)).h, %TBM_SETPOS,%True, 1 slnr = TaskEX(%Shaker1).SliderNumbers(0) cnt = %False Task(%Shaker1).tog = %True END IF IF cnt MOD 2 THEN mPlay Springers.channel, 72, Slider(slnr+1).value ELSE mPlay Springers.channel, 73, Slider(slnr+1).value END IF INCR cnt Task(%Shaker1).freq = MAX(1, Slider(slnr).value / 3) END SUB SUB Shaker2 () STATIC slnr AS DWORD STATIC cnt AS LONG IF ISFALSE Task(%Shaker2).tog THEN DIM TaskParamLabels(0 TO 1) AS ASCIIZ * 8 TaskParamLabels(0) = "speed" TaskParamLabels(1) = "velo" IF ISFALSE Task(%Shaker2).hParam THEN MakeTaskParameterdialog %Shaker2,2,Slider(),0,UDctrl(),Taskparamlabels() END IF slider(TaskEX(%Shaker2).SliderNumbers(0)).value = 2 slider(TaskEX(%Shaker2).SliderNumbers(1)).value = 1 SendMessage Slider(TaskEX(%Shaker2).SliderNumbers(0)).h, %TBM_SETPOS,%True, 1 SendMessage Slider(TaskEX(%Shaker2).SliderNumbers(1)).h, %TBM_SETPOS,%True, 1 slnr = TaskEX(%Shaker2).SliderNumbers(0) cnt = %False Task(%Shaker2).tog = %True END IF IF cnt MOD 2 THEN mPlay Springers.channel, 79, Slider(slnr+1).value ELSE mPlay Springers.channel, 80, Slider(slnr+1).value END IF INCR cnt Task(%Shaker2).freq = MAX(1, Slider(slnr).value / 3) END SUB SUB Sirene() STATIC slnr AS DWORD STATIC pitch AS LONG STATIC pbend AS LONG IF ISFALSE Task(%Sirene).tog THEN DIM TaskParamLabels(0 TO 1) AS ASCIIZ * 8 TaskParamLabels(0) = "pitch" TaskParamLabels(1) = "pbend" IF ISFALSE Task(%Sirene).hParam THEN MakeTaskParameterdialog %Sirene,2,Slider(),0,UDctrl(),Taskparamlabels() END IF slider(TaskEX(%Sirene).SliderNumbers(0)).value = 0 slider(TaskEX(%Sirene).SliderNumbers(1)).value = 0 SendMessage Slider(TaskEX(%Sirene).SliderNumbers(0)).h, %TBM_SETPOS,%True, 1 SendMessage Slider(TaskEX(%Sirene).SliderNumbers(1)).h, %TBM_SETPOS,%True, 1 slnr = TaskEX(%Sirene).SliderNumbers(0) Task(%Sirene).tog = %True END IF IF pitch <> Slider(slnr).value THEN mPlay Springers.channel, 24, Slider(slnr).value pitch = Slider(slnr).value END IF IF pbend <> Slider(slnr+1).value THEN Bend Springers.channel, %False, Slider(slnr+1).value ' lsb - msb ! pbend = Slider(slnr+1).value END IF Task(%Sirene).freq = 14 END SUB SUB Sirene_off () NoteOff Springers.channel, 24 ' was 1 '? switched on with note 24? END SUB SUB Police_Light () STATIC slnr AS DWORD IF ISFALSE Task(%Light).tog THEN DIM TaskParamLabels(0) AS ASCIIZ * 8 TaskParamLabels(0) = "speed" IF ISFALSE Task(%Light).hParam THEN MakeTaskParameterdialog %Light,1,Slider(),0,UDctrl(),Taskparamlabels() END IF slider(TaskEX(%Light).SliderNumbers(0)).value = 2 SendMessage Slider(TaskEX(%Light).SliderNumbers(0)).h, %TBM_SETPOS,%True, 1 slnr = TaskEX(%Light).SliderNumbers(0) Task(%Light).tog = %True END IF IF Springers.ctrl(70) <> Slider(slnr).value THEN Controller Springers.channel, 70, Slider(slnr).value Springers.ctrl(70) = Slider(slnr).value END IF Task(%Light).freq = 14 END SUB SUB Police_light_off () Springers.ctrl(70) = %False NoteOff Springers.channel, 2 END SUB '[EOF]