blob: 07474949dc72facea825f1d24cd5a4fa81164e0b [file] [log] [blame]
Erik de Castro Lopo1a7c3fa2014-11-27 13:03:13 +11001#!/bin/sh -e
Josh Coalson463d0f82002-12-10 06:41:27 +00002
3# FLAC - Free Lossless Audio Codec
Erik de Castro Lopob1982fb2013-05-25 17:11:19 +10004# Copyright (C) 2001-2009 Josh Coalson
Erik de Castro Lopo14373912014-11-24 22:07:15 +11005# Copyright (C) 2011-2014 Xiph.Org Foundation
Josh Coalson463d0f82002-12-10 06:41:27 +00006#
Josh Coalsone8a76012003-02-07 00:14:32 +00007# This file is part the FLAC project. FLAC is comprised of several
Ulrich Klauercd4ddab2013-05-26 22:53:43 +02008# components distributed under different licenses. The codec libraries
Josh Coalsone8a76012003-02-07 00:14:32 +00009# are distributed under Xiph.Org's BSD-like license (see the file
10# COPYING.Xiph in this distribution). All other programs, libraries, and
11# plugins are distributed under the GPL (see COPYING.GPL). The documentation
12# is distributed under the Gnu FDL (see COPYING.FDL). Each file in the
13# FLAC distribution contains at the top the terms under which it may be
14# distributed.
Josh Coalson463d0f82002-12-10 06:41:27 +000015#
Josh Coalsone8a76012003-02-07 00:14:32 +000016# Since this particular file is relevant to all components of FLAC,
17# it may be distributed under the Xiph.Org license, which is the least
18# restrictive of those mentioned above. See the file COPYING.Xiph in this
19# distribution.
Josh Coalson463d0f82002-12-10 06:41:27 +000020
Erik de Castro Lopo1a7c3fa2014-11-27 13:03:13 +110021. ./common.sh
Erik de Castro Lopoa9712a22013-09-16 19:55:11 +100022
Josh Coalsond75a07c2009-01-03 01:50:46 +000023# we use '.' as decimal separator in --skip/--until tests
24export LANG=C LC_ALL=C
25
Josh Coalson1d42ba62006-11-08 16:25:55 +000026dddie="die ERROR: creating files with dd"
27
Josh Coalsonbfda3782006-08-28 03:42:10 +000028PATH=`pwd`/../src/flac:$PATH
29PATH=`pwd`/../src/metaflac:$PATH
30PATH=`pwd`/../src/test_streams:$PATH
Erik de Castro Lopo85d5c532013-01-02 22:37:42 +110031PATH=`pwd`/../objs/$BUILD/bin:$PATH
Josh Coalson463d0f82002-12-10 06:41:27 +000032
Erik de Castro Lopoa9712a22013-09-16 19:55:11 +100033flac${EXE} --help 1>/dev/null 2>/dev/null || die "ERROR can't find flac executable"
Josh Coalson463d0f82002-12-10 06:41:27 +000034
35run_flac ()
36{
Josh Coalsonde9091e2006-05-25 02:48:22 +000037 if [ x"$FLAC__TEST_WITH_VALGRIND" = xyes ] ; then
Martijn van Beurdenf6585b02013-04-21 23:12:16 +020038 echo "valgrind --leak-check=yes --show-reachable=yes --num-callers=50 flac $*" >>test_flac.valgrind.log
Erik de Castro Lopobb2abea2015-02-13 19:47:30 +110039 valgrind --leak-check=yes --show-reachable=yes --num-callers=50 --log-fd=4 flac${EXE} $TOTALLY_SILENT --no-error-on-compression-fail $* 4>>test_flac.valgrind.log
Josh Coalson463d0f82002-12-10 06:41:27 +000040 else
Erik de Castro Lopobb2abea2015-02-13 19:47:30 +110041 flac${EXE} $TOTALLY_SILENT --no-error-on-compression-fail $*
Josh Coalson463d0f82002-12-10 06:41:27 +000042 fi
43}
44
Josh Coalson68d13212004-09-14 00:25:43 +000045run_metaflac ()
46{
Josh Coalsonde9091e2006-05-25 02:48:22 +000047 if [ x"$FLAC__TEST_WITH_VALGRIND" = xyes ] ; then
Martijn van Beurdenf6585b02013-04-21 23:12:16 +020048 echo "valgrind --leak-check=yes --show-reachable=yes --num-callers=50 metaflac $*" >>test_flac.valgrind.log
Erik de Castro Lopoa9712a22013-09-16 19:55:11 +100049 valgrind --leak-check=yes --show-reachable=yes --num-callers=50 --log-fd=4 metaflac${EXE} $* 4>>test_flac.valgrind.log
Josh Coalson68d13212004-09-14 00:25:43 +000050 else
Erik de Castro Lopoa9712a22013-09-16 19:55:11 +100051 metaflac${EXE} $*
Josh Coalson68d13212004-09-14 00:25:43 +000052 fi
53}
54
Josh Coalsonbfda3782006-08-28 03:42:10 +000055md5cmp ()
56{
Erik de Castro Lopoa9712a22013-09-16 19:55:11 +100057 n=`( [ -f "$1" ] && [ -f "$2" ] && metaflac${EXE} --show-md5sum --no-filename "$1" "$2" 2>/dev/null || exit 1 ) | uniq | wc -l`
Josh Coalsonbfda3782006-08-28 03:42:10 +000058 [ "$n" != "" ] && [ $n = 1 ]
59}
60
Josh Coalsond4346722004-09-12 22:58:13 +000061if [ `env | grep -ic '^comspec='` != 0 ] ; then
62 is_win=yes
63else
64 is_win=no
65fi
66
Josh Coalson463d0f82002-12-10 06:41:27 +000067echo "Checking for --ogg support in flac..."
Erik de Castro Lopobb2abea2015-02-13 19:47:30 +110068if flac${EXE} --ogg $TOTTALY_SILENT --force-raw-format --endian=little --sign=signed --channels=1 --bps=8 --sample-rate=44100 -c $0 1>/dev/null 2>&1 ; then
Josh Coalson463d0f82002-12-10 06:41:27 +000069 has_ogg=yes;
70 echo "flac --ogg works"
71else
72 has_ogg=no;
73 echo "flac --ogg doesn't work"
74fi
75
Josh Coalson5126bb02002-12-17 08:15:48 +000076echo "Generating streams..."
77if [ ! -f wacky1.wav ] ; then
78 test_streams || die "ERROR during test_streams"
79fi
80
81############################################################################
Josh Coalson0bb57d02004-07-16 00:50:42 +000082# test that flac doesn't automatically overwrite files unless -f is used
83############################################################################
84
85echo "Try encoding to a file that exists; should fail"
86cp wacky1.wav exist.wav
87touch exist.flac
Erik de Castro Lopobb2abea2015-02-13 19:47:30 +110088if run_flac -0 exist.wav ; then
Josh Coalson0bb57d02004-07-16 00:50:42 +000089 die "ERROR: it should have failed but didn't"
90else
91 echo "OK, it failed as it should"
92fi
93
94echo "Try encoding with -f to a file that exists; should succeed"
Erik de Castro Lopobb2abea2015-02-13 19:47:30 +110095if run_flac -0 --force exist.wav ; then
Josh Coalson0bb57d02004-07-16 00:50:42 +000096 echo "OK, it succeeded as it should"
97else
98 die "ERROR: it should have succeeded but didn't"
99fi
100
101echo "Try decoding to a file that exists; should fail"
Erik de Castro Lopobb2abea2015-02-13 19:47:30 +1100102if run_flac -d exist.flac ; then
Josh Coalson0bb57d02004-07-16 00:50:42 +0000103 die "ERROR: it should have failed but didn't"
104else
105 echo "OK, it failed as it should"
106fi
107
108echo "Try decoding with -f to a file that exists; should succeed"
Erik de Castro Lopobb2abea2015-02-13 19:47:30 +1100109if run_flac -d -f exist.flac ; then
Josh Coalson0bb57d02004-07-16 00:50:42 +0000110 echo "OK, it succeeded as it should"
111else
112 die "ERROR: it should have succeeded but didn't"
113fi
114
115rm -f exist.wav exist.flac
116
117############################################################################
Josh Coalson1d42ba62006-11-08 16:25:55 +0000118# test fractional block sizes
119############################################################################
120
Josh Coalsonacc4bea2006-11-09 16:53:15 +0000121test_fractional ()
122{
123 blocksize=$1
124 samples=$2
Josh Coalson1d42ba62006-11-08 16:25:55 +0000125 dd if=noise.raw ibs=4 count=$samples of=pbs.raw 2>/dev/null || $dddie
Erik de Castro Lopoefaab3c2015-10-04 09:43:33 +1100126 echo $ECHO_N "fractional block size test (blocksize=$blocksize samples=$samples) encode... " $ECHO_C
Erik de Castro Lopobb2abea2015-02-13 19:47:30 +1100127 run_flac --force --verify --force-raw-format --endian=little --sign=signed --sample-rate=44100 --bps=16 --channels=2 --blocksize=$blocksize --no-padding --lax -o pbs.flac pbs.raw || die "ERROR"
Erik de Castro Lopoefaab3c2015-10-04 09:43:33 +1100128 echo $ECHO_N "decode... " $ECHO_C
Erik de Castro Lopobb2abea2015-02-13 19:47:30 +1100129 run_flac --force --decode --force-raw-format --endian=little --sign=signed -o pbs.cmp pbs.flac || die "ERROR"
Erik de Castro Lopoefaab3c2015-10-04 09:43:33 +1100130 echo $ECHO_N "compare... " $ECHO_C
Josh Coalson1d42ba62006-11-08 16:25:55 +0000131 cmp pbs.raw pbs.cmp || die "ERROR: file mismatch"
132 echo "OK"
133 rm -f pbs.raw pbs.flac pbs.cmp
Josh Coalsonacc4bea2006-11-09 16:53:15 +0000134}
135
136# The special significance of 2048 is it's the # of samples that flac calls
137# FLAC__stream_encoder_process() on.
138#
139# We're trying to make sure the 1-sample overread logic in the stream encoder
140# (used for last-block checking) works; these values probe around common
141# multiples of the flac sample chunk size (2048) and the blocksize.
142for samples in 31 32 33 34 35 2046 2047 2048 2049 2050 ; do
143 test_fractional 33 $samples
144done
145for samples in 254 255 256 257 258 510 511 512 513 514 1022 1023 1024 1025 1026 2046 2047 2048 2049 2050 4094 4095 4096 4097 4098 ; do
146 test_fractional 256 $samples
147done
148for samples in 1022 1023 1024 1025 1026 2046 2047 2048 2049 2050 4094 4095 4096 4097 4098 ; do
149 test_fractional 2048 $samples
150done
151for samples in 1022 1023 1024 1025 1026 2046 2047 2048 2049 2050 4094 4095 4096 4097 4098 4606 4607 4608 4609 4610 8190 8191 8192 8193 8194 16382 16383 16384 16385 16386 ; do
152 test_fractional 4608 $samples
Josh Coalson1d42ba62006-11-08 16:25:55 +0000153done
154
155############################################################################
Josh Coalson5126bb02002-12-17 08:15:48 +0000156# basic 'round-trip' tests of various kinds of streams
157############################################################################
158
159rt_test_raw ()
160{
161 f="$1"
Josh Coalson7617cac2008-09-09 07:24:23 +0000162 extra="$2"
Josh Coalson5126bb02002-12-17 08:15:48 +0000163 channels=`echo $f | awk -F- '{print $2}'`
Josh Coalson8def87a2006-10-07 01:20:38 +0000164 bps=`echo $f | awk -F- '{print $3}'`
Erik de Castro Lopo084bb722015-09-07 15:21:47 +1000165 sign=`echo $f | awk -F- '{print $4}'`
166
Erik de Castro Lopoefaab3c2015-10-04 09:43:33 +1100167 echo $ECHO_N "round-trip test ($f) encode... " $ECHO_C
Erik de Castro Lopo084bb722015-09-07 15:21:47 +1000168 run_flac --force --verify --force-raw-format --endian=little --sign=$sign --sample-rate=44100 --bps=$bps --channels=$channels --no-padding --lax -o rt.flac $extra $f || die "ERROR"
Erik de Castro Lopoefaab3c2015-10-04 09:43:33 +1100169 echo $ECHO_N "decode... " $ECHO_C
Erik de Castro Lopo084bb722015-09-07 15:21:47 +1000170 run_flac --force --decode --force-raw-format --endian=little --sign=$sign -o rt.raw $extra rt.flac || die "ERROR"
Erik de Castro Lopoefaab3c2015-10-04 09:43:33 +1100171 echo $ECHO_N "compare... " $ECHO_C
Josh Coalson5126bb02002-12-17 08:15:48 +0000172 cmp $f rt.raw || die "ERROR: file mismatch"
173 echo "OK"
174 rm -f rt.flac rt.raw
175}
176
177rt_test_wav ()
178{
179 f="$1"
Josh Coalson7617cac2008-09-09 07:24:23 +0000180 extra="$2"
Erik de Castro Lopoefaab3c2015-10-04 09:43:33 +1100181 echo $ECHO_N "round-trip test ($f) encode... " $ECHO_C
Erik de Castro Lopobb2abea2015-02-13 19:47:30 +1100182 run_flac --force --verify --channel-map=none --no-padding --lax -o rt.flac $extra $f || die "ERROR"
Erik de Castro Lopoefaab3c2015-10-04 09:43:33 +1100183 echo $ECHO_N "decode... " $ECHO_C
Erik de Castro Lopobb2abea2015-02-13 19:47:30 +1100184 run_flac --force --decode --channel-map=none -o rt.wav $extra rt.flac || die "ERROR"
Erik de Castro Lopoefaab3c2015-10-04 09:43:33 +1100185 echo $ECHO_N "compare... " $ECHO_C
Josh Coalson5126bb02002-12-17 08:15:48 +0000186 cmp $f rt.wav || die "ERROR: file mismatch"
187 echo "OK"
188 rm -f rt.flac rt.wav
189}
190
Josh Coalsond7f53442008-09-09 07:49:19 +0000191rt_test_w64 ()
192{
193 f="$1"
194 extra="$2"
Erik de Castro Lopoefaab3c2015-10-04 09:43:33 +1100195 echo $ECHO_N "round-trip test ($f) encode... " $ECHO_C
Erik de Castro Lopobb2abea2015-02-13 19:47:30 +1100196 run_flac --force --verify --channel-map=none --no-padding --lax -o rt.flac $extra $f || die "ERROR"
Erik de Castro Lopoefaab3c2015-10-04 09:43:33 +1100197 echo $ECHO_N "decode... " $ECHO_C
Erik de Castro Lopobb2abea2015-02-13 19:47:30 +1100198 run_flac --force --decode --channel-map=none -o rt.w64 $extra rt.flac || die "ERROR"
Erik de Castro Lopoefaab3c2015-10-04 09:43:33 +1100199 echo $ECHO_N "compare... " $ECHO_C
Josh Coalsond7f53442008-09-09 07:49:19 +0000200 cmp $f rt.w64 || die "ERROR: file mismatch"
201 echo "OK"
202 rm -f rt.flac rt.w64
203}
204
Josh Coalson7617cac2008-09-09 07:24:23 +0000205rt_test_rf64 ()
206{
207 f="$1"
208 extra="$2"
Erik de Castro Lopoefaab3c2015-10-04 09:43:33 +1100209 echo $ECHO_N "round-trip test ($f) encode... " $ECHO_C
Erik de Castro Lopobb2abea2015-02-13 19:47:30 +1100210 run_flac --force --verify --channel-map=none --no-padding --lax -o rt.flac $extra $f || die "ERROR"
Erik de Castro Lopoefaab3c2015-10-04 09:43:33 +1100211 echo $ECHO_N "decode... " $ECHO_C
Erik de Castro Lopobb2abea2015-02-13 19:47:30 +1100212 run_flac --force --decode --channel-map=none -o rt.rf64 $extra rt.flac || die "ERROR"
Erik de Castro Lopoefaab3c2015-10-04 09:43:33 +1100213 echo $ECHO_N "compare... " $ECHO_C
Josh Coalson7617cac2008-09-09 07:24:23 +0000214 cmp $f rt.rf64 || die "ERROR: file mismatch"
215 echo "OK"
216 rm -f rt.flac rt.rf64
217}
218
Josh Coalson5126bb02002-12-17 08:15:48 +0000219rt_test_aiff ()
220{
221 f="$1"
Josh Coalson7617cac2008-09-09 07:24:23 +0000222 extra="$2"
Erik de Castro Lopoefaab3c2015-10-04 09:43:33 +1100223 echo $ECHO_N "round-trip test ($f) encode... " $ECHO_C
Erik de Castro Lopobb2abea2015-02-13 19:47:30 +1100224 run_flac --force --verify --channel-map=none --no-padding --lax -o rt.flac $extra $f || die "ERROR"
Erik de Castro Lopoefaab3c2015-10-04 09:43:33 +1100225 echo $ECHO_N "decode... " $ECHO_C
Erik de Castro Lopobb2abea2015-02-13 19:47:30 +1100226 run_flac --force --decode --channel-map=none -o rt.aiff $extra rt.flac || die "ERROR"
Erik de Castro Lopoefaab3c2015-10-04 09:43:33 +1100227 echo $ECHO_N "compare... " $ECHO_C
Josh Coalson5126bb02002-12-17 08:15:48 +0000228 cmp $f rt.aiff || die "ERROR: file mismatch"
229 echo "OK"
230 rm -f rt.flac rt.aiff
231}
232
Josh Coalsonbfda3782006-08-28 03:42:10 +0000233# assumes input file is WAVE; does not check the metadata-preserving features of flac-to-flac; that is checked later
234rt_test_flac ()
235{
236 f="$1"
Josh Coalson7617cac2008-09-09 07:24:23 +0000237 extra="$2"
Erik de Castro Lopoefaab3c2015-10-04 09:43:33 +1100238 echo $ECHO_N "round-trip test ($f->flac->flac->wav) encode... " $ECHO_C
Erik de Castro Lopobb2abea2015-02-13 19:47:30 +1100239 run_flac --force --verify --channel-map=none --no-padding --lax -o rt.flac $extra $f || die "ERROR"
Erik de Castro Lopoefaab3c2015-10-04 09:43:33 +1100240 echo $ECHO_N "re-encode... " $ECHO_C
Erik de Castro Lopobb2abea2015-02-13 19:47:30 +1100241 run_flac --force --verify --lax -o rt2.flac rt.flac || die "ERROR"
Erik de Castro Lopoefaab3c2015-10-04 09:43:33 +1100242 echo $ECHO_N "decode... " $ECHO_C
Erik de Castro Lopobb2abea2015-02-13 19:47:30 +1100243 run_flac --force --decode --channel-map=none -o rt.wav $extra rt2.flac || die "ERROR"
Erik de Castro Lopoefaab3c2015-10-04 09:43:33 +1100244 echo $ECHO_N "compare... " $ECHO_C
Josh Coalsonbfda3782006-08-28 03:42:10 +0000245 cmp $f rt.wav || die "ERROR: file mismatch"
246 echo "OK"
247 rm -f rt.wav rt.flac rt2.flac
248}
249
Josh Coalsonc28efe22006-11-04 03:04:21 +0000250# assumes input file is WAVE; does not check the metadata-preserving features of flac-to-flac; that is checked later
251rt_test_ogg_flac ()
252{
253 f="$1"
Josh Coalson7617cac2008-09-09 07:24:23 +0000254 extra="$2"
Erik de Castro Lopoefaab3c2015-10-04 09:43:33 +1100255 echo $ECHO_N "round-trip test ($f->oggflac->oggflac->wav) encode... " $ECHO_C
Erik de Castro Lopobb2abea2015-02-13 19:47:30 +1100256 run_flac --force --verify --channel-map=none --no-padding --lax -o rt.oga --ogg $extra $f || die "ERROR"
Erik de Castro Lopoefaab3c2015-10-04 09:43:33 +1100257 echo $ECHO_N "re-encode... " $ECHO_C
Erik de Castro Lopobb2abea2015-02-13 19:47:30 +1100258 run_flac --force --verify --lax -o rt2.oga --ogg rt.oga || die "ERROR"
Erik de Castro Lopoefaab3c2015-10-04 09:43:33 +1100259 echo $ECHO_N "decode... " $ECHO_C
Erik de Castro Lopobb2abea2015-02-13 19:47:30 +1100260 run_flac --force --decode --channel-map=none -o rt.wav $extra rt2.oga || die "ERROR"
Erik de Castro Lopoefaab3c2015-10-04 09:43:33 +1100261 echo $ECHO_N "compare... " $ECHO_C
Josh Coalsonc28efe22006-11-04 03:04:21 +0000262 cmp $f rt.wav || die "ERROR: file mismatch"
263 echo "OK"
Josh Coalson12d3a412007-08-01 03:02:00 +0000264 rm -f rt.wav rt.oga rt2.oga
Josh Coalsonc28efe22006-11-04 03:04:21 +0000265}
266
Josh Coalson5126bb02002-12-17 08:15:48 +0000267for f in rt-*.raw ; do
268 rt_test_raw $f
269done
270for f in rt-*.wav ; do
271 rt_test_wav $f
272done
Josh Coalsond7f53442008-09-09 07:49:19 +0000273for f in rt-*.w64 ; do
274 rt_test_w64 $f
275done
Josh Coalson7617cac2008-09-09 07:24:23 +0000276for f in rt-*.rf64 ; do
277 rt_test_rf64 $f
278done
Josh Coalson5126bb02002-12-17 08:15:48 +0000279for f in rt-*.aiff ; do
280 rt_test_aiff $f
281done
Josh Coalsonbfda3782006-08-28 03:42:10 +0000282for f in rt-*.wav ; do
283 rt_test_flac $f
284done
Josh Coalsonc28efe22006-11-04 03:04:21 +0000285if [ $has_ogg = yes ] ; then
286 for f in rt-*.wav ; do
287 rt_test_ogg_flac $f
288 done
289fi
Josh Coalson5126bb02002-12-17 08:15:48 +0000290
Josh Coalson8fac5d62002-12-12 03:57:47 +0000291############################################################################
292# test --skip and --until
293############################################################################
294
Josh Coalson463d0f82002-12-10 06:41:27 +0000295#
Josh Coalson8232e292002-12-14 06:22:22 +0000296# first make some chopped-up raw files
Josh Coalson463d0f82002-12-10 06:41:27 +0000297#
Josh Coalson8fac5d62002-12-12 03:57:47 +0000298echo "abcdefghijklmnopqrstuvwxyz1234567890ABCDEFGHIJKLMN" > master.raw
Josh Coalson8fac5d62002-12-12 03:57:47 +0000299dd if=master.raw ibs=1 count=50 of=50c.raw 2>/dev/null || $dddie
300dd if=master.raw ibs=1 skip=10 count=40 of=50c.skip10.raw 2>/dev/null || $dddie
301dd if=master.raw ibs=1 skip=11 count=39 of=50c.skip11.raw 2>/dev/null || $dddie
Josh Coalson03a5a692004-07-17 00:23:17 +0000302dd if=master.raw ibs=1 skip=20 count=30 of=50c.skip20.raw 2>/dev/null || $dddie
303dd if=master.raw ibs=1 skip=30 count=20 of=50c.skip30.raw 2>/dev/null || $dddie
304dd if=master.raw ibs=1 skip=40 count=10 of=50c.skip40.raw 2>/dev/null || $dddie
305dd if=master.raw ibs=1 count=10 of=50c.until10.raw 2>/dev/null || $dddie
306dd if=master.raw ibs=1 count=20 of=50c.until20.raw 2>/dev/null || $dddie
307dd if=master.raw ibs=1 count=30 of=50c.until30.raw 2>/dev/null || $dddie
Josh Coalson8fac5d62002-12-12 03:57:47 +0000308dd if=master.raw ibs=1 count=39 of=50c.until39.raw 2>/dev/null || $dddie
Josh Coalson03a5a692004-07-17 00:23:17 +0000309dd if=master.raw ibs=1 count=40 of=50c.until40.raw 2>/dev/null || $dddie
310dd if=master.raw ibs=1 skip=10 count=20 of=50c.skip10.until30.raw 2>/dev/null || $dddie
Josh Coalson8fac5d62002-12-12 03:57:47 +0000311dd if=master.raw ibs=1 skip=10 count=29 of=50c.skip10.until39.raw 2>/dev/null || $dddie
Josh Coalson03a5a692004-07-17 00:23:17 +0000312dd if=master.raw ibs=1 skip=10 count=30 of=50c.skip10.until40.raw 2>/dev/null || $dddie
313dd if=master.raw ibs=1 skip=20 count=10 of=50c.skip20.until30.raw 2>/dev/null || $dddie
314dd if=master.raw ibs=1 skip=20 count=20 of=50c.skip20.until40.raw 2>/dev/null || $dddie
Josh Coalson463d0f82002-12-10 06:41:27 +0000315
Erik de Castro Lopobb2abea2015-02-13 19:47:30 +1100316wav_eopt="--force --verify --no-padding --lax"
317wav_dopt="--force --decode"
Josh Coalson8232e292002-12-14 06:22:22 +0000318
Josh Coalson2b295462006-11-17 07:26:39 +0000319raw_eopt="$wav_eopt --force-raw-format --endian=big --sign=signed --sample-rate=10 --bps=8 --channels=1"
Josh Coalson8232e292002-12-14 06:22:22 +0000320raw_dopt="$wav_dopt --force-raw-format --endian=big --sign=signed"
Josh Coalson8fac5d62002-12-12 03:57:47 +0000321
322#
Josh Coalsonc28efe22006-11-04 03:04:21 +0000323# convert them to WAVE/AIFF/Ogg FLAC files
Josh Coalson8fac5d62002-12-12 03:57:47 +0000324#
Josh Coalson8232e292002-12-14 06:22:22 +0000325convert_to_wav ()
326{
Josh Coalsonc2751e62005-08-27 01:57:39 +0000327 run_flac "$2" $1.raw || die "ERROR converting $1.raw to WAVE"
328 run_flac "$3" $1.flac || die "ERROR converting $1.raw to WAVE"
Josh Coalson8232e292002-12-14 06:22:22 +0000329}
Josh Coalsonc2751e62005-08-27 01:57:39 +0000330convert_to_wav 50c "$raw_eopt" "$wav_dopt"
331convert_to_wav 50c.skip10 "$raw_eopt" "$wav_dopt"
332convert_to_wav 50c.skip11 "$raw_eopt" "$wav_dopt"
333convert_to_wav 50c.skip20 "$raw_eopt" "$wav_dopt"
334convert_to_wav 50c.skip30 "$raw_eopt" "$wav_dopt"
335convert_to_wav 50c.skip40 "$raw_eopt" "$wav_dopt"
336convert_to_wav 50c.until10 "$raw_eopt" "$wav_dopt"
337convert_to_wav 50c.until20 "$raw_eopt" "$wav_dopt"
338convert_to_wav 50c.until30 "$raw_eopt" "$wav_dopt"
339convert_to_wav 50c.until39 "$raw_eopt" "$wav_dopt"
340convert_to_wav 50c.until40 "$raw_eopt" "$wav_dopt"
341convert_to_wav 50c.skip10.until30 "$raw_eopt" "$wav_dopt"
342convert_to_wav 50c.skip10.until39 "$raw_eopt" "$wav_dopt"
343convert_to_wav 50c.skip10.until40 "$raw_eopt" "$wav_dopt"
344convert_to_wav 50c.skip20.until30 "$raw_eopt" "$wav_dopt"
345convert_to_wav 50c.skip20.until40 "$raw_eopt" "$wav_dopt"
Josh Coalson8fac5d62002-12-12 03:57:47 +0000346
Josh Coalson5126bb02002-12-17 08:15:48 +0000347convert_to_aiff ()
348{
Josh Coalsonc2751e62005-08-27 01:57:39 +0000349 run_flac "$2" $1.raw || die "ERROR converting $1.raw to AIFF"
350 run_flac "$3" $1.flac -o $1.aiff || die "ERROR converting $1.raw to AIFF"
Josh Coalson5126bb02002-12-17 08:15:48 +0000351}
Josh Coalsonc2751e62005-08-27 01:57:39 +0000352convert_to_aiff 50c "$raw_eopt" "$wav_dopt"
353convert_to_aiff 50c.skip10 "$raw_eopt" "$wav_dopt"
354convert_to_aiff 50c.skip11 "$raw_eopt" "$wav_dopt"
355convert_to_aiff 50c.skip20 "$raw_eopt" "$wav_dopt"
356convert_to_aiff 50c.skip30 "$raw_eopt" "$wav_dopt"
357convert_to_aiff 50c.skip40 "$raw_eopt" "$wav_dopt"
358convert_to_aiff 50c.until10 "$raw_eopt" "$wav_dopt"
359convert_to_aiff 50c.until20 "$raw_eopt" "$wav_dopt"
360convert_to_aiff 50c.until30 "$raw_eopt" "$wav_dopt"
361convert_to_aiff 50c.until39 "$raw_eopt" "$wav_dopt"
362convert_to_aiff 50c.until40 "$raw_eopt" "$wav_dopt"
363convert_to_aiff 50c.skip10.until30 "$raw_eopt" "$wav_dopt"
364convert_to_aiff 50c.skip10.until39 "$raw_eopt" "$wav_dopt"
365convert_to_aiff 50c.skip10.until40 "$raw_eopt" "$wav_dopt"
366convert_to_aiff 50c.skip20.until30 "$raw_eopt" "$wav_dopt"
367convert_to_aiff 50c.skip20.until40 "$raw_eopt" "$wav_dopt"
Josh Coalson5126bb02002-12-17 08:15:48 +0000368
Josh Coalsonc28efe22006-11-04 03:04:21 +0000369convert_to_ogg ()
370{
371 run_flac "$wav_eopt" --ogg $1.wav || die "ERROR converting $1.raw to Ogg FLAC"
372}
373if [ $has_ogg = yes ] ; then
374 convert_to_ogg 50c
375 convert_to_ogg 50c.skip10
376 convert_to_ogg 50c.skip11
377 convert_to_ogg 50c.skip20
378 convert_to_ogg 50c.skip30
379 convert_to_ogg 50c.skip40
380 convert_to_ogg 50c.until10
381 convert_to_ogg 50c.until20
382 convert_to_ogg 50c.until30
383 convert_to_ogg 50c.until39
384 convert_to_ogg 50c.until40
385 convert_to_ogg 50c.skip10.until30
386 convert_to_ogg 50c.skip10.until39
387 convert_to_ogg 50c.skip10.until40
388 convert_to_ogg 50c.skip20.until30
389 convert_to_ogg 50c.skip20.until40
390fi
391
Josh Coalson8232e292002-12-14 06:22:22 +0000392test_skip_until ()
393{
Josh Coalson3e3ad0c2004-07-07 07:39:59 +0000394 in_fmt=$1
395 out_fmt=$2
Josh Coalson463d0f82002-12-10 06:41:27 +0000396
Josh Coalsonc28efe22006-11-04 03:04:21 +0000397 [ "$in_fmt" = wav ] || [ "$in_fmt" = aiff ] || [ "$in_fmt" = raw ] || [ "$in_fmt" = flac ] || [ "$in_fmt" = ogg ] || die "ERROR: internal error, bad 'in' format '$in_fmt'"
Josh Coalson463d0f82002-12-10 06:41:27 +0000398
Josh Coalson3e3ad0c2004-07-07 07:39:59 +0000399 [ "$out_fmt" = flac ] || [ "$out_fmt" = ogg ] || die "ERROR: internal error, bad 'out' format '$out_fmt'"
400
401 if [ $in_fmt = raw ] ; then
Josh Coalson8232e292002-12-14 06:22:22 +0000402 eopt="$raw_eopt"
403 dopt="$raw_dopt"
404 else
405 eopt="$wav_eopt"
406 dopt="$wav_dopt"
407 fi
Josh Coalson463d0f82002-12-10 06:41:27 +0000408
Josh Coalsonc28efe22006-11-04 03:04:21 +0000409 if ( [ $in_fmt = flac ] || [ $in_fmt = ogg ] ) && ( [ $out_fmt = flac ] || [ $out_fmt = ogg ] ) ; then
Josh Coalsonbfda3782006-08-28 03:42:10 +0000410 CMP=md5cmp
411 else
412 CMP=cmp
413 fi
414
Josh Coalson3e3ad0c2004-07-07 07:39:59 +0000415 if [ $out_fmt = ogg ] ; then
416 eopt="--ogg $eopt"
417 fi
418
Josh Coalson8232e292002-12-14 06:22:22 +0000419 #
420 # test --skip when encoding
421 #
Josh Coalson8fac5d62002-12-12 03:57:47 +0000422
Josh Coalson3e3ad0c2004-07-07 07:39:59 +0000423 desc="($in_fmt<->$out_fmt)"
424
Erik de Castro Lopoefaab3c2015-10-04 09:43:33 +1100425 echo $ECHO_N "testing --skip=# (encode) $desc... " $ECHO_C
Josh Coalson3e3ad0c2004-07-07 07:39:59 +0000426 run_flac $eopt --skip=10 -o z50c.skip10.$out_fmt 50c.$in_fmt || die "ERROR generating FLAC file $desc"
Josh Coalsonbfda3782006-08-28 03:42:10 +0000427 [ $in_fmt = $out_fmt ] || run_flac $dopt -o z50c.skip10.$in_fmt z50c.skip10.$out_fmt || die "ERROR decoding FLAC file $desc"
428 $CMP 50c.skip10.$in_fmt z50c.skip10.$in_fmt || die "ERROR: file mismatch for --skip=10 (encode) $desc"
Josh Coalson3e3ad0c2004-07-07 07:39:59 +0000429 rm -f z50c.skip10.$out_fmt z50c.skip10.$in_fmt
Josh Coalson8232e292002-12-14 06:22:22 +0000430 echo OK
Josh Coalson463d0f82002-12-10 06:41:27 +0000431
Erik de Castro Lopoefaab3c2015-10-04 09:43:33 +1100432 echo $ECHO_N "testing --skip=mm:ss (encode) $desc... " $ECHO_C
Josh Coalson3b938ac2008-06-03 06:33:44 +0000433 run_flac $eopt --skip=0:01 -o z50c.skip0_01.$out_fmt 50c.$in_fmt || die "ERROR generating FLAC file $desc"
Erik de Castro Lopobb2abea2015-02-13 19:47:30 +1100434
Josh Coalson3b938ac2008-06-03 06:33:44 +0000435 [ $in_fmt = $out_fmt ] || run_flac $dopt -o z50c.skip0_01.$in_fmt z50c.skip0_01.$out_fmt || die "ERROR decoding FLAC file $desc"
436 $CMP 50c.skip10.$in_fmt z50c.skip0_01.$in_fmt || die "ERROR: file mismatch for --skip=0:01 (encode) $desc"
437 rm -f z50c.skip0_01.$out_fmt z50c.skip0_01.$in_fmt
Josh Coalson8232e292002-12-14 06:22:22 +0000438 echo OK
Josh Coalson463d0f82002-12-10 06:41:27 +0000439
Erik de Castro Lopoefaab3c2015-10-04 09:43:33 +1100440 echo $ECHO_N "testing --skip=mm:ss.sss (encode) $desc... " $ECHO_C
Josh Coalson3b938ac2008-06-03 06:33:44 +0000441 run_flac $eopt --skip=0:01.1001 -o z50c.skip0_01.1001.$out_fmt 50c.$in_fmt || die "ERROR generating FLAC file $desc"
442 [ $in_fmt = $out_fmt ] || run_flac $dopt -o z50c.skip0_01.1001.$in_fmt z50c.skip0_01.1001.$out_fmt || die "ERROR decoding FLAC file $desc"
443 $CMP 50c.skip11.$in_fmt z50c.skip0_01.1001.$in_fmt || die "ERROR: file mismatch for --skip=0:01.1001 (encode) $desc"
444 rm -f z50c.skip0_01.1001.$out_fmt z50c.skip0_01.1001.$in_fmt
Josh Coalson8232e292002-12-14 06:22:22 +0000445 echo OK
Josh Coalson463d0f82002-12-10 06:41:27 +0000446
Josh Coalson8232e292002-12-14 06:22:22 +0000447 #
448 # test --skip when decoding
449 #
Josh Coalson463d0f82002-12-10 06:41:27 +0000450
Josh Coalsonbfda3782006-08-28 03:42:10 +0000451 if [ $in_fmt != $out_fmt ] ; then run_flac $eopt -o z50c.$out_fmt 50c.$in_fmt ; else cp -f 50c.$in_fmt z50c.$out_fmt ; fi || die "ERROR generating FLAC file $desc"
452
Erik de Castro Lopoefaab3c2015-10-04 09:43:33 +1100453 echo $ECHO_N "testing --skip=# (decode) $desc... " $ECHO_C
Josh Coalson3e3ad0c2004-07-07 07:39:59 +0000454 run_flac $dopt --skip=10 -o z50c.skip10.$in_fmt z50c.$out_fmt || die "ERROR decoding FLAC file $desc"
Josh Coalsonbfda3782006-08-28 03:42:10 +0000455 $CMP 50c.skip10.$in_fmt z50c.skip10.$in_fmt || die "ERROR: file mismatch for --skip=10 (decode) $desc"
Josh Coalson3e3ad0c2004-07-07 07:39:59 +0000456 rm -f z50c.skip10.$in_fmt
Josh Coalson8232e292002-12-14 06:22:22 +0000457 echo OK
Josh Coalson8fac5d62002-12-12 03:57:47 +0000458
Erik de Castro Lopoefaab3c2015-10-04 09:43:33 +1100459 echo $ECHO_N "testing --skip=mm:ss (decode) $desc... " $ECHO_C
Josh Coalson3b938ac2008-06-03 06:33:44 +0000460 run_flac $dopt --skip=0:01 -o z50c.skip0_01.$in_fmt z50c.$out_fmt || die "ERROR decoding FLAC file $desc"
461 $CMP 50c.skip10.$in_fmt z50c.skip0_01.$in_fmt || die "ERROR: file mismatch for --skip=0:01 (decode) $desc"
462 rm -f z50c.skip0_01.$in_fmt
Josh Coalson8232e292002-12-14 06:22:22 +0000463 echo OK
Josh Coalson8fac5d62002-12-12 03:57:47 +0000464
Erik de Castro Lopoefaab3c2015-10-04 09:43:33 +1100465 echo $ECHO_N "testing --skip=mm:ss.sss (decode) $desc... " $ECHO_C
Josh Coalson3b938ac2008-06-03 06:33:44 +0000466 run_flac $dopt --skip=0:01.1001 -o z50c.skip0_01.1001.$in_fmt z50c.$out_fmt || die "ERROR decoding FLAC file $desc"
467 $CMP 50c.skip11.$in_fmt z50c.skip0_01.1001.$in_fmt || die "ERROR: file mismatch for --skip=0:01.1001 (decode) $desc"
468 rm -f z50c.skip0_01.1001.$in_fmt
Josh Coalson8232e292002-12-14 06:22:22 +0000469 echo OK
Josh Coalson8fac5d62002-12-12 03:57:47 +0000470
Josh Coalson3e3ad0c2004-07-07 07:39:59 +0000471 rm -f z50c.$out_fmt
Josh Coalson8fac5d62002-12-12 03:57:47 +0000472
Josh Coalson8232e292002-12-14 06:22:22 +0000473 #
474 # test --until when encoding
475 #
Josh Coalson8fac5d62002-12-12 03:57:47 +0000476
Erik de Castro Lopoefaab3c2015-10-04 09:43:33 +1100477 echo $ECHO_N "testing --until=# (encode) $desc... " $ECHO_C
Josh Coalson3e3ad0c2004-07-07 07:39:59 +0000478 run_flac $eopt --until=40 -o z50c.until40.$out_fmt 50c.$in_fmt || die "ERROR generating FLAC file $desc"
Josh Coalsonbfda3782006-08-28 03:42:10 +0000479 [ $in_fmt = $out_fmt ] || run_flac $dopt -o z50c.until40.$in_fmt z50c.until40.$out_fmt || die "ERROR decoding FLAC file $desc"
480 $CMP 50c.until40.$in_fmt z50c.until40.$in_fmt || die "ERROR: file mismatch for --until=40 (encode) $desc"
Josh Coalson3e3ad0c2004-07-07 07:39:59 +0000481 rm -f z50c.until40.$out_fmt z50c.until40.$in_fmt
Josh Coalson8232e292002-12-14 06:22:22 +0000482 echo OK
Josh Coalson8fac5d62002-12-12 03:57:47 +0000483
Erik de Castro Lopoefaab3c2015-10-04 09:43:33 +1100484 echo $ECHO_N "testing --until=mm:ss (encode) $desc... " $ECHO_C
Josh Coalson3b938ac2008-06-03 06:33:44 +0000485 run_flac $eopt --until=0:04 -o z50c.until0_04.$out_fmt 50c.$in_fmt || die "ERROR generating FLAC file $desc"
486 [ $in_fmt = $out_fmt ] || run_flac $dopt -o z50c.until0_04.$in_fmt z50c.until0_04.$out_fmt || die "ERROR decoding FLAC file $desc"
487 $CMP 50c.until40.$in_fmt z50c.until0_04.$in_fmt || die "ERROR: file mismatch for --until=0:04 (encode) $desc"
488 rm -f z50c.until0_04.$out_fmt z50c.until0_04.$in_fmt
Josh Coalson8232e292002-12-14 06:22:22 +0000489 echo OK
Josh Coalson8fac5d62002-12-12 03:57:47 +0000490
Erik de Castro Lopoefaab3c2015-10-04 09:43:33 +1100491 echo $ECHO_N "testing --until=mm:ss.sss (encode) $desc... " $ECHO_C
Josh Coalson3b938ac2008-06-03 06:33:44 +0000492 run_flac $eopt --until=0:03.9001 -o z50c.until0_03.9001.$out_fmt 50c.$in_fmt || die "ERROR generating FLAC file $desc"
493 [ $in_fmt = $out_fmt ] || run_flac $dopt -o z50c.until0_03.9001.$in_fmt z50c.until0_03.9001.$out_fmt || die "ERROR decoding FLAC file $desc"
494 $CMP 50c.until39.$in_fmt z50c.until0_03.9001.$in_fmt || die "ERROR: file mismatch for --until=0:03.9001 (encode) $desc"
495 rm -f z50c.until0_03.9001.$out_fmt z50c.until0_03.9001.$in_fmt
Josh Coalson8232e292002-12-14 06:22:22 +0000496 echo OK
Josh Coalson8fac5d62002-12-12 03:57:47 +0000497
Erik de Castro Lopoefaab3c2015-10-04 09:43:33 +1100498 echo $ECHO_N "testing --until=-# (encode) $desc... " $ECHO_C
Josh Coalson3e3ad0c2004-07-07 07:39:59 +0000499 run_flac $eopt --until=-10 -o z50c.until-10.$out_fmt 50c.$in_fmt || die "ERROR generating FLAC file $desc"
Josh Coalsonbfda3782006-08-28 03:42:10 +0000500 [ $in_fmt = $out_fmt ] || run_flac $dopt -o z50c.until-10.$in_fmt z50c.until-10.$out_fmt || die "ERROR decoding FLAC file $desc"
501 $CMP 50c.until40.$in_fmt z50c.until-10.$in_fmt || die "ERROR: file mismatch for --until=-10 (encode) $desc"
Josh Coalson3e3ad0c2004-07-07 07:39:59 +0000502 rm -f z50c.until-10.$out_fmt z50c.until-10.$in_fmt
Josh Coalson8232e292002-12-14 06:22:22 +0000503 echo OK
Josh Coalson8fac5d62002-12-12 03:57:47 +0000504
Erik de Castro Lopoefaab3c2015-10-04 09:43:33 +1100505 echo $ECHO_N "testing --until=-mm:ss (encode) $desc... " $ECHO_C
Josh Coalson3b938ac2008-06-03 06:33:44 +0000506 run_flac $eopt --until=-0:01 -o z50c.until-0_01.$out_fmt 50c.$in_fmt || die "ERROR generating FLAC file $desc"
507 [ $in_fmt = $out_fmt ] || run_flac $dopt -o z50c.until-0_01.$in_fmt z50c.until-0_01.$out_fmt || die "ERROR decoding FLAC file $desc"
508 $CMP 50c.until40.$in_fmt z50c.until-0_01.$in_fmt || die "ERROR: file mismatch for --until=-0:01 (encode) $desc"
509 rm -f z50c.until-0_01.$out_fmt z50c.until-0_01.$in_fmt
Josh Coalson8232e292002-12-14 06:22:22 +0000510 echo OK
Josh Coalson8fac5d62002-12-12 03:57:47 +0000511
Erik de Castro Lopoefaab3c2015-10-04 09:43:33 +1100512 echo $ECHO_N "testing --until=-mm:ss.sss (encode) $desc... " $ECHO_C
Josh Coalson3b938ac2008-06-03 06:33:44 +0000513 run_flac $eopt --until=-0:01.1001 -o z50c.until-0_01.1001.$out_fmt 50c.$in_fmt || die "ERROR generating FLAC file $desc"
514 [ $in_fmt = $out_fmt ] || run_flac $dopt -o z50c.until-0_01.1001.$in_fmt z50c.until-0_01.1001.$out_fmt || die "ERROR decoding FLAC file $desc"
515 $CMP 50c.until39.$in_fmt z50c.until-0_01.1001.$in_fmt || die "ERROR: file mismatch for --until=-0:01.1001 (encode) $desc"
516 rm -f z50c.until-0_01.1001.$out_fmt z50c.until-0_01.1001.$in_fmt
Josh Coalson8232e292002-12-14 06:22:22 +0000517 echo OK
Josh Coalson8fac5d62002-12-12 03:57:47 +0000518
Josh Coalson8232e292002-12-14 06:22:22 +0000519 #
520 # test --until when decoding
521 #
Josh Coalson8fac5d62002-12-12 03:57:47 +0000522
Josh Coalsonbfda3782006-08-28 03:42:10 +0000523 if [ $in_fmt != $out_fmt ] ; then run_flac $eopt -o z50c.$out_fmt 50c.$in_fmt ; else cp -f 50c.$in_fmt z50c.$out_fmt ; fi || die "ERROR generating FLAC file $desc"
Josh Coalson8fac5d62002-12-12 03:57:47 +0000524
Erik de Castro Lopoefaab3c2015-10-04 09:43:33 +1100525 echo $ECHO_N "testing --until=# (decode) $desc... " $ECHO_C
Josh Coalson3e3ad0c2004-07-07 07:39:59 +0000526 run_flac $dopt --until=40 -o z50c.until40.$in_fmt z50c.$out_fmt || die "ERROR decoding FLAC file $desc"
Josh Coalsonbfda3782006-08-28 03:42:10 +0000527 $CMP 50c.until40.$in_fmt z50c.until40.$in_fmt || die "ERROR: file mismatch for --until=40 (decode) $desc"
Josh Coalson3e3ad0c2004-07-07 07:39:59 +0000528 rm -f z50c.until40.$in_fmt
Josh Coalson8232e292002-12-14 06:22:22 +0000529 echo OK
Josh Coalson8fac5d62002-12-12 03:57:47 +0000530
Erik de Castro Lopoefaab3c2015-10-04 09:43:33 +1100531 echo $ECHO_N "testing --until=mm:ss (decode) $desc... " $ECHO_C
Josh Coalson3b938ac2008-06-03 06:33:44 +0000532 run_flac $dopt --until=0:04 -o z50c.until0_04.$in_fmt z50c.$out_fmt || die "ERROR decoding FLAC file $desc"
533 $CMP 50c.until40.$in_fmt z50c.until0_04.$in_fmt || die "ERROR: file mismatch for --until=0:04 (decode) $desc"
534 rm -f z50c.until0_04.$in_fmt
Josh Coalson8232e292002-12-14 06:22:22 +0000535 echo OK
Josh Coalson8fac5d62002-12-12 03:57:47 +0000536
Erik de Castro Lopoefaab3c2015-10-04 09:43:33 +1100537 echo $ECHO_N "testing --until=mm:ss.sss (decode) $desc... " $ECHO_C
Josh Coalson3b938ac2008-06-03 06:33:44 +0000538 run_flac $dopt --until=0:03.9001 -o z50c.until0_03.9001.$in_fmt z50c.$out_fmt || die "ERROR decoding FLAC file $desc"
539 $CMP 50c.until39.$in_fmt z50c.until0_03.9001.$in_fmt || die "ERROR: file mismatch for --until=0:03.9001 (decode) $desc"
540 rm -f z50c.until0_03.9001.$in_fmt
Josh Coalson8232e292002-12-14 06:22:22 +0000541 echo OK
Josh Coalson8fac5d62002-12-12 03:57:47 +0000542
Erik de Castro Lopoefaab3c2015-10-04 09:43:33 +1100543 echo $ECHO_N "testing --until=-# (decode) $desc... " $ECHO_C
Josh Coalson3e3ad0c2004-07-07 07:39:59 +0000544 run_flac $dopt --until=-10 -o z50c.until-10.$in_fmt z50c.$out_fmt || die "ERROR decoding FLAC file $desc"
Josh Coalsonbfda3782006-08-28 03:42:10 +0000545 $CMP 50c.until40.$in_fmt z50c.until-10.$in_fmt || die "ERROR: file mismatch for --until=-10 (decode) $desc"
Josh Coalson3e3ad0c2004-07-07 07:39:59 +0000546 rm -f z50c.until-10.$in_fmt
Josh Coalson8232e292002-12-14 06:22:22 +0000547 echo OK
Josh Coalson8fac5d62002-12-12 03:57:47 +0000548
Erik de Castro Lopoefaab3c2015-10-04 09:43:33 +1100549 echo $ECHO_N "testing --until=-mm:ss (decode) $desc... " $ECHO_C
Josh Coalson3b938ac2008-06-03 06:33:44 +0000550 run_flac $dopt --until=-0:01 -o z50c.until-0_01.$in_fmt z50c.$out_fmt || die "ERROR decoding FLAC file $desc"
551 $CMP 50c.until40.$in_fmt z50c.until-0_01.$in_fmt || die "ERROR: file mismatch for --until=-0:01 (decode) $desc"
552 rm -f z50c.until-0_01.$in_fmt
Josh Coalson8232e292002-12-14 06:22:22 +0000553 echo OK
Josh Coalson8fac5d62002-12-12 03:57:47 +0000554
Erik de Castro Lopoefaab3c2015-10-04 09:43:33 +1100555 echo $ECHO_N "testing --until=-mm:ss.sss (decode) $desc... " $ECHO_C
Josh Coalson3b938ac2008-06-03 06:33:44 +0000556 run_flac $dopt --until=-0:01.1001 -o z50c.until-0_01.1001.$in_fmt z50c.$out_fmt || die "ERROR decoding FLAC file $desc"
557 $CMP 50c.until39.$in_fmt z50c.until-0_01.1001.$in_fmt || die "ERROR: file mismatch for --until=-0:01.1001 (decode) $desc"
558 rm -f z50c.until-0_01.1001.$in_fmt
Josh Coalson8232e292002-12-14 06:22:22 +0000559 echo OK
Josh Coalson8fac5d62002-12-12 03:57:47 +0000560
Josh Coalson3e3ad0c2004-07-07 07:39:59 +0000561 rm -f z50c.$out_fmt
Josh Coalson8fac5d62002-12-12 03:57:47 +0000562
Josh Coalson8232e292002-12-14 06:22:22 +0000563 #
564 # test --skip and --until when encoding
565 #
Josh Coalson8fac5d62002-12-12 03:57:47 +0000566
Erik de Castro Lopoefaab3c2015-10-04 09:43:33 +1100567 echo $ECHO_N "testing --skip=10 --until=# (encode) $desc... " $ECHO_C
Josh Coalson3e3ad0c2004-07-07 07:39:59 +0000568 run_flac $eopt --skip=10 --until=40 -o z50c.skip10.until40.$out_fmt 50c.$in_fmt || die "ERROR generating FLAC file $desc"
Josh Coalsonbfda3782006-08-28 03:42:10 +0000569 [ $in_fmt = $out_fmt ] || run_flac $dopt -o z50c.skip10.until40.$in_fmt z50c.skip10.until40.$out_fmt || die "ERROR decoding FLAC file $desc"
570 $CMP 50c.skip10.until40.$in_fmt z50c.skip10.until40.$in_fmt || die "ERROR: file mismatch for --skip=10 --until=40 (encode) $desc"
Josh Coalson3e3ad0c2004-07-07 07:39:59 +0000571 rm -f z50c.skip10.until40.$out_fmt z50c.skip10.until40.$in_fmt
Josh Coalson8232e292002-12-14 06:22:22 +0000572 echo OK
Josh Coalson8fac5d62002-12-12 03:57:47 +0000573
Erik de Castro Lopoefaab3c2015-10-04 09:43:33 +1100574 echo $ECHO_N "testing --skip=10 --until=mm:ss (encode) $desc... " $ECHO_C
Josh Coalson3b938ac2008-06-03 06:33:44 +0000575 run_flac $eopt --skip=10 --until=0:04 -o z50c.skip10.until0_04.$out_fmt 50c.$in_fmt || die "ERROR generating FLAC file $desc"
576 [ $in_fmt = $out_fmt ] || run_flac $dopt -o z50c.skip10.until0_04.$in_fmt z50c.skip10.until0_04.$out_fmt || die "ERROR decoding FLAC file $desc"
577 $CMP 50c.skip10.until40.$in_fmt z50c.skip10.until0_04.$in_fmt || die "ERROR: file mismatch for --skip=10 --until=0:04 (encode) $desc"
578 rm -f z50c.skip10.until0_04.$out_fmt z50c.skip10.until0_04.$in_fmt
Josh Coalson8232e292002-12-14 06:22:22 +0000579 echo OK
Josh Coalson8fac5d62002-12-12 03:57:47 +0000580
Erik de Castro Lopoefaab3c2015-10-04 09:43:33 +1100581 echo $ECHO_N "testing --skip=10 --until=mm:ss.sss (encode) $desc... " $ECHO_C
Josh Coalson3b938ac2008-06-03 06:33:44 +0000582 run_flac $eopt --skip=10 --until=0:03.9001 -o z50c.skip10.until0_03.9001.$out_fmt 50c.$in_fmt || die "ERROR generating FLAC file $desc"
583 [ $in_fmt = $out_fmt ] || run_flac $dopt -o z50c.skip10.until0_03.9001.$in_fmt z50c.skip10.until0_03.9001.$out_fmt || die "ERROR decoding FLAC file $desc"
584 $CMP 50c.skip10.until39.$in_fmt z50c.skip10.until0_03.9001.$in_fmt || die "ERROR: file mismatch for --skip=10 --until=0:03.9001 (encode) $desc"
585 rm -f z50c.skip10.until0_03.9001.$out_fmt z50c.skip10.until0_03.9001.$in_fmt
Josh Coalson8232e292002-12-14 06:22:22 +0000586 echo OK
Josh Coalson8fac5d62002-12-12 03:57:47 +0000587
Erik de Castro Lopoefaab3c2015-10-04 09:43:33 +1100588 echo $ECHO_N "testing --skip=10 --until=+# (encode) $desc... " $ECHO_C
Josh Coalson3e3ad0c2004-07-07 07:39:59 +0000589 run_flac $eopt --skip=10 --until=+30 -o z50c.skip10.until+30.$out_fmt 50c.$in_fmt || die "ERROR generating FLAC file $desc"
Josh Coalsonbfda3782006-08-28 03:42:10 +0000590 [ $in_fmt = $out_fmt ] || run_flac $dopt -o z50c.skip10.until+30.$in_fmt z50c.skip10.until+30.$out_fmt || die "ERROR decoding FLAC file $desc"
591 $CMP 50c.skip10.until40.$in_fmt z50c.skip10.until+30.$in_fmt || die "ERROR: file mismatch for --skip=10 --until=+30 (encode) $desc"
Josh Coalson3e3ad0c2004-07-07 07:39:59 +0000592 rm -f z50c.skip10.until+30.$out_fmt z50c.skip10.until+30.$in_fmt
Josh Coalson8232e292002-12-14 06:22:22 +0000593 echo OK
Josh Coalson8fac5d62002-12-12 03:57:47 +0000594
Erik de Castro Lopoefaab3c2015-10-04 09:43:33 +1100595 echo $ECHO_N "testing --skip=10 --until=+mm:ss (encode) $desc... " $ECHO_C
Josh Coalson3b938ac2008-06-03 06:33:44 +0000596 run_flac $eopt --skip=10 --until=+0:03 -o z50c.skip10.until+0_03.$out_fmt 50c.$in_fmt || die "ERROR generating FLAC file $desc"
597 [ $in_fmt = $out_fmt ] || run_flac $dopt -o z50c.skip10.until+0_03.$in_fmt z50c.skip10.until+0_03.$out_fmt || die "ERROR decoding FLAC file $desc"
598 $CMP 50c.skip10.until40.$in_fmt z50c.skip10.until+0_03.$in_fmt || die "ERROR: file mismatch for --skip=10 --until=+0:03 (encode) $desc"
599 rm -f z50c.skip10.until+0_03.$out_fmt z50c.skip10.until+0_03.$in_fmt
Josh Coalson8232e292002-12-14 06:22:22 +0000600 echo OK
Josh Coalson8fac5d62002-12-12 03:57:47 +0000601
Erik de Castro Lopoefaab3c2015-10-04 09:43:33 +1100602 echo $ECHO_N "testing --skip=10 --until=+mm:ss.sss (encode) $desc... " $ECHO_C
Josh Coalson3b938ac2008-06-03 06:33:44 +0000603 run_flac $eopt --skip=10 --until=+0:02.9001 -o z50c.skip10.until+0_02.9001.$out_fmt 50c.$in_fmt || die "ERROR generating FLAC file $desc"
604 [ $in_fmt = $out_fmt ] || run_flac $dopt -o z50c.skip10.until+0_02.9001.$in_fmt z50c.skip10.until+0_02.9001.$out_fmt || die "ERROR decoding FLAC file $desc"
605 $CMP 50c.skip10.until39.$in_fmt z50c.skip10.until+0_02.9001.$in_fmt || die "ERROR: file mismatch for --skip=10 --until=+0:02.9001 (encode) $desc"
606 rm -f z50c.skip10.until+0_02.9001.$out_fmt z50c.skip10.until+0_02.9001.$in_fmt
Josh Coalson8232e292002-12-14 06:22:22 +0000607 echo OK
Josh Coalson8fac5d62002-12-12 03:57:47 +0000608
Erik de Castro Lopoefaab3c2015-10-04 09:43:33 +1100609 echo $ECHO_N "testing --skip=10 --until=-# (encode) $desc... " $ECHO_C
Josh Coalson3e3ad0c2004-07-07 07:39:59 +0000610 run_flac $eopt --skip=10 --until=-10 -o z50c.skip10.until-10.$out_fmt 50c.$in_fmt || die "ERROR generating FLAC file $desc"
Josh Coalsonbfda3782006-08-28 03:42:10 +0000611 [ $in_fmt = $out_fmt ] || run_flac $dopt -o z50c.skip10.until-10.$in_fmt z50c.skip10.until-10.$out_fmt || die "ERROR decoding FLAC file $desc"
612 $CMP 50c.skip10.until40.$in_fmt z50c.skip10.until-10.$in_fmt || die "ERROR: file mismatch for --skip=10 --until=-10 (encode) $desc"
Josh Coalson3e3ad0c2004-07-07 07:39:59 +0000613 rm -f z50c.skip10.until-10.$out_fmt z50c.skip10.until-10.$in_fmt
Josh Coalson8232e292002-12-14 06:22:22 +0000614 echo OK
Josh Coalson8fac5d62002-12-12 03:57:47 +0000615
Erik de Castro Lopoefaab3c2015-10-04 09:43:33 +1100616 echo $ECHO_N "testing --skip=10 --until=-mm:ss (encode) $desc... " $ECHO_C
Josh Coalson3b938ac2008-06-03 06:33:44 +0000617 run_flac $eopt --skip=10 --until=-0:01 -o z50c.skip10.until-0_01.$out_fmt 50c.$in_fmt || die "ERROR generating FLAC file $desc"
618 [ $in_fmt = $out_fmt ] || run_flac $dopt -o z50c.skip10.until-0_01.$in_fmt z50c.skip10.until-0_01.$out_fmt || die "ERROR decoding FLAC file $desc"
619 $CMP 50c.skip10.until40.$in_fmt z50c.skip10.until-0_01.$in_fmt || die "ERROR: file mismatch for --skip=10 --until=-0:01 (encode) $desc"
620 rm -f z50c.skip10.until-0_01.$out_fmt z50c.skip10.until-0_01.$in_fmt
Josh Coalson8232e292002-12-14 06:22:22 +0000621 echo OK
Josh Coalson8fac5d62002-12-12 03:57:47 +0000622
Erik de Castro Lopoefaab3c2015-10-04 09:43:33 +1100623 echo $ECHO_N "testing --skip=10 --until=-mm:ss.sss (encode) $desc... " $ECHO_C
Josh Coalson3b938ac2008-06-03 06:33:44 +0000624 run_flac $eopt --skip=10 --until=-0:01.1001 -o z50c.skip10.until-0_01.1001.$out_fmt 50c.$in_fmt || die "ERROR generating FLAC file $desc"
625 [ $in_fmt = $out_fmt ] || run_flac $dopt -o z50c.skip10.until-0_01.1001.$in_fmt z50c.skip10.until-0_01.1001.$out_fmt || die "ERROR decoding FLAC file $desc"
626 $CMP 50c.skip10.until39.$in_fmt z50c.skip10.until-0_01.1001.$in_fmt || die "ERROR: file mismatch for --skip=10 --until=-0:01.1001 (encode) $desc"
627 rm -f z50c.skip10.until-0_01.1001.$out_fmt z50c.skip10.until-0_01.1001.$in_fmt
Josh Coalson8232e292002-12-14 06:22:22 +0000628 echo OK
Josh Coalson8fac5d62002-12-12 03:57:47 +0000629
Josh Coalson8232e292002-12-14 06:22:22 +0000630 #
631 # test --skip and --until when decoding
632 #
Josh Coalson8fac5d62002-12-12 03:57:47 +0000633
Josh Coalsonbfda3782006-08-28 03:42:10 +0000634 if [ $in_fmt != $out_fmt ] ; then run_flac $eopt -o z50c.$out_fmt 50c.$in_fmt ; else cp -f 50c.$in_fmt z50c.$out_fmt ; fi || die "ERROR generating FLAC file $desc"
635
Josh Coalson8fac5d62002-12-12 03:57:47 +0000636
Erik de Castro Lopoefaab3c2015-10-04 09:43:33 +1100637 echo $ECHO_N "testing --skip=10 --until=# (decode) $desc... " $ECHO_C
Josh Coalson3e3ad0c2004-07-07 07:39:59 +0000638 run_flac $dopt --skip=10 --until=40 -o z50c.skip10.until40.$in_fmt z50c.$out_fmt || die "ERROR decoding FLAC file $desc"
Josh Coalsonbfda3782006-08-28 03:42:10 +0000639 $CMP 50c.skip10.until40.$in_fmt z50c.skip10.until40.$in_fmt || die "ERROR: file mismatch for --skip=10 --until=40 (decode) $desc"
Josh Coalson3e3ad0c2004-07-07 07:39:59 +0000640 rm -f z50c.skip10.until40.$in_fmt
Josh Coalson8232e292002-12-14 06:22:22 +0000641 echo OK
Josh Coalson8fac5d62002-12-12 03:57:47 +0000642
Erik de Castro Lopoefaab3c2015-10-04 09:43:33 +1100643 echo $ECHO_N "testing --skip=10 --until=mm:ss (decode) $desc... " $ECHO_C
Josh Coalson3b938ac2008-06-03 06:33:44 +0000644 run_flac $dopt --skip=10 --until=0:04 -o z50c.skip10.until0_04.$in_fmt z50c.$out_fmt || die "ERROR decoding FLAC file $desc"
645 $CMP 50c.skip10.until40.$in_fmt z50c.skip10.until0_04.$in_fmt || die "ERROR: file mismatch for --skip=10 --until=0:04 (decode) $desc"
646 rm -f z50c.skip10.until0_04.$in_fmt
Josh Coalson8232e292002-12-14 06:22:22 +0000647 echo OK
Josh Coalson8fac5d62002-12-12 03:57:47 +0000648
Erik de Castro Lopoefaab3c2015-10-04 09:43:33 +1100649 echo $ECHO_N "testing --skip=10 --until=mm:ss.sss (decode) $desc... " $ECHO_C
Josh Coalson3b938ac2008-06-03 06:33:44 +0000650 run_flac $dopt --skip=10 --until=0:03.9001 -o z50c.skip10.until0_03.9001.$in_fmt z50c.$out_fmt || die "ERROR decoding FLAC file $desc"
651 $CMP 50c.skip10.until39.$in_fmt z50c.skip10.until0_03.9001.$in_fmt || die "ERROR: file mismatch for --skip=10 --until=0:03.9001 (decode) $desc"
652 rm -f z50c.skip10.until0_03.9001.$in_fmt
Josh Coalson8232e292002-12-14 06:22:22 +0000653 echo OK
Josh Coalson8fac5d62002-12-12 03:57:47 +0000654
Erik de Castro Lopoefaab3c2015-10-04 09:43:33 +1100655 echo $ECHO_N "testing --skip=10 --until=-# (decode) $desc... " $ECHO_C
Josh Coalson3e3ad0c2004-07-07 07:39:59 +0000656 run_flac $dopt --skip=10 --until=-10 -o z50c.skip10.until-10.$in_fmt z50c.$out_fmt || die "ERROR decoding FLAC file $desc"
Josh Coalsonbfda3782006-08-28 03:42:10 +0000657 $CMP 50c.skip10.until40.$in_fmt z50c.skip10.until-10.$in_fmt || die "ERROR: file mismatch for --skip=10 --until=-10 (decode) $desc"
Josh Coalson3e3ad0c2004-07-07 07:39:59 +0000658 rm -f z50c.skip10.until-10.$in_fmt
Josh Coalson8232e292002-12-14 06:22:22 +0000659 echo OK
660
Erik de Castro Lopoefaab3c2015-10-04 09:43:33 +1100661 echo $ECHO_N "testing --skip=10 --until=-mm:ss (decode) $desc... " $ECHO_C
Josh Coalson3b938ac2008-06-03 06:33:44 +0000662 run_flac $dopt --skip=10 --until=-0:01 -o z50c.skip10.until-0_01.$in_fmt z50c.$out_fmt || die "ERROR decoding FLAC file $desc"
663 $CMP 50c.skip10.until40.$in_fmt z50c.skip10.until-0_01.$in_fmt || die "ERROR: file mismatch for --skip=10 --until=-0:01 (decode) $desc"
664 rm -f z50c.skip10.until-0_01.$in_fmt
Josh Coalson8232e292002-12-14 06:22:22 +0000665 echo OK
666
Erik de Castro Lopoefaab3c2015-10-04 09:43:33 +1100667 echo $ECHO_N "testing --skip=10 --until=-mm:ss.sss (decode) $desc... " $ECHO_C
Josh Coalson3b938ac2008-06-03 06:33:44 +0000668 run_flac $dopt --skip=10 --until=-0:01.1001 -o z50c.skip10.until-0_01.1001.$in_fmt z50c.$out_fmt || die "ERROR decoding FLAC file $desc"
669 $CMP 50c.skip10.until39.$in_fmt z50c.skip10.until-0_01.1001.$in_fmt || die "ERROR: file mismatch for --skip=10 --until=-0:01.1001 (decode) $desc"
670 rm -f z50c.skip10.until-0_01.1001.$in_fmt
Josh Coalson8232e292002-12-14 06:22:22 +0000671 echo OK
672
Josh Coalson3e3ad0c2004-07-07 07:39:59 +0000673 rm -f z50c.$out_fmt
Josh Coalson8232e292002-12-14 06:22:22 +0000674}
675
Josh Coalson3e3ad0c2004-07-07 07:39:59 +0000676test_skip_until raw flac
677test_skip_until wav flac
678test_skip_until aiff flac
Josh Coalsonbfda3782006-08-28 03:42:10 +0000679test_skip_until flac flac
Josh Coalsonc28efe22006-11-04 03:04:21 +0000680#@@@if [ $has_ogg = yes ] ; then
681#@@@ #@@@ doesn't work yet because md5cmp doesn't work because metaflac doesn't work on ogg flac yet
682#@@@ test_skip_until ogg flac
683#@@@fi
Josh Coalson463d0f82002-12-10 06:41:27 +0000684
Josh Coalsonc28efe22006-11-04 03:04:21 +0000685if [ $has_ogg = yes ] ; then
Josh Coalson3e3ad0c2004-07-07 07:39:59 +0000686 test_skip_until raw ogg
687 test_skip_until wav ogg
688 test_skip_until aiff ogg
Josh Coalsonc28efe22006-11-04 03:04:21 +0000689 #@@@ doesn't work yet because md5cmp doesn't work because metaflac doesn't work on ogg flac yet
Josh Coalsonbfda3782006-08-28 03:42:10 +0000690 #@@@test_skip_until flac ogg
Josh Coalsonc28efe22006-11-04 03:04:21 +0000691 #@@@test_skip_until ogg ogg
Josh Coalson3e3ad0c2004-07-07 07:39:59 +0000692fi
Josh Coalson9238a142002-12-21 03:29:26 +0000693
Josh Coalson70d85632004-09-21 05:29:01 +0000694echo "testing seek extremes:"
Josh Coalson29f52ea2004-07-30 00:22:46 +0000695
Erik de Castro Lopobb2abea2015-02-13 19:47:30 +1100696run_flac --verify --force --no-padding --force-raw-format --endian=big --sign=signed --sample-rate=44100 --bps=16 --channels=2 --blocksize=576 noise.raw || die "ERROR generating FLAC file"
Josh Coalson29f52ea2004-07-30 00:22:46 +0000697
Josh Coalsond4346722004-09-12 22:58:13 +0000698if [ $is_win = no ] ; then
Josh Coalsonc2751e62005-08-27 01:57:39 +0000699 total_noise_cdda_samples=`run_metaflac --show-total-samples noise.flac`
Josh Coalsond4346722004-09-12 22:58:13 +0000700 [ $? = 0 ] || die "ERROR getting total sample count from noise.flac"
701else
702 # some flavors of cygwin don't seem to treat the \x0d as a word
703 # separator, so we hard code it. we'll just have to fix it later
704 # if we change the way noise.flac is made.
Josh Coalsonc2751e62005-08-27 01:57:39 +0000705 total_noise_cdda_samples=393216
Josh Coalsond4346722004-09-12 22:58:13 +0000706fi
Josh Coalson29f52ea2004-07-30 00:22:46 +0000707
Erik de Castro Lopoefaab3c2015-10-04 09:43:33 +1100708echo $ECHO_N "testing --skip=0... " $ECHO_C
Josh Coalson4f4beee2004-07-30 00:35:51 +0000709run_flac $wav_dopt --skip=0 -o z.wav noise.flac || die "ERROR decoding FLAC file noise.flac"
Josh Coalson29f52ea2004-07-30 00:22:46 +0000710echo OK
711
712for delta in 2 1 ; do
Josh Coalsonc2751e62005-08-27 01:57:39 +0000713 n=`expr $total_noise_cdda_samples - $delta`
Erik de Castro Lopoefaab3c2015-10-04 09:43:33 +1100714 echo $ECHO_N "testing --skip=$n... " $ECHO_C
Josh Coalson4f4beee2004-07-30 00:35:51 +0000715 run_flac $wav_dopt --skip=$n -o z.wav noise.flac || die "ERROR decoding FLAC file noise.flac"
Josh Coalson29f52ea2004-07-30 00:22:46 +0000716 echo OK
717done
718
719rm noise.flac z.wav
720
Josh Coalson9238a142002-12-21 03:29:26 +0000721############################################################################
Josh Coalsondad6ad42004-12-30 03:49:46 +0000722# test --input-size
723############################################################################
724
Josh Coalsonc0da1962006-09-16 00:07:20 +0000725#@@@ cat will not work on old cygwin, need to fix
Josh Coalson47a6b5f2005-02-02 01:50:47 +0000726if [ $is_win = no ] ; then
Erik de Castro Lopoefaab3c2015-10-04 09:43:33 +1100727 echo $ECHO_N "testing --input-size=50 --skip=10... " $ECHO_C
Josh Coalson47a6b5f2005-02-02 01:50:47 +0000728 cat 50c.raw | run_flac $raw_eopt --input-size=50 --skip=10 -o z50c.skip10.flac - || die "ERROR generating FLAC file"
729 run_flac $raw_dopt -o z50c.skip10.raw z50c.skip10.flac || die "ERROR decoding FLAC file"
730 cmp 50c.skip10.raw z50c.skip10.raw || die "ERROR: file mismatch for --input-size=50 --skip=10"
731 rm -f z50c.skip10.raw z50c.skip10.flac
732 echo OK
733fi
Josh Coalsondad6ad42004-12-30 03:49:46 +0000734
735
736############################################################################
Josh Coalson03a5a692004-07-17 00:23:17 +0000737# test --cue
738############################################################################
739
740#
741# create the cue sheet
742#
743cuesheet=cuetest.cue
744cat > $cuesheet << EOF
745CATALOG 1234567890123
746FILE "blah" WAVE
747 TRACK 01 AUDIO
748 INDEX 01 0
749 INDEX 02 10
750 INDEX 03 20
751 TRACK 02 AUDIO
752 INDEX 01 30
753 TRACK 04 AUDIO
754 INDEX 01 40
755EOF
756
757test_cue ()
758{
759 in_fmt=$1
760 out_fmt=$2
761
Josh Coalsonc28efe22006-11-04 03:04:21 +0000762 [ "$in_fmt" = wav ] || [ "$in_fmt" = aiff ] || [ "$in_fmt" = raw ] || [ "$in_fmt" = flac ] || [ "$in_fmt" = ogg ] || die "ERROR: internal error, bad 'in' format '$in_fmt'"
Josh Coalson03a5a692004-07-17 00:23:17 +0000763
764 [ "$out_fmt" = flac ] || [ "$out_fmt" = ogg ] || die "ERROR: internal error, bad 'out' format '$out_fmt'"
765
766 if [ $in_fmt = raw ] ; then
767 eopt="$raw_eopt"
768 dopt="$raw_dopt"
769 else
770 eopt="$wav_eopt"
771 dopt="$wav_dopt"
772 fi
773
Josh Coalsonc28efe22006-11-04 03:04:21 +0000774 if ( [ $in_fmt = flac ] || [ $in_fmt = ogg ] ) && ( [ $out_fmt = flac ] || [ $out_fmt = ogg ] ) ; then
Josh Coalsonbfda3782006-08-28 03:42:10 +0000775 CMP=md5cmp
776 else
777 CMP=cmp
778 fi
779
Josh Coalson03a5a692004-07-17 00:23:17 +0000780 if [ $out_fmt = ogg ] ; then
781 eopt="--ogg $eopt"
782 fi
783
784 desc="($in_fmt<->$out_fmt)"
785
786 #
787 # for this we need just need just one FLAC file; --cue only works while decoding
788 #
789 run_flac $eopt --cuesheet=$cuesheet -o z50c.cue.$out_fmt 50c.$in_fmt || die "ERROR generating FLAC file $desc"
790
791 # To make it easy to translate from cue point to sample numbers, the
792 # file has a sample rate of 10 Hz and a cuesheet like so:
793 #
794 # TRACK 01, INDEX 01 : 0:00.00 -> sample 0
795 # TRACK 01, INDEX 02 : 0:01.00 -> sample 10
796 # TRACK 01, INDEX 03 : 0:02.00 -> sample 20
797 # TRACK 02, INDEX 01 : 0:03.00 -> sample 30
798 # TRACK 04, INDEX 01 : 0:04.00 -> sample 40
799 #
Erik de Castro Lopoefaab3c2015-10-04 09:43:33 +1100800 echo $ECHO_N "testing --cue=- $desc... " $ECHO_C
Josh Coalsonbfda3782006-08-28 03:42:10 +0000801 run_flac $dopt -o z50c.cued.$in_fmt --cue=- z50c.cue.$out_fmt || die "ERROR decoding FLAC file $desc"
802 $CMP 50c.$in_fmt z50c.cued.$in_fmt || die "ERROR: file mismatch for --cue=- $desc"
803 rm -f z50c.cued.$in_fmt
Josh Coalson03a5a692004-07-17 00:23:17 +0000804 echo OK
805
Erik de Castro Lopoefaab3c2015-10-04 09:43:33 +1100806 echo $ECHO_N "testing --cue=1.0 $desc... " $ECHO_C
Josh Coalsonbfda3782006-08-28 03:42:10 +0000807 run_flac $dopt -o z50c.cued.$in_fmt --cue=1.0 z50c.cue.$out_fmt || die "ERROR decoding FLAC file $desc"
808 $CMP 50c.$in_fmt z50c.cued.$in_fmt || die "ERROR: file mismatch for --cue=1.0 $desc"
809 rm -f z50c.cued.$in_fmt
Josh Coalson03a5a692004-07-17 00:23:17 +0000810 echo OK
811
Erik de Castro Lopoefaab3c2015-10-04 09:43:33 +1100812 echo $ECHO_N "testing --cue=1.0- $desc... " $ECHO_C
Josh Coalsonbfda3782006-08-28 03:42:10 +0000813 run_flac $dopt -o z50c.cued.$in_fmt --cue=1.0- z50c.cue.$out_fmt || die "ERROR decoding FLAC file $desc"
814 $CMP 50c.$in_fmt z50c.cued.$in_fmt || die "ERROR: file mismatch for --cue=1.0- $desc"
815 rm -f z50c.cued.$in_fmt
Josh Coalson03a5a692004-07-17 00:23:17 +0000816 echo OK
817
Erik de Castro Lopoefaab3c2015-10-04 09:43:33 +1100818 echo $ECHO_N "testing --cue=1.1 $desc... " $ECHO_C
Josh Coalsonbfda3782006-08-28 03:42:10 +0000819 run_flac $dopt -o z50c.cued.$in_fmt --cue=1.1 z50c.cue.$out_fmt || die "ERROR decoding FLAC file $desc"
820 $CMP 50c.$in_fmt z50c.cued.$in_fmt || die "ERROR: file mismatch for --cue=1.1 $desc"
821 rm -f z50c.cued.$in_fmt
Josh Coalson03a5a692004-07-17 00:23:17 +0000822 echo OK
823
Erik de Castro Lopoefaab3c2015-10-04 09:43:33 +1100824 echo $ECHO_N "testing --cue=1.1- $desc... " $ECHO_C
Josh Coalsonbfda3782006-08-28 03:42:10 +0000825 run_flac $dopt -o z50c.cued.$in_fmt --cue=1.1- z50c.cue.$out_fmt || die "ERROR decoding FLAC file $desc"
826 $CMP 50c.$in_fmt z50c.cued.$in_fmt || die "ERROR: file mismatch for --cue=1.1- $desc"
827 rm -f z50c.cued.$in_fmt
Josh Coalson03a5a692004-07-17 00:23:17 +0000828 echo OK
829
Erik de Castro Lopoefaab3c2015-10-04 09:43:33 +1100830 echo $ECHO_N "testing --cue=1.2 $desc... " $ECHO_C
Josh Coalsonbfda3782006-08-28 03:42:10 +0000831 run_flac $dopt -o z50c.cued.$in_fmt --cue=1.2 z50c.cue.$out_fmt || die "ERROR decoding FLAC file $desc"
832 $CMP 50c.skip10.$in_fmt z50c.cued.$in_fmt || die "ERROR: file mismatch for --cue=1.2 $desc"
833 rm -f z50c.cued.$in_fmt
Josh Coalson03a5a692004-07-17 00:23:17 +0000834 echo OK
835
Erik de Castro Lopoefaab3c2015-10-04 09:43:33 +1100836 echo $ECHO_N "testing --cue=1.2- $desc... " $ECHO_C
Josh Coalsonbfda3782006-08-28 03:42:10 +0000837 run_flac $dopt -o z50c.cued.$in_fmt --cue=1.2- z50c.cue.$out_fmt || die "ERROR decoding FLAC file $desc"
838 $CMP 50c.skip10.$in_fmt z50c.cued.$in_fmt || die "ERROR: file mismatch for --cue=1.2- $desc"
839 rm -f z50c.cued.$in_fmt
Josh Coalson03a5a692004-07-17 00:23:17 +0000840 echo OK
841
Erik de Castro Lopoefaab3c2015-10-04 09:43:33 +1100842 echo $ECHO_N "testing --cue=1.4 $desc... " $ECHO_C
Josh Coalsonbfda3782006-08-28 03:42:10 +0000843 run_flac $dopt -o z50c.cued.$in_fmt --cue=1.4 z50c.cue.$out_fmt || die "ERROR decoding FLAC file $desc"
844 $CMP 50c.skip20.$in_fmt z50c.cued.$in_fmt || die "ERROR: file mismatch for --cue=1.4 $desc"
845 rm -f z50c.cued.$in_fmt
Josh Coalson03a5a692004-07-17 00:23:17 +0000846 echo OK
847
Erik de Castro Lopoefaab3c2015-10-04 09:43:33 +1100848 echo $ECHO_N "testing --cue=1.4- $desc... " $ECHO_C
Josh Coalsonbfda3782006-08-28 03:42:10 +0000849 run_flac $dopt -o z50c.cued.$in_fmt --cue=1.4- z50c.cue.$out_fmt || die "ERROR decoding FLAC file $desc"
850 $CMP 50c.skip20.$in_fmt z50c.cued.$in_fmt || die "ERROR: file mismatch for --cue=1.4- $desc"
851 rm -f z50c.cued.$in_fmt
Josh Coalson03a5a692004-07-17 00:23:17 +0000852 echo OK
853
Erik de Castro Lopoefaab3c2015-10-04 09:43:33 +1100854 echo $ECHO_N "testing --cue=-5.0 $desc... " $ECHO_C
Josh Coalsonbfda3782006-08-28 03:42:10 +0000855 run_flac $dopt -o z50c.cued.$in_fmt --cue=-5.0 z50c.cue.$out_fmt || die "ERROR decoding FLAC file $desc"
856 $CMP 50c.$in_fmt z50c.cued.$in_fmt || die "ERROR: file mismatch for --cue=-5.0 $desc"
857 rm -f z50c.cued.$in_fmt
Josh Coalson03a5a692004-07-17 00:23:17 +0000858 echo OK
859
Erik de Castro Lopoefaab3c2015-10-04 09:43:33 +1100860 echo $ECHO_N "testing --cue=-4.1 $desc... " $ECHO_C
Josh Coalsonbfda3782006-08-28 03:42:10 +0000861 run_flac $dopt -o z50c.cued.$in_fmt --cue=-4.1 z50c.cue.$out_fmt || die "ERROR decoding FLAC file $desc"
862 $CMP 50c.until40.$in_fmt z50c.cued.$in_fmt || die "ERROR: file mismatch for --cue=-4.1 $desc"
863 rm -f z50c.cued.$in_fmt
Josh Coalson03a5a692004-07-17 00:23:17 +0000864 echo OK
865
Erik de Castro Lopoefaab3c2015-10-04 09:43:33 +1100866 echo $ECHO_N "testing --cue=-3.1 $desc... " $ECHO_C
Josh Coalsonbfda3782006-08-28 03:42:10 +0000867 run_flac $dopt -o z50c.cued.$in_fmt --cue=-3.1 z50c.cue.$out_fmt || die "ERROR decoding FLAC file $desc"
868 $CMP 50c.until40.$in_fmt z50c.cued.$in_fmt || die "ERROR: file mismatch for --cue=-3.1 $desc"
869 rm -f z50c.cued.$in_fmt
Josh Coalson03a5a692004-07-17 00:23:17 +0000870 echo OK
871
Erik de Castro Lopoefaab3c2015-10-04 09:43:33 +1100872 echo $ECHO_N "testing --cue=-1.4 $desc... " $ECHO_C
Josh Coalsonbfda3782006-08-28 03:42:10 +0000873 run_flac $dopt -o z50c.cued.$in_fmt --cue=-1.4 z50c.cue.$out_fmt || die "ERROR decoding FLAC file $desc"
874 $CMP 50c.until30.$in_fmt z50c.cued.$in_fmt || die "ERROR: file mismatch for --cue=-1.4 $desc"
875 rm -f z50c.cued.$in_fmt
Josh Coalson03a5a692004-07-17 00:23:17 +0000876 echo OK
877
Erik de Castro Lopoefaab3c2015-10-04 09:43:33 +1100878 echo $ECHO_N "testing --cue=1.0-5.0 $desc... " $ECHO_C
Josh Coalsonbfda3782006-08-28 03:42:10 +0000879 run_flac $dopt -o z50c.cued.$in_fmt --cue=1.0-5.0 z50c.cue.$out_fmt || die "ERROR decoding FLAC file $desc"
880 $CMP 50c.$in_fmt z50c.cued.$in_fmt || die "ERROR: file mismatch for --cue=1.0-5.0 $desc"
881 rm -f z50c.cued.$in_fmt
Josh Coalson03a5a692004-07-17 00:23:17 +0000882 echo OK
883
Erik de Castro Lopoefaab3c2015-10-04 09:43:33 +1100884 echo $ECHO_N "testing --cue=1.1-5.0 $desc... " $ECHO_C
Josh Coalsonbfda3782006-08-28 03:42:10 +0000885 run_flac $dopt -o z50c.cued.$in_fmt --cue=1.1-5.0 z50c.cue.$out_fmt || die "ERROR decoding FLAC file $desc"
886 $CMP 50c.$in_fmt z50c.cued.$in_fmt || die "ERROR: file mismatch for --cue=1.1-5.0 $desc"
887 rm -f z50c.cued.$in_fmt
Josh Coalson03a5a692004-07-17 00:23:17 +0000888 echo OK
889
Erik de Castro Lopoefaab3c2015-10-04 09:43:33 +1100890 echo $ECHO_N "testing --cue=1.2-4.1 $desc... " $ECHO_C
Josh Coalsonbfda3782006-08-28 03:42:10 +0000891 run_flac $dopt -o z50c.cued.$in_fmt --cue=1.2-4.1 z50c.cue.$out_fmt || die "ERROR decoding FLAC file $desc"
892 $CMP 50c.skip10.until40.$in_fmt z50c.cued.$in_fmt || die "ERROR: file mismatch for --cue=1.2-4.1 $desc"
893 rm -f z50c.cued.$in_fmt
Josh Coalson03a5a692004-07-17 00:23:17 +0000894 echo OK
895
Erik de Castro Lopoefaab3c2015-10-04 09:43:33 +1100896 echo $ECHO_N "testing --cue=1.4-2.0 $desc... " $ECHO_C
Josh Coalsonbfda3782006-08-28 03:42:10 +0000897 run_flac $dopt -o z50c.cued.$in_fmt --cue=1.4-2.0 z50c.cue.$out_fmt || die "ERROR decoding FLAC file $desc"
898 $CMP 50c.skip20.until30.$in_fmt z50c.cued.$in_fmt || die "ERROR: file mismatch for --cue=1.4-2.0 $desc"
899 rm -f z50c.cued.$in_fmt
Josh Coalson03a5a692004-07-17 00:23:17 +0000900 echo OK
901
902 rm -f z50c.cue.$out_fmt
903}
904
905test_cue raw flac
906test_cue wav flac
907test_cue aiff flac
Josh Coalsonbfda3782006-08-28 03:42:10 +0000908test_cue flac flac
Josh Coalsonc28efe22006-11-04 03:04:21 +0000909#@@@if [ $has_ogg = yes ] ; then
910#@@@ #@@@ doesn't work yet because md5cmp doesn't work because metaflac doesn't work on ogg flac yet
911#@@@ test_cue ogg flac
912#@@@fi
Josh Coalson03a5a692004-07-17 00:23:17 +0000913
Josh Coalsonc28efe22006-11-04 03:04:21 +0000914if [ $has_ogg = yes ] ; then
Josh Coalson03a5a692004-07-17 00:23:17 +0000915 test_cue raw ogg
916 test_cue wav ogg
917 test_cue aiff ogg
Josh Coalsonc28efe22006-11-04 03:04:21 +0000918 #@@@ doesn't work yet because md5cmp doesn't work because metaflac doesn't work on ogg flac yet
Josh Coalsonbfda3782006-08-28 03:42:10 +0000919 #@@@test_cue flac ogg
Josh Coalsonc28efe22006-11-04 03:04:21 +0000920 #@@@test_cue ogg ogg
Josh Coalson03a5a692004-07-17 00:23:17 +0000921fi
922
923############################################################################
Josh Coalson9238a142002-12-21 03:29:26 +0000924# test 'fixup' code that happens when a FLAC file with total_samples == 0
925# in the STREAMINFO block is converted to WAVE or AIFF, requiring the
926# decoder go back and fix up the chunk headers
927############################################################################
928
Erik de Castro Lopoefaab3c2015-10-04 09:43:33 +1100929echo $ECHO_N "WAVE fixup test... " $ECHO_C
Josh Coalsond4346722004-09-12 22:58:13 +0000930
Erik de Castro Lopoefaab3c2015-10-04 09:43:33 +1100931echo $ECHO_N "prepare... " $ECHO_C
Josh Coalsonc2751e62005-08-27 01:57:39 +0000932convert_to_wav noise "$raw_eopt" "$wav_dopt" || die "ERROR creating reference WAVE"
Josh Coalsond4346722004-09-12 22:58:13 +0000933
Erik de Castro Lopoefaab3c2015-10-04 09:43:33 +1100934echo $ECHO_N "encode... " $ECHO_C
Josh Coalsond4346722004-09-12 22:58:13 +0000935# the pipe from 'cat' to 'flac' does not work on cygwin because of the EOF/
936# binary-mode stdin problem, so we use an undocumented option to metaflac to
937# set the total sample count to 0
938if [ $is_win = yes ] ; then
939 run_flac $raw_eopt noise.raw -o fixup.flac || die "ERROR generating FLAC file"
Josh Coalson68d13212004-09-14 00:25:43 +0000940 run_metaflac --set-total-samples=0 fixup.flac 2> /dev/null
Josh Coalsond4346722004-09-12 22:58:13 +0000941else
942 cat noise.raw | run_flac $raw_eopt - -c > fixup.flac || die "ERROR generating FLAC file"
943fi
944
Erik de Castro Lopoefaab3c2015-10-04 09:43:33 +1100945echo $ECHO_N "decode... " $ECHO_C
Josh Coalson9238a142002-12-21 03:29:26 +0000946run_flac $wav_dopt fixup.flac -o fixup.wav || die "ERROR decoding FLAC file"
Josh Coalsond4346722004-09-12 22:58:13 +0000947
Erik de Castro Lopoefaab3c2015-10-04 09:43:33 +1100948echo $ECHO_N "compare... " $ECHO_C
Josh Coalson9238a142002-12-21 03:29:26 +0000949cmp noise.wav fixup.wav || die "ERROR: file mismatch"
Josh Coalsond4346722004-09-12 22:58:13 +0000950
Josh Coalson9238a142002-12-21 03:29:26 +0000951echo OK
952rm -f noise.wav fixup.wav fixup.flac
953
Erik de Castro Lopoefaab3c2015-10-04 09:43:33 +1100954echo $ECHO_N "AIFF fixup test... " $ECHO_C
Josh Coalsond4346722004-09-12 22:58:13 +0000955
Erik de Castro Lopoefaab3c2015-10-04 09:43:33 +1100956echo $ECHO_N "prepare... " $ECHO_C
Josh Coalsonc2751e62005-08-27 01:57:39 +0000957convert_to_aiff noise "$raw_eopt" "$wav_dopt" || die "ERROR creating reference AIFF"
Josh Coalsond4346722004-09-12 22:58:13 +0000958
Erik de Castro Lopoefaab3c2015-10-04 09:43:33 +1100959echo $ECHO_N "encode... " $ECHO_C
Josh Coalsond4346722004-09-12 22:58:13 +0000960# the pipe from 'cat' to 'flac' does not work on cygwin because of the EOF/
961# binary-mode stdin problem, so we use an undocumented option to metaflac to
962# set the total sample count to 0
963if [ $is_win = yes ] ; then
964 run_flac $raw_eopt noise.raw -o fixup.flac || die "ERROR generating FLAC file"
Josh Coalson68d13212004-09-14 00:25:43 +0000965 run_metaflac --set-total-samples=0 fixup.flac 2> /dev/null
Josh Coalsond4346722004-09-12 22:58:13 +0000966else
967 cat noise.raw | run_flac $raw_eopt - -c > fixup.flac || die "ERROR generating FLAC file"
968fi
969
Erik de Castro Lopoefaab3c2015-10-04 09:43:33 +1100970echo $ECHO_N "decode... " $ECHO_C
Josh Coalson9238a142002-12-21 03:29:26 +0000971run_flac $wav_dopt fixup.flac -o fixup.aiff || die "ERROR decoding FLAC file"
Josh Coalsond4346722004-09-12 22:58:13 +0000972
Erik de Castro Lopoefaab3c2015-10-04 09:43:33 +1100973echo $ECHO_N "compare... " $ECHO_C
Josh Coalson9238a142002-12-21 03:29:26 +0000974cmp noise.aiff fixup.aiff || die "ERROR: file mismatch"
Josh Coalsond4346722004-09-12 22:58:13 +0000975
Josh Coalson9238a142002-12-21 03:29:26 +0000976echo OK
977rm -f noise.aiff fixup.aiff fixup.flac
978
979
980############################################################################
Josh Coalson463d0f82002-12-10 06:41:27 +0000981# multi-file tests
Josh Coalson9238a142002-12-21 03:29:26 +0000982############################################################################
Josh Coalson463d0f82002-12-10 06:41:27 +0000983
Josh Coalson463d0f82002-12-10 06:41:27 +0000984echo "Generating multiple input files from noise..."
Josh Coalsonc2751e62005-08-27 01:57:39 +0000985multifile_format_decode="--endian=big --sign=signed"
Josh Coalson5ebd6932006-11-17 06:03:18 +0000986multifile_format_encode="$multifile_format_decode --sample-rate=44100 --bps=16 --channels=2 --no-padding"
Josh Coalsonbfda3782006-08-28 03:42:10 +0000987short_noise_cdda_samples=`expr $total_noise_cdda_samples / 8`
Erik de Castro Lopobb2abea2015-02-13 19:47:30 +1100988run_flac --verify --force --force-raw-format $multifile_format_encode --until=$short_noise_cdda_samples -o shortnoise.flac noise.raw || die "ERROR generating FLAC file"
989run_flac --decode --force shortnoise.flac -o shortnoise.raw --force-raw-format $multifile_format_decode || die "ERROR generating RAW file"
990run_flac --decode --force shortnoise.flac || die "ERROR generating WAVE file"
991run_flac --decode --force shortnoise.flac -o shortnoise.aiff || die "ERROR generating AIFF file"
Josh Coalsonbfda3782006-08-28 03:42:10 +0000992cp shortnoise.flac file0.flac
993cp shortnoise.flac file1.flac
994cp shortnoise.flac file2.flac
995rm -f shortnoise.flac
996cp shortnoise.wav file0.wav
997cp shortnoise.wav file1.wav
998cp shortnoise.wav file2.wav
999rm -f shortnoise.wav
1000cp shortnoise.aiff file0.aiff
1001cp shortnoise.aiff file1.aiff
1002cp shortnoise.aiff file2.aiff
1003rm -f shortnoise.aiff
1004cp shortnoise.raw file0.raw
1005cp shortnoise.raw file1.raw
1006cp shortnoise.raw file2.raw
1007rm -f shortnoise.raw
Josh Coalsonc2751e62005-08-27 01:57:39 +00001008# create authoritative sector-aligned files for comparison
Josh Coalsonbfda3782006-08-28 03:42:10 +00001009file0_samples=`expr \( $short_noise_cdda_samples / 588 \) \* 588`
1010file0_remainder=`expr $short_noise_cdda_samples - $file0_samples`
1011file1_samples=`expr \( \( $file0_remainder + $short_noise_cdda_samples \) / 588 \) \* 588`
1012file1_remainder=`expr $file0_remainder + $short_noise_cdda_samples - $file1_samples`
Josh Coalsonc2751e62005-08-27 01:57:39 +00001013file1_samples=`expr $file1_samples - $file0_remainder`
Josh Coalsonbfda3782006-08-28 03:42:10 +00001014file2_samples=`expr \( \( $file1_remainder + $short_noise_cdda_samples \) / 588 \) \* 588`
1015file2_remainder=`expr $file1_remainder + $short_noise_cdda_samples - $file2_samples`
Josh Coalsonc2751e62005-08-27 01:57:39 +00001016file2_samples=`expr $file2_samples - $file1_remainder`
1017if [ $file2_remainder != '0' ] ; then
1018 file2_samples=`expr $file2_samples + $file2_remainder`
1019 file2_remainder=`expr 588 - $file2_remainder`
1020fi
1021
1022dd if=file0.raw ibs=4 count=$file0_samples of=file0s.raw 2>/dev/null || $dddie
1023dd if=file0.raw ibs=4 count=$file0_remainder of=file1s.raw skip=$file0_samples 2>/dev/null || $dddie
1024dd if=file1.raw ibs=4 count=$file1_samples of=z.raw 2>/dev/null || $dddie
1025cat z.raw >> file1s.raw || die "ERROR: cat-ing sector-aligned files"
1026dd if=file1.raw ibs=4 count=$file1_remainder of=file2s.raw skip=$file1_samples 2>/dev/null || $dddie
1027dd if=file2.raw ibs=4 count=$file2_samples of=z.raw 2>/dev/null || $dddie
1028cat z.raw >> file2s.raw || die "ERROR: cat-ing sector-aligned files"
1029dd if=/dev/zero ibs=4 count=$file2_remainder of=z.raw 2>/dev/null || $dddie
1030cat z.raw >> file2s.raw || die "ERROR: cat-ing sector-aligned files"
1031rm -f z.raw
1032
Erik de Castro Lopo879a0ce2014-07-13 20:38:57 +10001033convert_to_wav file0s "$multifile_format_encode --force --force-raw-format" "$SILENT --force --decode" || die "ERROR creating authoritative sector-aligned WAVE"
1034convert_to_wav file1s "$multifile_format_encode --force --force-raw-format" "$SILENT --force --decode" || die "ERROR creating authoritative sector-aligned WAVE"
1035convert_to_wav file2s "$multifile_format_encode --force --force-raw-format" "$SILENT --force --decode" || die "ERROR creating authoritative sector-aligned WAVE"
Josh Coalsonc2751e62005-08-27 01:57:39 +00001036
Erik de Castro Lopo879a0ce2014-07-13 20:38:57 +10001037convert_to_aiff file0s "$multifile_format_encode --force --force-raw-format" "$SILENT --force --decode" || die "ERROR creating authoritative sector-aligned AIFF"
1038convert_to_aiff file1s "$multifile_format_encode --force --force-raw-format" "$SILENT --force --decode" || die "ERROR creating authoritative sector-aligned AIFF"
1039convert_to_aiff file2s "$multifile_format_encode --force --force-raw-format" "$SILENT --force --decode" || die "ERROR creating authoritative sector-aligned AIFF"
Josh Coalson463d0f82002-12-10 06:41:27 +00001040
1041test_multifile ()
1042{
Josh Coalsonc2751e62005-08-27 01:57:39 +00001043 input_type=$1
1044 streamtype=$2
1045 sector_align=$3
1046 encode_options="$4"
1047
1048 extra_encode_options=""
1049 extra_decode_options=""
1050 if [ $input_type = "raw" ] ; then
1051 extra_encode_options="--force-raw-format $multifile_format_encode"
1052 extra_decode_options="--force-raw-format $multifile_format_decode"
1053 else
1054 if [ $input_type = "aiff" ] ; then
1055 extra_decode_options="--force-aiff-format"
1056 fi
1057 fi
Josh Coalson463d0f82002-12-10 06:41:27 +00001058
1059 if [ $streamtype = ogg ] ; then
Josh Coalson12d3a412007-08-01 03:02:00 +00001060 suffix=oga
Josh Coalson463d0f82002-12-10 06:41:27 +00001061 encode_options="$encode_options --ogg"
1062 else
1063 suffix=flac
1064 fi
1065
1066 if [ $sector_align = sector_align ] ; then
1067 encode_options="$encode_options --sector-align"
1068 fi
1069
Josh Coalsonc28efe22006-11-04 03:04:21 +00001070 if [ $input_type = flac ] || [ $input_type = ogg ] ; then
Josh Coalsonbfda3782006-08-28 03:42:10 +00001071 CMP=md5cmp
1072 else
1073 CMP=cmp
1074 fi
1075
Josh Coalson463d0f82002-12-10 06:41:27 +00001076 for n in 0 1 2 ; do
Josh Coalsonbfda3782006-08-28 03:42:10 +00001077 cp file$n.$input_type file${n}x.$input_type
Josh Coalson463d0f82002-12-10 06:41:27 +00001078 done
Josh Coalsonbfda3782006-08-28 03:42:10 +00001079 run_flac --force $encode_options $extra_encode_options file0x.$input_type file1x.$input_type file2x.$input_type || die "ERROR"
Josh Coalsonc2751e62005-08-27 01:57:39 +00001080 run_flac --force --decode $extra_decode_options file0x.$suffix file1x.$suffix file2x.$suffix || die "ERROR"
Josh Coalson463d0f82002-12-10 06:41:27 +00001081 if [ $sector_align != sector_align ] ; then
1082 for n in 0 1 2 ; do
Josh Coalsonbfda3782006-08-28 03:42:10 +00001083 $CMP file$n.$input_type file${n}x.$input_type || die "ERROR: file mismatch on file #$n"
Josh Coalsonc2751e62005-08-27 01:57:39 +00001084 done
1085 else
1086 for n in 0 1 2 ; do
Josh Coalsonbfda3782006-08-28 03:42:10 +00001087 $CMP file${n}s.$input_type file${n}x.$input_type || die "ERROR: file mismatch on file #$n"
Josh Coalson463d0f82002-12-10 06:41:27 +00001088 done
1089 fi
1090 for n in 0 1 2 ; do
Josh Coalsonc2751e62005-08-27 01:57:39 +00001091 rm -f file${n}x.$suffix file${n}x.$input_type
Josh Coalson463d0f82002-12-10 06:41:27 +00001092 done
1093}
1094
Josh Coalsonc28efe22006-11-04 03:04:21 +00001095input_types="raw wav aiff flac"
1096#@@@ doesn't work yet because md5cmp doesn't work because metaflac doesn't work on ogg flac yet
1097#@@@if [ $has_ogg = yes ] ; then
1098#@@@ input_types="$input_types ogg"
1099#@@@fi
1100for input_type in $input_types ; do
Josh Coalsonc2751e62005-08-27 01:57:39 +00001101 echo "Testing multiple $input_type files without verify..."
1102 test_multifile $input_type flac no_sector_align ""
Josh Coalson463d0f82002-12-10 06:41:27 +00001103
Josh Coalsonc2751e62005-08-27 01:57:39 +00001104 echo "Testing multiple $input_type files with verify..."
1105 test_multifile $input_type flac no_sector_align "--verify"
Josh Coalson463d0f82002-12-10 06:41:27 +00001106
Josh Coalsonc28efe22006-11-04 03:04:21 +00001107 if [ $input_type != flac ] && [ $input_type != ogg ] ; then # --sector-align not supported for FLAC input
Josh Coalsonbfda3782006-08-28 03:42:10 +00001108 echo "Testing multiple $input_type files with --sector-align, without verify..."
1109 test_multifile $input_type flac sector_align ""
Josh Coalson463d0f82002-12-10 06:41:27 +00001110
Josh Coalsonbfda3782006-08-28 03:42:10 +00001111 echo "Testing multiple $input_type files with --sector-align, with verify..."
1112 test_multifile $input_type flac sector_align "--verify"
1113 fi
Josh Coalson463d0f82002-12-10 06:41:27 +00001114
Josh Coalsonc28efe22006-11-04 03:04:21 +00001115 if [ $has_ogg = yes ] ; then
Josh Coalsonc2751e62005-08-27 01:57:39 +00001116 echo "Testing multiple $input_type files with --ogg, without verify..."
1117 test_multifile $input_type ogg no_sector_align ""
Josh Coalson463d0f82002-12-10 06:41:27 +00001118
Josh Coalsonc2751e62005-08-27 01:57:39 +00001119 echo "Testing multiple $input_type files with --ogg, with verify..."
1120 test_multifile $input_type ogg no_sector_align "--verify"
Josh Coalson463d0f82002-12-10 06:41:27 +00001121
Josh Coalsonbfda3782006-08-28 03:42:10 +00001122 if [ $input_type != flac ] ; then # --sector-align not supported for FLAC input
1123 echo "Testing multiple $input_type files with --ogg and --sector-align, without verify..."
1124 test_multifile $input_type ogg sector_align ""
Josh Coalson463d0f82002-12-10 06:41:27 +00001125
Josh Coalsonbfda3782006-08-28 03:42:10 +00001126 echo "Testing multiple $input_type files with --ogg and --sector-align, with verify..."
1127 test_multifile $input_type ogg sector_align "--verify"
1128 fi
Josh Coalson463d0f82002-12-10 06:41:27 +00001129
Josh Coalsonc2751e62005-08-27 01:57:39 +00001130 echo "Testing multiple $input_type files with --ogg and --serial-number, with verify..."
1131 test_multifile $input_type ogg no_sector_align "--serial-number=321 --verify"
1132 fi
1133done
Josh Coalsonbfda3782006-08-28 03:42:10 +00001134
1135
1136############################################################################
Josh Coalson7617cac2008-09-09 07:24:23 +00001137# test --keep-foreign-metadata
1138############################################################################
1139
1140echo "Testing --keep-foreign-metadata..."
1141
1142rt_test_wav wacky1.wav '--keep-foreign-metadata'
1143rt_test_wav wacky2.wav '--keep-foreign-metadata'
Josh Coalsond7f53442008-09-09 07:49:19 +00001144rt_test_w64 wacky1.w64 '--keep-foreign-metadata'
1145rt_test_w64 wacky2.w64 '--keep-foreign-metadata'
Josh Coalson7617cac2008-09-09 07:24:23 +00001146rt_test_rf64 wacky1.rf64 '--keep-foreign-metadata'
1147rt_test_rf64 wacky2.rf64 '--keep-foreign-metadata'
1148
1149
1150############################################################################
Josh Coalsonbfda3782006-08-28 03:42:10 +00001151# test the metadata-handling properties of flac-to-flac encoding
1152############################################################################
1153
1154echo "Testing the metadata-handling properties of flac-to-flac encoding..."
1155
Erik de Castro Lopod8036ea2015-02-15 16:32:25 +11001156testdatadir=${top_srcdir}/test/flac-to-flac-metadata-test-files
1157
Josh Coalsonbfda3782006-08-28 03:42:10 +00001158filter ()
1159{
Josh Coalsona5023532007-02-04 04:28:37 +00001160 # minor danger, changing vendor strings might change the length of the
Josh Coalsonbfda3782006-08-28 03:42:10 +00001161 # VORBIS_COMMENT block, but if we add "^ length: " to the patterns,
1162 # we lose info about PADDING size that we need
1163 grep -Ev '^ vendor string: |^ m..imum .....size: ' | sed -e 's/, stream_offset.*//'
1164}
1165flac2flac ()
1166{
Erik de Castro Lopod8036ea2015-02-15 16:32:25 +11001167 file="$testdatadir/$1"
1168 case="$testdatadir/$2"
Josh Coalsonbfda3782006-08-28 03:42:10 +00001169 args="$3"
1170 expect="$case-expect.meta"
Erik de Castro Lopoefaab3c2015-10-04 09:43:33 +11001171 echo $ECHO_N "$2... " $ECHO_C
Erik de Castro Lopo1ddeb262015-02-24 18:04:44 +11001172 # The 'make distcheck' target needs this.
1173 chmod u+w $file
Erik de Castro Lopobb2abea2015-02-13 19:47:30 +11001174 run_flac -f -o out.flac $args $file || die "ERROR encoding FLAC file"
Josh Coalsonbfda3782006-08-28 03:42:10 +00001175 run_metaflac --list out.flac | filter > out.meta || die "ERROR listing metadata of output FLAC file"
1176 diff -q -w $expect out.meta 2>/dev/null || die "ERROR: metadata does not match expected $expect"
1177 echo OK
1178}
1179
1180#filter=', stream_offset.*|^ vendor string: |^ length: |^ m..imum .....size: '
Josh Coalsonbfda3782006-08-28 03:42:10 +00001181
1182# case 00a: no alterations on a file with all metadata types, keep all metadata, in same order
1183flac2flac input-SCVAUP.flac case00a ""
1184# case 01a: on file with multiple PADDING blocks, they should be aggregated into one at the end
1185flac2flac input-SCVPAP.flac case01a ""
1186# case 01b: on file with multiple PADDING blocks and --no-padding specified, they should all be deleted
1187flac2flac input-SCVPAP.flac case01b "--no-padding"
1188# case 01c: on file with multiple PADDING blocks and -P specified, they should all be overwritten with -P value
1189flac2flac input-SCVPAP.flac case01c "-P 1234"
1190# case 01d: on file with no PADDING blocks, use -P setting
1191flac2flac input-SCVA.flac case01d "-P 1234"
1192# case 01e: on file with no PADDING blocks and no -P given, use default padding
1193flac2flac input-SCVA.flac case01e ""
1194# case 02a: on file with no VORBIS_COMMENT block, add new VORBIS_COMMENT
1195flac2flac input-SCPAP.flac case02a ""
1196# case 02b: on file with no VORBIS_COMMENT block and --tag, add new VORBIS_COMMENT with tags
1197flac2flac input-SCPAP.flac case02b "--tag=artist=0"
1198# case 02c: on file with VORBIS_COMMENT block and --tag, replace existing VORBIS_COMMENT with new tags
Erik de Castro Lopobb2abea2015-02-13 19:47:30 +11001199flac2flac input-SCVAUP.flac case02c "--tag=artist=0"
Josh Coalsonbfda3782006-08-28 03:42:10 +00001200# case 03a: on file with no CUESHEET block and --cuesheet specified, add it
Erik de Castro Lopod8036ea2015-02-15 16:32:25 +11001201flac2flac input-SVAUP.flac case03a "--cuesheet=$testdatadir/input0.cue"
Josh Coalsonbfda3782006-08-28 03:42:10 +00001202# case 03b: on file with CUESHEET block and --cuesheet specified, overwrite existing CUESHEET
Erik de Castro Lopod8036ea2015-02-15 16:32:25 +11001203flac2flac input-SCVAUP.flac case03b "--cuesheet=$testdatadir/input0.cue"
Josh Coalsonbfda3782006-08-28 03:42:10 +00001204# case 03c: on file with CUESHEET block and size-changing option specified, drop existing CUESHEET
Erik de Castro Lopobb2abea2015-02-13 19:47:30 +11001205flac2flac input-SCVAUP.flac case03c "--skip=1"
Josh Coalsonbfda3782006-08-28 03:42:10 +00001206# case 04a: on file with no SEEKTABLE block and --no-seektable specified, no SEEKTABLE
1207flac2flac input-VA.flac case04a "--no-padding --no-seektable"
1208# case 04b: on file with no SEEKTABLE block and -S specified, new SEEKTABLE
1209flac2flac input-VA.flac case04b "--no-padding -S 5x"
1210# case 04c: on file with no SEEKTABLE block and no seektable options specified, new SEEKTABLE with default points
1211flac2flac input-VA.flac case04c "--no-padding"
1212# case 04d: on file with SEEKTABLE block and --no-seektable specified, drop existing SEEKTABLE
1213flac2flac input-SCVA.flac case04d "--no-padding --no-seektable"
1214# case 04e: on file with SEEKTABLE block and -S specified, overwrite existing SEEKTABLE
Erik de Castro Lopobb2abea2015-02-13 19:47:30 +11001215flac2flac input-SCVA.flac case04e "--no-padding -S 5x"
Josh Coalsonbfda3782006-08-28 03:42:10 +00001216# case 04f: on file with SEEKTABLE block and size-changing option specified, drop existing SEEKTABLE, new SEEKTABLE with default points
1217#(already covered by case03c)
1218
1219rm -f out.flac out.meta
1220
Josh Coalsonc28efe22006-11-04 03:04:21 +00001221#@@@ when metaflac handles ogg flac, duplicate flac2flac tests here
1222
Josh Coalsonbfda3782006-08-28 03:42:10 +00001223cd ..