diff --git a/.gitignore b/.gitignore index 77abd26af5ba04e7ab60551a09a8bb92b723e034..3f2d086e47f62e9957daa6d3f2ad1d08beb0bf72 100644 --- a/.gitignore +++ b/.gitignore @@ -11,9 +11,9 @@ venv/ *.bs *.192 mc.double -proc_input/*.wav -proc_input/*.pcm -proc_output/ +experiments/selection/*/proc_input/*.wav +experiments/selection/*/proc_input/*.pcm +experiments/selection/*/proc_output/ *~ tests/tmp_output_* tests/cut diff --git a/ivas_processing_scripts/audiotools/convert/scenebased.py b/ivas_processing_scripts/audiotools/convert/scenebased.py index 4ff3bc28130dd3f3cd4200011da05f102c9da4ef..de8bc0cd8bf166d097894e044cd90c7176b601a4 100755 --- a/ivas_processing_scripts/audiotools/convert/scenebased.py +++ b/ivas_processing_scripts/audiotools/convert/scenebased.py @@ -167,17 +167,20 @@ def render_sba_to_sba( """ if sba_out.ambi_order > sba_in.ambi_order: + # order increases sba_out.audio = np.pad( sba_in.audio, [[0, 0], [0, sba_out.num_channels - sba_in.num_channels]] ) elif sba_out.ambi_order < sba_in.ambi_order: + # order decreases sba_out.audio = sba_in.audio[:, : sba_out.num_channels] + else: + # order stays the same + sba_out.audio = sba_in.audio if sba_out.is_planar: - sba_out.audio = sba_in.audio + # set vertical channels to zero if output is planar zero_vert_channels(sba_out) - elif sba_in.is_planar: - sba_out.audio = sba_in.audio def rotate_sba( diff --git a/ivas_processing_scripts/audiotools/wrappers/bs1770.py b/ivas_processing_scripts/audiotools/wrappers/bs1770.py index 4587f214e6877983e4ceb7401da474e0e2bf3daf..0d9c8ff47ae86d39c857a731f2668d8ea1db671b 100755 --- a/ivas_processing_scripts/audiotools/wrappers/bs1770.py +++ b/ivas_processing_scripts/audiotools/wrappers/bs1770.py @@ -262,7 +262,7 @@ def loudness_norm( ) # repeat until convergence of loudness - while np.abs(measured_loudness - target_loudness) > 0.5 and num_iter < 10: + while np.abs(measured_loudness - target_loudness) > 0.5 and num_iter <= 10: # scale input scaled_input.audio *= scale_factor_new diff --git a/ivas_processing_scripts/audiotools/wrappers/filter.py b/ivas_processing_scripts/audiotools/wrappers/filter.py index 426a0f2c0598598943a857a105b72fdc102d55e5..8d32dc909c80108fc229ebf1cee889a58cab1779 100755 --- a/ivas_processing_scripts/audiotools/wrappers/filter.py +++ b/ivas_processing_scripts/audiotools/wrappers/filter.py @@ -31,7 +31,7 @@ # import re -from copy import copy +from copy import deepcopy from pathlib import Path from tempfile import TemporaryDirectory from typing import Optional @@ -214,7 +214,7 @@ def lpfilter_itu( # resample if samplingrate is not supported old_fs = None - tmp = copy(x) + tmp = deepcopy(x) if x.fs != 48000: warn( f"Filter type {flt_type} only supported for 48kHz samplingrate, not for {x.fs}Hz -> resampling" @@ -256,7 +256,7 @@ def hp50filter_itu( # set filter type and check if sampling rate is supported old_fs = None - tmp = copy(x) + tmp = deepcopy(x) if x.fs == 48000: flt_type = "HP50_48KHZ" elif x.fs == 32000: @@ -310,7 +310,7 @@ def kbp20filter_itu( # set filter type and check if sampling rate is supported old_fs = None - tmp = copy(x) + tmp = deepcopy(x) if x.fs == 48000: flt_type = "20KBP" else: @@ -428,7 +428,7 @@ def resample_itu( raise ValueError("Ratio of input and output sampling frequency not supported") # apply filter - y = copy(x) + y = deepcopy(x) for i, flt in enumerate(flt_type): y.audio = filter_itu(y, flt_type=flt, up=up[i], down=down[i]) y.audio = delay_compensation( diff --git a/ivas_processing_scripts/processing/chains.py b/ivas_processing_scripts/processing/chains.py index c11be9a1bc54700ee37cb9d3e6624fefcea19935..915db61a0eec290a6aaf6c6af264baedffbb321e 100755 --- a/ivas_processing_scripts/processing/chains.py +++ b/ivas_processing_scripts/processing/chains.py @@ -35,7 +35,7 @@ from warnings import warn from ivas_processing_scripts.processing.config import TestConfig from ivas_processing_scripts.processing.evs import EVS -from ivas_processing_scripts.processing.ivas import IVAS +from ivas_processing_scripts.processing.ivas import IVAS, validate_sba_fmt from ivas_processing_scripts.processing.postprocessing import Postprocessing from ivas_processing_scripts.processing.preprocessing import Preprocessing from ivas_processing_scripts.processing.preprocessing_2 import Preprocessing2 @@ -335,6 +335,7 @@ def get_processing_chain( dec_cfg = cond_cfg["dec"] if cond_cfg.get("sba_fmt"): + validate_sba_fmt(tmp_in_fmt, cond_cfg.get("sba_fmt")) chain["processes"].append( Postprocessing( { diff --git a/ivas_processing_scripts/processing/evs.py b/ivas_processing_scripts/processing/evs.py index 0653327e85ef198d583df84ecded4fe474d8a353..288b869459ff6b393622be4f336a092ce4d5314c 100755 --- a/ivas_processing_scripts/processing/evs.py +++ b/ivas_processing_scripts/processing/evs.py @@ -174,7 +174,7 @@ class EVS(Processing): condition_fmt.num_channels > self.in_fmt.num_channels ): raise ValueError( - "SBA format has to be SBA with lower or equal order than input signal" + "SBA format for EVS condition has to be SBA with lower or equal order than input signal" ) is_planar = condition_fmt.is_planar else: diff --git a/ivas_processing_scripts/processing/ivas.py b/ivas_processing_scripts/processing/ivas.py index b2cae46bf38d6ea0f720a19f3f48cae302ec117f..379db22eaa82dec810aba5332468cf24cee063e1 100755 --- a/ivas_processing_scripts/processing/ivas.py +++ b/ivas_processing_scripts/processing/ivas.py @@ -338,6 +338,22 @@ class IVAS(Processing): raise ValueError(f"IVAS: Invalid input config: {fmt.name}.") +def validate_sba_fmt(in_fmt, sba_fmt): + in_audio = audio.fromtype(in_fmt) + sba_audio = audio.fromtype(sba_fmt) + if isinstance(in_audio, audio.SceneBasedAudio): + if not isinstance(sba_audio, audio.SceneBasedAudio) or ( + sba_audio.num_channels > in_audio.num_channels + ): + raise ValueError( + "SBA format for IVAS condition has to be SBA with lower or equal order than input signal" + ) + else: + if in_audio.name != sba_audio.name: + raise ValueError("Cannot specify SBA format for non SBA input formats") + return + + class IVAS_rend(Processing): def __init__(self, attrs): super().__init__(attrs)