Question

Une question assez simple pour que j'ai une supposition, mais je ne peux pas trouver une réponse définitive nulle part.

L'arrière-plan: J'ai un fichier MIDI multi-piste avec des commandes de tempo dans la première piste. Je dois traduire le nombre de ABSOLUTE_TICK dans d'autres titres à « secondes » (fractions de secondes décalé par rapport au début du fichier midi).

J'ai la formule de relier ABSOLUTE_TICK à secondes sur la base du PulsePerQuarterNote (ppqn) pour le fichier au tempo (MS par quart de note).

La question est: faire des changements de tempo dans la première piste (piste 0) appliquent à tous les autres pistes

?

Si oui, alors pendant que je suis l'analyse d'autres pistes (par exemple la piste 4, qui a NOTE_ON et messages NOTE_OFF Je suis intéressé par) Je vais devoir garder un doigt pointé vers les changements de tempo dans la piste 0 en parallèle. Est-ce exact?

Merci,

Mark

Était-ce utile?

La solution

En bref, oui. La première piste contient les informations de temps qui sera appliqué pour l'ensemble du dispositif, de sorte que vous appliquer ces messages pour chacune des pistes avec le même absolu temps. Étant donné que tous les événements utilisent un décalage dans les tiques, vous devez d'abord extraire les messages de changement de tempo, de les convertir en temps absolu, et que vous lisez dans les autres pistes que vous appliquerez ces messages en fonction de ce calendrier.

De la centre de lavage de cerveau technique fanatique MIDI :

  

Dans un format 0 fichier, les changements de tempo sont dispersés dans une MTRK. Au format 1, la première MTRK devrait consister seulement le tempo (et signature de temps) des événements afin qu'il puisse être lu par un dispositif capable de générer une « carte de tempo ». Il est préférable de ne pas placer les événements MIDI dans ce MTRK. Dans le format 2, chaque MTRK doit commencer par au moins un tempo initial (et signature de temps) événement.

Cela dit, certains séquenceurs ne cassent cette règle et de mettre les événements MIDI réels dans la première piste aux côtés de synchronisation d'information, puisque la norme est pas spécifique à cet égard. Votre programme devrait traiter les deux cas, car il est susceptible de rencontrer des fichiers MIDI dans la nature qui sont mis en forme de cette manière.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top