SMF Player

このアプリケーションは、SMFファイルを再生(MIDI OUTに出力)します。このアプリ自体で音が出るわけではありません。音楽を聞くためには別途音源が必要です。このではeVY1を使うことを想定しています。でも、eVY1で無くても、GM音源であれば音楽を再生できます。

使い方

"output port"のプルダウンメニューでMIDIの出力先を選択して下さい。

"select SMF File"のボタンを押すとファイル選択ダイアログが表示されます。SMFファイルを選択して下さい。SMFファイルの拡張子は、一般には".mid"です。ファイルが選択され、SMF Fileが読み込まれるとファイルの情報が表示されます。

"eVY1"のチェックボックスは、音源としてeVY1もしくは、NSX-39を使うときにチェックを入れます。これらの音源はチャンネル1にボーカロイドがアサインされていますので、これを使わないようにMIDIを編集してます。(特殊ですので、通常チェックは入れません)

"PLAY"ボタンで再生が開始し、"STOP"ボタンで停止します。"STOP"ボタンを押すと全チャンネルにAll Note Offのメッセージを送り音を止めます。"All Note Off"ボタンを押すと、同様に音を止めます。



SMFファイルのシステムエクスクルーシブデータの扱い

このアプリを作ってから4年は経つのですが、間違いを発見しました。SMFファイルでのシステムエクスクルーシブの扱いが特殊であることに気づきませんでした。システムエクスクルーシブデータは0xF0で始まり0xF7で終わります。0xF0と0xF7の間には何バイトのデータが入ってもOKです。(ただし、最上位ビットはゼロ)例えば、GM ONのメッセージであれば以下のようなデータとなります。

    0xF0 0x7E 0x7F 0x09 0x01 0xF7

ところがSMFファイルの中での記述は0xF0のあとに、データのバイト数+0xF7の数が入っています。GM ONの場合には、0x7Eから0xF7までの数、5が入っています。

    0xF0 0x05 0x7E 0x7F 0x09 0x01 0xF7

それではもし、127バイト以上のデータが入っていたらどうなるか?その場合にはデータのバイト数を複数バイトに分けて、最後のバイト以外の最上位ビットを立てます。例えば以下のように表します。

    0xF0 0x81 0x00 ........... 0xF7  <-- 128バイトの場合
    0xF0 0x81 0x01 ........... 0xF7  <-- 129バイトの場合
    0xF0 0x82 0x00 ........... 0xF7  <-- 256バイトの場合
    0xF0 0x82 0x01 ........... 0xF7  <-- 257バイトの場合
    0xF0 0x81 0x81 0x00 ........... 0xF7  <-- 16384バイトの場合
    0xF0 0x81 0x81 0x01 ........... 0xF7  <-- 16385バイトの場合


アプリケーション

下のApplicationボタンを押すと、別タグでアプリケーションが起動します。

Application