diff --git a/scripts/pyaudio3dtools/audiofile.py b/scripts/pyaudio3dtools/audiofile.py index 46bb452082c7d8a0cca04875bc5bca1dd399ccdf..b03b472ae908aa3d57269d3b9fede4167deb3eeb 100755 --- a/scripts/pyaudio3dtools/audiofile.py +++ b/scripts/pyaudio3dtools/audiofile.py @@ -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: """