I’m looking for a way to turn a dial and have it scroll up and down a range of notes (think, finger running up and down a keyboard).
First off, I wonder if I’ve missed something with the standard building blocks. As far as I can work out, I can’t use the native Action Wheel or Action Trigger with Generic or Note On/Off keys for this. For example, Action Wheel only uses the dial to scroll the list, the keys require a dial press.
I also wonder if I’ve missed any tricks in how to set up the Generic or Multi MIDI dials?
And then if I haven’t missed anything, I guess the way to go is a scripted dial (incrementing and decrementing a local variable for the note value)? Does that sound about right?
You are correct that the Generic Midi and Multi dials do not have the option to send note values, and, as you say, scripting is the way to address this.
You can either use a Scripted dial with an appropriate script, or a “normal” dial using, e.g., Control Change, and then have a background script that transforms the CC messages into Note On/Off messages. The latter solution also supports using the multi dial for this.
Here’s a version. There are a few quirks to it. For example, the pressed action shows a lower number on the dial - haven’t had time to understand why.
Still, it’s a handy way to quickly scroll notes. My use-case was to quickly hear what different synth patches sound like at different key ranges, which I want to do when I audition them and/or when I’m making changes to patches.
Posting here in case it’s useful to people searching in the future.
[ (config) {firstmidichannel:1} ]
[ (init)
/* Initialize the local variable to a starting note /
{@l_prevNote:60}
/ Update the dial display text */
{text:Note: #@l_prevNote#}
]
[ (rotate:n)
/* 1. Send Note Off for the current note before changing it, store value */
{noteoff:1,#@l_prevNote#,64}
{@l_prevNote:#@e_value#}
/* 2. Send the Note On message for the new note */
{noteon:1,#@e_value#,64}
/* 3. Update the dial display? */
{text:Note: #@e_value#}
]
[ (rotate:p)
/* 1. Send Note Off for last played note (kill) */
{noteoff:1,#@l_prevNote#,64}
{@l_prevNote:#@e_value#}
/* 2. Update the dial display? */
{text:Note: #@l_prevNote#}
]