====== StreamByter: CC High Range Remap with GUI ====== The following script allows to remap the values of a specific CC. Values higher than a threshold are remapped to a new range. One of its use-cases is to remap the x-axis of an XY CC controller sending CC-1 vibrato messages to slowly fade in only in the right half of the XY controller and at the same time limit the maximum vibrato depth at the right edge of the XY controller to a specific range. # === CC High Range Remap === # Remaps the range of a single CC. Values higher than # a threshold are remapped to a new range. # # Input Output # 0 to Threshold 0 # Threshold to 127 0 to Output Range # # Author: -ki https://forum.audiob.us/profile/_ki # # ——— No need to modify anything in the script itself ——- # # Version history # v1 / 14.05.2021 Initial version alias Q0 input_cc alias Q5 threshold alias Q6 output_range alias I4 curr_val alias I5 last_output alias I6 last_M0 alias I7 last_M1 alias I8 last_M2 alias I9 out_M2 if LOAD subroutine remap value if value < threshold assign curr_val = 0 else math I0 = $127 - threshold math I1 = value - threshold math I2 = I1 * output_range math curr_val = I2 / I0 end end set NAME CC_High_Range_Remap # Default values assign threshold = $64 +P assign output_range = $127 +P assign input_cc = $1 +P assign last_output = FF # Set slider values assign Q0 = input_cc assign Q5 = threshold assign Q6 = output_range # Set slider UI names set Q0 Input_CC# 1 $120 set Q1 +hide set Q2 +hide set Q3 +hide set Q4 +hide set Q5 Threshold 0 $126 set Q6 Output_Range 0 $127 set Q7 +hide set slider_display 1 end if MT == B0 if M1 == input_cc remap M2 assign last_M0 = M0 assign last_M1 = M1 assign last_M2 = M2 # Check if CC update is needed if last_output != curr_val assign last_output = curr_val assign M2 = curr_val else block end end end # Output_Range slide change, update CC if needed if M0 == F0 7D 01 06 remap last_M2 if last_output != curr_val assign last_output = curr_val send last_M0 last_M1 curr_val end end {{tag>StreamByter midi_scripting}}