Standard MIDI Format

Z Delphi & Pascal (česká wiki)
Skočit na navigaci Skočit na vyhledávání

Standardní MIDI formát je velmi "podivné zvíře". Při pohledu naň jako na celek, může to být docela zdrcující. Samozřejmě bez ohledu na to, jak se na to díváte, popisuje hudbu tak podrobně, aby jsme ho mohli reprodukovat přesně. To samozrějme není snadný úkol. Takže zatímco je struktura midi složitá, formát souboru je poměrně intuitivní, když jej pochopíte.

Musím zde napsat, že nejsem v žádném případě odborník na midi ani midi soubory. Nedávno jsem dostal Gravis ultrazvukovou desku pro můj PC, a po vyslechnutí několika midi soubory (. MID) jsem si pomyslel, "Páni, rád bych, aby mohli být moje vlastní." No, po mnoho těžkých hodinách později jsem zjistil, že to není triviální úkol. Ale nemohl jsem dovolit aby mně hloupý formát zastavil. Kromě toho jsem jednou řekl své ženě, že počítače nejsou opravdu tak těžké na používaní, a já bych byl nerad za pokrytce. Takže pokud naleznete nějaké chyby v tomto dokumentu, prosím dejte mi vědět a já to opravím. Také tento dokument se nevztahuje na všechny typy midi a každý možný typ konfigurace. Je to jen základní průvodce, který by měl umožnit čtenáři (v středně krátkem čase) pro generování kvalitního MIDI souboru.


Přehled

Midi (. MID) soubor obsahuje v podstatě 2 věci, hlavičku a track kousky. Oddíl 2 vysvětluje hlavičku, a oddíl 3 vysvětluje track kousky. Midi soubor obsahuje záhlaví bloku popisující formát souboru, atd., a libovolný počet track kousku. Trackem může být myšleno stejne jako skladba na multi-track magnetofónu. Můžete přiřadit jednu stopu pro každý hlas, každý nástroj, nebo cokoliv chcete.


Hlavička

Hlavička se objeví na začátku souboru, a popisuje soubor třemi způsoby. Hlavička bloku vždy vypadá:

4D 54 68 64 00 00 00 06 ff ff nn nn dd dd

Ascii ekvivalent prvních 4 bytů je MThd. Po MThd přichází 4-byte velikosti záhlaví. To bude vždy 00 00 00 06, protože záhlaví informace budou vždy 6 bytů dlouhé.

ff ff je formát souboru.


Existují 3 formáty:

  • 0 - single-track
  • 1 - multiple tracks, synchrónny
  • 2 - multiple tracks, asynchrónny


Single track je poměrne intuitivní. Pouze pro jednu skladbu. Synchronní s více track kouskami znamená to, že stopy budou svisle synchronní, nebo v jiných slovách, všichni začnou ve stejnou dobu, a tak může představovat různé části v jedné písni. Asynchronní násobní skladby nemusí nutně začít v stejném čase a můžou být zcela asynchrónní.

nn nn je počet skladeb v midi souboru.
dd dd je počet delta-time tiku na čtvrťovou notu. (Více o tomto později)


Track částí

Zbytek souboru po hlavičce se skládá z track částí. Každá stopa/track má jedno záhlaví a může obsahovat několik MIDI příkazů, tak jak potrebujete. Hlavička tracku je velmi hlavičce soubor:

4D 54 72 6B xx xx xx xx


Stejně jako v případě záhlaví, první 4 byte mají ascii ekvivalent. To je MTrk. Tyto 4 bajty po MTrk dávají délku tracku (bez vloženého záhlaví) v bytech.

Po hlavičce jsou midi události. Tyto udáosti jsou shodné s aktuálními datami odeslanými a přijatými MIDI porty na synth s jediným dodatkem. Midi události předchází delta-time. Doba delta je počet tiku po kterém midi událost je třeba provést. Počet tiku za čtvrťovou notou byla definována dříve v bloku hlavičky souboru. Tento delta-time je promene dlhý. Tento formát, trochu matoucí, umožňuje použít veliké čísla, aniž by bylo nutné u malých čísel vyplnit zbytek nulami. Toto číslo se převede na 7-bitové bajty, a nejvyšší-bit každého bajtu je 1 s vínimkou posledního bajtu čísla, které má MSB 0. Toto umožňuje, čist jeden bajt naráz, a když vidíte MSB 0 víte že to byl poslední (alespoň významný) byte čísla. Podle MIDI specifikace, celá delta-doba by měla být na maximálně 4 bajty.

Po delta-time následuje midi událost. Každá midi událost (s výjimkou běžíci midi události) má příkazový byte, který bude vždy mít MSB 1 (takže hodnota bude >= 128). Seznam většiny těchto příkazů je v příloze A. Každý příkaz má jiné parametry a délku, ale data, která následujou za příkazem budou mít MSB 0 (méně než 128). Výjimkou z tohoto pravidla je meta-událost, která může obsahovat data s MSB 1. Nicméně meta-události vyžadují dlouhý parametr, který zmírňuje zmatek.


Jedna věc, která může způsobit zmatek a to je běžíci režim. Toto je místo, kde aktuální midi příkaz je vynechán, a poslední vydání midi příkaz se předpokládá. To znamená, že midi událost se skládá z delta času a parametru do kterého by šel příkaz pokud by byl.


Záver

Pokud toto vysvětlení jen posloužilo nato aby vznikli další otázky pak dodatky obsahují příklady, které mohou pomoci objasnit problém. Také 2 nástroje a grafický soubor by měl být součástí tohoto dokumentu:


DEC.CPP - Tento nástroj převádí binární soubor (jako. MID) na textový soubor odeleny tabulatory obsahující desetinná ekvivalenty každého bytu.

REC.CPP - Tento nástroj převádí text oddělený tabulátory v souboru do binárního souboru, ve kterém každý bajt odpovídá jedné z desetinné hodnoty.

MIDINOTE.PS - To je postscript format souboru zobrazující poznámeky čísla klávesnice a standardní hudební nástroje.


Appendix A

MIDI Event prikaz

Každý příkazový byte má 2 části. Levý Nybble (4 bity) obsahuje skutečný příkaz, a pravý 4 Nybble obsahuje midi číslo kanálu na kterém bude příkaz proveden. Je tam 16 MIDI kanálů a 8 MIDI příkazů (příkaz Nybble musí mít MSB 1). V následující tabulce x udává číslo MIDI kanálu. Všimněte si že všechny datové byty budou mít <128 (MSB nastavena na 0).


Hex Binárne Data Popis
8x 1000xxxx nn vv Nota vyplá (kláves je uvolnen)
nn=číslo nuty
vv=rychlost
9x 1001xxxx nn vv Nota zaplá (kláves je stlačen)
nn=číslo nuty
vv=rychlost
Ax 1010xxxx nn vv Kláves po stisknití
nn=číslo nuty
vv=rychlost
Bx 1011xxxx cc vv Zmena kontrol
cc=číslo kontroleru
vv=nová hodnota
Cx 1100xxxx pp Program (patch) zmena
pp=číslo nového programu
Dx 1101xxxx cc Kanál po zmene
cc=číslo kanálu
Ex 1110xxxx bb tt Zmena rozteče kola
(2000H je normálny bez zmeny)
bb=spodní (nižší) 7 bitů hodnoty
tt=nahoru (vyšší) 7 bitů hodnoty


V následující tabulce jsou meta-události, které nemají MIDI kanály. Jsou ve formátu:

FF xx nn dd


Všechny meta-události začínají FF, následuje povel (xx), délka nebo počet bajtů které budou obsahovat údaje (nn) a aktuální data(dd).

Hex Binárne Data Popis
00 00000000 nn ssss Nastavuje track's poradové číslo.
nn=02 (délka je 2-byte poradové číslo)
ssss=poradové číslo
01 00000001 nn tt .. Text události - text jeký chcete.
nn=délka textu v bytech
tt=text
02 00000010 nn tt .. Stejné jako v textovém případě, ale pro copyright info.
nn tt=rovnako jako v text události
03 00000011 nn tt .. Pořadí nebo jmého Track
nn tt=rovnako jako v text události
04 00000100 nn tt .. Jmého nástroje v Track
nn tt=rovnako jako v text události
05 00000101 nn tt .. Lyric
nn tt=rovnako jako v text události
06 00000110 nn tt .. Záložka (Marker)
nn tt=rovnako jako v text události
07 00000111 nn tt .. Cue bod
nn tt=rovnako jako v text události
2F 00101111 00 Tato událost musí přijít na konci každého tracku
51 01010001 03 tttttt Nastav tempo
tttttt=microsekundy/čtvrťová nota
58 01011000 04 nn dd ccbb Časová značka
nn=číslo časové značky
dd=jmenovatel časové značky 2=čtvrtina 3=osmina, atd.
cc=počet tikú v metronome
bb=počet z 32tín noty na čtvrťovou notu
59 01011001 02 sf mi Popis klíče
sf=sharps/flats (-7=7 flats, 0=klíč z C, 7=7 sharps)
mi=hlavní/vedlejší (0=hlavní, 1=vedlejší)
7F 01111111 xx dd .. Počítadlo specifických informací
xx=počet zaslaných bytú
dd=data


V následující tabulce jsou systémové zprávy které ovládají celý systém. Tyto nemají žádne číslo kanálu MIDI. Ty se budou zpravidla vztahovat pouze na ovládání MIDI klávesnici, atd.

Hex Binárne Popis
F8 11111000 Časování hodin používá se když je nutná synchronizace
FA 11111010 Start aktuální sekvence
FB 11111011 Pokračovat a zastavení sekvence, tam kde přestala
FC 11111100 Stop a sekvence


V následující tabulce jsou čísla odpovídající notám pro použití v příkazech Nota On a Nota Off.

Octáva C C# D D# E F F# G G# A A# B
0 0 1 2 3 4 5 6 7 8 9 10 11
1 12 13 14 15 16 17 18 19 20 21 22 23
2 24 25 26 27 28 29 30 31 32 33 34 35
3 36 37 38 39 40 41 42 43 44 45 46 47
4 48 49 50 51 52 53 54 55 56 57 58 59
5 60 61 62 63 64 65 66 67 68 69 70 71
6 72 73 74 75 76 77 78 79 80 81 82 83
7 84 85 86 87 88 89 90 91 92 93 94 95
8 96 97 98 99 100 101 102 103 104 105 106 107
9 108 109 110 111 112 113 114 115 116 117 118 119
10 120 121 122 123 124 125 126 127


LITERATURA

  • "MIDI Systems and Control" Francis Rumsey 1990 Focal Press
  • "MIDI and Sound Book for the Atari ST" Bernd Enders and Wolfgang Klemme 1989 M&T Publishing, Inc.
  • Specifikace MIDI souborů obecné MIDI specifikace byly také získány zasláním e-mailu na LISTSERV@AUVM.AMERICAN.EDU s výrazem GET MIDISPEC BALÍČEK ve zprávě.


Author:Dustin Caldwell