Wizard Notes

Python, JavaScript を使った音楽信号分析の技術録、作曲活動に関する雑記

pyloudnormで学ぶ平均ラウドネス値 (LKFS/LUFS) の算出・実装方法

※ISO 532 (Zwicker method) による推定ラウドネスおよびラウドネスレベルの算出は以下の記事をご覧ください。

www.wizard-notes.com


先日、下記の記事で統合ラウドネス値(Integrated loudness) LKFS/LUFS のPython実装 pyloudnorm をご紹介しました。

pyloudnormで平均ラウドネス値 (LUFS) 算出/ラウドネス正規化 - Wizard Notes

こちらのライブラリのコードは、Rec. ITU-R BS.1770-4 に沿って実装されているため、勧告の内容・数式と具体的な算出/実装方法の勉強に役立ちます。

勉強のため、pyloudnorm](https://github.com/csteinmetz1/pyloudnorm)での計算処理の流れを日本語コメントで解説したコードを作成しましたので、具体的な算出/実装方法が気になる方はご覧ください。

LUFSの算出のための処理を整理すると、以下の4つの処理に分けることができます。 それぞれの処理の要点を以下にまとめました。

  1. K-weighting filterの適用
  2. 各チャネルのMean Squareの算出
    • 処理ブロックの時間長は 400ms
    • オーバーラップは75%, つまり100msごとに計算
  3. ゲートなしラウドネスレベル 算出
    • 全チャネルのMean Squareを集約(重み付けて総和)した値
    • チャネルごとにGで重み付けする
  4. 平均ラウドネス値 (Integrated loudness) 算出のためのゲート処理
    • 絶対値ゲート
      • ゲートなしラウドネスレベルの値が-70未満の処理は除去
      • 無音や極端に小さいブロックを除去するため
    • 相対値ゲート
      • 絶対値ゲートを通った信号の(3)を見て、(3)の平均値と比べて-10LU (dB) 低いブロックは除去

コード

pyloudnormのオリジナルのコードはこちら

参考文献