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ファイルの例
(注)記載内容には十分注意をしたつもりですが、勘違いやミスタイプ等により誤りがあった場合はご容赦下さい。