Forum: Mikrocontroller und Digitale Elektronik MIDI Ausgang wie auf Eingang synchronisieren?


von Audiomann (Gast)


Lesenswert?

Ich hätte eine Frage zu dem Thema:
Beitrag "Midi Empfangen mittels Atmega 8 und Bascom"
möchte aber den thread nicht kapern:

Wie läuft das bei MIDI? Kommen die Daten permanent? D.h. kann man davon 
ausgehen, immer einen Takt vom MIDI-Gerät zu bekommen, auch wenn das 
gerade nichts funkt, weil keine Taste gedrückt wird?

Oder ist das vollkommen asynchron und pulsed nur, wenn was kommt?

Ich möchte nämlich meinen MIDI-Ausgang auf den Eingang synchronisieren 
und habe Befürchtungen, dass mir der Ausgang wegläuft, wenn Ich intern 
einmal synche und dann mit der internen Rate weiterlaufe und irgendwann 
dann mal ein neues Eingangsdatum in einer Phase kommt, das nicht zum 
Ausgang passt.

Wie synche Ich dann? Ich kann ja schlecht den Datenstrom aus Ausgang 
unterbrechen. Höchstens in einer Sendepause, aber davon wird es wenige 
geben. Ich kann allerdings den Teiler verändert, dass sich die Rate 
etwas ändert.

Dann wäre die Frage, wie genau der Takt sein muss:

Ich habe S/PDIF mit 6,144 MHz auf dem board, komme aber mit einem Teiler 
196 nur auf 31.347, was 3 Promille zuviel sind. Das sollte wohl gehen, 
oder?

Wie weit kann ich davon wegehen?

von Rolf M. (rmagnus)


Lesenswert?

Audiomann schrieb:
> Ich hätte eine Frage zu dem Thema:
> Beitrag "Midi Empfangen mittels Atmega 8 und Bascom"
> möchte aber den thread nicht kapern:
>
> Wie läuft das bei MIDI? Kommen die Daten permanent? D.h. kann man davon
> ausgehen, immer einen Takt vom MIDI-Gerät zu bekommen, auch wenn das
> gerade nichts funkt, weil keine Taste gedrückt wird?

Das kommt drauf an, was du mit "Takt" meinst. Protokollmäßig gibt es 
keinen Takt, aber es gibt (optional) mit MIDI-Clock eine Art Metronom, 
auf den sich die angeschlossenen Geräte musikalisch synchronisieren 
können.

> Oder ist das vollkommen asynchron und pulsed nur, wenn was kommt?

MIDI senden und empfangen kann man mit einem UART, ist also ein 
einfaches serielles asynchrones Protokoll. Einen Takt im Sinne der 
Schnittstelle gibt es nicht.

> Ich möchte nämlich meinen MIDI-Ausgang auf den Eingang synchronisieren
> und habe Befürchtungen, dass mir der Ausgang wegläuft, wenn Ich intern
> einmal synche und dann mit der internen Rate weiterlaufe und irgendwann
> dann mal ein neues Eingangsdatum in einer Phase kommt, das nicht zum
> Ausgang passt.

Eine MIDI-Botschaft wird einfach gesendet, wenn das auslösende Ereignis 
kommt, und dann ist Sendepause bis zur nächsten MIDI-Botschaft. 
Synchronisieren kannst du da nix.

> Wie synche Ich dann? Ich kann ja schlecht den Datenstrom aus Ausgang
> unterbrechen. Höchstens in einer Sendepause, aber davon wird es wenige
> geben.

Wenn deine MIDI-Schnittstelle so überfüllt ist, dass es keine 
Sendepausen gibt, hast du sowieso ein Problem.

> Dann wäre die Frage, wie genau der Takt sein muss:
>
> Ich habe S/PDIF mit 6,144 MHz auf dem board, komme aber mit einem Teiler
> 196 nur auf 31.347, was 3 Promille zuviel sind. Das sollte wohl gehen,
> oder?
>
> Wie weit kann ich davon wegehen?

Die Anforderungen dürften da gleich sein wie bei RS232. 3‰ sollten kein 
Problem darstellen.

von J. S. (engineer) Benutzerseite


Lesenswert?

So ist es! MIDI ist asynchron, d.h. es kommt alle paar Nasen lang mal 
was an. "MIDI Clock" wurde schon erwähnt. Ist aber nur einigermaßen 
genau und dies auch nur auf Rhythmusebene. Um genau zu messen, wie 
schnell ein Stück ungefähr ist, muss man aber auch schon filtern. 
Synchronisieren kann man damit den Takt in keinem Fall.

Du musst auch den Ausgang nicht auf den Eingang anpassen, sondern 
sendest Nachrichten weg, wenn Du willst. Was die Genauigkeit angeht, 
kommt es aufs Gerät an: Normalerweise kann man mit der Taktfrequenz 
locker mehrere Prozente schief liegen. Die Nachricht wird trotzdem 
verstanden. Die Geräte sind ja dafür gebaut, die Nachrichten stoßweise 
zu bekommen.

Und genau das ist das bekannte Problem beim MIDI: Die Nachrichten kommen 
irgendwann raus, irgendwann an und die Klangerzeuger dudeln praktisch 
dann, wann sie wollen, bwz wenn sie das MIDI kapiert haben. Mit 
Softwaresynthesizern hat man diesbezüglich die größten 
Überraschungsmomente.

Das ist eigentlich wie im Orchester, wenn der Dirigent grob den Takt 
angibt. Nur ist es da so, dass die Musiker selber Taktgefühl haben und 
sich gegenseitig hören und die Anweisung nur optisch verarbeiten. Daher 
sind gute Orchestermusiker auf unter 10ms genau! Klangerzeuger laufen 
zwar auch mit eigenem Takt weiter, reagieren aber zu hart auf die MIDI 
Clock und laufen dadurch statisch auseinander. Je nach Gerät hast Du da 
bis zu 200ms Diskrepanz wie Ich lernen musste.

Ich mache mein MIDI über S/PDIF, da ist der Takt immer an und die 
Endgeräte hängen Dank PLL im Bereich von Zehnteln des Taktes von bis 25 
MHz an der Stange. Das ist 1 Mio mal genauer, als MIDI CLock :-)

Bei normalem MIDI kannst Du nur über Time Code arbeiten, dann halt mit 
Latenz und somit offline. Mehr dazu hier

Beitrag "MIDI Clock in MIDI Timecode wandeln"

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.
Lade...