¿Cómo funciona el tiempo delta para diferentes pistas dentro de un archivo midi?

Actualmente estoy escribiendo un generador midi usando archivos midi preexistentes. Me estoy confundiendo porque cada archivo midi que descargo parece estar guardado en un formato ligeramente diferente. Particularmente me confundo en cuanto a qué pistas son y cómo afectan el tiempo. En los documentos de archivos midi dice:

File Types
There are three types of MIDI files:

type 0 (single track): all messages are saved in one track
type 1 (synchronous): all tracks start at the same time
type 2 (asynchronous): each track is independent of the others
When creating a new file, you can select type by passing the type keyword argument, or by setting the type attribute:

mid = MidiFile(type=2)
mid.type = 1
Type 0 files must have exactly one track. A ValueError is raised if you attempt to save a file with no tracks or with more than one track.

Mis preguntas son
1. Cuando hace la distinción entre pistas sincrónicas y asincrónicas, ¿significa esto que sincrónico significa que el tiempo delta 'reinicia desde 0' para cada nueva pista mientras que las asincrónicas son consecutivas en términos de tiempo? Si no, ¿qué significa esto?
2. Si mi suposición anterior es correcta, ¿en qué situación usaría archivos asincrónicos?
3. ¿Cómo se dividen las pistas si el tipo 2?

Esencialmente, estoy tratando de regularizar todas las diferentes formas de formatear archivos midi para poder manipular los datos más fácilmente entre tipos. Cualquier ayuda con esto sería apreciada.

Salud

Si está interesado en la composición algorítmica, podría ser mejor comenzar con una biblioteca y un marco existentes. Si juegas con cosas de bajo nivel como el análisis de archivos MIDI, te llevará mucho tiempo llegar lo suficientemente lejos como para ver el bosque desde los árboles, y tendrás mucho código adicional del que preocuparte. Cada línea de código escrita contiene algún porcentaje de errores y problemas para resolver, por lo que debe intentar escribir la menor cantidad de líneas de código posible para mantenerse enfocado. ¿Quizás algo como Python y music21? web.mit.edu/music21/doc/moduleReference/…
estoy usando mido con python
Bien, pensé que estabas creando tu propia biblioteca de importación MIDI desde cero. :D

Respuestas (1)

  1. asíncrono en el tipo 2 significa que cada pista es una secuencia independiente: las pistas del tipo 2 no están pensadas para reproducirse simultáneamente. Esto difiere del tipo 1 en el que las pistas están destinadas a reproducirse simultáneamente. En el tipo 1, el tiempo de cada pista comienza en el tiempo cero. El tipo 1 a menudo tiene una "pista de tempo" como primera pista que contiene toda la información de tempo.

  2. No he visto que el tipo 2 se use con mucha frecuencia. Es solo una forma de almacenar múltiples secuencias en un solo archivo midi. Piense en ello como un archivo midifile.

  3. No destinado a eso.

Entonces, creo que el tipo 0 es lo que necesita, ya que solo tiene que hacer la operación de unión dividida para una sola pista.

En una antigua descripción de archivo MIDI, se decía que el tipo 2 contenía "patrones", por lo que sería como que la introducción de la canción podría ser un patrón, el verso de otro patrón, el coro, el puente, etc., cada parte en su propio patrón. Y estos se activarían en la reproducción en un orden no especificado. Creo que solía haber secuenciadores de hardware que usaban patrones como este. Tal vez incluso teclados de arreglos. Podría estar equivocado. En cualquier caso, no es una cosa muy utilizada.
Pequeña nota: los archivos de tipo 2 son súper súper raros. Muchas bibliotecas y programas incluso no funcionan con dichos archivos por este motivo.