Wizard Notes

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

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

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)

f:id:Kurene:20210102222559p:plain

その他

周波数重み付けフィルタの選択

meter = Meter(filter_class=...)で、K-weighting 以外のフィルタを選択することができるようです。

filter_classで指定できるフィルタは以下の通り。

  • "K-weighting"
  • "Fenton/Lee 1"
  • "Dash et al.
  • "DeMan"
  • "custom" (自分で設計)

関連記事

以下の記事では、平均ラウドネス値 (LUFS) を算出するための具体的な計算方法を解説しています。

www.wizard-notes.com