diff --git a/ivas_processing_scripts/audiotools/audio.py b/ivas_processing_scripts/audiotools/audio.py index 3df2de94632843c6a09080904f41dffd3c49dfd3..292a061bfbd396e68f862d167bee00080a735454 100755 --- a/ivas_processing_scripts/audiotools/audio.py +++ b/ivas_processing_scripts/audiotools/audio.py @@ -36,7 +36,6 @@ from typing import Optional, Union from warnings import warn import numpy as np - from ivas_processing_scripts.audiotools.audiofile import read from ivas_processing_scripts.audiotools.constants import ( BINAURAL_AUDIO_FORMATS, diff --git a/ivas_processing_scripts/audiotools/binaural_datasets/binaural_dataset.py b/ivas_processing_scripts/audiotools/binaural_datasets/binaural_dataset.py index cf8b03b8aadf115b58f26d9d0a999c1b5b6eae12..d92709f511f498a3d8b84aa6f64a7fc80303d126 100755 --- a/ivas_processing_scripts/audiotools/binaural_datasets/binaural_dataset.py +++ b/ivas_processing_scripts/audiotools/binaural_datasets/binaural_dataset.py @@ -35,8 +35,6 @@ from typing import Optional, Tuple, Union from warnings import warn import numpy as np -from scipy.io import loadmat - from ivas_processing_scripts.audiotools.audio import fromtype from ivas_processing_scripts.audiotools.constants import ( CHANNEL_BASED_AUDIO_FORMATS, @@ -44,6 +42,7 @@ from ivas_processing_scripts.audiotools.constants import ( SCENE_BASED_AUDIO_FORMATS, ) from ivas_processing_scripts.audiotools.EFAP import wrap_angles +from scipy.io import loadmat def load_hrtf( diff --git a/ivas_processing_scripts/audiotools/binauralobjectrenderer.py b/ivas_processing_scripts/audiotools/binauralobjectrenderer.py index f9488427fffdca88a3256dcc43d637424e6911b6..276e36a387bae1873c32252ef2fa24f2b22fa7a8 100755 --- a/ivas_processing_scripts/audiotools/binauralobjectrenderer.py +++ b/ivas_processing_scripts/audiotools/binauralobjectrenderer.py @@ -35,14 +35,13 @@ from itertools import repeat from typing import Optional, Tuple import numpy as np -from scipy.signal import convolve - from ivas_processing_scripts.audiotools.binaural_datasets.binaural_dataset import ( find_ir, ) from ivas_processing_scripts.audiotools.constants import IVAS_FRAME_LEN_MS from ivas_processing_scripts.audiotools.EFAP import wrap_angles from ivas_processing_scripts.utils import apply_func_parallel +from scipy.signal import convolve def barycentric_weights( @@ -338,7 +337,7 @@ def interpolate_2d( W_1 + W_2 + W_3 > 1.5 ): # on sphere sum of weights is not necessarily equal to one! raise ValueError( - f"Sum of positive barycentric weights larger than expected: {W_1 +W_2 +W_3}" + f"Sum of positive barycentric weights larger than expected: {W_1 + W_2 + W_3}" ) threshold_error = -1 * 10**-10 diff --git a/ivas_processing_scripts/audiotools/convert/__init__.py b/ivas_processing_scripts/audiotools/convert/__init__.py index c24394d61f8848f55765886791bcd322c3d48658..7a7235ce2dc5bc256116a79b41d0560f81f5a307 100755 --- a/ivas_processing_scripts/audiotools/convert/__init__.py +++ b/ivas_processing_scripts/audiotools/convert/__init__.py @@ -326,13 +326,13 @@ def process_audio( if mask is not None: if logger: logger.debug("Applying mask filter using ITU STL filter") - x.audio = maskfilter_itu(x, mask) + x.audio = maskfilter_itu(x, mask, logger=logger) """resampling""" if x.fs != fs: if logger: logger.debug(f"Resampling from {x.fs} to {fs} using ITU STL filter") - x.audio = resample_itu(x, fs) + x.audio = resample_itu(x, fs, logger=logger) x.fs = fs """low-pass filtering""" @@ -342,7 +342,7 @@ def process_audio( logger.debug( f"Applying low-pass filter with cutoff {fc}Hz using ITU STL filter" ) - x.audio = lpfilter_itu(x, fc) + x.audio = lpfilter_itu(x, fc, logger=logger) except NotImplementedError: warn( f"Low-pass filter cutoff {fc}Hz not supported by ITU filter. Falling back to python implementation." @@ -357,13 +357,13 @@ def process_audio( if mnru_q is not None: if logger: logger.debug("Applying P.50 Fullband MNRU") - x.audio = p50fbmnru(x, mnru_q) + x.audio = p50fbmnru(x, mnru_q, logger=logger) """ESDRU""" if esdru_alpha is not None: if logger: logger.debug("Applying ESDRU Recommendation ITU-T P.811") - x.audio = esdru(x, esdru_alpha) + x.audio = esdru(x, esdru_alpha, logger=logger) """Spatial distortion""" if ( diff --git a/ivas_processing_scripts/audiotools/convert/channelbased.py b/ivas_processing_scripts/audiotools/convert/channelbased.py index 8e14b4a819f71e21ed48887575933b5e91bf1714..b4e4730ce5c03e4a1b4c40488cd548b2e8628539 100755 --- a/ivas_processing_scripts/audiotools/convert/channelbased.py +++ b/ivas_processing_scripts/audiotools/convert/channelbased.py @@ -34,7 +34,6 @@ from pathlib import Path from typing import Optional, Tuple, Union import numpy as np - from ivas_processing_scripts.audiotools import audio from ivas_processing_scripts.audiotools.audioarray import delay, framewise_io from ivas_processing_scripts.audiotools.binaural_datasets.binaural_dataset import ( diff --git a/ivas_processing_scripts/audiotools/convert/objectbased.py b/ivas_processing_scripts/audiotools/convert/objectbased.py index 1607c87bd86d032b21a319e055d9e771aa7ccc64..e61566c6c13ed67c99b88dca1b74ec4a0225d0e6 100755 --- a/ivas_processing_scripts/audiotools/convert/objectbased.py +++ b/ivas_processing_scripts/audiotools/convert/objectbased.py @@ -35,7 +35,6 @@ from pathlib import Path from typing import Optional, Tuple, Union import numpy as np - from ivas_processing_scripts.audiotools import audio from ivas_processing_scripts.audiotools.audioarray import delay, framewise_io from ivas_processing_scripts.audiotools.binaural_datasets.binaural_dataset import ( diff --git a/ivas_processing_scripts/audiotools/convert/omasa.py b/ivas_processing_scripts/audiotools/convert/omasa.py index 35f2782fdeada8af9910f225e74c8a5ae4d905ed..9df3782959bc140b0daf8c508f5ac543de12e113 100644 --- a/ivas_processing_scripts/audiotools/convert/omasa.py +++ b/ivas_processing_scripts/audiotools/convert/omasa.py @@ -32,7 +32,6 @@ from copy import copy, deepcopy import numpy as np - from ivas_processing_scripts.audiotools import audio from ivas_processing_scripts.audiotools.convert.masa import ( render_masa_to_binaural, diff --git a/ivas_processing_scripts/audiotools/convert/osba.py b/ivas_processing_scripts/audiotools/convert/osba.py index 76cead88dba02cde6c360930495b1980f39cd300..f97329b3c94dac616f07d6f79b39c9658a131729 100644 --- a/ivas_processing_scripts/audiotools/convert/osba.py +++ b/ivas_processing_scripts/audiotools/convert/osba.py @@ -32,7 +32,6 @@ from copy import copy, deepcopy import numpy as np - from ivas_processing_scripts.audiotools import audio from ivas_processing_scripts.audiotools.convert.objectbased import ( render_oba_to_binaural, diff --git a/ivas_processing_scripts/audiotools/convert/scenebased.py b/ivas_processing_scripts/audiotools/convert/scenebased.py index 1749a987e85300767b057fb236086ab35d152992..1967dc3209a4dfc3a0cb6169d5be90d1b6f54ad8 100755 --- a/ivas_processing_scripts/audiotools/convert/scenebased.py +++ b/ivas_processing_scripts/audiotools/convert/scenebased.py @@ -35,8 +35,6 @@ from typing import Optional, Union from warnings import warn import numpy as np -from scipy.special import factorial, lpmv - from ivas_processing_scripts.audiotools import audio from ivas_processing_scripts.audiotools.audioarray import delay, framewise_io from ivas_processing_scripts.audiotools.binaural_datasets.binaural_dataset import ( @@ -54,6 +52,7 @@ from ivas_processing_scripts.audiotools.EFAP import EFAP from ivas_processing_scripts.audiotools.rotation import Quat2RotMat, SHrotmatgen from ivas_processing_scripts.audiotools.wrappers.filter import resample_itu from ivas_processing_scripts.audiotools.wrappers.masaAnalyzer import masaAnalyzer +from scipy.special import factorial, lpmv """ SceneBasedAudio functions """ diff --git a/ivas_processing_scripts/audiotools/metadata.py b/ivas_processing_scripts/audiotools/metadata.py index 9fd202d16ca16e0c8a2ab352c3fe17887e4c14a7..021400c74175b967bf726ebe48a8ee0afcbda15e 100755 --- a/ivas_processing_scripts/audiotools/metadata.py +++ b/ivas_processing_scripts/audiotools/metadata.py @@ -38,7 +38,6 @@ from tempfile import TemporaryDirectory from typing import Optional, TextIO, Tuple, Union import numpy as np - from ivas_processing_scripts.audiotools import audio from ivas_processing_scripts.audiotools.audio import fromtype from ivas_processing_scripts.audiotools.audioarray import trim @@ -721,7 +720,7 @@ def add_masa_metadata_preamble_repeat( num_tc = masa.num_channels - getattr(masa, "num_ism_channels", 0) - masaAnalyzer(sba, num_tc, masa.dirs, tmp_meta) + masaAnalyzer(sba, num_tc, masa.dirs, tmp_meta, logger=logger) if logger: logger.debug(f"Preamble Metadata size {tmp_meta.stat().st_size}") diff --git a/ivas_processing_scripts/audiotools/utils.py b/ivas_processing_scripts/audiotools/utils.py index c8c5e94f5e56858ffd021f1bf3e7d6c0294821e8..b5c0c093f919a2eb724fe8311b66e2b2a4bccd39 100755 --- a/ivas_processing_scripts/audiotools/utils.py +++ b/ivas_processing_scripts/audiotools/utils.py @@ -34,7 +34,6 @@ from pathlib import Path from typing import Union import numpy as np - from ivas_processing_scripts.audiotools.rotation import Euler2Quat, Quat2Euler from ivas_processing_scripts.utils import get_abs_path diff --git a/ivas_processing_scripts/audiotools/wrappers/bs1770.py b/ivas_processing_scripts/audiotools/wrappers/bs1770.py index 818adaadd3870bb108b94291db20da54e0580911..f282158f0dfc82313f16c173590e75cc205b11e2 100755 --- a/ivas_processing_scripts/audiotools/wrappers/bs1770.py +++ b/ivas_processing_scripts/audiotools/wrappers/bs1770.py @@ -39,7 +39,6 @@ from typing import Optional, Tuple, Union from warnings import warn import numpy as np - from ivas_processing_scripts.audiotools import audio, convert from ivas_processing_scripts.audiotools.audiofile import write from ivas_processing_scripts.audiotools.wrappers.filter import resample_itu @@ -51,6 +50,7 @@ def bs1770demo( input: audio.Audio, target_loudness: Optional[float] = -26, rms: Optional[bool] = False, + logger: Optional[logging.Logger] = None, ) -> Tuple[float, float]: """ Wrapper for ITU-R BS.1770-4, requires bs1770demo binary @@ -98,7 +98,7 @@ def bs1770demo( warn( "ITU-R BS.1770-4 only supports 48kHz sampling rate. Temporarily resampling signal for measurement." ) - tmp_sig = resample_itu(input, 48000) + tmp_sig = resample_itu(input, 48000, logger=logger) else: tmp_sig = input.audio @@ -143,7 +143,7 @@ def bs1770demo( cmd.insert(1, "-rms") # run command - result = run(cmd) + result = run(cmd, logger=logger) # parse output # we are looking for the (floating-point) number after the search string - '( )' around the number denotes the first group @@ -162,6 +162,7 @@ def get_loudness( target_loudness: Optional[float] = -26, loudness_format: Optional[str] = None, rms: Optional[bool] = False, + logger: Optional[logging.Logger] = None, ) -> Tuple[float, float, str]: """ Loudness measurement using ITU-R BS.1770-4 @@ -214,7 +215,9 @@ def get_loudness( convert.format_conversion(input, tmp) else: tmp.audio = input.audio - measured_loudness, scale_factor = bs1770demo(tmp, target_loudness, rms) + measured_loudness, scale_factor = bs1770demo( + tmp, target_loudness, rms, logger=logger + ) return measured_loudness, scale_factor, loudness_format @@ -261,7 +264,7 @@ def loudness_norm( # save loudness before and after scaling for the logger info loudness_before, scale_factor_new, loundness_fmt_used = get_loudness( - scaled_input, target_loudness, loudness_format, rms + scaled_input, target_loudness, loudness_format, rms, logger=logger ) # repeat until convergence of loudness @@ -272,7 +275,7 @@ def loudness_norm( # measure loudness and get scaling factor measured_loudness, scale_factor_new, _ = get_loudness( - scaled_input, target_loudness, loudness_format, rms + scaled_input, target_loudness, loudness_format, rms, logger=logger ) num_iter += 1 diff --git a/ivas_processing_scripts/audiotools/wrappers/dlyerr_2_errpat.py b/ivas_processing_scripts/audiotools/wrappers/dlyerr_2_errpat.py index fe8e133c76ef92cef363a92643962ba5b376b640..624cd28c78b63ac74fb704c1e4b59185dee3026d 100644 --- a/ivas_processing_scripts/audiotools/wrappers/dlyerr_2_errpat.py +++ b/ivas_processing_scripts/audiotools/wrappers/dlyerr_2_errpat.py @@ -30,6 +30,7 @@ # the United Nations Convention on Contracts on the International Sales of Goods. # +import logging from pathlib import Path from typing import Optional, Union from warnings import warn @@ -56,6 +57,7 @@ def dlyerr_2_errpat( flag_word: Optional[bool] = None, flag_lf: Optional[bool] = None, delay: Optional[int] = None, + logger: Optional[logging.Logger] = None, ) -> None: """ Wrapper for dlyerr_2_errpat binary to convert delay and error profiles to frame error patterns for EVS JBM @@ -133,7 +135,7 @@ def dlyerr_2_errpat( cmd.extend(["-d", str(delay)]) # run command - run(cmd) + run(cmd, logger=logger) return @@ -148,6 +150,7 @@ def evs_jbm( errpatt_seed, errpatt_frames_packet, master_seed, + logger: Optional[logging.Logger] = None, ): # convert delay and error profile delay = None @@ -167,7 +170,9 @@ def evs_jbm( dlyerr_pattern = error_pattern # compute offset of error pattern len_pattern = length_pattern(dlyerr_pattern) - shift = random_seed((0, len_pattern - 1), master_seed, errpatt_seed) + shift = random_seed( + (0, len_pattern - 1), master_seed, errpatt_seed, logger=logger + ) elif error_profile is not None: # if error profile number is given @@ -202,7 +207,9 @@ def evs_jbm( # compute offset of error pattern len_pattern = length_pattern(dlyerr_pattern) - shift = random_seed((0, len_pattern - 1), master_seed, error_profile, False) + shift = random_seed( + (0, len_pattern - 1), master_seed, error_profile, False, logger=logger + ) fer_pattern = Path(bitstream).with_suffix(".evs_jbm_fer.192") @@ -215,10 +222,11 @@ def evs_jbm( shift=shift, late_loss_rate=late_loss_rate, length=length, + logger=logger, ) # apply FER pattern with eid-xor - eid_xor(fer_pattern, bitstream, bitstream_processed) + eid_xor(fer_pattern, bitstream, bitstream_processed, logger=logger) def validate_evs_jbm( diff --git a/ivas_processing_scripts/audiotools/wrappers/eid_xor.py b/ivas_processing_scripts/audiotools/wrappers/eid_xor.py index 6040c7e871dd0aaded6535cd7ced73e983c7f3b0..95b053d522e54b28a9ce96f0ff987cdde9d64a71 100644 --- a/ivas_processing_scripts/audiotools/wrappers/eid_xor.py +++ b/ivas_processing_scripts/audiotools/wrappers/eid_xor.py @@ -30,6 +30,7 @@ # the United Nations Convention on Contracts on the International Sales of Goods. # +import logging import os.path from pathlib import Path from typing import Optional, Union @@ -43,6 +44,7 @@ def eid_xor( error_pattern: Union[str, Path], in_bitstream: Union[str, Path], out_bitstream: Union[str, Path], + logger: Optional[logging.Logger] = None, ) -> None: """ Wrapper for eid-xor binary to apply error patterns for the bitstream processing @@ -87,7 +89,7 @@ def eid_xor( ] # run command - run(cmd) + run(cmd, logger=logger) return @@ -101,6 +103,7 @@ def create_and_apply_error_pattern( preamble: Optional[int] = 0, master_seed: Optional[int] = 0, prerun_seed: Optional[int] = 0, + logger: Optional[logging.Logger] = None, ) -> None: """ Function to create (or use existing) frame error pattern for bitstream processing @@ -132,7 +135,13 @@ def create_and_apply_error_pattern( ".192" ) create_error_pattern( - len_sig, error_pattern, error_rate, preamble, master_seed, prerun_seed + len_sig, + error_pattern, + error_rate, + preamble, + master_seed, + prerun_seed, + logger=logger, ) else: raise ValueError( @@ -144,7 +153,7 @@ def create_and_apply_error_pattern( ) # apply error pattern - eid_xor(error_pattern, in_bitstream, out_bitstream) + eid_xor(error_pattern, in_bitstream, out_bitstream, logger=logger) return diff --git a/ivas_processing_scripts/audiotools/wrappers/esdru.py b/ivas_processing_scripts/audiotools/wrappers/esdru.py index 64a7636f57bf47f86a656df041fc3afe9f81bc8a..6396991577de7027b0e39d87fb6d76175540bfc5 100755 --- a/ivas_processing_scripts/audiotools/wrappers/esdru.py +++ b/ivas_processing_scripts/audiotools/wrappers/esdru.py @@ -30,13 +30,13 @@ # the United Nations Convention on Contracts on the International Sales of Goods. # +import logging from copy import deepcopy from pathlib import Path from tempfile import TemporaryDirectory from typing import Optional import numpy as np - from ivas_processing_scripts.audiotools import audio from ivas_processing_scripts.audiotools.audiofile import read, write from ivas_processing_scripts.constants import DEFAULT_CONFIG_BINARIES @@ -49,6 +49,7 @@ def esdru( sf: Optional[int] = 48000, e_step: Optional[float] = 0.5, seed: Optional[int] = 1, + logger: Optional[logging.Logger] = None, ) -> np.ndarray: """ Wrapper for ESDRU (Ericsson spatial distortion reference unit) Recommendation ITU-T P.811, requires esdru binary @@ -122,7 +123,7 @@ def esdru( write(tmp_input_file, tmp_input_signal, sf) # run command - run(cmd, cwd=tmp_dir) + run(cmd, cwd=tmp_dir, logger=logger) tmp_output_signal, out_fs = read(tmp_output_file, 2, sf) diff --git a/ivas_processing_scripts/audiotools/wrappers/filter.py b/ivas_processing_scripts/audiotools/wrappers/filter.py index 0a6528ef2e605957d581c97659e86083b2f858b5..bd71b104207a5c30138bb3ee81cd3bb01fac5f39 100755 --- a/ivas_processing_scripts/audiotools/wrappers/filter.py +++ b/ivas_processing_scripts/audiotools/wrappers/filter.py @@ -30,6 +30,7 @@ # the United Nations Convention on Contracts on the International Sales of Goods. # +import logging import re from copy import deepcopy from itertools import repeat @@ -39,7 +40,6 @@ from typing import Optional from warnings import warn import numpy as np - from ivas_processing_scripts.audiotools.audio import Audio, ChannelBasedAudio from ivas_processing_scripts.audiotools.audioarray import delay_compensation, pad_delay from ivas_processing_scripts.audiotools.audiofile import read, write @@ -56,6 +56,7 @@ def run_filter( chan: int, skip_channel: list[int], block_size: Optional[int] = None, + logger: Optional[logging.Logger] = None, ): if chan in skip_channel: return audio @@ -72,7 +73,7 @@ def run_filter( cmd.append(str(block_size)) write(tmp_in, audio, fs) - run(cmd) + run(cmd, logger=logger) out, _ = read(tmp_out, nchannels=1, fs=fs) return out @@ -87,6 +88,7 @@ def filter_itu( is_async: Optional[bool] = False, delay: Optional[int] = None, skip_channel: Optional[list[int]] = None, + logger: Optional[logging.Logger] = None, ) -> np.ndarray: """ Low-pass filter a multi-channel audio array @@ -197,7 +199,7 @@ def filter_itu( repeat(skip_channel), repeat(block_size), ), - None, + repeat({"logger": logger}), "mp", show_progress=False, ) @@ -211,6 +213,7 @@ def filter_itu( def lpfilter_itu( x: Audio, fc: int, + logger: Optional[logging.Logger] = None, ) -> np.ndarray: """ Low-pass filter a multi-channel audio array @@ -246,14 +249,14 @@ def lpfilter_itu( f"Filter type {flt_type} only supported for 48kHz samplingrate, not for {x.fs}Hz -> resampling" ) old_fs = x.fs - tmp.audio = resample_itu(tmp, 48000) + tmp.audio = resample_itu(tmp, 48000, logger=logger) tmp.fs = 48000 # pad to avoid loosing samples due to delay tmp.audio = pad_delay(tmp.audio, flt_type=flt_type, fs=tmp.fs) # apply filter - y = filter_itu(tmp, flt_type=flt_type, block_size=960) + y = filter_itu(tmp, flt_type=flt_type, block_size=960, logger=logger) # delay compensation y = delay_compensation(y, flt_type=flt_type) @@ -261,13 +264,14 @@ def lpfilter_itu( # reverse resampling if old_fs: tmp.audio = y - y = resample_itu(tmp, old_fs) + y = resample_itu(tmp, old_fs, logger=logger) return y def hp50filter_itu( x: Audio, + logger: Optional[logging.Logger] = None, ) -> np.ndarray: """ High-pass 50Hz filter a multi-channel audio array @@ -297,7 +301,7 @@ def hp50filter_itu( ) flt_type = "HP50_48KHZ" old_fs = x.fs - tmp.audio = resample_itu(tmp, 48000) + tmp.audio = resample_itu(tmp, 48000, logger=logger) tmp.fs = 48000 # don't apply high-pass filtering to LFE channel @@ -310,7 +314,7 @@ def hp50filter_itu( tmp.audio = pad_delay(tmp.audio, flt_type=flt_type, fs=tmp.fs) # apply filter - y = filter_itu(tmp, flt_type=flt_type, skip_channel=skip_channel) + y = filter_itu(tmp, flt_type=flt_type, skip_channel=skip_channel, logger=logger) # delay compensation y = delay_compensation(y, flt_type=flt_type) @@ -318,13 +322,14 @@ def hp50filter_itu( # reverse resampling if old_fs: tmp.audio = y - y = resample_itu(tmp, old_fs) + y = resample_itu(tmp, old_fs, logger=logger) return y def kbp20filter_itu( x: Audio, + logger: Optional[logging.Logger] = None, ) -> np.ndarray: """ 20Hz to 20kHz bandpass filter for multi-channel audio array @@ -352,7 +357,7 @@ def kbp20filter_itu( ) flt_type = "20KBP" old_fs = x.fs - tmp.audio = resample_itu(tmp, 48000) + tmp.audio = resample_itu(tmp, 48000, logger=logger) tmp.fs = 48000 # don't apply band-pass filtering to LFE channel @@ -365,7 +370,7 @@ def kbp20filter_itu( tmp.audio = pad_delay(tmp.audio, flt_type=flt_type, fs=tmp.fs) # apply filter - y = filter_itu(tmp, flt_type=flt_type, skip_channel=skip_channel) + y = filter_itu(tmp, flt_type=flt_type, skip_channel=skip_channel, logger=logger) # delay compensation y = delay_compensation(y, flt_type=flt_type) @@ -373,7 +378,7 @@ def kbp20filter_itu( # reverse resampling if old_fs: tmp.audio = y - y = resample_itu(tmp, old_fs) + y = resample_itu(tmp, old_fs, logger=logger) return y @@ -381,6 +386,7 @@ def kbp20filter_itu( def maskfilter_itu( x: Audio, mask: str, + logger: Optional[logging.Logger] = None, ) -> np.ndarray: """ Mask filter for multi-channel audio array @@ -399,9 +405,9 @@ def maskfilter_itu( """ if mask == "HP50": - y = hp50filter_itu(x) + y = hp50filter_itu(x, logger=logger) elif mask == "20KBP": - y = kbp20filter_itu(x) + y = kbp20filter_itu(x, logger=logger) else: raise ValueError("Invalid mask filter defined") @@ -411,6 +417,7 @@ def maskfilter_itu( def resample_itu( x: Audio, fs_new: int, + logger: Optional[logging.Logger] = None, ) -> np.ndarray: """ Resampling of multi-channel audio array @@ -471,7 +478,7 @@ def resample_itu( ) # resampling - y.audio = filter_itu(y, flt_type=flt, up=up[i], down=down[i]) + y.audio = filter_itu(y, flt_type=flt, up=up[i], down=down[i], logger=logger) # delay compensation y.audio = delay_compensation(y.audio, flt_type=flt, up=up[i], down=down[i]) diff --git a/ivas_processing_scripts/audiotools/wrappers/gen_patt.py b/ivas_processing_scripts/audiotools/wrappers/gen_patt.py index 6766567f7fbf669b443fa6fe15809f01e3128b75..34e9ad212b66ca9218a832c7c9f526e31bcde7f5 100644 --- a/ivas_processing_scripts/audiotools/wrappers/gen_patt.py +++ b/ivas_processing_scripts/audiotools/wrappers/gen_patt.py @@ -30,6 +30,7 @@ # the United Nations Convention on Contracts on the International Sales of Goods. # +import logging from os import getcwd from pathlib import Path from tempfile import TemporaryDirectory @@ -48,6 +49,7 @@ def gen_patt( error_rate: float, start: Optional[int] = 0, working_dir: Optional[Union[Path, str]] = None, + logger: Optional[logging.Logger] = None, ) -> None: """ Wrapper for gen-patt binary to create error patterns for the bitstream processing @@ -99,7 +101,7 @@ def gen_patt( ] # run command - run(cmd, cwd=working_dir) + run(cmd, cwd=working_dir, logger=logger) return @@ -111,6 +113,7 @@ def create_error_pattern( preamble: Optional[int] = 0, master_seed: Optional[int] = 0, prerun_seed: Optional[int] = 0, + logger: Optional[logging.Logger] = None, ) -> None: """ Creates error pattern with desired frame error rate for bitstream processing @@ -148,22 +151,22 @@ def create_error_pattern( tmp_sta_file = tmp_dir.joinpath("sta") # compute seed - seed = random_seed((0, 99999999), master_seed, prerun_seed) + seed = random_seed((0, 99999999), master_seed, prerun_seed, logger=logger) # open file and modify lines = [] with open(sta_file, "r") as sta_file_txt: lines.append(sta_file_txt.readline()) # not changed - lines.append(f"{sta_file_txt.readline()[:-2]}{frame_error_rate/100}\n") + lines.append(f"{sta_file_txt.readline()[:-2]}{frame_error_rate / 100}\n") lines.append(sta_file_txt.readline()) # not changed lines.append(f"{sta_file_txt.readline()[:-2]}{seed}\n") lines.append(sta_file_txt.readline()) # not changed lines.append( - f"{sta_file_txt.readline()[:-2]}{1-(frame_error_rate/100*2)}\n" + f"{sta_file_txt.readline()[:-2]}{1 - (frame_error_rate / 100 * 2)}\n" ) lines.append(sta_file_txt.readline()) # not changed lines.append( - f"{sta_file_txt.readline()[:-2]}{1-(frame_error_rate/100*2)}\n" + f"{sta_file_txt.readline()[:-2]}{1 - (frame_error_rate / 100 * 2)}\n" ) lines.append(sta_file_txt.readline()) # not changed @@ -176,6 +179,7 @@ def create_error_pattern( path_pattern=path_pattern, start=preamble, working_dir=tmp_dir, + logger=logger, ) return diff --git a/ivas_processing_scripts/audiotools/wrappers/masaAnalyzer.py b/ivas_processing_scripts/audiotools/wrappers/masaAnalyzer.py index 65f2048ecfbcf87309f23940e92d2c285addc845..26310bc1c76d7fae5f44e554265e95a3b388fc24 100644 --- a/ivas_processing_scripts/audiotools/wrappers/masaAnalyzer.py +++ b/ivas_processing_scripts/audiotools/wrappers/masaAnalyzer.py @@ -29,6 +29,7 @@ # accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and # the United Nations Convention on Contracts on the International Sales of Goods. # +import logging from pathlib import Path from tempfile import TemporaryDirectory from typing import Optional @@ -45,6 +46,7 @@ def masaAnalyzer( num_tcs: int, num_dirs: int, metadata_out_filename: Optional[Path] = None, + logger: Optional[logging.Logger] = None, ) -> audio.MetadataAssistedSpatialAudio: """ Wrapper for masaAnalyzer (from MASA reference software) @@ -111,11 +113,11 @@ def masaAnalyzer( cmd[5] = str(tmp_out_pcm) cmd[6] = str(metadata_out_filename.resolve()) - tmp_audio = resample_itu(sba, 48000) + tmp_audio = resample_itu(sba, 48000, logger=logger) write(tmp_in, tmp_audio, 48000) # we need to run in the masaAnalyzer directory to use the .bin files it requires - run(cmd, cwd=binary.resolve().parent) + run(cmd, cwd=binary.resolve().parent, logger=logger) fmt = f"MASA{num_tcs}DIR{num_dirs}" masa = audio.fromfile(fmt, tmp_out_pcm, 48000, metadata_out_filename) diff --git a/ivas_processing_scripts/audiotools/wrappers/masaRenderer.py b/ivas_processing_scripts/audiotools/wrappers/masaRenderer.py index 7e52d66466e1b53900e19babf06be973c0213796..198db6f4c73cc53618ae1a2755486554a415da48 100755 --- a/ivas_processing_scripts/audiotools/wrappers/masaRenderer.py +++ b/ivas_processing_scripts/audiotools/wrappers/masaRenderer.py @@ -30,12 +30,13 @@ # the United Nations Convention on Contracts on the International Sales of Goods. # +import logging from pathlib import Path from tempfile import TemporaryDirectory +from typing import Optional from warnings import warn import numpy as np - from ivas_processing_scripts.audiotools import audio from ivas_processing_scripts.audiotools.audiofile import read, write from ivas_processing_scripts.audiotools.wrappers.filter import resample_itu @@ -47,6 +48,7 @@ def ivasRendMasa( masa: audio.MetadataAssistedSpatialAudio, out_fmt: str, trajectory: Path = None, + logger: Optional[logging.Logger] = None, ) -> np.ndarray: """ Wrapper for IVAS_Rend MASA Rendering @@ -98,7 +100,7 @@ def ivasRendMasa( 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]) + rend.process(tmp_in, tmp_out, in_meta=[masa_metadata_file], logger=logger) output, _ = read(tmp_out) return output @@ -107,6 +109,7 @@ def ivasRendMasa( def masaRenderer( masa: audio.MetadataAssistedSpatialAudio, out_fmt: str, + logger: Optional[logging.Logger] = None, ) -> np.ndarray: """ Wrapper for masaRenderer (from MASA reference software) @@ -169,19 +172,19 @@ def masaRenderer( cmd[2] = str(tmp_in) cmd[4] = str(tmp_out) - tmp_audio = resample_itu(masa, 48000) + tmp_audio = resample_itu(masa, 48000, logger=logger) old_fs = masa.fs write(tmp_in, tmp_audio, 48000) # we need to run in the masaRenderer directory to use the .bin files it requires - run(cmd, cwd=binary.resolve().parent) + run(cmd, cwd=binary.resolve().parent, logger=logger) output, _ = read(tmp_out, num_channels) output_audio = audio.fromtype(out_fmt) output_audio.audio = output output_audio.fs = 48000 - output = resample_itu(output_audio, old_fs) + output = resample_itu(output_audio, old_fs, logger=logger) return output diff --git a/ivas_processing_scripts/audiotools/wrappers/networkSimulator.py b/ivas_processing_scripts/audiotools/wrappers/networkSimulator.py index 83556a92e20c58bacbe6c30d0276c01231bc311c..08dda1afe27924c1bb58399bdc25d1901ffcc2bd 100644 --- a/ivas_processing_scripts/audiotools/wrappers/networkSimulator.py +++ b/ivas_processing_scripts/audiotools/wrappers/networkSimulator.py @@ -222,9 +222,13 @@ def apply_network_simulator( # compute offset of error pattern len_pattern = length_pattern(error_pattern) if error_profile: - offset = random_seed((0, len_pattern - 1), master_seed, error_profile, False) + offset = random_seed( + (0, len_pattern - 1), master_seed, error_profile, False, logger=logger + ) else: - offset = random_seed((0, len_pattern - 1), master_seed, errpatt_seed, False) + offset = random_seed( + (0, len_pattern - 1), master_seed, errpatt_seed, False, logger=logger + ) # apply error pattern network_simulator( diff --git a/ivas_processing_scripts/audiotools/wrappers/p50fbmnru.py b/ivas_processing_scripts/audiotools/wrappers/p50fbmnru.py index 922536be0b8c87b553a15526d552edf08454ba6c..e59d6818a2daef0f4b9d0171fe20a52d7761a41f 100755 --- a/ivas_processing_scripts/audiotools/wrappers/p50fbmnru.py +++ b/ivas_processing_scripts/audiotools/wrappers/p50fbmnru.py @@ -30,13 +30,14 @@ # the United Nations Convention on Contracts on the International Sales of Goods. # +import logging from copy import deepcopy from pathlib import Path from tempfile import TemporaryDirectory +from typing import Optional from warnings import warn import numpy as np - from ivas_processing_scripts.audiotools import audio from ivas_processing_scripts.audiotools.audiofile import read, write from ivas_processing_scripts.audiotools.wrappers.filter import resample_itu @@ -47,6 +48,7 @@ from ivas_processing_scripts.utils import find_binary, run def p50fbmnru( input: audio.Audio, q_db: float, + logger: Optional[logging.Logger] = None, # noqa: F821 ) -> np.ndarray: """ Wrapper for P.50 Fullband MNRU (Modulated Noise Reference Unit), requires p50fbmnru binary @@ -80,7 +82,7 @@ def p50fbmnru( warn( "P.50 Fullband MNRU requires a sampling rate of 48kHz. Resampling will be applied" ) - tmp_audio_obj.audio = resample_itu(tmp_audio_obj, 48000) + tmp_audio_obj.audio = resample_itu(tmp_audio_obj, 48000, logger=logger) tmp_audio_obj.fs = 48000 with TemporaryDirectory() as tmp_dir: @@ -104,13 +106,13 @@ def p50fbmnru( write(tmp_input_file, tmp_audio_obj.audio) # run command - run(cmd) + run(cmd, logger=logger) tmp_output_signal, _ = read(tmp_output_file, input.num_channels) tmp_audio_obj.audio = tmp_output_signal # revert resampling if input.fs != 48000: - tmp_output_signal = resample_itu(tmp_audio_obj, input.fs) + tmp_output_signal = resample_itu(tmp_audio_obj, input.fs, logger=logger) return tmp_output_signal diff --git a/ivas_processing_scripts/audiotools/wrappers/random_seed.py b/ivas_processing_scripts/audiotools/wrappers/random_seed.py index 440b63a929775d6eb59cf838872901076e21c479..3f81686a1ccb51a3f28ae367164bc41893e5b341 100644 --- a/ivas_processing_scripts/audiotools/wrappers/random_seed.py +++ b/ivas_processing_scripts/audiotools/wrappers/random_seed.py @@ -30,6 +30,7 @@ # the United Nations Convention on Contracts on the International Sales of Goods. # +import logging from typing import Optional, Tuple from ivas_processing_scripts.constants import DEFAULT_CONFIG_BINARIES @@ -41,6 +42,7 @@ def random_seed( master_seed: Optional[int] = 0, prerun_seed: Optional[int] = 0, hexa: Optional[bool] = True, + logger: Optional[logging.Logger] = None, ) -> int: """ @@ -83,7 +85,7 @@ def random_seed( ] # run command - result = run(cmd) + result = run(cmd, logger=logger) result = int(result.stdout[:-1]) if hexa: diff --git a/ivas_processing_scripts/audiotools/wrappers/reverb.py b/ivas_processing_scripts/audiotools/wrappers/reverb.py index 5b2c408b1382521863538240d74d897ec3496d1e..1628ee3ed3566ac7cf6e77b3800e81d0465581a6 100644 --- a/ivas_processing_scripts/audiotools/wrappers/reverb.py +++ b/ivas_processing_scripts/audiotools/wrappers/reverb.py @@ -30,20 +30,20 @@ # the United Nations Convention on Contracts on the International Sales of Goods. # +import logging from copy import copy from pathlib import Path from tempfile import TemporaryDirectory from typing import Optional import numpy as np -from scipy.fft import fft - from ivas_processing_scripts.audiotools import audio from ivas_processing_scripts.audiotools.audio import Audio from ivas_processing_scripts.audiotools.audiofile import read, write from ivas_processing_scripts.audiotools.wrappers.filter import resample_itu from ivas_processing_scripts.constants import DEFAULT_CONFIG_BINARIES from ivas_processing_scripts.utils import find_binary, run +from scipy.fft import fft def reverb( @@ -51,6 +51,7 @@ def reverb( IR: Audio, align: Optional[float] = None, mode: Optional[str] = None, + logger: Optional[logging.Logger] = None, ) -> Audio: """ Wrapper for the ITU-T reverb binary to convolve mono audio signal with an impulse response @@ -91,7 +92,7 @@ def reverb( tmp_input = copy(input) if input.fs != IR.fs: old_fs = input.fs - tmp_input.audio = resample_itu(tmp_input, IR.fs) + tmp_input.audio = resample_itu(tmp_input, IR.fs, logger=logger) tmp_input.fs = IR.fs # add trailing zeros @@ -127,7 +128,7 @@ def reverb( cmd.extend([tmp_input_file, tmp_IR_file, tmp_output_file]) # run the 'reverb' command (automatically prepends N zeros to the input signal to keep the output length the same as the input) - run(cmd) + run(cmd, logger=logger) # read the reverberated output file output = copy(tmp_input) @@ -147,7 +148,7 @@ def reverb( output.audio = output.audio[: -(IR.audio.shape[0] - 1), :] if old_fs: - output.audio = resample_itu(output, old_fs) + output.audio = resample_itu(output, old_fs, logger=logger) output.fs = old_fs return output @@ -158,6 +159,7 @@ def reverb_stereo( stereo_IR: Audio, align: Optional[float] = None, mode: Optional[str] = None, + logger: Optional[logging.Logger] = None, ) -> Audio: """ Wrapper for the ITU-T reverb binary to convolve mono audio signal with a stereo impulse response @@ -200,8 +202,8 @@ def reverb_stereo( align = 1.0 / np.max(np.abs(H)) # convolve mono input with left and right IR - y_left = reverb(input, IR_left, align=align, mode=mode) - y_right = reverb(input, IR_right, align=align, mode=mode) + y_left = reverb(input, IR_left, align=align, mode=mode, logger=logger) + y_right = reverb(input, IR_right, align=align, mode=mode, logger=logger) # combine into stereo output y = audio.fromtype("STEREO") @@ -216,6 +218,7 @@ def reverb_foa( foa_IR: Audio, align: Optional[float] = None, mode: Optional[str] = None, + logger: Optional[logging.Logger] = None, ) -> Audio: """ Convolve mono audio signal with an FOA impulse response @@ -268,10 +271,10 @@ def reverb_foa( align = 1.0 / np.max(np.abs(H)) # convolve mono input with FOA IR - y_w = reverb(input, IR_w, align=align, mode=mode) - y_x = reverb(input, IR_x, align=align, mode=mode) - y_y = reverb(input, IR_y, align=align, mode=mode) - y_z = reverb(input, IR_z, align=align, mode=mode) + y_w = reverb(input, IR_w, align=align, mode=mode, logger=logger) + y_x = reverb(input, IR_x, align=align, mode=mode, logger=logger) + y_y = reverb(input, IR_y, align=align, mode=mode, logger=logger) + y_z = reverb(input, IR_z, align=align, mode=mode, logger=logger) # combine into FOA output y = audio.fromtype("FOA") @@ -286,6 +289,7 @@ def reverb_hoa2( hoa2_IR: Audio, align: Optional[float] = None, mode: Optional[str] = None, + logger: Optional[logging.Logger] = None, ) -> Audio: """ Convolve mono audio signal with an HOA2 impulse response @@ -323,7 +327,7 @@ def reverb_hoa2( # separate IR into each channel IR.audio = hoa2_IR.audio[:, [i]] # convolve mono input with channel IR - ych.append(reverb(input, IR, align=align, mode=mode)) + ych.append(reverb(input, IR, align=align, mode=mode), logger=logger) # combine into HOA2 output y = audio.fromtype("HOA2") @@ -338,6 +342,7 @@ def reverb_hoa3( hoa3_IR: Audio, align: Optional[float] = None, mode: Optional[str] = None, + logger: Optional[logging.Logger] = None, ) -> Audio: """ Convolve mono audio signal with an HOA3 impulse response @@ -375,7 +380,7 @@ def reverb_hoa3( # separate IR into each channel IR.audio = hoa3_IR.audio[:, [i]] # convolve mono input with channel IR - ych.append(reverb(input, IR, align=align, mode=mode)) + ych.append(reverb(input, IR, align=align, mode=mode), logger=logger) # combine into HOA3 output y = audio.fromtype("HOA3") diff --git a/ivas_processing_scripts/generation/config.py b/ivas_processing_scripts/generation/config.py index b61aa881e6a39f7204669ec8c82f0d625631fd62..6533785e6915b8b3bd4cfe5124225ffc20377157 100644 --- a/ivas_processing_scripts/generation/config.py +++ b/ivas_processing_scripts/generation/config.py @@ -33,7 +33,6 @@ from copy import deepcopy import yaml - from ivas_processing_scripts.generation.constants import DEFAULT_CONFIG, REQUIRED_KEYS diff --git a/ivas_processing_scripts/generation/generate_ismN_items.py b/ivas_processing_scripts/generation/generate_ismN_items.py index 948c6d48c4ee7f7ce0649c09d10507d6d8edb362..b7d134343d810a822cd592b23331ae0a190be281 100644 --- a/ivas_processing_scripts/generation/generate_ismN_items.py +++ b/ivas_processing_scripts/generation/generate_ismN_items.py @@ -36,7 +36,6 @@ from itertools import groupby, repeat from pathlib import Path import numpy as np - from ivas_processing_scripts.audiotools import audio, audioarray, audiofile, metadata from ivas_processing_scripts.audiotools.convert.objectbased import convert_objectbased from ivas_processing_scripts.audiotools.wrappers.bs1770 import loudness_norm diff --git a/ivas_processing_scripts/generation/generate_masa_items.py b/ivas_processing_scripts/generation/generate_masa_items.py index faba91122c383089673146dff09d07a7bef2e8ff..6788dacf79c54338e5b10eb05bbc82fd98a0f8cb 100644 --- a/ivas_processing_scripts/generation/generate_masa_items.py +++ b/ivas_processing_scripts/generation/generate_masa_items.py @@ -37,7 +37,6 @@ from itertools import groupby, repeat from pathlib import Path import numpy as np - from ivas_processing_scripts.audiotools import audio, audioarray, audiofile from ivas_processing_scripts.audiotools.convert.masa import convert_masa from ivas_processing_scripts.audiotools.convert.scenebased import render_sba_to_masa @@ -345,11 +344,11 @@ def generate_MASA_scene( # convolve MONO source audio with FOA/HOA2/HOA3 IR -> results in FOA/HOA2/HOA3 audio object if IR_fmt == "FOA": - x = reverb_foa(x, IR, mode=None) + x = reverb_foa(x, IR, mode=None, logger=logger) elif IR_fmt == "HOA2": - x = reverb_hoa2(x, IR, mode=None) + x = reverb_hoa2(x, IR, mode=None, logger=logger) elif IR_fmt == "HOA3": - x = reverb_hoa3(x, IR, mode=None) + x = reverb_hoa3(x, IR, mode=None, logger=logger) # adjust the level of the FOA/HOA2/HOA3 signal if np.isinf(level): diff --git a/ivas_processing_scripts/generation/generate_mc_items.py b/ivas_processing_scripts/generation/generate_mc_items.py index 35dcbb3be7be6b646c39e6f16b1ae84bfa8bf50b..1c869f156af4e6e4f8cbce6c402b8286d62e1751 100644 --- a/ivas_processing_scripts/generation/generate_mc_items.py +++ b/ivas_processing_scripts/generation/generate_mc_items.py @@ -37,7 +37,6 @@ from itertools import groupby, repeat from pathlib import Path import numpy as np - from ivas_processing_scripts.audiotools import audio, audioarray, audiofile from ivas_processing_scripts.audiotools.convert.channelbased import ( render_cba_to_binaural, @@ -335,11 +334,11 @@ def generate_MC_scene( # convolve MONO source audio with FOA/HOA2/HOA3 IR -> results in FOA/HOA2/HOA3 audio object if IR_fmt == "FOA": - x = reverb_foa(x, IR, mode=None) + x = reverb_foa(x, IR, mode=None, logger=logger) elif IR_fmt == "HOA2": - x = reverb_hoa2(x, IR, mode=None) + x = reverb_hoa2(x, IR, mode=None, logger=logger) elif IR_fmt == "HOA3": - x = reverb_hoa3(x, IR, mode=None) + x = reverb_hoa3(x, IR, mode=None, logger=logger) # adjust the level of the FOA/HOA2/HOA3 signal if level is None: diff --git a/ivas_processing_scripts/generation/generate_omasa_items.py b/ivas_processing_scripts/generation/generate_omasa_items.py index b8aba2b6105a9675a4bd778ba6b872c7fc93b571..698b966cb1cba055132ebbc82e6dd2d32334ca47 100644 --- a/ivas_processing_scripts/generation/generate_omasa_items.py +++ b/ivas_processing_scripts/generation/generate_omasa_items.py @@ -37,7 +37,6 @@ from itertools import groupby, repeat from pathlib import Path import numpy as np - from ivas_processing_scripts.audiotools import audio, audioarray, audiofile, metadata from ivas_processing_scripts.audiotools.convert.omasa import convert_omasa from ivas_processing_scripts.audiotools.convert.osba import convert_osba diff --git a/ivas_processing_scripts/generation/generate_osba_items.py b/ivas_processing_scripts/generation/generate_osba_items.py index 8190f5ca32425c96f8af35aae5c070d46f5f996b..698d881d4ef1f26f00a7cd5f7e3cf5f2e8f79b64 100644 --- a/ivas_processing_scripts/generation/generate_osba_items.py +++ b/ivas_processing_scripts/generation/generate_osba_items.py @@ -37,7 +37,6 @@ from itertools import groupby, repeat from pathlib import Path import numpy as np - from ivas_processing_scripts.audiotools import audio, audioarray, audiofile, metadata from ivas_processing_scripts.audiotools.convert.osba import convert_osba from ivas_processing_scripts.audiotools.wrappers.bs1770 import loudness_norm diff --git a/ivas_processing_scripts/generation/generate_sba_items.py b/ivas_processing_scripts/generation/generate_sba_items.py index 22aba8ab77bc2ca71a4249d6bc1e77b30e9820fd..e521f7ab9721c5f0dff77ed037d4476de0ff1634 100644 --- a/ivas_processing_scripts/generation/generate_sba_items.py +++ b/ivas_processing_scripts/generation/generate_sba_items.py @@ -37,7 +37,6 @@ from itertools import groupby, repeat from pathlib import Path import numpy as np - from ivas_processing_scripts.audiotools import audio, audioarray, audiofile from ivas_processing_scripts.audiotools.convert.objectbased import convert_objectbased from ivas_processing_scripts.audiotools.convert.scenebased import convert_scenebased @@ -351,11 +350,11 @@ def generate_sba_scene( # convolve MONO source audio with FOA/HOA2/HOA3 IR -> results in FOA/HOA2/HOA3 audio object if cfg.format == "FOA": - x = reverb_foa(x, IR, mode=None) + x = reverb_foa(x, IR, mode=None, logger=logger) elif cfg.format == "HOA2": - x = reverb_hoa2(x, IR, mode=None) + x = reverb_hoa2(x, IR, mode=None, logger=logger) elif cfg.format == "HOA3": - x = reverb_hoa3(x, IR, mode=None) + x = reverb_hoa3(x, IR, mode=None, logger=logger) else: # convert MONO to ISM1 x_ism = audio.ObjectBasedAudio("ISM1") # ISM with 1 channel diff --git a/ivas_processing_scripts/generation/generate_stereo_items.py b/ivas_processing_scripts/generation/generate_stereo_items.py index 1ad8a6ae47936af4a8ba9d71ab09634525fa2b95..41e93c5694a160853702b86e8bc0d538f81b8942 100644 --- a/ivas_processing_scripts/generation/generate_stereo_items.py +++ b/ivas_processing_scripts/generation/generate_stereo_items.py @@ -38,7 +38,6 @@ from itertools import groupby, repeat from pathlib import Path import numpy as np - from ivas_processing_scripts.audiotools import audio, audioarray, audiofile from ivas_processing_scripts.audiotools.wrappers.bs1770 import loudness_norm from ivas_processing_scripts.audiotools.wrappers.reverb import reverb_stereo @@ -311,7 +310,7 @@ def generate_stereo_scene( end_position.append(x.audio.shape[0] / x.fs + source_shift_in_seconds) # convolve MONO source audio with STEREO IR -> results in STEREO audio object - x = reverb_stereo(x, IR, mode=None) + x = reverb_stereo(x, IR, mode=None, logger=logger) # adjust the level of the STEREO signal if level is None: diff --git a/ivas_processing_scripts/processing/config.py b/ivas_processing_scripts/processing/config.py index bf8526071bca8219726475ad7cecec40f24b2d60..0e31f3172c9d180a154affc220d49cccbe81c40b 100755 --- a/ivas_processing_scripts/processing/config.py +++ b/ivas_processing_scripts/processing/config.py @@ -36,7 +36,6 @@ from pathlib import Path from typing import Union import yaml - from ivas_processing_scripts.constants import ( DEFAULT_CONFIG, REQUIRED_KEYS, diff --git a/ivas_processing_scripts/processing/evs.py b/ivas_processing_scripts/processing/evs.py index 6f5fe2dd014cc881d9df71bbc3607f74d43452fc..d2aec6755a8cf46930df473ca0f7eeaa3bd5df6d 100755 --- a/ivas_processing_scripts/processing/evs.py +++ b/ivas_processing_scripts/processing/evs.py @@ -415,6 +415,7 @@ class EVS(Processing): self.tx["errpatt_seed"], self.tx["n_frames_per_packet"], self.tx["master_seed"], + logger=logger, ) return bitstream_processed @@ -439,6 +440,7 @@ class EVS(Processing): error_rate=self.tx["error_rate"], master_seed=self.tx["master_seed"], prerun_seed=self.tx["prerun_seed"], + logger=logger, ) return bitstream_processed else: diff --git a/ivas_processing_scripts/processing/ivas.py b/ivas_processing_scripts/processing/ivas.py index 01f8220f2b721c35c2cd3071397633b9e95cad9e..6b2f86052ed1319221d0829d751a7df60f21f3d0 100755 --- a/ivas_processing_scripts/processing/ivas.py +++ b/ivas_processing_scripts/processing/ivas.py @@ -277,6 +277,9 @@ class IVAS(Processing): ) voip = True elif self.tx["type"] == "JBM2FER": + logger.debug( + f"Frame loss simulator {bitstream} -> {bitstream_processed}" + ) delay_profile = self.tx["error_pattern"] len_pattern = length_pattern(delay_profile) @@ -303,8 +306,9 @@ class IVAS(Processing): fer_pattern=errpat, late_loss_rate=self.tx.get("errpatt_late_loss_rate"), shift=shift, + logger=logger, ) - eid_xor(errpat, bitstream, bitstream_processed) + eid_xor(errpat, bitstream, bitstream_processed, logger=logger) elif self.tx["type"] == "FER": signal, _ = read( in_file, fs=self.in_fs, nchannels=self.in_fmt.num_channels @@ -326,6 +330,7 @@ class IVAS(Processing): error_rate=self.tx["error_rate"], master_seed=self.tx["master_seed"], prerun_seed=self.tx["prerun_seed"], + logger=logger, ) return bitstream_processed, voip diff --git a/ivas_processing_scripts/processing/preprocessing_2.py b/ivas_processing_scripts/processing/preprocessing_2.py index 2a4bef674fb0eebd257f9bbab50ef8d0b4a2384a..710b9cf039dd8ad490234f57c8927cf2d697ade7 100644 --- a/ivas_processing_scripts/processing/preprocessing_2.py +++ b/ivas_processing_scripts/processing/preprocessing_2.py @@ -35,7 +35,6 @@ from pathlib import Path from warnings import warn import numpy as np - from ivas_processing_scripts.audiotools import audio from ivas_processing_scripts.audiotools.audioarray import trim from ivas_processing_scripts.audiotools.audiofile import write @@ -163,7 +162,7 @@ class Preprocessing2(Processing): out_format = self.out_fmt loudness_signal, _, _ = get_loudness( - audio_object, loudness_format=out_format + audio_object, loudness_format=out_format, logger=logger ) logger.debug( f"Loudness of audio signal: {loudness_signal}LKFS ({out_format})" diff --git a/ivas_processing_scripts/processing/processing.py b/ivas_processing_scripts/processing/processing.py index bdda821fa3b67b2a10a287d778bbe754ae1ae77a..5b02f9cd4a0cf947963cd3683207b0b0276a7e97 100755 --- a/ivas_processing_scripts/processing/processing.py +++ b/ivas_processing_scripts/processing/processing.py @@ -272,12 +272,12 @@ def concat_teardown( if splits[-1] > len(x): warn( f"Last split index {splits[-1]} is larger than the signal length {len(x)}" - f"\nLast split exceeds signal length by {((splits[-1] - len(x))*1000)/fs:.2f} ms" + f"\nLast split exceeds signal length by {((splits[-1] - len(x)) * 1000) / fs:.2f} ms" ) elif (splits[-1] < len(x)) and not tracefile_needed: warn( f"Last split index {splits[-1]} is smaller than the signal length {len(x)}" - f"\nLast split shorter than signal length by {((len(x) - splits[-1])*1000)/fs:.2f} ms" + f"\nLast split shorter than signal length by {((len(x) - splits[-1]) * 1000) / fs:.2f} ms" ) split_signals = [] diff --git a/ivas_processing_scripts/processing/processing_splitting_scaling.py b/ivas_processing_scripts/processing/processing_splitting_scaling.py index 5f9ac34fe210d9a49d4c76966fcebad2b64d30e6..88e5ed33c187156d821973af1ed829a5846858a0 100644 --- a/ivas_processing_scripts/processing/processing_splitting_scaling.py +++ b/ivas_processing_scripts/processing/processing_splitting_scaling.py @@ -4,7 +4,6 @@ from itertools import repeat from pathlib import Path import numpy as np - from ivas_processing_scripts.audiotools import audio from ivas_processing_scripts.audiotools.audiofile import read, write from ivas_processing_scripts.audiotools.metadata import write_ISM_metadata_in_file diff --git a/ivas_processing_scripts/processing/tx.py b/ivas_processing_scripts/processing/tx.py index 4aab2d7f3cda40b48ffa5ba3b424c2cdec1f098a..f5c0c9029dbfbd502ac5e31689febc44eb12efa1 100755 --- a/ivas_processing_scripts/processing/tx.py +++ b/ivas_processing_scripts/processing/tx.py @@ -35,7 +35,6 @@ from typing import Optional from warnings import warn import numpy as np - from ivas_processing_scripts.processing.config import TestConfig from ivas_processing_scripts.utils import get_abs_path diff --git a/ivas_processing_scripts/utils.py b/ivas_processing_scripts/utils.py index a12b886aa0fe28d4cc45c5f42cb147ef1d7a4853..af55590a830bf3d398ffd64e9eb2d2da1c337a43 100755 --- a/ivas_processing_scripts/utils.py +++ b/ivas_processing_scripts/utils.py @@ -284,7 +284,7 @@ def pairwise(iter): def progressbar_update(progress, count, width): fill = int(width * progress / count) print( - f"{int(progress/count*100):3d}%{'['}{'='*fill}{(' '*(width-fill))}{']'}{progress:4d}/{count:4d}", + f"{int(progress / count * 100):3d}%{'['}{'=' * fill}{(' ' * (width - fill))}{']'}{progress:4d}/{count:4d}", end="\r", file=sys.stdout, flush=True, diff --git a/other/lp16k.py b/other/lp16k.py index c9ae6706bc7b3ab4ada0d68f36011f4862bdd45b..6f806569dd33f5cba4d3855a6cb30d354d021551 100755 --- a/other/lp16k.py +++ b/other/lp16k.py @@ -46,7 +46,7 @@ def lp16k(in_file, out_file): x = fromfile("STEREO", in_file) if x.fs != 48000: raise ValueError( - f"Unsupported sampling rate {x.fs//1000} kHz for input file {in_file} - only 48 kHz is supported!" + f"Unsupported sampling rate {x.fs // 1000} kHz for input file {in_file} - only 48 kHz is supported!" ) # save length of audio since resampling can alter the length by one sample due to rounding diff --git a/tests/test_audiotools_convert.py b/tests/test_audiotools_convert.py index 6a6c7f2cf8501f4d1c397767b38258961a077a9e..6bca6e0cc599655ccec6055494a3d439c52bf31f 100644 --- a/tests/test_audiotools_convert.py +++ b/tests/test_audiotools_convert.py @@ -34,9 +34,9 @@ from pathlib import PurePath from typing import Optional import pytest - from ivas_processing_scripts.audiotools.audiofile import read from ivas_processing_scripts.audiotools.convert import convert_file + from tests.constants import ( CUSTOM_LAYOUT_DIR, CUSTOM_LS_TO_TEST, diff --git a/tests/test_binaries_present.py b/tests/test_binaries_present.py index 05045fe477b13c283c1cf98e1ad1da08c747ae55..18776721f35c5254b7ea99667a5fc8a75b6ef784 100755 --- a/tests/test_binaries_present.py +++ b/tests/test_binaries_present.py @@ -31,7 +31,6 @@ # import pytest - from ivas_processing_scripts.utils import find_binary BINARIES = [ diff --git a/tests/test_experiments.py b/tests/test_experiments.py index 34d8ddf32c829a646cb56711c9d853dda3410a92..91f2d96dbbccda82c47a067f6978765c969dd8f0 100644 --- a/tests/test_experiments.py +++ b/tests/test_experiments.py @@ -35,13 +35,13 @@ import sys from pathlib import Path import pytest -from numpy.random import random, seed - -from ivas_processing_scripts import main as generate_test from ivas_processing_scripts.audiotools import audio from ivas_processing_scripts.audiotools.audiofile import read, write from ivas_processing_scripts.processing.config import TestConfig from ivas_processing_scripts.utils import list_audio_or_md +from numpy.random import random, seed + +from ivas_processing_scripts import main as generate_test from tests.constants import ( FORMAT_TO_METADATA_FILES, INPUT_EXPERIMENT_NAMES, diff --git a/tests/test_processing.py b/tests/test_processing.py index 1eac22b279923e5fd7f8f6362e82b27f6fed6832..6af362974cdce93bde452f49eefc0f8e1129042e 100644 --- a/tests/test_processing.py +++ b/tests/test_processing.py @@ -34,9 +34,9 @@ import shutil from pathlib import Path import pytest +from ivas_processing_scripts.processing.config import TestConfig from ivas_processing_scripts import main as generate_test -from ivas_processing_scripts.processing.config import TestConfig from tests.constants import INPUT_CONFIG_DIR, INPUT_CONFIG_FILES