Standard MIDI File (zkráceně SMF) je souborový formát určený pro uložení hudebních dat a jejich přenos mezi různými zařízeními. Tyto soubory mají obvykle příponu .mid. Základním rozdílem oproti formátům pro uložení zvuku (WAV, MP3, OGG) je ten, že zatímco ve zvukových souborech je zaznamenán přímo digitalizovaný, případně komprimovaný zvuk, v SMF jsou uloženy parametry použitých hudebních nástrojů, informace o tempu hudby, informace o různých kanálech, jednotlivé noty uložené jako kombinace [čas, nota, rychlost] a další MIDI události.
Data jsou v souboru uložena v blocích (tzv. „chunk“), kde každý blok obsahuje textový identifikátor dlouhý čtyři znaky (čtyři bajty) a informaci o délce bloku (také čtyři bajty). Vícebajtová čísla se v SMF ukládají v pořadí zvaném big-endian, tedy významnější bajty dříve. Po čtyřech bajtech délky následuje příslušný počet bajtů představujících datovou část bloku. Potom začíná další blok nebo končí soubor.
V praxi lze narazit na dva typy bloků:
Stopa začíná identifikátorem MTrk následovaným tradičními čtyřmi bajty udávajícími délku bloku a poté již následuje posloupnost událostí ve tvaru časový přírůstek, stavový bajt, datové bajty. Stavový bajt nemusí být uveden, v takovém případě se parametry vztahují k předchozímu stavovému bajtu.
Časový přírůstek (někdy také deltačas) udává dobu od předchozí události. Může zabírat i více bajtů, v takovém případě je vlastní časový přírůstek „rozsekán“ po sedmi bitech a nejvyšší bit u všech bajtů, kromě posledního (nejnižšího) bajtu, je nastaven na jedničku. Např. číslo 127 (hexadecimálně 0x7F, binárně 01111111) se vejde do sedmi bitů a bude proto uloženo v jednom bajtu. Naopak číslo 33090 (0x8142, 10000001 01000010, po sedmi bitech zprava 10 0000010 1000010) bude uloženo ve třech bajtech 0x82 0x82 0x42 (1000010 10000010 01000010). Je zde určitá podobnost s kódováním UTF-8, kde ASCII znaky zabírají pouze jeden bajt (s nulovým nejvyšším bitem), zatímco znaky s vyšším pořadím zabírají bajtů více a jsou také zakončeny bajtem s nulovým nejvyšším bitem.
Stavový bajt (také příkaz, zpráva) definuje druh události. Jedná se o jeden bajt následující bezprostředně za časovým přírůstkem a lze jej poznat tak, že jeho nejvyšší bit je jednička. (Pokud je stavový bajt vynechán, má bajt za deltačasem nejvyšší bit nulový a jedná se o datový bajt.) Podle stavového bajtu lze rozhodnout, kolik následuje datových bajtů. Horní půlbajt obvykle udává druh příkazu a dolní půlbajt upřesňuje jeho význam, nejčastěji představuje číslo kanálu.
Datové bajty (jinak také parametry příkazu nebo zprávy) následují za stavovým bajtem, případně hned za deltačasem, pokud není stavový bajt uveden. Jejích délka závisí na stavu.
Příklady stavových a datových bajtů: