SHオルゴールのページに戻る 超ミニBASIC for SHオルゴールのページに戻る
世間に流通しているMMLでは音符の長さを、たとえば16分音符ならそのまま16という数値で表していたのですが、CMBMMLでは一桁の数値で表します。
全音符から32分音符までの音符のうち、よく使われるものを10種選びそれを「基本音符」と呼ぶことにします。この10種類の基本音符に1〜9、0の一桁の数字を割り当てました。
実際にMML中で使う際には、この基本音符にさらに符点を付けたり、タイで音符を繋いだりすることもできます。
基本音符 |
割り当てられた数字 |
全音符 |
1 |
2分音符 |
2 |
3分音符 |
3 |
4分音符 |
4 |
6分音符 |
5 |
8分音符 |
6 |
12分音符 |
7 |
16分音符 |
8 |
24分音符 |
9 |
32分音符 |
0 |
なぜこういう形式にしたかというと世間一般で使われているMMLは、16分音符や12分音符などは使用頻度が高いにもかかわらず音長指定が2桁になってしまい、やたらテキスト量が増えてしまうからです。それに7分音符とか11分音符などの変な音長はめったに使うことはありませんので、そういう音長も表現可能な世間一般のMMLの音長指定方式は無意味に自由度が高すぎると思います。
なお、あえて半端な音長を指定する場合、CMBMMLは「直接音長指定」という方法を使います。詳しくは音符の書き方の項を参照してください。
世間に流通しているMMLでは、同じ音をつなぐ「タイ」と違う音をつなぐ「スラー」も同じく’&’記号で表していますが、CMBMMLではタイを’&’、スラーは’_’に分離しました。タイの場合は次の音も同じ音だとわかりきっているので、音名は書かず音長のみ書きます(音名を書いてはいけません)。どちらかというと、タイは二つの音をつなぐというよりは、はじめから1つの音であり音長の表記法を拡張したという感じです。
|
同じ音をタイでつなぐ場合 |
違う音をスラーでつなぐ場合 |
従来のMML |
A4&A16 |
C4&D4 |
CMBMML |
A4&8 |
C4_D4 |
Vコマンド、Qコマンドなどのパラメータの範囲が違います
L、V、Q、O、@コマンドなどでパラメータの省略はできません
基本的に、音符・休符とコマンドに大別されます。音符・休符は、指定音長による時間経過のあるものであり、それが無いのがコマンドです。
MML中の英字は、大文字・小文字を区別しません。
MML一覧
|
先頭文字 |
パラメータ ([]は省略不可能なパラメータ、{}は省略可能なパラメータ) |
備考 |
音 |
A,B,C,D,E,F,G |
{変化記号}{音長}{スラー} |
{音長} は、基本音符、付点、タイからなる |
休 |
R |
{音長} | |
コ |
< |
なし |
|
> |
なし |
| |
@ |
[音色番号] |
範囲は0〜15 | |
L |
[音長] |
範囲は0〜9(符点、タイなどは使えない) | |
O |
[オクターブ] |
範囲は0〜9 | |
Q |
[ゲートタイム] |
範囲は1〜16 | |
V |
[音量] |
範囲は0〜255 |
音名は C,D,E,F,G,A,B のいずれかです。
変化記号は #,+,- のいずれかで、#,+ はどちらも半音上げます。- は半音下げます。
音長の指定には、基本音符方式と直接音長指定方式があります。詳しくは次項を参照してください。
スラーを付けると、その音符に限りQコマンドを無視し発音時間=音長とします。
・基本音符方式
8分音符 |
6 |
符点4分音符 |
4. |
符点4分音符と16分音符をタイでつなぐ |
4.&8 |
・直接音長指定
C%14C%14C%13C%14C%14C%13C%14 |
音符の表し方とほぼ同じですが、変化記号やスラーを付けることはできません。音長の指定は、音符同様基本音符方式、直接音長指定どちらも使えます。基本音符を省略したときLコマンドで指定した値が使われるのも同様です。
音色を指定します。パラメータは音色0〜15の音色番号です。パラメータの省略はできません。
デフォルトの基本音符を指定します。パラメータは0〜9で基本音符を指定します。Lコマンドで指定するのは「基本音符」ですので、符点やタイを付けることはできません。
音量を指定します。パラメータの範囲は0〜255で、大きいほど音量も大きくなります。パラメータの省略はできません。
ゲートタイム(音長に対する、実際に発音する時間)の割合を指定します。パラメータの範囲は1〜16で、16だと音長と同じ長さ発音することになり、8だと音長の半分の長さ発音することになります。パラメータの省略はできません。
オクターブを指定します。パラメータの範囲は0〜9で、大きいほど高いオクターブになります。パラメータの省略はできません。
なお、発振器エミュレーションの精度の問題で、あまり高すぎたり低すぎたりするオクターブではあまりきれいな音が出ません。また、O9は実際にはO8と同じ高さの音が出ます(オシレータ割り込みの周期をもっと短くすれば本当のO9が出せるのですが)
1オクターブ上げます。現在すでにO9の場合エラーになります。
1オクターブ下げます。現在すでにO0の場合エラーになります。