Как рассчитать количество тактов за такт из файла MIDI - PullRequest
0 голосов
/ 12 марта 2020

Я пытаюсь рассчитать количество тактов на такт (такт) из файла MIDI, но я немного застрял.

У меня есть MIDI-файл, из которого я могу извлечь следующую информацию (предоставленную в мета-сообщениях):

@0: Подпись времени: 4/4, Импульс метронома: 24 MIDI clock ticks per click, Число 32 нот за удар: 8

Есть два сообщения темпа, в которых я не уверен, что они актуальны:

@0: Микросекунды на четверть: 400000, Ударов в минуту : 150.0

@1800: Микросекунды за квартал: 441176, Ударов в минуту: 136.0001450668214

Из проб и ошибок, просматривая сообщения Note On и просматривая MIDI-файл в Garageband, я могу «угадать», что число тактов на такт составляет 2100, с четвертью 525 тиков.

Мой вопрос: могу ли я получить число 2100, используя информация о темпе, которая была предоставлена ​​выше, и если да, то как? Или я не проанализировал достаточно информации из файла MIDI и есть ли какое-то другое управляющее сообщение, на которое мне нужно обратить внимание?

1 Ответ

0 голосов
/ 13 марта 2020

Используйте следующий код Java 11, чтобы извлечь отметки за такт. Это предполагает 4 квартальные ноты на бар.

public MidiFile(String filename) throws Exception {

    var file = new File(filename);
    var sequence = MidiSystem.getSequence(file);
    System.out.println("Tick length: " + sequence.getTickLength());
    System.out.println("Division Type: " + sequence.getDivisionType());
    System.out.println("Resolution (PPQ if division = " + javax.sound.midi.Sequence.PPQ + "): " + sequence.getResolution());
    System.out.println("Ticks per measure: " + (4 * sequence.getResolution()));

}
...