V3MMLmanual

5.2 t[1]:テンポ

← 目次

【記述例】

t100 cdefg;

上記では、通常のテンポ指定(BPM=100)を行っています。


t3600/28 cdefg;

上記では、除算表記によるテンポ指定(BPM=128.5714…)を行っています。
この計算に辿り着く流れは次の通りです。


l4 t120 cde t#-20 def t#-20 efg t#+40 c1;

上記では、だんだんゆっくりにするテンポ指定(1)を行っています。

t120 で開始しているので、
t#-20 def は、この場合 t100 で演奏、
t#-20 efg は、この場合 t80 で演奏、
t#+40 c1 は、この場合 t120 で演奏されます。


l4 t120 cde t#*0.5 def t#*0.5 efg t#*4 c1;

上記では、だんだんゆっくりにするテンポ指定(2)を行っています。

t120 で開始しているので、
t#*0.5 def は、この場合 t60 で演奏、
t#*0.5 efg は、この場合 t30 で演奏、
t#*4 c1 は、この場合 t120 で演奏されます。


【解説】

テンポを設定します。
引数[1]には、1分間のビート数(BPM)を指定します。小数以下の指定も受け付けます。

トラック先頭における初期設定は「t120」、1ビートは4分音符です。

1ビートの音長設定は、次の設定(beat_length)に従います。

#MB:CONFIG {
   tempo_unit: note_ticks=[]: beat_length=[],
}

また、前回テンポ設定値に対する相対指定を行いたい場合は、数式解釈機能における「#」コマンドを利用します。
ただし、この相対指定における「前回」とは同一トラック内での指定値を指します。MMLコンパイラの都合、他のトラックにおける過去指定を認識できないので、利用シーンは同一トラック内で徐々にゆっくりさせる指定を行う場合などです。

【備考1】

テンポコマンドでは、同時点の全てのトラックに対し影響します。
テンポ同期の内部手順は次の通りです。

以上です。
同時点かどうかの管理には、再生開始からの累積tickカウント数を使用しています。

【備考2】

テンポの精度は、内部におけるtickカウント数あたりの再生サンプル数(整数)をいくつとするかの計算に依存しています。(再生サンプリング周波数が上がるとテンポ精度も上がります)

【備考3】

複数トラックで、同時点に、指定値の違うテンポコマンドを記述した場合、後のトラックに記述したテンポコマンドが使われます。
内部的に、同時点のテンポコマンドは、先に定義されたトラックのものから順に各トラックに配信されるため、結果的に最後のトラックに記述したテンポコマンドが有効になります。

【備考4】

トラックごとにテンポの同期を厳守しようとする設計思想になっています。この設計は、無限リピートの仕様にも影響しています。