Commit 9d4251f7 authored by Archit Tamarapu's avatar Archit Tamarapu
Browse files

Merge branch '103-replace-masarenderer-with-ivas_rend' into 'main'

Resolve "Replace masaRenderer with IVAS_rend"

See merge request !197
parents 017ec74c b7a3b11b
Loading
Loading
Loading
Loading
+9 −3
Original line number Diff line number Diff line
@@ -283,7 +283,9 @@ class ObjectBasedAudio(Audio):
                if file_name_meta.is_file():
                    obj.metadata_files.append(file_name_meta)
                else:
                    raise ValueError(f"Metadata file {file_name_meta} not found.")
                    raise FileNotFoundError(
                        f"Metadata file {file_name_meta} not found."
                    )
            warn(
                f"No metadata files specified: The following files were found and used: \n {*obj.metadata_files,}"
            )
@@ -422,7 +424,9 @@ class OMASAAudio(Audio):
                if file_name_meta.is_file():
                    obj.metadata_files.append(file_name_meta)
                else:
                    raise ValueError(f"Metadata file {file_name_meta} not found.")
                    raise FileNotFoundError(
                        f"Metadata file {file_name_meta} not found."
                    )
            warn(
                f"No metadata files specified: The following files were found and used: \n {*obj.metadata_files,}"
            )
@@ -527,7 +531,9 @@ class OSBAAudio(Audio):
                if file_name_meta.is_file():
                    obj.metadata_files.append(file_name_meta)
                else:
                    raise ValueError(f"Metadata file {file_name_meta} not found.")
                    raise FileNotFoundError(
                        f"Metadata file {file_name_meta} not found."
                    )
            warn(
                f"No metadata files specified: The following files were found and used: \n {*obj.metadata_files,}"
            )
+24 −2
Original line number Diff line number Diff line
@@ -35,8 +35,7 @@ from typing import Optional, Union
from warnings import warn

from ivas_processing_scripts.audiotools import audio
from ivas_processing_scripts.audiotools.convert import channelbased
from ivas_processing_scripts.audiotools.wrappers.masaRenderer import masaRenderer
from ivas_processing_scripts.audiotools.wrappers.masaRenderer import ivasRendMasa

""" MetadataAssistedSpatialAudio functions """

@@ -90,6 +89,8 @@ def render_masa_to_binaural(
        Name of binaural dataset without prefix or suffix
    """

    # Needed if using masaRenderer (deprecated)
    """
    if "ROOM" in bin.name:
        cba_tmp = audio.fromtype("7_1_4")
        cba_tmp.fs = masa.fs
@@ -108,6 +109,19 @@ def render_masa_to_binaural(
            )

        bin.audio = masaRenderer(masa, "BINAURAL")
    """

    if bin_dataset is not None:
        warn(
            "Binaural dataset selection not supported by IVAS_rend - please render manually"
        )
    if bin.name == "BINAURAL_ROOM":
        warn(
            "BINAURAL_ROOM is not a valid output format for IVAS_rend. Defaulting to BINAURAL_ROOM_IR."
        )
        bin.name += "_IR"

    bin.audio = ivasRendMasa(masa, bin.name, trajectory)


def render_masa_to_cba(
@@ -125,6 +139,8 @@ def render_masa_to_cba(
        Channel-based output audio
    """

    # Needed if using masaRenderer (deprecated)
    """
    if cba.name not in ["5_1", "7_1_4"]:
        warn(
            f"MasaRenderer does not support {cba.name} natively. Using 7_1_4 as an intermediate format."
@@ -137,6 +153,8 @@ def render_masa_to_cba(
        channelbased.render_cba_to_cba(cba_tmp, cba)
    else:
        cba.audio = masaRenderer(masa, cba.name)
    """
    cba.audio = ivasRendMasa(masa, cba.name)


def render_masa_to_sba(
@@ -154,6 +172,8 @@ def render_masa_to_sba(
        SBA output audio
    """

    # Needed if using masaRenderer (deprecated)
    """
    warn(
        f"MasaRenderer does not support {sba.name} natively. Using 7_1_4 as an intermediate format."
    )
@@ -163,3 +183,5 @@ def render_masa_to_sba(
    cba_tmp.audio = masaRenderer(masa, cba_tmp.name)

    channelbased.render_cba_to_sba(cba_tmp, sba)
    """
    sba.audio = ivasRendMasa(masa, sba.name)
+2 −2
Original line number Diff line number Diff line
@@ -586,7 +586,7 @@ def metadata_search_ISM(
            if file_name_meta.is_file():
                list_item.append(Path(file_name_meta).resolve())
            else:
                raise ValueError(f"Metadata file {file_name_meta} not found.")
                raise FileNotFoundError(f"Metadata file {file_name_meta} not found.")
        if len(item_names) == 1:
            list_meta = list_item
        else:
@@ -614,7 +614,7 @@ def metadata_search_MASA(
        if file_name_meta.is_file():
            list_item.append(Path(file_name_meta).resolve())
        else:
            raise ValueError(f"Metadata file {file_name_meta} not found.")
            raise FileNotFoundError(f"Metadata file {file_name_meta} not found.")
        if len(item_names) == 1:
            list_meta = list_item
        else:
+63 −0
Original line number Diff line number Diff line
@@ -32,6 +32,7 @@

from pathlib import Path
from tempfile import TemporaryDirectory
from warnings import warn

import numpy as np

@@ -42,6 +43,65 @@ from ivas_processing_scripts.constants import DEFAULT_CONFIG_BINARIES
from ivas_processing_scripts.utils import find_binary, run


def ivasRendMasa(
    masa: audio.MetadataAssistedSpatialAudio,
    out_fmt: str,
    trajectory: Path = None,
) -> np.ndarray:
    """
    Wrapper for IVAS_Rend MASA Rendering

    Parameters
    ----------
    masa : MetadataAssistedSpatialAudio
        Input MASA audio
    out_fmt: str
        Desired output format (only 5_1, 7_1_4 and BINAURAL supported)

    Returns
    -------
    output : np.ndarray
        MASA rendered to out_fmt
    """
    # This import is needed here and not at the top of the file to avoid a circular dependency with imports!
    from ivas_processing_scripts.processing.ivas import IVAS_rend

    if "IVAS_rend" in DEFAULT_CONFIG_BINARIES["binary_paths"]:
        binary = find_binary(
            DEFAULT_CONFIG_BINARIES["binary_paths"]["IVAS_rend"].name,
            binary_path=DEFAULT_CONFIG_BINARIES["binary_paths"]["IVAS_rend"].parent,
        )
    else:
        binary = find_binary("IVAS_rend")

    rend = IVAS_rend(
        {
            "bin": binary,
            "in_fmt": masa.name,
            "in_fs": masa.fs,
            "out_fmt": out_fmt,
            "trajectory": trajectory,
            "use_windows_codec_binaries": False,
        }
    )

    with TemporaryDirectory() as tmp_dir:
        tmp_dir = Path(tmp_dir)
        tmp_in = tmp_dir.joinpath("tmp_masaRendIn.wav")
        tmp_out = tmp_dir.joinpath("tmp_masaRendOut.wav")

        write(tmp_in, masa.audio, masa.fs)

        masa_metadata_file = masa.metadata_file
        if masa_metadata_file is not None and not isinstance(masa_metadata_file, Path):
            masa_metadata_file = Path(masa_metadata_file)

        rend.process(tmp_in, tmp_out, in_meta=[masa_metadata_file])

        output, _ = read(tmp_out)
        return output


def masaRenderer(
    masa: audio.MetadataAssistedSpatialAudio,
    out_fmt: str,
@@ -61,6 +121,9 @@ def masaRenderer(
    output : np.ndarray
        MASA rendered to out_fmt
    """
    warn(
        "This function (masaRenderer) has been replaced by ivasRendMasa, please switch code to use that instead"
    )

    if "masaRenderer" in DEFAULT_CONFIG_BINARIES["binary_paths"]:
        binary = find_binary(
+2 −0
Original line number Diff line number Diff line
@@ -22,6 +22,8 @@
# eid-xor: "path/to/binary/eid-xor"
# ### Binary for error pattern generation
# gen-patt: "path/to/binary/gen-patt"
# ### Binary for IVAS Renderer
# IVAS_rend: "path/to/binary/IVAS_rend"
# ### Binary for random offset/seed generation
# random: "path/to/binary/random"
# ### Binary for JBM network similulator
Loading