CALLBACK FUNCTION ProcManageWindows IF CBCTLMSG <> %BN_CLICKED THEN EXIT FUNCTION SELECT CASE CBCTL CASE 0 CASE 1 IF hwKey(1) THEN DIALOG END hwKey(1) hwKey(1) = %false ELSE hwKey(1) = MW_Klung_Create_Window END IF CASE 2 IF hwKey(2) THEN DIALOG END hwKey(2) hwKey(2) = %false Piper_Silence ELSE hwKey(2) = MW_Piper_Create_Window END IF IF hwKey(5) THEN 'for bourdon!!! (NOT cfr. mc(%cTroms): troms) DIALOG END hwKey(5) hwKey(5) = %false Bourd_Silence ELSE hwKey(5) = MW_Bourdon_Create_Window END IF CASE 3, 5, 9 IF hwKey(3) THEN DIALOG END hwKey(3) hwKey(3) = %false ELSE hwKey(3) = MW_Thunderwood_Troms_Create_Window END IF CASE 4 CASE 6 IF hwKey(6) THEN DIALOG END hwKey(6) hwKey(6) = %false Huma_Silence ELSE hwKey(6) = MW_Humanola_Create_Window END IF CASE 7 CASE 8 IF hwKey(8) THEN DIALOG END hwKey(8) hwKey(8) = %false ELSE hwKey(8) = MW_Belly_Create_Window END IF CASE 10 IF hwKey(10) THEN DIALOG END hwKey(10) hwKey(10) = %false ELSE hwKey(10) = MW_Tubi_Create_Window END IF CASE 11 IF hwKey(11) THEN DIALOG END hwKey(11) hwKey(11) = %false ELSE hwKey(11) = MW_So_Create_Window END IF CASE %cTrump IF hwKey(%cTrump) THEN DIALOG END hwKey(%cTrump) hwKey(%cTrump) = %false ELSE hwKey(%cTrump) = MW_Trump_Create_Window END IF END SELECT END FUNCTION SUB Mw_Tw_WindRain STATIC this AS LONG STATIC TaskParamLabels() AS ASCIIZ * 8 STATIC LastWind AS BYTE STATIC LastRain AS BYTE STATIC LastStorm AS BYTE STATIC Lastsiren AS BYTE STATIC LastLight AS BYTE STATIC cnt AS DWORD LOCAL lightout AS BYTE LOCAL i AS LONG IF ISFALSE this THEN this = %mw_tw DIM TaskParamLabels(5) TaskPAramLabels(0) = "Wind" TaskParamLabels(1) = "Rain" TaskParamLabels(2) = "Storm" TaskParamLabels(3) = "Bird" TaskParamLabels(4) = "Siren" TaskParamLAbels(5) = "Light" MakeTaskParameterDialog BYVAL this,6,Slider(),0,UDctrl(),TaskParamLabels() FOR i = 0 TO UBOUND(TaskParamLAbels) Slider(TaskEx(this).Slidernumbers(i)).value = 0 SendMessage Slider(TaskEx(this).Slidernumbers(i)).h, %TBM_SETPOS,%True, Slider(TaskEx(this).Slidernumbers(i)).value NEXT task(this).tog = %true END IF IF LastRain THEN IF SQR(RND) < LastRain/127 THEN mPlay mc(%cThunderwood).channel, 16, 64 END IF END IF INCR cnt IF BIT(cnt, 0) THEN EXIT SUB '1/2 > 10 Hz IF RND^2 > (1 - Slider(TaskEX(this).SliderNumbers(3)).value/127) THEN mPlay mc(%cThunderwood).channel, 22, INT(5 + RND * 30) END IF IF BIT(cnt, 1) THEN EXIT SUB '1/4 > 5 Hz IF Slider(TaskEx(this).SliderNumbers(0)).value <> LastWind THEN LastWind = Slider(TaskEx(this).SliderNumbers(0)).value mPlay mc(%cThunderwood).channel, 24, LastWind END IF IF Slider(TaskEx(this).SliderNumbers(1)).value <> LastRain THEN LastRain = Slider(TaskEx(this).SliderNumbers(1)).value ModeMess mc(%cThunderwood).channel, 7, BYVAL LastRain/3 END IF IF SLider(TaskEx(this).SliderNumbers(2)).value <> LastStorm THEN LastStorm = Slider(TaskEx(this).SliderNumbers(2)).value mPlay mc(%cThunderwood).channel, 25, LastStorm END IF IF SLider(TaskEx(this).SliderNumbers(4)).value <> LastSiren THEN LastSiren = Slider(TaskEx(this).SliderNumbers(4)).value mPlay mc(%cSpringers).channel, 1, LastSiren END IF IF SLider(TaskEx(this).SliderNumbers(5)).value <> LastLight THEN LastLight = Slider(TaskEx(this).SliderNumbers(5)).value LightOut = LastLight IF Lightout THEN BIT RESET LightOut, 0 mPlay mc(%cSpringers).channel, 2, LightOut END IF END SUB FUNCTION MW_Klung_Create_Window AS LONG LOCAL hw_klung AS LONG DIALOG NEW 0, "Klung Control Window",0,0, 175, 65 TO hw_Klung ', WinStyle, %WS_EX_TOPMOST TO hw_klung DIALOG SHOW MODELESS hw_klung CALL MW_KlungProc clearwindow hw_klung, &H9999AA mw_klung_showHelp hw_klung FUNCTION = hw_Klung END FUNCTION FUNCTION MW_Piper_Create_Window AS LONG LOCAL hw_pip AS LONG DIALOG NEW 0, "Piperola Control Window",0,87, 223, 50 TO hw_pip ', WinStyle, %WS_EX_TOPMOST TO hw_klung DIALOG SHOW MODELESS hw_pip CALL MW_PiperProc clearwindow hw_pip, &H9999AA mw_organ_showhelp hw_pip FUNCTION = hw_pip END FUNCTION FUNCTION MW_Bourdon_Create_Window AS LONG LOCAL hw_brd AS LONG DIALOG NEW 0, "Bourdon Control Window",0,154, 223, 50 TO hw_brd ', WinStyle, %WS_EX_TOPMOST TO hw_klung DIALOG SHOW MODELESS hw_brd CALL MW_BourdProc clearwindow hw_brd, &H9999AA mw_organ_showhelp hw_brd FUNCTION = hw_brd END FUNCTION FUNCTION MW_Humanola_Create_Window AS LONG LOCAL hw_hum AS LONG DIALOG NEW 0, "Humanola Control Window",0,221, 223, 50 TO hw_hum ', WinStyle, %WS_EX_TOPMOST TO hw_klung DIALOG SHOW MODELESS hw_hum CALL MW_HumaProc clearwindow hw_hum, &H9999AA mw_organ_showhelp hw_hum FUNCTION = hw_hum END FUNCTION FUNCTION MW_Thunderwood_Troms_Create_Window AS LONG LOCAL hw_tw AS LONG DIALOG NEW 0, "Troms & Thunderwood Control Window",185,0, 175, 85 TO hw_tw ', WinStyle, %WS_EX_TOPMOST TO hw_klung DIALOG SHOW MODELESS hw_tw CALL MW_TW_troms_Proc clearwindow hw_tw, &H9999AA mw_tw_troms_showhelp hw_tw FUNCTION = hw_tw END FUNCTION FUNCTION MW_Belly_Create_Window AS LONG LOCAL hw_belly AS LONG DIALOG NEW 0, "Belly Control Window",230,95, 150, 65 TO hw_belly ', WinStyle, %WS_EX_TOPMOST TO hw_klung DIALOG SHOW MODELESS hw_belly CALL MW_BellyProc clearwindow hw_belly, &H9999AA mw_Belly_showHelp hw_belly FUNCTION = hw_Belly END FUNCTION FUNCTION MW_Tubi_Create_Window AS LONG LOCAL hw_tubi AS LONG DIALOG NEW 0, "Tubi Control Window", 230, 165, 150, 65 TO hw_tubi DIALOG SHOW MODELESS hw_tubi CALL MW_TubiPRoc clearwindow hw_tubi, &H9999AA mw_tubi_showHelp hw_Tubi FUNCTION = hw_tubi END FUNCTION FUNCTION MW_So_Create_Window AS LONG LOCAL hw_So AS LONG DIALOG NEW 0, "So Control Window",0,0, 230, 65 TO hw_so ', WinStyle, %WS_EX_TOPMOST TO hw_klung DIALOG SHOW MODELESS hw_so CALL MW_SoProc clearwindow hw_So, &H9999AA mw_So_showHelp hw_So FUNCTION = hw_So END FUNCTION FUNCTION MW_Trump_Create_Window AS LONG LOCAL hw_trump AS LONG DIALOG NEW 0, "Trump Control Window", 230, 235, 223, 50 TO hw_trump DIALOG SHOW MODELESS hw_trump CALL MW_TrumpProc clearwindow hw_trump, &H9999AA mw_organ_showhelp hw_trump FUNCTION = hw_trump END FUNCTION CALLBACK FUNCTION MW_KlungProc LOCAL buf AS STRING STATIC note AS BYTE STATIC velo AS BYTE LOCAL hbrush AS LONG LOCAL hdc AS LONG LOCAL x AS LONG, y AS LONG SELECT CASE CBMSG CASE %WM_SETFOCUS IF ISFALSE velo THEN velo = 14 ClearWindow CBHNDL, &H9999AA hDc = getDC(CBHNDL) x = 150: y = 45 DIALOG UNITS CBHNDL, x, y TO PIXELS x, y setbkcolor hdc, &H9999AA: settextcolor hdc, &H3366AA buf = FORMAT$(velo , "000") 'STR$(task(%mw_ctrl_klung).level, 3) textout hdc, x, y, BYCOPY buf, LEN(buf) releasedc CBHNDL, hdc MW_Klung_ShowHelp CBHNDL CASE %WM_KEYDOWN SELECT CASE CBWPARAM CASE %VK_0 TO %VK_Z note = MW_Melo_VirtKey2Note(CBWPARAM, 48) CASE %VK_UP INCR velo BIT RESET velo, 7 CASE %VK_DOWN DECR velo BIT RESET velo, 7 CASE ELSE EXIT FUNCTION END SELECT hdc = getdc(CBHNDL) setbkcolor hdc, &H9999AA: settextcolor hdc, &H3366AA x = 150: y = 45 DIALOG UNITS CBHNDL, x, y TO PIXELS x, y buf = FORMAT$(velo , "000") 'STR$(task(%mw_ctrl_klung).level, 3) textout hdc, x, y, BYCOPY buf, LEN(buf) releasedc CBHNDL, hdc IF CBWPARAM < %VK_0 OR CBWPARAM > %VK_Z THEN EXIT FUNCTION IF note THEN mPlay mc(1).channel, note, velo END SELECT END FUNCTION CALLBACK FUNCTION MW_PiperProc LOCAL buf AS STRING LOCAL note AS BYTE STATIC velo AS BYTE LOCAL hbrush AS LONG LOCAL hdc AS LONG LOCAL x AS LONG, y AS LONG SELECT CASE CBMSG CASE %WM_SETFOCUS ClearWindow CBHNDL, &H9999AA mw_organ_showhelp CBHNDL hdc = getdc(CBHNDL) setbkcolor hdc, &H9999AA: settextcolor hdc, &H3366AA x = 150: y = 35 DIALOG UNITS CBHNDL, x, y TO PIXELS x, y buf = FORMAT$(velo , "000") 'STR$(task(%mw_ctrl_klung).level, 3) textout hdc, x, y, BYCOPY buf, LEN(buf) releasedc CBHNDL, hdc CASE %WM_KEYDOWN SELECT CASE CBWPARAM CASE %VK_0 TO %VK_Z note = MW_Melo_VirtKey2Note(CBWPARAM, 72) 'WE CAN ONLY USE 2 OCTAVES!! CASE %VK_UP INCR velo BIT RESET velo, 7 mc(2).ctrl(7) = velo Piperolawind mc(2) ', velo CASE %VK_DOWN DECR velo BIT RESET velo, 7 mc(2).ctrl(7) = velo Piperolawind mc(2)', velo CASE ELSE EXIT FUNCTION END SELECT IF note THEN mPlay mc(2).channel, note, 64 hdc = getdc(CBHNDL) setbkcolor hdc, &H9999AA: settextcolor hdc, &H3366AA x = 150: y = 35 DIALOG UNITS CBHNDL, x, y TO PIXELS x, y buf = FORMAT$(velo , "000") 'STR$(task(%mw_ctrl_klung).level, 3) textout hdc, x, y, BYCOPY buf, LEN(buf) releasedc CBHNDL, hdc CASE %WM_KEYUP IF CBWPARAM < %VK_0 OR CBWPARAM > %VK_Z THEN EXIT FUNCTION note = MW_Melo_VirtKey2Note(CBWPARAM, 72) IF note THEN NoteOff mc(2).channel, note ', 0 'Play mc(2).channel, note, 0 END SELECT END FUNCTION CALLBACK FUNCTION MW_BourdProc LOCAL buf AS STRING STATIC note AS BYTE LOCAL hbrush AS LONG LOCAL hdc AS LONG LOCAL x AS LONG, y AS LONG SELECT CASE CBMSG CASE %WM_SETFOCUS ClearWindow CBHNDL, &H9999AA mw_organ_showhelp CBHNDL CASE %WM_KEYDOWN SELECT CASE CBWPARAM CASE %VK_0 TO %VK_Z note = MW_Melo_VirtKey2Note(CBWPARAM, 36) 'WE CAN ONLY USE 2 OCTAVES!! CASE ELSE EXIT FUNCTION END SELECT IF note THEN mPlay mc(2).channel, note, 64 CASE %WM_KEYUP IF CBWPARAM < %VK_0 OR CBWPARAM > %VK_Z THEN EXIT FUNCTION note = MW_Melo_VirtKey2Note(CBWPARAM, 36) IF note THEN NoteOff mc(2).channel, note ', 0 END SELECT END FUNCTION CALLBACK FUNCTION MW_HumaProc LOCAL buf AS STRING LOCAL note AS BYTE STATIC velo AS BYTE LOCAL hbrush AS LONG LOCAL hdc AS LONG LOCAL x AS LONG, y AS LONG SELECT CASE CBMSG CASE %WM_SETFOCUS ClearWindow CBHNDL, &H9999AA mw_organ_showhelp CBHNDL hdc = getdc(CBHNDL) setbkcolor hdc, &H9999AA: settextcolor hdc, &H3366AA x = 150: y = 35 DIALOG UNITS CBHNDL, x, y TO PIXELS x, y buf = FORMAT$(velo , "000") 'STR$(task(%mw_ctrl_klung).level, 3) textout hdc, x, y, BYCOPY buf, LEN(buf) releasedc CBHNDL, hdc CASE %WM_KEYDOWN SELECT CASE CBWPARAM CASE %VK_0 TO %VK_Z note = MW_Melo_VirtKey2Note(CBWPARAM, 60) 'WE CAN ONLY USE 2 OCTAVES!! CASE %VK_UP INCR velo BIT RESET velo, 7 mc(6).ctrl(7) = velo Humanolawind mc(6) ', velo CASE %VK_DOWN DECR velo BIT RESET velo, 7 mc(6).ctrl(7) = velo Humanolawind mc(6)', velo CASE ELSE EXIT FUNCTION END SELECT hdc = getdc(CBHNDL) setbkcolor hdc, &H9999AA: settextcolor hdc, &H3366AA x = 150: y = 35 DIALOG UNITS CBHNDL, x, y TO PIXELS x, y buf = FORMAT$(velo , "000") 'STR$(task(%mw_ctrl_klung).level, 3) textout hdc, x, y, BYCOPY buf, LEN(buf) releasedc CBHNDL, hdc IF CBWPARAM < %VK_0 OR CBWPARAM > %VK_Z THEN EXIT FUNCTION IF note THEN mPlay mc(6).channel, note, 64 CASE %WM_KEYUP IF CBWPARAM < %VK_0 OR CBWPARAM > %VK_Z THEN EXIT FUNCTION note = MW_Melo_VirtKey2Note(CBWPARAM, 60) IF note THEN NoteOff mc(6).channel, note ', 0 END SELECT END FUNCTION CALLBACK FUNCTION MW_BellyProc LOCAL buf AS STRING STATIC note AS BYTE STATIC velo AS BYTE LOCAL hbrush AS LONG LOCAL hdc AS LONG LOCAL x AS LONG, y AS LONG SELECT CASE CBMSG CASE %WM_SETFOCUS ClearWindow CBHNDL, &H9999AA mw_belly_showhelp CBHNDL IF ISFALSE velo THEN velo = 1 hdc = getdc(CBHNDL) setbkcolor hdc, &H9999AA: settextcolor hdc, &H3366AA x = 130: y = 45 DIALOG UNITS CBHNDL, x, y TO PIXELS x, y buf = FORMAT$(velo , "000") 'STR$(task(%mw_ctrl_klung).level, 3) textout hdc, x, y, BYCOPY buf, LEN(buf) releasedc CBHNDL, hdc CASE %WM_KEYDOWN SELECT CASE CBWPARAM CASE %VK_0 TO %VK_Z note = MW_Linear_VirtKey2Note(CBWPARAM, mc(%cBelly).lowtes) 'WE CAN ONLY USE 2 OCTAVES!! mPlay mc(%cBelly).channel, note, velo CASE %VK_UP INCR velo BIT RESET velo, 7 CASE %VK_DOWN DECR velo BIT RESET velo, 7 CASE ELSE EXIT FUNCTION END SELECT hdc = getdc(CBHNDL) setbkcolor hdc, &H9999AA: settextcolor hdc, &H3366AA x = 130: y = 45 DIALOG UNITS CBHNDL, x, y TO PIXELS x, y buf = FORMAT$(velo , "000") 'STR$(task(%mw_ctrl_klung).level, 3) textout hdc, x, y, BYCOPY buf, LEN(buf) releasedc CBHNDL, hdc END SELECT END FUNCTION CALLBACK FUNCTION MW_TW_troms_Proc LOCAL buf AS STRING STATIC note AS BYTE STATIC velo AS BYTE STATIC strobotog AS BYTE LOCAL hbrush AS LONG LOCAL hdc AS LONG LOCAL x AS LONG, y AS LONG SELECT CASE CBMSG CASE %WM_SETFOCUS ClearWindow CBHNDL, &H9999AA mw_tw_troms_showhelp CBHNDL IF ISFALSE velo THEN velo = 20 hdc = GetDC(CBHNDL) x = 130: y = 58 DIALOG UNITS CBHNDL, x, y TO PIXELS x, y setbkcolor hdc, &H9999AA: settextcolor hdc, &H3366AA buf = FORMAT$(velo , "000") 'STR$(task(%mw_ctrl_klung).level, 3) textout hdc, x, y, BYCOPY buf, LEN(buf) releaseDC CBHNDL, hDC CASE %WM_KEYDOWN SELECT CASE CBWPARAM CASE %VK_0 TO %VK_Z note = MW_TW_Troms_VirtKey2Note(CBWPARAM) 'WE CAN ONLY USE 2 OCTAVES!! CASE %VK_UP INCR velo BIT RESET velo, 7 CASE %VK_DOWN DECR velo BIT RESET velo, 7 CASE ELSE EXIT FUNCTION END SELECT hdc = GetDC(CBHNDL) setbkcolor hdc, &H9999AA: settextcolor hdc, &H3366AA buf = FORMAT$(velo , "000") 'STR$(task(%mw_ctrl_klung).level, 3) x = 130: y = 58 DIALOG UNITS CBHNDL, x, y TO PIXELS x, y textout hdc, x, y, BYCOPY buf, LEN(buf) releaseDC CBHNDL, hDC IF CBWPARAM < %VK_0 OR CBWPARAM > %VK_Z THEN EXIT FUNCTION IF note THEN IF note < 24 THEN 'tw mPlay mc(%cThunderwood).channel, note, velo ELSEIF note = &HFF THEN 'tw's virtkey2note returns OxFF for 0 (lightning..) strobotog = NOT(strobotog) AND &H7F mPlay mc(%cThunderwood).channel, 0, strobotog ELSEIF note > 119 THEN 'springers mPlay mc(%cSpringers).channel, note, velo ELSE 'troms mPlay mc(%cTroms).channel, note, velo END IF END IF CASE %WM_KEYUP IF CBWPARAM < %VK_0 OR CBWPARAM > %VK_Z THEN EXIT FUNCTION note = MW_Tw_Troms_VirtKey2Note(CBWPARAM) IF (note = 16) OR (note = 24) THEN NoteOff mc(%cThunderwood).channel, note ', 0 END SELECT END FUNCTION CALLBACK FUNCTION mw_TubiProc LOCAL buf AS STRING LOCAL note AS BYTE STATIC velo AS BYTE STATIC strobotog AS BYTE LOCAL hbrush AS LONG LOCAL hdc AS LONG LOCAL x AS LONG, y AS LONG SELECT CASE CBMSG CASE %WM_SETFOCUS IF ISFALSE velo THEN velo = 20 ClearWindow CBHNDL, &H9999AA mw_tubi_showhelp CBHNDL IF ISFALSE velo THEN velo = 20 hdc = GetDC(CBHNDL) x = 130: y = 45 DIALOG UNITS CBHNDL, x, y TO PIXELS x, y setbkcolor hdc, &H9999AA: settextcolor hdc, &H3366AA buf = FORMAT$(velo , "000") 'STR$(task(%mw_ctrl_klung).level, 3) textout hdc, x, y, BYCOPY buf, LEN(buf) releaseDC CBHNDL, hDC CASE %WM_KEYDOWN SELECT CASE CBWPARAM ' CASE %VK_0 TO %VK_Z ' note = MW_Tubi_VirtKey2Note(CBWPARAM) 'WE CAN ONLY USE 2 OCTAVES!! CASE %VK_UP INCR velo BIT RESET velo, 7 CASE %VK_DOWN DECR velo BIT RESET velo, 7 CASE ELSE note = MW_Tubi_Virtkey2Note(CBWPARAM) END SELECT hdc = GetDC(CBHNDL) setbkcolor hdc, &H9999AA: settextcolor hdc, &H3366AA buf = FORMAT$(velo , "000") 'STR$(task(%mw_ctrl_klung).level, 3) x = 130: y = 45 DIALOG UNITS CBHNDL, x, y TO PIXELS x, y textout hdc, x, y, BYCOPY buf, LEN(buf) releaseDC CBHNDL, hDC ' IF CBWPARAM < %VK_0 OR CBWPARAM > %VK_Z THEN EXIT FUNCTION IF note THEN mPlay mc(%cTubi).channel, note, velo END SELECT END FUNCTION CALLBACK FUNCTION MW_SoProc LOCAL buf AS STRING STATIC note AS BYTE STATIC velo AS BYTE LOCAL hbrush AS LONG LOCAL hdc AS LONG LOCAL x AS LONG, y AS LONG SELECT CASE CBMSG CASE %WM_SETFOCUS IF ISFALSE velo THEN velo = 14 ClearWindow CBHNDL, &H9999AA hDc = getDC(CBHNDL) x = 150: y = 45 DIALOG UNITS CBHNDL, x, y TO PIXELS x, y setbkcolor hdc, &H9999AA: settextcolor hdc, &H3366AA buf = FORMAT$(velo , "000") 'STR$(task(%mw_ctrl_klung).level, 3) textout hdc, x, y, BYCOPY buf, LEN(buf) releasedc CBHNDL, hdc MW_So_ShowHelp CBHNDL CASE %WM_KEYDOWN SELECT CASE CBWPARAM CASE %VK_0 TO %VK_Z note = MW_Melo_VirtKey2Note(CBWPARAM, 12) CASE %VK_UP INCR velo BIT RESET velo, 7 CASE %VK_DOWN DECR velo BIT RESET velo, 7 CASE ELSE EXIT FUNCTION END SELECT hdc = getdc(CBHNDL) setbkcolor hdc, &H9999AA: settextcolor hdc, &H3366AA x = 150: y = 45 DIALOG UNITS CBHNDL, x, y TO PIXELS x, y buf = FORMAT$(velo , "000") 'STR$(task(%mw_ctrl_klung).level, 3) textout hdc, x, y, BYCOPY buf, LEN(buf) releasedc CBHNDL, hdc IF CBWPARAM < %VK_0 OR CBWPARAM > %VK_Z THEN EXIT FUNCTION IF note THEN AddNote2Har mc(%cSo).Har(1), note, velo So_Play mc(%cSo) END IF CASE %WM_KEYUP SO_Play mc(%cSo) END SELECT END FUNCTION CALLBACK FUNCTION MW_TrumpProc LOCAL buf AS STRING LOCAL note AS BYTE STATIC velo AS BYTE LOCAL hbrush AS LONG LOCAL hdc AS LONG LOCAL x AS LONG, y AS LONG SELECT CASE CBMSG CASE %WM_SETFOCUS ClearWindow CBHNDL, &H9999AA mw_organ_showhelp CBHNDL hdc = getdc(CBHNDL) setbkcolor hdc, &H9999AA: settextcolor hdc, &H3366AA x = 150: y = 35 DIALOG UNITS CBHNDL, x, y TO PIXELS x, y buf = FORMAT$(velo , "000") 'STR$(task(%mw_ctrl_klung).level, 3) textout hdc, x, y, BYCOPY buf, LEN(buf) releasedc CBHNDL, hdc CASE %WM_KEYDOWN SELECT CASE CBWPARAM CASE %VK_0 TO %VK_Z note = MW_Melo_VirtKey2Note(CBWPARAM, 36) 'WE CAN ONLY USE 2 OCTAVES!! CASE %VK_UP INCR velo BIT RESET velo, 7 mc(%cTrump).ctrl(7) = velo ModeMess mc(%cTrump).channel, 7, velo ', velo CASE %VK_DOWN DECR velo BIT RESET velo, 7 mc(%cTrump).ctrl(7) = velo ModeMess mc(%cTrump).channel, 7, velo ', velo CASE ELSE EXIT FUNCTION END SELECT hdc = getdc(CBHNDL) setbkcolor hdc, &H9999AA: settextcolor hdc, &H3366AA x = 150: y = 35 DIALOG UNITS CBHNDL, x, y TO PIXELS x, y buf = FORMAT$(velo , "000") 'STR$(task(%mw_ctrl_klung).level, 3) textout hdc, x, y, BYCOPY buf, LEN(buf) releasedc CBHNDL, hdc IF CBWPARAM < %VK_0 OR CBWPARAM > %VK_Z THEN EXIT FUNCTION IF note THEN mPlay mc(%cTrump).channel, note, 64 CASE %WM_KEYUP IF CBWPARAM < %VK_0 OR CBWPARAM > %VK_Z THEN EXIT FUNCTION note = MW_Melo_VirtKey2Note(CBWPARAM, 36) IF note THEN NoteOff mc(%cTrump).channel, note ', 0 END SELECT END FUNCTION SUB mw_klung_showhelp (hw AS LONG) LOCAL buf AS STRING * 26 LOCAL ch AS STRING * 1 LOCAL i AS LONG LOCAL hdc AS LONG LOCAL x AS LONG, y AS LONG hdc = getdc(hw) setbkcolor hdc, &H9999AA buf = " x cv b n mq w er t y" FOR i = 1 TO LEN(buf) x = 7 * i: y = 17 ch = MID$(buf, i, 1) DIALOG UNITS hw, x, y TO PIXELS x, y settextcolor hdc, &HFFFFFF textout hdc, x, y, BYCOPY ch, 1 NEXT settextcolor hdc, &H000000 buf = " s d g h j 2 3 5 " FOR i = 1 TO LEN(buf) x = 7 * i: y = 5 ch = MID$(buf, i, 1) DIALOG UNITS hw, x, y TO PIXELS x, y textout hdc, x, y, BYCOPY ch, 1 NEXT settextcolor hdc, &H336666 x = 7: y = 45 DIALOG UNITS hw, x, y TO PIXELS x, y buf = "U/D = incr/decr velocity" textout hdc, x, y, BYCOPY buf, LEN(buf) releasedc hw, hdc END SUB SUB mw_organ_showhelp (hw AS LONG) LOCAL buf AS STRING * 30 LOCAL ch AS STRING * 1 LOCAL i AS LONG LOCAL hdc AS LONG LOCAL x AS LONG, y AS LONG hdc = getdc(hw) setbkcolor hdc, &H9999AA buf = "z x cv b n mq w er t y ui o p" FOR i = 1 TO LEN(buf) x = 7 * i: y = 17 ch = MID$(buf, i, 1) DIALOG UNITS hw, x, y TO PIXELS x, y settextcolor hdc, &HFFFFFF textout hdc, x, y, BYCOPY ch, 1 NEXT settextcolor hdc, &H000000 buf = " s d g h j 2 3 5 6 7 9 0" FOR i = 1 TO LEN(buf) x = 7 * i: y = 5 ch = MID$(buf, i, 1) DIALOG UNITS hw, x, y TO PIXELS x, y textout hdc, x, y, BYCOPY ch, 1 NEXT settextcolor hdc, &H336666 x = 7: y = 35 DIALOG UNITS hw, x, y TO PIXELS x, y buf = "U/D = incr/decr velocity" textout hdc, x, y, BYCOPY buf, LEN(buf) releasedc hw, hdc END SUB SUB mw_tw_troms_showhelp (hw AS LONG) LOCAL buf AS STRING *42 LOCAL i AS LONG LOCAL hdc AS LONG LOCAL x AS LONG, y AS LONG hdc = getdc(hw) setbkcolor hdc, &H9999AA buf = "troms: 4 5 6 7 8 9 0" x = 40: y = 5 DIALOG UNITS hw, x, y TO PIXELS x, y textout hdc, x, y, BYCOPY buf, 23 buf = "thunder: e light: r springs: u i o p" x = 7 : y = 19 DIALOG UNITS hw, x, y TO PIXELS x, y settextcolor hdc, &H000000 textout hdc, x, y, BYCOPY buf, 42 buf = "ratcher: s chimes: d shakers: h j k l" x = 7: y = 31 DIALOG UNITS hw, x, y TO PIXELS x, y textout hdc, x, y, BYCOPY buf, 42 buf = "woodblocks: z x c v" x = 7: y = 43 DIALOG UNITS hw, x, y TO PIXELS x, y textout hdc, x, y, BYCOPY buf, 20 settextcolor hdc, &H336666 x = 7: y = 58 DIALOG UNITS hw, x, y TO PIXELS x, y buf = "U/D = incr/decr velocity" textout hdc, x, y, BYCOPY buf, LEN(buf) releasedc hw, hdc END SUB SUB mw_belly_showhelp (hw AS LONG) LOCAL buf AS STRING * 26 LOCAL ch AS STRING * 1 LOCAL i AS LONG LOCAL hdc AS LONG LOCAL x AS LONG, y AS LONG hdc = getdc(hw) setbkcolor hdc, &H9999AA buf = "z -> 7" FOR i = 1 TO LEN(buf) x = 7 * i: y = 17 ch = MID$(buf, i, 1) DIALOG UNITS hw, x, y TO PIXELS x, y settextcolor hdc, &HFFFFFF textout hdc, x, y, BYCOPY ch, 1 NEXT settextcolor hdc, &H336666 x = 7: y = 45 DIALOG UNITS hw, x, y TO PIXELS x, y buf = "U/D = incr/decr velocity" textout hdc, x, y, BYCOPY buf, LEN(buf) releasedc hw, hdc END SUB SUB mw_tubi_showhelp(hw AS LONG) LOCAL buf AS STRING * 26 LOCAL ch AS STRING * 1 LOCAL i AS LONG LOCAL hdc AS LONG LOCAL x AS LONG, y AS LONG hdc = getdc(hw) setbkcolor hdc, &H9999AA buf = "z -> 7" FOR i = 1 TO LEN(buf) x = 7 * i: y = 17 ch = MID$(buf, i, 1) DIALOG UNITS hw, x, y TO PIXELS x, y settextcolor hdc, &HFFFFFF textout hdc, x, y, BYCOPY ch, 1 NEXT buf = "L/R: octave select (0, 1, 2)" textout hdc, x, y, BYCOPY buf, LEN(buf) settextcolor hdc, &H336666 x = 7: y = 45 DIALOG UNITS hw, x, y TO PIXELS x, y buf = "U/D = incr/decr velocity" textout hdc, x, y, BYCOPY buf, LEN(buf) releasedc hw, hdc END SUB SUB ClearWindow (hw AS LONG, bgcolor AS DWORD) LOCAL hbrush AS LONG LOCAL hdc AS LONG LOCAL x AS LONG, y AS LONG DIALOG GET CLIENT hw TO x,y DIALOG UNITS hw, x, y TO PIXELS x, y hBrush = CreateSolidBrush(BYVAL bgcolor) hDc = getDC(hw) hBrush = SelectObject (hDc, hBrush) PatBlt hDC, 0, 0, x, y, &H00F00021 '=%PATCOPY '%WHITENESS DeleteObject Selectobject(hDC, hBrush) ReleaseDC hw, hdc END SUB FUNCTION MW_Melo_VirtKey2Note(VK AS LONG, lowC AS BYTE) AS BYTE LOCAL note AS BYTE SELECT CASE VK CASE %VK_Z 'do note = lowC '48 CASE %VK_S note = lowC + 1 '49 CASE %VK_X note = lowC + 2 CASE %VK_D note = lowC + 3 CASE %VK_C note = lowC + 4 CASE %VK_V note = lowC + 5 CASE %VK_G note = lowC + 6 CASE %VK_B note = lowC + 7 CASE %VK_H note = lowC + 8 CASE %VK_N note = lowC + 9 CASE %VK_J note = lowC + 10 CASE %VK_M note = lowC + 11 CASE %VK_Q 'do note = lowC + 12 CASE %VK_2 note = lowC + 13 CASE %VK_W note = lowC + 14 CASE %VK_3 note = lowC + 15 CASE %VK_E note = lowC + 16 CASE %VK_R note = lowC + 17 CASE %VK_5 note = lowC + 18 CASE %VK_T note = lowC + 19 CASE %VK_6 note = lowC + 20 CASE %VK_Y note = lowC + 21 CASE %VK_7 note = lowC + 22 CASE %VK_U note = lowC + 23 CASE %VK_I note = lowC + 24 CASE %VK_9 note = lowC + 25 CASE %VK_O note = lowC + 26 CASE %VK_0 note = lowC + 27 CASE %VK_P note = lowC + 28 CASE ELSE note = 0 END SELECT FUNCTION = note END FUNCTION FUNCTION MW_Linear_VirtKey2Note(VK AS LONG, lowC AS BYTE) AS BYTE LOCAL note AS BYTE SELECT CASE VK CASE %VK_Z 'do note = lowC '48 CASE %VK_X note = lowC + 1 '49 CASE %VK_C note = lowC + 2 CASE %VK_V note = lowC + 3 CASE %VK_B note = lowC + 4 CASE %VK_N note = lowC + 5 CASE %VK_M note = lowC + 6 CASE %VK_A note = lowC + 7 CASE %VK_S note = lowC + 8 CASE %VK_D note = lowC + 9 CASE %VK_F note = lowC + 10 CASE %VK_G note = lowC + 11 CASE %VK_H 'do note = lowC + 12 CASE %VK_J note = lowC + 13 CASE %VK_K note = lowC + 14 CASE %VK_L note = lowC + 15 CASE %VK_Q note = lowC + 16 CASE %VK_W note = lowC + 17 CASE %VK_E note = lowC + 18 CASE %VK_R note = lowC + 19 CASE %VK_T note = lowC + 20 CASE %VK_Y note = lowC + 21 CASE %VK_U note = lowC + 22 CASE %VK_I note = lowC + 23 CASE %VK_O note = lowC + 24 CASE %VK_P note = lowC + 25 CASE %VK_1 note = lowC + 26 CASE %VK_2 note = lowC + 27 CASE %VK_3 note = lowC + 28 CASE %VK_4 note = lowC + 29 CASE %VK_5 note = lowC + 30 CASE %VK_6 note = lowC + 31 CASE %VK_7 note = lowC + 32 CASE %VK_8 note = lowC + 33 CASE %VK_9 note = lowC + 34 CASE %VK_0 note = lowC + 35 CASE ELSE note = 0 END SELECT FUNCTION = note END FUNCTION FUNCTION mw_tubi_Virtkey2note(VK AS LONG)AS BYTE LOCAL x AS BYTE LOCAL noot AS BYTE STATIC centr AS BYTE IF VK = %VK_RIGHT THEN centr = MIN(24, centr + 12) ELSEIF VK = %VK_LEFT THEN centr = MAX(0, centr - 12) END IF x = mw_linear_Virtkey2note(VK, + 1) IF ISFALSE x THEN ' msgbox hex$(VK),, funcname$ ELSEIF BIT(x, 0) THEN noot = 36 + centr + x \ 2 ELSE noot = 72 + centr + x \ 2 END IF FUNCTION = noot END FUNCTION FUNCTION MW_TW_Troms_VirtKey2Note(VK AS LONG) AS BYTE LOCAL note AS BYTE SELECT CASE VK CASE %VK_z 'woodblocks note = 2 CASE %VK_x note = 7 CASE %VK_c note = 11 CASE %VK_v note = 13 CASE %VK_s 'ratchet note = 15 CASE %VK_d 'chimes note = 17 CASE %VK_e 'thundersheet note = 19 CASE %VK_r 'lightning note = &HFF 'should be 0, but 0 in virtkey2note meant 'no note'.. CASE %VK_4 'troms note = 25 CASE %VK_5 note = 31 CASE %VK_6 note = 35 CASE %VK_7 note = 39 CASE %VK_8 note = 42 CASE %VK_9 note = 44 CASE %VK_0 note = 46 CASE %VK_U note = 120 CASE %VK_I note = 121 CASE %VK_O note = 122 CASE %VK_P note = 123 CASE %VK_H note = 125 CASE %VK_J note = 124 CASE %VK_K note = 127 CASE %VK_L note = 126 END SELECT FUNCTION = note END FUNCTION SUB mw_so_showhelp (hw AS LONG) LOCAL buf AS STRING * 30 LOCAL ch AS STRING * 1 LOCAL i AS LONG LOCAL hdc AS LONG LOCAL x AS LONG, y AS LONG hdc = getdc(hw) setbkcolor hdc, &H9999AA buf = "z x cv b n mq w er t y ui o p" FOR i = 1 TO LEN(buf) x = 7 * i: y = 17 ch = MID$(buf, i, 1) DIALOG UNITS hw, x, y TO PIXELS x, y settextcolor hdc, &HFFFFFF textout hdc, x, y, BYCOPY ch, 1 NEXT settextcolor hdc, &H000000 buf = " s d g h j 2 3 5 6 7 9 0" FOR i = 1 TO LEN(buf) x = 7 * i: y = 5 ch = MID$(buf, i, 1) DIALOG UNITS hw, x, y TO PIXELS x, y textout hdc, x, y, BYCOPY ch, 1 NEXT settextcolor hdc, &H336666 x = 7: y = 35 DIALOG UNITS hw, x, y TO PIXELS x, y buf = "U/D = incr/decr velocity" textout hdc, x, y, BYCOPY buf, LEN(buf) releasedc hw, hdc END SUB SUB CQT_Mon STATIC hw AS LONG STATIC rslt AS LONG STATIC arr() AS SINGLE STATIC oldvel AS STRING * 128 LOCAL i AS LONG LOCAL area AS rectl LOCAL x AS LONG, y AS LONG IF ISFALSE hw THEN DIALOG NEW gh.cockpit, "CQT_Mon",,,205, 100, %WS_THICKFRAME TO hw DIALOG PIXELS hw, 250, 250 TO UNITS x, y DIALOG SET SIZE hw, x, y CONTROL ADD LABEL, hw, -1, "vol[0-127]", 5, 1, 50, 12 CONTROL ADD LABEL, hw, -1, "tes[0-4000]log", x/3, 1, 50, 12 CONTROL ADD LABEL, hw, -1, "events\dsec", 2*x/3, 1, 50, 12 DIALOG SHOW MODELESS hw TO rslt ' DrawBarChart 0, area, arr() 'should be in stopcptr also DIM arr(14) END IF IF rslt THEN hw = %false StopTask %CqtMon END IF DIALOG GET SIZE hw TO x, y y = y - 30 DIALOG UNITS hw, x, y TO PIXELS x, Area.nBottom area.ntop = 25: area.nleft = 5: area.nright = 230 IF Task(%cqtLst).Har.vel <> Oldvel THEN Oldvel = Task(%cqtLst).Har.vel ShowHar Task(%cQtLst).Har, 1,140,2! END IF i = 0 IF MW_MidiIn.Vol / 127 <> Arr(0) THEN Arr(0) = MW_MidiIn.Vol / 127: i = 1 IF SQR(MW_MidiIn.Tes / 4000) <> Arr(1) THEN Arr(1) = SQR(MW_MidiIn.Tes / 4000): i = 1 IF MW_MidiIn.Dens / 100 <> Arr(2)THEN Arr(2) = MW_MidiIn.Dens / 100: i = 1 POKE$ VARPTR(arr(3)), PEEK$(VARPTR(TesWeight(0)), (UBOUND(TesWeight) + 1) * 4) IF i THEN DrawBarChart hw, area, arr() END SUB SUB MW_radar_ii_VU () 'copy from quadrada ' VU-monitor procedure as used in Quadrada . STATIC resolution AS DWORD STATIC v% STATIC h%, bw%, Sp% LOCAL il?, H1% LOCAL hBrush AS LONG LOCAL hDC AS LONG LOCAL versize% LOCAL hOldBrush AS LONG LOCAL t AS DWORD DIM point(0 TO 7) AS LOCAL INTEGER IF ISFALSE Task(%Sonar_VU_Task).tog THEN resolution = 7 '9 v% = 2^resolution 'v% = 512 ' for 9 bit resolution IF ISFALSE Task(%Sonar_VU_Task).hParam THEN Task(%Sonar_VU_Task).hParam = Make_ii_VU_Window (resolution) ' in g_hgen.inc h% = 1 ' horizontal start position for VU-graph bw% = 14 ' 7 ' breedte van de balkjes Sp% = 5 ' spatie tussen de balkjes task(%Sonar_VU_Task).freq = 8 task(%Sonar_VU_Task).tog = %True END IF hDC = GetDC (Task(%Sonar_VU_Task).hParam) ' blank existing graph: PatBlt hDC, h%,0,h% + ((bw%+ Sp%)*16) ,v%,%WHITENESS point(0)= @pr(0).xal point(1)= @pr(0).yal point(2)= @pr(1).xal point(3)= @pr(1).yal point(4)= @pr(2).xal point(5)= @pr(2).yal point(6)= @pr(3).xal point(7)= @pr(3).yal FOR il? = 0 TO 7 SELECT CASE il? CASE 0, 1 hBrush = CreateSolidBrush (%GREEN) CASE 2, 3 hBrush = CreateSolidBrush (%BLUE) CASE 4,5 hBrush = CreateSolidBrush (%YELLOW) CASE 6,7 hBrush = CreateSolidBrush (%RED) END SELECT hOldBrush = SelectObject (hDC, hBrush) H1% = h% + (il? * bw%) versize% = v% - point(il?) Rectangle hDC, H1%, v%, H1%+Sp%, versize% SelectObject hDC, hOldBrush DeleteObject hBrush NEXT il? ReleaseDC Task(%Sonar_VU_Task).hParam, hDC END SUB SUB MW_radar_Mon () 'copy from quadrada ' monitor procedure for Quadrada - displays bar-graph of analysis results STATIC resolution AS DWORD STATIC v% STATIC h%, bw%, Sp% LOCAL il?, H1% LOCAL hBrush AS LONG LOCAL hDC AS LONG LOCAL versize% LOCAL hOldBrush AS LONG LOCAL t AS DWORD DIM point(0 TO 7) AS LOCAL INTEGER IF ISFALSE Task(%Sonar_Display_Task).tog THEN resolution = 7 '9 v% = 2^resolution 'v% = 512 ' for 9 bit resolution IF ISFALSE(Task(%Sonar_VU_Task).hParam) THEN Task(%Sonar_VU_Task).hParam = Make_ii_VU_Window (resolution) ' in g_hgen.inc Task(%Sonar_Display_Task).hparam = Task(%Sonar_VU_Task).hParam h% = 1 ' horizontal start position for VU-graph bw% = 14 ' breedte van de balkjes Sp% = 5 ' spatie tussen de balkjes task(%Sonar_Display_Task).freq = 8 task(%Sonar_Display_Task).tog = %True END IF hDC = GetDC (Task(%Sonar_Display_Task).hParam) ' blank existing graph: PatBlt hDC, h%,0,h% + ((bw%+ Sp%)*16) ,v%,%WHITENESS point(0)= MIN(@pr(0).s,128) point(1)= MIN(@pr(1).s,128) point(2)= MIN(@pr(2).s,128) point(3)= MIN(@pr(3).s,128) point(4)= MIN(@pr(0).vf ,128) point(5)= MIN(@pr(1).vf ,128) point(6)= MIN(@pr(2).vf ,128) point(7)= MIN(@pr(3).vf ,128) FOR il? = 0 TO 7 SELECT CASE il? CASE 0, 4 hBrush = CreateSolidBrush (%GREEN) CASE 1,5 hBrush = CreateSolidBrush (%BLUE) CASE 2,6 hBrush = CreateSolidBrush (%YELLOW) CASE 3,7 hBrush = CreateSolidBrush (%RED) END SELECT hOldBrush = SelectObject (hDC, hBrush) H1% = h% + (il? * bw%) versize% = v% - point(il?) Rectangle hDC, H1%, v%, H1%+Sp%, versize% SelectObject hDC, hOldBrush DeleteObject hBrush NEXT il? ReleaseDC Task(%Sonar_Display_Task).hParam, hDC END SUB SUB MW_radar_Screen () IF ISFALSE gh.spec THEN MakeSpectrumWindow Draw_QuadRadar_square gh.spec , BYVAL pr(0) ' in g_glib.dll - pr() is a pointer array END SUB