Letzte Änderungen: 16.10.2009

Zur Hauptseite kurs9


Synchronisation (SMPTE/MTC, MIDI-Clock)

MIDI-Time-Code (MTC)

Time-Code dient der Synchronisation von verschiedenen Studiogeräten (Bandmaschine, Videoband und natürlich von unterschiedlichen Sequencern). Die Synchronisation erfolgt durch die Übertragung einer absoluten Zeit in <Stunden><Minuten><Sekunden><Frames>.

Es gibt den EBU und den SMPTE-Standard.

EBU ist ein Format mit 25 Frames pro Sekunde für TV (also PAL-Fernsehen) und 24 Frames/sek. für den Film.

SMPTE ist ein Format mit 30 Frames/sek. fürs TV (NTSC) und ebenfalls 24 Frames/sek für den Film.

Hierbei gibts es noch das Drop-Frame Format, das zu einer Frame-Rate von 29,97 Frames/sek führt.

Die Frames sind noch in Sub-Frames unterteilt, um die Auflösung zu erhöhen - bei MIDI wird ein Frame in 4 Sub-Frame aufgeteilt, den Quarter-Frames.

MIDI-Time-Code wird mit dem Statusbyte $F1 (Universal Sysex-Message) gesendet. Um eine komplette Zeit zu erhalten, müssen also erst einmal <Stunde><Minute><Sekunde><Frame> erkannt worden sein. Die Daten werden als Nibble-Byte gesendet, pro Zeiteinheit also 2 Bytes. Eine komplette Zeit ist demnach also 8 Bytes lange.


MIDI Time-Code Quarter Frame Message (14 Bit/HN-LN Nibbles)

$F1 Statusbyte Datenbyte 0ttt dddd - 0ttt: Art der Message,dddd: Datennibble

Message-Art

Das HN-Byte der Stunde einhält den ausserdem den Typ des MIDI-Time Codes.

Type Time Code (HN Byte Stunde) = (HN&0x06)>>1

Midi Time Code Type:

0: 24 Frames/s

1: 25 Frames/s

2: 30 Frames/s (Drop Frame)

3: 30 Frames/s (non Drop Frame)

Die Synchronisation wird mit dem Befehl (NAK) $F0 $0x0t $7e $7e $F7 aufgeben. t ist dabei der Type Code-Typ (0-3)

Mit Hilfe der MTC-Quarter Frame Message werden z.B. von einer Bandmaschine permant Daten an den Sequencer gesendet. Dieser muss dann kontrollieren, ob die interne Sequenceruhr mit dem MTC übereinstimmt.


MIDI Time-Code Full Message

Die Frame Messages werden während des Abspielens gesendet, die Full Message dient erst einmal dazu den Sequencer beim Starten der Bandmaschine zu "positionieren" und an die Bandmaschinen-Zeit anzupassen.

Die Full Message wird mit Hilfe eines speziellen SysEx-Befehls gesendet.


Im normalen Abspielmodus (sowohl vorwärts, als auch rückwärts) wird die Bandmaschinenzeit normalerweise mit Hilfe des Quarter Frames gesendet. Wenn die Bandmaschine schnell spult, werden eventuell sehr viele Full Message gesendet, das hängt allerdings auch von den einzelnen Geräten ab


MIDI Song Position Pointer

Man kann die Bandposition/Sequencerposition auch per Song Position Pointer übertragen, die Auflösung hier ist 24 ppq, entspricht als der Standard MIDI-Clock Auflösung.

$F2 lowByte, HighByte

Man muss diesen 14-Bit Wert nur in die PPQ Auflösung des eigenen Sequencers umrechnen, was mit einem einfachen Multiplikator erreicht wird.

Beispiel: Der Sequencer besitzt 768ppq (also Multiplikator 32)und erhält den Song Position Pointer Wert 24, bedeutet dies der Sequencer setzt seine Sequenceruhr auf den Wert 768 (32*24) und somit auf den Taktwert 1-2-1-1 (bei einem 4/4 Song).

MIDI System Real Time Messages

Um fremde Sequencer (oder ähnliches) zu steuern benutzt man die System Real Time Messages, ebenso kann der eigene Sequencer damit fremdgesteuert werden.

Diese Befehle besitzen ein eigenes Statusbyte, unterbrechen jedoch den aktullen Running-Status von z.B. Noten nicht - es werden ja auch keine Datenbytes übertragen

Die MIDI-Clock

Die MIDI-Clock ($F8) wird mit 24ppq (also 24 mal pro Viertelnote) gesendet. Sie dient zur Übermittlung des Tempos und muss dann interpoliert und in einen BPM-Wert umgerechnet werden. Dazu man muss die Zeit (internen Pulsen) zwischen 2 MIDI-Clock Signalen messen

24 ppq sind eine Viertelnote, bei 120 BPM ist eine Viertelnote 500 ms lang (also beträgt die Zeit zwischen zwei MIDI-Clock Impulse ca. 20.8 ms).

einfache Interpolationsformel: BPM = 120*( Interpolationsfaktor / (Zeit zwischen zwei Midi-Clock Signalen) )

Beispiele (bei einer internen Auflösung von 768 ppq-also dem Interpolationsfaktor 32 (die 32 fache interne Auflösung) ):

Falls Tempoädnerungen auch gleichzeitig aufgenommen werden sollen , sollte man auf jeden Fall ein Quantisierungsraster benutzen um nicht zu viele Tempoänderungen zu erhalten (z.B. 1/32 oder 1/64). Der Benutzer sollte diese Tempoänderungen später auch editieren können, ausserdem entstehen durch die MIDI-Latenz und die Latenz des ganzen Systems sowieso immer kleine Tempoänderungen - vielmehr Schwankungen, die man eigentlich nicht permanent berücksichtigen will. Ausserdem spart man so sehr viele Tempo-Events auf der Tempo-Spur des Sequencers.