Commit 30b12f8d authored by Jan Kiene's avatar Jan Kiene
Browse files

Merge branch '93-add-correct-24-bit-wav-file-handling-to-scripts-pyaudio3dtools' into 'main'

Resolve "Add correct 24-Bit wav file handling to scripts/pyaudio3dtools"

See merge request !106
parents eac6a8b3 3f7bbf9a
Loading
Loading
Loading
Loading
Loading
+19 −8
Original line number Diff line number Diff line
@@ -35,6 +35,7 @@ import platform
import shutil
import struct
import subprocess as sp
import warnings
from importlib import import_module
from tempfile import TemporaryDirectory
from typing import Optional, Tuple
@@ -73,6 +74,18 @@ def readfile(

    if file_extension == ".wav":
        fs, data = wav.read(filename)
        if data.dtype == np.int32:
            data = np.interp(
                data,
                (np.iinfo(np.int32).min, np.iinfo(np.int32).max),
                (np.iinfo(np.int16).min, np.iinfo(np.int16).max),
            )
        elif data.dtype == np.float32:
            data = np.interp(
                data,
                (-1, 1),
                (np.iinfo(np.int16).min, np.iinfo(np.int16).max),
            )
        x = np.array(data, dtype=outdtype)
        file_len = x.shape[0]
        if x.ndim == 1:
@@ -107,9 +120,11 @@ def writefile(filename: str, x: np.ndarray, fs: int = 48000) -> None:
    """
    _, file_extension = os.path.splitext(os.path.basename(filename))

    clipped_samples = np.sum(np.logical_or(x < np.iinfo(np.int16).min, x > np.iinfo(np.int16).max))
    clipped_samples = np.sum(
        np.logical_or(x < np.iinfo(np.int16).min, x > np.iinfo(np.int16).max)
    )
    if clipped_samples > 0:
        print("  Warning: %i samples clipped"%clipped_samples)
        warnings.warn(f"  Warning: {clipped_samples} samples clipped")
        x = np.clip(x, np.iinfo(np.int16).min, np.iinfo(np.int16).max)

    if file_extension == ".wav":
@@ -489,7 +504,6 @@ def loudnessinfo(
    in_sig: np.ndarray,
    in_fs: Optional[int] = 48000,
    in_format: Optional[str] = "MONO",
    in_ls_layout_file: Optional[str] = None,
    output_loudness: Optional[int] = -26,
    loudness_tool: Optional[str] = "bs1770demo",
    use_rms: Optional[bool] = False,
@@ -524,13 +538,10 @@ def loudnessinfo(
    else:
        null_file = "/dev/null"

    # check for binary
    if shutil.which(loudness_tool) is None:
        raise FileNotFoundError(f"The binary {loudness_tool} was not found in path!")

    in_spfmt = spatialaudioformat.Format(
        in_format=in_format, ls_layout_file=in_ls_layout_file
    )
    in_spfmt = spatialaudioformat.Format(in_format=in_format)

    if not (in_spfmt.isheadphones or in_spfmt.isloudspeaker or in_spfmt.ambi_order > 1):
        raise NotImplementedError(
@@ -543,7 +554,7 @@ def loudnessinfo(
        )

    with TemporaryDirectory() as tmp_dir:
        tmp_file = os.path.join(tmp_dir, "tmp.pcm")
        tmp_file = os.path.join(tmp_dir, "tmp_loudness.pcm")

        if "bs1770demo" in loudness_tool:
            """