MIDI

dekstra|eta|MIDI-logoo de la Asocio de Fabrikistoj de MIDI
dekstra|eta|Ekzemplo de muziko kreita en MIDI-formato
**MIDI** (MIDIo) estas komputa formo (teĥnika normo) por priskribi muzikon. La mallongigo signifas "Muzikinstrumenta digitala interfaco" (angle "Musical Instrument Digital Interface"). La normo MIDI ebligas prezenton kaj interŝanĝon de muzikaj datumoj en/inter komputiloj kaj en/inter muzikiloj, kiuj havas interfacon MIDI. La interfaco MIDI ebligas kodumi tiajn eventojn kiel premo de tastoj, starigi la muzikilon (tembron, sonkoloron), laŭtecon, pozicion de muzikilo kaj multon alian. MIDIo estas fakte elektronika formo de muzikoskribo, kiu estas multe pli ekzakta ol tradicia muzikoskribo sur papero.

La sistemo MIDI estas vasta, do multenombrajn detalojn povas scii nur fakuloj. Tiu ĉi artikolo strebas sciigi nur superrigardon de MIDIo.

## Ekzemploj de uzo 
### Dosieroj MIDI 
Muzikaj verkoj povas esti koditaj en komputilaj dosieroj. La MIDIaj dosieroj havas kutime sufikson .MID, iam .KAR (por karaokeo). La MIDI-dosieroj en distingo de aliaj komputilaj formatoj de sono (ekzemple MP3) ne enhavas fizikan prezenton de sono kiel oscilado de aero. Aparato, kiu transformas kodon MIDI en sonon estas sinteziloj. Plej vaste uzataj sinteziloj estas komputiloj. Profesiaj muzikistoj ofte uzas elektronikajn sintezilojn. Memkompreneble, la kvalito de ludo dependas de la kvalito de la sintezilo.

La amplekso de MIDIaj dosieroj estas kutime ĉirkaŭ 15-foje malplia ol la amplekso de aliaj sonformatoj (ekz. MP3).

La dosieroj MIDI ne povas prezenti voĉon, sed ebligas prezenton de teksto, kiun povas montri la sintezilo dum ludo de kantoj. Kutime la sinteziloj markas kiel bone videbla la fragmenton de teksto, kiu rilatas al ĉi tiu momento de tempo. Alivorte, sinteziloj prezentas karaokeon.

### Interŝanĝo de muzikaj signaloj inter muzikiloj 
La kodo MIDI povas esti transsendita per kanaloj de komunikado. Tiun manieron uzas "elektronikaj orkestroj", kiuj konsistas el muzikiloj kaj aliaj elektronikaj aparatoj, kiuj havas interfacon MIDI. La kodo MIDI sonigas por ĉiu muzikilo la ĝustan partituron, sinkronigas la muzikilojn kaj ebligas la sinkronan regadon de aparataro (lumigo, piroteknika aparataro ktp).

## Ĝenerala strukturo de MIDI 
Oni subdividas la melodion en trakoj el 1 ĝis 512 (nombrado el 0 ĝis 511). Oni tre malofte uzas pli ol 16 trakojn, sed ofte la melodio enhavas nur unu trakon.

Ĉiu trako enhavas propran pecon de melodio. Kutime en multitraka melodio ĉiu trako enhavas unu partituron (muzikilon). Do oni ludas ĉiujn trakojn samtempe.

Tamen se la melodio havas kelkajn partiturojn, la kodo MIDI povas havi nur unu trakon, do ne estas devige dividi melodion en trakojn laŭ partituroj. Kelkaj aparatoj povas ludi nur unutrakan melodion (ekzemple elektronika piano Casio WK-3300, kiu havas interfacon MIDI kaj povas ludi MIDIajn dosierojn).

Pli grava ol trako estas la nocio "kanalo MIDI". Ekzistas 16 kanaloj (kun nombroj el 0 ĝis 15).

La kanalo 9 estas destinata por drumoj (frapaj muzikiloj) kaj en tiu kanalo oni kodas ĉiujn drumojn de la melodio.

Kutime ĉiu kanalo (krom kanalo 9) enhavas unu partituron, do unu muzikilon kaj kutime por ĉiu kanalo oni starigas la muzikilon nur unufoje komence de melodio kaj la kanalo ludas tiun muzikilon ĝis fino de la melodio. Se la melodio havas pli ol 16 partiturojn, oni devas dividi certajn kanalojn inter kelkaj muzikiloj, do ŝanĝi muzikilon en kanalo kiam necesas.

MIDI subtenas steresonon, do kodas ankaŭ dividon de sonoj en la spaco. MIDI ne kodas separe maldekstran kaj dekstran kanalon kiel kutime faras la plimulto de aliaj sonformatoj. MIDI kodas la pozicion de ĉiu muzikilo en la spaco per nombroj el 0 (maldekstre) ĝis 127 (dekstre). La dividon en dekstra kaj maldekstra kanalo faras la aparataro, kiu transformas kodon MIDI en fizika prezento de sono, do la aparataro kiu interpretas la kodon MIDI.

### Kodo MIDI 
Kodo de MIDI estas sekvenco de bitokoj. Dosiero MIDI havas prefikson kaj ĉiu (eble nur unu) trako havas propran prefikson (vidu poste Formato de dosieroj MIDI). Trako(j) konsistas el komandoj.

La unua bitoko de ĉiu komando havas biton 1 en unua pozicio de bitoko, do iliaj kodoj varias el 128 ĝis 255 (0x80 ĝis 0xFF). Postaj bitokoj de komando havas 0 en unua bito. Senco de tiu regulo estas sekvanta. Dum transsendo de kodo MIDI per nesekura kanalo certaj bitokoj povas esti distordataj. Tiam la ricevanto ignoras eraran komandon kaj rekonas novan komandon laŭ 1 en maldekstra bitoko. Tio minimumas la sekvojn de eraroj. Ekzemple reto de MIDIaj muzikiloj ne perdas sinkronecon pro eraroj.

Komandoj povas konsisti el nombroj aŭ sekvencoj de bitokoj (ekzemple teksto, regantaj sekvencoj ktp).

Nombroj povas enhavi 1 ĝis 4 bitokoj. Por programistoj estas grava memorfiksi, ke nombroj el 2,3 aŭ 4 bitokoj havas unuan plej signifan bitokon. Krome, ĉiu bitoko de nombro havas maksimume 7 bitojn, do en ĉiu bitoko nur 7 dekstraj bitoj estas signifaj kal la plej maldekstra bito estas ĉiam 0. Ekzemple la nombro 384 havas deksesuman prezenton 0x0300, ne 0x8001 kiel en mikroprocesoroj INTEL x86 aŭ x64. 0x0300 = 0b0**0000011**+0b0**0000000**, kie nur dikaj bitoj estas signifaj. La valoro estas dekumaj 3*128 + 0 = 384. Do programoj por procesoroj INTEL dum prilaboro de kodo MIDI devas rearanĝi (inversigi) la bitokojn kaj kalkuli la valoron kiel ilustras la ekzemplo.

Sekvencoj de bitokoj en komandoj havas prefikson kiu difinas la longecon de sekvenco. Sekvencoj povas enhavi nulojn, do nulo ne kodas la finon de sekvenco.

## Komandoj MIDI 
Tiu ĉi artikolo enhavas nur ĝeneralan informon pri komandoj. Detaloj vidu en komandoj MIDI.

La komandaro MIDI enhavas komandojn de kanalo (ekzemple komenco/fino de sono de noto/drumo) kaj sistemaj komandoj. Sistemaj komandoj starigas ekzemple rapidecon de ludo, diversajn tekstojn ktp.

### Strukturo de komandoj 
Ĉiu komando rilatas al iu momento de tempo, en *tikoj*. Tiko (angle tick) estas unuo de tempo en dosieroj MIDI. Jen la strukturo de sekvenco de komandoj MIDI:

*delta1* *komando1* *delta2* *komando2* ... *deltaN* *komandoN*

*delta1, delta2,..., deltaN* estas nombroj kaj signifas intervalon post la antaŭa komando. *Komando1, komando2,..., komandoN* estas propre komandoj. Kiel menciita antaŭe, la unua bitoko de komando havas 1 en la plej maldekstra bito, aliaj havas 0 en la plej maldekstra bito. Ekzemplo de fragmento de komanda sekvenco (deksesumaj nombroj):

... 20 **92397F** 00 **922A7F** 30 **823900** 00 **822A00** ...

Ĉi tie 20 = dekuma 36 estas intervalo post la lasta antaŭa komando. La komando 92397F enŝaltas tonon kun nombro 0x39 en la kanalo 2. La sekvanta intervalo havas delta = 0 (00 deksesuma). Tio signifas, ke la komando 922A7F (enŝalto de sono kun nombro 0x2A en kanalo 2) plenumiĝas samtempe kun la antaŭa komando. La sekvanta komando 823900 elshaltas la tonon 0x39 post 9x30 = 48 deksesumaj tikoj post enŝaolto per unua komando. Samtempe la kvara komando elŝaltas la tonon 0x2A. Do ĉi tiu fragmento lanĉas du tonojn kaj ĉesigas ilin post 48 tikoj.

### Nombrado de tonoj 
MIDI povas prezenti 120 tonoj de 10 oktavoj. La oktavoj en midi havas nombrojn el 1 ĝis 10. La tonoj havas nombrojn el 0 ĝis 119. La tono 0 estas la noto C (do) de subkontroktavo kaj havas frekvencon 16,35 Hz, do estas tiom malalta, ke ne estas aŭdebla por plimulto de homoj. La tono 119 estas la noto H de oktavo 10 kaj havas frekvencon 15804 Hz. Do la diapazono de notoj MIDI estas tre larĝa. Ekzemploj: la noto 0x39 = 48 + 9 = 57 dekuma. 57 dividi per 12 rezultas kvotienton 4 kaj restaĵon 9. Do la sono apartenas al oktavo 4 + 1 = 5 ĉar oni nombras oktavojn el 1. La tonoj en oktavo estas:

* 0 C
* 1 C#
* 2 D
* 3 D#
* 4 E
* 5 F
* 6 F#
* 7 G
* 8 G#
* 9 A
* 10 B
* 11 H

Do la tono 57 estas la noto A en la oktavo 5. Simile la tono 0x2A = 42 dekuma. 42 = 3*12 + 6. Do la tono estas la noto F# de oktavo 4.

### Komandoj de kanalo 
Oni nomigas komandoj de muzikaj eventoj ankaŭ komandoj de kanalo. Ekzistas 7 grupoj de tiaj komandoj. Ĉiu Komando konsistas el 3 aŭ 2 bitokoj, laŭ la sekvanta tabelo. N (deksesuma) aŭ nnnn (duuma) estas nombro de kanalo.

Jen kelkaj klarigoj de tiuj funkcioj. Pli detale vidu en komandoj MIDI.

La komando 8N ĉesas sonon en la kanalo N. La noton (nombro el 0 ĝis 127) difinas la unua bajto de komando (vidu antaŭe la paragrafon *Nombrado de tonoj*. La rapideco, se estas difinita en sonanta aparataro, difinas la rapidecon de ĉesigo. En la plimulto de MIDI dosieroj la rapideco ĉe ĉi tiu komando estas nulo.

La komando 9N enŝaltas la sonon de certa noto en la kanalo N. La nombron de noto difinas la unua bitoko de komando. La dua bitoko difinas la laŭtecon (el 0 ĝis 127).

La komando AN starigas la posttuŝon de la klavo. Kutima la MIDIa aparataro aŭ programaro realigas vibradon de laŭteco de sono lanĉita de la respektiva noto. La samon faras la komamndo DN, sed por ĉiuj notoj en la kanalo N. Vibradon de tonalteco de noto regas la komando BN, por ĉiuj notoj de la kanalo N tion faras la komando EN.

La komando CN difinas la muzikilon en la kanalo N. La nombro de muzikilo el 0 ĝis 127 estas en la unua bitoko de la komando. Ekzemple la kanalo povas soni kiel trombono (kodo 57), violono (kodo 40), gitaro akustika kun nilonaj kordoj (kodo 24), gitaro akustika kun ŝtalaj kordoj (kodo 25), gitaro elektra ĝaza (kodo 26) k.s.

La komando BN starigas diversajn kontrolilojn kiuj regas modusojn de kanalo. Ekzemploj: kontroliloj 1, 7, 10, 11 kaj 64, kiuj estas devigaj por realigo en MIDIa aparataro:

* 1 Modulado, difinas la profundecon de frekvenca modulado en kanalo.
* 7 Laŭteco de ĉiuj notoj en kanalo.
* 10 Panoramo, pozicio de muzikilo en sterepanoramo.
* 11 Esprimeco de sono en kanalo.
* 64 Pedalo de deteno, angle: Sustain Pedal. Detenas la ĉesitajn notojn.

### Sistemaj komandoj 
La sistemaj komandoj havas kodon 0xF en la unua duono de bitoko.
La plej gravaj komandoj havas kodon 0xFF en la unua bitoko. Jen la listo:

* 0xFF 0x00 Nombro de sekvenco - detale vidu en Komandoj MIDI. Angle: Sequence Number.
* 0xFF 0x01 ĝis 0x09 diversaj tekstoj.
* 0xFF 0x20 prefikso de MIDIkanalo - detale vidu en Komandoj MIDI.
* 0xFF 0x2F fino de trako.
* 0xFF 0x51 ritmo, rapideco de sono. Angle: Set Tempo.
* 0xFF 0x54 delokigo SMPTE - detale vidu en Komandoj MIDI.
* 0xFF 0x58 muzika takto, enhavas informon, kiom da kvaraj notoj enhavas unu takto. Angle: Time Signature.
* 0xFF 0x59 tonalo. Angle: Key Signature.
* 0xFF 0x7F informo specifa por sekvensoro. Angle: sequensor specific information.

Pliaj sistemaj komandoj:

* 0xF0 mesaĝo SysEx, sistema ekskluziva mesaĝo.
* 0xF1 kodo rezervita.
* 0xF2 montrilo de pozicio en partituro.
* 0xF3 elekto de partituro.
* 0xF4 kodo rezervita.
* 0xF5 kodo rezervita.
* 0xF6 postulo de agordo.
* 0xF7 fino de SysEx, finpo de sistema ekskluziva mesaĝo.
* 0xF8 takta horo (sinkronigo). Tiu komando sinkronigas la muzikilojn en la reto.
* 0xF9 kodo rezervita.
* 0xFA starto de partituro.
* 0xFB kontinuo de partituro.
* 0xFC stopo de partituro.
* 0xFD kodo rezervita.
* 0xFE kontrolo de konektoj en reto.

## Muzikiloj MIDI 
Pli detale vidu Muzikiloj MIDI.

Ĝenerala MIDIo havas 128 diversajn instrumentojn (muzikilojn), kiuj havas kodojn el 0 ĝis 127. Tio estas imito de muzikiloj aŭ, uzante la terminojn de tonsilaba programo Tone, "tonaj tembroj". Ekzemploj de MIDIaj muzikiloj estas piano (kelkaj variaĵoj), akordiono (kodo 21), klarneto (kodo 71).

Krom "tonaj" muzikiloj MIDIo difinas 61 drumojn (frapajn muzikilojn) kun kodoj el 27 ĝis 87. Ekzemploj estas akustika bastamburo (kodo 35), malfermita triangulo (kodo 81).

## Formato de dosieroj MIDI 
Tiu ĉi artikolo priskribas nur ĝenerale la formaton de dosieroj MIDI. Pli detale vidu Dosieroj MIDI.

La dosiero MIDI havas prefikson kun longeco 14 bitokoj. La prefikso de dosiero enhavas en unuaj kvar bitokoj tekston MThd. La prefikso enhavas tri gravajn informojn pri la muzika verko:
* tipo de dosiero:
** 0 = unutraka.
** 1 kaj 2 = multitraka.
* kvanto de trakoj.
* kvanto de tikoj en kvara noto.

Kutime kvara noto enhavas inter 48 kaj 192 tikojn, la nombro estas ĉiam dividebla al 12.

Post La prefikso MThd troviĝas trakoj. Ĉiu trako havas propran prefikson, kiu komencas kun teksto MTrk. La prefikso de trako enhavas la longecon de la trako en bitokoj.

La trako mem enhavas sekvencon de komandoj. La komandoj havas variajn longecojn.

Kategorio:Komputiko
Kategorio:Muziko