如何从 MIDI 文件计算每小节的节拍数

How do I calculate the number of ticks per measure from a MIDI file

我正在尝试从 MIDI 文件计算每小节(小节)的节拍数,但我有点卡住了。

我有一个 MIDI 文件,我可以从中提取以下信息(在元消息中提供):

@0: 拍号:4/4,节拍器脉冲:24 MIDI clock ticks per click,每拍第 32 个音符数:8

有两条节奏消息,我不确定它们是否相关:

@0: 每个四分音符微秒:400000,每分钟节拍:150.0

@1800: 每四分音符微秒:441176,每分钟节拍:136.0001450668214

通过反复试验,查看 Note On 消息,并查看 Garageband 中的 MIDI 文件,我可以 'guess' 每小节的节拍数是 2100,带有四分音符525 刻度。

我的问题是:我可以使用上面提供的节奏信息得出 2100 数字吗?如果可以,如何得出?还是我没有从 MIDI 文件中解析出足够的信息,是否还有其他一些我需要查看的控制信息?

使用以下 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()));

}