on init set_script_title("Smart Scale Controller") message("") declare $i declare $j declare $sel declare ui_knob $Volume (0,2000000,1) set_knob_unit($Volume,$KNOB_UNIT_DB) set_knob_label($Volume,get_engine_par_disp($ENGINE_PAR_VOLUME,0,0,-1)) $Volume := get_engine_par($ENGINE_PAR_VOLUME,0,0,-1) make_persistent($Volume) {-------- Start Octave Transpose UI Elements--------} make_perfview set_ui_height_px(250) declare $new_id declare ui_label $knob(2,1) set_text($knob,"Smart Scale Controller") declare polyphonic $transposition {transposition interval in Semitones} declare polyphonic $transposed_note {note number of transposed note} declare ui_knob $Semi (-11, 11, 1) set_knob_defval($Semi,0) declare ui_knob $Octave (-10, 10, 1) set_knob_defval($Octave,0) $Semi := 0 $Octave := 0 make_persistent ($Semi) make_persistent ($Octave) declare $automationAssigns := 100 {-------- End Preset UI Elements--------} {-------- Preset UI Elements--------} declare $SCALE_VALUE := 0 declare ui_value_edit $ks_controller0 (-50, 50,1) set_text ($ks_controller0, "Do") make_persistent($ks_controller0) _read_persistent_var($ks_controller0) $ks_controller0 := 0 declare ui_value_edit $ks_controller1 (-50, 50,1) set_text ($ks_controller1, "Do#") make_persistent($ks_controller1) _read_persistent_var($ks_controller1) $ks_controller1 := 0 declare ui_value_edit $ks_controller2 (-50, 50,1) set_text ($ks_controller2, "Re") make_persistent($ks_controller2) _read_persistent_var($ks_controller2) $ks_controller2 := 0 declare ui_value_edit $ks_controller3 (-50, 50,1) set_text ($ks_controller3, "Re#") make_persistent($ks_controller3) _read_persistent_var($ks_controller3) $ks_controller3 := 0 declare ui_value_edit $ks_controller4 (-50, 50,1) set_text ($ks_controller4, "Me") make_persistent($ks_controller4) _read_persistent_var($ks_controller4) $ks_controller4 := 0 declare ui_value_edit $ks_controller5 (-50, 50,1) set_text ($ks_controller5, "Fa") make_persistent($ks_controller5) _read_persistent_var($ks_controller5) $ks_controller5 := 0 declare ui_value_edit $ks_controller6 (-50, 50,1) set_text ($ks_controller6, "Fa#") make_persistent($ks_controller6) _read_persistent_var($ks_controller6) $ks_controller6 := 0 declare ui_value_edit $ks_controller7 (-50, 50,1) set_text ($ks_controller7, "Sol") make_persistent($ks_controller7) _read_persistent_var($ks_controller7) $ks_controller7 := 0 declare ui_value_edit $ks_controller8 (-50, 50,1) set_text ($ks_controller8, "Sol#") make_persistent($ks_controller8) _read_persistent_var($ks_controller8) $ks_controller8 := 0 declare ui_value_edit $ks_controller9 (-50, 50,1) set_text ($ks_controller9, "La") make_persistent($ks_controller9) _read_persistent_var($ks_controller9) $ks_controller9 := 0 declare ui_value_edit $ks_controller10 (-50, 50,1) set_text ($ks_controller10, "La#") make_persistent($ks_controller10) _read_persistent_var($ks_controller10) $ks_controller10 := 0 declare ui_value_edit $ks_controller11 (-50, 50,1) set_text ($ks_controller11, "Si") make_persistent($ks_controller11) _read_persistent_var($ks_controller11) $ks_controller11 := 0 {--------UI Elements--------} declare const $ECO_MODE := 0 declare const $TUNE_RANGE := 50 declare $count declare !note_class[12] !note_class[0] := "C" !note_class[1] := "Db" !note_class[2] := "D" !note_class[3] := "Eb" !note_class[4] := "E" !note_class[5] := "F" !note_class[6] := "Gb" !note_class[7] := "G" !note_class[8] := "Ab" !note_class[9] := "A" !note_class[10] := "Bb" !note_class[11] := "B" declare !note_names [128] $count := 0 while ($count < 128) !note_names[$count] := !note_class[$count mod 12] & (($count/12)-2) inc ($count) end while declare $a declare $b declare %helper_tune[12] make_persistent(%helper_tune) {--------UI Elements--------} declare ui_knob $Key_knob(0,11,1) make_persistent($key_knob) set_control_help ($Key_knob,"Key: Sets the first scale degree.") declare ui_label $label (3,1) {set_text ($label, " C Db D Eb E F Gb G Ab A Bb B")} declare !key_label[12] !key_label[0] := " C " !key_label[1] := " Db " !key_label[2] := " D " !key_label[3] := " Eb " !key_label[4] := " E " !key_label[5] := " F " !key_label[6] := " Gb " !key_label[7] := " G " !key_label[8] := " Ab " !key_label[9] := " A " !key_label[10] := " Bb " !key_label[11] := " B " _read_persistent_var($key_knob) set_text ($label,!key_label[(0+$key_knob) mod 12]&""&... !key_label[(1+$key_knob) mod 12]&""&... !key_label[(2+$key_knob) mod 12]&""&... !key_label[(3+$key_knob) mod 12]&""&... !key_label[(4+$key_knob) mod 12]&""&... !key_label[(5+$key_knob) mod 12]&""&... !key_label[(6+$key_knob) mod 12]&""&... !key_label[(7+$key_knob) mod 12]&""&... !key_label[(8+$key_knob) mod 12]&""&... !key_label[(9+$key_knob) mod 12]&""&... !key_label[(10+$key_knob) mod 12]&""&... !key_label[(11+$key_knob) mod 12]) set_knob_label($key_knob,!key_label[(0+$key_knob) mod 12]) set_text($key_knob,"Key") declare ui_table %tune_ui[12](3,5,-$TUNE_RANGE) make_persistent (%tune_ui) set_control_help (%tune_ui,"Tuning Table: Adjust the detuning for each of the twelve notes.") declare ui_knob $Amount (0,100,1) $Amount := 100 set_knob_unit($Amount,$KNOB_UNIT_PERCENT) make_persistent($Amount) declare $helper_tune set_control_help ($Amount,"Amount: Adjusts the amount of the tuning. When set to 100%, each note is tuned to the cent value specified with the table. When set to 0%, no tuning is applied.") {---------Layout---------} move_control($ks_controller0, 1, 3) move_control($ks_controller1, 1, 4) move_control($ks_controller2, 1, 5) move_control($ks_controller3, 1, 6) move_control($ks_controller4, 1, 7) move_control($ks_controller5, 1, 8) move_control($ks_controller6, 2, 3) move_control($ks_controller7, 2, 4) move_control($ks_controller8, 2, 5) move_control($ks_controller9, 2, 6) move_control($ks_controller10, 2, 7) move_control($ks_controller11, 2, 8) move_control ($Key_knob, 6,3) move_control ($Amount , 6,6) move_control ($Semi, 3,1) move_control ($Octave,5,1) move_control ($label, 3,3) move_control (%tune_ui,3,4) move_control($knob,1,9) end on on note $transposition := ($Octave * 12) + $Semi {delivers the actual transposition value} $transposed_note := $EVENT_NOTE + $transposition {note number of transposed note} if ($transposed_note < 0) $transposed_note := 0 end if if ($transposed_note > 127) $transposed_note := 127 end if ignore_event($EVENT_ID) $helper_tune := (%tune_ui[($EVENT_NOTE + 12 - $key_knob) mod 12]*1000*$Amount)/100 $new_id := play_note ($transposed_note, $EVENT_VELOCITY, 0, -1) change_tune($new_id,$helper_tune,0) end on on ui_control ($Volume) set_engine_par($ENGINE_PAR_VOLUME,$Volume,0,0,-1) set_knob_label($Volume,get_engine_par_disp($ENGINE_PAR_VOLUME,0,0,-1)) end on on ui_control(%tune_ui) $a := 0 while($a < 12) if ($a = 0) $ks_controller0 := %tune_ui[$a] end if if ($a = 1) $ks_controller1 := %tune_ui[$a] end if if ($a = 2) $ks_controller2 := %tune_ui[$a] end if if ($a = 3) $ks_controller3 := %tune_ui[$a] end if if ($a = 4) $ks_controller4 := %tune_ui[$a] end if if ($a = 5) $ks_controller5 := %tune_ui[$a] end if if ($a = 6) $ks_controller6 := %tune_ui[$a] end if if ($a = 7) $ks_controller7 := %tune_ui[$a] end if if ($a = 8) $ks_controller8 := %tune_ui[$a] end if if ($a = 9) $ks_controller9 := %tune_ui[$a] end if if ($a = 10) $ks_controller10 := %tune_ui[$a] end if if ($a = 11) $ks_controller11 := %tune_ui[$a] end if inc($a) end while end on on ui_control ($key_knob) set_text ($label,!key_label[(0+$key_knob) mod 12]&""&... !key_label[(1+$key_knob) mod 12]&""&... !key_label[(2+$key_knob) mod 12]&""&... !key_label[(3+$key_knob) mod 12]&""&... !key_label[(4+$key_knob) mod 12]&""&... !key_label[(5+$key_knob) mod 12]&""&... !key_label[(6+$key_knob) mod 12]&""&... !key_label[(7+$key_knob) mod 12]&""&... !key_label[(8+$key_knob) mod 12]&""&... !key_label[(9+$key_knob) mod 12]&""&... !key_label[(10+$key_knob) mod 12]&""&... !key_label[(11+$key_knob) mod 12]) set_knob_label($key_knob,!key_label[(0+$key_knob) mod 12]) end on on controller if($CC_NUM < 12+$automationAssigns and $CC_NUM > 10 ) $SCALE_VALUE := %CC[$CC_NUM] if (%CC[$CC_NUM] > 50) $SCALE_VALUE := %CC[$CC_NUM] - 149 end if %tune_ui[$CC_NUM-$automationAssigns] := $SCALE_VALUE inc($a) select ($CC_NUM -$automationAssigns ) case 0 $ks_controller0 := $SCALE_VALUE case 1 $ks_controller1 := $SCALE_VALUE case 2 $ks_controller2 := $SCALE_VALUE case 3 $ks_controller3 := $SCALE_VALUE case 4 $ks_controller4 := $SCALE_VALUE case 5 $ks_controller5 := $SCALE_VALUE case 6 $ks_controller6 := $SCALE_VALUE case 7 $ks_controller7 := $SCALE_VALUE case 8 $ks_controller8 := $SCALE_VALUE case 9 $ks_controller9 := $SCALE_VALUE case 10 $ks_controller10 := $SCALE_VALUE case 11 $ks_controller11 := $SCALE_VALUE end select end if if($CC_NUM = 115) if(%CC[$CC_NUM] > 11 ) $Semi := %CC[$CC_NUM] - 26 else $Semi := %CC[$CC_NUM] end if end if if($CC_NUM = 116) if(%CC[$CC_NUM] > 10 ) $Octave := %CC[$CC_NUM] - 24 else $Octave := %CC[$CC_NUM] end if end if if($CC_NUM = 117) $Volume := (%CC[$CC_NUM] * 2000000) / 127 set_engine_par($ENGINE_PAR_VOLUME,$Volume,0,0,-1) set_knob_label($Volume,get_engine_par_disp($ENGINE_PAR_VOLUME,0,0,-1)) message("Volume set via CC117: " & get_engine_par_disp($ENGINE_PAR_VOLUME,0,0,-1)) end if end on {-------- Text UI Elements--------} on ui_control ($ks_controller0) %tune_ui[0] := $ks_controller0 inc($a) end on on ui_control ($ks_controller1) %tune_ui[1] := $ks_controller1 inc($a) end on on ui_control ($ks_controller2) %tune_ui[2] := $ks_controller2 inc($a) end on on ui_control ($ks_controller3) %tune_ui[3] := $ks_controller3 inc($a) end on on ui_control ($ks_controller4) %tune_ui[4] := $ks_controller4 inc($a) end on on ui_control ($ks_controller5) %tune_ui[5] := $ks_controller5 inc($a) end on on ui_control ($ks_controller6) %tune_ui[6] := $ks_controller6 inc($a) end on on ui_control ($ks_controller7) %tune_ui[7] := $ks_controller7 inc($a) end on on ui_control ($ks_controller8) %tune_ui[8] := $ks_controller8 inc($a) end on on ui_control ($ks_controller9) %tune_ui[9] := $ks_controller9 inc($a) end on on ui_control ($ks_controller10) %tune_ui[10] := $ks_controller10 inc($a) end on on ui_control ($ks_controller11) %tune_ui[11] := $ks_controller11 inc($a) end on