MIDIファイル解析・・・(疲

我流MIDI解読プログラム・・・
なんだか激ムズの予感が
して参りましたw(早

SMFでは効率よくバイト長を
表現するため、
可変長数値表現の考え方を
使っている模様です。
確かに、いちいち4バイトも使って
バイト長を示していたら
非常に効率が悪いのは確かです。
長さを示すのに4バイトも使って、
データの長さが2バイトぐらいだったら
どうするんですか、ということですね。

しかし、これをプログラム側で
解読するのはおれにとっては多少
困難なことでした;
自分で作った変数名が出ているので
非常に難解ですが、一応
こんな感じで解読できたよというのを
載せておきます。

DataSize(DCont) = Val(“&H” & Hex_
(arrByte(i + j + 2)))
If DataSize(DCont) > 127 Then
DataSize(DCont) = Mid(CInt(Hex_
(arrByte(i + j + 2))), 2, 1) * 128_
+ Val(“&H” & Hex(arrByte(i + j + 3)))

今日はこれぐらいかな;(短
あ、
あと、なんだか知りませんが
SMF Format 0とかいって
仕様がイジメそのものです。
なんと、1トラックに全チャンネル、
全メタイベントが含まれています。
そのため、重~いSMF Format 0を
読み込ませると、俺のプログラムでは
プログラム細胞死を起こします(意味不明

つまり、おれのプログラムでは
最初に可変長データ長を求めて
FFH以降のデータを、そのデータ長の分だけ
引き出しているのですが
以前の日記に書いたとおり、
VBの文字連結が低速なので
あまりFormat 0みたいに、ファイル全体に
サーチがかかってしまうと
たとえば100kbぐらいのMIDIがあったら
もう5分以上フリーズ状態になります。
とてもシーケンサーとはいえませんね。

そこで、次回は、10小節分ぐらいで
サーチをストップするような工夫、
そして、Format 0のときは
各チャンネルのメタイベントを
並列して取得するような工夫を
施したいと思います。

はたして・・・うまく行くのだろうか;
(うまく逝くんだろうな;)

You may also like...

コメントを残す

メールアドレスが公開されることはありません。