Bits & Bytes
Zie ook: binair en hex
Midi is een taal. Een computertaal om precies te zijn. De miditaal kent
bytes als woorden en bits als letters. Het is niet erg gangbaar dat een
gebruiker van digitale produkten zich bezighoudt met die bits en bytes.
Wie een tekst maakt met een tekstverwerker en daarna print op papier zal
zich er niet echt druk om kunnen maken wat er precies door de computer
naar de printer wordt gestuurd. Zolang de tekst maar op papier verschijnt.
De computercodes die naar de printer gaan, hoef je niet te snappen om met
de apparatuur te werken.
Zo kun je ook met midi werken. Je kunt midi gebruiken zonder te weten wat er
nou allemaal precies voor data door de midikabels gaan. Als je een synthesizer
aansluit op een soundmodule, is het ook absoluut niet nodig om te weten dat
er bijvoorbeeld een verschil is tussen note-off en note-on met velocity 0.
Zodra je echter met midisoftware gaat werken, kan het ineens wel belangrijk
worden om wat meer over de inhoud en opbouw van midi te weten. Zeker als je
gaat editen in een sequencer. Spelenderwijs zul je tijdens edit-operaties meer
leren over het wezen van de diverse midi-commando's. In een Event List van
een sequencer kun je zien dat bijvoorbeeld een note-commando bestaat uit drie
bytes en dat een program change commando bestaat uit twee bytes. Is dat belangrijk?
Dat kan heel belangrijk zijn ja.
SERIEEL
Mididata worden serieel verstuurd. Dat betekent dat de midicommando's na elkaar
door de kabel gaan. Als je een vijfstemmig akkoord speelt op je midiklavier,
worden de vijf note-on commando's na elkaar verstuurd. Dat gaat zo razendsnel
dat jouw oren het helemaal niet zullen merken dat de noten na elkaar komen.
Je hoort het akkoord gewoon, goed getimed uit je soundmodule komen. Als één klinkend
geheel en niet als een arpeggio.
Als je naar een film kijkt, zie je vloeiende bewegingen terwijl je eigenlijk
naar allemaal afzonderlijke beeldjes zit te kijken. Maar die beeldjes volgen
elkaar zo snel op dat je ogen het onderscheid daartussen niet meer kunnen maken.
We mogen ook niet uit het oor verliezen dat mensen vaak horen wat ze willen
horen of denken te horen. Timing en gelijkheid zijn absoluut te meten maar
de menselijke interpretatie kan de harde cijfers toch heel anders ervaren.
DE BITS
Midicommando's bestaan uit bytes. Een byte is een 'woord' dat is opgebouwd
uit acht bits (bij midi). Een bit is een getalletje dat twee verschillende
waarden kan hebben: 0 of 1. Met acht verschillende bits (een byte dus) zijn
256 variaties van nullen en enen mogelijk.
Zoals wij 1, 2, 3, 4, 5 tellen, doet midi dat op de volgende manier met bytes:
(0) 00000000
(1) 00000001
(2) 00000010
(3) 00000011
(4) 00000100
(5) 00000101
Dat gaat door tot en met de byte: 11111111. Die acht enen staat voor het getal
255. Omdat midi begint te tellen bij 0 (mensen beginnen altijd bij 1) zijn
er dus 256 verschillende waarden mogelijk.
De bytes kom je zelden tegen in deze vorm met enen en nullen. Zeker niet
als je gewoon met midi werkt. Dit is de manier zoals midi door de kabels
wordt
verstuurd. Je kunt het zien als een soort morse. Er gaan allemaal stroompjes
door de kabel. Nul is wel een stroompje en 1 is geen stroompje. Als het getal
5 wordt verstuurd, wordt er dus razendsnel achter elkaar stroom-stroom-stroom-stroom-stroom-geenstroom-stroom-geenstroom
gegeven. Zie ook de MIDI calculator!
BINAIR EN HEXADECIMAAL
Deze manier van tellen in nullen en enen heet: binair. In het dagelijks gebruik
van midi kom je deze bit-notatie vrijwel nooit tegen. Het is wel gangbaar in
een Midi Data List van synthesizers. Meestal wordt de binaire vorm weergegeven
in hexadecimale getallen. In plaats van 00000000 hebben we het dan over $00.
Hexadecimaal loopt in dit geval van $00 tot en met $FF (=255).
STATUSBYTES EN VALUEBYTES
Het is leuk dat je met die bytes 256 verschillende combinaties kunt maken,
maar het zomaar willekeurig doorsturen van die enen en nullen haalt natuurlijk
niets uit. Er zijn afspraken gemaakt over de betekenis van de verschillende
getallen. Zo is 10010000 ($90) bijvoorbeeld gedefinieerd als note-on commando
op midikanaal 1. Omdat een note-commando op zestien verschillende midikanalen
doorgestuurd moet kunnen worden zijn er zestien verschillende note-on-commando's.
De volgende is 10010001 ($91) voor een note-on op midikanaal 2. Dat gaat door
tot 10011111 ($9F) voor een note-on op midikanaal 16.
Merk op dat de laatste vier bits van dit commando het midikanaalnummer bepalen.
De eerste vier bits geven aan wat voor soort commando het is: note-on in dit
geval.
Het commando voor een note-off op midikanaal 1 is: 10000000 ($80). Het verschil
tussen een note-on en een note-off is dus maar 1 bitje.
Dat note-on commando op zich is nog niet compleet. In deze byte is namelijk
nog niet vastgelegd WELKE noot aan moet en ook niet met welke velocitywaarde
die noot aan moet. Daar zijn twee extra bytes voor nodig. Een compleet note-on
commando bestaat uit drie bytes.
De eerste byte bevat twee gegevens: wat voor soort commando het is (note-on
in dit geval) en het midikanaalnummer.
De tweede byte vertelt welk nootnummer (toets, toon) het is.
De derde byte geeft de velocitywaarde van de noot aan.
Als je een middelste C-toets op een midikeyboard indrukt, worden via midi de
volgende bits verstuurd: 10010000 00111100 01010000. Er worden nog wat meer
bits verstuurd omdat midi met een startbit en een stopbit werkt maar dat is
nu niet relevant. In hexadecimalen ziet het er alsvolgt uit: $90 $3C $50. Vertaald
in gewoon nederlands staat hier: er is een note-on op midikanaal 1, het is
de noot C3 en de aanslagsnelheid is 80.
De eerste byte van deze serie van drie heet Statusbyte. De twee overige bytes
heten Valuebytes. De statusbyte geeft aan wat voor soort midicommando het betreft;
note, pitchbend, program change etc. De valuebytes geven alleen maar waarden
aan. Er is geen verschil tussen een valuebyte voor een note en een valuebyte
voor bijvoorbeeld pitchbend of aftertouch. De statusbyte die voorafgaat aan
een valuebyte bepaalt de betekenis van die valuebyte.
Een statusbyte begint altijd met een 1 als eerste bit. Een valuebyte heeft
altijd een 0 als eerste bit. Als je 00110110 ziet staan, weet je dat het een
valuebyte is, want hij begint met een 0. Omdat de eerste bit wordt gebruikt
om de toestand van een byte aan te geven blijven er zeven bits over om verschillende
waarden mee te maken. Dat levert 128 verschillende mogelijkheden op. Vandaar
dat velocitywaarden van 0 tot 127 gaan en dat er ook 128 nootnummers zijn.
CHANNEL EN SYSTEM
Niet alle midi-commando's worden via een midikanaalnummer verstuurd. Er zijn
een aantal commando's die zonder kanaalspecificatie worden verzonden. Dat zijn
de zogenaamde System Messages. Commando's die wel een midikanaalnummer bevatten
heten: Channel Messages.
Overzicht van MIDI data:
Message | Hex | Decimal | Data byte count |
---|---|---|---|
data | 00-7F | 0-127 | na |
Channel messages | |||
Note off | 8n | 128+n | 2 |
Note on | 9n | 144+n | 2 |
Polyphonic key pressure | An | 160+n | 2 |
Control/Mode change | Bn | 176+n | 2 |
Program change | Cn | 192+n | 1 |
Monophonic channel pressure | Dn | 208+n | 1 |
Pitch bend change | En | 224+n | 2 |
System exclusive | |||
System exclusive status | F0 | 240 | variable |
System common | |||
MIDI Time Code (MTC) | F1 | 241 | 1 |
Song position pointer | F2 | 242 | 2 |
Song select | F3 | 243 | 1 |
(Undefined) | F4 | 244 | 0 |
Cable select* | F5 | 245 | 1 |
Tune request | F6 | 246 | 0 |
End of exclusive (EOX) | F7 | 247 | 0 |
System real-time | |||
Timing clock | F8 | 248 | 0 |
(Undefined) | F9 | 249 | 0 |
Start | FA | 250 | 0 |
Continue | FB | 251 | 0 |
Stop | FC | 252 | 0 |
(Undefined) | FD | 253 | 0 |
Active sense | FE | 254 | 0 |
System reset | FF | 255 | 0 |
Note: n is the channel number - 1 (0 is channel 1, 1 is channel 2, ...).
* Though officially undefined, some MIDI interfaces use this message to control cable access; a single data byte that follows designates the cable number on which subsequent MIDI messages are routed.
MIDI Controller Numbers |
||
The table below presents a summary of the MIDI Standard
Controller codes in decimal and hexadecimal (h) form. |
||
Decimal | Hex | Controller Name |
0 | 00h | Bank Select (Controller # 32 more commonly used) |
1 | 01h | Modulation Wheel |
2 | 02h | Breath Contoller |
3 | 03h | Undefined |
4 | 04h | Foot Controller |
5 | 05h | Portamento Time |
6 | 06h | Data Entry MSB |
7 | 07h | Main Volume |
8 | 08h | Balance |
9 | 09h | Undefined |
10 | 0Ah | Pan |
11 | 0Bh | 0Ch |
12 | 0Ch | Effect Control 1 |
13 | 0Dh | Effect Control 2 |
14-15 | 0E-0Fh | Undefined |
16-19 | 10-13h | General Purpose Controllers (Nos. 1-4) |
20-31 | 14-1Fh | Undefined |
32-63 | 20-3Fh | LSB for Controllers 0-31 (rarely implemented) |
64 | 40h | Damper Pedal (Sustain) [Data Byte of 0-63=0ff, 64-127=On] |
65 | 41h | Portamento |
66 | 42h | Sostenuto |
67 | 43h | Soft Pedal |
68 | 44h | Legato Footswitch |
69 | 45h | Hold 2 |
70 | 46h | Sound Controller 1 (default: Sound Variation) |
71 | 47h | Sound Controller 2 (default: Timbre/Harmonic Content) |
72 | 48h | Sound Controller 3 (default: Release Time) |
73 | 49h | Sound Controller 4 (default: Attack Time) |
74 | 4Ah | Sound Controller 5 (default: Brightness) |
75-79 | 4B-4Fh | Sound Controller 6-10 (no defaults) |
80-83 | 50-53h | General Purpose Controllers (Nos. 5-8) |
84 | 54h | Portamento Control |
85-90 | 55-5Ah | Undefined |
91 | 5Bh | Effects 1 Depth (previously External Effects Depth) |
92 | 5Ch | Effects 2 Depth (previously Tremolo Depth) |
93 | 5Dh | Effects 3 Depth (previously Chorus Depth) |
94 | 5Eh | Effects 4 Depth (previously Detune Depth) |
95 | 5Fh | Effects 5 Depth (previously Phaser Depth) |
96 | 60h | Data Increment |
97 | 61h | Data Decrement |
98 | 62h | Non-Registered Parameter Number LSB |
99 | 63h | Non-Registered Parameter Number LSB |
100 | 64h | Registered Parameter Number LSB |
101 | 65h | Registered Parameter Number MSB |
102-120 | 66-78h | Undefined |
Channel Mode Messages |
||
121 | 79h | Reset All Controllers |
122 | 7Ah | Local Control |
123 | 7Bh | All Notes Off |
124 | 7Ch | Omni Off |
125 | 7Dh | Omni On |
126 | 7Eh | Mono On (Poly Off) |
127 | 7Fh | Poly On (Mono Off) |
* Met dank aan MOPRO.nl
Links
Donatie
Dit is een gratis site, die al sinds 2003 voortdurend wordt uitgebreid en geactualiseerd. Als jij ook wilt dat dat zo blijft, doe dan een donatie aan Popschool Maastricht >>
Bijgewerkt op: 19 Juni, 2024