2009-07-25 12 views
4

.midファイルから情報を読み込もうとしていますが、残りのバイトが残りのMIDIメッセージの一部ではないように見えます。私はこれらを予測/処理する方法がわかりませんし、私のプロジェクトでは他のすべてを投げ捨てています。助言がありますか?ここではいくつかの例があります:.midファイルの余分なバイト

 
4d 54 72 6b 00 00 04 48   Track Header 
00 c0 19       Program Change 
00 ff 03 07 54 72 61 63 6b 20 31 Track Title 
00 b0 05 00      Controller Event 
00 64 00 00 06 0c 00 26 00  ???? 
00 b0 20 00      Controller Event 

00 ff 58 04 0c 03 0c 08   Time Signature 
81 89        ???? 
50 ff 51 03 0f 42 40    Tempo 
00 ff 2f 00      End of Track 

00 ff 21 01 00     Unknown Meta Event 
30 b0 79 00      Controller Event 
00 07 64 01 0a 32 01 5b   ???? 
14 01 5d 11 01 20 00 00 00  ???? 
00 c0 23       Program Change 
8c 7c 90 23      ???? 

私はこれらのいくつかは、全く理由もなく非ゼロのデルタ時間を持っているように見えるので、私も右ここ内訳を持っていることを懐疑的です。

答えて

1

あなたは右から始まっていないように見えます。最初の8バイトshould be

4D 54 68 64 00 00 00 06

私の推測では、ファイルのはまずいか、あなたが正しくそれを読んでいないということですか?

EDIT:決して気にしないでください。あなたはこれがファイルの始まりだとは言わなかった。あなたが持っている4バイトはチャンクヘッダです。

2

MIDIイベントのデルタタイムは可変長なので、各イベントは1バイト以上を使用して、最後のイベントから経過する時間をエンコードします。 thisを参照してください。

すべてのMIDIイベントには、0(以前のイベントとまったく同じ時刻に発生したことを示す)または正の値(前のイベントの後に発生する必要があることを示す)のいずれかのデルタ時間があります。

2

MusiGenesisが半減しました - 可変長デルタを正しく解析していません。しかし、あなたが見ている他のイベントはrunning statusです。これは、同じタイプの複数のメッセージを送信しているときにステータスバイトを省略して帯域幅を節約するために使用される手法です。

は、ここでそのダンプが解析されるべき方法は次のとおりですので、上の

 
4d 54 72 6b 00 00 04 48   Track Header 
00 c0 19       Program Change 
00 ff 03 07 54 72 61 63 6b 20 31 Track Title 
00 b0 05 00      Controller Event 
00 64 00       Running status (controller event) 
00 06 0c       Running status (controller event) 
00 26 00       Running status (controller event) 
00 b0 20 00      Controller Event 

と。しかし、私が理解できないのは、次のトラックヘッダーの前に、トラックメッセージの最後の後に余分なイベントがたくさん現れる理由です。 MIDIファイル全体を貼り付けましたか?

+0

申し訳ありませんが、指定する必要があります。それは単なるものであり、ファイル全体が巨大であり、その間にすべてのバイトを投稿する方法はありません。私はまだ理解していないいくつかのことがあります。ここにファイルの連続部分があります。 00 ff 21 01 00(不明なメタイベント)30 b0 79 00(コントローラ変更)00 07 64 01 0 a 32 01 5b 14 01 5d 11 01 20 00 00 00 00 00 c0 23プログラム変更8c 7c 90 23 73 0d 23これはそれに続いてコントローラの変更が必要な多くのバイトが続きます。トラック全体にはノートやノートオフイベントはなく、7fより上のいくつかの値はデルタタイムにのみ表示されます。 – Skunkwaffle

関連する問題