Loading scripts/pyaudio3dtools/audioarray.py +13 −6 Original line number Diff line number Diff line Loading @@ -35,6 +35,7 @@ import warnings import math import multiprocessing as mp import platform import shutil import subprocess import tempfile from pathlib import Path Loading Loading @@ -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): Loading tests/conftest.py +13 −0 Original line number Diff line number Diff line Loading @@ -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.", Loading tests/create_short_testvectors.py +33 −9 Original line number Diff line number Diff line Loading @@ -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) Loading @@ -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)) tests/cut_pcm.py +4 −2 Original line number Diff line number Diff line Loading @@ -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 Loading tests/hrtf_binary_loading/constants.py +43 −2 Original line number Diff line number Diff line Loading @@ -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 Loading Loading @@ -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, Loading @@ -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"))], Loading Loading @@ -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 Loading
scripts/pyaudio3dtools/audioarray.py +13 −6 Original line number Diff line number Diff line Loading @@ -35,6 +35,7 @@ import warnings import math import multiprocessing as mp import platform import shutil import subprocess import tempfile from pathlib import Path Loading Loading @@ -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): Loading
tests/conftest.py +13 −0 Original line number Diff line number Diff line Loading @@ -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.", Loading
tests/create_short_testvectors.py +33 −9 Original line number Diff line number Diff line Loading @@ -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) Loading @@ -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))
tests/cut_pcm.py +4 −2 Original line number Diff line number Diff line Loading @@ -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 Loading
tests/hrtf_binary_loading/constants.py +43 −2 Original line number Diff line number Diff line Loading @@ -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 Loading Loading @@ -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, Loading @@ -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"))], Loading Loading @@ -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