music/daw/reaper/ HedgeHogs
I've been playing around with this concept for quite some time (actually, for me, it all began back in 2006 when I bought my first BehreingerBCR2000 — I still have one). I need for a name to sound like a counterpart for the mouse, I wanted a cute animal name, so settled on Hedgehog. My intention is to be able to use anything to control anything. My current thrust is towards 'OSCEverywhere', aiming to see how to make it easy for software developers to make it possible to control their apps via OSC with little more effort than is required to make them controllable by keyboard shortcuts. In addition, I hope to explore AutoHotkey, and more generally, some way to trigger keyboard shortcuts by OSC messages.
A while back, I built a simple proof-of-concept Hedgehog, which I named Humphrey.
Humphrey the Hedgehog
Like the NovationNocturn, Humphrey has 8 rotary encoders, though these are all stepped, not smooth, but are push encoders. They were all I could find on Amazon, and were enough for a quick play. The Nocturn has 8 smooth rotary encoders and a separate stepped encoder, along with 16 led-lit buttons (one row red, one row green).
Essentially it should be easy for more competent Makers and engineers to produce more robust and elaborate Hedgehogs.
The important feature of Hedgehogs is that they report raw events only (like a mouse reports left/right/up/down movement and button presses), in a common protocol (I came up with two: one use 7bits for data and an 8th bit to signify control signals, a bit like MIDI, which I called Pigeon, short for Pigeon-Hedgehog; and the other uses 32bit words, where the first word indicates message type, and the second indicates message length, with the payload meaning left unspecified, much like OSC, but binary, which I called MX32 for Message Exchange 32, but informally referred to as Hedgehog, the native language of Hedgehog devices.)
For the most part, OSC is fine. The only exception is e.g. in a music plugin's processing function, where I would like the expressiveness of OSC (that is, not being limited to e.g. 127 CCs only, many with specified meanings), but without having to do either a) text string processing; or b) dynamic memory allocation. Thus, essentially, my idea amounts to factoring out the text-message-name lookup of OSC so that, by the time data gets into the plugin's processing function, it is all 32bit words, either integers or floats, with a meaning mutually understood by whatever is sending the message and whatever is receiving it. The inspiration there came from CSound's score language, where instruments can be sent arbitrary data for a note on. I find Midi's CC system overly restrictive, though I've not looked into Midi2 yet.