Commit e6aca3ab authored by Jan Kiene's avatar Jan Kiene
Browse files

add csv output and cleanup

parent 38a5d143
Loading
Loading
Loading
Loading
+21 −29
Original line number Diff line number Diff line
@@ -47,7 +47,10 @@ FILES_EQUAL = "File A = File B"
SNR_EXPR = r"SNR\s+=(.+)dB\s*\(File B Gain = (.+)\)"
SEG_SNR_EXPR = r"Seg. SNR\s+=(.+)dB"
DIFF_EXPR = r"Max Diff\s+=\s+(\d+)"

DIFF_STR = {
    "CompAudio": "{label} Max. diff (PCM) for file {f}: {diff}",
    "mld": "{label} MLD diff for file {f}: {diff}",
        }

def main(args):

@@ -60,14 +63,14 @@ def main(args):

    with OutFileManager(args.out_file) as out_file:
        if args.diffs_only:
            print("Only printing differing files!", file=out_file)
            print("Only printing differing files!")

        fol1, fol2 = os.path.normpath(args.folder1), os.path.normpath(args.folder2)
        common_files = get_common_files(fol1, fol2)
        diff_files = get_diff_files(fol1, fol2)
        num_files_diff = len(diff_files)

        print(f"Comparing {len(common_files)} files...", file=out_file)
        print(f"Comparing {len(common_files)} files...")

        outputs = dict()
        if args.num_threads > 1:
@@ -89,10 +92,17 @@ def main(args):
                compare_files(f, fol1, fol2, outputs, tool)

        if args.sort:
            out = dict(sorted(outputs.items(), key=SORT_FUNC[tool]))
            out = dict(sorted(outputs.items(), key=lambda item: item[1]))
        else:
            out = outputs

        # write csv header
        if out_file is not None:
            if tool == "CompAudio":
                out_file.write("filename,diff\n")
            elif tool == "mld":
                out_file.write("filename,mld\n")

        for f, tool_output in out.items():

            if tool == "CompAudio":
@@ -114,12 +124,15 @@ def main(args):
                    result += f", SNR = {snr:4.2f} dB (File 2 Gain = {gain:4.3f})"
                    result += f", Seg. SNR = {seg_snr:4.2f} dB"

                print(result, file=out_file)
                print(result)
                
                if out_file is not None:
                    out_file.write(f"{f},{diff}\n")

        if num_files_diff > 0:
            print(f"{num_files_diff} files differ/don't exist", file=out_file)
            print(f"{num_files_diff} files differ/don't exist")
        else:
            print(f"All files are bitexact", file=out_file)
            print(f"All files are bitexact")


def compare_files(f, fol1, fol2, outputs_dict, tool):
@@ -220,27 +233,6 @@ def _parse_comp_audio(output):
    return diff, snr, gain, seg_snr


def _parse_mld(output):
    output = output.decode("utf-8")
    mld = float(output.split()[-1])

    return mld


PARSE_FUNC = {
    "CompAudio": _parse_comp_audio,
    "mld": _parse_mld,
        }
SORT_FUNC = {
        "CompAudio": lambda item: item[1],
        "mld": lambda item: item,
        }
DIFF_STR = {
    "CompAudio": "{label} Max. diff (PCM) for file {f}: {diff}",
    "mld": "{label} MLD diff for file {f}: {diff}",
        }


class OutFileManager:
    def __init__(self, out_file):
        self.out_file = out_file
@@ -287,7 +279,7 @@ if __name__ == "__main__":
        "--out_file",
        type=str,
        default=None,
        help="If given, write output diffs to this file",
        help="If given, write output diffs to this file as comma-separated values (csv)",
    )
    parser.add_argument(
        "-t", "--num_threads", type=int, default=1, help="Number of threads to use"