MIDI

MIDI lühiajalugu

Elektrooniliste muusikainstrumentide algusaastatel olid süntesaatorid tavaliselt monotoonsed seadmed. Piirangust, taasesitada üht nooti korraga, läksid elektrooniliste muusikainstrumentide tootjad mööda tehnoloogiaga, mis võimaldas luua elektrilise ühenduse erinevate süntesaatorite vahel. Üks süntesaator määrati ülemaks ja sellega võimaldati juhtida alluvate helimoodulite taasesitusparameetreid. Nimetatud ülem-alluv-süsteemi juhtimiseks töötati välja algeline juhtsignaal.
Süsteem põhines varajaste süntesaatorite omadusel, kus nende mängimisel tekkiva alalispingega oli võimalik juhtida teise instrumendi pingega juhitud võnkumisi ja pingega juhitud võimendeid. Kuna mitmed sel ajal kasutusel olnud süntesaatorid genereerisid alalissignaali, mille pinge suurenes ühe voldi võrra okaatvi kohta, siis oli võimalik kasutada seda juhtpinget normpingena. See võimaldas edastada helikõrgust sisaldavat informatsiooni teistele süntesaatoritele. 
Nootide algushetke ja kestuse sünkroonimiseks kasutati väravsignaali, kuid kuna tootjad kasutasid oma elektroonilistes instrumentides erinevaid sünkroonimisimpulsside taktsagedusi, oli mitteühilduvate seadmete sünkroonimine keerukas ja nõudis lisaseadmeid.
Digitaalelektroonika areng võimaldas otsida alternatiive analoogjuhtimisele, mistõttu alustasid David Smith ja Chet Wood digitaalset elektrooniliste instrumendi juhtreeglistiku arendamist. Väljatöötatav protokoll nimetati süntesaatori universaalliideseks ja 1981. aasta sügisel tutvustati juhtreeglistikku heliinsenerluse kogukonnale (AES). Kahe järgmise aasta jooksul tehti koostöös elektrooniliste instrumentide suurtootjatega protokolli standardis muudatusi ja 1983. aastal nimetati süntesaatori universaalliides ümber MIDI-ks.

Standardsed MIDI rakendused

MIDI võimaldab elektrooniliste instrumentide vahel suhtluse ja teeb võimalikuks ühel seadmel juhtida teist. Näiteks MIDI-instrumendil noodi mängimine genereerib digitaalsignaali, millega on võimalik mängida noot teisel elektroonilisel instrumendil. MIDI juhtimine võimaldab instrumente paigutada väiksematesse moodulitesse ja neid samaaegselt kasutada. Samuti on MIDIga võimalik instrumendi helisid programmeerida ja muuta helide signaalide kuju. Filtrite rakendamine võimaldab muuta helide tämbrit ning luua funktsioone, mis on suutelised filtrite parameetreid määratud aja jooksul muutma. Tarkvaraliste ja riistvaraliste muusikainstrumentide juhtnuppude ja parameetrite juhtimine on võimalik määrata MIDI kontrolleri füüsiliste lülitite alla. Kasutades muundureid, mis teisendavad MIDI signaale analoogjuhtsignaalideks, on võimalik MIDI-seadmetega juhtida ka analoogsüntesaatoreid.

MIDI-ga komponeerimine

Arvutitarkvara või spetsiaalsete riistvaraliste arvutite abil on võimalik heliloomingu ja -töötluse eesmärgil MIDI sündmusi järjestada, muuta ja luua. Nii saab modifitseerida MIDI arranžeeringu tempot, helistikku ja instrumente ilma, et ühtegi instrumenti peaks uuesti salvestama. MIDIt kasutatakse ka kõrgekvaliteediliste digitaalsete helisämplite juhtimiseks.
Mitmetesse tarkvaralistesse helindusarvutitesse (DAW) on projekteeritud MIDI implementatsioonide funktsioon. Teiste funktsioonide seas saavad helindusarvutid graafiliselt esitada MIDI nootide andmeid ja neid töödelda. Muuta saab 
MIDI nootide vältust, helikõrgust ja helitugevust ning lisada modulatsiooniefekte, nootide libistamist ühelt helikõrguselt teisele.

Muid MIDI rakendusi

MIDI reeglistikku on rakendatud ka mittemuusikaliste süsteemide juhtimiseks. MIDI-t on kasutatud lavavalgustussüsteemide lülitamiseks, sünkroonimiseks ja automatiseerimiseks. Ettevõtte Apple tarkvara "Apple Motion" võimaldab MIDI-ga juhtida videotöötlusparameetreid. 1987. aastal kasutati MIDI protokolli arvutite omavahelisse võrku lülitamiseks, eesmärgiga mängida arvutimängu "Oxyd". Lisaks kasutatakse MIDI-t kodudes valgustuse ja kodumasinate juhtimiseks.

MIDI-instrumendid

MIDI-instrument sisaldab MIDI-teadete edastamiseks ja vastuvõtmiseks sisend- ja väljundpesasid, protsessorit sisend- ja väljundsignaalide töötlemiseks, kasutajaliidest, mis võimaldaks seadet programmeerida, heli tekitamiseks vajalikku elektrilist lülitust ja juhtsüsteemi. Tavaliselt salvestatakse MIDI-instrumendi helid ja operatsioonisüsteem instrumendi püsimällu. MIDI-instrumendiks võib olla ka klaverilaadsete klahvideta üksikmoodul.

MIDI-seadmestik

MIDI riistvaraline liides töötab asünkroonse jadaühendusena boodikiirusega 31,25 kbd (+/- 1%), kusjuures andmeedastuseks kasutatakse üht algusbitti, kaheksat andmebitti ja lõppbitti. Paarsusbitte MIDI andmevahetuse käigus ei saadeta. Kokku edastatakse 320 mikrosekundilise ajavahemiku vältel 10 bitti ühe jadamisi saadetud baidi kohta. Edastatavates baitides saadetakse vähima kaaluga bitt esimesena. Algusbitt on määratud loogilise nullina ja lõppbitt loogilise ühena.
Maanduskontuuride ja andmevigade vältimiseks on saatja elektriline lülitus ja vastuvõtja elektriline lülitus teineteisest optoisolaatoriga eraldatud. Ahelas kasutatava optoisolaatori tõusuaeg ja langeaeg peab olema väiksem kui 2 mikrosekundit. Vastuvõtja elektriahel peab sisselülitamiseks tarbima vähem kui 5 mA voolu.
Viie kontakttihvtiga 180-kraadine DIN-pesa. MIDI andmevahetuses ei kasutata ning sellest tulenevalt ei ühendata kontakttihvte 1 ja 3 saatja ning vastuvõtja elektriahelatesse. MIDI sisendpistikseadise kontakttihvt 2 jääb samuti ühendamata.
MIDI-pesade ja pistikseadiste varjestusühendusi ei lülitata ühtegi MIDI riistvaraahelasse ega korpuse maandusse.
MIDI peegelduspesa kasutamisel võib MIDI-sisendpesa ja peegelduspesa vahelises andmevahetuses esineda signaali degradeerumine nelinurksignaali tõusva ja langeva serva vahel. See on tingitud optoisolaatori reageerimiskestusest. Reageerimiskestusest tingitud ajastusvead seavad jadamisi MIDI ahelasse lülitatavate MIDI-seadmete arvule piirangu. 
MIDI-seadmete omavaheliseks ühendamiseks kasutatavate kaablite maksimaalne pikkus on, veatõrjekoodi puudumise tõttu, 15 meetrit. Kasutatavaks kaabliks on varjestatud keerdpaarkaabel, mille mõlemas otsas on viie kontakttihvtiga DIN-pistikseadis. Kaabli varjestus on ühendatud pistikseadiste teise kontakttihvtiga.

USB

USB võimaldab süsteemi lisada kuni 127 välist seadet, mis on tinginud MIDI tööstuses tendentsi luua süsteeme, kus seadmete omavaheliseks ühendamiseks kasutatakse minimaalsel hulgal lisaühendusi. USB-ühendused võimaldavad lisaseadme ja arvuti vahel kahepoolse ühenduse, mis lihtsustab lõppkasutaja jaoks süsteemi kasutamist. Lõppkasutaja kasutajamugavuse suurendamiseks võimaldatakse ka USB-seadmete käigultvahetus. 
USB 1.0 ja USB 2.0 standardite seadmetevahelise ühenduskaabli maksimaalne pikkus on viis meetrit ning seadmeid, mille voolutarve on suurem kui 500 mA, tuleb elektrienergiaga varustada välise toiteseadme kaudu.

FireWire

FireWire võimaldab kiudoptilisi kaableid kasutades edastada MIDI juhtimissignaale kuni saja meetri kaugusele. FireWire on suuteline MIDI süsteemi ühendama kuni 63 välist seadet ning, sarnaselt USB standardiga, kasutab kahepoolseks suhtluseks keerdpaarkaablit. FireWire-süsteemid toetavad käigultvahetust.

MIDI andmevorming

MIDI suhtlus saavutatakse mitmebaidiliste andmekogumitega, mis koosnevad ühest seisundibaidist, millele järgnevad üks või kaks andmebaiti.
Tavaliselt ehitatakse MIDI instrumenti nii saatja kui ka vastuvõtja, kuid MIDI seade võib olla ka varustatud ainult ühega. Vastuvõtja teostab MIDI-käske ja võtab vastu MIDI andmevormingus teateid. Vastuvõtja riistvara koosneb optoisolaatorist, UART-seadmest ning muust kindla funktsiooni täitmiseks vajalikust riistvarast. MIDI andmevormingus informatsiooni edastamiseks kasutab MIDI saatja UART-seadet ja signaalivõimendit.
MIDI-teateid võib edastada kuni üle 16 kanali ja teade koosneb ühest või enamast baidist.

Teatetüübid

MIDI teated jaotatakse kahte põhikategooriasse: kanaliteated ja süsteemiteated.

Kanaliteated

Kanaliteade kasutab teate edastamiseks ühele kanalile seisundibaidist nelja bitti ning järelejäänud nelja bitti kasutatakse teate defineerimiseks. Seega on kanaliteated mõeldud vastuvõtjatele, mille kanalinumber on kodeeritud kanaliteate seisundibaiti.
MIDI teateid on võimalik edastada rohkem kui ühele kanalile korraga. Kanalit, millele edastatakse põhikäsud, nagu näiteks millisel programminumbril olla ning millist töörežiimi kasutada, nimetatakse kanali baaskanaliks. MIDI seadet on võimalik seadistada mitmel kanalil informatsiooni vastuvõtmiseks. Selliseid kanaleid nimetatakse häälkanaliteks.
Eristatakse kaht tüüpi kanaliteateid: häälteated ja töörežiimiteated. Häälteateid kasutatakse MIDI instrumendi häälte juhtimiseks ning neid edastatakse üle häälkanalite. Töörežiimiteateid kasutatakse, et defineerida MIDI instrumendi reageerimine häälteatele. Töörežiimiteated edastatakse baaskanali kaudu.

Süsteemiteated

Süsteemiteated ei sisalda kanalinumbreid. Kokku on võimalik eristada kolme tüüpi süsteemiteateid:
ühisteated on, olenemata kanalist, adresseeritud kõigile vastuvõtjatele.
Reaalajateateid kasutatakse sünkroonimiseks ning on mõeldud kõigile taktipõhistele süsteemiosadele. Reaalajateated edastavad ainult seisundibitte. Reaalajateateid on võimalik saata igal ajal, ka erineva staatusega teate baitide vahel. Sel juhul reaalajateatele reageeritakse või seda ignoreeritakse, seejärel jätkub viimane vastuvõtmisprotsess.
Süsteemi eksklusiivteated võivad sisaldada suvalise arvu andmebaite ning teadete edastamine lõpetatakse eksklusiivteate lõppbaidi (EOX) või suvalise teise seisundibaidiga. Lõppbait tuleks alati edastada süsteemi eksklusiivteate lõpus. Teated sisaldavad tootja identifitseerimiskoodi. Kui vastuvõtja ei tunne identifitseerimiskoodi, tuleks koodile järgnevaid andmeid ignoreerida.
MIDI-seadmete tootjatel on kohustus avalikustada identifitseerimiskoodile järgnev teadete andmevorming. See võimaldab kasutajatel ja arendajatel tootjate MIDI-seadmetele ligi pääseda.

Andmetüübid

MIDI edastab kaht tüüpi baite: seisundibaite ja andmebaite.

Seisundibaidid

Seisundibaidid on kaheksabitised kahendsüsteemi numbrid, milles suurima kaaluga bitt on määratud loogilise ühena. Seisundibaitide ülesanne on määrata teate tüüp, ehk seisundibaidile järgnevate andmebaitide ülesanne. Uued seisundibaidid (v.a reaalajateated) määravad vastuvõtja seisundi ka juhul, kui viimase teate käsud jäid täitmata.

Seisundi säilitamine

Kehtib häälteadete ja töörežiimiteadete puhul. Seisundibaidi vastuvõtmisel ja tema käsu täitmisel jääb vastuvõtja seisundibaidi edastatud seisundisse seni, kuni vastu võetakse teistsugune seisundibait. Seetõttu on võimalik korduva seisundibaidi edastamise puhul korduvate baitide saatmine ära jätta ning edastada ainult andmebaite. Järelikult on seisundi säilitamise korral võimalik edastada teateid, mis koosnevad ainult andmebaitidest.
Seisundi säilitamise lõpetab suvalise teistsuguse seisundibaidi edastamine. Reaalajateated ei tohi seisundi säilitamist mõjutada.
Kõiki vastuvõetud seisundibaite ja nendele järgnevad andmebaite, mille ülesannet vastuvõtjas ei täideta, ignoreeritakse.

Määratlemata seisund

MIDI seadmed ei tohi edastada määratlemata seisundiga baite. MIDI süsteemis häirete vältimiseks tuleb määratlemata seisundiga baite ignoreerida. MIDI seadme käivitamisel ning väljalülitamisel ei tohi MIDI seade väljundpesast mürasignaale edastada, kuna see võib põhjustada andmevigu või andmete valest alguskohast lugemist.

Andmebaidid

Andmebaidid (v.a reaalajateated) edastatakse pärast seisundibaiti. Teate sisu kannavad üks või kaks kaheksabitilist andmebaiti, mille suurima kaaluga bitt on alati määratud loogilise nullina. Iga seisundibaidi kohta tuleb edastada õige arv andmebaite. Vastuvõtjad peavad enne teate täitmist ootama, kuni kõik andmebaidid on vastu võetud. Andmebaite, millele ei eelnenud valiidne seisundibait, tuleks ignoreerida juhul, kui tegemist ei ole seisundi säilitamisega.