Rozhraní MIDI na osobních počítačích

19. 2. 2009
Doba čtení: 11 minut

Sdílet

V dnešní části seriálu o architekturách počítačů si popíšeme další rozhraní, se kterým se můžeme (nejenom) na osobních počítačích setkat. Jedná se o rozhraní standardu MIDI, které lze použít jak pro propojení několika elektronických hudebních nástrojů, tak i dalších typů zařízení, například barevné hudby.

Obsah

1. Rozhraní MIDI na osobních počítačích
2. Konektory použité pro MIDI, způsob propojení zařízení, optočleny
3. Sériový přenos dat
4. Přenosový protokol
5. Typy MIDI zpráv
6. Převodní tabulka mezi výškou tónu a odpovídajícím kódem noty
7. Literatura a odkazy na Internetu

1. Rozhraní MIDI na osobních počítačích

V předchozí části tohoto seriálu jsme si popsali gameport, včetně některých možností jeho použití v praxi. Také jsme se krátce zmínili o tom, že na gameport je možné – ovšem s použitím vhodného programového vybavení a také propojovacího kabelu – zapojit zařízení odpovídající specifikaci MIDI (Musical Instrument Digital Interface). Již z názvu této specifikace vyplývá, že MIDI je převážně určené pro propojení hudebních zařízení, čemuž také odpovídá přenosový protokol; ovšem je možné, aby pomocí tohoto rozhraní komunikovala i další zařízení (dokonce se pomocí MIDI dá postavit jednoduchá počítačová síť, i když dnes se spíše jedná o raritu, nehledě na dosti nízkou přenosovou rychlost dosahující cca 3kB za sekundu). Podobně jako v případě už popsané sběrnice USB nebo (prozatím nepopsaného) Ethernetu je i specifikace MIDI rozdělena do dvou částí. První část popisuje, jakým způsobem jsou jednotlivá zařízení propojena, tj. konektory, elektrické charakteristiky připojení a způsob přenosu dat na nejnižší úrovni. Druhá část pak popisuje přenosový protokol, tj. způsob řízení jednotlivých hudebních i nehudebních zařízení.

pc4901

Obrázek 1: Aktivní prvek, který díky vlastnosti MIDI rozhraní i použitého přenosového protokolu dokáže smísit vstup ze čtyř MIDI zařízení a převést ho na dva výstupy.

2. Konektory použité pro MIDI, způsob propojení zařízení, optočleny

MIDI zařízení jsou navzájem propojena kabely, na jejichž koncích by měly být umístěny konektory typu DIN 5/180°. Konektorů DIN existuje větší množství, zde se jedná o kulatý konektor s pěti piny (z nichž pouze tři jsou ve skutečnosti použity) rozmístěnými v půlkruhu. Kromě těchto konektorů se můžeme setkat také s dvoupinovými, třípinovými či dokonce sedmipinovými konektory typu DIN, nikoli však u MIDI. Některá menší MIDI zařízení jsou místo poměrně rozměrných konektorů DIN 5/180° vybavena odlišným rozhraním: buď jacky (konkrétní provedení se liší), miniaturní variantou konektoru DIN apod. U gameportů vybavených rozhraním MIDI se používá minule popsaný patnáctipinový konektor typu DB-15 (viz druhá kapitola předchozí části), což je v oblasti hudby zcela nestandardní (a ojedinělé) řešení. Propojovací kabel o maximální délce cca 16 metrů by měl být stíněný, stínicí vodič (opletení) se zapojuje na pin číslo 2 (jedná se o prostření pin, protože číslování pinů je odvozené ze základního konektoru DIN 3/180°). Dvojice datových vodičů je zapojena na piny 4 a 5 (umístěné vedle prostředního pinu). Kabel by měl pro datové vodiče používat kroucenou dvojlinku, ovšem můžeme se často setkat i s dvojicí přímých vodičů, stejně jako s nestíněnými kabely.

pc4902

Obrázek 2: Konektor typu DIN používaný pro vzájemné propojení MIDI zařízení.

Některá MIDI zařízení jsou na svých vstupech vybavena takzvanými optočleny, pomocí kterých je možné jednotlivá zařízení od sebe odizolovat. Tímto způsobem je zařízení do značné míry chráněno před nepříznivými vlivy – typicky se jedná o takzvanou plovoucí nulu, se kterou se můžeme setkat například ve chvíli, kdy se navzájem propojí dvě zařízení, z nichž každé je napájeno z jiné rozvodné sítě (jedná se o napětí vzniklé z rozdílu potenciálů na nulových vodičích v rozvodných sítích). Optočlen se skládá ze dvou polovodičových prvků uzavřených do společného pouzdra nepropouštějícího světlo. Na vstupu optočlenu se nachází LED, pracující buď ve viditelné oblasti spektra nebo v oblasti infračervené. Ve výstupní části je zapojen fototranzistor (tranzistor s odkrytou bází). Dopadem světelného záření z LED na bázi tranzistoru dochází k jeho otevírání; pokud naopak LED nesvítí, je fototranzistor uzavřený. Tímto způsobem lze jednoduše přenášet analogovou či binární informaci ze vstupu optočlenu na jeho výstup, a to i přesto, že jsou od sebe obě části dokonale odizolovány (průrazné napětí, které by se muselo přivést na vstup optočlenu, aby došlo k jeho průrazu, dosahuje několika stovek, mnohdy i jednotek tisíců voltů).

pc4903

Obrázek 3: Princip činnosti optoizolačního členu.

3. Sériový přenos dat

Přenos dat je zajištěn proudovou smyčkou. V případě, že se přenáší logická nula, protéká smyčkou proud o velikosti 5 mA od pinu s napětím +5V umístěného na vysílacím zařízení přes zařízení přijímací (jeho přijímací část se chová jako rezistor s nelineární VA charakteristikou) zpět na vysílací zařízení. Vysílací zařízení obsahuje rezistor, který zabraňuje nadměrnému zatížení zdroje nebo zničení spínacího tranzistoru v případě, že by došlo ke zkratování pinů konektoru. Pokud naopak proud smyčkou neprochází, znamená to, že je přenášena logická jednička (z tohoto pohledu je použita negativní či inversní logika). Již z principu proudové smyčky vyplývá, že přenos dat je vždy jednosměrný. Data jsou vysílána z konektoru označeného MIDI OUT do konektoru nesoucího označení MIDI IN. Některá zařízení (klávesy, mixážní pulty atd.) obsahují i konektor označený MIDI THRU, který slouží k propojení dat přicházejících na MIDI IN do dalšího zařízení. Pomocí tohoto konektoru je možné za sebe zapojit větší množství zařízení, ovšem s tou nevýhodou, že na každém zařízení může dojít (i vinou výše zmíněných optočlenů) ke zpoždění cca 2–4 µs, které může být v některých případech slyšitelné.

pc4904

Obrázek 4: Obliba počítačů Atari 520 ST a Atari 1040 ST spočívala mj. i v tom, že obsahovaly rozhraní MIDI. Jedná se o dva stejné konektory (MIDI IN a MIDI OUT) v levé části snímku.

4. Přenosový protokol

MIDI je použit jednoduchý asynchronní sériový přenos dat (viz RS-232C) s využitím výše popsané proudové smyčky. Data jsou rozdělena do bajtů (osmice bitů, nejdříve se přenáší bit s nejmenší váhou) doplněných o start bit a stop bit. Start bit má vždy logickou hodnotu 0, stop bit logickou hodnotu 1, ovšem nesmíme zapomenout na to, že je použita inversní logika, takže proud smyčkou teče při přenosu logické nuly. Hodinová frekvence vysílače je rovna 31250 Hz, což znamená, že se celý bajt i se start bitem a stop bitem přenese za 320 µs (10/31250 s). Jedná se o poměrně netypickou hodnotu, mnoho ostatních sériových rozhraní se drží spíše celočíselných násobků 75 Hz. Z přenášených bajtů jsou skládané MIDI zprávy. Jejich délka je rovna jednomu, dvěma či třem bajtům, ovšem jeden speciální typ zprávy má neomezenou délku. První bajt zprávy se nazývá stavový bajt (status byte). Jeho zvláštností je to, že má nastavený nejvyšší bit na logickou hodnotu 1 (jeho dekadická hodnota je vždy větší než 127). Všechny ostatní bajty mají tento bit nulový (jejich hodnota je menší než 128), takže i v případě, že MIDI zařízení ztratí synchronizaci (vytažení konektoru apod.), může poměrně jednoduše detekovat začátek další zprávy.

pc4905

Obrázek 5: Přenos MIDI zprávy o délce tří bajtů (tři bajty je obvyklá délka většiny MIDI zpráv, přenesení takto dlouhé zprávy trvá necelou jednu milisekundu – 3×320 µs).

5. Typy MIDI zpráv

V předchozí kapitole jsme si řekli, že v první vysílaný bajt každé MIDI zprávy (status byte) má zvláštní význam. Je v něm totiž uložen kód příkazu a většinou (existuje jen jedna výjimka) také číslo kanálu, pro který je příkaz určen. V následujících bajtech MIDI zprávy jsou přenášeny parametry příkazu. Co znamená číslo kanálu? Ve své podstatě se jedná o adresu některého zařízení, která interně nabývá hodnoty 0–15 (jak již víme z předchozího textu, zařízení je možné zapojovat za sebe a vytvořit tak řetěz přijímající zprávy z jednoho vysílače). Ovšem je zapotřebí dát si pozor na to, že hudebníci (i většina hudebního softwaru) zařízení číslují od jedničky, tj. v rozsahu 1–16. Vzhledem k tomu, že z osmi bitů, ze kterých se skládá první bajt zprávy je efektivně využito pouze bitů sedm (viz obrázek číslo 4, nejvyšší bit musí být jedničkový) a číslo kanálu je uloženo ve čtyřech bitech, zbývají pro rozlišení příkazu tři bity. Z tohoto důvodu mají kódy příkazů následující hodnoty (k uvedeným kódům se pomocí logické operace OR nebo aritmetické operace součtu přičte číslo kanálu):

Kód příkazu (hex) Číslo kanálu? Název
0×80 ano Note Off
0×90 ano Note On
0×a0 ano Aftertouch
0×b0 ano Continuous controller
0×c0 ano Patch change
0×d0 ano Channel Pressure
0×e0 ano Pitch bend
0×f0 ne (non-musical commands)

I ty nejjednodušší elektronické hudební nástroje, například doma vyrobené syntetizéry, by měly korektně reagovat na příkazy Note On a Note Off. Oba příkazy (zprávy) mají shodnou délku tři bajty. Obsah prvního bajtu už známe – je v něm zakódovaný kód příkazu a číslo kanálu, pro který je příkaz určen. Ve druhém bajtu zprávy je uložen kód noty (převedený na frekvenci), tj. hodnota 0 až 127, jejíž význam je popsán v následující kapitole. Ve třetím bajtu je uložena rychlost zahrání tónu, která má taktéž rozsah 0 až 127. Jak si řekneme v některém z dalších částí tohoto seriálu, používá většina elektronických kláves i dalších elektronických nástrojů při generování tónů takzvanou obálku (envelope) a rychlost zahrání tónu ovlivňuje strmost přední hrany obálky (attack time) a v některých případech také její maximální hodnotu (attack level); v závislosti na tom, jaký hudební nástroj tón přehrává.

Naproti tomu příkaz Note Off má opačný význam – slouží k ukončení přehrávání tónu, jehož kód je přenesen ve druhém bajtu zprávy. V bajtu třetím se přenáší rychlost ukončení přehrávání – v případě výše zmíněné obálky se jedná o release time, tj. strmost zadní hrany obálky. V případě, že zařízení přijme několik zpráv typu Note On, mělo by (pokud podporuje polyfonii), současně generovat všechny tóny. Ty se dají postupně vypínat zprávami typu Note Off (na první pohled by se mohlo zdát, že by zařízení, které tóny přehrává, muselo obsahovat až 128 navzájem nezávislých generátorů tónů, ovšem většinou se nepoužívají všechny oktávy, takže počet generátorů – ať již hardwarových či softwarových – bývá cca poloviční). Podrobnější popis jednotlivých příkazů a jejich variant bude uveden v následující části tohoto seriálu.

6. Převodní tabulka mezi výškou tónu a odpovídajícím kódem noty

V mnoha typech příkazů se vyskytuje kód noty (tónu či půltónu), někdy také nazývaný MIDI number nebo key (tento název vyplývá z toho, že u klávesových nástrojů většinou každá klávesa odpovídá celému tónu nebo půltónu). Kód noty je přenesený v jednom bajtu, přičemž nejvyšší bit je vždy nulový (nejedná se o stavový bajt). Z toho vyplývá, že je možné zakódovat maximálně 128 not (tónů o různé výšce) rozdělených do 11 oktáv po 12 půltónech (poslední oktáva neobsahuje nejvyšší tóny, protože 12×11>128). Vazba mezi kódem noty, jejím označením a frekvencí je vypsána v následující tabulce.

Přiřazení frekvencí vzniklo následujícím způsobem: u standardního MIDI se používá rovnoměrně temperovaně laděná stupnice (12edo – equal division of the octave, viz odkazy) odvozená od komorního a1 s frekvencí 440 Hz (v tabulce zobrazené níže se jedná o zvýrazněnou hodnotu). Podíl frekvence dvou sousedních půltónů je u této stupnice konstantní a lze ho vyjádřit hodnotou 21/12 (dvanáctá odmocnina ze dvou). To znamená, že A posazené o oktávu (12 půltónů) níže má frekvenci poloviční (220 Hz) a naopak A posazené o oktávu výše má frekvenci dvojnásobnou (880 Hz). Konstanta 21/12 byla získána rozdělením celé oktávy na dvanáct stejných intervalů, protože v oktávě existuje dvanáct tónů a půltónů (viz například klávesy na klavíru), přičemž interval je vyjádřen poměrem frekvencí dvou tónů. U standardního MIDI lze výšku tónu navíc ovlivnit příkazem Pitch bend/Pitch wheel – viz předchozí kapitola.

Oktáva (MIDI) Kód noty Označení noty Frekvence (Hz)
–5 0 C 8,1757989156
–5 1 C#/Db 8,6619572180
–5 2 D 9,1770239974
–5 3 D#/Eb 10,3008611535
–5 4 E 10,3008611535
–5 5 F 10,9133822323
–5 6 F#/Gb 11,5623257097
–5 7 G 12,2498573744
–5 8 G#/Ab 12,9782717994
–5 9 A 13,7500000000
–5 10 A#/Bb 14,5676175474
–5 11 B 15,4338531643
–4 12 C 16,3515978313
–4 13 C#/Db 17,3239144361
–4 14 D 18,3540479948
–4 15 D#/Eb 19,4454364826
–4 16 E 20,6017223071
–4 17 F 21,8267644646
–4 18 F#/Gb 23,1246514195
–4 19 G 24,4997147489
–4 20 G#/Ab 25,9565435987
–4 21 A 27,5000000000
–4 22 A#/Bb 29,1352350949
–4 23 B 30,8677063285
–3 24 C 32,7031956626
–3 25 C#/Db 34,6478288721
–3 26 D 36,7080959897
–3 27 D#/Eb 38,8908729653
–3 28 E 41,2034446141
–3 29 F 43,6535289291
–3 30 F#/Gb 46,2493028390
–3 31 G 48,9994294977
–3 32 G#/Ab 51,9130871975
–3 33 A 55,0000000000
–3 34 A#/Bb 58,2704701898
–3 35 B 61,7354126570
–2 36 C 65,4063913251
–2 37 C#/Db 69,2956577442
–2 38 D 73,4161919794
–2 39 D#/Eb 77,7817459305
–2 40 E 82,4068892282
–2 41 F 87,3070578583
–2 42 F#/Gb 92,4986056779
–2 43 G 97,9988589954
–2 44 G#/Ab 103,8261743950
–2 45 A 110,0000000000
–2 46 A#/Bb 116,5409403795
–2 47 B 123,4708253140
–1 48 C 130,8127826503
–1 49 C#/Db 138,5913154884
–1 50 D 146,8323839587
–1 51 D#/Eb 155,5634918610
–1 52 E 164,8137784564
–1 53 F 174,6141157165
–1 54 F#/Gb 184,9972113558
–1 55 G 195,9977179909
–1 56 G#/Ab 207,6523487900
–1 57 A 220,0000000000
–1 58 A#/Bb 233,0818807590
–1 59 B 246,9416506281
0 60 C 261,6255653006
0 61 C#/Db 277,1826309769
0 62 D 293,6647679174
0 63 D#/Eb 311,1269837221
0 64 E 329,6275569129
0 65 F 349,2282314330
0 66 F#/Gb 369,9944227116
0 67 G 391,9954359817
0 68 G#/Ab 415,3046975799
0 69 A 440,0000000000
0 70 A#/Bb 466,1637615181
0 71 B 493,8833012561
1 72 C 523,2511306012
1 73 C#/Db 554,3652619537
1 74 D 587,3295358348
1 75 D#/Eb 622,2539674442
1 76 E 659,2551138257
1 77 F 698,4564628660
1 78 F#/Gb 739,9888454233
1 79 G 783,9908719635
1 80 G#/Ab 830,6093951599
1 81 A 880,0000000000
1 82 A#/Bb 932,3275230362
1 83 B 987,7666025122
2 84 C 1 046,5022612024
2 85 C#/Db 1 108,7305239075
2 86 D 1 174,6590716696
2 87 D#/Eb 1 244,5079348883
2 88 E 1 318,5102276515
2 89 F 1 396,9129257320
2 90 F#/Gb 1 479,9776908465
2 91 G 1 567,9817439270
2 92 G#/Ab 1 661,2187903198
2 93 A 1 760,0000000000
2 94 A#/Bb 1 864,6550460724
2 95 B 1 975,5332050245
3 96 C 2 093,0045224048
3 97 C#/Db 2 217,4610478150
3 98 D 2 349,3181433393
3 99 D#/Eb 2 489,0158697766
3 100 E 2 637,0204553030
3 101 F 2 793,8258514640
3 102 F#/Gb 2 959,9553816931
3 103 G 3 135,9634878540
3 104 G#/Ab 3 322,4375806396
3 105 A 3 520,0000000000
3 106 A#/Bb 3 729,3100921447
3 107 B 3 951,0664100490
4 108 C 4 186,0090448096
4 109 C#/Db 4 434,9220956300
4 110 D 4 698,6362866785
4 111 D#/Eb 4 978,0317395533
4 112 E 5 274,0409106059
4 113 F 5 587,6517029281
4 114 F#/Gb 5 919,9107633862
4 115 G 5 919,9107633862
4 116 G#/Ab 6 644,8751612791
4 117 A 7 040,0000000000
4 118 A#/Bb 7 458,6201842894
4 119 B 7 902,1328200980
5 120 C 8 372,0180896192
5 121 C#/Db 8 869,8441912599
5 122 D 9 397,2725733570
5 123 D#/Eb 9 956,0634791066
5 124 E 10 548,0818212118
5 125 F 11 175,3034058561
5 126 F#/Gb 11 839,8215267723
5 127 G 12 543,8539514160

Poznámka: tón B se u nás také označuje písmenem H.

ict ve školství 24

pc4906

Obrázek 6: Vazba mezi výškou tónu, označením noty a MIDI číslem noty.

7. Literatura a odkazy na Internetu

  1. Basic MIDI, Paul White,
    Sanctuary Publishing Ltd, London 1999.
    ISBN 1 86074 262 9
  2. A Beginner's Guide to MIDI,
    R A Penfold, Babani Publishing Ltd,
    London 1993. ISBN 0 85934 331 6
  3. MIDI for Organists,
    C E Pykett
  4. MIDI Maze,
    http://en.wiki­pedia.org/wiki/MI­DI_Maze
  5. HoofJaw & MIDI.com – Your MIDI File Center!,
    http://www.ho­ofjaw.com/Defau­lt.aspx
  6. Kenton Releases New MIDI Merge Box,
    http://www.dol­phinmusic.co.uk/new­s/news-story/news_id/1925
  7. How Optical Isolation Works (with Switching Power Supply) – Illustration,
    http://www.bb-elec.com/tech_ar­ticles/optical_i­solation_illus­tration.asp
  8. Opto-isolator,
    http://en.wiki­pedia.org/wiki/Op­to-isolator
  9. Musical Instrument Digital Interface,
    http://en.wiki­pedia.org/wiki/Mu­sical_Instrumen­t_Digital_Inter­face
  10. Daves Old Computers – Atari ST,
    http://www.clas­siccmp.org/dun­field/atarist/in­dex.htm
  11. A MIDI Pedalboard Encode,
    http://www.py­kett.org.uk/a_mi­di_pedalboard_en­coder.htm
  12. MIDI Note Number, Frequency Table,
    http://tonalsof­t.com/pub/new­s/pitch-bend.aspx
  13. Note names, MIDI numbers and frequencies,
    http://www.phys­.unsw.edu.au/jw/no­tes.html
  14. The MIDI Specification,
    http://www.gwe­ep.net/~prefec­t/eng/referen­ce/protocol/mi­dispec.html
  15. Essentials of the MIDI protocol,
    http://ccrma.stan­ford.edu/~cra­ig/articles/li­nuxmidi/misc/es­senmidi.html
  16. Tón,
    http://cs.wiki­pedia.org/wiki/T%C3%B3n
  17. Rovnoměrně temperované ladění,
    http://cs.wiki­pedia.org/wiki/Rov­nom%C4%9Brn%C4%9B_tem­perovan%C3%A9_la­d%C4%9Bn%C3%AD

Autor článku

Vystudoval VUT FIT a v současné době pracuje na projektech vytvářených v jazycích Python a Go.