発音コントロール
発音コントロールは、発音コマンドの後に記述して、その音符の音量を変えたりビブラートをかけたりと、発音中に変化をつける目的で使用します。使用可能なのはコントロールチェンジのX、P、M、Vですが、Vは基本的に使いません。

第1引数に値、第2引数に発音開始からどのくらいの位置でその値にするか、を100分率で指定します。判りにくいと思うので、例をあげて説明していくことにしましょう。
例えば、だんだん音量を上げていくには、

A1*2
X50,10
X60,20
X70,30
: (省略)
X120,80

のようにします。これの意味は、Aを1*2音符分発音する時、10%発音したところでX50、20%発音したところでX60、… 80%発音したところでX120となります。このように変化をかけるポイントごとにコマンドを記述すると大変なので、SMMLではパック記述法というものを用います。上の例では10%→80%へかけて、X50→120になっているので、

A1*2
X50:120,10:80,8

このように記述すると上のようにポイントごとの値を自動計算し、複数のコマンド列に内部展開します。第3引数の意味は何個のコマンド列に分解するか、ということを表しています。発音中に一度音量が上がってしばらくしたら音量が下がっていくという風に変化をつける区間が2点以上の場合はどうすれば良いでしょうか?例えば、 (X20,0%)→(X120,30%)→(X60,80%) のような場合です。これもパック記述法を用いて同じ容量で記述することができます。

A1*4
X20:120:60,0:30:80,10:20

第3引数は最初の音量が上がってく区間で10このXコマンド、音量が下がってく区間で20個のコマンドに内部展開されることを意味します。2種類以上のコントロールチェンジを同時に指定することもできます。

A1*4
X100:60,0:100,30
M20,40
M0

上の意味は(X100,0%)→(X60,100%)、(M20、40%)とする。という意味です。最後のM0は第2引数がないので普通の設定コマンドです。ですので、以降発音される音符にモジュレーションをかけないことを意味します。