Как сообщение Midi TEMPO применяется к другим трекам?

StackOverflow https://stackoverflow.com/questions/1080297

  •  22-08-2019
  •  | 
  •  

Вопрос

Довольно простой вопрос, на который у меня есть догадка, но я нигде не могу найти окончательного ответа.

Предыстория:У меня есть многодорожечный midi-файл с элементами управления темпом в первом треке.Мне нужно перевести значение ABSOLUTE_TICK в других дорожках в "Секунды" (смещение на доли секунды от начала midi-файла).

У меня есть формула для привязки ABSOLUTE_TICK к секундам на основе PulsePerQuarterNote (PPQN) для файла к темпу (МС на четверть ноты).

Вопрос в том,:применяются ли изменения темпа в первом треке (дорожка 0) ко всем остальным трекам?

Если это так, то пока я разбираю другие треки (напримертрек 4, на котором есть сообщения NOTE_ON и NOTE_OFF, которые меня интересуют) Мне нужно будет держать палец, указывающий на изменения темпа в треке 0 параллельно.Это верно?

Спасибо,

Отметка

Это было полезно?

Решение

Короче говоря, да.Первый трек содержит информацию о времени, которая будет применена ко всей аранжировке, поэтому вы применяете эти сообщения для каждого из треков с одинаковым абсолютный время.Поскольку во всех событиях используется смещение в тактах, вам нужно сначала извлечь сообщения об изменении темпа, преобразовать их в абсолютное время, а затем при чтении других треков вы будете применять эти сообщения на основе этой временной шкалы.

Из Центр технического промывания мозгов MIDI fanatic:

В файле формата 0 изменения темпа разбросаны по всему одному MTrk.В формате 1 самый первый MTrk должен состоять только из событий tempo (и временной сигнатуры), чтобы он мог быть прочитан каким-либо устройством, способным генерировать "карту темпа".Лучше всего не размещать MIDI-события в этом MTrk.В формате 2 каждый MTrk должен начинаться по крайней мере с одного начального события tempo (и time signature).

Тем не менее, некоторые секвенсоры нарушают это правило и помещают фактические MIDI-события в первую дорожку вместе с информацией о времени, поскольку стандарт не настолько специфичен в этом отношении.Ваша программа должна иметь дело с обоими случаями, поскольку она, скорее всего, столкнется с MIDI-файлами в дикой природе, которые отформатированы таким образом.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top