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