1.6 KiB
MIDI Input
Read incoming MIDI control change values with the ccval word. This lets you use hardware controllers to modulate parameters in your scripts.
Reading CC Values
The ccval word takes a CC number and channel from the stack, and returns the last received value:
1 1 ccval ;; read CC 1 (mod wheel) on channel 1
Stack effect: (cc chan -- val)
The returned value is 0-127. If no message has been received for that CC/channel combination, the value is 0.
Device Selection
Use dev to select which input device slot to read from:
1 dev 1 1 ccval ;; read from device slot 1
Device defaults to 0 if not specified.
Practical Examples
Map a controller knob to filter cutoff:
74 1 ccval 127 / 200 2740 range lpf
Use mod wheel for vibrato depth:
1 1 ccval 127 / 0 0.5 range vibdepth
Crossfade between two sounds:
1 1 ccval 127 / ;; normalize to 0.0-1.0
dup saw snd swap gain .
1 swap - tri snd swap gain .
Scaling Values
CC values are integers 0-127. Normalize to 0.0-1.0 first, then use range to scale:
;; normalize to 0.0-1.0
74 1 ccval 127 /
;; scale to custom range (e.g., 200-4000)
74 1 ccval 127 / 200 4000 range
;; bipolar range (-1.0 to 1.0)
74 1 ccval 127 / -1 1 range
The range word takes a normalized value (0.0-1.0) and scales it to your target range: (val min max -- scaled).
Latency
CC values are sampled at the start of each step. Changes during a step take effect on the next step. For smoothest results, turn knobs slowly or use higher step rates.