解决方案 »

  1.   

    再解释一下:摘自midi标准格式所谓时间差,指的是前一个事件到该事件的时间数,它的单位是tick(MIDI的最小时间单位)。它的构成比较特殊,这里要用二进制来说明。  一个字节有8位,如果仅使用7位,它可以表示0~127这128个数,而剩下的一位,则用来作为标志。如果要表示的数在以上范围,则这个标志为0, 这时,一个7位的字节可以表示0~127tick。如果要表示的数超出了这个范围(比如240),则把标志设置成1,然后记录下高7位,剩下的留给下一个 字节,在该例中240可以分解成128*1+112,这里的1就是第一个字节要记录的,加上标志位,应该为10000001,即十六进制的81,而112 是下一个字节记录的,它的十六进制为70:所以要表示240这个时间,要写成81 70。
      

  2.   

    按字节读取数据,最高有效位为0时(b & 0x80 == 0)停止读取,之前读取的数据去掉最高有效位后连接即为原始数据。
    也可以看做每字节最高有效位为标志位的128进制(2的7次方)数据,那么:
    83 FF 7F 去掉最高有效位为
    03 7F 7F 化为十进制为
    3 127 127 作为128进制数,转10进制为
    3*128^2 + 127*128^1 + 127*128^0 计算结果为
    6553580 40的分析同上