V3MMLmanual

type=table のとき(配列定義モード)

【記述例】

浮動小数点数による配列定義は次の通りです。

#MB:VOLUME_SCALE vs=1 {
   type=table, vh=15, v=15, @ea=mul, vr=0, vl=15, @la=mul, vlr=0, |
   0.00, 0.07, 0.13, 0.20, 0.27, 0.33, 0.40, 0.47,
   0.53, 0.60, 0.67, 0.73, 0.80, 0.87, 0.93, 1.00,
}
vs1 v15 c(c(c(c(c(c(c(c(c(c(c(c(c(c(c(c;

デシベルによる配列定義は次の通りです。

#MB:VOLUME_SCALE vs=2 {
   type=table, vh=15, v=15, @ea=mul, vr=2, vl=15, @la=mul, vlr=2, |
   0.0,-42dB,-39dB,-36dB,-33dB,-30dB,-27dB,-24dB,
   -21dB,-18dB,-15dB,-12dB, -9dB, -6dB, -3dB,  0dB,
}
vs2 v15 c(c(c(c(c(c(c(c(c(c(c(c(c(c(c(c;

以上の例では、v0vl0 の部分のみ、0倍(無音)となるよう、浮動小数点数で定義しています。

【解説】

フォーマットは次の通りです。

#MB:VOLUME_SCALE vs=定義番号 {
   type=table, vh=[], v=[], @ea=[], vr=[], vl=[], @la=[], vlr=[],
|
   V0_MAGNI,      //V0_MAGNIからVMAX_MAGNIまでの
   V1_MAGNI,      //音量倍率の配列個数は、
   V2_MAGNI,      //vh=[]で指定する数値+1の個数を
   :             //定義します。
   VMAX_MAGNI,
}

V0_MAGNI〜VMAX_MAGNI群の直前で、| 記号で区切ること)


vh

仮想音量ハードの音量最大値を指定します。
設定範囲は、4 〜 1024 の整数です。
vhの指定により、音量倍率値の配列定義を、vh+1個の要素で行う必要があります。
例えば、vh=15 とした場合、v0〜v15 に相当する16個の音量倍率値を配列に定義しなければなりません。


v

vコマンドで指定する最大値を指定します。
設定範囲は 4 〜 10000 の整数です。


@ea

vコマンドに対応する音量エンベロープ(@ea)の計算方法の名称を指定します。
設定できる名称は、mul または add です。

@ea=addでは、v@ea の分母を vh の分母に合わせて、@eaのカレント値(最大レベルから減った分)を v 設定値に加算します。


vr

vコマンドと、@eaエンベロープ出力を演算した結果(*a)を、vhのインデックス番号(整数)に丸めるモードを指定します。


vl

vlコマンドで指定する最大値を指定します。
設定範囲は 4 〜 10000 の整数です。


@la

vlコマンドに対応する音量LFO(@la)の計算方法の名称を指定します。
設定できる名称は、mul または add です。

@la=addでは、vl@la の分母を vh の分母に合わせて、@laのカレント値を vl 設定値に加算します。
@laのカレント値は、0以下の数値になる想定です。0の時が vl の音量そのもので、負数になる程に小さい音量になります。正数の場合は0に矯正されます)


vlr

vlコマンドと、@la音量LFO出力を演算した結果(*b)を、整数に丸めるモードを指定します。


V0_MAGNI〜VMAX_MAGNI

仮想音量ハードの、インデックス 0〜最大値 で使用する倍率値を指定します。
V0_MAGNI から VMAX_MAGNI までの定義個数は次の通りです。

指定可能な倍率値の範囲は、0〜1の浮動小数点数です。 特別な表記方法として、数値の末尾につける単位には、次のものがあります。


v/mul/vr0〜3: (@ea:0.0〜+1.0)

v-mul-vr0:
   音声振幅 * (mix_master*mv) * vhArray[ round( vhDenom * (vNum/vDenom) * @ea ) ]
v-mul-vr1:
   音声振幅 * (mix_master*mv) * vhArray[ ceil( vhDenom * (vNum/vDenom) * @ea ) ]
v-mul-vr2:
   v = floor( vhDenom * ((vNum+1)/vDenom) * @ea )
   if (v > vNum) { v = vNum; }
   音声振幅 * (mix_master*mv) * vhArray[v]
v-mul-vr3:
   音声振幅 * (mix_master*mv) * vhArray[ floor( vhDenom * (vNum/vDenom) * @ea ) ]

v/add/vr0〜3: (@ea:0.0〜+1.0)

v-add-vr0:
   音声振幅 * (mix_master*mv)
   * vhArray[ round( vhDenom + (((vNum/vDenom)*vhDenom)-vhDenom) + (@ea*vhDenom-vhDenom) ) ]
v-add-vr1:
   音声振幅 * (mix_master*mv)
   * vhArray[ ceil( vhDenom + (((vNum/vDenom)*vhDenom)-vhDenom) + (@ea*vhDenom-vhDenom) ) ]
v-add-vr2:
   v = floor( vhDenom + (((vNum+1)/vDenom)*vhDenom - vhDenom) + (@ea*vhDenom - vhDenom) )
   if (v > vNum) { v = vNum; }
   音声振幅 * (mix_master*mv) * vhArray[ v ]
v-add-vr3:
   音声振幅 * (mix_master*mv)
   * vhArray[ floor( vhDenom + (((vNum/vDenom)*vhDenom)-vhDenom) + (@ea*vhDenom-vhDenom) ) ]

vl/mul/vr0〜3: (@la:0.0~-1.0(sin/saw/tri))

vl-mul-vr0:
   * vhArray[ round( vhDenom*(vlNum/vlDenom) * (1+(@la*depth/vhDenom)) ) ]
vl-mul-vr1:
   * vhArray[ ceil( vhDenom*(vlNum/vlDenom) * (1+(@la*depth/vhDenom)) ) ]
vl-mul-vr2:
   v = floor( vhDenom*((vlNum+1)/vlDenom) * (1+(@la*depth/vhDenom)) )
   if (v > vlNum) { v = vlNum; }
   * vhArray[ v ]
vl-mul-vr3:
   * vhArray[ floor( vhDenom*(vlNum/vlDenom) * (1+(@la*depth/vhDenom)) ) ]

vl/add/vr0〜3: (@la:0.0~-1.0(sin/saw/tri))

vl-add-vr0:
   * vhArray[
      round(
         vhDenom +
         (vhDenom*(vlNum/vlDenom)-vhDenom) +
         ((1+(@la*depth/vhDenom))*vhDenom-vhDenom)
      )
   ]
vl-add-vr1:
   * vhArray[
      ceil(
         vhDenom +
         (vhDenom*(vlNum/vlDenom)-vhDenom) +
         ((1+(@la*depth/vhDenom))*vhDenom-vhDenom)
      )
   ]
vl-add-vr2:
   v = floor(
      vhDenom +
      (((vlNum+1)/vlDenom)*vhDenom - vhDenom) +
      ((1+(@la*depth/vhDenom))*vhDenom - vhDenom)
   )
   if (v > vlNum) { v = vlNum; }
   * vhArray[ v ]
vl-add-vr3:
   * vhArray[
      floor(
         vhDenom +
         (vhDenom*(vlNum/vlDenom)-vhDenom) +
         ((1+(@la*depth/vhDenom))*vhDenom-vhDenom)
      )
   ]