Midi Hexa-Code符号在一个fie中有所不同

时间:2016-12-26 12:55:34

标签: midi

我在Midi文件中有这3个事件:

00 FF 51 03 0E 15 C3 86 A6

20 FF 51 03 15 20 A5 83

5C FF 51 03 0E 15 C3

但是,在这种情况下,重要的是,FF 51代表速度变化,03代表节奏的后续字节数。SimpleDateFormat dateFormat = new SimpleDateFormat("dd/MM/YYYY HH:mm"); Calendar cal = Calendar.getInstance(); cal.clear(); cal.set(Calendar.YEAR, 2016); cal.set(Calendar.MONTH, 11); cal.set(Calendar.DAY_OF_MONTH, 31); cal.set(Calendar.HOUR_OF_DAY, 22); Date start = cal.getTime(); System.out.println(dateFormat.format(start)); cal.set(Calendar.YEAR, 2017); cal.set(Calendar.MONTH, 0); cal.set(Calendar.DAY_OF_MONTH, 1); cal.set(Calendar.HOUR_OF_DAY, 5); Date end = cal.getTime(); System.out.println(dateFormat.format(end)); 。因为它是" 3 Byte Pairs"在每个事件中为什么有5个字节对描述第一个事件,4个描述第二个事件,3个描述第三个事件? (我希望图片有帮助)

编码程序在新事件开始时如何知道?文件可以毫无问题地播放。

enter image description here

1 个答案:

答案 0 :(得分:2)

所有三个事件都有三个数据字节。

事件之间的增量时间被编码为可变长度量,因此您必须继续读取字节,直到最高有效位清除为止。每个事件前三次为0086 A6 2083 5C,导致解码的delta时间为0,109344和476。