
HID vs MIDI
Most of the DJ controllers on the market today can be sorted in two categories: MIDI controllers and HID controllers.
Some controllers even provide both interfaces.
But what exactly is the difference between MIDI and HID, and when to use which?
MIDI
The MIDI interface is the old legacy interface, that was developed many years ago to let digital musical instruments communicate together.
It's based on short "messages" that usually represent a button pressed or released, or the movement of a slider.
MIDI is still chosen by some manufacturer because many applications can be compatible with MIDI controllers with little configuration, whereas except for VirtualDJ, software usually need to be specifically developed for one controller to be able to talk to it in HID. (in VirtualDJ, since version 6, HID controllers can now easily be implemented with little configuration too).
But, the main problem with MIDI, is that it cannot track fast movements, and therefore is very ill-adapted for controllers with jog-wheels.
Windows MIDI stack has a built-in speed limit, and will likely crash if it receives MIDI messages too fast.
On Windows VISTA, it will crash much faster than on Windows XP, which requires manufacturers who still want to implement MIDI for their jog-wheel controllers, to implement different settings for latency depending on the operating system.
HID
HID (Human Interface Device), is a sub-protocol of the USB protocol, that is used by devices whose function is to let the human interact with the computer. Mouses, keyboards, joysticks, are examples of HID devices.
The HID protocol lets a DJ controller defines a "page" of an arbitrary length, where each bit or group of bits will represent a button, a slider or a jogwheel.
The conceptual difference between HID and MIDI is that HID is a "pull" model, where the software application will require data whenever it is ready to process them, whereas MIDI is a "push" model, where the controller will force-feed the application with data whether it's ready to process it or not.
This results in a better latency in HID, and allow the controller to have fast-moving elements like jog-wheel, without risking to crash the operating system.
It also let the controllers implement more extensive LCD displays with lines of text etc, and let the application use it, without the usual MIDI bandwidth problems.
So, to summarize, the MIDI interface is an old protocol, that can still be safely used for simple controllers that have only buttons, sliders and LEDs, but is ill-advised for controllers with jog-wheels or LCD displays.
And the HID interface is a newer protocol, better adapted for more complicated controllers, but that might not be compatible with all DJ software (but will always be compatible with VirtualDJ though).
See also:
Implementing new controllers in VirtualDJ 6
Go Back
Wiki HOME