Skip to content

Loudness processing not implemented for OSBA

For OSBA, the loudness processing seems to be missing. I did not test for OMASA, but there might be the same problem there.

Config I used for testing:

osba.yml

This causes an error in the scripts:

"""
Traceback (most recent call last):
  File "/opt/homebrew/Caskroom/miniforge/base/envs/ivas-proc-scripts/lib/python3.13/multiprocessing/pool.py", line 125, in worker
    result = (True, func(*args, **kwds))
                    ~~~~^^^^^^^^^^^^^^^
  File "/opt/homebrew/Caskroom/miniforge/base/envs/ivas-proc-scripts/lib/python3.13/multiprocessing/pool.py", line 51, in starmapstar
    return list(itertools.starmap(args[0], args[1]))
  File "/Users/knj/Documents/IVAS/ivas-processing-scripts/ivas_processing_scripts/processing/processing.py", line 572, in process_item
    p.process(input, output, input_meta, item_logger)
    ~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/knj/Documents/IVAS/ivas-processing-scripts/ivas_processing_scripts/processing/preprocessing.py", line 49, in process
    convert.convert_file(
    ~~~~~~~~~~~~~~~~~~~~^
        in_file, out_file, logger=logger, in_meta=in_meta, **self.__dict__
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    )
    ^
  File "/Users/knj/Documents/IVAS/ivas-processing-scripts/ivas_processing_scripts/audiotools/convert/__init__.py", line 161, in convert_file
    convert(input, output, in_fs=in_fs, out_fs=out_fs, logger=logger, **kwargs)
    ~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/knj/Documents/IVAS/ivas-processing-scripts/ivas_processing_scripts/audiotools/convert/__init__.py", line 215, in convert
    process_audio(
    ~~~~~~~~~~~~~^
        x=input,
        ^^^^^^^^
    ...<11 lines>...
        logger=logger,
        ^^^^^^^^^^^^^^
    )
    ^
  File "/Users/knj/Documents/IVAS/ivas-processing-scripts/ivas_processing_scripts/audiotools/convert/__init__.py", line 348, in process_audio
    x.audio, _ = loudness_norm(x, loudness, loudness_fmt, logger=logger)
                 ~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/knj/Documents/IVAS/ivas-processing-scripts/ivas_processing_scripts/audiotools/wrappers/bs1770.py", line 265, in loudness_norm
    loudness_before, scale_factor_new, loundness_fmt_used = get_loudness(
                                                            ~~~~~~~~~~~~^
        scaled_input, target_loudness, loudness_format, rms
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    )
    ^
  File "/Users/knj/Documents/IVAS/ivas-processing-scripts/ivas_processing_scripts/audiotools/wrappers/bs1770.py", line 219, in get_loudness
    measured_loudness, scale_factor = bs1770demo(tmp, target_loudness, rms)
                                      ~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/knj/Documents/IVAS/ivas-processing-scripts/ivas_processing_scripts/audiotools/wrappers/bs1770.py", line 95, in bs1770demo
    raise NotImplementedError(f"{input.name} is unsupported in ITU-R BS.1770-4.")
NotImplementedError: ISM4SBA3 is unsupported in ITU-R BS.1770-4.
"""

One can comment out the luodness processing in input:, but there is another one in postprocessing: which causes this issue then:


Traceback (most recent call last):
  File "/opt/homebrew/Caskroom/miniforge/base/envs/ivas-proc-scripts/lib/python3.13/multiprocessing/pool.py", line 125, in worker
    result = (True, func(*args, **kwds))
                    ~~~~^^^^^^^^^^^^^^^
  File "/opt/homebrew/Caskroom/miniforge/base/envs/ivas-proc-scripts/lib/python3.13/multiprocessing/pool.py", line 51, in starmapstar
    return list(itertools.starmap(args[0], args[1]))
  File "/Users/knj/Documents/IVAS/ivas-processing-scripts/ivas_processing_scripts/processing/processing.py", line 572, in process_item
    p.process(input, output, input_meta, item_logger)
    ~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/knj/Documents/IVAS/ivas-processing-scripts/ivas_processing_scripts/processing/processing_splitting_scaling.py", line 129, in process
    file_splits = adjust_loudness(
        file_splits,
    ...<5 lines>...
        logger,
    )
  File "/Users/knj/Documents/IVAS/ivas-processing-scripts/ivas_processing_scripts/processing/processing_splitting_scaling.py", line 310, in adjust_loudness
    scaled_signal, _ = loudness_norm(
                       ~~~~~~~~~~~~~^
        audio_object, loudness, loudness_fmt, logger=logger
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    )
    ^
  File "/Users/knj/Documents/IVAS/ivas-processing-scripts/ivas_processing_scripts/audiotools/wrappers/bs1770.py", line 265, in loudness_norm
    loudness_before, scale_factor_new, loundness_fmt_used = get_loudness(
                                                            ~~~~~~~~~~~~^
        scaled_input, target_loudness, loudness_format, rms
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    )
    ^
  File "/Users/knj/Documents/IVAS/ivas-processing-scripts/ivas_processing_scripts/audiotools/wrappers/bs1770.py", line 216, in get_loudness
    convert.format_conversion(input, tmp)
    ~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^
  File "/Users/knj/Documents/IVAS/ivas-processing-scripts/ivas_processing_scripts/audiotools/convert/__init__.py", line 418, in format_conversion
    convert_osba(input, output, **kwargs)
    ~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/knj/Documents/IVAS/ivas-processing-scripts/ivas_processing_scripts/audiotools/convert/osba.py", line 76, in convert_osba
    render_oba_to_binaural(oba, out_ism, **kwargs)
    ~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/knj/Documents/IVAS/ivas-processing-scripts/ivas_processing_scripts/audiotools/convert/objectbased.py", line 143, in render_oba_to_binaural
    bin.audio = np.sum(np.stack(result, axis=2), axis=2)
                       ~~~~~~~~^^^^^^^^^^^^^^^^
  File "/opt/homebrew/Caskroom/miniforge/base/envs/ivas-proc-scripts/lib/python3.13/site-packages/numpy/_core/shape_base.py", line 456, in stack
    raise ValueError('need at least one array to stack')
ValueError: need at least one array to stack

Commenting out both loudness processing steps makes the scripts run through successfully.