1

我想从资产流中读取 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 数字。很容易固定。

4

0 回答 0