mirror of
https://github.com/claunia/flac.git
synced 2025-12-16 18:54:26 +00:00
The AWK script used to generate tones for this test fails with gawk version 4.0.1, but used to work for earlier versions. Use mawk instead if it exists.
219 lines
6.5 KiB
Bash
Executable File
219 lines
6.5 KiB
Bash
Executable File
#!/bin/sh -e
|
|
|
|
# FLAC - Free Lossless Audio Codec
|
|
# Copyright (C) 2002-2009 Josh Coalson
|
|
# Copyright (C) 2011-2013 Xiph.Org Foundation
|
|
#
|
|
# This file is part the FLAC project. FLAC is comprised of several
|
|
# components distributed under different licenses. The codec libraries
|
|
# are distributed under Xiph.Org's BSD-like license (see the file
|
|
# COPYING.Xiph in this distribution). All other programs, libraries, and
|
|
# plugins are distributed under the GPL (see COPYING.GPL). The documentation
|
|
# is distributed under the Gnu FDL (see COPYING.FDL). Each file in the
|
|
# FLAC distribution contains at the top the terms under which it may be
|
|
# distributed.
|
|
#
|
|
# Since this particular file is relevant to all components of FLAC,
|
|
# it may be distributed under the Xiph.Org license, which is the least
|
|
# restrictive of those mentioned above. See the file COPYING.Xiph in this
|
|
# distribution.
|
|
|
|
die ()
|
|
{
|
|
echo $* 1>&2
|
|
exit 1
|
|
}
|
|
|
|
if [ x = x"$1" ] ; then
|
|
BUILD=debug
|
|
else
|
|
BUILD="$1"
|
|
fi
|
|
|
|
# change to 'false' to show all flac/metaflac output (useful for debugging)
|
|
if true ; then
|
|
SILENT='--silent'
|
|
TOTALLY_SILENT='--totally-silent'
|
|
else
|
|
SILENT=''
|
|
TOTALLY_SILENT=''
|
|
fi
|
|
|
|
LD_LIBRARY_PATH=`pwd`/../src/libFLAC/.libs:$LD_LIBRARY_PATH
|
|
LD_LIBRARY_PATH=`pwd`/../src/share/grabbag/.libs:$LD_LIBRARY_PATH
|
|
LD_LIBRARY_PATH=`pwd`/../src/share/getopt/.libs:$LD_LIBRARY_PATH
|
|
LD_LIBRARY_PATH=`pwd`/../src/share/replaygain_analysis/.libs:$LD_LIBRARY_PATH
|
|
LD_LIBRARY_PATH=`pwd`/../src/share/replaygain_synthesis/.libs:$LD_LIBRARY_PATH
|
|
LD_LIBRARY_PATH=`pwd`/../src/share/utf8/.libs:$LD_LIBRARY_PATH
|
|
LD_LIBRARY_PATH=`pwd`/../objs/$BUILD/lib:$LD_LIBRARY_PATH
|
|
export LD_LIBRARY_PATH
|
|
export MALLOC_CHECK_=3
|
|
export MALLOC_PERTURB_=$(($(date +%s) % 255 + 1))
|
|
PATH=`pwd`/../src/flac:$PATH
|
|
PATH=`pwd`/../src/metaflac:$PATH
|
|
PATH=`pwd`/../objs/$BUILD/bin:$PATH
|
|
|
|
if echo a | (grep -E '(a|b)') >/dev/null 2>&1
|
|
then EGREP='grep -E'
|
|
else EGREP='egrep'
|
|
fi
|
|
|
|
testdir="metaflac-test-files"
|
|
flacfile="replaygain.flac"
|
|
|
|
run_flac ()
|
|
{
|
|
if [ x"$FLAC__TEST_WITH_VALGRIND" = xyes ] ; then
|
|
echo "valgrind --leak-check=yes --show-reachable=yes --num-callers=50 flac $*" >>test_metaflac.valgrind.log
|
|
valgrind --leak-check=yes --show-reachable=yes --num-callers=50 --log-fd=4 flac --no-error-on-compression-fail $* 4>>test_metaflac.valgrind.log
|
|
else
|
|
flac --no-error-on-compression-fail $*
|
|
fi
|
|
}
|
|
|
|
run_metaflac ()
|
|
{
|
|
if [ x"$FLAC__TEST_WITH_VALGRIND" = xyes ] ; then
|
|
echo "valgrind --leak-check=yes --show-reachable=yes --num-callers=50 metaflac $*" >>test_metaflac.valgrind.log
|
|
valgrind --leak-check=yes --show-reachable=yes --num-callers=50 --log-fd=4 metaflac $* 4>>test_metaflac.valgrind.log
|
|
else
|
|
metaflac $*
|
|
fi
|
|
}
|
|
|
|
run_metaflac_silent ()
|
|
{
|
|
if [ -z "$SILENT" ] ; then
|
|
run_metaflac $*
|
|
else
|
|
if [ x"$FLAC__TEST_WITH_VALGRIND" = xyes ] ; then
|
|
echo "valgrind --leak-check=yes --show-reachable=yes --num-callers=50 metaflac $*" >>test_metaflac.valgrind.log
|
|
valgrind --leak-check=yes --show-reachable=yes --num-callers=50 --log-fd=4 metaflac $* 2>/dev/null 4>>test_metaflac.valgrind.log
|
|
else
|
|
metaflac $* 2>/dev/null
|
|
fi
|
|
fi
|
|
}
|
|
|
|
check_flac ()
|
|
{
|
|
run_flac --silent --test $flacfile || die "ERROR in $flacfile" 1>&2
|
|
}
|
|
|
|
echo "Generating stream..."
|
|
bytes=80000
|
|
if dd if=/dev/zero ibs=1 count=$bytes | flac --force --verify -0 --input-size=$bytes --output-name=$flacfile --force-raw-format --endian=big --sign=signed --channels=1 --bps=8 --sample-rate=8000 - ; then
|
|
chmod +w $flacfile
|
|
else
|
|
die "ERROR during generation"
|
|
fi
|
|
|
|
check_flac
|
|
|
|
|
|
if mawk ; then
|
|
AWK=mawk
|
|
else
|
|
# Really hope awk is not gawk, because the following AWK script doesn't
|
|
# work correctly with gawk 4.0.1 but did with earlier versions.
|
|
AWK=awk
|
|
fi
|
|
|
|
# Replay gain tests - Test the rates which have specific filter table entries
|
|
# and verify that harmonics can be processed correctly.
|
|
|
|
tonegenerator ()
|
|
{
|
|
# When using GAWK, use --lint=posix to identify non-POSIX awk usages.
|
|
$AWK -- '
|
|
BEGIN {
|
|
samplerate = '$1';
|
|
|
|
tone = 1000;
|
|
duration = 1;
|
|
bitspersample = 24;
|
|
|
|
samplemidpoint = 1;
|
|
for (sps = 0 ; sps < bitspersample - 1 ; sps++) {
|
|
samplemidpoint *= 2;
|
|
}
|
|
|
|
samplerange = samplemidpoint - 1;
|
|
|
|
pi = 4 * atan2(1,1);
|
|
|
|
for (ix = 0; ix < duration * samplerate; ++ix) {
|
|
sample = sin(2 * pi * tone * ix / samplerate);
|
|
sample *= samplerange;
|
|
sample += samplemidpoint;
|
|
sample = int(sample);
|
|
for (bx = 0; bx < bitspersample/8; ++bx) {
|
|
byte[bx] = sample % 256;
|
|
sample /= 256;
|
|
}
|
|
while (bx--) {
|
|
printf("%c", byte[bx]);
|
|
}
|
|
}
|
|
|
|
}' /dev/null |
|
|
flac --silent --no-error-on-compression-fail \
|
|
--endian=big --channels=1 --bps=24 --sample-rate=$1 --sign=unsigned -
|
|
}
|
|
|
|
REPLAYGAIN_FREQ=
|
|
REPLAYGAIN_FREQ="$REPLAYGAIN_FREQ 8000/-12.73"
|
|
REPLAYGAIN_FREQ="$REPLAYGAIN_FREQ 11025/-12.93"
|
|
REPLAYGAIN_FREQ="$REPLAYGAIN_FREQ 11025/-12.93"
|
|
REPLAYGAIN_FREQ="$REPLAYGAIN_FREQ 12000/-12.98"
|
|
REPLAYGAIN_FREQ="$REPLAYGAIN_FREQ 16000/-13.27"
|
|
REPLAYGAIN_FREQ="$REPLAYGAIN_FREQ 18900/-13.41"
|
|
REPLAYGAIN_FREQ="$REPLAYGAIN_FREQ 22050/-13.77"
|
|
REPLAYGAIN_FREQ="$REPLAYGAIN_FREQ 24000/-13.82"
|
|
REPLAYGAIN_FREQ="$REPLAYGAIN_FREQ 28000/-14.06"
|
|
REPLAYGAIN_FREQ="$REPLAYGAIN_FREQ 32000/-14.08"
|
|
REPLAYGAIN_FREQ="$REPLAYGAIN_FREQ 36000/-14.12"
|
|
REPLAYGAIN_FREQ="$REPLAYGAIN_FREQ 37800/-14.18"
|
|
REPLAYGAIN_FREQ="$REPLAYGAIN_FREQ 44100/-14.17"
|
|
REPLAYGAIN_FREQ="$REPLAYGAIN_FREQ 48000/-14.16:1:2:4"
|
|
|
|
set -e
|
|
|
|
for ACTION in $REPLAYGAIN_FREQ ; do
|
|
if [ -n "${ACTION##*:*}" ] ; then
|
|
HARMONICS=1
|
|
else
|
|
HARMONICS="${ACTION#*:}"
|
|
fi
|
|
FREQ="${ACTION%%/*}"
|
|
GAIN="${ACTION#*/}"
|
|
GAIN="${GAIN%%:*}"
|
|
while [ -n "$HARMONICS" ] ; do
|
|
MULTIPLE="${HARMONICS%%:*}"
|
|
if [ x"$MULTIPLE" = x"$HARMONICS" ] ; then
|
|
HARMONICS=
|
|
else
|
|
HARMONICS="${HARMONICS#*:}"
|
|
fi
|
|
RATE=$(($MULTIPLE * FREQ))
|
|
[ $MULTIPLE -eq 1 -o -n "${REPLAYGAIN_FREQ##* $RATE/*}" ] || break
|
|
echo -n "Testing FLAC replaygain $RATE ($FREQ x $MULTIPLE) ... "
|
|
tonegenerator $RATE > $flacfile
|
|
run_metaflac --add-replay-gain $flacfile
|
|
run_metaflac --list $flacfile | grep REPLAYGAIN.*GAIN= |
|
|
while read -r REPLAYGAIN ; do
|
|
MEASUREDGAIN="${REPLAYGAIN##*=}"
|
|
MEASUREDGAIN="${MEASUREDGAIN%% *}"
|
|
if [ x"$MEASUREDGAIN" != x"$GAIN" ] ; then
|
|
die "ERROR, Expected $GAIN db instead of $REPLAYGAIN"
|
|
fi
|
|
done
|
|
echo OK
|
|
done
|
|
done
|
|
|
|
|
|
rm -f $testdir/out.flac $testdir/out.meta
|
|
|
|
exit 0
|