1*600f14f4SXin Li#!/bin/sh -e 2*600f14f4SXin Li 3*600f14f4SXin Li# FLAC - Free Lossless Audio Codec 4*600f14f4SXin Li# Copyright (C) 2002-2009 Josh Coalson 5*600f14f4SXin Li# Copyright (C) 2011-2023 Xiph.Org Foundation 6*600f14f4SXin Li# 7*600f14f4SXin Li# This file is part the FLAC project. FLAC is comprised of several 8*600f14f4SXin Li# components distributed under different licenses. The codec libraries 9*600f14f4SXin Li# are distributed under Xiph.Org's BSD-like license (see the file 10*600f14f4SXin Li# COPYING.Xiph in this distribution). All other programs, libraries, and 11*600f14f4SXin Li# plugins are distributed under the GPL (see COPYING.GPL). The documentation 12*600f14f4SXin Li# is distributed under the Gnu FDL (see COPYING.FDL). Each file in the 13*600f14f4SXin Li# FLAC distribution contains at the top the terms under which it may be 14*600f14f4SXin Li# distributed. 15*600f14f4SXin Li# 16*600f14f4SXin Li# Since this particular file is relevant to all components of FLAC, 17*600f14f4SXin Li# it may be distributed under the Xiph.Org license, which is the least 18*600f14f4SXin Li# restrictive of those mentioned above. See the file COPYING.Xiph in this 19*600f14f4SXin Li# distribution. 20*600f14f4SXin Li 21*600f14f4SXin Li. ./common.sh 22*600f14f4SXin Li 23*600f14f4SXin LiPATH="$(pwd)/../src/flac:$PATH" 24*600f14f4SXin LiPATH="$(pwd)/../src/metaflac:$PATH" 25*600f14f4SXin LiPATH="$(pwd)/../objs/$BUILD/bin:$PATH" 26*600f14f4SXin Li 27*600f14f4SXin Liif echo a | (grep -E '(a|b)') >/dev/null 2>&1 28*600f14f4SXin Li then EGREP='grep -E' 29*600f14f4SXin Li else EGREP='egrep' 30*600f14f4SXin Lifi 31*600f14f4SXin Li 32*600f14f4SXin Litestdir="metaflac-test-files" 33*600f14f4SXin Liflacfile="replaygain.flac" 34*600f14f4SXin Li 35*600f14f4SXin Lirun_flac () 36*600f14f4SXin Li{ 37*600f14f4SXin Li if [ "$FLAC__TEST_WITH_VALGRIND" = yes ] ; then 38*600f14f4SXin Li echo "valgrind --leak-check=yes --show-reachable=yes --num-callers=50 flac $*" >>test_replaygain.valgrind.log 39*600f14f4SXin Li valgrind --leak-check=yes --show-reachable=yes --num-callers=50 --log-fd=4 flac --no-error-on-compression-fail $* 4>>test_replaygain.valgrind.log 40*600f14f4SXin Li else 41*600f14f4SXin Li flac${EXE} --no-error-on-compression-fail $* 42*600f14f4SXin Li fi 43*600f14f4SXin Li} 44*600f14f4SXin Li 45*600f14f4SXin Lirun_metaflac () 46*600f14f4SXin Li{ 47*600f14f4SXin Li if [ "$FLAC__TEST_WITH_VALGRIND" = yes ] ; then 48*600f14f4SXin Li echo "valgrind --leak-check=yes --show-reachable=yes --num-callers=50 metaflac $*" >>test_replaygain.valgrind.log 49*600f14f4SXin Li valgrind --leak-check=yes --show-reachable=yes --num-callers=50 --log-fd=4 metaflac $* 4>>test_replaygain.valgrind.log 50*600f14f4SXin Li else 51*600f14f4SXin Li metaflac${EXE} $* 52*600f14f4SXin Li fi 53*600f14f4SXin Li} 54*600f14f4SXin Li 55*600f14f4SXin Lirun_metaflac_silent () 56*600f14f4SXin Li{ 57*600f14f4SXin Li if [ -z "$SILENT" ] ; then 58*600f14f4SXin Li run_metaflac $* 59*600f14f4SXin Li else 60*600f14f4SXin Li if [ "$FLAC__TEST_WITH_VALGRIND" = yes ] ; then 61*600f14f4SXin Li echo "valgrind --leak-check=yes --show-reachable=yes --num-callers=50 metaflac $*" >>test_replaygain.valgrind.log 62*600f14f4SXin Li valgrind --leak-check=yes --show-reachable=yes --num-callers=50 --log-fd=4 metaflac $* 2>/dev/null 4>>test_replaygain.valgrind.log 63*600f14f4SXin Li else 64*600f14f4SXin Li metaflac${EXE} $* 2>/dev/null 65*600f14f4SXin Li fi 66*600f14f4SXin Li fi 67*600f14f4SXin Li} 68*600f14f4SXin Li 69*600f14f4SXin Licheck_flac () 70*600f14f4SXin Li{ 71*600f14f4SXin Li run_flac --silent --test $flacfile || die "ERROR in $flacfile" 1>&2 72*600f14f4SXin Li} 73*600f14f4SXin Li 74*600f14f4SXin Liecho "Generating stream..." 75*600f14f4SXin Libytes=80000 76*600f14f4SXin Liif dd if=/dev/zero ibs=1 count=$bytes 2>/dev/null | flac${EXE} --silent --force --verify -0 --input-size=$bytes --output-name=$flacfile --force-raw-format --endian=big --sign=signed --channels=1 --bps=8 --sample-rate=8000 - ; then 77*600f14f4SXin Li chmod +w $flacfile 78*600f14f4SXin Lielse 79*600f14f4SXin Li die "ERROR during generation" 80*600f14f4SXin Lifi 81*600f14f4SXin Li 82*600f14f4SXin Licheck_flac 83*600f14f4SXin Li 84*600f14f4SXin Li# Replay gain tests - Test the rates which have specific filter table entries 85*600f14f4SXin Li# and verify that harmonics can be processed correctly. 86*600f14f4SXin Li 87*600f14f4SXin Litonegenerator () 88*600f14f4SXin Li{ 89*600f14f4SXin Li flac${EXE} --force --output-name=$2 --silent --no-seektable --no-error-on-compression-fail rpg-tone-$1.wav 90*600f14f4SXin Li} 91*600f14f4SXin Li 92*600f14f4SXin LiREPLAYGAIN_FREQ= 93*600f14f4SXin LiREPLAYGAIN_FREQ="$REPLAYGAIN_FREQ 8000/-12.73" 94*600f14f4SXin LiREPLAYGAIN_FREQ="$REPLAYGAIN_FREQ 11025/-12.91" 95*600f14f4SXin LiREPLAYGAIN_FREQ="$REPLAYGAIN_FREQ 12000/-12.98" 96*600f14f4SXin LiREPLAYGAIN_FREQ="$REPLAYGAIN_FREQ 16000/-13.27" 97*600f14f4SXin LiREPLAYGAIN_FREQ="$REPLAYGAIN_FREQ 18900/-13.41" 98*600f14f4SXin LiREPLAYGAIN_FREQ="$REPLAYGAIN_FREQ 22050/-13.77" 99*600f14f4SXin LiREPLAYGAIN_FREQ="$REPLAYGAIN_FREQ 24000/-13.82" 100*600f14f4SXin LiREPLAYGAIN_FREQ="$REPLAYGAIN_FREQ 28000/-14.06" 101*600f14f4SXin LiREPLAYGAIN_FREQ="$REPLAYGAIN_FREQ 32000/-14.08" 102*600f14f4SXin LiREPLAYGAIN_FREQ="$REPLAYGAIN_FREQ 36000/-14.12" 103*600f14f4SXin LiREPLAYGAIN_FREQ="$REPLAYGAIN_FREQ 37800/-14.18" 104*600f14f4SXin LiREPLAYGAIN_FREQ="$REPLAYGAIN_FREQ 44100/-14.17" 105*600f14f4SXin LiREPLAYGAIN_FREQ="$REPLAYGAIN_FREQ 48000/-14.16:1:2:4" 106*600f14f4SXin Li 107*600f14f4SXin Liset -e 108*600f14f4SXin Li 109*600f14f4SXin Lifor ACTION in $REPLAYGAIN_FREQ ; do 110*600f14f4SXin Li if [ -n "${ACTION##*:*}" ] ; then 111*600f14f4SXin Li HARMONICS=1 112*600f14f4SXin Li else 113*600f14f4SXin Li HARMONICS="${ACTION#*:}" 114*600f14f4SXin Li fi 115*600f14f4SXin Li FREQ="${ACTION%%/*}" 116*600f14f4SXin Li GAIN="${ACTION#*/}" 117*600f14f4SXin Li GAIN="${GAIN%%:*}" 118*600f14f4SXin Li while [ -n "$HARMONICS" ] ; do 119*600f14f4SXin Li MULTIPLE="${HARMONICS%%:*}" 120*600f14f4SXin Li if [ "$MULTIPLE" = "$HARMONICS" ] ; then 121*600f14f4SXin Li HARMONICS= 122*600f14f4SXin Li else 123*600f14f4SXin Li HARMONICS="${HARMONICS#*:}" 124*600f14f4SXin Li fi 125*600f14f4SXin Li RATE=$((MULTIPLE * FREQ)) 126*600f14f4SXin Li [ $MULTIPLE -eq 1 -o -n "${REPLAYGAIN_FREQ##* $RATE/*}" ] || break 127*600f14f4SXin Li echo $ECHO_N "Testing FLAC replaygain $RATE ($FREQ x $MULTIPLE) ... " $ECHO_C 128*600f14f4SXin Li tonegenerator $RATE $flacfile 129*600f14f4SXin Li run_metaflac --scan-replay-gain $flacfile 130*600f14f4SXin Li run_metaflac --add-replay-gain $flacfile 131*600f14f4SXin Li run_metaflac --list $flacfile | grep "REPLAYGAIN.*GAIN=" | 132*600f14f4SXin Li while read -r REPLAYGAIN ; do 133*600f14f4SXin Li MEASUREDGAIN="${REPLAYGAIN##*=}" 134*600f14f4SXin Li MEASUREDGAIN="${MEASUREDGAIN%% *}" 135*600f14f4SXin Li if [ x"$MEASUREDGAIN" != x"$GAIN" ] ; then 136*600f14f4SXin Li die "ERROR, Expected $GAIN db instead of $REPLAYGAIN" 137*600f14f4SXin Li fi 138*600f14f4SXin Li done 139*600f14f4SXin Li echo OK 140*600f14f4SXin Li done 141*600f14f4SXin Lidone 142*600f14f4SXin Li 143*600f14f4SXin Li 144*600f14f4SXin Lirm -f $testdir/out.flac $testdir/out.meta 145*600f14f4SXin Li 146*600f14f4SXin Liexit 0 147