aboutsummaryrefslogtreecommitdiff
path: root/lib/tests/test_meters.py
blob: 73f3db6297b43000f2b08752b2fa82aebb98d66b (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
import numpy as np
from conftest import sine, speechish

from producer import meters


def test_rms_and_peak_of_sine(sr):
    x = sine(1000, 3.0, sr, peak_dbfs=-17.0)
    assert abs(meters.rms_db(x) + 20.0) < 0.1
    assert abs(meters.sample_peak_db(x) + 17.0) < 0.05


def test_true_peak_bounds(sr):
    x = sine(1000, 3.0, sr, peak_dbfs=-17.0)
    tp = meters.true_peak_db(x, sr)
    sp = meters.sample_peak_db(x)
    assert sp - 0.01 <= tp <= sp + 0.6


def test_lufs_of_sine(sr):
    x = sine(1000, 3.0, sr, peak_dbfs=-17.0)
    assert abs(meters.lufs(x, sr) + 20.05) < 0.2


def test_lufs_silence():
    assert meters.lufs(np.zeros(48000, dtype=np.float32), 48000) == meters.SILENCE_DB


def test_noise_floor_below_speech(sr):
    x = speechish(8.0, sr, level_dbfs=-20.0)
    floor = meters.noise_floor_db(x, sr)
    assert floor < meters.rms_db(x) - 4.0


def test_all_meters_keys(sr):
    d = meters.all_meters(speechish(3.0, sr), sr)
    assert set(d) == {
        "rms_db",
        "sample_peak_db",
        "true_peak_db",
        "lufs",
        "noise_floor_db",
        "duration_s",
    }