V3MMLでは、音声バッファを -1.0 〜 +1.0 の浮動小数点数(ステレオ)で用意しています。
音声バッファにレンダリングする前の、音源モジュール段階の波形も、-1.0 〜 +1.0 の浮動小数点数(モノラル)で用意しています。
このため、レベル調整しないと、複数トラックであっという間に音割れが発生してしまいます。
レベル調整は大まかに分けて5つの段階があります。
音源モジュールの出力を音声バッファにレンダリングする際は、次の順でレベル調整を行います。
#MB:CONFIG { mixing_vol: master_rate=[], }#MB:MIXING_VOL および mvv 、エンベロープの @ea(最大で振幅が 1.0 倍に設定)vl 、音量LFOの @la(最大で振幅が 1.0 倍に設定)@p および p1 の設定をしなかった場合の初期設定は0.5倍です。2 の設定をしなかった場合の初期設定は 0dB(1.0倍)です。@p のパンポットでは注意が必要です。@p では、左の最大 および 右の最大が、中央の2倍になっています。@p 設定ごとの倍率を抜粋して表にすると、次のようになります。@p設定 |
左側の振幅倍率 | 右側の振幅倍率 |
|---|---|---|
| @p-100 | 1.0 倍 | 0.0 倍 |
| @p-50 | 0.75 倍 | 0.25 倍 |
| @p0 | 0.5 倍 | 0.5 倍 |
| @p50 | 0.25 倍 | 0.75 倍 |
| @p100 | 0.0 倍 | 1.0 倍 |
p のレガシーパンポットでは、右寄り および 左寄りが、中央より大きくはなりません。p 設定ごとの倍率を表にすると、次のようになります。p設定 |
左側の振幅倍率 | 右側の振幅倍率 |
|---|---|---|
| p-1 | 1.0 倍 | 0.0 倍 |
| p0 | 1.0 倍 | 1.0 倍 |
| p1 | 0.0 倍 | 1.0 倍 |
以上のことから、例えば次の条件では、音源モジュール出力の振幅に対し、左右双方 0.25 倍になります。
mixing_vol、mv によるミキシングボリューム関係を、何も設定しないv、@ea、vl、@la による音量設定が、最大振幅になっている@p、p によるパンポット設定が中心になっている音源モジュール出力の振幅に対し、左右双方 0.25 倍であれば、同じ波形、同じ音程、同じ位相でトラックを重ねると、4トラックまでは音割れせず、5トラック以上では音割れすることになります。
以上を踏まえて、最終的に、全トラックの音声を加算した結果が、
-1.0 〜 +1.0 の振幅に収まるように、次の設定を行う必要があります。
#MB:CONFIG { mixing_vol: master_rate=[], }#MB:MIXING_VOL および mvv、@eavl、@la@p、p意図せず音割れを起こしてしまった場合に備えて、KeyDispウィンドウには次の表示項目を設けてあります。
peakLevel(L)
peakLevel(R)
以上の表示は、演奏開始からの音声出力の最大が何%であったかを示しています。
音割れでクリッピングが発生すると、表示が「over(数値)」となり、数値のサンプル数だけクリッピングを行ったことが分かります。
音割れが発生した場合は、ミキシングボリュームを下げたり等の調整を検討してください。
音量計算は統一的に 64bit 浮動小数計算で行っています。そのため、各種音量計算による音質ロスの心配は、ほぼありません。