MML reference: Tempo

定義(Define)

        ttempo
        t_relative

引数(Inputs)

tempo

テンポです。
INT(tempo × #timebase の値 ÷ 24)が、1~255になる範囲で設定できます。たとえば、
#timebaseが48の時において、1~127の範囲で設定できます。
#timebaseが24の時において、1~255の範囲で設定できます。
#timebaseが12の時において、2~511の範囲で設定できます。

1[フレーム]が1[tick]となる #timebase と テンポ は、以下の通りです。
#timebase 12, t300
#timebase 16, t225
#timebase 24, t150
#timebase 32, t113
#timebase 48, t75

(Default: tempo = 120 ※但し、#timebase 24の時。)

relative

相対テンポです。-128~127の範囲で指定してください。
尚、演算結果におけるオーバーフローのチェックはしていません。
また、相対テンポコマンドは、#timebaseによる補正は行いません。

内容(Contents)

BGMのテンポを指定します。
指定値は、4分音符のB.P.M.で指定します。

相対テンポは、 `rit.' や `accel.' 等の表現にご利用ください。

注意(Notes)

効果音(SE)はテンポは150固定(1[tick]=VBlank割り込み周期)となり、本命令は無効です。

0を指定しないで下さい。

255を超える曲は、予め#timebaseコマンドにて四分音符の分割数を低く設定して下さい。
逆に、ゆっくりとした曲の場合は、#timebaseコマンドの値を大きくする事で、テンポの精度が良くなります。

本音源ドライバーでは、テンポはフレーム単位ではなく、BPM単位で制御しています。
具体的には、60Hz(1秒間に60回)で発生するVBlank割り込み時に、以下のプロセスを実行します。
(厳密には、実行コードを最適化しており若干異なりますが、考え方は同じです。)

  1. 内部のテンポ制御変数にtempoの値を加算
  2. 計算結果が150未満の時は、プロセスを終了する
  3. 演奏を1[tick]進める
  4. 内部のテンポ制御変数から150を減算
  5. 2に戻る

例(Sample)

    t120     /* B.P.M. = 120 */