Commit d0bb519f authored by Vinit Veera's avatar Vinit Veera
Browse files

Adding support for the new binary.

parent bbcd4b0a
Loading
Loading
Loading
Loading
Loading
+32 −5
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
@@ -53,6 +54,7 @@ logger.setLevel(logging.DEBUG)
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
@@ -82,6 +84,16 @@ def bs1770demo(
    else:
        binary = find_binary("bs1770demo")

    # checking if the new binary (with '-rms') is used
    with TemporaryDirectory() as tmp_dir_test:
        tmp_dir_test = Path(tmp_dir_test)
        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 old version of bs1770demo binary was detected. Use the new one. See bin/README.md for details."
            )

    if not isinstance(input, audio.BinauralAudio) and not isinstance(
        input, audio.ChannelBasedAudio
    ):
@@ -131,6 +143,9 @@ 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, logger=logger)

@@ -150,6 +165,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
@@ -196,7 +212,9 @@ def get_loudness(
        convert.format_conversion(input, tmp)
    else:
        tmp.audio = input.audio

    if rms:
        return bs1770demo(tmp, target_loudness, rms=True)
    else:
        return bs1770demo(tmp, target_loudness)


@@ -204,6 +222,7 @@ def loudness_norm(
    input: audio.Audio,
    target_loudness: Optional[float] = -26,
    loudness_format: Optional[str] = None,
    rms: Optional[bool] = False,
) -> np.ndarray:
    """
    Iterative loudness normalization using ITU-R BS.1770-4
@@ -231,6 +250,14 @@ def loudness_norm(
    num_iter = 1

    while np.abs(measured_loudness - target_loudness) > 0.5 and num_iter < 10:
        if rms:
            measured_loudness, scale_factor_new = get_loudness(
                input,
                target_loudness,
                loudness_format,
                rms=True,
            )
        else:
            measured_loudness, scale_factor_new = get_loudness(
                input, target_loudness, loudness_format
            )
+3 −1
Original line number Diff line number Diff line
@@ -149,7 +149,9 @@ class Preprocessing2(Processing):
        )[: len(audio_object.audio)]

        # scale background noise to desired loudness based on output format
        noise_object.audio = loudness_norm(noise_object, loudness_noise, out_format)
        noise_object.audio = loudness_norm(
            noise_object, loudness_noise, out_format, rms=True
        )

        # add array to signal
        audio_object.audio = noise_object.audio + audio_object.audio