C++ で midi ファイルを読み込もうとしていますが、標準の midi 仕様で定義されていないイベントと思われるエラーが発生します (これを含む多くのサイトから取得: http://www.sonicspot.com/ガイド/midfiles.html )
HEX エディタで midi を開き、エラーを特定しました。これは、最初の「ノートオン」イベントの前に発生します。このファイルは Sibelius 6 ソフトウェアを使用して生成されたもので、ここにファイル セクションを投稿すれば、誰かがこの問題を解決するのを手伝ってくれるのではないかと思っていました。
3曲目の冒頭です。
4D 54 72 6B (MTrk magic number)
00 00 1F F5 (track size in bytes - 8181)
00 FF 03 04 (4 bytes follows) (track sequence name)
00 FF 04 0B (11 bytes follows) (instrument name)
00 C0 34 (program change event)
00 B0 79 00 (controller event)
00 5B <- (what the heck is that?!)
最初の値が 00 (MSB が 1 に設定されていない) であるため、デルタ ティックにすることはできず、認識可能なイベントでもありません。10 バイト後、「ノートオン」イベントを認識します。次のようになります。
00 5B 30 00 40 00 00 07 64 00 0A 10 00 90 3E 47 ←注意事項
「ノートオン」の前の 12 バイトが何を表しているのかわからないため、ファイルを読み取ることができません。一番最初の音符がかなり長いのは知っていますが、それが理由かもしれません。また、「小節」の一時停止を表すイベントが見つからないことにも気付きました。多分それはバー+長さのコードですか?それらをティックと読むべきですか?