DSP 実装解説
このページは、各 DSP が内部で何をしているかを説明します。公開名の一覧である マスタリングプロセッサ、標準規格と互換性参照を分けてまとめた アルゴリズム根拠、テスト根拠をまとめた 実装検証 を補完するページです。
UI にプロセッサを出す前、リアルタイム設定を選ぶ前、レンダリングレポートを説明するときの実装レベルの資料として使います。
正本は libsonare リポジトリの src/analysis、src/feature、src/mastering、src/effects、src/mixing、src/engine 以下の C++ 実装です。マスタリングプロセッサの公開名は src/mastering/api/named_processor_registry.cpp に登録されています。解析・特徴量ヘルパーは quick API と各バインディングラッパーから公開されます。
初めて読む場合
このページは実装寄りなので、最初から全部を理解する必要はありません。まず「DSP は音声を数値列として扱い、測る・分ける・変形する処理の総称」と捉えてください。表の「主な用途」を読み、自分が使う処理だけ詳しく見れば十分です。
たとえば BPM を知りたいだけなら 解析と特徴量 DSP を、音圧や配信用の仕上げをしたいなら マスタリングチェーン と 最終段とマキシマイザー を読む、という使い方で構いません。
このページで身につくこと
このページを読むと、次のことを判断・説明できるようになります。
- 解析、エフェクト、マスタリング、ミキシング、リアルタイム処理を支える共通 DSP 構成要素を特定できる。
- 公開プロセッサ名と、それを実現する低レベル実装部品の違いを説明できる。
- ルックアヘッド、アロケーション、FIR 再構築、スムージング、レイテンシなど、リアルタイム上注意すべき実装点を見つけられる。
- 挙動を検証したいときに、どのソースディレクトリを見るべきか判断できる。
読み進め方
| 知りたいこと | 読むページ |
|---|---|
| 公開プロセッサ ID とプリセット名 | マスタリングプロセッサ |
| DSP の内部挙動、共通構成要素、リアルタイム境界 | このページ |
| 標準規格、論文、互換性参照 | アルゴリズム根拠 |
| テスト範囲と検証状況 | 実装検証 |
根拠
このページは、名前からの印象ではなくソースに基づいて書きます。主に次の根拠を使います。
| 根拠 | 例 |
|---|---|
| レジストリ | 公開プロセッサ名は src/mastering/api/named_processor_registry.cpp |
| ヘッダーコメント | compressor.h は soft knee と makeup gain を持つ feed-forward compressor と説明している。linear_phase.h は FFT-domain response から作る linear-phase FIR equalizer と説明している |
| 設定フィールド | TruePeakLimiterConfig は lookahead_ms、release_ms、oversample_factor、apply_gain_at_input_rate を持つ。DenoiseClassicalConfig は 3つのゲイン関数(LogMMSE、MMSE-STSA、spectral subtraction)と 3つのノイズ推定器(Quantile、MCRA、IMCRA)を持つ |
| 実行時契約 | 複数のプロセッサが、リアルタイムセーフなパラメータと、バッファ再確保や FIR カーネル再構築が必要な変更を明示している |
| 実装で使うヘッダー | リペア系では declick/declip が LPC ヘルパーを使う。denoise は NoiseTracker を使う。コンボリューションリバーブとリニアフェイズ EQ はパーティション畳み込みを使う |
「主な用途」は、プロセッサ名、設定、ヘッダーコメントから読み取れる公開上の意図です。ソースから確認できない隠れたモデル挙動は断定しません。
共通の構成要素
多くのプロセッサは、まったく別の魔法を持っているわけではありません。フィルター、レベル検出、遅延、ステレオ変換、畳み込みといった小さな部品を組み合わせています。下の表は、その部品がどこで使われるかを示します。
| 構成要素 | 実装上の役割 | 主な利用箇所 |
|---|---|---|
| バイクアッドとフィルター設計 | 低レイテンシの IIR EQ、シェルフ、カット、プレゼンス/エア処理、検出器用フィルター | EQ、ダイナミクスのサイドチェイン、スペクトル系、ステレオ系 |
| エンベロープフォロワー | レベル検出とゲイン変化のアタック/リリース平滑化 | コンプレッサー、エキスパンダー、ゲート、ディエッサー、ボーカルライダー、リミッター |
| パラメータスムーザー | ブロック処理中のクリックを避けるパラメータ遷移 | マスタリングプロセッサ、ミキサーのストリップ制御、オートメーション |
| ルックアヘッドとスライディング最大値 | 先読みを使ったピーク制御 | ブリックウォールリミッター、トゥルーピークリミッター、マキシマイザー |
| オーバーサンプリングとトゥルーピークフィルター | サンプル間ピーク推定とエイリアシング対策 | リミッター、クリッパー、サチュレーション、最終出力 |
| ディレイライン | 時間合わせ、Haas 拡張、モジュレーションディレイ、ダッキングの整列 | ステレオ処理、ディレイ、モジュレーション、ミキシングのアラインメント |
| Mid/Side 変換 | 中央成分と側成分を分けて処理 | Mid/Side EQ、イメージャー、モノメーカー、ステレオバランス |
| パーティション畳み込み | 長いカーネルやインパルス応答をブロック単位で効率よく処理 | コンボリューションリバーブ、リニアフェイズ EQ、マッチ EQ |
| ノイズトラッカーと LPC ヘルパー | 古典的なノイズプロファイル追跡と LPC 残差/再構成の補助 | denoise は NoiseTracker、declick/declip は LPC ヘルパーを使う |
ビルディングブロックの平易な解説
- ルックアヘッド — オーディオを少し遅らせ、ピークが鳴る数ミリ秒前に「先読み」して、急に潰すのではなく滑らかにゲインを下げます。代償はわずかなレイテンシです。
- オーバーサンプリング&トゥルーピークフィルター — 一時的に高いサンプルレートで処理し、サンプル間ピーク(サンプルの間に現れ、DAC が実際に再構成するピーク)を捉え、非線形処理で生じる歪みが可聴帯域に折り返す(エイリアシング)のを防ぎます。
- ミッド/サイド(M/S) — ステレオ信号をミッド(モノラルの中央)とサイド(左−右の差分)に変換し、中央と広がりを別々に処理してから戻します。
- パーティション畳み込み — 畳み込みはある信号の「指紋」を別の信号に適用する処理です(部屋のインパルスレスポンスやリニアフェイズ EQ など)。長いフィルターをブロックに分割し、リアルタイムでも効率よく動かします。
- Haas ワイドニング — 片チャンネルへの非常に短いディレイ(約 40 ms 未満)で、エコーではなくステレオの広がりとして聞こえます。
- LPC(線形予測符号化) — あるサンプルを直前のサンプル群から予測するモデル。リペアでは、クリックやクリップしたピークが本来どうだったかを再構成するのに使います。
解析と特徴量 DSP
解析側、すなわち MIR(music information retrieval。テンポ、キー、コードといった音楽的な情報を音声から取り出すこと)は、1 つの巨大なアナライザーではなく、再利用できる特徴量段の組み合わせで構成されています。STFT とフレーム処理が、メル/MFCC、クロマ、オンセット包絡、テンポグラム、ピッチ追跡、セクション特徴量の基盤になります。高レベル解析は、可能な範囲でこれらの表現を共有します。
初心者向けに言い換えると、解析はだいたい次の流れです。
- 音声を短い窓に区切る。
- 各窓を周波数成分へ変換する。
- 目的別の要約を作る。リズムを見るならオンセット、ハーモニーを見るならクロマ、音色を見るならメルや MFCC を使います。
- BPM、キー、コードなどの高レベルな結果を、それらの要約から推定する。
| ファミリー | 実装上の役割 | 主な用途 |
|---|---|---|
| STFT とフレーミング | オーバーラップする窓への FFT と、共通の frame/hop 規約 | スペクトル、クロマ、オンセット、メル、MFCC の基盤 |
| メル / MFCC | メルフィルタバンクと DCT 系のケプストラム圧縮 | ML 特徴量、音色サマリー、librosa 互換ワークフロー |
| クロマ / CQT / VQT / NNLS クロマ | ピッチクラス表現と対数周波数表現 | キー、コード、ハーモニー類似度、ピッチ意識の特徴量 |
| オンセット / テンポグラム / PLP | オンセット包絡と局所周期性の表現 | BPM、ビート、リズム、パルス解析 |
| ピッチ追跡 | YIN / pYIN 系の F0 推定 | メロディ抽出と単音ピッチ解析 |
| 逆変換特徴量 | メル/MFCC の擬似逆変換と Griffin-Lim 音声合成 | デバッグ用プレビューと特徴量の往復確認 |
| ルーム音響解析 | IR の energy decay curve 指標、通常録音向けの自由減衰フィット、等価ルーム推定、鏡像音源法による RIR 合成、ルームモーフィング | RT60、EDT、C50、C80、D50、バンド別減衰、体積、寸法、吸音率、DRR、生成 RIR、信頼度 |
特徴量の逆変換、ブラインド音響推定、等価ルーム推定は有用ですが、いずれも推定です。逆変換ヘルパーは失われた位相やメル/MFCC の細部を復元できません。ブラインド音響モードとルーム推定は、通常録音に明確な自由減衰区間が含まれるとは限らないため、信頼度を返します。
マスタリングチェーン
masteringChain(...) は、構造化された設定から固定のプロセッサチェーンを組みます。同じ設定と入力からは常に同じステージ順と同じ出力が得られ、実行ごとのばらつきはありません。ここでいう「決定的」とはこの性質を指します。
ストリーミング版の StreamingMasteringChain も同じステージを同じ順で実行しますが、ブロック間で各プロセッサの状態を保持するため、ライブ処理にも使えます。
高レベルのワークフローには、オフライン前提のプロセッサも入ります。リアルタイムレンダーの可否は各プロセッサの契約に従います。バッファ再確保や FIR カーネル再構築を伴う変更は、audio thread safe ではありません。
プリセットは別の DSP アルゴリズムではありません。リペア、EQ、ダイナミクス、ステレオ処理、トゥルーピークリミッター、ラウドネス最適化を、ジャンルや配信先の既定値で組み合わせた名前付き設定です。
実用上は、マスタリングチェーンを「順番に通る処理の列」と考えると理解しやすいです。不要なノイズを直し、音色を整え、音量の暴れを抑え、左右の広がりを確認し、最後にピークとラウドネスを管理します。各段は単体でも意味がありますが、最終的な音は順番と設定の組み合わせで決まります。
ダイナミクス
| プロセッサ | 実装 | 主な用途 | リアルタイム上の注意 |
|---|---|---|---|
dynamics.brickwallLimiter | ルックアヘッドピーク検出、素早いゲインリダクション、シーリング制御 | サンプルピークを上限以下に抑える | 先読みレイテンシがある。ストリーミング前に prepare すれば扱いやすい |
dynamics.compressor | フィードフォワード検出、アタック/リリースエンベロープ、レシオ/ニーのゲイン計算、メイクアップゲイン | マスター全体のダイナミクス整理とグルー感 | パラメータ変化は平滑化してジッパーノイズを避ける |
dynamics.deesser | バンドパスフィルター、しきい値、レシオ、アタック/リリース、レンジ、bandpass Q を持つ split-band de-esser | 高域の歯擦音エネルギーを減衰 | これらのパラメータはアロケーションや状態リセットなしでオートメーション可能 |
dynamics.expander | しきい値以下をエンベロープ検出で下向きに拡張 | 小さい被りやノイズを下げてコントラストを出す | リリース時間が聴感を大きく左右する |
dynamics.gate | ヒステリシスを持つ開閉判定でゲート処理 | 無音部や背景ノイズの抑制 | ホールド/リリースでチャタリングを避ける |
dynamics.limiter | 高レシオで短い時定数のピーク向けコンプレッサー | 最終段前の短いトランジェント捕捉 | ブリックウォールより低レイテンシだが絶対的ではない |
dynamics.parallelComp | 圧縮経路とドライ経路をブレンド | トランジェントを残しながら密度を足す | ブレンド経路のレイテンシ補償が重要 |
dynamics.sidechainRouter | 外部または派生した制御信号を検出器へルーティング | サイドチェイン依存のコンプレッションやダッキング | 高度なグラフ向けの内部寄りヘルパー |
dynamics.duckingProcessor | キー信号のエンベロープでプログラム音を下げる | ナレーション時の BGM ダッキング、配信/放送系ミックス | アタック/リリース形状が明瞭度を決める |
dynamics.transientShaper | アタックとサステインのエンベロープを分けて独立ゲインを適用 | 打音を強調または柔らかくする | 高速検出経路はブロックサイズの影響を受けやすい |
dynamics.upwardCompressor | 大きい音を下げる代わりに、しきい値以下を持ち上げる | 細部と密度を増やす | ノイズフロアも上がりやすいので必要に応じてデノイズやゲートと併用する |
dynamics.upwardExpander | 低めのしきい値以上の素材を強調し、静かな部分は低いまま残す | ハードゲートより自然にアーティキュレーションを戻す | アンビエンスの多い素材に向く |
dynamics.vocalRider | 遅めのエンベロープでボーカルレベルを目標レンジへ寄せる | ボーカルやスピーチの自動レベルライド | ピークリミッターではなく、ゆるやかなゲインオートメーションとして扱う |
ダイナミクス用語: ニー・メイクアップゲイン・サイドチェイン・ダッキング
- ニー(knee) — コンプレッサーがスレッショルド付近でどれだけ急に効き始めるか。ハードニーはスレッショルドで急に潰し、ソフトニーは範囲をかけて緩やかに効き、より自然に聞こえます。
- メイクアップゲイン — コンプが大きい部分を下げると全体が小さくなるので、メイクアップゲインで同等のレベルまで持ち上げます。結果として以前より均一になります。
- サイドチェイン — プロセッサのレベル検出に別の信号を入れ、その信号に反応させる仕組みです。
- ダッキング — サイドチェインの定番用途。声(キー信号)があるときに音楽ベッドが自動的に下がり、声が止むと戻ります。
- ブリックウォールリミッター — レシオが非常に高く反応も速いリミッターで、シーリングを一切超えさせません。まるで壁にぶつかるように止めます。
EQ
| プロセッサ | 実装 | 主な用途 | リアルタイム上の注意 |
|---|---|---|---|
eq.apiStyle | 一般的なバンド定義を受ける API 向け EQ ラッパー | UI から扱いやすい安定した EQ 入口 | 実際の EQ 設計へ委譲する |
eq.bandPass | バイクアッドのバンドパスフィルター | 周波数帯域の切り出し | 低レイテンシ |
eq.cutFilter | スロープ指定できるハイパス/ローパス | ランブル、ヒス、不要帯域の除去 | 低レイテンシの IIR 経路 |
eq.dynamic | エンベロープ検出で動く EQ バンド | 特定帯域だけの圧縮/拡張 | 検出器の時定数を平滑化する |
eq.equalizer | 検証、ルーティング、スペクトラム補助を持つマルチバンド EQ エンジン | 補正 EQ と音作り | IIR 経路はライブ向き |
eq.graphic | 固定バンドのグラフィック EQ | 予測しやすい帯域で大まかな音作り | 低レイテンシ |
eq.linearPhase | FIR/リニアフェイズ系の EQ 経路 | 位相を保ったマスタリング EQ | レイテンシがあるため、オフラインまたはレイテンシ許容のストリーミング向き |
eq.midSide | L/R を M/S に変換し、それぞれへ EQ をかけて戻す | 中央とサイドの帯域を別々に整える | ステレオ入力とモノラル互換性の確認が必要 |
eq.minimumPhase | ミニマムフェイズ EQ トポロジー | 低レイテンシを重視するマスタリング EQ | ライブ経路で優先しやすい |
eq.parametric | ピーク、シェルフ、カットのパラメトリックバンド | 精密な補正 EQ | 低レイテンシ |
eq.pultec | low boost、low attenuation、high boost、high attenuation、component model、output drive を持つ passive-style program equalizer | 低域/高域のプログラム EQ | 多くのコントロールはオートメーション可能。component model はオートメーション対象外 |
eq.shelving | ロー/ハイシェルフフィルター | 指定周波数の上下を持ち上げる/下げる | 低レイテンシ |
eq.tilt | ピボット周波数を中心に低域と高域を相補的に傾ける | 明るい/暗いの大まかなトーン調整 | プリセットやアシスタント提案で使いやすい |
最終段とマキシマイザー
| プロセッサ | 実装 | 主な用途 | リアルタイム上の注意 |
|---|---|---|---|
final.bitDepth | 指定ビット深度へ量子化 | ビット深度削減のプレビューや書き出し | 通常は最後または最後付近 |
final.dither | 量子化前に低レベルノイズを加える | 量子化歪みを目立ちにくくする | 書き出し段の処理 |
final.outputChain | 出力ゲイン、シーリング、ビット深度、ディザー、最終チェックをまとめる | 書き出し直前の整理 | トーンやダイナミクス処理の後に置く |
maximizer.adaptiveRelease | 信号に応じてリミッターのリリースを変化させる | パンピングを抑えながら音圧を上げる | 検出器の状態を持つ |
maximizer.loudnessOptimize | ラウドネスを測定し、目標に向けたゲイン戦略を適用 | 配信/放送向け LUFS 目標へ合わせる | ファイル全体の最適化はオフライン処理 |
maximizer.maximizer | シーリング管理付きの音圧向けリミッティング | 知覚上の音量を上げる | 強い設定では後段のトゥルーピーク保護が重要 |
maximizer.softKneeMax | ハードな上限前にソフトニーのリミッティング曲線を使う | 急なリミッティング感を抑える | 最終トゥルーピーク保護の前段に向く |
maximizer.truePeakLimiter | オーバーサンプリングによるトゥルーピーク推定とシーリング制御 | サンプル間ピークを避ける | 計算コストと先読み系レイテンシがある |
マルチバンド
| プロセッサ | 実装 | 主な用途 | リアルタイム上の注意 |
|---|---|---|---|
multiband.compressor | クロスオーバーで帯域分割し、各帯域を圧縮して再合成 | 帯域別のダイナミクス制御 | クロスオーバー設計とレイテンシ補償が重要 |
multiband.dynamicEq | 帯域ごとにダイナミック EQ 的な挙動を適用 | 共鳴や刺さる帯域だけを動的に抑える | 検出器の平滑化が必須 |
multiband.expander | 帯域ごとにしきい値以下を拡張 | 帯域別のノイズ抑制やコントラスト調整 | やりすぎると音色バランスが変わる |
multiband.imager | 帯域ごとのステレオ幅/Mid/Side 処理 | 低域を中央に保ち、高域を広げる | 必ずモノラル互換性を確認する |
multiband.limiter | 再合成前に帯域ごとのリミッティング | 帯域別ピークの捕捉 | クロスオーバー由来の違和感を避ける |
multiband.saturation | 帯域ごとの非線形ドライブとブレンド | 周波数帯ごとに倍音の色を足す | オーバーサンプリングまたは控えめなドライブでエイリアシングを抑える |
リペア
| プロセッサ | 実装 | 主な用途 | リアルタイム上の注意 |
|---|---|---|---|
repair.declick | 孤立したインパルス状の不連続を検出し、補間または減衰 | クリックや小さなデジタル欠陥の除去 | 検出窓に局所的な前後文脈が必要 |
repair.declip | クリップした領域を推定してピークを再構成 | ハードクリップした音声の修復 | 文脈を使うためオフライン向き |
repair.decrackle | 密な小インパルスを追跡して滑らかにする | レコード的なクラックルの軽減 | 単発クリック除去より重い |
repair.dehum | ハムの基本周波数と倍音をノッチ系で抑える | 電源ハムの除去 | 周波数が分かっていれば低レイテンシ |
repair.denoiseClassical | ノイズ追跡とスペクトル減衰 | 定常的な背景ノイズの低減 | プロファイル推定は文脈依存 |
repair.dereverbClassical | t60_sec、late_delay_ms、over-subtraction、spectral floor、任意の WPE 設定を持つ STFT ドメインの残響除去設定 | 部屋鳴りやにじみの軽減 | ファイル単位 API として新しい Audio オブジェクトを返す |
repair.trimSilence | しきい値による先頭/末尾の無音除去 | 書き出しやバッチ素材の整理 | ライブインサートではなくファイル単位のユーティリティ |
サチュレーション
| プロセッサ | 実装 | 主な用途 | リアルタイム上の注意 |
|---|---|---|---|
saturation.bitcrusher | ビット深度やサンプルレートを粗くする劣化処理 | ローファイ質感 | 出力ゲインを管理する |
saturation.exciter | 高域の倍音生成とブレンド | 明るさと細部感の追加 | すぐに刺さるため控えめに使う |
saturation.hardClipper | ハードな非線形伝達曲線 | 攻撃的なピーク削りと歪み | オーバーサンプリングまたは控えめなドライブを使う |
saturation.multibandExciter | 帯域分割したエキサイターと帯域別ブレンド | 低域を濁らせずにきらびやかさを足す | クロスオーバーとドライブ配分が重要 |
saturation.softClipper | 滑らかな非線形曲線 | 穏やかなピーク丸め | マキシマイザー前段で使いやすい |
saturation.tape | トーン変化と緩いコンプレッションを伴う非線形サチュレーション | テープ的な密度 | ドライブで音量と音色が同時に変わる |
saturation.transformer | 低次倍音の色付けと軽いサチュレーション | アナログ的な厚み | マスタリングでは通常さりげなく使う |
saturation.tube | 非対称の非線形伝達で音楽的な倍音を強調 | 温かさ、ボーカルや楽器の色付け | DC と低域のふくらみに注意 |
saturation.waveshaper | 設定可能な非線形伝達曲線 | 汎用的な歪みと色付け | パラメータ平滑化でクリックを避ける |
スペクトル処理とステレオ処理
| プロセッサ | 実装 | 主な用途 | リアルタイム上の注意 |
|---|---|---|---|
spectral.airBand | 高域シェルフ/エキサイター的な強調 | プレゼンスより上のエア感を足す | 歯擦音が増える場合はディエッサーと併用する |
spectral.lowEndFocus | 低域の形とまとまりを整える | ベースを締め、濁りを減らす | モノラル互換性が重要 |
spectral.presenceEnhancer | プレゼンス帯域の整形と細部強調 | ボーカルやリードの前に出る感じを改善 | マスキングに注意し、かけすぎない |
spectral.spectralShaper | 広いスペクトル傾向の補正 | 音色の輪郭合わせや耳につく帯域の緩和 | 中庸な設定ほど透明に効く |
stereo.autoPan | LFO によるパン移動 | クリエイティブな動き | マスタリング中立というより演出向け |
stereo.haasEnhancer | 短い左右差ディレイで幅を作る | 見かけのステレオ幅を広げる | モノラル互換性を下げることがある |
stereo.imager | Mid/Side の幅ゲインと必要に応じた帯域意識の処理 | ステレオイメージを広げる/狭める | 相関値とモノラルサムを確認する |
stereo.monoMaker | クロスオーバー以下をモノラル化 | 低域を中央に安定させる | 最終リミッター前によく使う |
stereo.phaseAlign | ディレイ/極性系の整列補正 | ステレオ位相関係の改善 | 聴感または測定で慎重に確認する |
stereo.stereoBalance | L/R または M/S のバランス調整 | 左右に寄ったイメージの補正 | 低レイテンシ |
リファレンスマッチングと解析
| 名前 | 実装 | 主な用途 |
|---|---|---|
match.applyMatchEq | ソースとリファレンスのスペクトル差から得た EQ カーブを適用 | 音色バランスをリファレンスへ近づける |
match.alignReferenceToSource | ソースに対するリファレンスの遅延を推定して補正 | A/B 比較やマッチ EQ の信頼性を上げる |
match.abSwitch | ソースとリファレンス経路を切り替える | 比較試聴 |
match.abCrossfade | ソースとリファレンスをクロスフェードする | クリックなしの滑らかな比較 |
match.referenceLoudness | リファレンスのラウドネスメトリクスを測る | レベルを揃えた比較 |
match.tonalBalance | 帯域エネルギー分布を比較 | 大まかな音色比較 |
match.tonalBalanceLogBands | 対数帯域で音色バランスを比較 | 聴感に寄せたリファレンス比較 |
match.matchEqCurve | 補正 EQ カーブを推定 | マッチ EQ 設定の生成 |
match.estimateReferenceDelaySamples | サンプル単位の遅延候補を推定 | 比較前のファイル整列 |
stereo.monoCompatCheck | モノラル互換性メトリクスを計算 | 位相やキャンセルの問題を検出 |
stereo.monoCompatCheckLogBands | 対数帯域ごとのモノラル互換性を計算 | ステレオ問題のある帯域を見つける |
エフェクトと編集 DSP
| DSP | 実装 | 主な用途 | リアルタイム上の注意 |
|---|---|---|---|
| HPSS / harmonic / percussive | スペクトル表現上のメディアンフィルタで、水平成分の倍音エネルギーと垂直成分の打撃エネルギーを分離 | リミックス、前処理、解析の整理 | ファイル全体のオフライン処理向き |
| タイムストレッチ | 位相ボコーダ系の処理 | ピッチを保って長さを変える | ストリーミングではオーバーラップと状態管理が必要 |
| ピッチシフト | リサンプリングとタイムストレッチの関係を利用 | 長さを大きく変えずに移調 | ボイスチェンジ経路でない限りフォルマントは保たれない |
| ピッチ補正 | ピッチ推定とターゲット MIDI ノートへの補正 | ボーカルや単音素材のチューニング | モノフォニック素材に向く |
| ノートストレッチ | ノート区間に対するリージョンベースのストレッチ | ノートの長さ編集 | オフライン編集処理 |
| ボイスチェンジ | ピッチとフォルマントの制御 | 声質変換 | 単純なピッチシフトより重い |
| ノーマライズ | ピークまたは目標レベルへのゲイン調整 | レベル合わせ | 事前にゲインが分かる場合を除きファイル単位 |
| 無音 trim/split | しきい値によるセグメント化 | バッチ整理と素材準備 | ファイル単位のユーティリティ |
| リバーブインサート | Plate/Dattorro、FDN、velvet、convolution、幾何ベースのルーム、ルームモーフィング | ミキサー/マスタリング insert graph 内の空間、残響、ルームモーフィング | ビルドフラグと IR 要件が処理ごとに異なる |
| モジュレーション/ディレイモジュール | コーラス、フランジャー、フェイザー、ステレオディレイの DSP はソースモジュールとして存在 | クリエイティブ FX の構成要素 | 現行の公開バインディングではトップレベルの単独 JS/Python ヘルパーとしては公開されていません |
リバーブインサートの提供条件
effects.reverb.plate / effects.reverb.dattorro、effects.reverb.fdn、effects.reverb.velvet、effects.reverb.convolution には SONARE_HAVE_FX が必要です。effects.reverb.room と effects.acoustic.roomMorph には BUILD_ACOUSTIC_SIM も必要です。
アルゴリズムリバーブと幾何ベースのルームリバーブはストリーミング可能です。コンボリューションは、ネイティブ insert 作成経路で IR を渡す必要があります。
ミキシング DSP
ミキサーはルーティングであると同時に DSP です。
チャンネルストリップは、入力トリム、極性、アラインメントディレイ、パンロー、ステレオ幅、インサート処理、フェーダー、ミュート/ソロ、センド、メーターを扱います。
バスはルーティングされた信号を加算し、VCA グループは制御ゲインを適用します。メーターはピーク、RMS、LUFS 系の値、トゥルーピーク、ゲインリダクション、相関値、ゴニオメーターバッファを計算します。
オートメーションレーンはサンプル位置で管理され、linear、exponential、hold、s-curve の補間に対応します。トポロジー変更時はルーティンググラフをコンパイルします。音声処理経路では、コンパイル済みのグラフと事前確保された状態を使います。
リアルタイムエンジンとの境界
RealtimeEngine は、トランスポート、テンポ同期、グラフ実行、クリップ再生、メトロノーム、キャプチャ、モニター実行、オフラインバウンス、テレメトリを担当します。
これはマスタリングプロセッサレジストリの置き換えではありません。リアルタイムセーフな DSP ブロックを載せる、スケジューラ兼グラフランタイムです。
ファイル全体の解析、完全なリペア処理、ラウドネス最適化は、オフラインまたはレイテンシを許容する処理として扱います。
リアルタイム処理では「今この瞬間の音を、次の音が来る前に処理しきる」必要があります。
そのため、次のような処理は向きません。
- ファイル全体を見てから判断する処理
- 巨大なバッファを作り直す処理
- 長い先読みを必要とする処理
逆に、EQ、簡単なゲイン、短いディレイ、状態を持ったコンプレッサーのような処理は、事前準備を済ませればリアルタイムに載せやすいです。