このチュートリアルに従って、MIDI を 16 進形式で読み取り、必要なデータを推定する C++ プログラムを作成しようとしています。トラック チャンク情報では、最初の情報は、トラック「MTrk」を見ているという事実です。2 番目の 4 バイトは、チャンク サイズを示します。
私が理解していることから、チャンクサイズは、次のトラックチャンクの開始前、またはファイルの終わりまでのバイト数を指します。ただし、私が作業してきた midi ファイルでは、多くの場合、チャンク サイズが小さすぎます。つまり、チャンク サイズが 40 バイトであるとしましょう。次の「MTrk」は、現在のものの 70 バイト後まで発生しません (「MTrk」とチャンク サイズ自体が異なるという事実を説明しました)。チャンク サイズの一部)。では、これらの追加の 30 バイトは何ですか? チャンク サイズの後に発生するバイトを切り捨てる必要がありますか? それとも、チャンク サイズを無視して、次のトラック (またはトラックの終わりを示す FF2F00) に遭遇するまで読み続ける必要がありますか?
MIDI ファイルを読み込んだ後、出力として次のように記録しました。
4D546864000000060001000300604D54726B0000000B00FFFFFFFF510306FFFFFF8A1B00FFFFFFFF2F004D54726B
以下に、意味のある部分を分けました。
4D546864
00000006
0001
0003
0060
(ヘッダーの終わり)
4D54726B
0000000B
(チャンクサイズ = 11 バイト)
00FFFFFFFF510306FFFFFF8A1B00FFFFFFFF2F00
(しかし、ここでは 20 バイトが表示されます)
4D54726B
これが私が使用したMIDIファイルです。