Хотите верьте, хотите нет, но нет MIDI-сообщения, в котором говорится, что «текущий темп составляет 120 бит / мин».Такого рода сообщения не были бы очень полезны в любом случае, так как в большинстве случаев причина знать текущий темп заключается в синхронизации устройств, да?Что вам нужно сделать, это рассчитать текущий темп на основе синхронизации сообщений синхронизации MIDI.
Сообщения синхронизации синхронизации MIDI - это системные сообщения реального времени сообщения, состоящие из одного байта, 0xFA
(или 1111 1000
в двоичном виде).Они отправляются из источника тактового сигнала MIDI 24 раза в квартальную ноту.
Если ваш BPM равен 120, то вы увидите 2880 таких сообщений в минуту или 48 в секунду.Это означает, что каждое тактовое сообщение будет разнесено на 20,8333 миллисекунды.
1000 / ((BPM * 24) / 60) = MS_BETWEEN_MESSAGES
Чтобы рассчитать BPM по часам MIDI, вам нужно знать время между каждым сообщением часов.Как только вы это знаете, эта формула работает и в обратном направлении.Допустим, мы знаем, что наши сообщения находятся на расстоянии около 17,86 мс:
(1000 / 17.86 / 24) * 60 = 139.978 BPM
Теперь, здесь есть большой улов, и это реально, вы нене буду знать точное время между этими сообщениями.Сумма, на которую вы будете отключены, варьируется от системы к системе и от программы к программе, но она будет отключена.Даже в идеальном мире есть время для отправки этого байта по проводам.То, что я сделал в прошлом, это усреднение времени последних нескольких сообщений.Это приводит к гораздо более стабильному измерению BPM, но не без последствий.Когда BPM быстро меняется, наши измерения будут отставать.Как вы справитесь с этим, зависит от ваших потребностей.
Все, что вам нужно сделать сейчас, - это настроить Ableton Live для отправки MIDI-сообщений о синхронизации.Для этого перейдите в «Настройки», «MIDI» и просто включите синхронизацию для нужного интерфейса MIDI.