diff --git a/other/check_ISM.sh b/other/check_ISM.sh new file mode 100755 index 0000000000000000000000000000000000000000..97690317a94be5f08f80cf038e9e419ba23748d4 --- /dev/null +++ b/other/check_ISM.sh @@ -0,0 +1,92 @@ +#!/usr/bin/env bash + +# (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. + + +# Usage: check_ISM.sh audio.wav ism_metadata.0.csv [... ism_metadata.4.csv] +# Compares the number of audio frames against the number of frames in the object metadata +# Requires: InfoAudio + + +if (( $# < 2 || $# > 5 )); then + echo "" + echo "Usage: $0 audio.wav ism_metadata.0.csv [... ism_metadata.4.csv]" >&2 + echo "file_name;success;audio_20ms_aligned;no_audio_frames;no_object_frames" >&2 + exit 1 +fi + +InfoAudio=InfoAudio + +audio_file=$1 +metadata_files=("${@:2}") +line_counts=() + +# getting all info from InfoAudio - storing in res +res=`$InfoAudio "$audio_file"` +# paring res +sampleFreq=`echo "$res" | grep -m1 "Sampling frequency" | sed -e 's/\([a-zA-Z\. ]*: \)\([0-9]*\)\(.*\)/\2/g'` +frameSize=$(( sampleFreq / 50 )) +numberSamples=`echo "$res" | grep -m1 "No. frames" | sed -e 's/\([a-zA-Z\. ]*: \)\([0-9]*\)\(.*\)/\2/g'` +numberSampleFrames=$(( numberSamples / frameSize )) + +aligned20ms=false +remainder=$(expr $numberSamples % 960) +if [ $remainder -eq 0 ]; then + aligned20ms=true +fi + +# iterate over metadata-files +for file in "${metadata_files[@]}"; do + if [[ -r $file ]]; then + # count number of lines + lines=$(wc -l < "$file") + line_counts+=("$lines") + else + echo "Warning: File '$file' not found or not readable" >&2 + line_counts+=(0) + fi +done + +success=true +if [[ "$aligned20ms" == "false" ]]; then + success=false +fi + +no_object_frames="" +for i in "${!line_counts[@]}"; do + count="${line_counts[i]//[[:space:]]/}" # also remove any whitespace + no_object_frames+=";$count" + + if (( count != numberSampleFrames )); then + success=false + fi +done + +# echo "file_name;success;audio_20ms_aligned;no_audio_frames;no_object_frames" +echo "${audio_file};${success};${aligned20ms};${numberSampleFrames}${no_object_frames}"