Key Switches for 20 Groups

I have set up keyswitches and UI Buttons for different groups and they work great as most of my instruments only have a few groups to switch from. However I have a few patches that have about 20 groups and the way I have it scripted, it would be a huge task to replicate it for 20 groups. Just wondering if there is a better way at doing this for larger numbers? I am super new to scripting.
{==========================KeySwitches============================} declare const $keyswitch1 := 0 declare const $keyswitch2 := 1 declare const $keyswitch3 := 2 set_key_color($keyswitch1, $KEY_COLOR_RED) set_key_color($keyswitch2, $KEY_COLOR_RED) set_key_color($keyswitch3, $KEY_COLOR_RED) declare $current_state {==========================Key Switch Info============================} declare const $hx := 100 declare const $hy := 10 declare ui_label $label_T (1,1) set_control_par(get_ui_id($label_T),$CONTROL_PAR_WIDTH,$hx) set_control_par(get_ui_id($label_T),$CONTROL_PAR_HEIGHT,$hy) set_control_par(get_ui_id($label_T),$CONTROL_PAR_FONT_TYPE,1) hide_part ($label_T,$HIDE_PART_BG) move_control_px($label_T, 51, 10) set_text ($label_T,"Key Switch Info:") declare ui_label $label_1 (1,1) set_control_par(get_ui_id($label_1),$CONTROL_PAR_WIDTH,$hx) set_control_par(get_ui_id($label_1),$CONTROL_PAR_HEIGHT,$hy) set_control_par(get_ui_id($label_1),$CONTROL_PAR_FONT_TYPE,5) hide_part ($label_1,$HIDE_PART_BG) move_control_px($label_1, 66, 30) set_text ($label_1,"C-2 = Ver. A") declare ui_label $label_2 (1,1) set_control_par(get_ui_id($label_2),$CONTROL_PAR_WIDTH,$hx) set_control_par(get_ui_id($label_2),$CONTROL_PAR_HEIGHT,$hy) set_control_par(get_ui_id($label_2),$CONTROL_PAR_FONT_TYPE,1) hide_part ($label_2,$HIDE_PART_BG) move_control_px($label_2, 66, 45) set_text ($label_2,"C#-2 = Ver. B") declare ui_label $label_3 (1,1) set_control_par(get_ui_id($label_3),$CONTROL_PAR_WIDTH,$hx) set_control_par(get_ui_id($label_3),$CONTROL_PAR_HEIGHT,$hy) set_control_par(get_ui_id($label_3),$CONTROL_PAR_FONT_TYPE,1) hide_part ($label_3,$HIDE_PART_BG) move_control_px($label_3, 66, 60) set_text ($label_3,"D-2 = Ver. C")
declare const $lab1 := $keyswitch1 declare const $lab2 := $keyswitch2 declare const $lab3 := $keyswitch3 {==========================UI Switches============================} declare const $pw := 15 declare const $ph := 15 declare ui_switch $ks1 $ks1 := 1 set_text($ks1,"") set_control_par_str(get_ui_id($ks1),$CONTROL_PAR_PICTURE,"onbutton") set_control_par(get_ui_id($ks1),$CONTROL_PAR_WIDTH,$pw) set_control_par(get_ui_id($ks1),$CONTROL_PAR_HEIGHT,$ph) move_control_px($ks1,55,25) declare ui_switch $ks2 set_text($ks2,"") set_control_par_str(get_ui_id($ks2),$CONTROL_PAR_PICTURE,"onbutton") set_control_par(get_ui_id($ks2),$CONTROL_PAR_WIDTH,$pw) set_control_par(get_ui_id($ks2),$CONTROL_PAR_HEIGHT,$ph) move_control_px($ks2,55,40) declare ui_switch $ks3 set_text($ks3,"") set_control_par_str(get_ui_id($ks3),$CONTROL_PAR_PICTURE,"onbutton") set_control_par(get_ui_id($ks3),$CONTROL_PAR_WIDTH,$pw) set_control_par(get_ui_id($ks3),$CONTROL_PAR_HEIGHT,$ph) move_control_px($ks3,55,55) {==========================UI Switches============================} on ui_control ($ks1) $current_state := 0 $ks1 := 1 $ks2 := 0 $ks3 := 0 set_control_par(get_ui_id($label_1),$CONTROL_PAR_FONT_TYPE,5) set_control_par(get_ui_id($label_2),$CONTROL_PAR_FONT_TYPE,1) set_control_par(get_ui_id($label_3),$CONTROL_PAR_FONT_TYPE,1) end on
on ui_control ($ks2) $current_state := 1 $ks1 := 0 $ks2 := 1 $ks3 := 0 set_control_par(get_ui_id($label_2),$CONTROL_PAR_FONT_TYPE,5) set_control_par(get_ui_id($label_3),$CONTROL_PAR_FONT_TYPE,1) set_control_par(get_ui_id($label_1),$CONTROL_PAR_FONT_TYPE,1) end on on ui_control ($ks3) $current_state := 2 $ks1 := 0 $ks2 := 0 $ks3 := 1 set_control_par(get_ui_id($label_3),$CONTROL_PAR_FONT_TYPE,5) set_control_par(get_ui_id($label_1),$CONTROL_PAR_FONT_TYPE,1) set_control_par(get_ui_id($label_2),$CONTROL_PAR_FONT_TYPE,1) end on {==========================Key Switch Info============================} on note disallow_group($ALL_GROUPS) if ($current_state = 0) allow_group(0) end if if($current_state = 1) allow_group(1) end if if($current_state = 2) allow_group(2) end if if ($EVENT_NOTE = $lab1) $current_state := 0 set_control_par(get_ui_id($label_1),$CONTROL_PAR_FONT_TYPE,5) set_control_par(get_ui_id($label_2),$CONTROL_PAR_FONT_TYPE,1) set_control_par(get_ui_id($label_3),$CONTROL_PAR_FONT_TYPE,1) $ks1 := 1 $ks2 := 0 $ks3 := 0 end if if ($EVENT_NOTE = $lab2) $current_state := 1 set_control_par(get_ui_id($label_2),$CONTROL_PAR_FONT_TYPE,5) set_control_par(get_ui_id($label_3),$CONTROL_PAR_FONT_TYPE,1) set_control_par(get_ui_id($label_1),$CONTROL_PAR_FONT_TYPE,1) $ks1 := 0 $ks2 := 1 $ks3 := 0
end if if ($EVENT_NOTE = $lab3) $current_state := 2 set_control_par(get_ui_id($label_3),$CONTROL_PAR_FONT_TYPE,5) set_control_par(get_ui_id($label_1),$CONTROL_PAR_FONT_TYPE,1) set_control_par(get_ui_id($label_2),$CONTROL_PAR_FONT_TYPE,1) $ks1 := 0 $ks2 := 0 $ks3 := 1 end if
end on
Comments
-
Ok So I have just discovered functions, which has made this a lot cleaner. I am doing stuff like this:
function clear_ui_switch $ks1 := 0 $ks2 := 0 $ks3 := 0 end function function clear_ks_info set_control_par(get_ui_id($label_1),$CONTROL_PAR_FONT_TYPE,1) set_control_par(get_ui_id($label_2),$CONTROL_PAR_FONT_TYPE,1) set_control_par(get_ui_id($label_3),$CONTROL_PAR_FONT_TYPE,1) end function function switch1 $current_state := 0 call clear_ui_switch $ks1 := 1 call clear_ks_info set_control_par(get_ui_id($label_1),$CONTROL_PAR_FONT_TYPE,5) $attack := get_engine_par($ENGINE_PAR_ATTACK,$current_state,1,0) set_knob_label($attack,_get_engine_par_disp($ENGINE_PAR_ATTACK,$current_state,1,0)) $decay := get_engine_par($ENGINE_PAR_DECAY,$current_state,1,0) set_knob_label ($decay,_get_engine_par_disp($ENGINE_PAR_DECAY,$current_state,1,0)) $sustain := get_engine_par($ENGINE_PAR_SUSTAIN,$current_state,1,0) set_knob_label ($sustain,_get_engine_par_disp($ENGINE_PAR_SUSTAIN,$current_state,1,0)) $release := get_engine_par($ENGINE_PAR_RELEASE,$current_state,1,0) set_knob_label ($release,_get_engine_par_disp($ENGINE_PAR_RELEASE,$current_state,1,0)) end function
function switch2
ect.. ect.. for each new switch.
However its still a lot to do for 20. Just wondering if there is any type of easier way?
0 -
I'm not sure what you're trying to do, but I would recommend using SublimeKSP as it makes a lot of things easier for you. For example, you can write macros to generate repetative code. Regardless, there's a lot you're doing that is not necessary. For example, you're checking every option for allow group when you could just do:
allow_group($current_state)
And a lot of what you're doing in the switch functions can be made to be the exact same every time, and thus put in a separate function:
$attack := get_engine_par($ENGINE_PAR_ATTACK,$current_state,$current_state + 1,0)
Also, use selects instead of if statements when it makes more sense:
select ($EVENT_NOTE) case lab1 case lab2 case lab3 end select
In general I recommend reading the manual.
0
Categories
- All Categories
- 19 Welcome
- 1.5K Hangout
- 62 NI News
- 786 Tech Talks
- 4.1K Native Access
- 16.6K Komplete
- 2K Komplete General
- 4.3K Komplete Kontrol
- 5.7K Kontakt
- 1.6K Reaktor
- 380 Battery 4
- 846 Guitar Rig & FX
- 429 Massive X & Synths
- 1.3K Other Software & Hardware
- 5.8K Maschine
- 7.3K Traktor
- 7.3K Traktor Software & Hardware
- Check out everything you can do
- Create an account
- See member benefits
- Answer questions
- Ask the community
- See product news
- Connect with creators