Midi vs HID
Geschreven door Reind Dooyeweerd donderdag, 11 maart 2010 01:09
Vandaag de dag komen we de term HID steeds meer tegen, sommige fabrikanten komen zelfs met de term High Definition Midi (wat natuurlijk compleet fout is als het om een HID apparaat gaat). Maar wat zijn nou precies de verschillen en waarom zouden we op HID apparaten over moeten stappen? Volstaat midi simpelweg niet meer voor dj gebruik of is HID gewoon een fancy term welke fabrikanten graag gebruiken?
Als eerste even de basis van midi, een midi message bestaat uit 3 bytes, oftewel 24 bits. Van die 3 bytes worden er 2 gebruikt voor het doorgeven van data en is er 1 een status byte. In de meeste gevallen meer dan genoeg ruimte om een functie aan te sturen met behulp van een button en ook faders en jogwheels kunnen door 2 midi messages aan elkaar te koppelen meer dan genoeg nauwkeurigheid bieden voor dj gebruik. Een complete uitleg leest men overigens hier.
Toch heeft midi ook zijn beperkingen. Ten eerst is het een “push protocol”, data wordt verstuurd ongeacht het feit of de software er klaar voor is of niet. Op zich niets mis mee maar wanneer we ineens een hele hoop data gaan versturen wil het nog wel eens mis gaan in de verwerking ervan.

Windows bijvoorbeeld heeft een ingebouwde speed limiter als het gaat om de verwerking van midi messages, wanneer er teveel data binnen een te korte tijd richting dit protocol wordt gestuurd ontstaat er een zogenaamde 'stack overflow' met als resultaat een crash van het OS. Mooi voorbeeld: Iedereen die met een midi controller werkt onder windows en bijvoorbeeld een hoge resolutie output op de jogwheels heeft zal wel eens een vastloper gehad hebben nadat men flink in de weer is geweest met de jogwheels.
De software (Traktor bijvoorbeeld) blijft in de meeste gevallen wel gewoon de muziek af spelen maar de midi controller lijkt nergens meer op te reageren… oplossing is dan vaak het los pluggen van de controller, opnieuw aansluiten en hij doet het weer. In 9 van de 10 gevallen hebben we dan te maken gehad met een “stack overflow” (gevoeligheid verschilt per OS, Vista is er gevoeliger voor dan XP bijvoorbeeld) welke als resultaat had dat het midi gebeuren vast liep.
Toch is er ook een oplossing voor bovenstaand probleem welke wel eens door fabrikanten toegepast wordt en prima werkt, een extra delay na een x aantal messages waardoor de “stack overflow” voorkomen wordt. Toch heeft midi ook meer beperkingen, we kunnen niet oneindig gebruik maken van 14bit midi data om een hoge resolutie te kunnen behalen, 14bit midi data kan namelijk maar 1 keer per kanaal, oftewel 16 maal aangezien we 16 midi kanalen hebben.
Een heel ander probleem is het aansturen van display's, niet onmogelijk maar wel verdomd lastig en daarnaast ook nog eens iets wat flink vertragend zou gaan werken wanneer we dat via midi zouden doen. Midi volstaat dus PRIMA om een button, rotary e.d. aan te sturen maar volstaat niet om bijvoorbeeld een mooi display zoals op de CDJ-2000 van Pioneer te voorzien van data en juist dat is toch de kant die we op gaan met het digitale dj’en.
HID, wat moet je er mee?
Dan komt HID om de hoek kijken, oftewel Human Interface Device. Een term die niet iedereen even bekend in de oren zal klinken maar bijna iedereen zal een HID apparaat in huis hebben, keyboards, muizen, game controllers, het zijn allemaal in de meeste gevallen HID apparaten. Het HID protocol is een sub protocol van het USB protocol en voorziet deze van een aantal aanvullingen.
Het grote voordeel van een HID apparaat is dat we er geen drivers voor hoeven te installeren. De informatie die door het apparaat verzonden word richting de host word door middel van een ingesloten HID descriptor vertaald. Kort door de bocht genomen, een HID apparaat vertelt precies aan de software wat hij met een bepaald data pakket moet doen. Meer over het HID protocol vind je hier, http://en.wikipedia.org/wiki/Human_interface_device
De grote voordelen van HID zijn dat deze niet alleen veel sneller data verwerkt maar dat er ook gemakkelijk een bi-directionele communicatie tussen het apparaat en de host opgezet kan worden. Komen we al snel weer aan bij de display’s… die zijn dus “vrij gemakkelijk” te voorzien van data zonder dat daarvoor snelheid ingeleverd hoeft te worden. Daarnaast is HID een “pull protocol” wat betekent dat er data verwerkt wordt wanneer de software daarom vraagt. Mooi voorbeeld hierin is de CDJ-2000 van Pioneer, wanneer we deze aansluiten en Traktor opstarten zien we vanaf het begin dat de software is geladen een constante stroom aan data communicatie heen en weer gepompt worden tussen software en hardware.

Daarnaast kan een fabrikant binnen dit protocol een aantal dingen specificeren, mooi voorbeeld hiervan is de pitch slider op de nieuwe CDJ’s van Pioneer welke binnen de Traktor software van Native Instruments exact dezelfde resolutie hebben als ze normaal hebben wanneer we de pitch slider zouden gebruiken in combinatie met het afspelen van cd’s. De feeling blijft in dat geval dus in alle vormen van gebruik hetzelfde en men zit niet vast aan de beperkingen van midi (zoals bijvoorbeeld 128 stappen op een pitch slider).
HID heeft dus een groot aantal voordelen ten opzichte van midi zoals snelheid, mogelijkheden, het aansturen van display en de mogelijkheid om dezelfde nauwkeurigheid te bieden die het apparaat bijvoorbeeld ook zou hebben in een analoge situatie (denk hierbij aan de draaitafel vs de NS7 van Numark).
Toch heeft HID ook zo zijn moeilijkheden, de grootste is het implementeren van een apparaat binnen de software, out of the box zal een apparaat direct werken met de meegeleverde software maar een NS7 in combinatie met bijvoorbeeld Traktor is een optie die niet lekker gaat werken om de doodsimpele reden dat Traktor de ondersteuning voor de NS7 niet aan boord heeft.
De reden dat HID apparaten niet altijd even lekker willen werken binnen andere dan de meegeleverde software is dat het HID protocol niet volledig gestandaardiseerd is, iedere fabrikant is vrij om apparaat specifieke messages uit te sturen waardoor een software bouwer een soort “vertaler” (even in lekentaal) moet hebben om deze boodschappen begrijpbaar te kunnen maken voor zijn software.
Wanneer de software bouwer dus niet beschikt over de “vertaler” van de uitgestuurde data kan hij/zij niets met de data en zal men dus terug moeten vallen op het midi protocol wat uiteindelijk meer beperkingen op legt dan wanneer we de HID mogelijkheid voor handen hebben. Een Vestax VCI-300 zal dus op de jogwheels en faders met een veel hogere nauwkeurigheid werken binnen ITCH dan mogelijk is binnen Traktor, de reden is simpel, onder Traktor zitten we vast aan het midi protocol omdat deze geen HID ondersteuning heeft voor de VCI-300 terwijl die HID ondersteuning wel aanwezig is binnen ITCH.

Daarnaast is het “customizen” van de indeling op een controller veel lastiger te doen in combinatie met HID voor een software bouwer, om die reden biedt ITCH bijvoorbeeld geen mogelijkheid om bepaalde functies die je nooit gebruikt op een controller in te wisselen voor functionaliteit waar geen button voor aanwezig is maar die je wel zou willen gebruiken.
Moeten we midi nu maar meteen af danken?
Ik denk van niet, midi heeft 1 groot voordeel en dat is dat het een gestandaardiseerd protocol is waarin alles is vastgelegd. De opvolger van midi zal er ooit wel een keer gaan komen (is er eigenlijk al in de vorm van het OSC protocol maar dat wordt amper ondersteunt) en tot op heden is in de meeste gevallen de beperking van het midi protocol nog niet echt een probleem. Pas wanneer we een apparaat aan gaan schaffen waarbij er display support e.d. aanwezig moet zijn is het verstandig om te kijken of de software welke je in gedachten had deze controller ook volledig native via HID ondersteund.

