2012-12-06 5 views
5

MIDIファイルを読み込むための関数をいくつか記述しようとしています。 http://www.sonicspot.com/guide/midifiles.htmlMIDIファイルを読み込む(C):可変長の値の末尾に0x00が表示される

私がダウンロードしたスーパーマリオブラザーズテーマのMIDIファイルでテストしています。予期しないデータ。ファイルのフォーマットが間違っている可能性がありますが、私が間違ったことをしている可能性が高いと思います。

4D 54 72 6B 00 00 00 19 00 FF 51 03 05 7B 71 00 FF 58 
|---------| |---------| || || || |------| || || 
    MTrk Chunk size || || || Tempo || || 
      (25 bytes) || || ||(ms per || || 
         \/ || ||1/4 note) || || 
       VLen value || ||   \/ || 
      (Event at time 0)|| || VLen value || 
          \/ || (event at || 
       Beginning of || time 113) || 
       meta-event ||    || 
           \/    \/ 
       Meta-event type:   ???? 
         set tempo 

0x00前にすべてが正しい場合は、その後、見ることができるように:ここで私はとのトラブルを抱えている、と私は私がそれについて知っているをどう思う(16進エディタから)のデータがありますそこには何がありますか?前のVLen値は、2進値が01110001であるため、VLen値の別の部分を期待していないため、AFAIK、をイベントタイプにする必要があります。しかし、0x0に関連付けられたイベントタイプはありません。誰かが私が間違っているのを見ることができますか?

答えて

5

問題が見つかりました:メタイベントコード(私の場合は0x51)は、通常のイベントと同様にチャンクサイズで処理されます。そうでないと思ったのは、設定されたテンポ・メタ・イベントのテンポ・データ・サイズが常に3であるからです。したがって、51 03 05 7B 71は実際には設定されたテンポ・イベント・コード(51)、テンポ・データのサイズ(03) (05 7B 71)、そして00は、次のイベントが時刻0にあることを伝えるもう一つの可変長値です。

私はこれが誰かを助けることを望みます。私はまた、これをより明確にするMIDIフォーマットのためのより良い資料を見つけました:http://www.omega-art.com/midi/mfiles.html

関連する問題