Commit a45c817c authored by Anika Treffehn's avatar Anika Treffehn
Browse files

added osba to osba conversion

parent 7b170ac9
Loading
Loading
Loading
Loading
+6 −0
Original line number Diff line number Diff line
@@ -355,6 +355,12 @@ class SceneBasedAudio(Audio):
            name = "HOA2"
        elif name == "SBA3":
            name = "HOA3"
        elif name == "PLANARSBA1":
            name = "PLANARFOA"
        elif name == "PLANARSBA2":
            name = "PLANARHOA2"
        elif name == "PLANARSBA3":
            name = "PLANARHOA3"

        super().__init__(name)
        try:
+12 −0
Original line number Diff line number Diff line
@@ -317,6 +317,18 @@ SCENE_BASED_AUDIO_FORMATS = {
        "num_channels": 16,
        "is_planar": False,
    },
    "PLANARSBA1": {
        "num_channels": 4,
        "is_planar": True,
    },
    "PLANARSBA2": {
        "num_channels": 9,
        "is_planar": True,
    },
    "PLANARSBA3": {
        "num_channels": 16,
        "is_planar": True,
    },
}

OMASA_AUDIO_FORMATS = {
+5 −4
Original line number Diff line number Diff line
@@ -360,7 +360,8 @@ def format_conversion(
        raise NotImplementedError(
            "ISM is not supported as an output for rendering! Only usable as pass-through"
        )
    if (isinstance(output, audio.OMASAAudio) and not isinstance(input, audio.OSBAAudio)) or (isinstance(output, audio.OSBAAudio) and not isinstance(input, audio.OMASAAudio)) and not input.name == output.name:
    if isinstance(output, audio.OMASAAudio) or isinstance(output, audio.OSBAAudio):
        if not (isinstance(input, audio.OMASAAudio) or isinstance(input, audio.OSBAAudio)):
            raise NotImplementedError(
                "OMASA and OSBA only possible as output if input is OMASA or OSBA"
            )
+12 −0
Original line number Diff line number Diff line
@@ -109,6 +109,18 @@ def convert_osba(

        out.audio = np.concatenate((osba.audio[:, :osba.num_ism_channels], out_sba.audio), axis=1)

    # OSBA -> OSBA
    elif isinstance(out, audio.OSBAAudio):
        # check if ism object number is the same
        if out.num_ism_channels != osba.num_ism_channels:
            raise ValueError("OSBA to OSBA conversion only possible if number of ISM objects matches")

        # only render SBA part
        out_sba = audio.fromtype(out.name[4:])
        render_sba_to_sba(sba, out_sba)

        out.audio = np.concatenate((osba.audio[:, :osba.num_ism_channels], out_sba.audio), axis=1)

    else:
        raise NotImplementedError(
            f"Conversion from {osba.name} to {out.name} is unsupported!"
+2 −2
Original line number Diff line number Diff line
@@ -360,9 +360,9 @@ class IVAS(Processing):
            return ["-mc", fmt.name]
        elif isinstance(fmt, audio.OSBAAudio):
            if fmt.is_planar:
                return ["-ism_sba", f"-{str(fmt.num_ism_channels)}", str(fmt.ambi_order)] + metadata_files
                return ["-ism_sba", str(fmt.num_ism_channels), f"-{str(fmt.ambi_order)}"] + metadata_files
            else:
                return ["-ism_sba", f"+{str(fmt.num_ism_channels)}", str(fmt.ambi_order)] + metadata_files
                return ["-ism_sba", str(fmt.num_ism_channels), f"+{str(fmt.ambi_order)}"] + metadata_files
        elif isinstance(fmt, audio.OMASAAudio):
            return ["-ism_masa", str(fmt.num_ism_channels), str(fmt.num_channels-fmt.num_ism_channels)] + metadata_files