我在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个描述第三个事件? (我希望图片有帮助)
编码程序在新事件开始时如何知道?文件可以毫无问题地播放。
答案 0 :(得分:2)
所有三个事件都有三个数据字节。
事件之间的增量时间被编码为可变长度量,因此您必须继续读取字节,直到最高有效位清除为止。每个事件前三次为00
,86 A6 20
和83 5C
,导致解码的delta时间为0,109344和476。