アセット ストリームから 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() によって単一の文字として返されます。簡単に修正。