hedgehog/hardware/ HomePage
What is a Hedgehog?
This is a mouse. We are all familiar with them.
Now consider a separate peripheral with an assortment of knobs and buttons. One I made a while back out of an Arduino and a few rotary knobs I bought online.
For example the Behringer BCR-2000, or the Novation Nocturn, or even a trackball. The main idea, which was obvious to me all the way back in 2006 when I first acquired the aforementioned Behringer device, was that the hardware should only tell the computer what hardware events, like button presses, have occurred, and not to try to be clever with it, as MidiController's almost always do. The reasoning is that a computer is far better equipped to manipulate the events. For example, if you want your midi keyboard to shift octaves, that is trivial for the computer to do, so there is no need for the hardware to do this for you if your device is sending events to a computer. If your midi controller is, for example, connected to a hardware synth, then there is a real need for things like shifting octaves, and
For me, a HedgeHog is an input device, with knobs, buttons, leds, and so on, which is as dumb as possible: it tells the computer what buttons are pressed, and so on, like a typical USB keyboard and mouse, but unlike typical MIDI control surfaces which internally translate events to MIDI notes and CCs, and often (such as when the device has endless rotary encoders) it is not possible to recover this information (see NotAHedgeHog).
A device on the market which demonstrates one of the uses of this concept is the TourBox family of devices. But their software and hardware are tied together and do little except translate TourBox button presses and encoder movements into virtual keyboard presses (e.g. if I move the knob clockwise, it turns that into e.g. a 'Ctrl-Right' key combo). Hedgehogs, as I envisage them, is like this concept, but on steroids, and open and flexible. The
My view is that the computer is far better equipped to decide meanings for hardware events than firmware in the device.
I built a simple proof-of-concept (HuphreyTheHedgehog) a while back, made of an Arduino and a few push-rotary-encoders. Basically the Arduino is a microcontroller, a usb-serial chip and some I/O. The device communicates to the computer via the usb-serial connection, using a simple protocol that is sufficient to tell the computer about what has happened. I came up with a simple 7-bit protocol using bit-7 to indicate control messages. A byte with bit-7 set (that is, between 0x80 and 0xFF) is a control byte, and a byte without bit-7 set (that is, between 0x00 and 0x7F) is a data byte. The byte 0xFF is used to signal the end of a message, and 0x80..0xFE indicates the message type. So for example, 0x80 signifies raw data, 0x81 signifies button presses, 0x82 signifies absolute controller movements (e.g. sliders and pots), 0x83 indicates relative (e.g. endless rotaries), and there is ample space for other messages. There is no need for the degree of prescribed meaning we see in e.g. MIDI.
Existing hardware
Novation Nocturn
The NovationNocturn is ideal except for one annoying thing: it can only be used as a generic MIDI device under Linux. Under Windows or Mac, it only works with Novation's discontinued Automap software. So to use them, I use either a Linux laptop or a Raspberry Pi, which receives events from the device, and sends cc events to switch the leds on and off (and adjust the encoder rings), and talks via OSC over the network using software I tend to write in Python. By using dlls and so libraries loaded by ctypes, you can basically do anything.
The annoying thing about the Nocturn is that, behind the scenes, it (I think) communicates with the computer by sending raw MIDI data (specifically MidiCc events), and would otherwise be class compliant, but requires a proprietary driver under Windows and Macos which means it only works with their discontinued Automap software.
As I said, under Linux, it works like a typical MIDI device, so to make use of them, I use a Linux laptop or a pi as a hub.
Generally, the idea is that the hubs form a HedgehogFamily.