File: loudness_compliance_test.py

package info (click to toggle)
pytorch-audio 2.6.0-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 10,696 kB
  • sloc: python: 61,274; cpp: 10,031; sh: 128; ansic: 70; makefile: 34
file content (46 lines) | stat: -rw-r--r-- 1,507 bytes parent folder | download | duplicates (2)
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
45
46
"""Test suite for compliance with the ITU-R BS.1770-4 recommendation"""
import zipfile

import pytest

import torch
import torchaudio
import torchaudio.functional as F


# Test files linked in https://www.itu.int/dms_pub/itu-r/opb/rep/R-REP-BS.2217-2-2016-PDF-E.pdf
@pytest.mark.parametrize(
    "filename,url,expected",
    [
        (
            "1770-2_Comp_RelGateTest",
            "http://www.itu.int/dms_pub/itu-r/oth/11/02/R11020000010030ZIPM.zip",
            -10.0,
        ),
        (
            "1770-2_Comp_AbsGateTest",
            "http://www.itu.int/dms_pub/itu-r/oth/11/02/R11020000010029ZIPM.zip",
            -69.5,
        ),
        (
            "1770-2_Comp_24LKFS_500Hz_2ch",
            "http://www.itu.int/dms_pub/itu-r/oth/11/02/R11020000010018ZIPM.zip",
            -24.0,
        ),
        (
            "1770-2 Conf Mono Voice+Music-24LKFS",
            "http://www.itu.int/dms_pub/itu-r/oth/11/02/R11020000010038ZIPM.zip",
            -24.0,
        ),
    ],
)
def test_loudness(tmp_path, filename, url, expected):
    zippath = tmp_path / filename
    torch.hub.download_url_to_file(url, zippath, progress=False)
    with zipfile.ZipFile(zippath) as file:
        file.extractall(zippath.parent)

    waveform, sample_rate = torchaudio.load(zippath.with_suffix(".wav"))
    loudness = F.loudness(waveform, sample_rate)
    expected = torch.tensor(expected, dtype=loudness.dtype, device=loudness.device)
    assert torch.allclose(loudness, expected, rtol=0.01, atol=0.1)