music/daw/reaper/ RawControlSurfaces
When it comes to mapping Reaper actions to control surface actions, with no feedback, it seems easiest to just send messages of the form
nocturn/0/knob/4/cw
for example.
Novation Nocturn
So I have a simple python script with basic bank switching. Now the nocturn looks like this:
Now on Widows and Mac, this device is essentially obsolete: on Windows (and I think Mac), it only works with Novation's discontinued Automap software. In a time where we need to be conscious of e-waste, this is inexcusable: the device just sends midi data to the Novation driver, and that then forwards it to the Automap software, while hiding the device (in the sense that it doesn't appear as a Midi device). Thank heavens for Linux, where if you plug a Nocturn in, it appears as a generic midi device. So for me, I plug them into a Raspberry Pi which runs a python script (see below) that then sends midi to/from the nocturn and sends OSC to a specified UDP port. As such, this script is agnostic to the application: it sends information about what knob was turned, or what button pressed, and it is for the recipient to map this to the desired target. (This will be a recurring concept in my exploration: my philosophy is to keep things as raw and abstract as possible, for as long as possible).
So bank switching: The Nocturn has 16 buttons, 8 smooth rotary knobs, and 1 rough (i.e. stepped) rotary knob. Now I use four for of those buttons as a bank selector (and the button for the selected bank lights up). Then I have 12 buttons remaining. So each bank has 12 buttons, 8 smooth rotaries and 1 rough rotary. To allow for more than one Nocturn, each gets a numerical id. (Though I want it to be possible for banks to be either local to an individual Nocturn, or global across e.g. 4 of them, at my later choice.) It then sends messages of the form
nocturn/0/srotary/34/cw
nocturn/0/rrotary/3/cw
nocturn/0/button/2/down
and then in Reaper I can use the 'learn' facility in the Actions dialog to assign these where I like.
If I wanted to send Reaper-specific messages to Reaper, I can add an intermediary (either in the python script, or external to it), which receives these raw input event messages and translates them. For example, I intend to investigate either AutoHotKey, or perhaps a simple app (maybe in C# to learn that language) that receives OSC events and generates virtual keyboard events.