diff --git a/README.md b/README.md index 16553978c5a951c99a0469fa0b2ed0ff3e6b2d3c..2723e8fbe0d25734310eef1a67de1c6efef2e281 100755 --- a/README.md +++ b/README.md @@ -202,7 +202,7 @@ input: ### Target loudness in LKFS; default = null (no loudness change applied) # loudness: -26 ### Spatial audio format in which loudness is adjusted (only used if preprocessing loudness is not null); - ### default = null (uses preprocessing fmt if possible) + ### default = null (uses postprocessing fmt) # loudness_fmt: "BINAURAL" ### Pre-/post-trim individual signal(s) (ms) (negative values pad silence); default = 0 # trim: diff --git a/examples/TEMPLATE.yml b/examples/TEMPLATE.yml index c6490c8fab25738975074acd5bcade0130753b05..382825bc0482d76634fd31cceb5d96df1dc6946e 100755 --- a/examples/TEMPLATE.yml +++ b/examples/TEMPLATE.yml @@ -77,7 +77,7 @@ input: ### Target loudness in LKFS; default = null (no loudness change applied) # loudness: -26 ### Spatial audio format in which loudness is adjusted (only used if preprocessing loudness is not null); - ### default = null (uses preprocessing fmt if possible) + ### default = null (uses postprocessing fmt) # loudness_fmt: "BINAURAL" ### Pre-/post-trim individual signal(s) (ms) (negative values pad silence); default = 0 # trim: diff --git a/ivas_processing_scripts/audiotools/wrappers/bs1770.py b/ivas_processing_scripts/audiotools/wrappers/bs1770.py index c1d0901cb233ac06c486f08b6561311799230018..4587f214e6877983e4ceb7401da474e0e2bf3daf 100755 --- a/ivas_processing_scripts/audiotools/wrappers/bs1770.py +++ b/ivas_processing_scripts/audiotools/wrappers/bs1770.py @@ -164,7 +164,7 @@ def get_loudness( target_loudness: Optional[float] = -26, loudness_format: Optional[str] = None, rms: Optional[bool] = False, -) -> Tuple[float, float]: +) -> Tuple[float, float, str]: """ Loudness measurement using ITU-R BS.1770-4 @@ -185,6 +185,8 @@ def get_loudness( Measured loudness (after conversion to loudness_format if specified) scale_factor: float Scale factor to acheive desired loudness + loudness_format: str + Used loudness format """ if target_loudness > 0: @@ -212,7 +214,8 @@ def get_loudness( convert.format_conversion(input, tmp) else: tmp.audio = input.audio - return bs1770demo(tmp, target_loudness, rms) + measured_loudness, scale_factor = bs1770demo(tmp, target_loudness, rms) + return measured_loudness, scale_factor, loudness_format def loudness_norm( @@ -254,7 +257,7 @@ def loudness_norm( scaled_input = copy.deepcopy(input) # save loudness before and after scaling for the logger info - loudness_before, scale_factor_new = get_loudness( + loudness_before, scale_factor_new, loundness_fmt_used = get_loudness( scaled_input, target_loudness, loudness_format, rms ) @@ -264,7 +267,7 @@ def loudness_norm( scaled_input.audio *= scale_factor_new # measure loudness and get scaling factor - measured_loudness, scale_factor_new = get_loudness( + measured_loudness, scale_factor_new, _ = get_loudness( scaled_input, target_loudness, loudness_format, rms ) @@ -276,11 +279,11 @@ def loudness_norm( if logger: if file_name_logging: logger.debug( - f"File {file_name_logging} loudness; before: {loudness_before}, after: {loudness_after}" + f"File {file_name_logging} loudness; before: {loudness_before}, after: {loudness_after}, measured in format {loundness_fmt_used}" ) else: logger.debug( - f"Loudness; before: {loudness_before}, after: {loudness_after}" + f"Loudness; before: {loudness_before}, after: {loudness_after}, measured in format {loundness_fmt_used}" ) if num_iter >= 10: diff --git a/ivas_processing_scripts/generation/process_ism_items.py b/ivas_processing_scripts/generation/process_ism_items.py index d6480fdd0073f70855b562dd08388110a5a5305d..440f9273de7a00f7876c832fbf901cafdbdf188d 100644 --- a/ivas_processing_scripts/generation/process_ism_items.py +++ b/ivas_processing_scripts/generation/process_ism_items.py @@ -123,7 +123,7 @@ def generate_ism_items( x.audio = x.audio[: N_frames * frame_len] # adjust the level of the source file - _, scale_factor = get_loudness(x, cfg.loudness, "MONO") + _, scale_factor, _ = get_loudness(x, cfg.loudness, "MONO") x.audio *= scale_factor # read azimuth information and create array diff --git a/ivas_processing_scripts/generation/process_stereo_items.py b/ivas_processing_scripts/generation/process_stereo_items.py index d92ccae3d5427306995425d71b8bd91122683a09..a6a6ddaa1f2e9537c6ec8cfe5bf7be735ab7e9e0 100644 --- a/ivas_processing_scripts/generation/process_stereo_items.py +++ b/ivas_processing_scripts/generation/process_stereo_items.py @@ -126,7 +126,7 @@ def generate_stereo_items( x = reverb_stereo(x, IR) # adjust the level of the stereo signal - _, scale_factor = get_loudness(x, cfg.loudness, "STEREO") + _, scale_factor, _ = get_loudness(x, cfg.loudness, "STEREO") x.audio *= scale_factor # shift the second (and all other) source files (positive shift creates overlap, negative shift creates a gap) diff --git a/ivas_processing_scripts/processing/chains.py b/ivas_processing_scripts/processing/chains.py index e65c0b5e71e0ea8874723f37c41a1807060fef4f..5c35dc3a6500e9027b67fb4f5eb678ca9037a2e1 100755 --- a/ivas_processing_scripts/processing/chains.py +++ b/ivas_processing_scripts/processing/chains.py @@ -114,6 +114,7 @@ def get_preprocessing(cfg: TestConfig) -> dict: } pre_cfg = cfg.preprocessing + post_cfg = cfg.postprocessing chain["processes"].append( Preprocessing( @@ -127,7 +128,7 @@ def get_preprocessing(cfg: TestConfig) -> dict: "in_delay": pre_cfg.get("delay"), "in_window": pre_cfg.get("window"), "in_loudness": pre_cfg.get("loudness"), - "in_loudness_fmt": pre_cfg.get("loudness_fmt"), + "in_loudness_fmt": pre_cfg.get("loudness_fmt", post_cfg.get("fmt")), "in_mask": pre_cfg.get("mask", None), "multiprocessing": cfg.multiprocessing, } @@ -409,7 +410,7 @@ def get_processing_chain( loudness_fmt_postprocessing = None else: loudness_postprocessing = post_cfg.get("loudness") - loudness_fmt_postprocessing = post_cfg.get("loudness_fmt") + loudness_fmt_postprocessing = post_cfg.get("loudness_fmt", post_cfg.get("fmt")) chain["processes"].append( Postprocessing( diff --git a/ivas_processing_scripts/processing/evs.py b/ivas_processing_scripts/processing/evs.py index d828b6e29b06c61c8dcd23bf93127534d1792d16..b4a8bbb024d762b6ef93e09565f8732f0da5c898 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 order than input signal" + "SBA format 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/preprocessing_2.py b/ivas_processing_scripts/processing/preprocessing_2.py index ac1f124fcee526841919c659c08f7e95b1b29e1f..828218f0ffe0bbe2cef7c98d11961a87d1436943 100644 --- a/ivas_processing_scripts/processing/preprocessing_2.py +++ b/ivas_processing_scripts/processing/preprocessing_2.py @@ -137,6 +137,7 @@ class Preprocessing2(Processing): # measure loudness of audio signal based on output format tmp_object = audio.fromtype(self.out_fmt) + if ( isinstance(tmp_object, audio.ObjectBasedAudio) or isinstance(tmp_object, audio.SceneBasedAudio) @@ -146,8 +147,12 @@ class Preprocessing2(Processing): else: out_format = self.out_fmt - loudness_signal, _ = get_loudness(audio_object, loudness_format=out_format) - logger.debug(f"Loudness of audio signal: {loudness_signal}LKFS") + loudness_signal, _, _ = get_loudness( + audio_object, loudness_format=out_format + ) + logger.debug( + f"Loudness of audio signal: {loudness_signal}LKFS ({out_format})" + ) # compute desired loudness of background noise loudness_noise = loudness_signal - self.background_noise["snr"] diff --git a/ivas_processing_scripts/processing/processing.py b/ivas_processing_scripts/processing/processing.py index 5e07afa0e3dc33d7bb8c373bd5db21e17cb627cc..cfc5a3811af66f6abc2406ae9cd1134435315b9a 100755 --- a/ivas_processing_scripts/processing/processing.py +++ b/ivas_processing_scripts/processing/processing.py @@ -356,7 +356,7 @@ def reverse_process_2(cfg, logger): out_paths_splits, cfg.postprocessing["fmt"], cfg.postprocessing["loudness"], - cfg.postprocessing.get("loudness_fmt", None), + cfg.postprocessing.get("loudness_fmt", cfg.postprocessing["fmt"]), cfg.postprocessing["fs"], out_meta_splits, logger,