V3MMLmanual

1.4 MMLテキストの記述

← 目次

MMLテキストの記述で定義する内容は、およそ、次の3種類です。

再生要求を受けると、MMLテキストはコンパイルされてから演奏されます。

コンパイルされる内容のうち、時間ごとにシーケンスされるのは、MML定義の部分だけです。

MML定義以外の部分は、コンパイル前の処理(プリプロセッサ)により、波形データに変換されたり、文字置換されたりするため、直接のシーケンスデータにはなっていない点に注意してください。

MML定義について

cdefg;というように、発音させたい内容を書いてトラック定義します。 MML定義内では、前もって定義したマクロを $名前 で参照することも出来ます。MML定義内容をマクロ参照だけで満たしても構いません。

ひとつの発音トラックは、基本的に単音(和音にならない)フレーズを鳴らす内容になります。しかしながら、ひとつの発音トラックで和音を鳴らす、特別な定義方法もあります。

V3MMLでは、あらゆる記述で、大文字・小文字を区別します
V1MML、V2MMLでは、MMLコマンドで大文字・小文字の区別をしませんでしたが、V3MMLでは区別しますのでご注意ください。

マクロ定義について

トラック先頭(MMLコマンドを1つも記述してない状態のトラック)で、次のような書き方をすると、マクロとして定義されます。

$名前=内容;

マクロの内容には改行を含んでも良いので、長いフレーズの定義も可能です。また、トラック先頭であれば、複数のマクロを定義できます。

定義されたマクロは、それ以降に記述されたトラック内にて $名前 で参照され、内容 に置き換えられます。この置き換えは、プリプロセッサにより行われます。

すでに定義されたマクロを、以降のマクロ定義で参照するような、入れ子的なマクロ定義も可能です。

マクロ定義はセミコロンで締め括りますが、トラック定義とは別物と考えてください。

トラック先頭において $ で始まる部分は、マクロ定義モードと解釈されます。 しかし、マクロ定義後に、1つでもMMLコマンドを記述すると、トラック定義モードとなり、$ は定義済みマクロの参照開始とみなされますので、MML記述中にマクロを定義することは出来ません。

メタデータ定義について

メタデータとは、データのためのデータ、のことです。MMLのモード設定や、波形データのユーザー定義など、付随情報全般をサポートする記述がメタデータです。

メタデータの定義は、行頭から「#」を付けたコマンドで行いますが、およそ、次の2種類に分けられます。

メタラインでは、改行を定義終端として認識しています。

メタブロックでは、中かっこ { } によってデータを括っていて、中かっこ閉じ } を定義終端として認識するため、途中に改行が入ることが許されます。

メタライン、メタブロック共に、終端にセミコロンは不要です。

メタデータを記述する位置は、MML定義の前でも後でも大丈夫です。これは、メタデータもマクロ同様、MMLが解釈される前にテキスト全体検索で情報取得後、すぐに除去されるため、MMLが解釈される時には無かったことにされているからです。

メタデータ定義がグループ化されている理由は、検索回数を最小限に抑え、コンパイル時間を短くするためです。