Commit 1d267f95 authored by Anika Treffehn's avatar Anika Treffehn
Browse files

merged main and fixed small stuff

parents 8f8314da 0105e07f
Loading
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -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                                                                              |
+32 −14
Original line number Diff line number Diff line
@@ -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
@@ -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
@@ -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
    -------
@@ -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
    ):
@@ -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)

@@ -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
@@ -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
    -------
@@ -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:
@@ -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]]
@@ -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
@@ -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(
@@ -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
+2 −2
Original line number Diff line number Diff line
@@ -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                                                                              |
+1 −1
Original line number Diff line number Diff line
@@ -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