Skip to content

アルゴリズム根拠

このページは、現行 libsonare のソース、テスト、README から確認できるアルゴリズム、論文、標準規格、互換性参照をまとめます。一般的な DSP 文献一覧ではなく、プロジェクト内で確認できる根拠の地図です。

このページで身につくこと

このページを読むと、次のことを判断・確認できるようになります。

  • ソースで確認済みの根拠、参照値で検証した互換性、アルゴリズムファミリー名のみの記載を区別できる。
  • ラウドネス、トゥルーピーク、デノイズ、EQ、ピッチ、室内音響、シーケンスヘルパー、リバーブ系の標準・論文・根拠を探せる。
  • このページを「すべての高レベル推定が別ライブラリと同一」という保証として読まないようにできる。
  • テスト範囲を確認したいときに 実装検証 と組み合わせて読める。

根拠の段階

段階意味
ソースで確認済み現行ソース、ヘッダーコメント、テスト、README が標準規格、アルゴリズム、著者、論文を明示している
参照値で検証主に librosa 0.11.0 の生成済み参照値に対して数値互換性を確認している
アルゴリズム名のみ確認現行ソースがアルゴリズムファミリー名を示しているが、完全な論文引用までは埋め込まれていない

ソースで確認できる根拠

下の表で使うルーム音響用語

RIR は room impulse response の略です。等価ルーム推定は、音声から実用上の部屋モデルを推定する処理で、正確な実形状の復元ではありません。ルームモーフィングは音作り向けのルーム効果であり、残響除去ではありません。

領域根拠根拠箇所
ラウドネスとトゥルーピークITU-R BS.1770-4/5、EBU R128、EBU Tech 3342 loudness rangeREADME.mdsrc/rt/biquad_design.hsrc/rt/true_peak_filter.hsrc/metering/lufs.cpptests/rt/true_peak_filter_test.cpp
K-weighting48 kHz の BS.1770 参照係数と、他サンプルレート向けの解析式設計src/rt/biquad_design.hsrc/rt/biquad_design.cpp
トゥルーピーク補間BS.1770 の目標周波数応答に合わせた 2x/4x/8x/16x polyphase FIR。規格準拠の測定には 4x 以上を使う。2x は BS.1770 の最小要件である 4x を下回る、意図的に非準拠の高速近似。src/rt/true_peak_filter.hsrc/rt/true_peak_filter.cpp
古典的デノイズEphraim-Malah MMSE-STSA (1984)、Ephraim-Malah LogMMSE (1985)、Berouti spectral subtraction with over-subtraction (1979)、MCRA、IMCRAsrc/mastering/repair/denoise_classical.h
テープヒステリシスJiles-Atherton hysteresis、Chowdhury "Real-time Physical Modelling for Analog Tape Machines", DAFx-19 2019, equations 6-10src/mastering/common/hysteresis_ja.cppsrc/mastering/saturation/tape.h
EQ フィルターRBJ biquads、Vicanek matched-Z IIR、Butterworth Q、Linkwitz-Riley crossovers with all-pass phase compensationREADME.mdsrc/rt/biquad_design.hsrc/rt/biquad_design.cpp、EQ routing / cut-filter sources
非線形処理のアンチエイリアシングADAA / antiderivative anti-aliasingREADME.mdsrc/rt/adaa.hsrc/rt/aliasing_control.h
スライディング最大値Lemire sliding maxREADME.md、リミッター/トゥルーピーク補助処理の利用箇所
TonnetzHarte et al. 2006 と librosa.feature.tonnetz の挙動src/feature/tonnetz.hsrc/feature/tonnetz.cpptests/librosa/tonnetz_test.cpp
ピッチ追跡YIN と pYIN。pYIN は確率的な複数ピッチ候補と Viterbi decoding を使うsrc/feature/pitch.htests/librosa/pitch_test.cpp
ルーム音響解析減衰指標、ブラインド減衰フィット、RIR 合成、ルーム推定、ルームモーフィングsrc/analysis/acoustic_analyzer.*src/acoustic/*src/analysis/room_estimator.*src/effects/acoustic/room_morph.*tests/acoustic/*tests/effects/room_morph_test.cpp
シーケンスヘルパーDTW、Viterbi、discriminative Viterbi、recurrence quantification analysis、librosa.sequence 互換src/util/sequence.hsrc/feature/segment.*、librosa のシーケンス参照
タイムストレッチとピッチシフトNative spectral stretch、phase-vocoder fallback、time stretch followed by resampling による pitch shiftsrc/effects/time_stretch.hsrc/effects/pitch_shift.h
リバーブ系Convolution、Dattorro plate、FDN、velvet-noise、幾何ベースのルームリバーブエンジンREADME.mdsrc/effects/reverb/*src/effects/acoustic/*tests/effects/*

Tonnetz とは?

Tonnetz(「音のネットワーク」)は、和声を幾何空間へ写像する特徴量で、音楽的に関連の深いコードどうしが近くに配置されます。クロマから導出され、和声の変化やコード間の関係を測るのに役立ちます。

名前付きアルゴリズムの平易な解説

このページはアルゴリズムを名前で引用しています。分かりにくいものを補足します。

  • Viterbi デコーディング — 各フレーム単独の最良値ではなく、最も尤もらしい状態の系列(時間方向のピッチ候補など)を選びます。これにより pYIN は滑らかなノートラインを得ます。
  • DTW(動的時間伸縮法) — 速度の異なる 2 つの系列を、時間を伸縮して対応づけます。演奏や特徴量系列の比較に使います。
  • MMSE-STSA/LogMMSE — 周波数ビンごとに信号とノイズの割合を推定してから差し引く統計的なノイズ除去(平易版は マスタリングプロセッサ を参照)。オーバーサブトラクションは残りを消すために少し多めに引く手法で、信号も多少失います。
  • スペクトル減算/MCRA/IMCRA — スペクトル減算はノイズスペクトルを推定し、各フレームから差し引きます。MCRA と IMCRA は、音声や音楽が鳴っている間もそのノイズフロアを時間方向に追従させるため、固定した推定値ではなく状況に合わせて減算が適応します。
  • Jiles-Atherton ヒステリシス — 磁気テープが直近の信号を「記憶」する様子を表す物理モデルで、テープサチュレーション特有の非線形で履歴依存の質感を与えます。
  • ADAA(反微分アンチエイリアシング) — 歪み曲線を数学的な積分に通すことで、非線形処理が生むエイリアシングを抑える手法です。
  • Schroeder エネルギー減衰曲線 — 部屋のインパルスレスポンスを時間方向に逆積分して滑らかな減衰曲線を得ます。RT60/EDT はこれを基に測定します。
  • RBJ バイカッド/Linkwitz-Riley クロスオーバー — EQ フィルターの標準的な設計法と、正しい位相特性で音声を帯域分割する方式です。

librosa 参照互換性

tests/librosa/reference/ 以下の参照値は librosa 0.11.0 で生成されています。

tests/librosa/reference/NOTICE.md には、tests/librosa/generate_librosa_reference.py により生成した参照データだと記録されています。目的は、libsonare と librosa の数値互換性を検証することです。

これは互換性の参照であり、実装コードをコピーしているという意味ではありません。

機能ファミリー参照範囲
スペクトル特徴量STFT、reassigned spectrogram、mel filterbank、mel spectrogram、MFCC、chroma、CQT/iCQT、VQT/wavelet filters、spectral centroid/bandwidth/rolloff/flatness/contrast、zero crossing、RMS
リズムとオンセットonset strength、beat、tempo、tempogram、Fourier tempogram、PLP
ピッチと調性特徴YIN、pYIN、piptrack 系ヘルパー、pitch utilities、tonnetz
分解と変換HPSS、harmonic/percussive、decompose、remix、inverse mel/MFCC helpers、Griffin-Lim 関連の synthesis tests
sequence と構造segment helpers、cross-similarity、recurrence matrix、DTW/Viterbi 系 sequence helpers
ユーティリティframe/sample/time conversion、dB conversion、pre/de-emphasis、padding、fix length/frames、peak pick、vector normalize、trim/split silence、weighting
NNLSNNLS tests は SciPy/librosa 参照データと比較し、NNLS chroma の挙動を支える

スコープの境界

ソース上のリペア処理は、古典的 DSP として位置づけられています。

つまり、DNN restoration、source separation、interactive spectral repair ではありません。

リペア経路読み方
repair.denoiseClassical, repair.declick, repair.declip, repair.decrackle, repair.dehum, repair.dereverbClassical, repair.trimSilence現在の実装では、古典的または決定的な DSP 経路です。

室内音響には、性質の違う 5 つの入口があります。

入口入力何をしているか結果の扱い
analyze_impulse_response / analyzeImpulseResponse拍手、風船破裂音、スターターピストル音、スイープ由来 IR など、部屋の反応だけが分かりやすい短い励振音の録音音が鳴った後の減衰曲線を直接測る測定値として扱いやすい
detect_acoustic / detectAcoustic通常の音楽、会話、環境録音など録音の中から「部屋の残響だけが自然に減っている区間」を探して推定する目安として扱い、confidence を必ず見る
estimate_room / estimateRoom録音またはインパルスレスポンス体積、寸法、直接音対残響音比(DRR)、吸音率バンド、RT60 バンド、信頼度を含む等価ルームを推定する正確な実寸ではなくモデルフィットとして扱う
synthesize_rir / synthesizeRirシューボックス寸法と音源/聴取位置モノラル RIR を合成する不正な形状は hasError / has_error を確認する
room_morph / roomMorph録音と目標ルーム形状元の残響尾部を少し抑えて目標ルームの響きを足す残響除去ではなく音作り効果として扱う

ここでいう decay curve(減衰曲線) は、音が止まった後にエネルギーがどれくらいの速さで小さくなるかを表す曲線です。インパルスレスポンス解析では、この曲線を直接作って RT60 や EDT を読みます。

一方、ブラインド推定では、入力が通常音声なので「今見えている減衰が本当に部屋の残響なのか」を常に判断する必要があります。楽器の余韻、声の伸ばし、コンプレッサー、背景ノイズなども減衰に見えることがあるためです。

synthesize_rir / synthesizeRir は、鏡像音源法による初期反射と、同じ設定なら同じ結果になる後期テールを使います。これは生成 RIR を比較するときには重要ですが、利用者向けには「寸法から再現性のある部屋応答を作る」と理解すれば十分です。

そのため detect_acoustic / detectAcousticestimate_room / estimateRoomconfidence を返します。明確な自由減衰区間が見つからない場合は、結果が利用不可になったり、低信頼度になったりします。

低い confidence の値は「部屋がそう響く」と断定せず、「この録音からは十分に読み取れない」と解釈してください。