Loading README.md +1 −1 Original line number Diff line number Diff line Loading @@ -513,7 +513,7 @@ The following additional executables are needed for the different processing ste | Processing step | Executable | Where to find | |-------------------------------------------------|-----------------------|-------------------------------------------------------------------------------------------------------------| | Loudness measurement and adjustment | bs1770demo | https://github.com/openitu/STL | | Loudness measurement and adjustment | bs1770demo | https://github.com/ErikNorvell-Ericsson/STL (Note branch) | | MNRU | p50fbmnru | https://github.com/openitu/STL | | ESDRU | esdru | https://github.com/openitu/STL | | Frame error pattern application | eid-xor | https://github.com/openitu/STL | Loading ivas_processing_scripts/audiotools/wrappers/bs1770.py +32 −14 Original line number Diff line number Diff line Loading @@ -33,6 +33,7 @@ import copy import logging import re import subprocess as sp from pathlib import Path from tempfile import TemporaryDirectory from typing import Optional, Tuple, Union Loading @@ -50,6 +51,7 @@ from ivas_processing_scripts.utils import find_binary, get_devnull, run def bs1770demo( input: audio.Audio, target_loudness: Optional[float] = -26, rms: Optional[bool] = False, ) -> Tuple[float, float]: """ Wrapper for ITU-R BS.1770-4, requires bs1770demo binary Loading @@ -60,6 +62,8 @@ def bs1770demo( Input audio target_loudness: Optional[float] Desired loudness in LKFS rms: Optional[bool] Flag for using rms argument in bs1770demo tool (for low level signals) Returns ------- Loading @@ -79,6 +83,14 @@ def bs1770demo( else: binary = find_binary("bs1770demo") # checking if the new binary (with '-rms') is used result = sp.run(str(binary), shell=True, stdout=sp.PIPE, stderr=sp.PIPE) result_stdout = result.stdout.decode("utf-8") if "-rms" not in result_stdout: raise RuntimeError( 'An bs1770demo executable without RMS support (cmdl option "-rms") was detected. Please update the bs1770demo executable. See bin/README.md for details.' ) if not isinstance(input, audio.BinauralAudio) and not isinstance( input, audio.ChannelBasedAudio ): Loading Loading @@ -128,6 +140,10 @@ def bs1770demo( # write temporary file write(tmp_file, tmp_sig, 48000) # using rms if true if rms: cmd.insert(1, "-rms") # run command result = run(cmd) Loading @@ -147,6 +163,7 @@ def get_loudness( input: audio.Audio, target_loudness: Optional[float] = -26, loudness_format: Optional[str] = None, rms: Optional[bool] = False, ) -> Tuple[float, float]: """ Loudness measurement using ITU-R BS.1770-4 Loading @@ -155,10 +172,12 @@ def get_loudness( ---------- input : Audio Input audio target_loudness: float target_loudness: Optional[float] Desired loudness in LKFS loudness_format: str loudness_format: Optional[str] Loudness format to render to for loudness computation (default input format if possible) rms: Optional[bool] Flag for using rms argument in bs1770demo tool (for low level signals) Returns ------- Loading Loading @@ -193,14 +212,14 @@ def get_loudness( convert.format_conversion(input, tmp) else: tmp.audio = input.audio return bs1770demo(tmp, target_loudness) return bs1770demo(tmp, target_loudness, rms) def loudness_norm( input: audio.Audio, target_loudness: Optional[float] = -26, loudness_format: Optional[str] = None, rms: Optional[bool] = False, logger: Optional[logging.Logger] = None, file_name_logging: Optional[Union[str, Path]] = None, ) -> np.ndarray: Loading @@ -217,6 +236,8 @@ def loudness_norm( Desired loudness level in LKFS loudness_format: Optional[str] Loudness format to render to for loudness computation (default input format) rms: Optional[bool] Flag for using rms argument in bs1770demo tool (for low level signals) logger: Optional[logging.Logger] Logger to log loudness information file_name_logging: Optional[Union[str, Path]] Loading @@ -228,26 +249,23 @@ def loudness_norm( Normalized audio """ # repeat until convergence of loudness measured_loudness = np.inf scale_factor = 1 num_iter = 1 scaled_input = copy.deepcopy(input) # save loudness before and after scaling for the logger info loudness_before, scale_factor_new = get_loudness( input, target_loudness, loudness_format scaled_input, target_loudness, loudness_format, rms ) # repeat until convergence of loudness while np.abs(measured_loudness - target_loudness) > 0.5 and num_iter < 10: # scale input input.audio *= scale_factor_new # update scale factor scale_factor *= scale_factor_new scaled_input.audio *= scale_factor_new # measure loudness and get scaling factor measured_loudness, scale_factor_new = get_loudness( input, target_loudness, loudness_format scaled_input, target_loudness, loudness_format, rms ) num_iter += 1 Loading @@ -270,7 +288,7 @@ def loudness_norm( f"Loudness did not converge to desired value, stopping at: {loudness_after:.2f}" ) return input.audio return scaled_input.audio def scale_files( Loading Loading @@ -323,7 +341,7 @@ def scale_files( # adjust loudness scaled_audio = loudness_norm( audio_obj, loudness, loudness_format, logger, file audio_obj, loudness, loudness_format, logger=logger, file_name_logging=file, ) # write into file Loading ivas_processing_scripts/bin/README.md +2 −2 Original line number Diff line number Diff line Loading @@ -3,7 +3,7 @@ Necessary additional executables: | Processing step | Executable | Where to find | |-------------------------------------------------|-----------------------|-------------------------------------------------------------------------------------------------------------| | Loudness measurement and adjustment | bs1770demo | https://github.com/openitu/STL | | Loudness measurement and adjustment | bs1770demo | https://github.com/ErikNorvell-Ericsson/STL (Note branch) | | MNRU | p50fbmnru | https://github.com/openitu/STL | | ESDRU | esdru | https://github.com/openitu/STL | | Frame error pattern application | eid-xor | https://github.com/openitu/STL | Loading ivas_processing_scripts/processing/preprocessing_2.py +1 −1 Original line number Diff line number Diff line Loading @@ -171,7 +171,7 @@ class Preprocessing2(Processing): f"Scaling of background noise to {self.background_noise['snr']}dB SNR" ) noise_object.audio = loudness_norm( noise_object, loudness_noise, out_format, logger noise_object, loudness_noise, out_format, rms=True, logger=logger, ) # add array to signal Loading Loading
README.md +1 −1 Original line number Diff line number Diff line Loading @@ -513,7 +513,7 @@ The following additional executables are needed for the different processing ste | Processing step | Executable | Where to find | |-------------------------------------------------|-----------------------|-------------------------------------------------------------------------------------------------------------| | Loudness measurement and adjustment | bs1770demo | https://github.com/openitu/STL | | Loudness measurement and adjustment | bs1770demo | https://github.com/ErikNorvell-Ericsson/STL (Note branch) | | MNRU | p50fbmnru | https://github.com/openitu/STL | | ESDRU | esdru | https://github.com/openitu/STL | | Frame error pattern application | eid-xor | https://github.com/openitu/STL | Loading
ivas_processing_scripts/audiotools/wrappers/bs1770.py +32 −14 Original line number Diff line number Diff line Loading @@ -33,6 +33,7 @@ import copy import logging import re import subprocess as sp from pathlib import Path from tempfile import TemporaryDirectory from typing import Optional, Tuple, Union Loading @@ -50,6 +51,7 @@ from ivas_processing_scripts.utils import find_binary, get_devnull, run def bs1770demo( input: audio.Audio, target_loudness: Optional[float] = -26, rms: Optional[bool] = False, ) -> Tuple[float, float]: """ Wrapper for ITU-R BS.1770-4, requires bs1770demo binary Loading @@ -60,6 +62,8 @@ def bs1770demo( Input audio target_loudness: Optional[float] Desired loudness in LKFS rms: Optional[bool] Flag for using rms argument in bs1770demo tool (for low level signals) Returns ------- Loading @@ -79,6 +83,14 @@ def bs1770demo( else: binary = find_binary("bs1770demo") # checking if the new binary (with '-rms') is used result = sp.run(str(binary), shell=True, stdout=sp.PIPE, stderr=sp.PIPE) result_stdout = result.stdout.decode("utf-8") if "-rms" not in result_stdout: raise RuntimeError( 'An bs1770demo executable without RMS support (cmdl option "-rms") was detected. Please update the bs1770demo executable. See bin/README.md for details.' ) if not isinstance(input, audio.BinauralAudio) and not isinstance( input, audio.ChannelBasedAudio ): Loading Loading @@ -128,6 +140,10 @@ def bs1770demo( # write temporary file write(tmp_file, tmp_sig, 48000) # using rms if true if rms: cmd.insert(1, "-rms") # run command result = run(cmd) Loading @@ -147,6 +163,7 @@ def get_loudness( input: audio.Audio, target_loudness: Optional[float] = -26, loudness_format: Optional[str] = None, rms: Optional[bool] = False, ) -> Tuple[float, float]: """ Loudness measurement using ITU-R BS.1770-4 Loading @@ -155,10 +172,12 @@ def get_loudness( ---------- input : Audio Input audio target_loudness: float target_loudness: Optional[float] Desired loudness in LKFS loudness_format: str loudness_format: Optional[str] Loudness format to render to for loudness computation (default input format if possible) rms: Optional[bool] Flag for using rms argument in bs1770demo tool (for low level signals) Returns ------- Loading Loading @@ -193,14 +212,14 @@ def get_loudness( convert.format_conversion(input, tmp) else: tmp.audio = input.audio return bs1770demo(tmp, target_loudness) return bs1770demo(tmp, target_loudness, rms) def loudness_norm( input: audio.Audio, target_loudness: Optional[float] = -26, loudness_format: Optional[str] = None, rms: Optional[bool] = False, logger: Optional[logging.Logger] = None, file_name_logging: Optional[Union[str, Path]] = None, ) -> np.ndarray: Loading @@ -217,6 +236,8 @@ def loudness_norm( Desired loudness level in LKFS loudness_format: Optional[str] Loudness format to render to for loudness computation (default input format) rms: Optional[bool] Flag for using rms argument in bs1770demo tool (for low level signals) logger: Optional[logging.Logger] Logger to log loudness information file_name_logging: Optional[Union[str, Path]] Loading @@ -228,26 +249,23 @@ def loudness_norm( Normalized audio """ # repeat until convergence of loudness measured_loudness = np.inf scale_factor = 1 num_iter = 1 scaled_input = copy.deepcopy(input) # save loudness before and after scaling for the logger info loudness_before, scale_factor_new = get_loudness( input, target_loudness, loudness_format scaled_input, target_loudness, loudness_format, rms ) # repeat until convergence of loudness while np.abs(measured_loudness - target_loudness) > 0.5 and num_iter < 10: # scale input input.audio *= scale_factor_new # update scale factor scale_factor *= scale_factor_new scaled_input.audio *= scale_factor_new # measure loudness and get scaling factor measured_loudness, scale_factor_new = get_loudness( input, target_loudness, loudness_format scaled_input, target_loudness, loudness_format, rms ) num_iter += 1 Loading @@ -270,7 +288,7 @@ def loudness_norm( f"Loudness did not converge to desired value, stopping at: {loudness_after:.2f}" ) return input.audio return scaled_input.audio def scale_files( Loading Loading @@ -323,7 +341,7 @@ def scale_files( # adjust loudness scaled_audio = loudness_norm( audio_obj, loudness, loudness_format, logger, file audio_obj, loudness, loudness_format, logger=logger, file_name_logging=file, ) # write into file Loading
ivas_processing_scripts/bin/README.md +2 −2 Original line number Diff line number Diff line Loading @@ -3,7 +3,7 @@ Necessary additional executables: | Processing step | Executable | Where to find | |-------------------------------------------------|-----------------------|-------------------------------------------------------------------------------------------------------------| | Loudness measurement and adjustment | bs1770demo | https://github.com/openitu/STL | | Loudness measurement and adjustment | bs1770demo | https://github.com/ErikNorvell-Ericsson/STL (Note branch) | | MNRU | p50fbmnru | https://github.com/openitu/STL | | ESDRU | esdru | https://github.com/openitu/STL | | Frame error pattern application | eid-xor | https://github.com/openitu/STL | Loading
ivas_processing_scripts/processing/preprocessing_2.py +1 −1 Original line number Diff line number Diff line Loading @@ -171,7 +171,7 @@ class Preprocessing2(Processing): f"Scaling of background noise to {self.background_noise['snr']}dB SNR" ) noise_object.audio = loudness_norm( noise_object, loudness_noise, out_format, logger noise_object, loudness_noise, out_format, rms=True, logger=logger, ) # add array to signal Loading