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?
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.
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"
Eine eigene Frage?
Dieser Thread ist über 9 Jahre alt.
Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.