MIDI und MIDI-Files

Transcrição

MIDI und MIDI-Files
MIDI
v 0.8
10/2003
MIDI
1982 erblickte eine Schnittstellenspezifikation das Licht der Welt, die eine Vernetzung von
elektronischen Musikinstrumenten regelt (Sequential Circuits, Roland, Yamaha, Kawai und Korg).
MIDI = Musical Instrument Digital Interface
Die in Synthesizern, Orgeln, Rhythmusmaschinen, Mischpulten,... vor sich hin werkelnden
Computer können seither mit ihresgleichen, aber auch mit eigenständigen Computern Kontakt
aufnehmen.
Die Steuerung der Musikinstrumente mithilfe eines Computers begann mit dem Commodore 64
zum Heimanwender vorzudringen, der etwas später folgende Atari-Computer hatte die MidiSchnittstelle bereits fix eingebaut.
In heutigen PCs kann man bei Vorhandensein eines Soundblaster-kompatiblen JoystickAnschlusses eine Midi-Schnittstelle einfach nachrüsten.
Bis heute gilt die MIDI-Spezifikation 1.0 von damals. Dies wird auch so bleiben, doch bieten
manche moderne Geräte (speziell Sampler) wegen der großen Datenmengen bereits Firewire oder
USB Anschlüsse.
Hardware
Die Kommunikation erfolgt im Wesentlichen über eine RS-232 Schnittstelle (Druckeranschluss).
Ein UART (Universal Asynchronous Receiver Transmitter) treibt eine 5mA-Stromschleife.
Eigenschaften:
–
–
–
–
–
31.25 kBaud (Taktsignal einer 1 Mhz Clock durch 32 geteilt)
asynchron
1 Startbit
8 Datenbits
1 Stopbit
– logisch 0 bedeutet Stromfluss
– ein Ausgang treibt maximal einen Eingang
– der Empfänger erhält das Signal über einen Optokoppler, der für galvanische Trennung sorgt.
Brummschleifen werden dadurch verhindert
– 5 polige DIN Buchsen 180°, Pins 1 und 3 bleiben frei
– Das Verbindungskabel darf maximal 15m lang sein (sonst verringerte Flankensteilheit durch
kapazitive Verluste),
– es muss geschirmt sein und ist an beiden Enden Pin 2 mit Masse zu verbinden.
Wolfgang Urban, HIB Wien
1
MIDI
v 0.8
10/2003
Ein Prinzipschaltbild des Interfaces:
Das Datenformat
Mithilfe von MIDI-Daten soll alles automatisiert werden können, was ein Musiker an seinem
Instrument (wobei man hauptsächlich Tasteninstrumente meinte) machen kann. Als Kompromiss
zwischen Feinheit der Steuerung und schneller Kommunikation mit billiger Hardware werden
praktisch alle Parameter als einzelnes Byte kodiert. Da ein gesetztes bit 7 ein MIDI-Kommando
anzeigt, ein gelöschtes einen MIDI-Datenwert, bleiben für die Daten jeweils nur 7 bit, also 128
Stufen übrig.
Die Übertragung eines Bytes dauert somit 32µs, eines typischen 3-Byte Befehls 1 ms. In dieser Zeit
muss das Kommando auch vom Empfänger registriert worden sein.
Es gibt zwei Gruppen von Befehlen:
1.)Befehle, die Tönen, Klängen, Noten, also einer speziellen Stimme (einem Kanal) zugeordnet sind
(Note ein, Soundwechsel, Pitchbend,...). Diese Kanalbefehle sind im Bereich $80 bis $ef
untergebracht.
2.)Steuerungsbefehle (Synchronisation,...) an das ganze System (Systemkommandos). Sie reichen
von $f0 bis $ff.
Prinzipiell lassen sich 16 Geräte (Stimmen) über eine einzelne MIDI-Verbindung ansteuern. Sie
werden mithilfe die channel-Zahl unterschieden. Wie üblich beginnt die Zählung bei Null.
Ist bei Stimme (channel) 12 etwa das mittlere C mittelstark anzuschlagen, setzt sich der Befehl aus
3 Bytes zusammen:
1. Byte: Kanalnummer im HighNibble, Note-On Kommando im LowNibble
2. Byte: Tonhöhe
3. Byte: Anschlagstärke
das ergibt hexadezimal den Befehlsstring c9 3c 40
Die Midi-Kommandos sind in den unten beschriebenen MIDI-Files genau so vorhanden, wie sie an
die Geräte gesendet werden. Nur die 'Meta-Events' sind spezifisch für Computeranwendungen und
nicht in der MIDI-Spec enthalten.
Wolfgang Urban, HIB Wien
2
MIDI
v 0.8
10/2003
Das Format der MIDI-Files
Midi File Types:
– Type 0:
– Type 1:
– Type 2:
a single Track containing all data
one or more tracks (sequences) containing data to be processed simultaneously
one or more completely independent single-track data patterns
Chunk Types:
Header Chunk
Track Chunk
'MThd'
header length (00 00 00 06)
format
number of following tracks
clock ticks (delta time) per quarter (96, 192,..)
ASCII
4 byte number
word, =0,1,2,
word
word
'MTrk'
length of track
[ delta-time event ]
[ .......
....... ] .....
ASCII
4 byte number hi->lo
hi->lo
hi->lo
hi->lo
hi->lo
Events:
Channel and Mode Messages
8n
(setting running status)
note_off
channel, key, velocity
channel = 0..15, key = 0..127 (middle C = 60), velocity = 0..127 (default 64)
9n
note_on
channel, key, velocity
channel = 0..15, key = 0..127 (middle C = 60), velocity = 0..127 (default 64)
An
poly_AT
channel, key, intensity
polyphone aftertouch. channel = 0..15, key = 0..127, intensity = 0..127
Bn
controller
channel, number, value
controller change.
channel message: channel = 0..15, number = 0..121, value = 0..127
mode message: uses controller number 122..127, value see MIDI spec
(122-0/1 local control off/on, 123-0 all notes off,...)
Cn
program
channel, number
program change. channel = 0..15, number = 0..127
Dn
mono_AT
channel, intensity
channel aftertouch. channel = 0..15, intensity = 0..127
En
pitchwheel
channel, value
channel = 0..15, value = 0..$3fff (transmitted as two 7-bit Bytes lo/hi)
value uses $2000 as middle position
usually 3 semitones up/down
Wolfgang Urban, HIB Wien
3
MIDI
v 0.8
10/2003
Channel and Mode Messages
F0
SYSEX
...databytes...F7
System exclusive data: 7bit data bytes, until F7=EOX
F2
SongPtr
beatposition
beatposition = 0..$3fff, transmitted as two 7bit Bytes lo/hi
1 beat equals 6 MidiClocks
F3
SongNr
number
number = 0..127
F6
TuneRequ
tune request: used with old analog devices
F7
EOX
ends SYSEX.
Some Midi devices use F7 as start of splitted SYSEX-Data (not used here)
F8
TimeClk
synchronize System with this Clock (24 impulses per 96-quarter)
FA
Start
start playback
FB
Continue
continue with next TimeClk impulse
FC
Stop
stop playback
FE
ActSense
active sensing: dummy message (every 300 msecs) if no activity on bus
FF
--> start of Meta Command
(MIDI 1.0 standard: System reset)
Meta Messages
Format: FF nn <length 7bit encoded> data
00
M_SequNr
number
sequence number = Word, transmitted hi/lo
should appear at beginning of track
01
M_Text
ascii-text
arbitrary text
02
M_Copy
ascii-text
copyright notice
should contain (C) year and owner of copyright. First event in (tempo)track
Wolfgang Urban, HIB Wien
4
MIDI
03
v 0.8
M_SequName
10/2003
ascii-text
name of sequence or track
04
M_InstName
ascii-text
name of instrument (use prefix meta event!)
05
M_Lyric
ascii-text
lyrics. Each syllable should be a single event.
06
M_Marker
ascii-text
description of marker. in tempo track
07
M_CuePoint
ascii-text
description of a cue point
20
M_ChnlPre
channel
prefix event, channel = 0..15
subsequent meta command is intended for this channel (until changed)
2F
M_EOT
End of Track. Not optional. Set it correct to allow looping!
51
M_Tempo
tempo
tempo = 3Byte Word, duration of a quarter in microesecs, indicates tempo change.
Put it in tempo track
54
M_SMPTOffs
h min sec frame subframe
in tempo track
58
M_TimeSig
nom denom clocks qnotes
nom = byte nominator of timesig, denominator is 2^denom (byte).
clocks = byte, number of midi clocks in a metronome click,
qnotes = byte, number of notated 32nd-notes in a midi-quarter (24 clocks)
Example: 6/8 time, metronome click every 3 eigths, 24 clocks per quarter (72 to
the bar) gives 06 03 24 08
59
M_KeySig
signs group
signs (byte): bit 7 = 0/1 sharps or flats, bit 0-6 is number of signs
group (byte): 0/1 = major/minor
7F
M_SSPec
...data...
sequencer specific data stuff
Wolfgang Urban, HIB Wien
5

Documentos relacionados