Commit 81350e24 authored by Archit Tamarapu's avatar Archit Tamarapu
Browse files

Merge branch '20240807_python_fixes' into 'main'

[CI] Add LTV support for Renderer and HRTF binary tests + Python scripts fixes

See merge request !1721
parents f3dbf5db 687b967a
Loading
Loading
Loading
Loading
Loading
+13 −6
Original line number Diff line number Diff line
@@ -35,6 +35,7 @@ import warnings
import math
import multiprocessing as mp
import platform
import shutil
import subprocess
import tempfile
from pathlib import Path
@@ -356,12 +357,18 @@ def compare(
        if get_mld:
            mld_max = 0
            toolsdir = Path(__file__).parent.parent.joinpath("tools")
            if platform.system() == "Windows":
                mld = toolsdir.joinpath("Win32").joinpath("mld.exe")
            elif platform.system() in ["Linux", "Darwin"]:
                mld = toolsdir.joinpath(platform.system()).joinpath("mld")
            else:
                assert False, f"MLD tool not available for {platform.system()}"
            
            curr_platform = platform.system()
            if curr_platform not in {"Windows", "Linux", "Darwin"}:
                raise NotImplementedError(f"MLD tool not available for {curr_platform}")
            search_path = toolsdir.joinpath(curr_platform.replace("Windows", "Win32"))
            mld = search_path.joinpath("mld")

            if not mld.exists():
                mld = shutil.which("mld")
                if mld is None:
                    raise FileNotFoundError(f"MLD tool not found in {search_path} or PATH!")
                warnings.warn(f"MLD binary not found in {search_path}! Falling back to {mld}!")

            with tempfile.TemporaryDirectory() as tmpdir:
                for i in range(nchannels):
+13 −0
Original line number Diff line number Diff line
@@ -198,6 +198,19 @@ def pytest_addoption(parser):
        default=False,
    )

    parser.addoption(
        "--use_ltv",
        action="store_true",
        default=False,
    )

    parser.addoption(
        "--ltv_dir",
        action="store",
        type=Path,
        default=None,
    )

    parser.addoption(
        "--dut_fr",
        help="Render frame size for the DUT output.",
+33 −9
Original line number Diff line number Diff line
@@ -59,25 +59,48 @@ FILE_IDS = [
    "ISM",
    "MASA",
]
FILE_IDS_LTV = [
    s.format(fs)
    for s in [
        "ltv{}_STEREO",
        "ltv{}_MC51",
        "ltv{}_MC71",
        "ltv{}_MC512",
        "ltv{}_MC514",
        "ltv{}_MC714",
        "ltv{}_FOA",
        "ltv{}_HOA2",
        "ltv{}_HOA3",
        "ltv{}_1ISM",
        "ltv{}_2ISM",
        "ltv{}_3ISM",
        "ltv{}_4ISM",
        "ltv{}_MASA",
    ]
    for fs in ["16", "32", "48"]
]


def collect_files(use_ltv: bool = False, ltv_dir: Path = None):
    IDS = FILE_IDS_LTV if use_ltv else FILE_IDS
    SEARCH_DIR = ltv_dir if use_ltv and ltv_dir else TEST_VECTOR_DIR

def collect_files():
    files = [
        f.absolute()
        for f in TEST_VECTOR_DIR.iterdir()
        for f in SEARCH_DIR.iterdir()
        if f.suffix == ".wav"
        and any([id in f.name for id in FILE_IDS])
        and any([id in f.name for id in IDS])
        and "_cut" not in f.name
    ]
    return files


def create_short_testvectors(cut_len=5.0):
    files = collect_files()
def create_short_testvectors(cut_len=5.0, use_ltv: bool = False, ltv_dir: Path = None):
    files = collect_files(use_ltv, ltv_dir)

    for f in files:
        suffix = "_cut"
        out_file = f.parent.joinpath(f.stem + suffix + f.suffix)
        suffix = "" if use_ltv else "_cut"
        out_file = TEST_VECTOR_DIR.joinpath(f.stem + suffix + f.suffix)
        num_channels = audiofile.get_wav_file_info(f)["channels"]
        cut_samples(f, out_file, num_channels, CUT_FROM, f"{cut_len}", GAIN)

@@ -92,6 +115,7 @@ if __name__ == "__main__":
        return x

    parser.add_argument("--cut_len", type=positive_float, default=5.0)
    parser.add_argument("--use_ltv", action="store_true", default=False)
    parser.add_argument("--ltv_dir", type=Path)
    args = parser.parse_args()
    cut_len = args.cut_len
    sys.exit(create_short_testvectors(cut_len=cut_len))
    sys.exit(create_short_testvectors(args.cut_len, args.use_ltv, args.ltv_dir))
+4 −2
Original line number Diff line number Diff line
@@ -96,10 +96,12 @@ def cut_samples(
    num_in_samples = s.shape[0]
    num_samples_to_skip = int(start_sec * fs)
    dur_samples = int(dur_sec * fs)
    if num_samples_to_skip > dur_samples:
    if num_samples_to_skip >= num_in_samples:
        raise ValueError(
            f"Requested to skip {num_samples_to_skip}, but file only has {dur_samples} samples"
            f"Requested to skip {num_samples_to_skip}, but file only has {num_in_samples} samples"
        )
    if dur_samples > (num_in_samples - num_samples_to_skip):
        dur_samples = num_in_samples - num_samples_to_skip

    s_out = s[num_samples_to_skip : num_samples_to_skip + dur_samples, :] * gain_f

+43 −2
Original line number Diff line number Diff line
@@ -33,7 +33,12 @@
import re
from pathlib import Path

from tests.renderer.constants import OUTPUT_FORMATS_BINAURAL, SCRIPTS_DIR, TESTV_DIR
from tests.renderer.constants import (
    LTV_DIR,
    OUTPUT_FORMATS_BINAURAL,
    SCRIPTS_DIR,
    TESTV_DIR,
)

TESTS_DIR = Path(__file__).parent

@@ -93,6 +98,21 @@ FORMAT_TO_FILE_SBA_WOEXT = {
FORMAT_TO_FILE_ISM_WOEXT = "stv{}ISM{}s_cut"
FORMAT_TO_FILE_MASA_WOEXT = "stv{}MASA{}TC{}c_cut"

FORMAT_TO_FILE_MC_LTV_WOEXT = {
    "5_1": "ltv{}_MC51",
    "7_1": "ltv{}_MC71",
    "5_1_2": "ltv{}_MC512",
    "5_1_4": "ltv{}_MC514",
    "7_1_4": "ltv{}_MC714",
}
FORMAT_TO_FILE_SBA_LTV_WOEXT = {
    "1": "ltv{}_FOA",
    "2": "ltv{}_HOA2",
    "3": "ltv{}_HOA3",
}
FORMAT_TO_FILE_ISM_LTV_WOEXT = "ltv{}_{}ISM"
FORMAT_TO_FILE_MASA_LTV_WOEXT = "ltv{}_MASA{}TC"

BITRATE_ISM = {
    "1": 96000,
    "2": 160000,
@@ -101,6 +121,7 @@ BITRATE_ISM = {
}

FORMAT_TO_METADATA_FILES = {"MASA": "stv{}MASA{}TC{}c.met", "ISM": "stvISM{}.csv"}
FORMAT_TO_METADATA_FILES_LTV = {"MASA": "ltv48_MASA{}TC.met", "ISM": "ltvISM{}.csv"}

FORMAT_TO_METADATA_FILES_RENDERER = {
    "ISM1": [str(TESTV_DIR.joinpath("stvISM1.csv"))],
@@ -128,6 +149,26 @@ FORMAT_TO_METADATA_FILES_RENDERER = {
    "MASA1": [str(TESTV_DIR.joinpath("stv1MASA1TC48c.met"))],
    "MASA2": [str(TESTV_DIR.joinpath("stv2MASA2TC48c.met"))],
}
FORMAT_TO_METADATA_FILES_RENDERER_LTV = {
    "ISM1": [str(TESTV_DIR.joinpath("ltvISM1.csv"))],
    "ISM2": [
        str(TESTV_DIR.joinpath("ltvISM1.csv")),
        str(TESTV_DIR.joinpath("ltvISM2.csv")),
    ],
    "ISM3": [
        str(TESTV_DIR.joinpath("ltvISM1.csv")),
        str(TESTV_DIR.joinpath("ltvISM2.csv")),
        str(TESTV_DIR.joinpath("ltvISM3.csv")),
    ],
    "ISM4": [
        str(TESTV_DIR.joinpath("ltvISM1.csv")),
        str(TESTV_DIR.joinpath("ltvISM2.csv")),
        str(TESTV_DIR.joinpath("ltvISM3.csv")),
        str(TESTV_DIR.joinpath("ltvISM4.csv")),
    ],
    "MASA1": [str(TESTV_DIR.joinpath("ltv48_MASA1TC.met"))],
    "MASA2": [str(TESTV_DIR.joinpath("ltv48_MASA2TC.met"))],
}


HR_TRAJECTORIES_TO_TEST = ["headrot_case00_3000_q", "headrot"]
Loading