查找音符的持续时间是MIDI

时间:2013-12-25 07:18:14

标签: java midi javasound duration

我正在阅读midi文件以找出它的音符和速度,但我如何计算出音符的持续时间呢?

我知道getData1持有密钥,getData2保持速度,但是我在哪里可以找出持有的持续时间?

2 个答案:

答案 0 :(得分:5)

找出特定音符的note_onnote_off事件的时间,并通过获取差异来计算持续时间。

答案 1 :(得分:3)

罗伯特已经给出了理论上正确的答案。 一如既往,实际的正确答案稍微复杂一些。

最有可能的是,您找不到很多 NoteOff 事件,因为音符的结尾通常被编码为速度为零的 NoteOn 事件。这允许使用运行状态优化,这可以避免重复相同的状态字节。

事件时间以刻度来衡量。在midi文件的标题中,您会找到分辨率,它会告诉您四分音符中有多少个刻度。分辨率通常是24的倍数,以允许使用正整,刻度和三重音符的整数刻度值。

此信息足以从速度计算音符持续时间独立

如果您需要持续时间(以毫秒为单位),则需要标题中的初始速度,以及midi文件中的所有速度更改元事件。使用所有速度变化,您可以构建速度图。然后你可以计算每次节奏变化的时间。由于速度在两个速度变化之间保持不变,因此您可以计算每个音符的确切开始,结束和持续时间。