From e538d1472aa801898ca43604033c685d59d0a525 Mon Sep 17 00:00:00 2001 From: Treffehn Date: Mon, 8 May 2023 13:49:05 +0200 Subject: [PATCH 1/5] added argument for sba format in EVS conditions --- ivas_processing_scripts/processing/chains.py | 1 + 1 file changed, 1 insertion(+) diff --git a/ivas_processing_scripts/processing/chains.py b/ivas_processing_scripts/processing/chains.py index accf1014..1d75eb3f 100755 --- a/ivas_processing_scripts/processing/chains.py +++ b/ivas_processing_scripts/processing/chains.py @@ -300,6 +300,7 @@ def get_processing_chain( "tx": tx_cfg, "preamble": preamble, "evs_lfe_9k6bps_nb": evs_lfe_9k6bps_nb, + "sba_format": cond_cfg.get("sba_format", cfg.input["fmt"]), } ) ) -- GitLab From 0c33b9a107ec0e064f3785afcd9197438cd1aeea Mon Sep 17 00:00:00 2001 From: Treffehn Date: Mon, 8 May 2023 17:53:36 +0200 Subject: [PATCH 2/5] implemented option to use FOA for HOA in EVS conditions --- .../audiotools/audiofile.py | 17 ++++++++++++++--- ivas_processing_scripts/processing/chains.py | 1 + ivas_processing_scripts/processing/evs.py | 19 ++++++++++++++++--- tests/data/test_SBA.yml | 1 + 4 files changed, 32 insertions(+), 6 deletions(-) diff --git a/ivas_processing_scripts/audiotools/audiofile.py b/ivas_processing_scripts/audiotools/audiofile.py index 7ec54789..2d6ee25a 100755 --- a/ivas_processing_scripts/audiotools/audiofile.py +++ b/ivas_processing_scripts/audiotools/audiofile.py @@ -34,11 +34,13 @@ import logging import struct from pathlib import Path from typing import Optional, Tuple, Union +from warnings import warn import numpy as np import scipy.io.wavfile as wav from .audioarray import trim, window +from .constants import VERT_HOA_CHANNELS_ACN logger = logging.getLogger("__main__") logger.setLevel(logging.DEBUG) @@ -326,6 +328,8 @@ def split_channels( in_file: str, out_filenames: list, in_nchans: int, + out_nchans: int, + is_planar: Optional[bool] = False, in_fs: Optional[int] = 48000, ) -> None: """ @@ -339,6 +343,10 @@ def split_channels( List of output file names (.pcm, .raw or .wav) in_nchans: int Input number of channels + out_nchans: int + Number of channels to be split + is_planar: Optional[bool] + If true vertical SBA channels are set to zero in_fs: Optional[int] = 48000 Input sampling rate, default 48000 Hz @@ -350,14 +358,17 @@ def split_channels( # validation if in_nchans is None: raise ValueError("Number of channels to split must be specified!") - if in_nchans != len(out_filenames): - print( + if out_nchans != len(out_filenames): + warn( "Split: Mismatch between number of channels and output filenames length. Truncating output filenames list." ) - out_filenames = out_filenames[:in_nchans] + out_filenames = out_filenames[:out_nchans] x, in_fs = read(in_file, nchannels=in_nchans, fs=in_fs) + if is_planar: + x[:, VERT_HOA_CHANNELS_ACN[VERT_HOA_CHANNELS_ACN < in_nchans]] = 0 + # Write output files for idx, out_file in enumerate(out_filenames): # extract correct channel diff --git a/ivas_processing_scripts/processing/chains.py b/ivas_processing_scripts/processing/chains.py index 1d75eb3f..4942add1 100755 --- a/ivas_processing_scripts/processing/chains.py +++ b/ivas_processing_scripts/processing/chains.py @@ -306,6 +306,7 @@ def get_processing_chain( ) # update values to reflect decoder output tmp_in_fs = dec_cfg.get("fs", tmp_in_fs) + tmp_in_fmt = cond_cfg.get("sba_format", cfg.input["fmt"]) elif cond_cfg["type"] == "ivas": cod_cfg = cond_cfg["cod"] diff --git a/ivas_processing_scripts/processing/evs.py b/ivas_processing_scripts/processing/evs.py index 7c52eaab..2fc3617e 100755 --- a/ivas_processing_scripts/processing/evs.py +++ b/ivas_processing_scripts/processing/evs.py @@ -167,16 +167,29 @@ class EVS(Processing): if not self.out_fs: self.out_fs = self.in_fs + # consider SBA format for condition + condition_fmt = audio.fromtype(self.sba_format) + if isinstance(self.in_fmt, audio.SceneBasedAudio): + if not isinstance(condition_fmt, audio.SceneBasedAudio) or (condition_fmt.num_channels > self.in_fmt.num_channels): + raise ValueError("SBA format has to be SBA with lower order than input signal") + is_planar = condition_fmt.is_planar + else: + if self.in_fmt.name != condition_fmt.name: + raise ValueError("Cannot specify SBA format for non SBA input formats") + is_planar = False + # Split the channels to prepare for multi-mono coding split_chan_files = [ - out_file.with_suffix(f".{i}.pcm") for i in range(self.in_fmt.num_channels) + out_file.with_suffix(f".{i}.pcm") for i in range(condition_fmt.num_channels) ] split_channels( in_file, split_chan_files, - self.in_fmt.num_channels, - self.in_fs, + in_nchans=self.in_fmt.num_channels, + out_nchans=condition_fmt.num_channels, + in_fs=self.in_fs, + is_planar=is_planar, ) # run processing diff --git a/tests/data/test_SBA.yml b/tests/data/test_SBA.yml index aa20a5fd..679e57c4 100644 --- a/tests/data/test_SBA.yml +++ b/tests/data/test_SBA.yml @@ -265,6 +265,7 @@ conditions_to_generate: ### For possible arguments see overall bitstream modification type: "JBM" error_profile: 3 + sba_format: "PLANARFOA" ################################################ ### Post-processing -- GitLab From d3b0fe4fa51f114150579cc5f0a4b19b233f1c80 Mon Sep 17 00:00:00 2001 From: Treffehn Date: Tue, 9 May 2023 11:41:29 +0200 Subject: [PATCH 3/5] fixed bug --- ivas_processing_scripts/processing/chains.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ivas_processing_scripts/processing/chains.py b/ivas_processing_scripts/processing/chains.py index 4942add1..bfa80451 100755 --- a/ivas_processing_scripts/processing/chains.py +++ b/ivas_processing_scripts/processing/chains.py @@ -300,7 +300,7 @@ def get_processing_chain( "tx": tx_cfg, "preamble": preamble, "evs_lfe_9k6bps_nb": evs_lfe_9k6bps_nb, - "sba_format": cond_cfg.get("sba_format", cfg.input["fmt"]), + "sba_format": cond_cfg.get("sba_format", tmp_in_fmt), } ) ) -- GitLab From 282c793380ce631afc57644a0d41c53ec7f94397 Mon Sep 17 00:00:00 2001 From: Treffehn Date: Tue, 9 May 2023 11:57:41 +0200 Subject: [PATCH 4/5] formating --- ivas_processing_scripts/processing/evs.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/ivas_processing_scripts/processing/evs.py b/ivas_processing_scripts/processing/evs.py index 2fc3617e..907933b4 100755 --- a/ivas_processing_scripts/processing/evs.py +++ b/ivas_processing_scripts/processing/evs.py @@ -170,7 +170,9 @@ class EVS(Processing): # consider SBA format for condition condition_fmt = audio.fromtype(self.sba_format) if isinstance(self.in_fmt, audio.SceneBasedAudio): - if not isinstance(condition_fmt, audio.SceneBasedAudio) or (condition_fmt.num_channels > self.in_fmt.num_channels): + if not isinstance(condition_fmt, audio.SceneBasedAudio) or ( + condition_fmt.num_channels > self.in_fmt.num_channels + ): raise ValueError("SBA format has to be SBA with lower order than input signal") is_planar = condition_fmt.is_planar else: -- GitLab From 38d4ce646e7922c63450926b40f92a4955cb7046 Mon Sep 17 00:00:00 2001 From: Treffehn Date: Tue, 9 May 2023 12:11:13 +0200 Subject: [PATCH 5/5] formatting again --- ivas_processing_scripts/processing/evs.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/ivas_processing_scripts/processing/evs.py b/ivas_processing_scripts/processing/evs.py index 907933b4..605e61df 100755 --- a/ivas_processing_scripts/processing/evs.py +++ b/ivas_processing_scripts/processing/evs.py @@ -173,7 +173,9 @@ class EVS(Processing): if not isinstance(condition_fmt, audio.SceneBasedAudio) or ( condition_fmt.num_channels > self.in_fmt.num_channels ): - raise ValueError("SBA format has to be SBA with lower order than input signal") + raise ValueError( + "SBA format has to be SBA with lower order than input signal" + ) is_planar = condition_fmt.is_planar else: if self.in_fmt.name != condition_fmt.name: -- GitLab