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
  • streambyter_cc_high_range_remap.txt
  • Last modified: 2021/05/15 22:27
  • by _ki