Music Macro Language

出典: フリー百科事典『ウィキペディア(Wikipedia)』

Music Macro Languageとはコンピュータ上の楽譜となるような簡易言語である。MMLXMLの一種であるMusic Markup Languageも音楽データでありMMLと略すため、混同されることがある。

元は音楽演奏機能を持つ8ビットパソコン(例:PC-6001FM-7等)用BASIC言語で、PLAYコマンドの引数の形式であった。

BASICがパソコンの標準機能でなくなった後も簡便な楽譜記述言語として生き残り、Standard MIDI File形式や各種ソフトファイル形式などに変換できるMMLコンパイラもある。

目次

[編集] 主なコマンド

C D E F G A B
それぞれ、ドレミファソラシの音符
# + -
音符の後につけて半音上げ下げを表す。#と+は同じ意味。
R
休符。
数字 .
音符や休符の後につけ、音の長さを表す。2=2分音符。.は付点で長さを1.5倍する。4.=付点4分音符。
&
二つの音符を連結する。タイを表す。前後の音階が異なる場合、無視される、スラーとして処理される、ポルタメントとして処理される、など、扱いは実装によって異なり、一定ではない。
O
オクターブ指定
> <
オクターブの上下。どちらがアップダウンを意味するかは言語によって異なる
L
AGRの後に数字をつけないときの音の長さを指定。初期値は4であることが多い。
V
音量(ボリューム)を指定
@
FM音源などでの音色の指定
T
テンポを指定。たとえば「T120」なら120BPMで演奏する。プラットフォームによってはテンポのずれが発生する。

やや一般的でないものに、次のものが挙げられる。

N
通常のオクターブ+CDEFGABではなく、音の高さを数値で直接指定する。
Q
発音の長さを指定する。レガートスタッカートを表現する。
P
左右の定位を設定する。噛み砕いて言えばステレオ設定である。
S
PSGエンベロープの種類を選択する。
M
PSGのエンベロープの周期を設定する。

その他、方言は音源や実装により多種多様である。なお、通常ここに挙げたMMLのコマンドは、大文字と小文字を区別しない。

[編集] システム上の制約と対策

古いパソコンの一部の処理系では、

  • 演奏時の割り込みの頻度が遅い
  • 割り込み周期の都合上、本来あるべき音長の長さで演奏されない

などの理由で、テンポや音長によっては強烈なテンポずれが発生した。これを回避するために、各パソコンに合わせて、様々な運用上の工夫が成された。

[編集] 対策1・最短音符合わせ

多用された技法の1つに「最短音符合わせ」というものがある。「みんな一斉にまとめてずれれば、ずれがわからない」という理屈であり、全ての音長を、短い音符の連続で記すが、可読性は非常に悪くなる。以下に一例を記す。

通常の表現
C4D4E4F4 もしくは L4CDEF
最短音符合わせ
L16C&C&C&CD&D&D&DE&E&E&EF&F&F&F

その後、さまざまな個人や企業が音源ドライバを開発したが、それらはテンポずれが発生しないように設計されていた。また、テンポずれが発生する環境でも、最短音符合わせを使わずにテンポずれを防ぐ技法が編み出された[1]。そのため、可読性が悪い最短音符合わせは、次第に使われなくなっていった。

[編集] 対策2・使用するテンポの限定

後発の音源ドライバにおいても発生した事象として「特定のテンポにおいて、目的とする音長が再現されない結果リズム感を損ねた再生が行われる」ことがある。これは「1秒間の割り込み周期数×60÷テンポ数」が整数、かつその値を「音符の分数÷4」で割った値が整数、という条件を満たさないことが原因で発生する。逆にこの条件を満たすテンポと分数で作られた曲は音長のズレや曲の破綻が発生しない。

例:割り込み周期が1/60秒(1分間の割り込み数3600回)のシステムにおける使用可能なテンポの例
60, 75, 80, 90, 100, 120, 150, 180, 200, 225, 240 など

[編集] 応用・テンポ数225と64分音符による音長表現法

MMLが当初「クラシック系の、とりわけ簡単なアンサンブルの譜面をPCで再生する」ことを目的とし音長の正確さや直感的な編集性を考慮せずに定義された面がある。それにより後に登場したテクノなどのグルーブ感(音長やリズムの一定性)を重視する音楽の多くはPCとMMLでは再現困難または不能という状況に至った。しかし「1/60周期で割り込むシステムの場合は、テンポ225に設定することで64分音符を割込周期1回分の長さとして扱うことが可能」となり、テンポと音長の組み合わせでは再現できなかった音長の楽曲が演奏可能となる。

例:7/60音長(x16..)に設定すると、テンポ128.571(以下略)の16分音符となる

これにより一部のテクノやハウスなどの楽曲も演奏可能になる。またこのように4の倍数以外の音長で構成される曲のテンポは非整数値となる。この手法も後に絶対音長を指定できる音源ドライバが登場して以降、使用頻度は減少する。

[編集] 脚注

  1. ^ たとえばN88-BASICの場合、Tコマンドの値を88/176/177等に固定し、YコマンドでOPNのTIMER-Bを操作してテンポを指定することにより、テンポずれを防ぐことができる。

[編集] 関連項目

[編集] 外部リンク

他の言語