ダイナミックレンジ
ダイナミックレンジは、音声の小さい部分と大きい部分の差です。音楽では、演奏、アレンジ、感情の起伏そのものでもあります。
マスタリングでは、再生環境をまたいで聴きやすくするためにダイナミックレンジを少し抑えることがあります。ただし抑えすぎると、音は大きくても聴き疲れしやすく、こぢんまりとして生気のないマスターになります。
下のデモに出る LRA(ラウドネスレンジ)は、これを数値にした読み値です。クリップ全体でラウドネスがどれだけ動くかを測るので、平坦にしたマスターほど小さくなります。メーターの横の曲線はその動きを時間軸で見たものです。クレストファクターと相関値は別の読み値で、ここには表示されません。
どの数値がダイナミックレンジか
libsonare には、どこかで「ダイナミックレンジ」と呼ばれる読み値が 3 つあります。答える問いがそれぞれ違うので、別の読み値を期待して呼ぶと違う数値が返ります。
| 読み値 | 測るもの | 呼び出し |
|---|---|---|
| LRA(ラウドネスレンジ) | 短時間ラウドネスの 10〜95 パーセンタイルの幅。小さい音や無音のブロックはゲートで除外。単位は LU | lufs().loudnessRange |
| 窓 RMS レンジ | ゲートなしの 3 秒 RMS 窓に、同じパーセンタイルを適用した幅。単位は dB | meteringDynamicRange |
| クレストファクター | バッファ全体のピークと平均レベルの差 | meteringCrestFactorDb |
マクロダイナミクス(後述)は上の 2 行、ミクロダイナミクスはクレストファクターに対応します。最初の 2 つはゲートの有無で差が出ます。サイン波を 10 秒、続けて 20 dB 小さい同じサイン波を 10 秒鳴らすと、どちらの読み値も 20 になります。ここにピーク -66 dBFS の 10 秒を足すと、2 つの値が分かれます。
| 信号 | LRA | 窓 RMS レンジ |
|---|---|---|
| 大きい音のあとに 20 dB 小さい音 | 20.0 LU | 20.0 dB |
| 同じ信号に -66 dBFS の末尾を追加 | 20.1 LU | 60.0 dB |
LRA は、ほぼ無音の末尾が相対ゲートを下回るため無視します。ゲートなしの窓レンジはその末尾も数えます。番組全体がどう動くかを表すなら LRA、静かな区間もすべて数えたいなら窓 RMS レンジを使います。
大きな起伏と短い動き
ダイナミクスは、次の 2 つに分けて考えると判断しやすくなります。
| 種類 | 意味 | 例 |
|---|---|---|
| マクロダイナミクス | セクション間の音量変化。 | A メロよりサビが大きい。 |
| ミクロダイナミクス | 1 音の中の短い動き。 | ドラムのアタック、声の子音、ギターのピック感。 |
マクロダイナミクスを残しながらミクロピークを制御することもできますし、両方を平坦にしてしまうこともあります。正解はジャンルと狙いで変わります。
マスタリングで重要な理由
配信プラットフォームでは、音量が大きいだけのマスターが有利になるわけではありません。再生ターゲットを大きく超えたマスターは単に下げられることがあり、その場合は同じ再生ラウドネスで比べると、動きを残したマスターよりパンチが弱く聞こえます。
ダイナミックレンジは再生環境にも関わります。動きが大きすぎるマスターは騒がしい環境で埋もれやすく、平坦すぎるマスターはヘッドホンで攻撃的に感じやすくなります。
判断方法
ダイナミックレンジを 1 つのメーターだけで判断しないでください。重要な動きが残っているかを聴き分けます。
- サビに入った瞬間の持ち上がりが残っているか。
- ドラムのアタックが残っているか。
- ボーカルが安定しつつ、押さえ込まれていないか。
- 低域が制御されつつ、グルーヴが死んでいないか。
比較時は必ずラウドネスマッチを使います。そうしないと、密度の高い版が単に大きいだけで良く聞こえてしまいます。
ありがちな失敗
処理後にサビの持ち上がりが小さくなった、キックが丸くなった、ボーカルの子音だけが前に飛び出した、静かな箇所の空気感が消えた。こうした変化は、ダイナミックレンジを削りすぎている印です。LUFS(フルスケール基準のラウドネス単位)が上がっただけで改善と判断せず、ラウドネスマッチした A/B で楽曲のうねりが残っているかを確認します。
逆に動きを残しすぎると、小型スピーカーやノイズの多い環境で聴こえにくくなります。マスタリングの狙いは「動きを消すこと」ではなく、意図した動きが過不足なく伝わるレンジに整えることです。
libsonare で測る
import { init, lufs, meteringDynamicRange, meteringCrestFactorDb } from '@libraz/libsonare';
await init();
const { loudnessRange } = lufs(samples, sampleRate); // LRA(LU)
const { dynamicRangeDb } = meteringDynamicRange(samples, sampleRate); // 窓 RMS レンジ(dB)
const crest = meteringCrestFactorDb(samples, sampleRate); // ピーク - RMS(dB)
// 窓の長さ、ホップ、パーセンタイルはオプションです。省略すると 3 秒、1 秒、0.10、0.95 になります。
const wide = meteringDynamicRange(samples, sampleRate, { windowSec: 1, hopSec: 0.5 });import libsonare as sonare
audio = sonare.Audio.from_file("song.wav")
loudness_range = audio.lufs().loudness_range
report = sonare.metering_dynamic_range(audio.data, audio.sample_rate)
window_rms_range = report.dynamic_range_db
crest = audio.crest_factor_db()sonare lufs song.wav # ラウドネスレンジ(LRA)を含む
sonare dynamic-range song.wav # ネイティブ CLI のみ: 窓 RMS レンジ(--window-sec、--hop-sec、--low-percentile、--high-percentile)
sonare meter song.wav # ネイティブ CLI のみ: クレストファクターを含むlibsonare デモでは、Quick タブの Dynamics マクロと Studio タブのコンプレッサーコントロールでダイナミクスを調整します。メーターパネルにはクレスト情報も表示され、ピークと平均の関係をひと目で確認できます。主要なコンプレッサーコントロールは ダイナミクスコントロール にまとめています。
実装メモ
デモのメーターに表示されるクレストは、ピークと RMS から求める軽量な目安値です。体感上のダイナミックレンジを完全に表すものではありません。
最終的なダイナミクス判断は、コンプレッサーのゲインリダクション量、リミッターが動く頻度、LUFS、True Peak、そして実音 A/B を組み合わせて行います。ラウドネスマッチをかけずに比較すると、ただ密度が上がっただけの処理を改善と取り違えやすいので注意してください。
関連: クレストファクター、ラウドネスマッチング、LUFS