1最初に二つの用途を聴き分ける
ローカル再生用の純粋な強調版と、オンライン再生に耐える広帯域版では、同じ大きさでも質感が違います。ラウドネス制御は用途を壊さない位置で行う必要があります。
2Peak normalization:最大値だけでは足りない理由
ピークノーマライズはファイル中で最も高い一点を目標値へ合わせ、全体を同じ倍率で拡大縮小します。簡単ですが、弱い心拍と強い心拍の差は変わりません。
弱い部分をさらに上げるため limiter へ押し込むと、強い心拍は平らになり、小さなノイズまで目立ちます。
最大ピークに全体を合わせるため、弱い心拍は弱いままです。
各心拍の役割とヘッドルームに合わせて計算します。
3心拍単位のラウドネスが適している理由
一回ずつの心拍を独立した unit として測れば、その心拍の body、peak、役割に合わせて gain を計算できます。
ただし小さな断片を独立した心拍と誤認すると、尾部やノイズが大きな電流音のように増幅されます。
4Pipeline、marker、unit の意味
Pipeline は処理を行う順序です。Marker は onset、attack、body などの時刻情報です。Heartbeat unit は S1、S2、関連する尾部を含む一回分の処理範囲です。
JSON のラベルだけに頼らず、時間的に近く、前の心拍に従属する成分を同じ unit にまとめる必要があります。
5一度の計算で event gain を求める
現在の peak と目標 peak の比から使える gain を計算し、body の強さから必要な gain を計算します。実際に使う値は、必要量とピーク余裕の小さい方です。
この closed-form 計算なら、何度も増幅して測り直す反復処理を避けられます。
6近接した attack と分離した尾部を保護する理由
S1、S2、split tail は近い時間に現れ、一つの心拍として聞こえることがあります。別々に最大化すると、本来小さい付属音が主役と同じ大きさになります。
増幅前に依存関係を作り、従属する部分は前の主体と同じ gain を使うか、増幅対象から外します。
7純粋な強調版ではラウドネスの位置が違う
最終段で全帯域を強く持ち上げると、処理前には目立たなかった細かな高域ノイズも増えます。
そのため純粋な強調版では、心拍本体の mask と body の情報を使い、音質調整の中で必要な大きさを作り、最後の normalization へ依存しすぎない方が自然です。
