MLDファイル

MLDファイルの概要

MLDファイルはNTTDoCoMoのiモード携帯電話用のメロディデータのファイルのことで、MFiというコンパクトな形式で記録されている。MFiにはMIDIのチャンネル・イベントに相当する演奏情報やメタ・イベントに相当する曲名等の情報が記録されており、いくつかのバージョンがある(なんでもオルゴールではVer.1とVer.2を使用している)。なお、公式の規格書は一般には公開されていない。

MLDファイルの記録フォーマット(MFi)

1.MFiバージョン1(MFi1)
 4和音までの演奏に対応している。ファイルは次のような構造となっているが、データ長等の数値はその後の位置から数え始めた値(当該データ長部のバイト数は除いて)であり、ビッグ・エンディアンで記録される。

ファイルID:4バイトの文字列melo
総データ長:ファイル容量の(バイト数−8)を4バイトの数値で記録
メタ・データの長さ:トラックの始まりまでのバイト数を2バイトの数値で記録
ファイルの種類:1バイトの数値で、着メロは1である。
曲の一部か全曲か:1バイトの数値で、全曲データの場合は1
トラック数:1バイトの数値で、MFi1では常に1

各種のメタデータ:4バイトの文字列でデータの種類を示し、その後に2バイトの数値でデータ長を記録する。次のような種類がある。

  転送情報(sorc 00 01 n):nは1バイトの数値で、0は転送可、1は転送不可
  曲名(titl any text):anyは2バイトのデータ長、textは任意のテキストデータ
  著作権(prot any text):著作権情報。その他同上
  日付(date 00 08 yyyymmdd):年月日の順で半角数字の8バイトの文字列
  バージョン(vers 00 04 ver):verは4バイトの文字列でMFi1は0100
トラックデータの始まり:4バイトの文字列trac
トラックのデータ長:4バイトの数値で記録

2.トラックデータ
 SMFの場合と同様に、直前のデータからの時間間隔(デルタタイム、チック数により表現される)+データの繰り返しである。デルタタイムは1バイトなので、255以上になるときはNOPを置くなどの処理が必要になる。データにはテンポ等の演奏関連指令(メッセージデータ)と発音データ(ノートデータ)がある。
 メッセージデータはステータスバイトFFに続く1バイトの種類別、さらに1バイトのデータの3バイトのブロックであり、次のようなものがある。

種 類

HEX

説  明

テンポ FFCn nは四分音符の分解能(チック数)を表し、0から6は分解能が6*2^n、8からEは分解能が15*2^(n-8)である。データは1分間の4分音符の数。
演奏開始位置 FFD0 演奏開始位置。データは00
NOP FFDE ノ−・オペレーション。データは00
トラック終末 FFDF トラックの終わり。データは00
音色(下位) FFE0 データの上位2ビットはチャンネルを示す。下位6ビットは7ビットの音色番号の下位6ビット分。FFE1を先にした方がよい。
音色(上位) FFE1 データの上位2ビットはチャンネルを示す。また、最下位1ビットは音色番号の7ビット目、真ん中の5ビットは音色セットの種類でGM音色では1。
音量 FFE2 データの上位2ビットはチャンネルを示す。下位6ビットが音量。

一方、ノートデータは1バイトのチャンネル・キーと1バイトの音長データからなる。チャンネル・キーバイトは、上位2ビットはチャンネルを示し、下位6ビットで音の高さ(キー)を示す。キーは0から62で、1B(HEX)が中央Cに相当する。音長バイトはその音の長さで0から255まで。

3.MFiバージョン2(MFi2)
 トラック数が4トラックまで可能で、16和音までに対応している。MFi1との違いは次のとおり。
 メタ・データとして次のようなものも可能である。

著作権(copy any text):著作権の表示
作者(auth any text):作者名

ノート第2データの有無(note 00 02 nn):ノートデータの音長バイトの後にベロシティ等バイト1バイトがあるかどうか。nnは2バイトの数値で0はベロシティ等バイトなし、1はあり。

バージョン(vers 00 04 ver)のverの文字列は0200である

 メッセージデータには次のようなものも可能である。

種 類

HEX

説  明

マスターボリューム FFB0 データは1バイトの数値で0から127
ドラム切替 FFBA データの0から7bitのうち、bit7は常に0、5〜6はトラック、3〜4はチャンネルを示し、0〜3が1ならドラム指定、0ならなし。
パンポッド FFE3 データの上位2ビットはチャンネルを示す。下位6ビットがパンで、0は左、20(HEX)が中央。

 ノートデータについては、メタ・データのnoteが0のときはMFi1と同じであるが、noteが1であれば、チャンネル・キーバイトの後に音長バイトとベロシティ等バイトの計2バイトが続く。
 ベロシティ等バイトは、上位6ビットがベロシティを表し、下位2ビットはチャンネル・キーバイトで指定した音の高さ(キー)をオクターブ単位で高音又は低音側にシフトするかどうかを示す。0のときはシフトなし、1は1オクターブ高音シフト、2は2オクターブ低音シフト、3は1オクターブ低音シフトである。

MLDファイルの例

(注)記載内容には十分注意をしたつもりですが、勘違いやミスタイプ等により誤りがあった場合はご容赦下さい。