Dr.Godfried-Willem RAES

Kursus Experimentele Muziek: Boekdeel

Hogeschool Gent : Departement Muziek & Drama


<Terug naar inhoudstafel kursus>

 

Naar officiele midi standaard

1070:

DE MIDI-STANDAARD

Memo: MIDI staat voor :

Het is niets meer dan een internationaal vastgelegd data-formaat voor de uitwisseling van informatie tussen elektronische muziekinstrumenten en apparatuur onderling en tussen deze apparatuur en komputers.

De hardware aspekten van het interface en de standaard worden uitvoerig besproken in het hoofdstuk over hardware en elektronika, waarin we onder meer een ontwerp voor een komputer midi-interface zullen behandelen.

In dit hoofdstuk willen we een zo volledig mogelijk overzicht gegen van ALLE bij internationale afspraak vastgestelde midi-codes en hun betekenis. Hiervoor steunden we ons op document No.MIDI_1.0, van 5 augustus 1983, uitgegeven door de IMA (International Midi Association). Latere bijeenkomsten van het MIDI-commite hebben geleid tot verdere afspraken, meer bepaald met betrekking tot de standaardisering van file-formaten voor sequencers en kompositieprogrammas (de MIDI-file specifikatie) en tot standaarden voor MIDI- dumps van Sample-data. Het Midi-kommitee komt nog steeds regelmatig bijeen zodat het dus best mogelijk is dat bepaalde specifikaties hier ontbreken. De internationale afspraak is echter dat nooit wordt teruggekomen op gemaakte kodes en afspraken.

We zullen in dit hoofdstuk nogal wat engelse en nederlandse termen dooreen gebruiken, omdat de student niet in het minst is geholpen met nederlandse vertalingen die hem niet eens zouden toelaten een normale en steeds engelstalige gebruiksaanwijzing bij een midi-toestel te begrijpen.

1.DEFINITIES

Midi-berichten bestaan uit een reeks opeenvolgende bytes. Twee soorten bytes kregen een onderscheiden betekenis in het systeem:

A. STATUS-bytes :

dat zijn alle bytes waarvan het meest betekenisvolle bit 1 is ( Decimaal zijn dat dus alle getallen groter dan 127). [ MSB > 127 of, bit7 is SET)

B. DATA -bytes :

dat zijn alle bytes waarvan het meest betekenisvolle bit 0 is. [MSB < 128 of, bit 7 is CLEARED]

Er worden twee soorten MIDI berichten onderscheiden :

A.KANAAL-BERICHTEN :

Hierbij is een kanaal nummer besloten in het laagste nibble van het status byte. Dergelijke berichten mogen alleen worden 'begrepen' door aangesloten toestellen die op het overeenkomstige kanaal zijn ingesteld.

Er zijn twee types van KANAAL-BERICHTEN:( channel messages)

1. VOICE :

berichten die het register ( de voice) van een bepaald instrument bepalen

2. MODE :

berichten die de wijze waarop een instrument dient te reageren op VOICE-KANAAL-BERICHTEN bepalen. MODE - KANAALBERICHTEN dienen te worden verstuurd via het kanaal waarop het instrument of de module is ingesteld.

B.SYSTEEM-BERICHTEN

Hier bevat het statusbyte ( het byte waarvan het eerste bit steeds 1 moet zijn ) geen kanaalinformatie. Het laagste nibble is dan ook vrij voor andere doelen.

Er zijn drie types van systeem-berichten:

1.COMMON ( gemeenschappelijk): deze berichten zijn bestemd voor alle toestellen en kanalen die in het systeem zijn opgenomen.

2.REAL-TIME :eveneens bestemd voor alle aangesloten toestellen en kanalen. Dit type bestaat steeds uit niet meer dan een enkel byte: uitsluitend een status-byte. Dit soort bericht mag eender wanneer worden uitgezonden, zelfs midden tussen andere midi- byte sekwensen.

3.EXCLUSIVE-BERICHTEN : deze berichten bestaan uit een status-byte , gevolgd door een of meer bytes die een kode vormen die alleen door welbepaalde toestellen kunnen worden begrepen. Toestellen die de kode niet begrijpen, mogen niets met deze berichten aanvangen en ze mogen hun normale werking al evenmin verstoren. De kodes worden aan de fabrikanten door het Midi-kommitee toegewezen op aanvraag.

Een STATUS byte blijft geldig, tot op het moment waarop een nieuw status-byte het toestel bereikt. Om die reden hoeven we , wanneer me meerdere noten via eenzelfde kanaal willen aan of uitschakelen, niet het status-byte voor note on/off telkens opnieuw te herhalen. Wanneer we meerdere instrukties voor eenzelfde status-byte verzenden, treedt de zogenaamde 'running status' in.

2.FUNKTIES

 Ook de inhoudelijke betekenis van de diverse midi-kodes, en daarmee de uitwerking die ze geacht worden te hebben, werd vastgesteld.

CHANNEL-MODE-MESSAGES : KANAAL-MODUS-BERICHTEN

We zagen in vorige hoofdstukken reeds dat het eerste byte in het MIDI-protokol , geschreven in binaire vorm dan, steeds dient te beginnen met een 1. (1xxx xxxx). We zagen ook dat het laatste nibble de kanaal informatie bevat, wat ons toelaat tegelijkertijd verschillende midi-toestellen op eenzelfde interface aan te sluiten. (doorlussing via MIDI-THRU) . We kunnen elk van deze toestellen via een afzonderlijk kanaal van opdrachtinformatie voorzien. Er kunnen maksimaal 16 kanalen per afzonderlijke MIDI-uitgang worden gestuurd. (0-15)

Alvorens we dat echter kunnen doen, dienen we het ontvangende instrument in te stellen in een van volgende modi:

Mode 1 : hierbij speelt het betreffend kanaal polyfoon en reageert het op berichten die gericht zijn aan alle instrumenten en kanalen. Dit noemt men OMNI-POLY mode. Het blijkt in de praktijk weinig bruikbaar te zijn.

Mode 2 : deze mode is zo goed als volslagen onbruikbaar. Immers hier reageert het aldus ingestelde kanaal op berichten bestemd voor alle kanalen, maar het kanaal zelf gedraagt zich als een monofoon instrument. Dit heet dan de OMNI-MONO mode.

Mode 3 : Hierbij wordt het geadresseerde kanaal ingesteld om de ontvangen voice-berichten polyfoon over de diverse stemmen/instrumenten te verdelen. Het kanaal zelf is polifoon. Men noemt deze vooral bij multitimbrale syntesizers goed bruikbare modus OMNI-OFF/POLY.

Mode 4 : Hier kan aan elk kanaal een maximaal aantal polifoon te spelen noten worden toegewezen. In deze mode luistert een ontvangstkanaal alleen naar berichten op hetzelfde kanaal. Dit heet dan OMNI-OFF/MONO.

Wanneer het ontvangende instrument in ingesteld in MODE 1 of in MODE 2 dan moet het zendende apparaat alle VOICE-CHANNEL-BERICHTEN op eender welk kanaal uitzenden. Is het ingesteld op MODE 3 dan moeten de berichten voor alle stemmen op een kanaal N worden uitgestuurd.

Is het tenslotte -en dit is wellicht het enige wat ons interesseert- ingesteld op MODE 4, dan moeten de kanaalnummers gebruikt voor verzending overeenstemmen met die van de ontvanger. 

Vele ingewikkelde midi-synthesizers bestaan intern uit enkele verschillende toestellen , en gebruiken dan ook de kanaalinformatie voor het sturen van de diverse onderdelen.

De FM-synthesizers Yamaha FB-01 evenals de TX-81Z bvb. gebruiken tot 8 kanalen, voor hun besturing. Het zijn dan ook 8-stemmige volstrekt polyfone synthesizers. Verwar echter deze polyfonie niet met die van bvb. een Casio CT630 keyboard, dat weliswaar polyfoon is, maar daarvoor slechts een kanaal gebruikt . Hier is het echter niet mogelijk om voor elke muzikale stem een andere klankkleur te programmeren, wat inderdaad alleen kan bij volkomen onafhankelijke kanaalsturing. De EMU-Proteus klankmodules noemt men multitimbraal: ze zijn 32-stemmig hoewel niet meer dan 16 midi-kanalen voor de besturing worden gebruikt. Elk kanaal kan echter verschillende interne klankkleuren tegelijkertijd voortbrengen en kan polyfoon worden gebruikt.

De notie MIDI-KANAAL kan je je best voorstellen als gelijkaardig aan een TV- kanaal. Alleen toestellen die ingesteld zijn op het juiste kanaal kunnen de ervoor bestemde informatie ontvangen.

De juiste codering voor KANAAL-MODUS-BERICHTEN is alsvolgt:

STATUS-BYTE : 1011 nnnn channel mode + kanaal

0xxx xxxx kode voor de modus

0000 yyyy aantal noten op dit kanaal dat polyfoon gespeeld moet kunnen worden indien mode4 ingesteld werd.

De kodes voor de instelling van de modus zitten alsvolgt in elkaar:

124 schakelt OMNI OFF , het erop volgende databyte is 0

125 schakelt OMNI ON, het erop volgende databyte is 0

126 schakelt MONO ON en dus POLY OFF, het erop volgende databyte stelt het aantal kanalen in.

(0-16). Wanneer 0 wordt ingesteld, dan komt het aantal kanalen overeen met dat van de ontvanger.

127 schakelt POLY ON en dus MONO OFF het erop volgende databyte is 0

Telkens wanneer een dergelijke kode verzonden wordt, worden alle klinkende noten uitgeschakeld. Let op de overigens bijzonder onlogische en verwarrende naamgeving van de modi bij het koderen van de gewenste instellingen.

Ook andere instellingen kunnen via deze kodes worden verstuurd. Om alle noten die klinken in een keer uit te schakelen kan bvb. op vele synthesizers volgende reeks gebruikt worden:

KANAAL-STEM BERICHTEN: (CHANNEL-VOICE-MESSAGES)

Volgende midi-kodes zijn internationaal naar betekenis en werking gestandaardiseerd en kan je dus universeel gebruiken op alle midi-toestellen.

NOOT AAN/UIT (Note on/off) :

1001 nnnn (Bin) of 144 + K (decimaal)

n = kanaalnummer

K= kanaalnummer

0kkk kkkk (Bin) of 0-127 (Dec)

k = noot 60=midden Do op pianoklavier

0vvv vvvv (Bin) of 0-127 (Dec)

v = aanslagsterkte ('velocity')

als v = 0 dan wordt de noot uitgeschakeld.

Midi klavieren die geen aanslaggevoeligheid hebben, sturen voor dit byte steeds de vaste waarde 64 uit.

Dit is de kode-sekwens die we reeds in vroegere hoofdstukken behandelden. Een variant die kan worden gebruikt om noten UIT te schakelen is:

NOOT UIT (Note Off) :

1000 nnnn (Bin) of 144 + K (decimaal)

n = kanaalnummer K=kanaalnummer

0kkk kkkk (Bin) of 0-127 (Dec)

k = noot

0vvv vvvv (Bin) of 0-127 (Dec)

v = uitsterfsnelheid ( release velocity)

Dit laatste byte wordt door omzeggens geen enkele synthesizer ondersteund.

PROGRAMMA VERANDERING ( Program Change) :

1100 nnnn (Bin) of 92 + K (Decimaal)

n = kanaalnummer K=kanaalnummer

0ppp pppp (Bin) of 0-127 (Dec)

p = programmanummer

Niet alle MIDI-toestellen hebben 127 programmas aan boord. Hoeveel er beschikbaar zijn staat echter steeds in de bijhorende handleidingen (manuals).

Bij de meest recentere MIDI-toestellen zijn er veel meer dan 127 beschikbare programmas (of klanken). Deze worden dan veelal in 'banken' ingedeeld. De eerste reeks van 128 klanken bevindt zich dan in Bank 0. Omdat de afgesproken instruktie voor programma-veranderingen niet toelaat grotere getallen dan 127 door te sturen, hanteren diverse fabrikanten verschillende protokols om de programmas in te stellen:

    1. - Instelling via system-exclusive
    2. - Manuele instelling van het Bank-nummer waarna de klanken via normale program change sekwensen bereikbaar zijn.
    3. - Remapping van de presets in het standaard-bereik 0-127. Dergelijke remapping kan zowel via het frontpaneel als onder programmakontrole gebeuren.
    4. - door gebruikmaking van de kontinue kontrolers &H00 en &H20 waarmee de bank kan worden ingesteld.

Voorbeeld:

1011 nnnn (Bin) of 176 + K (Decimaal), n = kanaalnummer K=kanaalnummer

0000 0000 (Bin of 0 decimaal)

selekteer MSB van de gewenste bank

0nnn nnnn gewenst banknummer MSB

1011 nnnn status byte cont.controller

0010 0000 (Bin of &H20 of 32 decimaal)

selekteer LSB van de gewenste bank

0nnn nnnn gewenst banknummer LSB

1100 nnnn (Bin) of 192 + K (decimaal)

n = kanaalnummer

K=kanaalnummer

statusbyte voor program change

0nnn nnnn gewenst programmanummer (0-127)

Dit voorbeeld kan ook een beetje korter worden verzonden door gebruik te maken van de 'running status' van het eerste status- byte:

1011 nnnn status + kanaal

0000 0000 MSB-select

0nnn nnnn MSB van de bank

0010 0000 LSB-select

0nnn nnnn LSB van de bank

1100 nnnn status + kanaal

0nnn nnnn programmanummer

Welk protokol een bepaald type synthesizer of enig ander midi- toestel gebruikt en begrijpt, zal je in de manual moeten opzoeken. Sommige fabrikanten verwarren de zaak echter aanzienlijk door hun klanken op een afwijkende manier in banken onder te verdelen. Vaak voorkomend op wat oudere FM-synthesizers zijn bijvoorbeeld volgende indelingen:

BANK 0 - programma 1 tot 32 stuurbaar als prg's 0-31

BANK 1 - programma 1 tot 32 stuurbaar als prg's 32-63

CONTROL CHANGE :

Hiermee kan de manier waarop bepaalde input-controllers op het klankeffect inwerken ingesteld worden. Voorbeelden van veel voorkomende controllers zijn :

Kontinu veranderlijke kontrolers:

&H00 zie hiervoor: extended program change MSB-bank

&H01 MODULATION WHEEL (MSB- bvb. modulatiewiel, vibrato)

&H02 BREATH CONTROLLER (MSB-Blaaskontrole)

&H04 FOOT CONTROLLER (MSB-Pedaalkontrole)

&H05 PORTAMENTO TIME

&H06 Data Entry

&H07 VOLUME CONTROLLER

&H08 BALANCE (bij klanken bestaande uit twee komponenten)

&H0A PAN CONTROLLER (regelt het stereo-effect)

&H0B EXPRESSION

&H0C - &H0D EFFECT-CONTROL 1 and 2

&H10 - &H13 NON-STANDARD CONTROLLERS

&H1F Laatste MSB controller

&H20 zie hiervoor: extended program change LSB-bank

&H21 - &H3F LSB informatie van de controllers &H00-&H1F (0-32)

Schakelaars (ON/OFF): (Switches)

&H40 SUSTAIN PEDAL (linkerpedaal)

&H41 PORTAMENTO PEDAL

&H42 SOSTENUTO PEDAL (rechterpedaal)

&H43 SOFT-PEDAL

&H45 HOLD-PEDAL

&H50 - &H53 NON-STANDARD CONTROLLERS

&H5B EFFECT 1 DEPHT

&H5C EFFECT 2 DEPHT (Tremolo)

&H5D EFFECT 3 DEPHT (Chorus)

&H5E EFFECT 4 DEPHT (Detune)

&H5F EFFECT 5 DEPHT (Phaser)

&H60 - &H61 Data increment en data decrement

&H62 Non-registered parameter number LSB

&H63 Non-registered parameter number MSB

&H64 Registered parameter number LSB

&H65 Registered parameter number MSB

De MIDI-CODES die hiervoor dan worden gebruikt zijn :

STATUS : 1011 nnnn (Bin) of 176 + K (Decimaal)

n = kanaal K=kanaal

DATA : 0ccc cccc (Bin) of 0-127 (Decimaal)

c = nummer van de gewenste controller

0vvv vvvv (Bin) of 0-127 (Decimaal)

v = instelling van het effekt

Merk op dat het gebruikte status byte hetzelfde is dan dat wat we dienen de gebruiken om KANAAL-MODUS-BERICHTEN te versturen!

We kunnen het onderscheid tussen beide maken aan de hand van de waarde van het eerste data-byte: wanneer dit een getal is groter dan 121, dan gaat het om een KANAAL-MODUS-BERICHT en niet om een CONTROLL-CHANGE !

CHANNEL-PRESSURE/ GLOBAL AFTER-TOUCH (naslag-kontrole):

1101 nnnn of 208 + K

0vvv vvvv of 0-127

Dit werkt op het gehele in K gegeven midikanaal (in tegenstelling tot de aftertouch die per noot gestuurd kan worden, via 160+K, byte). Omtrent het juiste gebruik en de implementatie hiervan heerst bij de fabrikanten wel enige verwarring. Ga daarom zelf na bij de toestellen die je wil gebruiken hoe een en ander is geimplementeerd.

PITCH-BEND (Toonhoogtebuigingen, via het pitch-wheel):

1110 nnnn of 224 + K

0LLL LLLL of 0-127 LSB van de waarde

0MMM MMMM of 0-127 MSB van de waarde

(totaal:0-16383 decimaal of 0-3FFF Hex ) de middenstand komt overeen met :

LSB=0

MSB=&H40

Deze sturing werkt op heel wat synthesizers echter op een voorspelbare manier alleen wanneer via een voorafgaandelijke kontrolesekwens het toonhoogtemodulatiewiel werd ingeschakeld. M.a.w. eerst moet volgende midi-sekwens verstuurd worden (eenmalig !):

176 + K

1

1-127 ( dit stelt het aantal halve tonen in dat met het wiel kan geregeld worden + of - )

Een default instelling behoort niet tot de standaard en is dan ook van synthesizer tot synthesizer verschillend.

SYSTEM-MESSAGES

-SYSTEM COMMON

STATUS-byte = 1110 xxx

gevolgd door 0 tot 2 data-bytes

Deze berichten gelden voor het gehele systeem.

-SYSTEM REAL-TIME

STATUS-byte = 1111 1xxx

niet gevolgd door enig databyte

-SYSTEM-EXCLUSIVE

STATUS-byte = 1111 0000 = &HF0 = 240

gevolgd door een niet in de standaard vastgesteld aantal databytes , maar in elk geval afgesloten met:

1111 0111 = &HF7 = 247

Dit type midi-bericht werd voorzien om enige flexibiliteit toe te laten in de mogelijkheden van diverse machines. Naast de standaard codes beschikt elke fabrikant hier nog over een aantal kodes die alleen zijn eigen toestel zal 'begrijpen'. Dit zijn dan de zogenaamde 'System Exclusive Codes'. Via die weg is het op uitgebreide midi-synthesizers zelfs mogelijk zelf de klankleuren te programmeren. Deze programmering zullen we echter, gezien haar relatieve komplexiteit , voor later in de kursus bewaren. Het principe voor het versturen van system- exclusive codes is echter steeds analoog aan wat we reeds zagen. De algemene vorm is :

1111 0000 of 240 ( Status-byte)

Let erop dat in dit geval de laatste 4 bits niet worden gebruikt! Zij moeten steeds 0 zijn.

0xxxxxxx een getal dat eigen is aan de fabrikant van het betreffende toestel.

0yyy yyyy

0zzz zzzz lijst met instrukties (kan zeer lang

0nnn nnnn zijn bij komplexe operaties)

0mmm mmmm

....

....

1111 0111 of 247 (dec) (=&HF7)

einde van de system-exclusive sekwens

Toestellen die Midi-kodes ontvangen die ze niet kunnen verwerken, worden -voorzover de fabrikanten zich tenminste strikt aan de afspraken terzake houden- geacht deze volkomen te negeren. Een kode zonder betekenis of een stomme fout, kan dan ook niet het gehele systeem in de war brengen. Dit geldt echter uitsluitend voor het MIDI-aspekt van de zaak, en uiteraard niet voor de instrukties die we de komputer ter verwerking aanbieden.

We zullen later in de kursus onder andere toepassingen behandelen op het vlak van het programmeren van muziek in niet- getemperde toonsystemen en met mikrointervallen.

Omdat een en ander nogal verwarrend kan zijn bij een eerste kennismaking, hier dan een overzichtstabel van alle gestandaardiseerde midi-kodes , waarbij alle numerieke waarden in het vertrouwde decimale talstelsel werden opgenomen. Een aantal kodes en kommandos komen bovendien -omwille van het gebruikersgemak- meer dan 1 keer in de tabel opgenomen.

Ook omvat de tabel enkele opmerkingen en aanvullingen ontleend aan latere herzieningen van de basis midi-standaard. 

Het OFFICIELE midi standaard dokument haalden we voor de studenten van het Internet. (File 1075.html)


3.T A B E L

MIDI MESSAGE IMPLEMENTION TABLE OVERZICHT STANDAARD MIDI-CODES

status-byte betekenis 1e databyte & betekenis 2edatabyte & betekenis

A. CHANNEL MESSAGES

1. MODUS

176 + K K=kanaalnr. 122 0 local-controll OFF

2. VOICE

128 + K NOTE-OFF 0-127 note-value 0-127 note off velocity

144 + K NOTE ON/OFF 0-127 note-value 1-127 note on velocity, 0 note off

160 + K Key-pressure 0-127 volume -

176 + K Controll Change 0-121 controllers 0-127 instellingswaarde

Channel-mode messages:

Elk kanaal speelt zoveel noten als de polyfonie ervan dat toelaat. Dit is de aangewezen modus voor multitimbrale en polyfone synthesizers.

192 + K Programm Change 0-127 programma nr. - -

Vele moderne synthesizers en modules hebben vandaag veel meer dan 127 klanken of presets aan boord. Zie de nota daaromtrent hiervoor gegeven.

208 + K Channel pressure 0-127 volume waarde -

224 + K Pitch-Bend 0-127 LSB 0-127 MSB &H40=nulpunt

B.SYSTEM

1. COMMON

2. REAL-TIME

3. EXCLUSIVE

240 start exclusive 0-127 identifikatienr. any number of bytes 0-127

125 voor niet-kommercieel gebruik (research, uniefs, labs...) aanbevolen voor gebruik bij eigen hardware ontwerpen

126 voor algemeen gebruik in real time

127 voor algemeen gebruik non-real time

De sekwens bij deze twee laatste kodes is:

&HF0; &H7E of &H7F; kanaal; sub ID#1; sub ID#2; <data>;&HF7

De midi-time-kode wordt vaak gebruikt met 126, terwijl sample dumps, file-dumps, tuning-data, inquiry e.d.m gebruik maken van

de 127 kodering. Omdat het aantal fabrikanten enorm is toegenomen sedert de introduktievan de MIDI-standaard, bleken 127 cijfers onvoldoende te zijn. Daaromhebben vele recentere merken tot uit 3 bytes opgebouwde identifikatiekodes gekregen.

Bvb: 0 ; 0 ; 16 = Digitech (DOD) 0; 0; 22= Opcode Systems

247 end of exclusive - -

(EOX)

In de lijst met ID nummers hebben we slechts de voor ernstige musici meest voorkomende fabrikanten vermeld. De volledige lijst kan bij het MIDI kommitee aangevraagd worden. Overigens staat in de gebruiksaanwijziging van een MIDI-toestel dat gebruik maakt van de sys-ex implementatie, deze kode steeds vermeld.


Filedate: 941112/970928

Terug naar inhoudstafel kursus: <Index Kursus>

Naar homepage dr.Godfried-Willem RAES