Loading ci/run-first-frame-is-sid-test.sh +74 −16 Original line number Diff line number Diff line Loading @@ -2,7 +2,55 @@ ### This test assures that for all DTX modes, decoding a bitstream that starts with an SID frame does not crash the decoder or cause a sanitizer error set -euxo pipefail set -euo pipefail collect_failed_logs() { local console_output="$1" local log_dir="${2:-logs}" local output_dir="${3:-failed_logs}" local temp_failures=$(mktemp) if [ ! -f "$console_output" ]; then echo "Error: Console output file '$console_output' not found" >&2 rm -f "$temp_failures" return 1 fi mkdir -p "$output_dir" # Extract filenames from failed enc/dec chains from the console log # turn off fail on non-zero exit code to not fail on grep not matching any line (which is the case if everything is ok) set +e grep -iE '(encoding|decoding).*failed|failed.*(encoding|decoding)' "$console_output" | grep -oE '[^[:space:]]+\.(192|wav|pcm)' | while IFS= read -r filepath; do # need basename wihtou suffix only for matching filename=$(basename "$filepath") filename_no_ext="${filename%.*}" echo "$filename_no_ext" done | sort -u >"$temp_failures" set -e # Copy matching log files to output directory if [ -s "$temp_failures" ]; then echo "Copying log files for failed tasks to $output_dir..." while IFS= read -r basename_pattern; do # Find log files starting with this basename while IFS= read -r logfile; do cp -v "$logfile" "$output_dir/" done < <(find "$log_dir" -type f -name "${basename_pattern}*") done <"$temp_failures" echo "Done." else echo "No failures detected in $console_output" fi # Cleanup rm -f "$temp_failures" return 0 } # build encoder without sanitizers for faster runtime make clean Loading Loading @@ -31,17 +79,14 @@ exit_code_msan_no_stereo=0 exit_code_msan_stereo=0 echo "-------------- 1. Encoder + Msan decoder -------------- " echo "-------------- 1.1 all DTX modes except stereo -------------- " scripts/IvasBuildAndRunChecks.py --checks CLANG1 -m $modes_no_stereo -U 0:20 $common_args || exit_code_msan_no_stereo=$? scripts/IvasBuildAndRunChecks.py --checks CLANG1 -m $modes_no_stereo -U 0:20 $common_args 2>&1 | tee "console_log_msan.txt" || exit_code_msan_no_stereo=$? echo "-------------- 1.2 stereo DTX modes -------------- " scripts/IvasBuildAndRunChecks.py --checks CLANG1 -m $modes_stereo -U 40:60 $common_args || exit_code_msan_stereo=$? # archive encoder logs separately mkdir logs_enc logs_dec_msan mv CLANG1/logs/*.enc.txt logs_enc/ mv CLANG1/logs/*.dec*.txt logs_dec_msan/ scripts/IvasBuildAndRunChecks.py --checks CLANG1 -m $modes_stereo -U 40:60 $common_args 2>&1 | tee -a "console_log_msan.txt" || exit_code_msan_stereo=$? # sanity check: ensure that we have DTX frames in the cut bitstreams # only need to do this once here as encoder is not run again after this grep_exit_code=0 grep -r "Extracted 0 frames!" logs_enc/ || grep_exit_code=$? grep -r "Extracted 0 frames!" CLANG1/logs/ || grep_exit_code=$? if [ $grep_exit_code -ne 1 ]; then echo "Some bitstreams did not contain any SID frame!" echo -e "Check the input signals and/or the VAD performance!\n" Loading @@ -49,22 +94,35 @@ if [ $grep_exit_code -ne 1 ]; then exit 1 fi # ASAN and USAN can be done in one go and decoder only # ASAN and USAN can be done decoder only # copy encoder output from CLANG1 dir mkdir CLANG2 CLANG3 cp -r CLANG1/enc CLANG2/enc cp -r CLANG1/enc CLANG3/enc # In this run, we can do all the dtx modes together - we only run the decoder, so no cutting of input files needed # In the next runs, we can do all the dtx modes together - we only run the decoder, so no cutting of input files needed # the script does no put the cut length into the bitstream name, so the decoder can find the existing bitstreams this way modes_all=$(scripts/runIvasCodec.py -l | grep dtx) exit_code_asan_usan=0 echo "-------------- 2. Asan + Usan decoder (all in one go) -------------- " scripts/IvasBuildAndRunChecks.py --checks CLANG2 CLANG3 --decoder_only -m $modes_all $common_args || exit_code_asan_usan=$? mv CLANG2/logs logs_dec_asan mv CLANG3/logs logs_dec_usan exit_code_asan=0 echo "-------------- 2. Asan decoder -------------- " scripts/IvasBuildAndRunChecks.py --checks CLANG2 --decoder_only -m $modes_all $common_args 2>&1 | tee "console_log_asan.txt" || exit_code_asan=$? exit_code_usan=0 echo "-------------- 3. Usan decoder -------------- " scripts/IvasBuildAndRunChecks.py --checks CLANG3 --decoder_only -m $modes_all $common_args 2>&1 | tee "console_log_usan.txt" || exit_code_usan=$? if [ $exit_code_msan_no_stereo -ne 0 ] || [ $exit_code_msan_stereo -ne 0 ] || [ $exit_code_asan_usan -ne 0 ]; then echo "-------------- 4. Collect logs -------------- " # everything went as expected, now collect logs collect_failed_logs console_log_msan.txt CLANG1/logs logs/msan collect_failed_logs console_log_asan.txt CLANG2/logs logs/asan collect_failed_logs console_log_usan.txt CLANG3/logs logs/usan echo "-------------- 5. Check for errors -------------- " if [ $exit_code_msan_no_stereo -ne 0 ] || [ $exit_code_msan_stereo -ne 0 ] || [ $exit_code_asan -ne 0 ] || [ $exit_code_usan -ne 0 ]; then echo "There was either a crash or a sanitizer error encountered when decoding a bitstream that starts with an SID. Check the artifacts for the logfiles." exit 1 fi echo "No errors occured." exit 0 scripts/copy-ltv-metadata.sh 0 → 100755 +249 −0 Original line number Diff line number Diff line #!/bin/bash set -x if [[ -z "${LTV_DIR}" ]]; then echo "Error: LTV_DIR environment variable must be set" >&2 exit 1 fi cd $LTV_DIR # ISM cp ltvISM1.csv ltv16_1ISM.wav.0.csv cp ltvISM1.csv ltv32_1ISM.wav.0.csv cp ltv1ISM.csv ltv48_1ISM.wav.0.csv cp ltvISM1.csv ltv16_2ISM.wav.0.csv cp ltvISM2.csv ltv16_2ISM.wav.1.csv cp ltvISM1.csv ltv32_2ISM.wav.0.csv cp ltvISM2.csv ltv32_2ISM.wav.1.csv cp ltv1ISM.csv ltv48_2ISM.wav.0.csv cp ltv2ISM.csv ltv48_2ISM.wav.1.csv cp ltvISM1.csv ltv16_3ISM.wav.0.csv cp ltvISM2.csv ltv16_3ISM.wav.1.csv cp ltvISM3.csv ltv16_3ISM.wav.2.csv cp ltvISM1.csv ltv32_3ISM.wav.0.csv cp ltvISM2.csv ltv32_3ISM.wav.1.csv cp ltvISM3.csv ltv32_3ISM.wav.2.csv cp ltv1ISM.csv ltv48_3ISM.wav.0.csv cp ltv2ISM.csv ltv48_3ISM.wav.1.csv cp ltv3ISM.csv ltv48_3ISM.wav.2.csv cp ltvISM1.csv ltv16_4ISM.wav.0.csv cp ltvISM2.csv ltv16_4ISM.wav.1.csv cp ltvISM3.csv ltv16_4ISM.wav.2.csv cp ltvISM4.csv ltv16_4ISM.wav.3.csv cp ltvISM1.csv ltv32_4ISM.wav.0.csv cp ltvISM2.csv ltv32_4ISM.wav.1.csv cp ltvISM3.csv ltv32_4ISM.wav.2.csv cp ltvISM4.csv ltv32_4ISM.wav.3.csv cp ltv1ISM.csv ltv48_4ISM.wav.0.csv cp ltv2ISM.csv ltv48_4ISM.wav.1.csv cp ltv3ISM.csv ltv48_4ISM.wav.2.csv cp ltv4ISM.csv ltv48_4ISM.wav.3.csv # MASA cp ltv48_MASA1TC.met ltv16_MASA1TC.met cp ltv48_MASA1TC.met ltv32_MASA1TC.met cp ltv48_MASA2TC.met ltv16_MASA2TC.met cp ltv48_MASA2TC.met ltv32_MASA2TC.met # OMASA cp ltv48_OMASA_1ISM_1TC.met ltv16_OMASA_1ISM_1TC.met cp ltv48_OMASA_1ISM_1TC_ISM1.csv ltv16_OMASA_1ISM_1TC.wav.0.csv cp ltv48_OMASA_1ISM_2TC.met ltv16_OMASA_1ISM_2TC.met cp ltv48_OMASA_1ISM_2TC_ISM1.csv ltv16_OMASA_1ISM_2TC.wav.0.csv cp ltv48_OMASA_2ISM_1TC.met ltv16_OMASA_2ISM_1TC.met cp ltv48_OMASA_2ISM_1TC_ISM1.csv ltv16_OMASA_2ISM_1TC.wav.0.csv cp ltv48_OMASA_2ISM_1TC_ISM2.csv ltv16_OMASA_2ISM_1TC.wav.1.csv cp ltv48_OMASA_2ISM_2TC.met ltv16_OMASA_2ISM_2TC.met cp ltv48_OMASA_2ISM_2TC_ISM1.csv ltv16_OMASA_2ISM_2TC.wav.0.csv cp ltv48_OMASA_2ISM_2TC_ISM2.csv ltv16_OMASA_2ISM_2TC.wav.1.csv cp ltv48_OMASA_3ISM_1TC.met ltv16_OMASA_3ISM_1TC.met cp ltv48_OMASA_3ISM_1TC_ISM1.csv ltv16_OMASA_3ISM_1TC.wav.0.csv cp ltv48_OMASA_3ISM_1TC_ISM2.csv ltv16_OMASA_3ISM_1TC.wav.1.csv cp ltv48_OMASA_3ISM_1TC_ISM3.csv ltv16_OMASA_3ISM_1TC.wav.2.csv cp ltv48_OMASA_3ISM_2TC.met ltv16_OMASA_3ISM_2TC.met cp ltv48_OMASA_3ISM_2TC_ISM1.csv ltv16_OMASA_3ISM_2TC.wav.0.csv cp ltv48_OMASA_3ISM_2TC_ISM2.csv ltv16_OMASA_3ISM_2TC.wav.1.csv cp ltv48_OMASA_3ISM_2TC_ISM3.csv ltv16_OMASA_3ISM_2TC.wav.2.csv cp ltv48_OMASA_4ISM_1TC.met ltv16_OMASA_4ISM_1TC.met cp ltv48_OMASA_4ISM_1TC_ISM1.csv ltv16_OMASA_4ISM_1TC.wav.0.csv cp ltv48_OMASA_4ISM_1TC_ISM2.csv ltv16_OMASA_4ISM_1TC.wav.1.csv cp ltv48_OMASA_4ISM_1TC_ISM3.csv ltv16_OMASA_4ISM_1TC.wav.2.csv cp ltv48_OMASA_4ISM_1TC_ISM4.csv ltv16_OMASA_4ISM_1TC.wav.3.csv cp ltv48_OMASA_4ISM_2TC.met ltv16_OMASA_4ISM_2TC.met cp ltv48_OMASA_4ISM_2TC_ISM1.csv ltv16_OMASA_4ISM_2TC.wav.0.csv cp ltv48_OMASA_4ISM_2TC_ISM2.csv ltv16_OMASA_4ISM_2TC.wav.1.csv cp ltv48_OMASA_4ISM_2TC_ISM3.csv ltv16_OMASA_4ISM_2TC.wav.2.csv cp ltv48_OMASA_4ISM_2TC_ISM4.csv ltv16_OMASA_4ISM_2TC.wav.3.csv cp ltv48_OMASA_1ISM_1TC.met ltv32_OMASA_1ISM_1TC.met cp ltv48_OMASA_1ISM_1TC_ISM1.csv ltv32_OMASA_1ISM_1TC.wav.0.csv cp ltv48_OMASA_1ISM_2TC.met ltv32_OMASA_1ISM_2TC.met cp ltv48_OMASA_1ISM_2TC_ISM1.csv ltv32_OMASA_1ISM_2TC.wav.0.csv cp ltv48_OMASA_2ISM_1TC.met ltv32_OMASA_2ISM_1TC.met cp ltv48_OMASA_2ISM_1TC_ISM1.csv ltv32_OMASA_2ISM_1TC.wav.0.csv cp ltv48_OMASA_2ISM_1TC_ISM2.csv ltv32_OMASA_2ISM_1TC.wav.1.csv cp ltv48_OMASA_2ISM_2TC.met ltv32_OMASA_2ISM_2TC.met cp ltv48_OMASA_2ISM_2TC_ISM1.csv ltv32_OMASA_2ISM_2TC.wav.0.csv cp ltv48_OMASA_2ISM_2TC_ISM2.csv ltv32_OMASA_2ISM_2TC.wav.1.csv cp ltv48_OMASA_3ISM_1TC.met ltv32_OMASA_3ISM_1TC.met cp ltv48_OMASA_3ISM_1TC_ISM1.csv ltv32_OMASA_3ISM_1TC.wav.0.csv cp ltv48_OMASA_3ISM_1TC_ISM2.csv ltv32_OMASA_3ISM_1TC.wav.1.csv cp ltv48_OMASA_3ISM_1TC_ISM3.csv ltv32_OMASA_3ISM_1TC.wav.2.csv cp ltv48_OMASA_3ISM_2TC.met ltv32_OMASA_3ISM_2TC.met cp ltv48_OMASA_3ISM_2TC_ISM1.csv ltv32_OMASA_3ISM_2TC.wav.0.csv cp ltv48_OMASA_3ISM_2TC_ISM2.csv ltv32_OMASA_3ISM_2TC.wav.1.csv cp ltv48_OMASA_3ISM_2TC_ISM3.csv ltv32_OMASA_3ISM_2TC.wav.2.csv cp ltv48_OMASA_4ISM_1TC.met ltv32_OMASA_4ISM_1TC.met cp ltv48_OMASA_4ISM_1TC_ISM1.csv ltv32_OMASA_4ISM_1TC.wav.0.csv cp ltv48_OMASA_4ISM_1TC_ISM2.csv ltv32_OMASA_4ISM_1TC.wav.1.csv cp ltv48_OMASA_4ISM_1TC_ISM3.csv ltv32_OMASA_4ISM_1TC.wav.2.csv cp ltv48_OMASA_4ISM_1TC_ISM4.csv ltv32_OMASA_4ISM_1TC.wav.3.csv cp ltv48_OMASA_4ISM_2TC.met ltv32_OMASA_4ISM_2TC.met cp ltv48_OMASA_4ISM_2TC_ISM1.csv ltv32_OMASA_4ISM_2TC.wav.0.csv cp ltv48_OMASA_4ISM_2TC_ISM2.csv ltv32_OMASA_4ISM_2TC.wav.1.csv cp ltv48_OMASA_4ISM_2TC_ISM3.csv ltv32_OMASA_4ISM_2TC.wav.2.csv cp ltv48_OMASA_4ISM_2TC_ISM4.csv ltv32_OMASA_4ISM_2TC.wav.3.csv mv ltv48_OMASA_1ISM_1TC_ISM1.csv ltv48_OMASA_1ISM_1TC.wav.0.csv mv ltv48_OMASA_1ISM_2TC_ISM1.csv ltv48_OMASA_1ISM_2TC.wav.0.csv mv ltv48_OMASA_2ISM_1TC_ISM1.csv ltv48_OMASA_2ISM_1TC.wav.0.csv mv ltv48_OMASA_2ISM_1TC_ISM2.csv ltv48_OMASA_2ISM_1TC.wav.1.csv mv ltv48_OMASA_2ISM_2TC_ISM1.csv ltv48_OMASA_2ISM_2TC.wav.0.csv mv ltv48_OMASA_2ISM_2TC_ISM2.csv ltv48_OMASA_2ISM_2TC.wav.1.csv mv ltv48_OMASA_3ISM_1TC_ISM1.csv ltv48_OMASA_3ISM_1TC.wav.0.csv mv ltv48_OMASA_3ISM_1TC_ISM2.csv ltv48_OMASA_3ISM_1TC.wav.1.csv mv ltv48_OMASA_3ISM_1TC_ISM3.csv ltv48_OMASA_3ISM_1TC.wav.2.csv mv ltv48_OMASA_3ISM_2TC_ISM1.csv ltv48_OMASA_3ISM_2TC.wav.0.csv mv ltv48_OMASA_3ISM_2TC_ISM2.csv ltv48_OMASA_3ISM_2TC.wav.1.csv mv ltv48_OMASA_3ISM_2TC_ISM3.csv ltv48_OMASA_3ISM_2TC.wav.2.csv mv ltv48_OMASA_4ISM_1TC_ISM1.csv ltv48_OMASA_4ISM_1TC.wav.0.csv mv ltv48_OMASA_4ISM_1TC_ISM2.csv ltv48_OMASA_4ISM_1TC.wav.1.csv mv ltv48_OMASA_4ISM_1TC_ISM3.csv ltv48_OMASA_4ISM_1TC.wav.2.csv mv ltv48_OMASA_4ISM_1TC_ISM4.csv ltv48_OMASA_4ISM_1TC.wav.3.csv mv ltv48_OMASA_4ISM_2TC_ISM1.csv ltv48_OMASA_4ISM_2TC.wav.0.csv mv ltv48_OMASA_4ISM_2TC_ISM2.csv ltv48_OMASA_4ISM_2TC.wav.1.csv mv ltv48_OMASA_4ISM_2TC_ISM3.csv ltv48_OMASA_4ISM_2TC.wav.2.csv mv ltv48_OMASA_4ISM_2TC_ISM4.csv ltv48_OMASA_4ISM_2TC.wav.3.csv # OSBA mv ltv16_OSBA_1ISM_FOA_ISM1.csv ltv16_OSBA_1ISM_FOA.wav.0.csv mv ltv16_OSBA_1ISM_HOA2_ISM1.csv ltv16_OSBA_1ISM_HOA2.wav.0.csv mv ltv16_OSBA_1ISM_HOA3_ISM1.csv ltv16_OSBA_1ISM_HOA3.wav.0.csv mv ltv16_OSBA_2ISM_FOA_ISM1.csv ltv16_OSBA_2ISM_FOA.wav.0.csv mv ltv16_OSBA_2ISM_FOA_ISM2.csv ltv16_OSBA_2ISM_FOA.wav.1.csv mv ltv16_OSBA_2ISM_HOA2_ISM1.csv ltv16_OSBA_2ISM_HOA2.wav.0.csv mv ltv16_OSBA_2ISM_HOA2_ISM2.csv ltv16_OSBA_2ISM_HOA2.wav.1.csv mv ltv16_OSBA_2ISM_HOA3_ISM1.csv ltv16_OSBA_2ISM_HOA3.wav.0.csv mv ltv16_OSBA_2ISM_HOA3_ISM2.csv ltv16_OSBA_2ISM_HOA3.wav.1.csv mv ltv16_OSBA_3ISM_FOA_ISM1.csv ltv16_OSBA_3ISM_FOA.wav.0.csv mv ltv16_OSBA_3ISM_FOA_ISM2.csv ltv16_OSBA_3ISM_FOA.wav.1.csv mv ltv16_OSBA_3ISM_FOA_ISM3.csv ltv16_OSBA_3ISM_FOA.wav.2.csv mv ltv16_OSBA_3ISM_HOA2_ISM1.csv ltv16_OSBA_3ISM_HOA2.wav.0.csv mv ltv16_OSBA_3ISM_HOA2_ISM2.csv ltv16_OSBA_3ISM_HOA2.wav.1.csv mv ltv16_OSBA_3ISM_HOA2_ISM3.csv ltv16_OSBA_3ISM_HOA2.wav.2.csv mv ltv16_OSBA_3ISM_HOA3_ISM1.csv ltv16_OSBA_3ISM_HOA3.wav.0.csv mv ltv16_OSBA_3ISM_HOA3_ISM2.csv ltv16_OSBA_3ISM_HOA3.wav.1.csv mv ltv16_OSBA_3ISM_HOA3_ISM3.csv ltv16_OSBA_3ISM_HOA3.wav.2.csv mv ltv16_OSBA_4ISM_FOA_ISM1.csv ltv16_OSBA_4ISM_FOA.wav.0.csv mv ltv16_OSBA_4ISM_FOA_ISM2.csv ltv16_OSBA_4ISM_FOA.wav.1.csv mv ltv16_OSBA_4ISM_FOA_ISM3.csv ltv16_OSBA_4ISM_FOA.wav.2.csv mv ltv16_OSBA_4ISM_FOA_ISM4.csv ltv16_OSBA_4ISM_FOA.wav.3.csv mv ltv16_OSBA_4ISM_HOA2_ISM1.csv ltv16_OSBA_4ISM_HOA2.wav.0.csv mv ltv16_OSBA_4ISM_HOA2_ISM2.csv ltv16_OSBA_4ISM_HOA2.wav.1.csv mv ltv16_OSBA_4ISM_HOA2_ISM3.csv ltv16_OSBA_4ISM_HOA2.wav.2.csv mv ltv16_OSBA_4ISM_HOA2_ISM4.csv ltv16_OSBA_4ISM_HOA2.wav.3.csv mv ltv16_OSBA_4ISM_HOA3_ISM1.csv ltv16_OSBA_4ISM_HOA3.wav.0.csv mv ltv16_OSBA_4ISM_HOA3_ISM2.csv ltv16_OSBA_4ISM_HOA3.wav.1.csv mv ltv16_OSBA_4ISM_HOA3_ISM3.csv ltv16_OSBA_4ISM_HOA3.wav.2.csv mv ltv16_OSBA_4ISM_HOA3_ISM4.csv ltv16_OSBA_4ISM_HOA3.wav.3.csv mv ltv32_OSBA_1ISM_FOA_ISM1.csv ltv32_OSBA_1ISM_FOA.wav.0.csv mv ltv32_OSBA_1ISM_HOA2_ISM1.csv ltv32_OSBA_1ISM_HOA2.wav.0.csv mv ltv32_OSBA_1ISM_HOA3_ISM1.csv ltv32_OSBA_1ISM_HOA3.wav.0.csv mv ltv32_OSBA_2ISM_FOA_ISM1.csv ltv32_OSBA_2ISM_FOA.wav.0.csv mv ltv32_OSBA_2ISM_FOA_ISM2.csv ltv32_OSBA_2ISM_FOA.wav.1.csv mv ltv32_OSBA_2ISM_HOA2_ISM1.csv ltv32_OSBA_2ISM_HOA2.wav.0.csv mv ltv32_OSBA_2ISM_HOA2_ISM2.csv ltv32_OSBA_2ISM_HOA2.wav.1.csv mv ltv32_OSBA_2ISM_HOA3_ISM1.csv ltv32_OSBA_2ISM_HOA3.wav.0.csv mv ltv32_OSBA_2ISM_HOA3_ISM2.csv ltv32_OSBA_2ISM_HOA3.wav.1.csv mv ltv32_OSBA_3ISM_FOA_ISM1.csv ltv32_OSBA_3ISM_FOA.wav.0.csv mv ltv32_OSBA_3ISM_FOA_ISM2.csv ltv32_OSBA_3ISM_FOA.wav.1.csv mv ltv32_OSBA_3ISM_FOA_ISM3.csv ltv32_OSBA_3ISM_FOA.wav.2.csv mv ltv32_OSBA_3ISM_HOA2_ISM1.csv ltv32_OSBA_3ISM_HOA2.wav.0.csv mv ltv32_OSBA_3ISM_HOA2_ISM2.csv ltv32_OSBA_3ISM_HOA2.wav.1.csv mv ltv32_OSBA_3ISM_HOA2_ISM3.csv ltv32_OSBA_3ISM_HOA2.wav.2.csv mv ltv32_OSBA_3ISM_HOA3_ISM1.csv ltv32_OSBA_3ISM_HOA3.wav.0.csv mv ltv32_OSBA_3ISM_HOA3_ISM2.csv ltv32_OSBA_3ISM_HOA3.wav.1.csv mv ltv32_OSBA_3ISM_HOA3_ISM3.csv ltv32_OSBA_3ISM_HOA3.wav.2.csv mv ltv32_OSBA_4ISM_FOA_ISM1.csv ltv32_OSBA_4ISM_FOA.wav.0.csv mv ltv32_OSBA_4ISM_FOA_ISM2.csv ltv32_OSBA_4ISM_FOA.wav.1.csv mv ltv32_OSBA_4ISM_FOA_ISM3.csv ltv32_OSBA_4ISM_FOA.wav.2.csv mv ltv32_OSBA_4ISM_FOA_ISM4.csv ltv32_OSBA_4ISM_FOA.wav.3.csv mv ltv32_OSBA_4ISM_HOA2_ISM1.csv ltv32_OSBA_4ISM_HOA2.wav.0.csv mv ltv32_OSBA_4ISM_HOA2_ISM2.csv ltv32_OSBA_4ISM_HOA2.wav.1.csv mv ltv32_OSBA_4ISM_HOA2_ISM3.csv ltv32_OSBA_4ISM_HOA2.wav.2.csv mv ltv32_OSBA_4ISM_HOA2_ISM4.csv ltv32_OSBA_4ISM_HOA2.wav.3.csv mv ltv32_OSBA_4ISM_HOA3_ISM1.csv ltv32_OSBA_4ISM_HOA3.wav.0.csv mv ltv32_OSBA_4ISM_HOA3_ISM2.csv ltv32_OSBA_4ISM_HOA3.wav.1.csv mv ltv32_OSBA_4ISM_HOA3_ISM3.csv ltv32_OSBA_4ISM_HOA3.wav.2.csv mv ltv32_OSBA_4ISM_HOA3_ISM4.csv ltv32_OSBA_4ISM_HOA3.wav.3.csv mv ltv48_OSBA_1ISM_FOA_ISM1.csv ltv48_OSBA_1ISM_FOA.wav.0.csv mv ltv48_OSBA_1ISM_HOA2_ISM1.csv ltv48_OSBA_1ISM_HOA2.wav.0.csv mv ltv48_OSBA_1ISM_HOA3_ISM1.csv ltv48_OSBA_1ISM_HOA3.wav.0.csv mv ltv48_OSBA_2ISM_FOA_ISM1.csv ltv48_OSBA_2ISM_FOA.wav.0.csv mv ltv48_OSBA_2ISM_FOA_ISM2.csv ltv48_OSBA_2ISM_FOA.wav.1.csv mv ltv48_OSBA_2ISM_HOA2_ISM1.csv ltv48_OSBA_2ISM_HOA2.wav.0.csv mv ltv48_OSBA_2ISM_HOA2_ISM2.csv ltv48_OSBA_2ISM_HOA2.wav.1.csv mv ltv48_OSBA_2ISM_HOA3_ISM1.csv ltv48_OSBA_2ISM_HOA3.wav.0.csv mv ltv48_OSBA_2ISM_HOA3_ISM2.csv ltv48_OSBA_2ISM_HOA3.wav.1.csv mv ltv48_OSBA_3ISM_FOA_ISM1.csv ltv48_OSBA_3ISM_FOA.wav.0.csv mv ltv48_OSBA_3ISM_FOA_ISM2.csv ltv48_OSBA_3ISM_FOA.wav.1.csv mv ltv48_OSBA_3ISM_FOA_ISM3.csv ltv48_OSBA_3ISM_FOA.wav.2.csv mv ltv48_OSBA_3ISM_HOA2_ISM1.csv ltv48_OSBA_3ISM_HOA2.wav.0.csv mv ltv48_OSBA_3ISM_HOA2_ISM2.csv ltv48_OSBA_3ISM_HOA2.wav.1.csv mv ltv48_OSBA_3ISM_HOA2_ISM3.csv ltv48_OSBA_3ISM_HOA2.wav.2.csv mv ltv48_OSBA_3ISM_HOA3_ISM1.csv ltv48_OSBA_3ISM_HOA3.wav.0.csv mv ltv48_OSBA_3ISM_HOA3_ISM2.csv ltv48_OSBA_3ISM_HOA3.wav.1.csv mv ltv48_OSBA_3ISM_HOA3_ISM3.csv ltv48_OSBA_3ISM_HOA3.wav.2.csv mv ltv48_OSBA_4ISM_FOA_ISM1.csv ltv48_OSBA_4ISM_FOA.wav.0.csv mv ltv48_OSBA_4ISM_FOA_ISM2.csv ltv48_OSBA_4ISM_FOA.wav.1.csv mv ltv48_OSBA_4ISM_FOA_ISM3.csv ltv48_OSBA_4ISM_FOA.wav.2.csv mv ltv48_OSBA_4ISM_FOA_ISM4.csv ltv48_OSBA_4ISM_FOA.wav.3.csv mv ltv48_OSBA_4ISM_HOA2_ISM1.csv ltv48_OSBA_4ISM_HOA2.wav.0.csv mv ltv48_OSBA_4ISM_HOA2_ISM2.csv ltv48_OSBA_4ISM_HOA2.wav.1.csv mv ltv48_OSBA_4ISM_HOA2_ISM3.csv ltv48_OSBA_4ISM_HOA2.wav.2.csv mv ltv48_OSBA_4ISM_HOA2_ISM4.csv ltv48_OSBA_4ISM_HOA2.wav.3.csv mv ltv48_OSBA_4ISM_HOA3_ISM1.csv ltv48_OSBA_4ISM_HOA3.wav.0.csv mv ltv48_OSBA_4ISM_HOA3_ISM2.csv ltv48_OSBA_4ISM_HOA3.wav.1.csv mv ltv48_OSBA_4ISM_HOA3_ISM3.csv ltv48_OSBA_4ISM_HOA3.wav.2.csv mv ltv48_OSBA_4ISM_HOA3_ISM4.csv ltv48_OSBA_4ISM_HOA3.wav.3.csv scripts/parse_loudness_data.py +3 −4 Original line number Diff line number Diff line Loading @@ -52,9 +52,9 @@ def plot_loudness_by_bandwidth(df, in_fmt, out_fmt, out_dir): if in_fmt is not None: filtered_df = filtered_df[filtered_df["format"] == in_fmt] y_min, y_max = -36, -16 input_loudness = float(filtered_df["input_loudness"].unique()[0]) y_min, y_max = round(input_loudness) - 10, round(input_loudness) + 10 y_ticks = np.arange(y_min, y_max + 5, 5) # get unique bitrates and sort them bitrates = sorted(filtered_df["bitrate"].unique()) bitrate_to_idx = {br: idx for idx, br in enumerate(bitrates)} Loading @@ -74,7 +74,6 @@ def plot_loudness_by_bandwidth(df, in_fmt, out_fmt, out_dir): ax = axes[idx] bw_data = filtered_df[filtered_df["bandwidth"] == bw] input_loudness = float(bw_data["input_loudness"].unique()[0]) if input_loudness is not None: # highlight ±1 LKFS green ax.axhspan( Loading Loading @@ -315,4 +314,4 @@ if __name__ == "__main__": print(f"\nError processing {task[1]} -> {task[2]}: {e}") completed += 1 progressbar_update(completed, total_tasks, width=50) print(f"✅ Processed {len(tasks)} format pairs successfully") print(f"\n✅ Processed {len(tasks)} format pairs successfully") Loading
ci/run-first-frame-is-sid-test.sh +74 −16 Original line number Diff line number Diff line Loading @@ -2,7 +2,55 @@ ### This test assures that for all DTX modes, decoding a bitstream that starts with an SID frame does not crash the decoder or cause a sanitizer error set -euxo pipefail set -euo pipefail collect_failed_logs() { local console_output="$1" local log_dir="${2:-logs}" local output_dir="${3:-failed_logs}" local temp_failures=$(mktemp) if [ ! -f "$console_output" ]; then echo "Error: Console output file '$console_output' not found" >&2 rm -f "$temp_failures" return 1 fi mkdir -p "$output_dir" # Extract filenames from failed enc/dec chains from the console log # turn off fail on non-zero exit code to not fail on grep not matching any line (which is the case if everything is ok) set +e grep -iE '(encoding|decoding).*failed|failed.*(encoding|decoding)' "$console_output" | grep -oE '[^[:space:]]+\.(192|wav|pcm)' | while IFS= read -r filepath; do # need basename wihtou suffix only for matching filename=$(basename "$filepath") filename_no_ext="${filename%.*}" echo "$filename_no_ext" done | sort -u >"$temp_failures" set -e # Copy matching log files to output directory if [ -s "$temp_failures" ]; then echo "Copying log files for failed tasks to $output_dir..." while IFS= read -r basename_pattern; do # Find log files starting with this basename while IFS= read -r logfile; do cp -v "$logfile" "$output_dir/" done < <(find "$log_dir" -type f -name "${basename_pattern}*") done <"$temp_failures" echo "Done." else echo "No failures detected in $console_output" fi # Cleanup rm -f "$temp_failures" return 0 } # build encoder without sanitizers for faster runtime make clean Loading Loading @@ -31,17 +79,14 @@ exit_code_msan_no_stereo=0 exit_code_msan_stereo=0 echo "-------------- 1. Encoder + Msan decoder -------------- " echo "-------------- 1.1 all DTX modes except stereo -------------- " scripts/IvasBuildAndRunChecks.py --checks CLANG1 -m $modes_no_stereo -U 0:20 $common_args || exit_code_msan_no_stereo=$? scripts/IvasBuildAndRunChecks.py --checks CLANG1 -m $modes_no_stereo -U 0:20 $common_args 2>&1 | tee "console_log_msan.txt" || exit_code_msan_no_stereo=$? echo "-------------- 1.2 stereo DTX modes -------------- " scripts/IvasBuildAndRunChecks.py --checks CLANG1 -m $modes_stereo -U 40:60 $common_args || exit_code_msan_stereo=$? # archive encoder logs separately mkdir logs_enc logs_dec_msan mv CLANG1/logs/*.enc.txt logs_enc/ mv CLANG1/logs/*.dec*.txt logs_dec_msan/ scripts/IvasBuildAndRunChecks.py --checks CLANG1 -m $modes_stereo -U 40:60 $common_args 2>&1 | tee -a "console_log_msan.txt" || exit_code_msan_stereo=$? # sanity check: ensure that we have DTX frames in the cut bitstreams # only need to do this once here as encoder is not run again after this grep_exit_code=0 grep -r "Extracted 0 frames!" logs_enc/ || grep_exit_code=$? grep -r "Extracted 0 frames!" CLANG1/logs/ || grep_exit_code=$? if [ $grep_exit_code -ne 1 ]; then echo "Some bitstreams did not contain any SID frame!" echo -e "Check the input signals and/or the VAD performance!\n" Loading @@ -49,22 +94,35 @@ if [ $grep_exit_code -ne 1 ]; then exit 1 fi # ASAN and USAN can be done in one go and decoder only # ASAN and USAN can be done decoder only # copy encoder output from CLANG1 dir mkdir CLANG2 CLANG3 cp -r CLANG1/enc CLANG2/enc cp -r CLANG1/enc CLANG3/enc # In this run, we can do all the dtx modes together - we only run the decoder, so no cutting of input files needed # In the next runs, we can do all the dtx modes together - we only run the decoder, so no cutting of input files needed # the script does no put the cut length into the bitstream name, so the decoder can find the existing bitstreams this way modes_all=$(scripts/runIvasCodec.py -l | grep dtx) exit_code_asan_usan=0 echo "-------------- 2. Asan + Usan decoder (all in one go) -------------- " scripts/IvasBuildAndRunChecks.py --checks CLANG2 CLANG3 --decoder_only -m $modes_all $common_args || exit_code_asan_usan=$? mv CLANG2/logs logs_dec_asan mv CLANG3/logs logs_dec_usan exit_code_asan=0 echo "-------------- 2. Asan decoder -------------- " scripts/IvasBuildAndRunChecks.py --checks CLANG2 --decoder_only -m $modes_all $common_args 2>&1 | tee "console_log_asan.txt" || exit_code_asan=$? exit_code_usan=0 echo "-------------- 3. Usan decoder -------------- " scripts/IvasBuildAndRunChecks.py --checks CLANG3 --decoder_only -m $modes_all $common_args 2>&1 | tee "console_log_usan.txt" || exit_code_usan=$? if [ $exit_code_msan_no_stereo -ne 0 ] || [ $exit_code_msan_stereo -ne 0 ] || [ $exit_code_asan_usan -ne 0 ]; then echo "-------------- 4. Collect logs -------------- " # everything went as expected, now collect logs collect_failed_logs console_log_msan.txt CLANG1/logs logs/msan collect_failed_logs console_log_asan.txt CLANG2/logs logs/asan collect_failed_logs console_log_usan.txt CLANG3/logs logs/usan echo "-------------- 5. Check for errors -------------- " if [ $exit_code_msan_no_stereo -ne 0 ] || [ $exit_code_msan_stereo -ne 0 ] || [ $exit_code_asan -ne 0 ] || [ $exit_code_usan -ne 0 ]; then echo "There was either a crash or a sanitizer error encountered when decoding a bitstream that starts with an SID. Check the artifacts for the logfiles." exit 1 fi echo "No errors occured." exit 0
scripts/copy-ltv-metadata.sh 0 → 100755 +249 −0 Original line number Diff line number Diff line #!/bin/bash set -x if [[ -z "${LTV_DIR}" ]]; then echo "Error: LTV_DIR environment variable must be set" >&2 exit 1 fi cd $LTV_DIR # ISM cp ltvISM1.csv ltv16_1ISM.wav.0.csv cp ltvISM1.csv ltv32_1ISM.wav.0.csv cp ltv1ISM.csv ltv48_1ISM.wav.0.csv cp ltvISM1.csv ltv16_2ISM.wav.0.csv cp ltvISM2.csv ltv16_2ISM.wav.1.csv cp ltvISM1.csv ltv32_2ISM.wav.0.csv cp ltvISM2.csv ltv32_2ISM.wav.1.csv cp ltv1ISM.csv ltv48_2ISM.wav.0.csv cp ltv2ISM.csv ltv48_2ISM.wav.1.csv cp ltvISM1.csv ltv16_3ISM.wav.0.csv cp ltvISM2.csv ltv16_3ISM.wav.1.csv cp ltvISM3.csv ltv16_3ISM.wav.2.csv cp ltvISM1.csv ltv32_3ISM.wav.0.csv cp ltvISM2.csv ltv32_3ISM.wav.1.csv cp ltvISM3.csv ltv32_3ISM.wav.2.csv cp ltv1ISM.csv ltv48_3ISM.wav.0.csv cp ltv2ISM.csv ltv48_3ISM.wav.1.csv cp ltv3ISM.csv ltv48_3ISM.wav.2.csv cp ltvISM1.csv ltv16_4ISM.wav.0.csv cp ltvISM2.csv ltv16_4ISM.wav.1.csv cp ltvISM3.csv ltv16_4ISM.wav.2.csv cp ltvISM4.csv ltv16_4ISM.wav.3.csv cp ltvISM1.csv ltv32_4ISM.wav.0.csv cp ltvISM2.csv ltv32_4ISM.wav.1.csv cp ltvISM3.csv ltv32_4ISM.wav.2.csv cp ltvISM4.csv ltv32_4ISM.wav.3.csv cp ltv1ISM.csv ltv48_4ISM.wav.0.csv cp ltv2ISM.csv ltv48_4ISM.wav.1.csv cp ltv3ISM.csv ltv48_4ISM.wav.2.csv cp ltv4ISM.csv ltv48_4ISM.wav.3.csv # MASA cp ltv48_MASA1TC.met ltv16_MASA1TC.met cp ltv48_MASA1TC.met ltv32_MASA1TC.met cp ltv48_MASA2TC.met ltv16_MASA2TC.met cp ltv48_MASA2TC.met ltv32_MASA2TC.met # OMASA cp ltv48_OMASA_1ISM_1TC.met ltv16_OMASA_1ISM_1TC.met cp ltv48_OMASA_1ISM_1TC_ISM1.csv ltv16_OMASA_1ISM_1TC.wav.0.csv cp ltv48_OMASA_1ISM_2TC.met ltv16_OMASA_1ISM_2TC.met cp ltv48_OMASA_1ISM_2TC_ISM1.csv ltv16_OMASA_1ISM_2TC.wav.0.csv cp ltv48_OMASA_2ISM_1TC.met ltv16_OMASA_2ISM_1TC.met cp ltv48_OMASA_2ISM_1TC_ISM1.csv ltv16_OMASA_2ISM_1TC.wav.0.csv cp ltv48_OMASA_2ISM_1TC_ISM2.csv ltv16_OMASA_2ISM_1TC.wav.1.csv cp ltv48_OMASA_2ISM_2TC.met ltv16_OMASA_2ISM_2TC.met cp ltv48_OMASA_2ISM_2TC_ISM1.csv ltv16_OMASA_2ISM_2TC.wav.0.csv cp ltv48_OMASA_2ISM_2TC_ISM2.csv ltv16_OMASA_2ISM_2TC.wav.1.csv cp ltv48_OMASA_3ISM_1TC.met ltv16_OMASA_3ISM_1TC.met cp ltv48_OMASA_3ISM_1TC_ISM1.csv ltv16_OMASA_3ISM_1TC.wav.0.csv cp ltv48_OMASA_3ISM_1TC_ISM2.csv ltv16_OMASA_3ISM_1TC.wav.1.csv cp ltv48_OMASA_3ISM_1TC_ISM3.csv ltv16_OMASA_3ISM_1TC.wav.2.csv cp ltv48_OMASA_3ISM_2TC.met ltv16_OMASA_3ISM_2TC.met cp ltv48_OMASA_3ISM_2TC_ISM1.csv ltv16_OMASA_3ISM_2TC.wav.0.csv cp ltv48_OMASA_3ISM_2TC_ISM2.csv ltv16_OMASA_3ISM_2TC.wav.1.csv cp ltv48_OMASA_3ISM_2TC_ISM3.csv ltv16_OMASA_3ISM_2TC.wav.2.csv cp ltv48_OMASA_4ISM_1TC.met ltv16_OMASA_4ISM_1TC.met cp ltv48_OMASA_4ISM_1TC_ISM1.csv ltv16_OMASA_4ISM_1TC.wav.0.csv cp ltv48_OMASA_4ISM_1TC_ISM2.csv ltv16_OMASA_4ISM_1TC.wav.1.csv cp ltv48_OMASA_4ISM_1TC_ISM3.csv ltv16_OMASA_4ISM_1TC.wav.2.csv cp ltv48_OMASA_4ISM_1TC_ISM4.csv ltv16_OMASA_4ISM_1TC.wav.3.csv cp ltv48_OMASA_4ISM_2TC.met ltv16_OMASA_4ISM_2TC.met cp ltv48_OMASA_4ISM_2TC_ISM1.csv ltv16_OMASA_4ISM_2TC.wav.0.csv cp ltv48_OMASA_4ISM_2TC_ISM2.csv ltv16_OMASA_4ISM_2TC.wav.1.csv cp ltv48_OMASA_4ISM_2TC_ISM3.csv ltv16_OMASA_4ISM_2TC.wav.2.csv cp ltv48_OMASA_4ISM_2TC_ISM4.csv ltv16_OMASA_4ISM_2TC.wav.3.csv cp ltv48_OMASA_1ISM_1TC.met ltv32_OMASA_1ISM_1TC.met cp ltv48_OMASA_1ISM_1TC_ISM1.csv ltv32_OMASA_1ISM_1TC.wav.0.csv cp ltv48_OMASA_1ISM_2TC.met ltv32_OMASA_1ISM_2TC.met cp ltv48_OMASA_1ISM_2TC_ISM1.csv ltv32_OMASA_1ISM_2TC.wav.0.csv cp ltv48_OMASA_2ISM_1TC.met ltv32_OMASA_2ISM_1TC.met cp ltv48_OMASA_2ISM_1TC_ISM1.csv ltv32_OMASA_2ISM_1TC.wav.0.csv cp ltv48_OMASA_2ISM_1TC_ISM2.csv ltv32_OMASA_2ISM_1TC.wav.1.csv cp ltv48_OMASA_2ISM_2TC.met ltv32_OMASA_2ISM_2TC.met cp ltv48_OMASA_2ISM_2TC_ISM1.csv ltv32_OMASA_2ISM_2TC.wav.0.csv cp ltv48_OMASA_2ISM_2TC_ISM2.csv ltv32_OMASA_2ISM_2TC.wav.1.csv cp ltv48_OMASA_3ISM_1TC.met ltv32_OMASA_3ISM_1TC.met cp ltv48_OMASA_3ISM_1TC_ISM1.csv ltv32_OMASA_3ISM_1TC.wav.0.csv cp ltv48_OMASA_3ISM_1TC_ISM2.csv ltv32_OMASA_3ISM_1TC.wav.1.csv cp ltv48_OMASA_3ISM_1TC_ISM3.csv ltv32_OMASA_3ISM_1TC.wav.2.csv cp ltv48_OMASA_3ISM_2TC.met ltv32_OMASA_3ISM_2TC.met cp ltv48_OMASA_3ISM_2TC_ISM1.csv ltv32_OMASA_3ISM_2TC.wav.0.csv cp ltv48_OMASA_3ISM_2TC_ISM2.csv ltv32_OMASA_3ISM_2TC.wav.1.csv cp ltv48_OMASA_3ISM_2TC_ISM3.csv ltv32_OMASA_3ISM_2TC.wav.2.csv cp ltv48_OMASA_4ISM_1TC.met ltv32_OMASA_4ISM_1TC.met cp ltv48_OMASA_4ISM_1TC_ISM1.csv ltv32_OMASA_4ISM_1TC.wav.0.csv cp ltv48_OMASA_4ISM_1TC_ISM2.csv ltv32_OMASA_4ISM_1TC.wav.1.csv cp ltv48_OMASA_4ISM_1TC_ISM3.csv ltv32_OMASA_4ISM_1TC.wav.2.csv cp ltv48_OMASA_4ISM_1TC_ISM4.csv ltv32_OMASA_4ISM_1TC.wav.3.csv cp ltv48_OMASA_4ISM_2TC.met ltv32_OMASA_4ISM_2TC.met cp ltv48_OMASA_4ISM_2TC_ISM1.csv ltv32_OMASA_4ISM_2TC.wav.0.csv cp ltv48_OMASA_4ISM_2TC_ISM2.csv ltv32_OMASA_4ISM_2TC.wav.1.csv cp ltv48_OMASA_4ISM_2TC_ISM3.csv ltv32_OMASA_4ISM_2TC.wav.2.csv cp ltv48_OMASA_4ISM_2TC_ISM4.csv ltv32_OMASA_4ISM_2TC.wav.3.csv mv ltv48_OMASA_1ISM_1TC_ISM1.csv ltv48_OMASA_1ISM_1TC.wav.0.csv mv ltv48_OMASA_1ISM_2TC_ISM1.csv ltv48_OMASA_1ISM_2TC.wav.0.csv mv ltv48_OMASA_2ISM_1TC_ISM1.csv ltv48_OMASA_2ISM_1TC.wav.0.csv mv ltv48_OMASA_2ISM_1TC_ISM2.csv ltv48_OMASA_2ISM_1TC.wav.1.csv mv ltv48_OMASA_2ISM_2TC_ISM1.csv ltv48_OMASA_2ISM_2TC.wav.0.csv mv ltv48_OMASA_2ISM_2TC_ISM2.csv ltv48_OMASA_2ISM_2TC.wav.1.csv mv ltv48_OMASA_3ISM_1TC_ISM1.csv ltv48_OMASA_3ISM_1TC.wav.0.csv mv ltv48_OMASA_3ISM_1TC_ISM2.csv ltv48_OMASA_3ISM_1TC.wav.1.csv mv ltv48_OMASA_3ISM_1TC_ISM3.csv ltv48_OMASA_3ISM_1TC.wav.2.csv mv ltv48_OMASA_3ISM_2TC_ISM1.csv ltv48_OMASA_3ISM_2TC.wav.0.csv mv ltv48_OMASA_3ISM_2TC_ISM2.csv ltv48_OMASA_3ISM_2TC.wav.1.csv mv ltv48_OMASA_3ISM_2TC_ISM3.csv ltv48_OMASA_3ISM_2TC.wav.2.csv mv ltv48_OMASA_4ISM_1TC_ISM1.csv ltv48_OMASA_4ISM_1TC.wav.0.csv mv ltv48_OMASA_4ISM_1TC_ISM2.csv ltv48_OMASA_4ISM_1TC.wav.1.csv mv ltv48_OMASA_4ISM_1TC_ISM3.csv ltv48_OMASA_4ISM_1TC.wav.2.csv mv ltv48_OMASA_4ISM_1TC_ISM4.csv ltv48_OMASA_4ISM_1TC.wav.3.csv mv ltv48_OMASA_4ISM_2TC_ISM1.csv ltv48_OMASA_4ISM_2TC.wav.0.csv mv ltv48_OMASA_4ISM_2TC_ISM2.csv ltv48_OMASA_4ISM_2TC.wav.1.csv mv ltv48_OMASA_4ISM_2TC_ISM3.csv ltv48_OMASA_4ISM_2TC.wav.2.csv mv ltv48_OMASA_4ISM_2TC_ISM4.csv ltv48_OMASA_4ISM_2TC.wav.3.csv # OSBA mv ltv16_OSBA_1ISM_FOA_ISM1.csv ltv16_OSBA_1ISM_FOA.wav.0.csv mv ltv16_OSBA_1ISM_HOA2_ISM1.csv ltv16_OSBA_1ISM_HOA2.wav.0.csv mv ltv16_OSBA_1ISM_HOA3_ISM1.csv ltv16_OSBA_1ISM_HOA3.wav.0.csv mv ltv16_OSBA_2ISM_FOA_ISM1.csv ltv16_OSBA_2ISM_FOA.wav.0.csv mv ltv16_OSBA_2ISM_FOA_ISM2.csv ltv16_OSBA_2ISM_FOA.wav.1.csv mv ltv16_OSBA_2ISM_HOA2_ISM1.csv ltv16_OSBA_2ISM_HOA2.wav.0.csv mv ltv16_OSBA_2ISM_HOA2_ISM2.csv ltv16_OSBA_2ISM_HOA2.wav.1.csv mv ltv16_OSBA_2ISM_HOA3_ISM1.csv ltv16_OSBA_2ISM_HOA3.wav.0.csv mv ltv16_OSBA_2ISM_HOA3_ISM2.csv ltv16_OSBA_2ISM_HOA3.wav.1.csv mv ltv16_OSBA_3ISM_FOA_ISM1.csv ltv16_OSBA_3ISM_FOA.wav.0.csv mv ltv16_OSBA_3ISM_FOA_ISM2.csv ltv16_OSBA_3ISM_FOA.wav.1.csv mv ltv16_OSBA_3ISM_FOA_ISM3.csv ltv16_OSBA_3ISM_FOA.wav.2.csv mv ltv16_OSBA_3ISM_HOA2_ISM1.csv ltv16_OSBA_3ISM_HOA2.wav.0.csv mv ltv16_OSBA_3ISM_HOA2_ISM2.csv ltv16_OSBA_3ISM_HOA2.wav.1.csv mv ltv16_OSBA_3ISM_HOA2_ISM3.csv ltv16_OSBA_3ISM_HOA2.wav.2.csv mv ltv16_OSBA_3ISM_HOA3_ISM1.csv ltv16_OSBA_3ISM_HOA3.wav.0.csv mv ltv16_OSBA_3ISM_HOA3_ISM2.csv ltv16_OSBA_3ISM_HOA3.wav.1.csv mv ltv16_OSBA_3ISM_HOA3_ISM3.csv ltv16_OSBA_3ISM_HOA3.wav.2.csv mv ltv16_OSBA_4ISM_FOA_ISM1.csv ltv16_OSBA_4ISM_FOA.wav.0.csv mv ltv16_OSBA_4ISM_FOA_ISM2.csv ltv16_OSBA_4ISM_FOA.wav.1.csv mv ltv16_OSBA_4ISM_FOA_ISM3.csv ltv16_OSBA_4ISM_FOA.wav.2.csv mv ltv16_OSBA_4ISM_FOA_ISM4.csv ltv16_OSBA_4ISM_FOA.wav.3.csv mv ltv16_OSBA_4ISM_HOA2_ISM1.csv ltv16_OSBA_4ISM_HOA2.wav.0.csv mv ltv16_OSBA_4ISM_HOA2_ISM2.csv ltv16_OSBA_4ISM_HOA2.wav.1.csv mv ltv16_OSBA_4ISM_HOA2_ISM3.csv ltv16_OSBA_4ISM_HOA2.wav.2.csv mv ltv16_OSBA_4ISM_HOA2_ISM4.csv ltv16_OSBA_4ISM_HOA2.wav.3.csv mv ltv16_OSBA_4ISM_HOA3_ISM1.csv ltv16_OSBA_4ISM_HOA3.wav.0.csv mv ltv16_OSBA_4ISM_HOA3_ISM2.csv ltv16_OSBA_4ISM_HOA3.wav.1.csv mv ltv16_OSBA_4ISM_HOA3_ISM3.csv ltv16_OSBA_4ISM_HOA3.wav.2.csv mv ltv16_OSBA_4ISM_HOA3_ISM4.csv ltv16_OSBA_4ISM_HOA3.wav.3.csv mv ltv32_OSBA_1ISM_FOA_ISM1.csv ltv32_OSBA_1ISM_FOA.wav.0.csv mv ltv32_OSBA_1ISM_HOA2_ISM1.csv ltv32_OSBA_1ISM_HOA2.wav.0.csv mv ltv32_OSBA_1ISM_HOA3_ISM1.csv ltv32_OSBA_1ISM_HOA3.wav.0.csv mv ltv32_OSBA_2ISM_FOA_ISM1.csv ltv32_OSBA_2ISM_FOA.wav.0.csv mv ltv32_OSBA_2ISM_FOA_ISM2.csv ltv32_OSBA_2ISM_FOA.wav.1.csv mv ltv32_OSBA_2ISM_HOA2_ISM1.csv ltv32_OSBA_2ISM_HOA2.wav.0.csv mv ltv32_OSBA_2ISM_HOA2_ISM2.csv ltv32_OSBA_2ISM_HOA2.wav.1.csv mv ltv32_OSBA_2ISM_HOA3_ISM1.csv ltv32_OSBA_2ISM_HOA3.wav.0.csv mv ltv32_OSBA_2ISM_HOA3_ISM2.csv ltv32_OSBA_2ISM_HOA3.wav.1.csv mv ltv32_OSBA_3ISM_FOA_ISM1.csv ltv32_OSBA_3ISM_FOA.wav.0.csv mv ltv32_OSBA_3ISM_FOA_ISM2.csv ltv32_OSBA_3ISM_FOA.wav.1.csv mv ltv32_OSBA_3ISM_FOA_ISM3.csv ltv32_OSBA_3ISM_FOA.wav.2.csv mv ltv32_OSBA_3ISM_HOA2_ISM1.csv ltv32_OSBA_3ISM_HOA2.wav.0.csv mv ltv32_OSBA_3ISM_HOA2_ISM2.csv ltv32_OSBA_3ISM_HOA2.wav.1.csv mv ltv32_OSBA_3ISM_HOA2_ISM3.csv ltv32_OSBA_3ISM_HOA2.wav.2.csv mv ltv32_OSBA_3ISM_HOA3_ISM1.csv ltv32_OSBA_3ISM_HOA3.wav.0.csv mv ltv32_OSBA_3ISM_HOA3_ISM2.csv ltv32_OSBA_3ISM_HOA3.wav.1.csv mv ltv32_OSBA_3ISM_HOA3_ISM3.csv ltv32_OSBA_3ISM_HOA3.wav.2.csv mv ltv32_OSBA_4ISM_FOA_ISM1.csv ltv32_OSBA_4ISM_FOA.wav.0.csv mv ltv32_OSBA_4ISM_FOA_ISM2.csv ltv32_OSBA_4ISM_FOA.wav.1.csv mv ltv32_OSBA_4ISM_FOA_ISM3.csv ltv32_OSBA_4ISM_FOA.wav.2.csv mv ltv32_OSBA_4ISM_FOA_ISM4.csv ltv32_OSBA_4ISM_FOA.wav.3.csv mv ltv32_OSBA_4ISM_HOA2_ISM1.csv ltv32_OSBA_4ISM_HOA2.wav.0.csv mv ltv32_OSBA_4ISM_HOA2_ISM2.csv ltv32_OSBA_4ISM_HOA2.wav.1.csv mv ltv32_OSBA_4ISM_HOA2_ISM3.csv ltv32_OSBA_4ISM_HOA2.wav.2.csv mv ltv32_OSBA_4ISM_HOA2_ISM4.csv ltv32_OSBA_4ISM_HOA2.wav.3.csv mv ltv32_OSBA_4ISM_HOA3_ISM1.csv ltv32_OSBA_4ISM_HOA3.wav.0.csv mv ltv32_OSBA_4ISM_HOA3_ISM2.csv ltv32_OSBA_4ISM_HOA3.wav.1.csv mv ltv32_OSBA_4ISM_HOA3_ISM3.csv ltv32_OSBA_4ISM_HOA3.wav.2.csv mv ltv32_OSBA_4ISM_HOA3_ISM4.csv ltv32_OSBA_4ISM_HOA3.wav.3.csv mv ltv48_OSBA_1ISM_FOA_ISM1.csv ltv48_OSBA_1ISM_FOA.wav.0.csv mv ltv48_OSBA_1ISM_HOA2_ISM1.csv ltv48_OSBA_1ISM_HOA2.wav.0.csv mv ltv48_OSBA_1ISM_HOA3_ISM1.csv ltv48_OSBA_1ISM_HOA3.wav.0.csv mv ltv48_OSBA_2ISM_FOA_ISM1.csv ltv48_OSBA_2ISM_FOA.wav.0.csv mv ltv48_OSBA_2ISM_FOA_ISM2.csv ltv48_OSBA_2ISM_FOA.wav.1.csv mv ltv48_OSBA_2ISM_HOA2_ISM1.csv ltv48_OSBA_2ISM_HOA2.wav.0.csv mv ltv48_OSBA_2ISM_HOA2_ISM2.csv ltv48_OSBA_2ISM_HOA2.wav.1.csv mv ltv48_OSBA_2ISM_HOA3_ISM1.csv ltv48_OSBA_2ISM_HOA3.wav.0.csv mv ltv48_OSBA_2ISM_HOA3_ISM2.csv ltv48_OSBA_2ISM_HOA3.wav.1.csv mv ltv48_OSBA_3ISM_FOA_ISM1.csv ltv48_OSBA_3ISM_FOA.wav.0.csv mv ltv48_OSBA_3ISM_FOA_ISM2.csv ltv48_OSBA_3ISM_FOA.wav.1.csv mv ltv48_OSBA_3ISM_FOA_ISM3.csv ltv48_OSBA_3ISM_FOA.wav.2.csv mv ltv48_OSBA_3ISM_HOA2_ISM1.csv ltv48_OSBA_3ISM_HOA2.wav.0.csv mv ltv48_OSBA_3ISM_HOA2_ISM2.csv ltv48_OSBA_3ISM_HOA2.wav.1.csv mv ltv48_OSBA_3ISM_HOA2_ISM3.csv ltv48_OSBA_3ISM_HOA2.wav.2.csv mv ltv48_OSBA_3ISM_HOA3_ISM1.csv ltv48_OSBA_3ISM_HOA3.wav.0.csv mv ltv48_OSBA_3ISM_HOA3_ISM2.csv ltv48_OSBA_3ISM_HOA3.wav.1.csv mv ltv48_OSBA_3ISM_HOA3_ISM3.csv ltv48_OSBA_3ISM_HOA3.wav.2.csv mv ltv48_OSBA_4ISM_FOA_ISM1.csv ltv48_OSBA_4ISM_FOA.wav.0.csv mv ltv48_OSBA_4ISM_FOA_ISM2.csv ltv48_OSBA_4ISM_FOA.wav.1.csv mv ltv48_OSBA_4ISM_FOA_ISM3.csv ltv48_OSBA_4ISM_FOA.wav.2.csv mv ltv48_OSBA_4ISM_FOA_ISM4.csv ltv48_OSBA_4ISM_FOA.wav.3.csv mv ltv48_OSBA_4ISM_HOA2_ISM1.csv ltv48_OSBA_4ISM_HOA2.wav.0.csv mv ltv48_OSBA_4ISM_HOA2_ISM2.csv ltv48_OSBA_4ISM_HOA2.wav.1.csv mv ltv48_OSBA_4ISM_HOA2_ISM3.csv ltv48_OSBA_4ISM_HOA2.wav.2.csv mv ltv48_OSBA_4ISM_HOA2_ISM4.csv ltv48_OSBA_4ISM_HOA2.wav.3.csv mv ltv48_OSBA_4ISM_HOA3_ISM1.csv ltv48_OSBA_4ISM_HOA3.wav.0.csv mv ltv48_OSBA_4ISM_HOA3_ISM2.csv ltv48_OSBA_4ISM_HOA3.wav.1.csv mv ltv48_OSBA_4ISM_HOA3_ISM3.csv ltv48_OSBA_4ISM_HOA3.wav.2.csv mv ltv48_OSBA_4ISM_HOA3_ISM4.csv ltv48_OSBA_4ISM_HOA3.wav.3.csv
scripts/parse_loudness_data.py +3 −4 Original line number Diff line number Diff line Loading @@ -52,9 +52,9 @@ def plot_loudness_by_bandwidth(df, in_fmt, out_fmt, out_dir): if in_fmt is not None: filtered_df = filtered_df[filtered_df["format"] == in_fmt] y_min, y_max = -36, -16 input_loudness = float(filtered_df["input_loudness"].unique()[0]) y_min, y_max = round(input_loudness) - 10, round(input_loudness) + 10 y_ticks = np.arange(y_min, y_max + 5, 5) # get unique bitrates and sort them bitrates = sorted(filtered_df["bitrate"].unique()) bitrate_to_idx = {br: idx for idx, br in enumerate(bitrates)} Loading @@ -74,7 +74,6 @@ def plot_loudness_by_bandwidth(df, in_fmt, out_fmt, out_dir): ax = axes[idx] bw_data = filtered_df[filtered_df["bandwidth"] == bw] input_loudness = float(bw_data["input_loudness"].unique()[0]) if input_loudness is not None: # highlight ±1 LKFS green ax.axhspan( Loading Loading @@ -315,4 +314,4 @@ if __name__ == "__main__": print(f"\nError processing {task[1]} -> {task[2]}: {e}") completed += 1 progressbar_update(completed, total_tasks, width=50) print(f"✅ Processed {len(tasks)} format pairs successfully") print(f"\n✅ Processed {len(tasks)} format pairs successfully")