{*********************************************** Keys/Dynamic (from Elektrik Piano) Author: Native Instruments Written by: Josef Natterer (natterer-script@web.de) Modified: September 21, 2009 *************************************************} on init set_script_title("Keys/Dynamic") message("") declare const $FADE_OUT_TIME := 15000 declare const $MAX_NUM_RELEASE_NOTES := 10 declare const $SHOW_VAR := 0 { 1 = Edit version all others are main view} declare const $MAX_VOLUME_REDUCE := 10 { Maximum Volume change with the table UI, Bar = 1000 -> No change, Bar = 0 -> MAX_VOLUME_REDUCE dB quiet down } declare const $NUMBER_OF_DRYTONE_GROUPS := 10 {These groups will be LP reduced, chosen by %GROUPS_AFFECTED} declare $a declare %note_ids[128] declare %data_LP_0[512] declare %data_LP_1[512] declare %data_LP_2[512] declare %data_LP_3[512] declare %data_LP_4[512] declare %data_LP_5[512] declare %data_LP_6[512] declare %data_LP_7[512] declare %data_LP_8[512] declare %data_LP_9[512] declare %data_LP_10[512] declare %data_LP_11[512] declare %data_LP_12[512] declare %data_LP_13[512] declare %data_LP_14[512] declare %data_LP_15[512] declare %data_LP_16[512] declare %data_LP_17[512] declare %data_LP_18[512] declare %data_LP_19[512] declare %data_LP_20[512] declare %data_LP_21[512] declare %data_LP_22[512] declare %data_LP_23[512] declare %data_LP_24[512] declare %data_LP_25[512] declare %data_LP_26[512] declare %data_LP_27[512] declare %data_LP_28[512] declare %data_LP_29[512] declare %data_LP_30[512] declare %data_LP_31[512] make_persistent(%data_LP_0) make_persistent(%data_LP_1) make_persistent(%data_LP_2) make_persistent(%data_LP_3) make_persistent(%data_LP_4) make_persistent(%data_LP_5) make_persistent(%data_LP_6) make_persistent(%data_LP_7) make_persistent(%data_LP_8) make_persistent(%data_LP_9) make_persistent(%data_LP_10) make_persistent(%data_LP_11) make_persistent(%data_LP_12) make_persistent(%data_LP_13) make_persistent(%data_LP_14) make_persistent(%data_LP_15) make_persistent(%data_LP_16) make_persistent(%data_LP_17) make_persistent(%data_LP_18) make_persistent(%data_LP_19) make_persistent(%data_LP_20) make_persistent(%data_LP_21) make_persistent(%data_LP_22) make_persistent(%data_LP_23) make_persistent(%data_LP_24) make_persistent(%data_LP_25) make_persistent(%data_LP_26) make_persistent(%data_LP_27) make_persistent(%data_LP_28) make_persistent(%data_LP_29) make_persistent(%data_LP_30) make_persistent(%data_LP_31) declare %data_vol_0[512] declare %data_vol_1[512] declare %data_vol_2[512] declare %data_vol_3[512] declare %data_vol_4[512] declare %data_vol_5[512] declare %data_vol_6[512] declare %data_vol_7[512] declare %data_vol_8[512] declare %data_vol_9[512] declare %data_vol_10[512] declare %data_vol_11[512] declare %data_vol_12[512] declare %data_vol_13[512] declare %data_vol_14[512] declare %data_vol_15[512] declare %data_vol_16[512] declare %data_vol_17[512] declare %data_vol_18[512] declare %data_vol_19[512] declare %data_vol_20[512] declare %data_vol_21[512] declare %data_vol_22[512] declare %data_vol_23[512] declare %data_vol_24[512] declare %data_vol_25[512] declare %data_vol_26[512] declare %data_vol_27[512] declare %data_vol_28[512] declare %data_vol_29[512] declare %data_vol_30[512] declare %data_vol_31[512] make_persistent(%data_vol_0) make_persistent(%data_vol_1) make_persistent(%data_vol_2) make_persistent(%data_vol_3) make_persistent(%data_vol_4) make_persistent(%data_vol_5) make_persistent(%data_vol_6) make_persistent(%data_vol_7) make_persistent(%data_vol_8) make_persistent(%data_vol_9) make_persistent(%data_vol_10) make_persistent(%data_vol_11) make_persistent(%data_vol_12) make_persistent(%data_vol_13) make_persistent(%data_vol_14) make_persistent(%data_vol_15) make_persistent(%data_vol_16) make_persistent(%data_vol_17) make_persistent(%data_vol_18) make_persistent(%data_vol_19) make_persistent(%data_vol_20) make_persistent(%data_vol_21) make_persistent(%data_vol_22) make_persistent(%data_vol_23) make_persistent(%data_vol_24) make_persistent(%data_vol_25) make_persistent(%data_vol_26) make_persistent(%data_vol_27) make_persistent(%data_vol_28) make_persistent(%data_vol_29) make_persistent(%data_vol_30) make_persistent(%data_vol_31) $a := 0 while($a < 512) %data_LP_0 [$a] := 1000 %data_LP_1 [$a] := 1000 %data_LP_2 [$a] := 1000 %data_LP_3 [$a] := 1000 %data_LP_4 [$a] := 1000 %data_LP_5 [$a] := 1000 %data_LP_6 [$a] := 1000 %data_LP_7 [$a] := 1000 %data_LP_8 [$a] := 1000 %data_LP_9 [$a] := 1000 %data_LP_10[$a] := 1000 %data_LP_11[$a] := 1000 %data_LP_12[$a] := 1000 %data_LP_13[$a] := 1000 %data_LP_14[$a] := 1000 %data_LP_15[$a] := 1000 %data_LP_16[$a] := 1000 %data_LP_17[$a] := 1000 %data_LP_18[$a] := 1000 %data_LP_19[$a] := 1000 %data_LP_20[$a] := 1000 %data_LP_21[$a] := 1000 %data_LP_22[$a] := 1000 %data_LP_23[$a] := 1000 %data_LP_24[$a] := 1000 %data_LP_25[$a] := 1000 %data_LP_26[$a] := 1000 %data_LP_27[$a] := 1000 %data_LP_28[$a] := 1000 %data_LP_29[$a] := 1000 %data_LP_30[$a] := 1000 %data_LP_31[$a] := 1000 %data_vol_0 [$a] := 1000 %data_vol_1 [$a] := 1000 %data_vol_2 [$a] := 1000 %data_vol_3 [$a] := 1000 %data_vol_4 [$a] := 1000 %data_vol_5 [$a] := 1000 %data_vol_6 [$a] := 1000 %data_vol_7 [$a] := 1000 %data_vol_8 [$a] := 1000 %data_vol_9 [$a] := 1000 %data_vol_10[$a] := 1000 %data_vol_11[$a] := 1000 %data_vol_12[$a] := 1000 %data_vol_13[$a] := 1000 %data_vol_14[$a] := 1000 %data_vol_15[$a] := 1000 %data_vol_16[$a] := 1000 %data_vol_17[$a] := 1000 %data_vol_18[$a] := 1000 %data_vol_19[$a] := 1000 %data_vol_20[$a] := 1000 %data_vol_21[$a] := 1000 %data_vol_22[$a] := 1000 %data_vol_23[$a] := 1000 %data_vol_24[$a] := 1000 %data_vol_25[$a] := 1000 %data_vol_26[$a] := 1000 %data_vol_27[$a] := 1000 %data_vol_28[$a] := 1000 %data_vol_29[$a] := 1000 %data_vol_30[$a] := 1000 %data_vol_31[$a] := 1000 inc($a) end while declare %data_length[128] $a := 0 while($a < 128) %data_length[$a] := 1000 inc($a) end while declare $LP_helper declare $vol_helper declare %temp_table[128] declare ui_table %table[128] (6,5,1000) declare ui_value_edit $NoteNr (0,127,1) declare ui_menu $table_menu add_menu_item($table_menu,"LowPass",0) add_menu_item($table_menu,"Volume",1) declare ui_value_edit $MaxKeys (1,73,1) make_persistent($MaxKeys) set_text($MaxKeys,"Keys") $MaxKeys := 73 declare ui_label $label_maxkeys (1,1) set_text($label_maxkeys,0) declare ui_value_edit $NLength (0,100000,100) declare ui_button $Save_Temp declare ui_button $Load_Temp set_text($Save_Temp,"Copy") set_text($Load_Temp,"Paste") move_control($MaxKeys,1,1) declare ui_label $label1 (1,1) set_text ($label1,"Number of Keys:") declare ui_label $label2 (1,1) set_text ($label2,"Played Keys:") declare ui_label $label4 (1,1) set_text ($label4,"Dynamic") declare ui_menu $Dynamic add_menu_item($Dynamic,"+3", 11000) add_menu_item($Dynamic,"+2", 7000) add_menu_item($Dynamic,"+1", 4000) add_menu_item($Dynamic,"Neutral",0) add_menu_item($Dynamic,"-1",- 4000) add_menu_item($Dynamic,"-2",- 7000) add_menu_item($Dynamic,"-3",-11000) $Dynamic := 0 make_persistent($Dynamic) if ($SHOW_VAR = 1) move_control($Save_Temp,6,1) move_control($Load_Temp,5,1) move_control($table_menu,1,1) move_control($NoteNr,2,1) move_control($NLength,3,1) move_control(%table,1,2) move_control($label_maxkeys,0,0) move_control($MaxKeys,0,0) move_control ($label1,0,0) move_control ($label2,0,0) move_control ($label4,0,0) move_control ($Dynamic,0,0) else move_control($Save_Temp,0,0) move_control($Load_Temp,0,0) move_control($table_menu,0,0) move_control($NoteNr,0,0) move_control($NLength,0,0) move_control(%table,0,0) move_control($label_maxkeys,2,2) move_control ($label1,1,1) move_control($MaxKeys,2,1) move_control ($label2,1,2) move_control ($label4,4,1) move_control ($Dynamic,4,2) end if declare %Last4_ID[512] declare %Last4_Velo[512] declare %Last4_Time[512] declare %Last4_LP[512] declare $free_helper declare $max_time declare $max_idx declare $v declare %active_notes[128] declare %helper_active[128] declare %release_id[128] declare %release_velo[128] declare %release_time[128] declare $help_group declare $active_nr declare $maxh_id declare $release64_nr declare $b declare $sustain_pedal declare $rel_max declare $cur_eventID declare %pressed_id[128] declare %rel64_array[128] declare $cursor declare $original_tune declare $original_vol declare $original_pan end on on note $original_vol := get_event_par($EVENT_ID,$EVENT_PAR_VOLUME) $original_tune := get_event_par($EVENT_ID,$EVENT_PAR_TUNE) $original_pan := get_event_par($EVENT_ID,$EVENT_PAR_PAN) ignore_event($EVENT_ID) %pressed_id[$EVENT_NOTE] := $EVENT_ID $cur_eventID := play_note($EVENT_NOTE,$EVENT_VELOCITY,0,0) change_vol($cur_eventID,$original_vol,1) change_tune($cur_eventID,$original_tune,1) change_pan($cur_eventID,$original_pan,1) %active_notes[$EVENT_NOTE] := $cur_eventID $a := 0 $active_nr := 0 while($a < 128) if (%active_notes[$a] > 0) if (event_status(%active_notes[$a]) = 0 ) %active_notes[$a] := 0 else inc($active_nr) end if end if inc($a) end while if ($active_nr > $MaxKeys) $active_nr := $MaxKeys $a := 0 while($a < 128) %helper_active[$a] := %active_notes[$a] inc($a) end while sort(%helper_active,1) $maxh_id := %helper_active[$MaxKeys-1] $a := 0 while($a < 128) if (%active_notes[$a] < $maxh_id and %active_notes[$a] > 0) %active_notes[$a] := 0 $b := 0 while($b < 4) fade_out(%Last4_ID[$a*4 + $b],$FADE_OUT_TIME,1) %Last4_ID[$a*4 + $b] := 0 %Last4_Velo[$a*4 + $b] := 0 %Last4_Time[$a*4 + $b] := 0 inc($b) end while end if inc($a) end while end if set_text($label_maxkeys,$active_nr) $a := 0 $free_helper := 0 while($a < 4) if (%Last4_ID[$EVENT_NOTE*4 + $a] > 0) if (event_status(%Last4_ID[$EVENT_NOTE*4 + $a]) = 0 ) %Last4_ID[$EVENT_NOTE*4 + $a] := 0 %Last4_Velo[$EVENT_NOTE*4 + $a] := 0 %Last4_Time[$EVENT_NOTE*4 + $a] := 0 else $v:= ($ENGINE_UPTIME - %Last4_Time[$EVENT_NOTE*4 + $a])/10 {Note Duration 100 = 1 sec} if ($v>%data_Length[$EVENT_NOTE]) {Look up note length and limit the value.} $v:=%data_Length[$EVENT_NOTE] end if $v := %Last4_Velo[$EVENT_NOTE*4 + $a]*(%data_Length[$EVENT_NOTE]-$v) $v := $v / %data_Length[$EVENT_NOTE] {Compare the new note with the old one} if ($v < $EVENT_VELOCITY + 10) fade_out(%Last4_ID[$EVENT_NOTE*4 + $a],$FADE_OUT_TIME,1) %Last4_ID[$EVENT_NOTE*4 + $a] := 0 %Last4_Velo[$EVENT_NOTE*4 + $a] := 0 %Last4_Time[$EVENT_NOTE*4 + $a] := 0 else inc($free_helper) end if end if end if inc($a) end while if ($free_helper = 4) $a := 0 $max_time := 0 $max_idx := 0 while($a < 4) if ($ENGINE_UPTIME - %Last4_Time[$EVENT_NOTE*4 + $a] > $max_time) $max_time := $ENGINE_UPTIME - %Last4_Time[$EVENT_NOTE*4 + $a] $max_idx := $a end if inc($a) end while fade_out(%Last4_ID[$EVENT_NOTE*4 + $max_idx],$FADE_OUT_TIME,1) %Last4_ID[$EVENT_NOTE*4 + $max_idx] := 0 %Last4_Velo[$EVENT_NOTE*4 + $max_idx] := 0 %Last4_Time[$EVENT_NOTE*4 + $max_idx] := 0 end if $a := 0 while($a < 4) if (%Last4_ID[$EVENT_NOTE*4 + $a] = 0) %Last4_ID[$EVENT_NOTE*4 + $a] := $cur_eventID %Last4_Velo[$EVENT_NOTE*4 + $a] := $EVENT_VELOCITY %Last4_Time[$EVENT_NOTE*4 + $a] := $ENGINE_UPTIME $a := 5 end if inc($a) end while select ($EVENT_NOTE) case 0 to 3 $LP_helper := %data_LP_0[128*($EVENT_NOTE mod 4)+$EVENT_VELOCITY] $vol_helper := %data_vol_0[128*($EVENT_NOTE mod 4)+$EVENT_VELOCITY] case 4 to 7 $LP_helper := %data_LP_1[128*($EVENT_NOTE mod 4)+$EVENT_VELOCITY] $vol_helper := %data_vol_1[128*($EVENT_NOTE mod 4)+$EVENT_VELOCITY] case 8 to 9 $LP_helper := %data_LP_2[128*($EVENT_NOTE mod 4)+$EVENT_VELOCITY] $vol_helper := %data_vol_2[128*($EVENT_NOTE mod 4)+$EVENT_VELOCITY] case 12 to 15 $LP_helper := %data_LP_3[128*($EVENT_NOTE mod 4)+$EVENT_VELOCITY] $vol_helper := %data_vol_3[128*($EVENT_NOTE mod 4)+$EVENT_VELOCITY] case 16 to 19 $LP_helper := %data_LP_4[128*($EVENT_NOTE mod 4)+$EVENT_VELOCITY] $vol_helper := %data_vol_4[128*($EVENT_NOTE mod 4)+$EVENT_VELOCITY] case 20 to 23 $LP_helper := %data_LP_5[128*($EVENT_NOTE mod 4)+$EVENT_VELOCITY] $vol_helper := %data_vol_5[128*($EVENT_NOTE mod 4)+$EVENT_VELOCITY] case 24 to 27 $LP_helper := %data_LP_6[128*($EVENT_NOTE mod 4)+$EVENT_VELOCITY] $vol_helper := %data_vol_6[128*($EVENT_NOTE mod 4)+$EVENT_VELOCITY] case 28 to 31 $LP_helper := %data_LP_7[128*($EVENT_NOTE mod 4)+$EVENT_VELOCITY] $vol_helper := %data_vol_7[128*($EVENT_NOTE mod 4)+$EVENT_VELOCITY] case 32 to 35 $LP_helper := %data_LP_8[128*($EVENT_NOTE mod 4)+$EVENT_VELOCITY] $vol_helper := %data_vol_8[128*($EVENT_NOTE mod 4)+$EVENT_VELOCITY] case 36 to 39 $LP_helper := %data_LP_9[128*($EVENT_NOTE mod 4)+$EVENT_VELOCITY] $vol_helper := %data_vol_9[128*($EVENT_NOTE mod 4)+$EVENT_VELOCITY] case 40 to 43 $LP_helper := %data_LP_10[128*($EVENT_NOTE mod 4)+$EVENT_VELOCITY] $vol_helper := %data_vol_10[128*($EVENT_NOTE mod 4)+$EVENT_VELOCITY] case 44 to 47 $LP_helper := %data_LP_11[128*($EVENT_NOTE mod 4)+$EVENT_VELOCITY] $vol_helper := %data_vol_11[128*($EVENT_NOTE mod 4)+$EVENT_VELOCITY] case 48 to 51 $LP_helper := %data_LP_12[128*($EVENT_NOTE mod 4)+$EVENT_VELOCITY] $vol_helper := %data_vol_12[128*($EVENT_NOTE mod 4)+$EVENT_VELOCITY] case 52 to 55 $LP_helper := %data_LP_13[128*($EVENT_NOTE mod 4)+$EVENT_VELOCITY] $vol_helper := %data_vol_13[128*($EVENT_NOTE mod 4)+$EVENT_VELOCITY] case 56 to 59 $LP_helper := %data_LP_14[128*($EVENT_NOTE mod 4)+$EVENT_VELOCITY] $vol_helper := %data_vol_14[128*($EVENT_NOTE mod 4)+$EVENT_VELOCITY] case 60 to 63 $LP_helper := %data_LP_15[128*($EVENT_NOTE mod 4)+$EVENT_VELOCITY] $vol_helper := %data_vol_15[128*($EVENT_NOTE mod 4)+$EVENT_VELOCITY] case 64 to 67 $LP_helper := %data_LP_16[128*($EVENT_NOTE mod 4)+$EVENT_VELOCITY] $vol_helper := %data_vol_16[128*($EVENT_NOTE mod 4)+$EVENT_VELOCITY] case 68 to 71 $LP_helper := %data_LP_17[128*($EVENT_NOTE mod 4)+$EVENT_VELOCITY] $vol_helper := %data_vol_17[128*($EVENT_NOTE mod 4)+$EVENT_VELOCITY] case 72 to 75 $LP_helper := %data_LP_18[128*($EVENT_NOTE mod 4)+$EVENT_VELOCITY] $vol_helper := %data_vol_18[128*($EVENT_NOTE mod 4)+$EVENT_VELOCITY] case 76 to 79 $LP_helper := %data_LP_19[128*($EVENT_NOTE mod 4)+$EVENT_VELOCITY] $vol_helper := %data_vol_19[128*($EVENT_NOTE mod 4)+$EVENT_VELOCITY] case 80 to 83 $LP_helper := %data_LP_20[128*($EVENT_NOTE mod 4)+$EVENT_VELOCITY] $vol_helper := %data_vol_20[128*($EVENT_NOTE mod 4)+$EVENT_VELOCITY] case 84 to 87 $LP_helper := %data_LP_21[128*($EVENT_NOTE mod 4)+$EVENT_VELOCITY] $vol_helper := %data_vol_21[128*($EVENT_NOTE mod 4)+$EVENT_VELOCITY] case 88 to 91 $LP_helper := %data_LP_22[128*($EVENT_NOTE mod 4)+$EVENT_VELOCITY] $vol_helper := %data_vol_22[128*($EVENT_NOTE mod 4)+$EVENT_VELOCITY] case 92 to 95 $LP_helper := %data_LP_23[128*($EVENT_NOTE mod 4)+$EVENT_VELOCITY] $vol_helper := %data_vol_23[128*($EVENT_NOTE mod 4)+$EVENT_VELOCITY] case 96 to 99 $LP_helper := %data_LP_24[128*($EVENT_NOTE mod 4)+$EVENT_VELOCITY] $vol_helper := %data_vol_24[128*($EVENT_NOTE mod 4)+$EVENT_VELOCITY] case 100 to 103 $LP_helper := %data_LP_25[128*($EVENT_NOTE mod 4)+$EVENT_VELOCITY] $vol_helper := %data_vol_25[128*($EVENT_NOTE mod 4)+$EVENT_VELOCITY] case 104 to 107 $LP_helper := %data_LP_26[128*($EVENT_NOTE mod 4)+$EVENT_VELOCITY] $vol_helper := %data_vol_26[128*($EVENT_NOTE mod 4)+$EVENT_VELOCITY] case 108 to 111 $LP_helper := %data_LP_27[128*($EVENT_NOTE mod 4)+$EVENT_VELOCITY] $vol_helper := %data_vol_27[128*($EVENT_NOTE mod 4)+$EVENT_VELOCITY] case 112 to 115 $LP_helper := %data_LP_28[128*($EVENT_NOTE mod 4)+$EVENT_VELOCITY] $vol_helper := %data_vol_28[128*($EVENT_NOTE mod 4)+$EVENT_VELOCITY] case 116 to 119 $LP_helper := %data_LP_29[128*($EVENT_NOTE mod 4)+$EVENT_VELOCITY] $vol_helper := %data_vol_29[128*($EVENT_NOTE mod 4)+$EVENT_VELOCITY] case 120 to 123 $LP_helper := %data_LP_30[128*($EVENT_NOTE mod 4)+$EVENT_VELOCITY] $vol_helper := %data_vol_30[128*($EVENT_NOTE mod 4)+$EVENT_VELOCITY] case 124 to 127 $LP_helper := %data_LP_31[128*($EVENT_NOTE mod 4)+$EVENT_VELOCITY] $vol_helper := %data_vol_31[128*($EVENT_NOTE mod 4)+$EVENT_VELOCITY] end select $a := 0 while($a < 4) if (%Last4_ID[$EVENT_NOTE*4 + $a] = 0) %Last4_ID[$EVENT_NOTE*4 + $a] := $cur_eventID %Last4_Velo[$EVENT_NOTE*4 + $a] := $EVENT_VELOCITY %Last4_Time[$EVENT_NOTE*4 + $a] := $ENGINE_UPTIME %Last4_LP[$EVENT_NOTE*4 + $a] := $LP_helper $a := 5 end if inc($a) end while $a := 0 $LP_helper := 0 while($a < 4) if (%Last4_ID[$EVENT_NOTE*4 + $a] > 0 and $LP_helper < %Last4_LP[$EVENT_NOTE*4 + $a]) $LP_helper := %Last4_LP[$EVENT_NOTE*4 + $a] end if inc($a) end while $vol_helper := ($vol_helper*$MAX_VOLUME_REDUCE)-($MAX_VOLUME_REDUCE*1000) $vol_helper := $vol_helper + ($Dynamic * ($EVENT_VELOCITY - 64)) /64 change_vol($cur_eventID,$vol_helper,1) {$a := 0 while($a < num_elements(%GROUPS_AFFECTED)) if (%GROUPS_AFFECTED[$a] < $NUMBER_OF_DRYTONE_GROUPS) $help_group := %GROUPS_AFFECTED[$a] _set_engine_par($ENGINE_PAR_CUTOFF,$LP_helper*1000,%GROUPS_AFFECTED[$a],0,-1) end if inc($a) end while if ($SHOW_VAR = 1 or $SHOW_VAR = 24021977) message("NOTE: "&$EVENT_NOTE&" VELO: "&$EVENT_VELOCITY&" Group: "&$help_group&" LP: "&$LP_helper&" VolumeRed: "&$vol_helper/1000&"."&abs(($vol_helper mod 1000)/10)&" dB") end if} end on on release %pressed_id[$EVENT_NOTE] := 0 ignore_event($EVENT_ID) if (%EVENT_PAR[0] = 1) exit end if if (%CC[64] < 64) $a := 0 $rel_max := 0 while($a < 4) if (%Last4_ID[$EVENT_NOTE*4 + $a] > $rel_max) $rel_max := %Last4_ID[$EVENT_NOTE*4 + $a] end if inc($a) end while $a := 0 while($a < 4) if (%Last4_ID[$EVENT_NOTE*4 + $a] > 0) if (%Last4_ID[$EVENT_NOTE*4 + $a] = $rel_max) note_off($rel_max) else fade_out(%Last4_ID[$EVENT_NOTE*4 + $a],$FADE_OUT_TIME,1) end if end if inc($a) end while %active_notes[$EVENT_NOTE] := 0 $a := 0 $active_nr := 0 while($a < 128) if (%active_notes[$a] > 0) inc($active_nr) end if inc($a) end while set_text($label_maxkeys,$active_nr) end if end on on controller if ($CC_NUM = 64) $sustain_pedal := %CC[64] if(%CC[64] < 64) $a := 0 $active_nr := 0 $cursor := 0 while($a < 128) if (%active_notes[$a] > 0) if (%pressed_id[$a] > 0) inc($active_nr) else %active_notes[$a] := 0 $b := 0 $rel_max := 0 while($b < 4) if (%Last4_ID[$a*4 + $b] > $rel_max) $rel_max := %Last4_ID[$a*4 + $b] end if inc($b) end while $b := 0 while($b < 4) if (%Last4_ID[$a*4 + $b] > 0) if (%Last4_ID[$a*4 + $b] = $rel_max) %rel64_array[$cursor] := $rel_max inc($cursor) else fade_out(%Last4_ID[$a*4 + $b],$FADE_OUT_TIME,1) end if end if inc($b) end while end if end if inc($a) end while if ($cursor > 0) sort(%rel64_array,1) $a := 0 while($a < $cursor) if ($a < $MAX_NUM_RELEASE_NOTES) note_off(%rel64_array[$a]) else fade_out(%rel64_array[$a],$FADE_OUT_TIME,1) end if inc($a) end while set_text($label_maxkeys,$active_nr) end if end if end if end on {Notennummer, Velocitystufen, } on ui_control (%table) select ($table_menu) case 0 $a := 0 while($a < 128) select ($NoteNr) case 0 to 3 %data_LP_0[$a +(($NoteNr mod 4)*128)] := %table[$a] case 4 to 7 %data_LP_1[$a +(($NoteNr mod 4)*128)] := %table[$a] case 8 to 11 %data_LP_2[$a +(($NoteNr mod 4)*128)] := %table[$a] case 12 to 15 %data_LP_3[$a +(($NoteNr mod 4)*128)] := %table[$a] case 16 to 19 %data_LP_4[$a +(($NoteNr mod 4)*128)] := %table[$a] case 20 to 23 %data_LP_5[$a +(($NoteNr mod 4)*128)] := %table[$a] case 24 to 27 %data_LP_6[$a +(($NoteNr mod 4)*128)] := %table[$a] case 28 to 31 %data_LP_7[$a +(($NoteNr mod 4)*128)] := %table[$a] case 32 to 35 %data_LP_8[$a +(($NoteNr mod 4)*128)] := %table[$a] case 36 to 39 %data_LP_9[$a +(($NoteNr mod 4)*128)] := %table[$a] case 40 to 43 %data_LP_10[$a +(($NoteNr mod 4)*128)] := %table[$a] case 44 to 47 %data_LP_11[$a +(($NoteNr mod 4)*128)] := %table[$a] case 48 to 51 %data_LP_12[$a +(($NoteNr mod 4)*128)] := %table[$a] case 52 to 55 %data_LP_13[$a +(($NoteNr mod 4)*128)] := %table[$a] case 56 to 59 %data_LP_14[$a +(($NoteNr mod 4)*128)] := %table[$a] case 60 to 63 %data_LP_15[$a +(($NoteNr mod 4)*128)] := %table[$a] case 64 to 67 %data_LP_16[$a +(($NoteNr mod 4)*128)] := %table[$a] case 68 to 71 %data_LP_17[$a +(($NoteNr mod 4)*128)] := %table[$a] case 72 to 75 %data_LP_18[$a +(($NoteNr mod 4)*128)] := %table[$a] case 76 to 79 %data_LP_19[$a +(($NoteNr mod 4)*128)] := %table[$a] case 80 to 83 %data_LP_20[$a +(($NoteNr mod 4)*128)] := %table[$a] case 84 to 87 %data_LP_21[$a +(($NoteNr mod 4)*128)] := %table[$a] case 88 to 91 %data_LP_22[$a +(($NoteNr mod 4)*128)] := %table[$a] case 92 to 95 %data_LP_23[$a +(($NoteNr mod 4)*128)] := %table[$a] case 96 to 99 %data_LP_24[$a +(($NoteNr mod 4)*128)] := %table[$a] case 100 to 103 %data_LP_25[$a +(($NoteNr mod 4)*128)] := %table[$a] case 104 to 107 %data_LP_26[$a +(($NoteNr mod 4)*128)] := %table[$a] case 108 to 111 %data_LP_27[$a +(($NoteNr mod 4)*128)] := %table[$a] case 112 to 115 %data_LP_28[$a +(($NoteNr mod 4)*128)] := %table[$a] case 116 to 119 %data_LP_29[$a +(($NoteNr mod 4)*128)] := %table[$a] case 120 to 123 %data_LP_30[$a +(($NoteNr mod 4)*128)] := %table[$a] case 124 to 127 %data_LP_31[$a +(($NoteNr mod 4)*128)] := %table[$a] end select inc($a) end while case 1 $a := 0 while($a < 128) select ($NoteNr) case 0 to 3 %data_vol_0[$a +(($NoteNr mod 4)*128)] := %table[$a] case 4 to 7 %data_vol_1[$a +(($NoteNr mod 4)*128)] := %table[$a] case 8 to 11 %data_vol_2[$a +(($NoteNr mod 4)*128)] := %table[$a] case 12 to 15 %data_vol_3[$a +(($NoteNr mod 4)*128)] := %table[$a] case 16 to 19 %data_vol_4[$a +(($NoteNr mod 4)*128)] := %table[$a] case 20 to 23 %data_vol_5[$a +(($NoteNr mod 4)*128)] := %table[$a] case 24 to 27 %data_vol_6[$a +(($NoteNr mod 4)*128)] := %table[$a] case 28 to 31 %data_vol_7[$a +(($NoteNr mod 4)*128)] := %table[$a] case 32 to 35 %data_vol_8[$a +(($NoteNr mod 4)*128)] := %table[$a] case 36 to 39 %data_vol_9[$a +(($NoteNr mod 4)*128)] := %table[$a] case 40 to 43 %data_vol_10[$a +(($NoteNr mod 4)*128)] := %table[$a] case 44 to 47 %data_vol_11[$a +(($NoteNr mod 4)*128)] := %table[$a] case 48 to 51 %data_vol_12[$a +(($NoteNr mod 4)*128)] := %table[$a] case 52 to 55 %data_vol_13[$a +(($NoteNr mod 4)*128)] := %table[$a] case 56 to 59 %data_vol_14[$a +(($NoteNr mod 4)*128)] := %table[$a] case 60 to 63 %data_vol_15[$a +(($NoteNr mod 4)*128)] := %table[$a] case 64 to 67 %data_vol_16[$a +(($NoteNr mod 4)*128)] := %table[$a] case 68 to 71 %data_vol_17[$a +(($NoteNr mod 4)*128)] := %table[$a] case 72 to 75 %data_vol_18[$a +(($NoteNr mod 4)*128)] := %table[$a] case 76 to 79 %data_vol_19[$a +(($NoteNr mod 4)*128)] := %table[$a] case 80 to 83 %data_vol_20[$a +(($NoteNr mod 4)*128)] := %table[$a] case 84 to 87 %data_vol_21[$a +(($NoteNr mod 4)*128)] := %table[$a] case 88 to 91 %data_vol_22[$a +(($NoteNr mod 4)*128)] := %table[$a] case 92 to 95 %data_vol_23[$a +(($NoteNr mod 4)*128)] := %table[$a] case 96 to 99 %data_vol_24[$a +(($NoteNr mod 4)*128)] := %table[$a] case 100 to 103 %data_vol_25[$a +(($NoteNr mod 4)*128)] := %table[$a] case 104 to 107 %data_vol_26[$a +(($NoteNr mod 4)*128)] := %table[$a] case 108 to 111 %data_vol_27[$a +(($NoteNr mod 4)*128)] := %table[$a] case 112 to 115 %data_vol_28[$a +(($NoteNr mod 4)*128)] := %table[$a] case 116 to 119 %data_vol_29[$a +(($NoteNr mod 4)*128)] := %table[$a] case 120 to 123 %data_vol_30[$a +(($NoteNr mod 4)*128)] := %table[$a] case 124 to 127 %data_vol_31[$a +(($NoteNr mod 4)*128)] := %table[$a] end select inc($a) end while end select end on on ui_control ($NoteNr) $NLength := %data_length[$NoteNr] select ($table_menu) case 0 $a := 0 while($a < 128) select ($NoteNr) case 0 to 3 %table[$a] := %data_LP_0[$a +(($NoteNr mod 4)*128)] case 4 to 7 %table[$a] := %data_LP_1[$a +(($NoteNr mod 4)*128)] case 8 to 11 %table[$a] := %data_LP_2[$a +(($NoteNr mod 4)*128)] case 12 to 15 %table[$a] := %data_LP_3[$a +(($NoteNr mod 4)*128)] case 16 to 19 %table[$a] := %data_LP_4[$a +(($NoteNr mod 4)*128)] case 20 to 23 %table[$a] := %data_LP_5[$a +(($NoteNr mod 4)*128)] case 24 to 27 %table[$a] := %data_LP_6[$a +(($NoteNr mod 4)*128)] case 28 to 31 %table[$a] := %data_LP_7[$a +(($NoteNr mod 4)*128)] case 32 to 35 %table[$a] := %data_LP_8[$a +(($NoteNr mod 4)*128)] case 36 to 39 %table[$a] := %data_LP_9[$a +(($NoteNr mod 4)*128)] case 40 to 43 %table[$a] := %data_LP_10[$a +(($NoteNr mod 4)*128)] case 44 to 47 %table[$a] := %data_LP_11[$a +(($NoteNr mod 4)*128)] case 48 to 51 %table[$a] := %data_LP_12[$a +(($NoteNr mod 4)*128)] case 52 to 55 %table[$a] := %data_LP_13[$a +(($NoteNr mod 4)*128)] case 56 to 59 %table[$a] := %data_LP_14[$a +(($NoteNr mod 4)*128)] case 60 to 63 %table[$a] := %data_LP_15[$a +(($NoteNr mod 4)*128)] case 64 to 67 %table[$a] := %data_LP_16[$a +(($NoteNr mod 4)*128)] case 68 to 71 %table[$a] := %data_LP_17[$a +(($NoteNr mod 4)*128)] case 72 to 75 %table[$a] := %data_LP_18[$a +(($NoteNr mod 4)*128)] case 76 to 79 %table[$a] := %data_LP_19[$a +(($NoteNr mod 4)*128)] case 80 to 83 %table[$a] := %data_LP_20[$a +(($NoteNr mod 4)*128)] case 84 to 87 %table[$a] := %data_LP_21[$a +(($NoteNr mod 4)*128)] case 88 to 91 %table[$a] := %data_LP_22[$a +(($NoteNr mod 4)*128)] case 92 to 95 %table[$a] := %data_LP_23[$a +(($NoteNr mod 4)*128)] case 96 to 99 %table[$a] := %data_LP_24[$a +(($NoteNr mod 4)*128)] case 100 to 103 %table[$a] := %data_LP_25[$a +(($NoteNr mod 4)*128)] case 104 to 107 %table[$a] := %data_LP_26[$a +(($NoteNr mod 4)*128)] case 108 to 111 %table[$a] := %data_LP_27[$a +(($NoteNr mod 4)*128)] case 112 to 115 %table[$a] := %data_LP_28[$a +(($NoteNr mod 4)*128)] case 116 to 119 %table[$a] := %data_LP_29[$a +(($NoteNr mod 4)*128)] case 120 to 123 %table[$a] := %data_LP_30[$a +(($NoteNr mod 4)*128)] case 124 to 127 %table[$a] := %data_LP_31[$a +(($NoteNr mod 4)*128)] end select inc($a) end while case 1 $a := 0 while($a < 128) select ($NoteNr) case 0 to 3 %table[$a] := %data_vol_0[$a +(($NoteNr mod 4)*128)] case 4 to 7 %table[$a] := %data_vol_1[$a +(($NoteNr mod 4)*128)] case 8 to 11 %table[$a] := %data_vol_2[$a +(($NoteNr mod 4)*128)] case 12 to 15 %table[$a] := %data_vol_3[$a +(($NoteNr mod 4)*128)] case 16 to 19 %table[$a] := %data_vol_4[$a +(($NoteNr mod 4)*128)] case 20 to 23 %table[$a] := %data_vol_5[$a +(($NoteNr mod 4)*128)] case 24 to 27 %table[$a] := %data_vol_6[$a +(($NoteNr mod 4)*128)] case 28 to 31 %table[$a] := %data_vol_7[$a +(($NoteNr mod 4)*128)] case 32 to 35 %table[$a] := %data_vol_8[$a +(($NoteNr mod 4)*128)] case 36 to 39 %table[$a] := %data_vol_9[$a +(($NoteNr mod 4)*128)] case 40 to 43 %table[$a] := %data_vol_10[$a +(($NoteNr mod 4)*128)] case 44 to 47 %table[$a] := %data_vol_11[$a +(($NoteNr mod 4)*128)] case 48 to 51 %table[$a] := %data_vol_12[$a +(($NoteNr mod 4)*128)] case 52 to 55 %table[$a] := %data_vol_13[$a +(($NoteNr mod 4)*128)] case 56 to 59 %table[$a] := %data_vol_14[$a +(($NoteNr mod 4)*128)] case 60 to 63 %table[$a] := %data_vol_15[$a +(($NoteNr mod 4)*128)] case 64 to 67 %table[$a] := %data_vol_16[$a +(($NoteNr mod 4)*128)] case 68 to 71 %table[$a] := %data_vol_17[$a +(($NoteNr mod 4)*128)] case 72 to 75 %table[$a] := %data_vol_18[$a +(($NoteNr mod 4)*128)] case 76 to 79 %table[$a] := %data_vol_19[$a +(($NoteNr mod 4)*128)] case 80 to 83 %table[$a] := %data_vol_20[$a +(($NoteNr mod 4)*128)] case 84 to 87 %table[$a] := %data_vol_21[$a +(($NoteNr mod 4)*128)] case 88 to 91 %table[$a] := %data_vol_22[$a +(($NoteNr mod 4)*128)] case 92 to 95 %table[$a] := %data_vol_23[$a +(($NoteNr mod 4)*128)] case 96 to 99 %table[$a] := %data_vol_24[$a +(($NoteNr mod 4)*128)] case 100 to 103 %table[$a] := %data_vol_25[$a +(($NoteNr mod 4)*128)] case 104 to 107 %table[$a] := %data_vol_26[$a +(($NoteNr mod 4)*128)] case 108 to 111 %table[$a] := %data_vol_27[$a +(($NoteNr mod 4)*128)] case 112 to 115 %table[$a] := %data_vol_28[$a +(($NoteNr mod 4)*128)] case 116 to 119 %table[$a] := %data_vol_29[$a +(($NoteNr mod 4)*128)] case 120 to 123 %table[$a] := %data_vol_30[$a +(($NoteNr mod 4)*128)] case 124 to 127 %table[$a] := %data_vol_31[$a +(($NoteNr mod 4)*128)] end select inc($a) end while end select end on on ui_control ($table_menu) select ($table_menu) case 0 $a := 0 while($a < 128) select ($NoteNr) case 0 to 3 %table[$a] := %data_LP_0[$a +(($NoteNr mod 4)*128)] case 4 to 7 %table[$a] := %data_LP_1[$a +(($NoteNr mod 4)*128)] case 8 to 11 %table[$a] := %data_LP_2[$a +(($NoteNr mod 4)*128)] case 12 to 15 %table[$a] := %data_LP_3[$a +(($NoteNr mod 4)*128)] case 16 to 19 %table[$a] := %data_LP_4[$a +(($NoteNr mod 4)*128)] case 20 to 23 %table[$a] := %data_LP_5[$a +(($NoteNr mod 4)*128)] case 24 to 27 %table[$a] := %data_LP_6[$a +(($NoteNr mod 4)*128)] case 28 to 31 %table[$a] := %data_LP_7[$a +(($NoteNr mod 4)*128)] case 32 to 35 %table[$a] := %data_LP_8[$a +(($NoteNr mod 4)*128)] case 36 to 39 %table[$a] := %data_LP_9[$a +(($NoteNr mod 4)*128)] case 40 to 43 %table[$a] := %data_LP_10[$a +(($NoteNr mod 4)*128)] case 44 to 47 %table[$a] := %data_LP_11[$a +(($NoteNr mod 4)*128)] case 48 to 51 %table[$a] := %data_LP_12[$a +(($NoteNr mod 4)*128)] case 52 to 55 %table[$a] := %data_LP_13[$a +(($NoteNr mod 4)*128)] case 56 to 59 %table[$a] := %data_LP_14[$a +(($NoteNr mod 4)*128)] case 60 to 63 %table[$a] := %data_LP_15[$a +(($NoteNr mod 4)*128)] case 64 to 67 %table[$a] := %data_LP_16[$a +(($NoteNr mod 4)*128)] case 68 to 71 %table[$a] := %data_LP_17[$a +(($NoteNr mod 4)*128)] case 72 to 75 %table[$a] := %data_LP_18[$a +(($NoteNr mod 4)*128)] case 76 to 79 %table[$a] := %data_LP_19[$a +(($NoteNr mod 4)*128)] case 80 to 83 %table[$a] := %data_LP_20[$a +(($NoteNr mod 4)*128)] case 84 to 87 %table[$a] := %data_LP_21[$a +(($NoteNr mod 4)*128)] case 88 to 91 %table[$a] := %data_LP_22[$a +(($NoteNr mod 4)*128)] case 92 to 95 %table[$a] := %data_LP_23[$a +(($NoteNr mod 4)*128)] case 96 to 99 %table[$a] := %data_LP_24[$a +(($NoteNr mod 4)*128)] case 100 to 103 %table[$a] := %data_LP_25[$a +(($NoteNr mod 4)*128)] case 104 to 107 %table[$a] := %data_LP_26[$a +(($NoteNr mod 4)*128)] case 108 to 111 %table[$a] := %data_LP_27[$a +(($NoteNr mod 4)*128)] case 112 to 115 %table[$a] := %data_LP_28[$a +(($NoteNr mod 4)*128)] case 116 to 119 %table[$a] := %data_LP_29[$a +(($NoteNr mod 4)*128)] case 120 to 123 %table[$a] := %data_LP_30[$a +(($NoteNr mod 4)*128)] case 124 to 127 %table[$a] := %data_LP_31[$a +(($NoteNr mod 4)*128)] end select inc($a) end while case 1 $a := 0 while($a < 128) select ($NoteNr) case 0 to 3 %table[$a] := %data_vol_0[$a +(($NoteNr mod 4)*128)] case 4 to 7 %table[$a] := %data_vol_1[$a +(($NoteNr mod 4)*128)] case 8 to 11 %table[$a] := %data_vol_2[$a +(($NoteNr mod 4)*128)] case 12 to 15 %table[$a] := %data_vol_3[$a +(($NoteNr mod 4)*128)] case 16 to 19 %table[$a] := %data_vol_4[$a +(($NoteNr mod 4)*128)] case 20 to 23 %table[$a] := %data_vol_5[$a +(($NoteNr mod 4)*128)] case 24 to 27 %table[$a] := %data_vol_6[$a +(($NoteNr mod 4)*128)] case 28 to 31 %table[$a] := %data_vol_7[$a +(($NoteNr mod 4)*128)] case 32 to 35 %table[$a] := %data_vol_8[$a +(($NoteNr mod 4)*128)] case 36 to 39 %table[$a] := %data_vol_9[$a +(($NoteNr mod 4)*128)] case 40 to 43 %table[$a] := %data_vol_10[$a +(($NoteNr mod 4)*128)] case 44 to 47 %table[$a] := %data_vol_11[$a +(($NoteNr mod 4)*128)] case 48 to 51 %table[$a] := %data_vol_12[$a +(($NoteNr mod 4)*128)] case 52 to 55 %table[$a] := %data_vol_13[$a +(($NoteNr mod 4)*128)] case 56 to 59 %table[$a] := %data_vol_14[$a +(($NoteNr mod 4)*128)] case 60 to 63 %table[$a] := %data_vol_15[$a +(($NoteNr mod 4)*128)] case 64 to 67 %table[$a] := %data_vol_16[$a +(($NoteNr mod 4)*128)] case 68 to 71 %table[$a] := %data_vol_17[$a +(($NoteNr mod 4)*128)] case 72 to 75 %table[$a] := %data_vol_18[$a +(($NoteNr mod 4)*128)] case 76 to 79 %table[$a] := %data_vol_19[$a +(($NoteNr mod 4)*128)] case 80 to 83 %table[$a] := %data_vol_20[$a +(($NoteNr mod 4)*128)] case 84 to 87 %table[$a] := %data_vol_21[$a +(($NoteNr mod 4)*128)] case 88 to 91 %table[$a] := %data_vol_22[$a +(($NoteNr mod 4)*128)] case 92 to 95 %table[$a] := %data_vol_23[$a +(($NoteNr mod 4)*128)] case 96 to 99 %table[$a] := %data_vol_24[$a +(($NoteNr mod 4)*128)] case 100 to 103 %table[$a] := %data_vol_25[$a +(($NoteNr mod 4)*128)] case 104 to 107 %table[$a] := %data_vol_26[$a +(($NoteNr mod 4)*128)] case 108 to 111 %table[$a] := %data_vol_27[$a +(($NoteNr mod 4)*128)] case 112 to 115 %table[$a] := %data_vol_28[$a +(($NoteNr mod 4)*128)] case 116 to 119 %table[$a] := %data_vol_29[$a +(($NoteNr mod 4)*128)] case 120 to 123 %table[$a] := %data_vol_30[$a +(($NoteNr mod 4)*128)] case 124 to 127 %table[$a] := %data_vol_31[$a +(($NoteNr mod 4)*128)] end select inc($a) end while end select end on on ui_control ($save_temp) $a := 0 while($a < 128) %temp_table[$a] := %table[$a] inc($a) end while $save_temp := 0 end on on ui_control ($load_temp) $a := 0 while($a < 128) %table[$a] := %temp_table[$a] inc($a) end while $load_temp := 0 end on on ui_control ($NLength) %data_length[$NoteNr] := $NLength end on