import numpy as np from conftest import speechish from producer import loudness, meters def test_rms_normalize_hits_target(sr): x = speechish(8.0, sr, level_dbfs=-40.0) y = loudness.normalize(x, sr, "rms", -20.0, -3.0) assert abs(meters.rms_db(y) + 20.0) < 0.5 assert meters.true_peak_db(y, sr) <= -2.9 def test_lufs_normalize_hits_target(sr): x = speechish(8.0, sr, level_dbfs=-35.0) y = loudness.normalize(x, sr, "lufs", -16.0, -1.5) assert abs(meters.lufs(y, sr) + 16.0) < 0.6 assert meters.true_peak_db(y, sr) <= -1.4 def test_silence_passthrough(): y = loudness.normalize(np.zeros(44100 * 2, dtype=np.float32), 44100, "rms", -20.0, -3.0) assert np.allclose(y, 0.0) def test_idempotent(sr): x = speechish(8.0, sr, level_dbfs=-35.0) y1 = loudness.normalize(x, sr, "rms", -20.0, -3.0) y2 = loudness.normalize(y1, sr, "rms", -20.0, -3.0) assert abs(meters.rms_db(y1) - meters.rms_db(y2)) < 0.6