我想从资产流中读取 MIDI 数据。根据 Windows,该文件是长度为 150 字节的 MIDI0 文件。使用此代码,我读取了按计数测量的 150 个字节,但输出字符串只有 127.5 个字节。
try {
assetStream = assets.open("MIDI0_7.mid");
int count=0;
do {
byteValue = assetStream.read();
count++;
outputString = outputString + Integer.toHexString(byteValue);
} while (byteValue > -1) ;
Log.d("MUSIC", "Final string " +outputString);
Log.d("MUSIC", "bytes read " +count);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
此读取的 HEX 数据也与 MIDI 规范 AFAICT 不匹配。开头的 8 个字节应为
4d 54 68 64 00 00 00 06
但我明白了
4d 54 68 64 00 06
我不能确定我的 MIDI 文件的保存格式(从 Cakewalk SONAR 导出的带有 7 个音符的测试文件)所以我不确定为什么 MIDI 不符合标准,但在我解决之前我需要知道我丢失的数据在哪里!看到一些字节从我的输出流中丢失,我做错了什么?
编辑:好的,找到了。Integer.toHexString() 将小于 16 的字节作为单个字符返回,而不是 0x 数字。很容易固定。