Michael Burman schrieb:
Wenn MIDI-Übertragung allerdings ohne Zeitstempel und dann auch noch so rein konventionell sequenziell mit 31250 baud erfolgt, dann kann man doch kein gutes Timing erwarten.
Wenn
alles über einen Port laufen würde, hättest Du natürlich recht, aber:
MIDI ist nicht grundsätzlich zu langsam:
Mit zehn Fingern auf der Tastatur wird das MIDI-Timing nie überfordert, weil ein Mensch nicht exakt zum selben Zeitpunkt alle Tasten drücken oder loslassen kann. Es gibt immer eine erste Note, irgendwelche dazwischen und eine letzte. Selbst bei den von mir gemessenen Konzertpianisten, die bei mir waren und so gutes Timing hatten, daß sie Quintolen und Septolen beliebig folgen lassen konnten, verteilten sich zehn Tasten, die gleichzeitig angeschlagen werden sollten, auf 10ms oder mehr.
Hab da schon sehr früh analysiert als der Atari-Notator von 768tel auf 1536tel umgestellt wurde (letzteres bedeutet bei 120BPM ja nur noch minimale 1.3ms-Stufen und bei 240BPM 0.65ms).
Hier muß klar sein, daß ein Keyboard, das running-Modus unterstützt, innerhalb von 10ms mehr als 16.6 Töne erklingen lassen könnte. Zwei Noten könnten minimal im Abstand von 0.64ms erklingen. Allerdings trat das bei den gemessenen Akkorden nur selten auf. Werte unter 1.3ms waren häufiger: zwei der zehn Tasten werden eben doch geradezu gleichzeitig getroffen (vielleicht sogar die beiden wichtigsten, aus denen der Hörer das Gesamttiming ableitet?!)
Wie schnell muß es denn überhaupt sein?
Das menschliche Gehör kann zwei Reize, die weniger als 2ms auseinander liegen, nur noch als einen Reiz wahrnehmen (sog. "Fusionsschwelle"). Die Ordnungsschwelle ist hier aber auch relevant: bei zwei Reizen, die weniger als 20ms entfernt sind, kann man zwar sagen, daß es zwei sind, aber nicht in welcher Reihenfolge sie erklangen!
Quantisieren ist des Timings Tod
Also sollte man bei extrem Timing-relevanten Noten vermeiden, daß so viele Daten zum
selben Zeitpunkt gesendet werden, daß sie wesentlich weiter als die Fusionsschwelle von 2ms auseinander liegen: Mit running-Modus passiert das ab 5 Noten (Bei 5 Noten sind erste und letzte immerhin noch unter 2.6ms auseinander, also wohl noch im grünen Bereich).
ABER: Durchs Quantisieren, werden die Noten auf den selben Zeitpunkt geschoben, sowohl die fürs Timing wichtigen, die auf dem Punkt sein müßten, als auch weniger wichtige, die früher oder später hätten kommen dürfen. Das behindert das Timing.
Lösung
TonE schrieb:
Wir benötigen mindestens drei Midiports
Je nachdem, wieviele Geräte ich ansteueren will, deren Timing essentiell ist. Ich habe früher Drums immer mit einem exklusiven Port versorgt (Kick+HiHat+Snare+Claps und schon bin ich knapp unter der Fusionsschwelle, bloß nicht noch zusätzlich Samples über MIDI layern), Bass nur mit wenigen nicht auf dem Punkt zu spielenden Synthies (z.B. Flächen) gemischt und letztere natürlich
nicht quantisiert und für den Rest noch einen Port verwendet. Heute würde ich bei vielen Geräten eher 5 oder 10 eigenständige MIDI-Ports nutzen, für ein oder maximal zwei Geräte ein eigenen Port.
Fazit
seq12 schrieb:
Der Notenausgabetakt (1/96-tel Note) wird im Microcontroller mit einem Hardwaretimer erzeugt.
Wenn der Sequenzer ein künstliches minimales Zeitraster von 20.8ms bei 120BPM erzeugt, dann ist jedes Timing dahin, sogar das quantisierte, wenn pro Zeitstufe wesentlich mehr als 4 Noten gestartet werden.
Ein IMO perfekter Sequenzer löst wenigstens mit 0.5ms auf, demit er keinen dramatischen MIDI-Jitter hinzufügt. 5ms sind IMO die absolute Obergrenze, darüber dürfte es sehr schwierig werden, gutes Timing zu erzielen.
PS.: Korrigiert, da Rechenfehler. Nun stimmt's.