midiファイル(smfファイル)をバイナリから読み込みしようとしてます。

ノート70をノートオンしたメッセージの次のバイナリが次のような形になってます。(16進数表記です。)
個人的には「81」「70」とはデルタタイムで、「46」は10進数に直すと「70」なので、
次の「00」「00」と合わせてノートオフのメッセージを示しているように見えるんですが、
そのような情報がWEBでsmfの規格等を読んでいてもでてこず、
これはどのように解釈したら良いかに困っています。
どなたかアドバイスいただけるとありがたいです。
テスト用に読み込んでいるsmfファイルはSONARを利用して自分で作成しています。

81
70
46
00
00
48
64
81
70
48
00
00
4a
64
83
60
4a

回答の条件
  • 1人5回まで
  • 登録:
  • 終了:2013/10/23 02:33:11

ベストアンサー

id:Bookmarker No.1

回答回数191ベストアンサー獲得回数34

以下のように区切るのでは。

…     9x  46  …; ノート46をノートオン
81 70      46  00; 81 70後にノート46をノートオフ
00         48  64; 直後にベロシティ64でノート48をノートオン
81 70      48  00; 81 70後にノート48をノートオフ
00         4a  64; 直後にベロシティ64でノート4aをノートオン
83 60      4a  …

ベロシティ0のノートオンでノートオフを代用してランニングステータスを適用しているのでわかり難いですかね。
http://www2s.biglobe.ne.jp/~yyagi/material/smfspec.html#example

id:shiva_ken

なるほど!!!私もそのページは確認していたのですが、ランニングステータスについては、読み飛ばしてしまっておりました。言われてみたら、すぐにわかりました有り難う御座います。

2013/10/21 22:32:20
  • id:SPX900
    私も興味があってダンプしてみましたが、確かに分かんないですね・・・(SONAR X2です)

    一番不思議なのは、ノートオンの0x9nがチャンネルにかかわらず0x90として現れること。試しに作ったのは1ch,2chのデータでしたが、どちらも0x90でした。規格どおりなら0x90,0x91になるはず。これはどう解釈すれば良いのか・・・もしかして別のアプリで作ったデータだと、様子が違ってくるのかなとも思ったり。Dominoで試そうと思いましたが、こいつは独自フォーマットでしか吐けないんでダメでした。

    まだがっつり調べていないんですが、教科書どおりじゃない端折ったデータでも、案外正しく演奏できるらしいことが書かれていたりもしました。データ量を減らすためにそうしているソフトが存在するようです。
  • id:shiva_ken
    おぉ、こんなところに仲間が!
    なるほど。
    僕は現時点では1chのしか試していないので、おっしゃっていることについては、現在直面していないのですが、smfファイルにはフォーマット0、フォーマット1、フォーマット2があると思うのでその違いとかあるんですかね。

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません