1

アセット ストリームから MIDI データを読みたいと思っています。このファイルは、Windows に準拠した長さ 150 バイトの MIDI0 ファイルです。このコードを使用して、count で測定して 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 が標準に対応していない理由がわかりませんが、それを解決する前に、不足しているデータがどこにあるかを知るために!出力ストリームから一部のバイトがドロップされているのを確認するには、何が間違っていますか?

編集:わかりました、それを見つけました。16 未満のバイトは、0x の数字ではなく、Integer.toHexString() によって単一の文字として返されます。簡単に修正。

4

0 に答える 0