0

我正在尝试从 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 文件,我可以“猜测”每个小节的节拍数是2100,带有四分音符525节拍。

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

4

1 回答 1

0

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

}
于 2020-03-13T11:41:03.350 回答