Music Macro Language

Music Macro Language（ミュージック・マクロ・ランゲージ）とは音楽演奏を表現するデータ記述言語ないしドメイン固有言語である。MMLと略されることが多いが、XMLの一種であるMusic Markup Languageも音楽を表現するものでそちらもMMLと略されるため、混同されることがある。
楽曲として聞くに堪える音声信号を直接表現するとデータ量が膨大になるため、また人間可読な文字列として簡単にシーケンスデータを入力するため、初期のパソコンでの音楽演奏によく使われた。独立した演奏プログラムとしての実装と、BASICに埋込みの、codice_1文で演奏するものと、どちらが先かは定かではない。
現代でも簡単にシーケンスデータを表現するものとしてよく使われている。SMFや各種演奏ソフト用のデータ形式に変換するものをMMLコンパイラと呼んでいる。
主なコマンド.
方言は音源や実装により多種多様である。ここでは代表的（比較的どれでも共通）なものを挙げるが、違っているものもある。大文字小文字を区別しないものが多いが、区別して別のコマンドとしているものもある。
やや一般的でないものに、次のものが挙げられる。
「テンポずれ」対策.
古いパソコンの一部の演奏系では、実際の分解能が低いために、テンポや音長の指定のしかたによっては強烈な「テンポずれ」と呼ばれる、分数で表現される厳密値との時間ズレが発生した。これを回避するために、様々な運用上の工夫がされた。
対策1・最短音符合わせ.
多用された技法の1つに「最短音符合わせ」というものがある。「みんな一斉にまとめてずれれば、ずれがわからない」という理屈であり、全ての音長を、短い音符の連続で記すが、可読性は非常に悪くなる。以下に一例を記す。
その後、さまざまな個人や企業が音源ドライバを開発したが、それらはテンポずれが発生しないように設計されていた。また、テンポずれが発生する環境でも、最短音符合わせを使わずにテンポずれを防ぐ技法が編み出された。そのため、可読性が悪い最短音符合わせは、次第に使われなくなっていった。
対策2・使用するテンポの限定.
後発の音源ドライバにおいても発生した事象として「特定のテンポにおいて、目的とする音長が再現されない結果リズム感を損ねた再生が行われる」ことがある。これは「1秒間のtick数×60÷テンポ数」が整数、かつその値を「音符の分数÷4」で割った値が整数、という条件を満たさないことが原因で発生する。逆にこの条件を満たすテンポと分数で作られた曲は音長のズレや曲の破綻が発生しない。
応用・テンポ数225と64分音符による音長表現法.
分解能の低さは、テクノポップなどのグルーブ感（音長やリズムの微妙な変化とその一定性）を重視する音楽の多くをPCとMMLでは再現困難または不能とする。また、通常の4分音符や8分音符という長さのみでの表現はそもそも不可能な曲もある。しかし「tickが1/60秒のシステムの場合は、テンポ225に設定することで64分音符をtick1回分の長さとして扱うことが可能」というテクニックで、テンポと音長の組み合わせでは再現できなかった音長の楽曲が演奏可能となる。
これにより一部のテクノやハウスなどの楽曲も演奏可能になる。またこのように4の倍数以外の音長で構成される曲のテンポは非整数値となる。この手法も後に絶対音長を指定できる音源ドライバが登場して以降、使用頻度は減少する。