Dr.Godfried-Willem RAES

Kursus Experimentele Muziek: Boekdeel 1: Algoritmische Kompositie

Hogeschool Gent

Departement Muziek en Drama


Terug naar Index

1072 :

Naast de basisafspraken die binnen het oorspronkelijke midi-kommitee werden gemaakt ontstonden er -aansluitend bij de behoeften van de gebruikers- nog enkele verdere en meer uitgebreide midi-kommunikatie standaarden:

1.- Standard Midi File Format

Hierin wordt de vorm beschreven waarin midi-kompatibele sequencers hun muziekbestanden dienen op te slaan en uit te wisselen opdat zo door diverse sequencers gelezen zouden kunnen worden. Geen enkele hardware sequencer noch software sequencer maakt intern gebruik van dit formaat, omdat het veel te rekenintensief is. Elke fabrikant of auteur hanteert zowat zijn eigen formaat, geoptimaliseerd voor het platform waarvoor het is bedoeld. De standaard schrijft enkel voor welk formaat bestanden dienen te hebben om uitwisselbaarheid mogelijk te maken op het kode-nivo. Vele merkspecifieke opslagsystemen (bvb. de esoterische 3" Roland data-disks, PCMCIA memory cards, enz...) houden zich dan ook geenszins aan de standaard. Alleen wat via midi-out als sequence verstuurd wordt , dient zich eraan te houden.

Binnen de standaard worden 3 types onderscheiden:

Type 0: Single track sequences

In dit formaat bestaat een sekwens uit het noten- en ritme-bestand voor een enkele muzikale stem. Deze stem mag echter wel polyfoon zijn. De tempo-map gegevens zijn vervat in de track zelf. Wil je een dergelijke file inlezen dat mag je dus deze bytes niet als gewone midi-bytes inlezen, maar moet je hen identificeren of (desgewenst) geheel buiten beschouwing laten. Het is het enige midi-file formaat dat door een intussen verouderd programma als noteprocessor zonder bugs gelezen kan worden.

Type 1: Multitrack sequences

In dit formaat -tevens het meest gebruikte- worden files opgeslagen die bestaan uit diverse muzikale stemmen of partijen. De eerste 'track' (eigenlijk de nul-de, in dit formaat bevat tevens de tempo-map voor alle eropvolgende tracks.

Type 2: Multitrack multimetric sequences

Dit is beslist het meest veelzijdige data-formaat, maar helaas wordt het door bijna geen enkele kommerciele fabrikant van hard- of software ondersteund. Het is het enige formaat waarbij diverse muzikale stemmen in verschillende toonsystemen en gelijktijdig verschillende metrums kunnen worden opgeslagen.Elke track in dit formaat bevat een eigen tempo-map. De tracks zijn hier onafhankelijk. Het is eigenlijk het enige formaat dat voor professionele ernstige komponisten in aanmerking kan worden genomen, omdat het een willekeurige metrische kompleksiteit mogelijk maakt.

Elke midi-sekwens die als midi file wordt opgeslagen, volgt volgende koderingsafspraken:

1.- HEADER CHUNK IDENTIFIER (4 Midi bytes):

bestaande uit de ASCII kodes voor de letters: MThd

2.- HEADER DATA LENGHT: 32 bits (4 midi bytes) waarde overeenkomstig het aantal bytes waaruit de 'header-chunk' bestaat.

3.- FORMAT: 2 midi bytes waarmee het SMF type wordt aangegeven. Dus: 0,1,2 naargelang het hiervoor vermelde bestandstype.

4.- NUMBER OF TRACKS: 2 midi bytes overeenkomstig het aantal tracks waaruit de file is opgebouwd (en die dus moeten volgen!). Sedert enige tijd is het voor sequencers gebruikelijk track 0 te definieren als tempotrack. Dit is dan een spoor waar alleen algemene informatie (zoals markers...) en inzonderheid tempoaanduidingen worden opgenomen. Deze track krijgen we dan binnen het programma niet op de gewone wijze in beeld.

5.- DIVISION: 2 midi bytes waarmee de resolutie kan worden bepaald, hetzij in termen van onderverdelingen van de kwartnoot, hetzij als SMPTE-tijdskodes volgens de daarvoor geldende standaarden.

In het eerste geval verloopt de kodering alsvolgt:

Het MSB (bit 15) is 0, de overige bits (0 tot 14) drukken het aantal teleenheden per kwartnoot uit.

In het tweede geval alsvolgt:

Het MSB (bit 15) is 1, de bit 14 tot en met 8 geven het gebruikte SMPTE-tijdkodeformaat weer, terwijl de bits D7 tot D0 het aantal tellen per SMPTE-frame weergeven. Het SMPTE-tijdkode formaat kan zijn:

29 frames (30 frames, drop frame)

Het aantal tellen per time-frame kan zijn:

Na deze openingsinformatie volgen de gegevens voor de diverse tracks ook in afzonderlijke chunks:

6.- TRACK CHUNKS

- 4 bytes: ASCII-kodes voor MTrk

4 bytes : lengte van de volgende track-data

een variabel aantal bytes voor de eigenlijke midi-informatie voor de betreffende track.

Elk data-element in een track-chunk bestaat uit een midi-bericht, voorafgegaan door de delta-tijdsinformatie: dit is de tijd tussen het vorige bericht en het volgende. En midibericht samen met de delta-tijd die eraan voorafgaat noemt men een 'track-event'. Als midi-berichten in track-chunks kunnen alleen midi-kanaal berichten worden gekodeerd. Systeem berichten mogen dus niet in de track-chunks voorkomen, en zijn er overigens ook helemaal niet op hun plaats.

De bytes waarmee de delta-tijd wordt uitgedrukt worden bepaald alsvolgt:

Het MSB van een delta-time gegeven is steeds 1 wanneer nog verdere delta-time bytes volgen. Alleen het laatste gebruikte delta-time byte heeft een 0 als MSB. De berekening gebeurt op basis van 8 bits getallen, maar moet, konform de MIDI-standaard, in de file worden opgenomen in een vorm gereorganiseerd als 7-bit getallen.

Voorbeeld:

stel we willen 267 kloktiks als delta-tijd uitdrukken :

267 = in binair stelsel= 0000 0001 0000 1011

hergroeperen we dit in 7-bit bytes dan krijgen we:

0000000 0000010 0001011

Nu moeten we het MSB in de eerste niet nul bytes 1 maken:

valt weg 1000 0010 0000 1011

Of, nu omgezet in hexadecimale getallen:

8 2 0 B

Of, een ander voorbeeld uitgewerkt voor een delta-tijd van 38 in decimaal:

38= 0010 0110

7-bit groepering: 010 0110

toevoeging 0, want het is een enig byte:

0010 0110

Delta-time kode: 2 6 Hexadecimaal

In principe kan het delta-time formaat willekeurige tijdsduren uitdrukken. De Midi-SMF standaard beperkt het formaat evenwel tot maximaal 4 bytes. Wanneer we een tempo van MM240 nemen en een resolutie van 1128 tikken per kwartnoot, dan volstaat deze beperking toch voor tijdsduren van om en bij een hele week...

Ook SYS-EX berichten mogen een plaats krijgen in SMF-files. Ook deze moeten worden voorafgegaan door een delta-tijd. Maar, aangezien normale sys-ex berichten beginnen met &HF0 en eindigen met &HF7, zou de gewone opname ervan betekenen dat er plots 8-bits waarden in de file zouden terecht komen. Dat is in strijd met de standaard. Om dit te omzeilen, wordt na het &HF0 bericht onmiddelijk een aantal bytes verstuurd die het aantal volgende bytes behorende tot de sys-ex weergeven.


Terug naar de inhoudstafel: <Index-Kursus>

Naar Software voor het maken van standard midi files

Homepage Dr.Godfried-Willem RAES