Sehr gute Frage. Auch ich schreibe ähnlichen Code wie Sie.
Auch ich hatte mich darüber gewundert. Für ein Zupfinstrument oder eine Trommel ist die Dauer der Note mehr oder weniger irrelevant. Die Dauer gibt den Zeitpunkt an, zu dem die nächste Note beginnt, nicht der Zeitpunkt, zu dem die aktuelle Note endet.
Wenn Sie Klaviermusik nehmen und alle Noten wie 1 / kürzen. 16 Noten, aber stellen Sie sicher, dass die Startzeiten korrekt sind, dann klingt es nicht schlecht.
Ich habe auch ein Problem beim Programmieren einer monophonen Moog-Synthesizer mit einem MIDI-Controller festgestellt - beim Abspielen aufeinanderfolgender Noten, an die ich eine Notiz gesendet habe Befehle unmittelbar nach den vorhergehenden Note-Off-Befehlen, aber die Syntc konnte nicht schnell genug reagieren und einige Note-Ons wurden übersehen, so dass ich die Noten eine Millisekunde vor der nächsten Note-On-Befehl ausschaltete.
Um ehrlich zu sein, die Midi-Spezifikation hilft hier nicht weiter - Wenn ich zwei Noten auf Nachrichten desselben Kanals und mit derselben Tonhöhe gefolgt von einer Note sende, sollte die Note immer noch klingen (im Fall einer Orgel) - oder sollte ich zwei senden?
Es scheint mir, dass eine Note eine ziemlich komplexe Sache ist, sie hat eine gedruckte Darstellung (wie in einer Partitur) - sie hat eine tatsächliche Note zum Ein- und Ausschalten, die der Zeit entsprechen kann oder nicht Dies ist in der Partitur enthalten, und während der Wiedergabe können sich Lautstärke und Vibrato der Note ändern.
Ich stelle fest, dass einige DAWs (ich vergesse welche) das Drehen der Start- und Stoppzeiten innerhalb von zulassen eine Note in einem Pianorollen-Editor, sodass auf dem Display sowohl die nominalen Start- und Stoppzeiten (entsprechend einer Note in einer Partitur) als auch die tatsächlichen Start- und Stoppzeiten (die von der Partitur abweichen) angezeigt werden
Damit ein Klavier gut klingt, müssen Sie auch den Pedaland Beat und die Lautstärkevariationen berücksichtigen, die durch die Phrasierung impliziert werden - all dies ist ziemlich schwierig :-)