Lep*_*aun 1 java int midi bytearray javax.sound.midi
我需要从midi文件中获取速度值.我发现,set_tempo命令的值为0x51,所以我有这段代码:
for (int i = 0; i < tracks[0].size(); i++) {
MidiEvent event = tracks[0].get(i);
MidiMessage message = event.getMessage();
if (message instanceof MetaMessage) {
MetaMessage mm = (MetaMessage) message;
if(mm.getType()==SET_TEMPO){
// now what?
mm.getData();
}
}
}
Run Code Online (Sandbox Code Playgroud)
但方法getData()返回一个字节数组!我怎样才能将它转换为普通的人形,又称整数?我已经读过它以这样的格式存储:"tt tt tt",但整个大/小端,签名/无符号和可变长度的东西使它太混乱了.
Tempo是一个3字节的大端整数,每分钟的Bits计算为BPM = 60,000,000 / (tt tt tt)
byte[] data = mm.getData();
int tempo = (data[0] & 0xff) << 16 | (data[1] & 0xff) << 8 | (data[2] & 0xff);
int bpm = 60000000 / tempo;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1015 次 |
| 最近记录: |