diff --git a/ivas_processing_scripts/generation/generate_ismN_items.py b/ivas_processing_scripts/generation/generate_ismN_items.py index adec1961281b7a279ef7c1ccbc391d860ec6ea7c..a19acd6e2702ce51af0138cdf950e35e1b09ea49 100644 --- a/ivas_processing_scripts/generation/generate_ismN_items.py +++ b/ivas_processing_scripts/generation/generate_ismN_items.py @@ -30,6 +30,7 @@ # the United Nations Convention on Contracts on the International Sales of Goods. # import logging +import sys from itertools import groupby, repeat from pathlib import Path @@ -249,6 +250,23 @@ def generate_ismN_scene( if isinstance(scene["level"], list) else scene["level"] ) + + # check if level is "-Inf" string or "N/A" or "n/a" or "NaN" + if isinstance(level, str): + if level.lower() in ["-inf"]: + level = -np.inf + elif level.lower() in ["none", "no", "", "null", "n/a", "na", "nan"]: + level = None + else: + # convert to float + try: + level = float(level) + except ValueError: + logger.error(f"Error: Level {level} is not a valid entry!") + sys.exit(-1) + elif isinstance(level, (int, float)): + # do nothing, it is already a number + pass else: level = -26 @@ -270,11 +288,20 @@ def generate_ismN_scene( x.fs = cfg.fs # adjust the level of the audio source file (need to convert to MONO first) - x_temp = audio.ChannelBasedAudio("MONO") # create a temporary mono audio object - x_temp.audio = x.audio.copy() - x_temp.fs = x.fs - x_temp.audio, _ = loudness_norm(x_temp, level, loudness_format="MONO") - x.audio = x_temp.audio + if np.isinf(level): + # set all channels to zero + x.audio = np.zeros_like(x.audio) + elif level is None: + # do not change the level of the audio source signal + logger.info("-- Level of the audio source signal is not changed") + else: + x_temp = audio.ChannelBasedAudio( + "MONO" + ) # create a temporary mono audio object + x_temp.audio = x.audio.copy() + x_temp.fs = x.fs + x_temp.audio, _ = loudness_norm(x_temp, level, loudness_format="MONO") + x.audio = x_temp.audio # ensure the length of the audio source signal is a multiple of 20ms if len(x.audio) % frame_len != 0: diff --git a/ivas_processing_scripts/generation/generate_masa_items.py b/ivas_processing_scripts/generation/generate_masa_items.py index 57ab3cbd74c702a225796fc9ee69e8f88f704418..7a0e020ca955eed00c35940688c79dd930a6f08c 100644 --- a/ivas_processing_scripts/generation/generate_masa_items.py +++ b/ivas_processing_scripts/generation/generate_masa_items.py @@ -247,6 +247,23 @@ def generate_MASA_scene( if isinstance(scene["level"], list) else scene["level"] ) + + # check if level is "-Inf" string or "N/A" or "n/a" or "NaN" + if isinstance(level, str): + if level.lower() in ["-inf"]: + level = -np.inf + elif level.lower() in ["none", "no", "", "null", "n/a", "na", "nan"]: + level = None + else: + # convert to float + try: + level = float(level) + except ValueError: + logger.error(f"Error: Level {level} is not a valid entry!") + sys.exit(-1) + elif isinstance(level, (int, float)): + # do nothing, it is already a number + pass else: level = -26 @@ -299,7 +316,14 @@ def generate_MASA_scene( x = reverb_hoa3(x, IR, mode=None) # adjust the level of the FOA/HOA2/HOA3 signal - x.audio, _ = loudness_norm(x, level, loudness_format="STEREO") + if np.isinf(level): + # set all channels to zero + x.audio = np.zeros_like(x.audio) + elif level is None: + # do not change the level of the audio source signal + logger.info("-- Level of the audio source signal is not changed") + else: + x.audio, _ = loudness_norm(x, level, loudness_format="STEREO") # ensure the length of the audio source signal is a multiple of 20ms if len(x.audio) % frame_len != 0: diff --git a/ivas_processing_scripts/generation/generate_mc_items.py b/ivas_processing_scripts/generation/generate_mc_items.py index 1b627e73f203862179d48fc896c22700cbd2871d..29e6b6616ec09a2cc8242a29906e2d26f5a0eb74 100644 --- a/ivas_processing_scripts/generation/generate_mc_items.py +++ b/ivas_processing_scripts/generation/generate_mc_items.py @@ -247,6 +247,23 @@ def generate_MC_scene( if isinstance(scene["level"], list) else scene["level"] ) + + # check if level is "-Inf" string or "N/A" or "n/a" or "NaN" + if isinstance(level, str): + if level.lower() in ["-inf"]: + level = -np.inf + elif level.lower() in ["none", "no", "", "null", "n/a", "na", "nan"]: + level = None + else: + # convert to float + try: + level = float(level) + except ValueError: + logger.error(f"Error: Level {level} is not a valid entry!") + sys.exit(-1) + elif isinstance(level, (int, float)): + # do nothing, it is already a number + pass else: level = -26 @@ -299,7 +316,14 @@ def generate_MC_scene( x = reverb_hoa3(x, IR, mode=None) # adjust the level of the FOA/HOA2/HOA3 signal - x.audio, _ = loudness_norm(x, level, loudness_format="STEREO") + if np.isinf(level): + # set all channels to zero + x.audio = np.zeros_like(x.audio) + elif level is None: + # do not change the level of the audio source signal + logger.info("-- Level of the audio source signal is not changed") + else: + x.audio, _ = loudness_norm(x, level, loudness_format="STEREO") # ensure the length of the audio source signal is a multiple of 20ms if len(x.audio) % frame_len != 0: diff --git a/ivas_processing_scripts/generation/generate_omasa_items.py b/ivas_processing_scripts/generation/generate_omasa_items.py index 972ee69ad155af12934fa4b2c8a4dc28236657b8..13fc3470c02e0d9c734886b5471472d246d4698d 100644 --- a/ivas_processing_scripts/generation/generate_omasa_items.py +++ b/ivas_processing_scripts/generation/generate_omasa_items.py @@ -244,6 +244,23 @@ def generate_OMASA_scene( if isinstance(scene["level"], list) else scene["level"] ) + + # check if level is "-Inf" string or "N/A" or "n/a" or "NaN" + if isinstance(level, str): + if level.lower() in ["-inf"]: + level = -np.inf + elif level.lower() in ["none", "no", "", "null", "n/a", "na", "nan"]: + level = None + else: + # convert to float + try: + level = float(level) + except ValueError: + logger.error(f"Error: Level {level} is not a valid entry!") + sys.exit(-1) + elif isinstance(level, (int, float)): + # do nothing, it is already a number + pass else: level = -26 @@ -284,10 +301,17 @@ def generate_OMASA_scene( x.fs = cfg.fs # adjust the level of the source file - if fmt in ["FOA", "HOA2", "HOA3"]: - x.audio, _ = loudness_norm(x, level, loudness_format="STEREO") + if np.isinf(level): + # set all channels to zero + x.audio = np.zeros_like(x.audio) + elif level is None: + # do not change the level of the audio source signal + logger.info("-- Level of the audio source signal is not changed") else: - x.audio, _ = loudness_norm(x, level, loudness_format="MONO") + if fmt in ["FOA", "HOA2", "HOA3"]: + x.audio, _ = loudness_norm(x, level, loudness_format="STEREO") + else: + x.audio, _ = loudness_norm(x, level, loudness_format="MONO") # ensure the length of the audio source signal is a multiple of 20ms if len(x.audio) % frame_len != 0: diff --git a/ivas_processing_scripts/generation/generate_osba_items.py b/ivas_processing_scripts/generation/generate_osba_items.py index 156c3d2db76d59fa9893a0d40b5b603264e685be..29ff66a7c220dfbffe3f35a49a011907583fa4f7 100644 --- a/ivas_processing_scripts/generation/generate_osba_items.py +++ b/ivas_processing_scripts/generation/generate_osba_items.py @@ -235,6 +235,23 @@ def generate_OSBA_scene( if isinstance(scene["level"], list) else scene["level"] ) + + # check if level is "-Inf" string or "N/A" or "n/a" or "NaN" + if isinstance(level, str): + if level.lower() in ["-inf"]: + level = -np.inf + elif level.lower() in ["none", "no", "", "null", "n/a", "na", "nan"]: + level = None + else: + # convert to float + try: + level = float(level) + except ValueError: + logger.error(f"Error: Level {level} is not a valid entry!") + sys.exit(-1) + elif isinstance(level, (int, float)): + # do nothing, it is already a number + pass else: level = -26 @@ -275,10 +292,17 @@ def generate_OSBA_scene( x.fs = cfg.fs # adjust the level of the source file - if fmt in ["FOA", "HOA2", "HOA3"]: - x.audio, _ = loudness_norm(x, level, loudness_format="STEREO") + if np.isinf(level): + # set all channels to zero + x.audio = np.zeros_like(x.audio) + elif level is None: + # do not change the level of the audio source signal + logger.info("-- Level of the audio source signal is not changed") else: - x.audio, _ = loudness_norm(x, level, loudness_format="MONO") + if fmt in ["FOA", "HOA2", "HOA3"]: + x.audio, _ = loudness_norm(x, level, loudness_format="STEREO") + else: + x.audio, _ = loudness_norm(x, level, loudness_format="MONO") # ensure the length of the audio source signal is a multiple of 20ms if len(x.audio) % frame_len != 0: diff --git a/ivas_processing_scripts/generation/generate_sba_items.py b/ivas_processing_scripts/generation/generate_sba_items.py index feadf510bd09f2a1ca00c74dbd4ee033c5c3fea4..4f95bf98fda6640d89c5d694cc09b80fe90ff70c 100644 --- a/ivas_processing_scripts/generation/generate_sba_items.py +++ b/ivas_processing_scripts/generation/generate_sba_items.py @@ -31,6 +31,7 @@ # import logging +import sys from itertools import groupby, repeat from pathlib import Path @@ -238,6 +239,23 @@ def generate_sba_scene( if isinstance(scene["level"], list) else scene["level"] ) + + # check if level is "-Inf" string or "N/A" or "n/a" or "NaN" + if isinstance(level, str): + if level.lower() in ["-inf"]: + level = -np.inf + elif level.lower() in ["none", "no", "", "null", "n/a", "na", "nan"]: + level = None + else: + # convert to float + try: + level = float(level) + except ValueError: + logger.error(f"Error: Level {level} is not a valid entry!") + sys.exit(-1) + elif isinstance(level, (int, float)): + # do nothing, it is already a number + pass else: level = -26 @@ -269,7 +287,14 @@ def generate_sba_scene( x = reverb_hoa3(x, IR, mode=None) # adjust the level of the FOA/HOA2/HOA3 signal - x.audio, _ = loudness_norm(x, level, loudness_format="STEREO") + if np.isinf(level): + # set all channels to zero + x.audio = np.zeros_like(x.audio) + elif level is None: + # do not change the level of the audio source signal + logger.info("-- Level of the audio source signal is not changed") + else: + x.audio, _ = loudness_norm(x, level, loudness_format="STEREO") # ensure the length of the audio source signal is a multiple of 20ms if len(x.audio) % frame_len != 0: diff --git a/ivas_processing_scripts/generation/generate_stereo_items.py b/ivas_processing_scripts/generation/generate_stereo_items.py index 2cd80fe58979e7841f02c8a34923389516031908..8b616e640106e3358196aee6df689b28722e8e8b 100644 --- a/ivas_processing_scripts/generation/generate_stereo_items.py +++ b/ivas_processing_scripts/generation/generate_stereo_items.py @@ -32,6 +32,7 @@ import logging import os +import sys from itertools import groupby, repeat from pathlib import Path @@ -244,6 +245,23 @@ def generate_stereo_scene( if isinstance(scene["level"], list) else scene["level"] ) + + # check if level is "-Inf" string or "N/A" or "n/a" or "NaN" + if isinstance(level, str): + if level.lower() in ["-inf"]: + level = -np.inf + elif level.lower() in ["none", "no", "", "null", "n/a", "na", "nan"]: + level = None + else: + # convert to float + try: + level = float(level) + except ValueError: + logger.error(f"Error: Level {level} is not a valid entry!") + sys.exit(-1) + elif isinstance(level, (int, float)): + # do nothing, it is already a number + pass else: level = -26 @@ -270,7 +288,14 @@ def generate_stereo_scene( x = reverb_stereo(x, IR, mode=None) # adjust the level of the STEREO signal - x.audio, _ = loudness_norm(x, level, loudness_format="STEREO") + if np.isinf(level): + # set all channels to zero + x.audio = np.zeros_like(x.audio) + elif level is None: + # do not change the level of the audio source signal + logger.info("-- Level of the audio source signal is not changed") + else: + x.audio, _ = loudness_norm(x, level, loudness_format="STEREO") # ensure the length of the audio source signal is a multiple of 20ms if len(x.audio) % frame_len != 0: