如何从 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()));
}
我正在尝试从 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()));
}