Pythonで平均ラウドネス値 (LUFS) を算出したりラウドネス正規化をすることができるモジュール pyloudnorm
を試してみました。
https://github.com/csteinmetz1/pyloudnorm
オフラインでの分析/加工を想定したような設計となっており、ラウドネスメータープラグインのようなリアルタイム(オンライン)での処理で利用するには、工夫が必要そうです。
平均ラウドネス値 (LUFS) の算出
Meter.integrated_loudness()
では、楽曲の平均ラウドネス値 (LUFS) 値 (Integrated loudness) を算出できます。
import soundfile as sf import pyloudnorm as pyln data, rate = sf.read("test.wav") meter = pyln.Meter(rate) lufs = meter.integrated_loudness(data) print(f"{lufs} LUFS")
ラウドネス正規化
import os import soundfile as sf import pyloudnorm as pyln filepath = "test.wav" data_src, rate = sf.read(filepath) meter = pyln.Meter(rate) lufs_src = meter.integrated_loudness(data_src) lufs_dst = -24.0 data_dst = pyln.normalize.loudness(data_src, lufs_src, lufs_dst) basename, ext = os.path.splitext(filepath) sf.write(f"{basename}_new{ext}", data_dst, rate)
その他
周波数重み付けフィルタの選択
meter = Meter(filter_class=...)
で、K-weighting 以外のフィルタを選択することができるようです。
filter_class
で指定できるフィルタは以下の通り。
"K-weighting"
"Fenton/Lee 1"
"Dash et al.
"DeMan"
"custom"
(自分で設計)
関連記事
以下の記事では、平均ラウドネス値 (LUFS) を算出するための具体的な計算方法を解説しています。