我正在阅读midi文件以找出它的音符和速度,但我如何计算出音符的持续时间呢?
我知道getData1持有密钥,getData2保持速度,但是我在哪里可以找出持有的持续时间?
答案 0 :(得分:5)
找出特定音符的note_on
和note_off
事件的时间,并通过获取差异来计算持续时间。
答案 1 :(得分:3)
最有可能的是,您找不到很多 NoteOff 事件,因为音符的结尾通常被编码为速度为零的 NoteOn 事件。这允许使用运行状态优化,这可以避免重复相同的状态字节。
事件时间以刻度来衡量。在midi文件的标题中,您会找到分辨率,它会告诉您四分音符中有多少个刻度。分辨率通常是24的倍数,以允许使用正整,刻度和三重音符的整数刻度值。
此信息足以从速度计算音符持续时间独立。
如果您需要持续时间(以毫秒为单位),则需要标题中的初始速度,以及midi文件中的所有速度更改元事件。使用所有速度变化,您可以构建速度图。然后你可以计算每次节奏变化的时间。由于速度在两个速度变化之间保持不变,因此您可以计算每个音符的确切开始,结束和持续时间。