To delo je na voljo pod pogoji slovenske licence Creative Commons 2.5:
priznanje avtorstva - nekomercialno - deljenje pod enakimi pogoji.
Celotna licenca je na voljo na spletu na naslovu http://creativecommons.org/licenses/by-nc-sa/2.5/si/. V skladu s to licenco je dovoljeno vsakemu uporabniku delo razmnoževati, distribuirati, javno priobčevati, dajati v najem in tudi predelovati, vendar samo v nekomercialne namene in ob pogoju, da navede avtorja oziroma avtorje in izdajatelja tega dela. Če uporabnik delo predela, kar pomeni, da ga spremeni, preoblikuje, prevede ali uporabi to delo v svojem delu, lahko predelavo dela ponudi na voljo le pod pogoji, ki so enaki pogojem iz te licence oziroma pod enako licenco.
Sporočila MIDI se pošljejo kot časovno zaporedje enega ali več bajtov. Prvi bajt je kontrolni bajt, ki mu sledi več podatkovnih bajtov. Kontrolni bajt določa vrsto sporočila, število podatkovnih bajtov pa je odvisno od vrste sporočila. Pri kontrolnem bajtu je vrednost najpomembnejšega bita (najbolj levega bita) nastavljena na 1, pri podatkovnih bajtih pa na 0.
Razen nekaterih sistemskih sporočil MIDI kontrolni bajt vsebuje številko kanala MIDI. Obstaja 16 možnih kanalov MIDI, oštevilčenih od 0 do 15. V praksi glasbeniki in programska oprema štejejo kanale MIDI od 1 do 16, zato je številki kanala pri ustvarjanju sporočila treba odšteti 1 (kanal »1« je kodiran kot »0« itd.).
V istem MIDI kablu lahko uporabljamo do 16 kanalov MIDI in tako nadzorujemo do 16 različnih instrumentov, ki igrajo neodvisno.
Glavni sporočili MIDI sta NoteOn in NoteOff.
NOTE ON
Ko sintetizator prejme sporočilo NoteOn, začne igrati noto pravilne višine in glasnosti.
Sporočilo NoteOn je strukturirano na naslednji način:
1001 KKKK
– KKKK
je kanal MIDI (od 0 do 15)0VVV VVVV
– VVV VVVV
je višina tona/note (od 0 do 127)0GGG GGGG
– GGG GGGG
je glasnost tona/note (od 0 do 127);Vrednost višine določa frekvenca note, ki jo je treba predvajati. Vrednost je lahko od 0 do 127, pri čemer ima nota C4 (oziroma Middle C) vrednost 72:
Vrednost je predstavljena v polovičnih korakih, tako da ima C#4 vrednost 73, D4 vrednost 74 in tako dalje.
Note lahko prestavimo oziroma transponiramo eno oktavo višje tako, da vrednosti vsake note prištejemo 12. Z uporabo MIDI je transponiranje zelo preprosto, saj to dosežemo le s prištevanjem ali odštevanjem določene vrednosti. Pri tem je treba paziti glede obsega not MIDI, ki se giblje med 0 in 127. Če bi na primer želeli zvišati vrednost note 96 za 4 oktave (+48), bi bila skupna vrednost 144, kar je izven obsega. Ker bo od rezultata odšeta vrednost 128, bo nota zelo nizka (144 - 128 = 16) namesto, da bi bila visoka.
Vrednost glasnosti med 0 in 127, pokriva območje od praktično neslišnega zvoka do najvišje ravni glasnosti. V bistvu ustreza lestvici dinamike, ki jo najdemo v notnih zapisih in spodaj (te vrednosti niso natančne, ampak služijo bolj kot orientacija):
NOTE OFF
Ko sintetizator prejme sporočilo NoteOff, zaključi z igranjem note.
Sporočilo NoteOff je strukturirano na naslednji način:
1000 KKKK
– KKKK
je kanal MIDI (od 0 do 15)0VVV VVVV
– VVV VVVV
je višina tona/note (od 0 do 127)0GGG GGGG
– GGG GGGG
je glasnost tona/note (od 0 do 127),Ko sintetizatorju pošlješ sporočilo NoteOn, bo začel predvajati noto. Medtem lahko pošiljaš druga sporočila NoteOn, z različnimi višinami not, da se bo predvajal akord. Vendar moraš spremljati katere note se predvajajo, tako da lahko za vsako noto pošlješ ustrezno sporočilo NoteOff, sicer bodo note obtičale in se predvajale v neskončnost.
Oglejmo si primer. Kakšna sporočila MIDI so potrebna za predvajanje spodnjega takta?
Da zaslišiš glasbo mora biti prisotna tudi časovna komponenta, zato je v spodnji tabeli prikazano časovno zaporedje sporočil MIDI, ki jih je treba poslati sintetizatorju, da bo predvajal zgornje note na kanalu 1 (kodiranem kot 0), z glasnostjo 70 (mezzo forte).
Čas [s] | Sporočilo MIDI – BIN | DEC | HEX | Nota |
---|---|---|---|---|
0,0 | 1001 0000 0100 0000 0100 0110 | 144 64 70 | 0x90 0x40 0x46 | E3 = 64 |
0,0 | 1001 0000 0100 0011 0100 0110 | 144 67 70 | 0x90 0x43 0x46 | G3 = 67 |
1,0 | 1000 0000 0100 0011 0000 0000 | 128 67 0 | 0x80 0x43 0x00 | G3 = 67 |
1,0 | 1001 0000 0100 0101 0100 0110 | 144 69 70 | 0x90 0x45 0x46 | A3 = 69 |
2,0 | 1000 0000 0100 0101 0000 0000 | 128 69 0 | 0x80 0x45 0x00 | A3 = 69 |
2,0 | 1000 0000 0100 0000 0000 0000 | 128 64 0 | 0x80 0x40 0x00 | E3 = 64 |
2,0 | 1001 0000 0011 1100 0100 0110 | 144 60 70 | 0x90 0x3C 0x46 | C3 = 60 |
2,0 | 1001 0000 0100 0111 0100 0110 | 144 71 70 | 0x90 0x47 0x46 | H3 = 71 |
3,0 | 1000 0000 0100 0111 0000 0000 | 128 71 0 | 0x80 0x47 0x00 | H3 = 71 |
3,0 | 1001 0000 0100 1000 0100 0110 | 144 72 70 | 0x90 0x48 0x46 | C4 = 72 |
4,0 | 1000 0000 0100 1000 0000 0000 | 128 72 0 | 0x80 0x48 0x00 | C4 = 72 |
4,0 | 1000 0000 0011 1100 0000 0000 | 128 60 0 | 0x80 0x3C 0x00 | C3 = 60 |
Partitura oziroma notni zapis igra pri hitrosti 60 udarcev na minuto, zato je vsaka četrtinka dolga natančno 1 sekundo.
Do sedaj sintetizatorju še nismo sporočili, kateri zvok naj uporabi za predvajanje not. Sintetizator bi verjetno uporabil klavir ali privzeti instrument.
Vendar obstaja sporočilo MIDI, ki se imenuje ProgramChange, s katerim določimo instrument iz vnaprej določenega seznama 128 zvokov. V teoriji ima lahko vsak sintetizator svoj lasten seznam instrumentov, standard »General MIDI (GM)« pa določa seznam 128 instrumentov, ki poenostavljajo združljivost. Večina sintetizatorjev vsebuje vsaj združljivostni način s standardom GM. Na spodnji povezavi najdeš seznam instrumentov standarda »General MIDI«:
Instrumenti standarda »General MIDI«
Sporočilo ProgramChange je strukturirano na naslednji način:
1100 KKKK
– KKKK
je kanal MIDI (od 0 do 15)0XXX XXXX
– XXX XXXX
je številka instrumenta (od 0 do 127);Trobenta, na primer, ima na seznamu GM številko 57, zato moraš v zgornjem sporočilu MIDI nastaviti XXXXXXX = 56, da nastaviš pravilen instrument v ciljnem sintetizatorju. Note, ki jih pošiljaš sintetizatorju po tem sporočilu, bodo predvajane oziroma odigrane z zvokom trobente.
V spodnji tabeli so zbrani primeri sporočila ProgramChange za nastavljanje vrednosti instrumenta na eno izmed treh možnosti v interaktivni klaviaturi.
Instrument | General MIDI | Sporočilo MIDI – BIN | DEC | HEX |
---|---|---|---|---|
Klavir | Acoustic Grand Piano (1 → 0) | 1100 0000 0000 0000 | 192 0 | 0xC0 0x00 |
Orgle | Church Organ (20 → 19) | 1100 0000 0001 0011 | 192 19 | 0xC0 0x13 |
Kitara | Acoustic Guitar – nylon (25 → 24) | 1100 0000 0001 1000 | 192 24 | 0xC0 0x18 |
Tolkala so poseben primer instrumentov, ker nimajo posebne višine not, kot na primer klavir ali trobenta. Za predvajanje tolkal se uporablja poseben kanal MIDI. V standardu »General MIDI« je to kanal 10, vendar lahko najdeš sintetizatorje, ki jih lahko sprogramiraš za sprejemanje tolkal na katerem koli kanalu.
V primeru kanala, ki je dodeljen tolkalom (in tudi posebnim zvočnim učinkom, ki so pogosto vključeni v sintetizatorje), se del sporočila NoteOn in NoteOff, ki je namenjen višini note, dejansko uporablja za izbiro, kateri tolkalo ali drug zvočni učinek bo predvajan.
Na spodnji povezavi (na koncu strani) najdeš seznam različnih tolkal standarda »General MIDI«:
Instrumenti standarda »General MIDI«
Oglejmo si na primer, kako bi morali pošiljati sporočila MIDI na kanal 10, da bi predvajali bobnarsko osnovo pesmi »Dancing in the dark«, ki jo izvaja Bruce Springsteen:
Ta osnova se ponavlja skozi celotno pesem, ki pa si bomo ogledali sporočila samo za eno ponovitev.
Čas [s] | Sporočilo MIDI – BIN | DEC | HEX | Tolkalo |
---|---|---|---|---|
0,0 | 1001 0000 0010 0010 0100 0110 | 153 34 70 | 0x99 0x22 0x46 | ABD (35 → 34) |
0,0 | 1001 0000 0011 0000 0100 0110 | 153 48 70 | 0x99 0x30 0x46 | CC1 (49 → 48) |
0,2 | 1000 0000 0011 0000 0000 0000 | 137 48 0 | 0x89 0x30 0x00 | CC1 (49 → 48) |
0,2 | 1001 0000 0010 1001 0100 0110 | 153 41 70 | 0x99 0x29 0x46 | CHH (42 → 41) |
0,4 | 1000 0000 0010 0010 0000 0000 | 137 34 0 | 0x89 0x22 0x00 | ABD (35 → 34) |
0,4 | 1000 0000 0010 1001 0000 0000 | 137 41 0 | 0x89 0x29 0x00 | CHH (42 → 41) |
0,4 | 1001 0000 0010 0101 0100 0110 | 153 37 70 | 0x99 0x25 0x46 | ASD (38 → 37) |
0,4 | 1001 0000 0010 1001 0100 0110 | 153 41 70 | 0x99 0x29 0x46 | CHH (42 → 41) |
0,6 | 1000 0000 0010 1001 0000 0000 | 137 41 0 | 0x89 0x29 0x00 | CHH (42 → 41) |
0,6 | 1001 0000 0010 1001 0100 0110 | 153 41 70 | 0x99 0x29 0x46 | CHH (42 → 41) |
0,8 | 1000 0000 0010 0101 0000 0000 | 137 37 0 | 0x89 0x25 0x00 | ASD (38 → 37) |
0,8 | 1000 0000 0010 1001 0000 0000 | 137 41 0 | 0x89 0x29 0x00 | CHH (42 → 41) |
0,8 | 1001 0000 0010 0010 0100 0110 | 153 34 70 | 0x99 0x22 0x46 | ABD (35 → 34) |
0,8 | 1001 0000 0010 1001 0100 0110 | 153 41 70 | 0x99 0x29 0x46 | CHH (42 → 41) |
1,0 | 1000 0000 0010 1001 0000 0000 | 137 41 0 | 0x89 0x29 0x00 | CHH (42 → 41) |
1,0 | 1001 0000 0010 1001 0100 0110 | 153 41 70 | 0x99 0x29 0x46 | CHH (42 → 41) |
1,2 | 1000 0000 0010 0010 0000 0000 | 137 34 0 | 0x89 0x22 0x00 | ABD (35 → 34) |
1,2 | 1000 0000 0010 1001 0000 0000 | 137 41 0 | 0x89 0x29 0x00 | CHH (42 → 41) |
1,2 | 1001 0000 0010 0101 0100 0110 | 153 37 70 | 0x99 0x25 0x46 | ASD (38 → 37) |
1,2 | 1001 0000 0010 1001 0100 0110 | 153 41 70 | 0x99 0x29 0x46 | CHH (42 → 41) |
1,4 | 1000 0000 0010 1001 0000 0000 | 137 41 0 | 0x89 0x29 0x00 | CHH (42 → 41) |
1,4 | 1001 0000 0010 1001 0100 0110 | 153 41 70 | 0x99 0x29 0x46 | CHH (42 → 41) |
1,6 | 1000 0000 0010 0101 0000 0000 | 137 37 0 | 0x89 0x25 0x00 | ASD (38 → 37) |
1,6 | 1000 0000 0010 1001 0000 0000 | 137 41 0 | 0x89 0x29 0x00 | CHH (42 → 41) |
1,6 | 1001 0000 0010 0010 0100 0110 | 153 34 70 | 0x99 0x22 0x46 | ABD (35 → 34) |
1,6 | 1001 0000 0010 1001 0100 0110 | 153 41 70 | 0x99 0x29 0x46 | CHH (42 → 41) |
1,8 | 1000 0000 0010 1001 0000 0000 | 137 41 0 | 0x89 0x29 0x00 | CHH (42 → 41) |
1,8 | 1001 0000 0010 1001 0100 0110 | 153 41 70 | 0x99 0x29 0x46 | CHH (42 → 41) |
2,0 | 1000 0000 0010 0010 0000 0000 | 137 34 0 | 0x89 0x22 0x00 | ABD (35 → 34) |
2,0 | 1000 0000 0010 1001 0000 0000 | 137 41 0 | 0x89 0x29 0x00 | CHH (42 → 41) |
2,0 | 1001 0000 0010 0101 0100 0110 | 153 37 70 | 0x99 0x25 0x46 | ASD (38 → 37) |
2,0 | 1001 0000 0010 1001 0100 0110 | 153 41 70 | 0x99 0x29 0x46 | CHH (42 → 41) |
2,2 | 1000 0000 0010 1001 0000 0000 | 137 41 0 | 0x89 0x29 0x00 | CHH (42 → 41) |
2,2 | 1001 0000 0010 1001 0100 0110 | 153 41 70 | 0x99 0x29 0x46 | CHH (42 → 41) |
2,4 | 1000 0000 0010 0101 0000 0000 | 137 37 0 | 0x89 0x25 0x00 | ASD (38 → 37) |
2,4 | 1000 0000 0010 1001 0000 0000 | 137 41 0 | 0x89 0x29 0x00 | CHH (42 → 41) |
2,4 | 1001 0000 0010 0010 0100 0110 | 153 34 70 | 0x99 0x22 0x46 | ABD (35 → 34) |
2,4 | 1001 0000 0010 1001 0100 0110 | 153 41 70 | 0x99 0x29 0x46 | CHH (42 → 41) |
2,6 | 1000 0000 0010 0010 0000 0000 | 137 34 0 | 0x89 0x22 0x00 | ABD (35 → 34) |
2,6 | 1000 0000 0010 1001 0000 0000 | 137 41 0 | 0x89 0x29 0x00 | CHH (42 → 41) |
2,6 | 1001 0000 0010 0010 0100 0110 | 153 34 70 | 0x99 0x22 0x46 | ABD (35 → 34) |
2,6 | 1001 0000 0010 1001 0100 0110 | 153 41 70 | 0x99 0x29 0x46 | CHH (42 → 41) |
2,8 | 1000 0000 0010 0010 0000 0000 | 137 34 0 | 0x89 0x22 0x00 | ABD (35 → 34) |
2,8 | 1000 0000 0010 1001 0000 0000 | 137 41 0 | 0x89 0x29 0x00 | CHH (42 → 41) |
2,8 | 1001 0000 0010 0101 0100 0110 | 153 37 70 | 0x99 0x25 0x46 | ASD (38 → 37) |
2,8 | 1001 0000 0010 1001 0100 0110 | 153 41 70 | 0x99 0x29 0x46 | CHH (42 → 41) |
3,0 | 1000 0000 0010 0101 0000 0000 | 137 37 0 | 0x89 0x25 0x00 | ASD (38 → 37) |
3,0 | 1000 0000 0010 1001 0000 0000 | 137 41 0 | 0x89 0x29 0x00 | CHH (42 → 41) |
3,0 | 1001 0000 0010 0010 0100 0110 | 153 34 70 | 0x99 0x22 0x46 | ABD (35 → 34) |
3,0 | 1001 0000 0010 1001 0100 0110 | 153 41 70 | 0x99 0x29 0x46 | CHH (42 → 41) |
3,2 | 1000 0000 0010 0010 0000 0000 | 137 34 0 | 0x89 0x22 0x00 | ABD (35 → 34) |
3,2 | 1000 0000 0010 1001 0000 0000 | 137 41 0 | 0x89 0x29 0x00 | CHH (42 → 41) |
Partitura igra pri hitrosti 150 udarcev na minuto, zato je vsaka četrtinka dolga natančno 0,4 sekunde, vsaka osminka pa 0,2 sekunde.
Protokol MIDI lahko nadzoruje do 16 različnih kanalov MIDI. Vsak kanal ima svoje stanje, na primer trenutno izbrani instrument, note, ki se trenutno predvajajo in druge vrednosti, kot so glasnost, panoramski zvok in drugo.
Z uporabo različnih kanalov MIDI lahko določimo različen instrument za vsak kanal posebej. S pošiljanjem not na ustrezne kanale MIDI se bodo te note predvajale z ustreznimi instrumenti.
Oglejmo si primer partiture s tremi instrumenti.
Saksofon, klavir in bas boben bodo uporabljali kanale 1, 2 in 10 (kodirane kot 0, 1 in 9). Zaporedje sporočil MIDI bo takšno, kot je prikazano v spodnji tabeli.
Najprej pošljemo sporočila ChangeProgram, da določimo instrumente za vsak kanal posebej. Pri bobnih uporabimo 0, kar predstavlja običajni komplet bobnov po standardu GM. Nekateri sintetizatorji vsebujejo tudi jazz komplet, orkesterski komplet, elektronski komplet in tako dalje.
Nato pošiljamo sporočila NoteOn in NoteOff, kot smo že navajeni. V spodnjem primeru bomo namesto sporočila NoteOff pošiljali sporočilo NoteOn z glasnostjo 0, kar ima isti pomen in se pogosto uporablja v praksi.
Čas [s] | Sporočilo MIDI – BIN | DEC | HEX | Instrument, nota |
---|---|---|---|---|
0,0 | 1100 0000 0100 0000 | 192 64 | 0xC0 0x40 | SAX (65 → 64) |
0,0 | 1100 0001 0000 0000 | 193 0 | 0xC1 0x00 | AGP (1 → 0) |
0,0 | 1100 1001 0000 0000 | 201 0 | 0xC9 0x00 | CDK (1 → 0) |
0,0 | 1001 0000 0100 1000 0100 0110 | 144 72 70 | 0x90 0x48 0x46 | SAX, C4 = 72 |
0,0 | 1001 0001 0011 1100 0100 0110 | 145 60 70 | 0x91 0x3C 0x46 | AGP, C3 = 60 |
0,0 | 1001 0001 0100 0011 0100 0110 | 145 67 70 | 0x91 0x43 0x46 | AGP, G3 = 67 |
0,0 | 1001 0001 0100 1100 0100 0110 | 145 76 70 | 0x91 0x4C 0x46 | AGP, E4 = 76 |
0,0 | 1001 1001 0010 0011 0100 0110 | 153 35 70 | 0x99 0x23 0x46 | CDK, ABD = 35 |
1,0 | 1001 0000 0100 1000 0000 0000 | 144 72 0 | 0x90 0x48 0x00 | SAX, C4 = 72 |
1,0 | 1001 1001 0010 0011 0000 0000 | 153 35 0 | 0x99 0x23 0x00 | CDK, ABD = 35 |
1,0 | 1001 0000 0100 1010 0100 0110 | 144 74 70 | 0x90 0x4A 0x46 | SAX, D4 = 74 |
2,0 | 1001 0000 0100 1010 0000 0000 | 144 74 0 | 0x90 0x4A 0x00 | SAX, D4 = 74 |
2,0 | 1001 0000 0100 1100 0100 0110 | 144 76 70 | 0x90 0x4C 0x46 | SAX, E4 = 76 |
2,0 | 1001 1001 0010 0011 0100 0110 | 153 35 70 | 0x99 0x23 0x46 | CDK, ABD = 35 |
3,0 | 1001 0000 0100 1100 0000 0000 | 144 76 0 | 0x90 0x4C 0x00 | SAX, E4 = 76 |
3,0 | 1001 1001 0010 0011 0000 0000 | 153 35 0 | 0x99 0x23 0x00 | CDK, ABD = 35 |
3,0 | 1001 0000 0100 1111 0100 0110 | 144 79 70 | 0x90 0x4F 0x46 | SAX, G4 = 79 |
4,0 | 1001 0000 0100 1111 0000 0000 | 144 79 0 | 0x90 0x4F 0x00 | SAX, G4 = 79 |
4,0 | 1001 0001 0011 1100 0000 0000 | 145 60 0 | 0x91 0x3C 0x00 | AGP, C3 = 60 |
4,0 | 1001 0001 0100 0011 0000 0000 | 145 67 0 | 0x91 0x43 0x00 | AGP, G3 = 67 |
4,0 | 1001 0001 0100 1100 0000 0000 | 145 76 0 | 0x91 0x4C 0x00 | AGP, E4 = 76 |
Partitura igra pri hitrosti 60 udarcev na minuto, zato je vsaka četrtinka dolga natančno 1 sekundo.
Z uporabo spodnje interaktivne klaviature preizkusi pošiljanje različnih sporočil MIDI. Lahko pritisneš in spustiš tipko ter s tem pošlješ sporočili NoteOn in NoteOff. Tipke lahko klikaš z miško, ali pa uporabiš tipke na tipkovnici, ki so izpisane. Lahko pa tudi spremeniš intrument ter tako pošlješ poročilo ProgramChange. Spreminjaš pa lahko tudi glasnost in kanal, po katerem bodo sporočila potovala. Sporočila si lahko ogledaš v desetiškem (DEC) ali šestnajstiškem (HEX) načinu.
Dodatne informacije o sestavi, ustvarjanju in pošiljanju sporočil MIDI dobiš s klikom na gumb »Pomoč« desno spodaj.