Wizard Notes

音楽信号解析の技術録、音楽のレビューおよび分析、作曲活動に関する雑記です

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

この記事をシェアする

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

pyloudnormでLUFS算出/ラウドネス正規化 - Wizard Notes

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

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

f:id:Kurene:20210102121022p:plain

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のオリジナルのコードはこちら

参考文献