Commit 5a70b33a authored by Jan Kiene's avatar Jan Kiene
Browse files

add MD% hash generation script in python for cross-platform use

- also adapted for characterization (new dir structure for P800)
parent 12d102ed
Loading
Loading
Loading
Loading
Loading

other/get_md5.ps1

deleted100644 → 0
+0 −42
Original line number Diff line number Diff line
#   (C) 2022-2025 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB,
#   Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD.,
#   Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange,
#   Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other
#   contributors to this repository. All Rights Reserved.

#   This software is protected by copyright law and by international treaties.
#   The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB,
#   Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD.,
#   Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange,
#   Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other
#   contributors to this repository retain full ownership rights in their respective contributions in
#   the software. This notice grants no license of any kind, including but not limited to patent
#   license, nor is any license granted by implication, estoppel or otherwise.

#   Contributors are required to enter into the IVAS codec Public Collaboration agreement before making
#   contributions.

#   This software is provided "AS IS", without any express or implied warranties. The software is in the
#   development stage. It is intended exclusively for experts who have experience with such software and
#   solely for the purpose of inspection. All implied warranties of non-infringement, merchantability
#   and fitness for a particular purpose are hereby disclaimed and excluded.

#   Any dispute, controversy or claim arising under or in relation to providing this software shall be
#   submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in
#   accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and
#   the United Nations Convention on Contracts on the International Sales of Goods.

param(
    [Parameter(Mandatory)]
    [String]$proc_output_dir,
    [Parameter(Mandatory)]
    [String]$out_file
)

(Get-ChildItem $proc_output_dir -Recurse | Where-Object { $_.Name -like '*c??.wav' }) | 
ForEach-Object { 
    $name = $_.Name
    $hash = (Get-FileHash $_.FullName -Algorithm MD5).Hash

    "$name $hash" >> $out_file
} 
 No newline at end of file
+43 −27
Original line number Diff line number Diff line
#!/bin/sh

#   (C) 2022-2025 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB,
#! /usr/bin/env python3
#   (C) 2022-2024 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB,
#   Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD.,
#   Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange,
#   Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other
@@ -28,27 +27,44 @@
#   accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and
#   the United Nations Convention on Contracts on the International Sales of Goods.

# simple script to create MD5 files as if produced by Microsoft Powershell
# run from within proc_output_x folder

if [ $# -lt 2 ]; then
    echo "Usage: $0 proc_output_dir testname.md5"
    echo "Requires: md5sum (Linux) or md5 (macOS)"
    exit 1
fi

system=$(uname -s)

if [ "$system" = "Darwin" ]; then
    md5="md5 -r"
else
    md5=md5sum
fi

tmpfile=`mktemp`
echo "" > $tmpfile
for f in $(find $1 -name "*c??.wav"); do
    echo ${f##*/} $($md5 $f | awk '{ print toupper($1) }') >> $tmpfile
done
cat $tmpfile | sort > $2
rm -f $tmpfile
import argparse
from pathlib import Path
from hashlib import md5


def get_hash_line_for_file(file: Path, experiment_dir: Path):
    with open(file, "rb") as f:
        hash = md5(f.read()).hexdigest()

    filepath = file.relative_to(experiment_dir)
    # always print forward slashes even on windows to be able to diff the result files
    hashline = f"{str(filepath.as_posix())} {hash}\n"

    return hashline


def main(experiment_dir, out_file):
    wav_files = sorted(experiment_dir.glob("proc_output*/**/*c??.wav"))

    hashlines = [get_hash_line_for_file(f, experiment_dir) for f in wav_files]

    with open(out_file, "w") as f:
        f.writelines(hashlines)


if __name__ == "__main__":
    parser = argparse.ArgumentParser(
        description="Cross-platform script for generating MD5 hashes of output files for the characterization testing experiments."
    )
    parser.add_argument(
        "experiment_dir",
        type=Path,
        help="Directory of the respective experiment (e.g. experiments/characterization/P800-12",
    )
    parser.add_argument(
        "out_file", type=Path, help="Output text file with filenames and Hashes"
    )

    args = parser.parse_args()

    main(args.experiment_dir, args.out_file)