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