オートメーションとメーター
静的なミックスが最良であることは稀で、耳だけでミックスを信用するのも十分ではありません。オートメーションはコントロールを時間とともに動かし、メーターは耳に加えて目でも結果を確認させます。本ページでは、両者を libsonare のオートメーション・メータープロセッサと対応づけて説明します。基礎は ミキシングの基礎 を参照してください。
オートメーション: 呼吸するミックス
オートメーションはコントロールの時間変化を記録します。サビでボーカルを 0.5 dB 上げる、シンセを 4 小節かけてフェードアウトする、ライザーでフィルターを開く、といった動きです。各コントロールは設定した点の間をカーブでたどり、カーブの形が雰囲気を変えます。
| カーブ | 動き |
|---|---|
| linear | 点と点を結ぶ直線ランプ |
| exponential | 対数軸上で補間するため、周波数やリニアゲインのスイープが均等に聞こえる。フェーダーレーンはもともと dB なので、自然なフェードには linear を使う(ミキシングエンジン 参照) |
| s-curve | 両端がなめらか。音楽的な遷移 |
| hold | 即座に跳び、次の点まで保持 |
オートメーションはフェーダー・パン・センド・インサートパラメータを対象にできるので、レベルだけでなくストリップ全体を動かせます。
エンジンオートメーションと型付きプロジェクトレーン
ここまでのオートメーションは エンジンレベル のものです。その AutomationTarget は、稼働中の RealtimeEngine ミックス内でフェーダー・パン・センド・インサートパラメータを指し、リアルタイムに再生されます。これとは別に、プロジェクトレベルのオートメーションレーン という永続化された構造もあります。Project.addAutomationLane(trackId, desc) はブレークポイントの集合と、任意の targetKind(ProjectAutomationTargetKind = 'opaque' | 'track-fader-db' | 'track-pan')を持つ ProjectAutomationLaneDesc を保存します。targetKind を省略すると従来どおりの 'opaque' ルートのままで、ホスト定義のパラメータ id を、ライブラリ側で意味を解釈せずに駆動します。一方、型付きレーン('track-fader-db' または 'track-pan'。C ABI の sonare_project_add_automation_lane_ex からインストールされます)は、プロジェクトのインストール時にエンジンの予約パラメータ名前空間へ解決されるため、オフラインバウンスがトラックミキサー経由で自動的に適用します。ホスト側がフェーダーやパンの生パラメータ id を把握している必要はありません。
メーター: 目も信じる
部屋の音響は聞こえ方を偏らせ、耳は疲れるので、ミックスはメーターでも判断します。
- ピーク/True Peak:最高レベル。通常のサンプルメーターは保存されたサンプルしか読みませんが、サンプル間で復元される波形はそれより高く跳ね上がることがあります。True Peakは、通常のメーターが見逃すこのサンプル間のオーバーを捉えます。
- RMS/LUFS:平均レベルと知覚ラウドネス。LUFS(Loudness Units relative to Full Scale)は、リスナーが実際に判断する聞こえの大きさに沿った単位です。
- 相関:左右が一致しているか。強い負の値は、ミックスがモノラルで弱まる警告です。
- ゴニオメーター:ステレオフィールドをドットで描く表示です。読み方は、横軸に L−R、縦軸に L+R を取る一般的な回転表示を前提とします(L と R をそのまま軸に取る表示では、以下の形がすべて 45 度回転します)。縦に細長い塊はほぼモノラルの信号、横に広く散らばる形は広いステレオ像、そして雲が横軸へ潰れる形は位相や極性の問題を警告します。雲が片側へ傾いているのは単なる左右のレベル差で、音像が中央からずれていることを示します。これはバランスの問題であって、位相の問題ではありません。
libsonare のピーク、RMS、相関値は、処理した 1 ブロック(一括ミックスではレンダリング全体)を対象にし、なめらかにする処理は入りません。VU メーターの落ち着いた針の動き(約 300 ms の積分)や、プログラムメーターのゆっくりした戻りとピークホールドは、表示側が上乗せするバリスティクスです。LUFS には 400 ms と 3 s の固定の窓がすでにあります。詳しくは メーター を参照してください。
メーターは状態を示すだけで、判断はしません。耳が見逃す問題を捉えるために使い、数値を追いかけるためには使いません。
libsonare がオートメーションとメーターをどうモデル化するか
オートメーションは AutomationLane 上に、サンプル精度の AutomationEvent としてスケジュールされます。カーブは AutomationCurve(linear/exponential/s-curve/hold)で指定します。
AutomationTarget はフェーダー・パン・センド・インサートパラメータを指し、InsertAutomationLane はインサート内部を自動化します。
メーターは MeterProcessor(MeterConfig)でピーク/True Peak/RMS/LUFS と相関を計測し、ベクトルスコープ用に GoniometerPoint の GoniometerBuffer を持ちます。これらはすべてリアルタイム安全なので、オフラインでも AudioWorklet 内でもオートメーションが再生されメーターが更新され、UI 表示用にエンジン側のテレメトリも利用できます。
True Peak メーターは、再構成フィルターの群遅延 1 つ分だけブロックより遅れて読み取ります。これによりメーターの値はブロックサイズに依存しません。そのため最後のブロックが終わった時点では、信号の末尾の数サンプルがまだ保留されています。オフラインレンダリングの最後のブロックの後に Mixer.flushMeters()(Python では flush_meters())を呼ぶと、保留分を無音に対して読み取ってスナップショットに反映します。オフラインのエンジンレンダリングとワンショットのミックスは、すべてのメーターを自動的にフラッシュします。