Standard MIDI Format
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.EXE - 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.EXE - 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ě.