<html><body><div style="color:#000; background-color:#fff; font-family:times new roman, new york, times, serif;font-size:12pt"><div>The test is rather simple, and only compares the computed output values for a 1kHz signal</div><div>at the known filter table sampling frequencies with previously obained golden values.<br><br>As such, the test only verifies that the performance of the replay<br>gain analyser has not changed.<br><br>A better test would be to compare the computed value with an independently<br>obtain theorectical value. This is possible by more judicious use of<br>the loudness.sci script, combined with more modelling of filter<br>operation in scilab. Such a test would verify that the performance<br>of the replay gain analyser is actually correct.<br><br>There is only one test to verify handling of harmonics of the filter table<br>sampling frequencies.<br><br>Signed-off-by: Earl Chew
 &lt;earl_chew@yahoo.com&gt;<br>---<br>&nbsp;test/test_metaflac.sh |&nbsp;&nbsp; 86 +++++++++++++++++++++++++++++++++++++++++++++++++<br>&nbsp;1 files changed, 86 insertions(+), 0 deletions(-)<br><br>diff --git a/test/test_metaflac.sh b/test/test_metaflac.sh<br>index 19f5a00..5b82f11 100755<br>--- a/test/test_metaflac.sh<br>+++ b/test/test_metaflac.sh<br>@@ -392,6 +392,92 @@ run_metaflac --remove --block-type=VORBIS_COMMENT --dont-use-padding $flacfile<br>&nbsp;cmp $flacfile metaflac.flac.ok || die "ERROR, $flacfile and metaflac.flac.ok differ"<br>&nbsp;echo OK<br>&nbsp;<br>+# Replay gain tests - Test the rates which have specific filter table entries<br>+# and verify that harmonics can be processed correctly.<br>+<br>+tonegenerator ()<br>+{<br>+&nbsp;&nbsp;&nbsp; awk -- '<br>+&nbsp;&nbsp;&nbsp; BEGIN {<br>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; samplerate =
 '$1';<br>+<br>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; tone = 1000;<br>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; duration = 1;<br>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; bitspersample = 24;<br>+<br>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; samplemidpoint = lshift(1, (bitspersample-1));<br>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; samplerange = samplemidpoint - 1;<br>+<br>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; pi = 4 * atan2(1,1);<br>+<br>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for (ix = 0; ix &lt; duration * samplerate; ++ix) {<br>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; sample = sin(2 * pi * tone * ix /
 samplerate);<br>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; sample *= samplerange;<br>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; sample += samplemidpoint;<br>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; sample = int(sample);<br>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for (bx = 0; bx &lt; bitspersample/8; ++bx) {<br>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; byte[bx] = sample % 256;<br>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
 sample /= 256;<br>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; while (bx--) {<br>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; printf("%c", byte[bx]);<br>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>+<br>+&nbsp;&nbsp;&nbsp; }' /dev/null |<br>+&nbsp;&nbsp;&nbsp; flac --silent \<br>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; --endian=big --channels=1 --bps=24 --sample-rate=$1 --sign=unsigned -<br>+}<br>+<br>+REPLAYGAIN_FREQ=<br>+REPLAYGAIN_FREQ="$REPLAYGAIN_FREQ&nbsp;
 8000/-12.73"<br>+REPLAYGAIN_FREQ="$REPLAYGAIN_FREQ 11025/-12.93"<br>+REPLAYGAIN_FREQ="$REPLAYGAIN_FREQ 11025/-12.93"<br>+REPLAYGAIN_FREQ="$REPLAYGAIN_FREQ 12000/-12.98"<br>+REPLAYGAIN_FREQ="$REPLAYGAIN_FREQ 16000/-13.27"<br>+REPLAYGAIN_FREQ="$REPLAYGAIN_FREQ 18900/-13.41"<br>+REPLAYGAIN_FREQ="$REPLAYGAIN_FREQ 22050/-13.77"<br>+REPLAYGAIN_FREQ="$REPLAYGAIN_FREQ 24000/-13.82"<br>+REPLAYGAIN_FREQ="$REPLAYGAIN_FREQ 28000/-14.06"<br>+REPLAYGAIN_FREQ="$REPLAYGAIN_FREQ 32000/-14.08"<br>+REPLAYGAIN_FREQ="$REPLAYGAIN_FREQ 36000/-14.12"<br>+REPLAYGAIN_FREQ="$REPLAYGAIN_FREQ 37800/-14.18"<br>+REPLAYGAIN_FREQ="$REPLAYGAIN_FREQ 44100/-14.17"<br>+REPLAYGAIN_FREQ="$REPLAYGAIN_FREQ 48000/-14.16:1:2:4"<br>+<br>+for ACTION in $REPLAYGAIN_FREQ ; do<br>+&nbsp; if [ -n "${ACTION##*:*}" ] ; then<br>+&nbsp;&nbsp;&nbsp; HARMONICS=1<br>+&nbsp; else<br>+&nbsp;&nbsp;&nbsp; HARMONICS="${ACTION#*:}"<br>+&nbsp; fi<br>+&nbsp; FREQ="${ACTION%%/*}"<br>+&nbsp;
 GAIN="${ACTION#*/}"<br>+&nbsp; GAIN="${GAIN%%:*}"<br>+&nbsp; while [ -n "$HARMONICS" ] ; do<br>+&nbsp;&nbsp;&nbsp; MULTIPLE="${HARMONICS%%:*}"<br>+&nbsp;&nbsp;&nbsp; if [ x"$MULTIPLE" = x"$HARMONICS" ] ; then<br>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; HARMONICS=<br>+&nbsp;&nbsp;&nbsp; else<br>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; HARMONICS="${HARMONICS#*:}"<br>+&nbsp;&nbsp;&nbsp; fi<br>+&nbsp;&nbsp;&nbsp; RATE=$(($MULTIPLE * FREQ))<br>+&nbsp;&nbsp;&nbsp; [ $MULTIPLE -eq 1 -o -n "${REPLAYGAIN_FREQ##* $RATE/*}" ] || break<br>+&nbsp;&nbsp;&nbsp; echo -n "Testing FLAC replaygain $RATE ($FREQ x $MULTIPLE) ... "<br>+&nbsp;&nbsp;&nbsp; tonegenerator $RATE &gt; $flacfile<br>+&nbsp;&nbsp;&nbsp; run_metaflac --add-replay-gain $flacfile<br>+&nbsp;&nbsp;&nbsp; run_metaflac --list $flacfile | grep REPLAYGAIN.*GAIN= |<br>+&nbsp;&nbsp;&nbsp; while read -r REPLAYGAIN ; do<br>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; MEASUREDGAIN="${REPLAYGAIN##*=}"<br>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
 MEASUREDGAIN="${MEASUREDGAIN%% *}"<br>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if [ x"$MEASUREDGAIN" != x"$GAIN" ] ; then<br>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; die "ERROR, Expected $GAIN db instead of $REPLAYGAIN"<br>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; fi<br>+&nbsp;&nbsp;&nbsp; done<br>+&nbsp;&nbsp;&nbsp; echo OK<br>+&nbsp; done<br>+done<br>+<br>&nbsp;rm -f $testdir/out.flac $testdir/out.meta<br>&nbsp;<br>&nbsp;exit 0<br>-- <br>1.6.5.2<br><br></div></div></body></html>