Commit 33e28543 authored by Archit Tamarapu's avatar Archit Tamarapu
Browse files

[fix] use correct bandwidth file for reference loudness

parent 5f621f43
Loading
Loading
Loading
Loading
Loading
+41 −7
Original line number Diff line number Diff line
@@ -73,6 +73,7 @@ CFG_TO_PROC_FMT = {

PATTERN_BITRATE = r"b([\d_]*|all)(_dtx)?_(swb|wb|fb)"
RESULT_OUTPUT_FILE = Path(__file__).parent.parent.joinpath("loudness.csv")
BANDWIDTH_TO_FS = {"wb": "16", "swb": "32", "fb": "48"}


def find_metadata_files(format, file):
@@ -241,15 +242,34 @@ def main(args):
        output_folder = OUTPUT_FOLDER
        pattern = re.compile(rf"{re.escape(cfg_fmt)}_{PATTERN_BITRATE}")

        # Load and cache input audio once per format
        if proc_fmt not in input_audio_cache:
        # Load and cache input audio for each format and bandwidth combination
        for bw in BANDWIDTH_TO_FS.keys():
            cache_key = (proc_fmt, bw)

            if cache_key not in input_audio_cache:
                fs = BANDWIDTH_TO_FS[bw]
                pcm_folder = OUTPUT_FOLDER.parent.joinpath("pcm")
                resampled_file = (
                    pcm_folder
                    / f"{infile.stem}_{fs}_{replacements.get(cfg_fmt, cfg_fmt)}.pcm"
                )

                if not resampled_file.exists():
                    print(
                        f"\n⚠️  Resampled file not found: {resampled_file}",
                        file=sys.stderr,
                    )
                    continue

                # Load metadata from the original file
                metadata = find_metadata_files(proc_fmt, infile)

            input_audio = fromfile(proc_fmt, infile, in_meta=metadata)
                # Measure input loudness
                input_audio = fromfile(
                    proc_fmt, resampled_file, fs=int(fs) * 1000, in_meta=metadata
                )
                input_loudness, _, input_loudness_format = get_loudness(input_audio)
            input_audio_cache[proc_fmt] = (input_loudness, input_loudness_format)

        input_loudness, input_loudness_format = input_audio_cache[proc_fmt]
                input_audio_cache[cache_key] = (input_loudness, input_loudness_format)

        # Find all output files for this format
        output_files = [
@@ -259,6 +279,20 @@ def main(args):
        ]

        for outfile in output_files:
            # Get bandwidth from output filename to look up correct cached input
            try:
                _, _, _, bandwidth = get_metadata_from_outfile_name(
                    pattern, outfile, infile.stem
                )
            except:
                continue

            cache_key = (proc_fmt, bandwidth)
            if cache_key not in input_audio_cache:
                continue

            input_loudness, input_loudness_format = input_audio_cache[cache_key]

            tasks.append(
                (
                    outfile,