3 # FLAC - Free Lossless Audio Codec
4 # Copyright (C) 2001,2002,2003,2004,2005,2006 Josh Coalson
6 # This file is part the FLAC project. FLAC is comprised of several
7 # components distributed under difference licenses. The codec libraries
8 # are distributed under Xiph.Org's BSD-like license (see the file
9 # COPYING.Xiph in this distribution). All other programs, libraries, and
10 # plugins are distributed under the GPL (see COPYING.GPL). The documentation
11 # is distributed under the Gnu FDL (see COPYING.FDL). Each file in the
12 # FLAC distribution contains at the top the terms under which it may be
15 # Since this particular file is relevant to all components of FLAC,
16 # it may be distributed under the Xiph.Org license, which is the least
17 # restrictive of those mentioned above. See the file COPYING.Xiph in this
26 dddie="die ERROR: creating files with dd"
28 if [ x = x"$1" ] ; then
34 # change to 'false' to show flac output (useful for debugging)
37 TOTALLY_SILENT='--totally-silent'
43 LD_LIBRARY_PATH=`pwd`/../src/libFLAC/.libs:$LD_LIBRARY_PATH
44 LD_LIBRARY_PATH=`pwd`/../src/share/grabbag/.libs:$LD_LIBRARY_PATH
45 LD_LIBRARY_PATH=`pwd`/../src/share/getopt/.libs:$LD_LIBRARY_PATH
46 LD_LIBRARY_PATH=`pwd`/../src/share/replaygain_analysis/.libs:$LD_LIBRARY_PATH
47 LD_LIBRARY_PATH=`pwd`/../src/share/replaygain_synthesis/.libs:$LD_LIBRARY_PATH
48 LD_LIBRARY_PATH=`pwd`/../src/share/utf8/.libs:$LD_LIBRARY_PATH
49 LD_LIBRARY_PATH=`pwd`/../obj/$BUILD/lib:$LD_LIBRARY_PATH
50 export LD_LIBRARY_PATH
51 PATH=`pwd`/../src/flac:$PATH
52 PATH=`pwd`/../src/metaflac:$PATH
53 PATH=`pwd`/../src/test_streams:$PATH
54 PATH=`pwd`/../obj/$BUILD/bin:$PATH
56 flac --help 1>/dev/null 2>/dev/null || die "ERROR can't find flac executable"
60 if [ x"$FLAC__TEST_WITH_VALGRIND" = xyes ] ; then
61 echo "valgrind --leak-check=yes --show-reachable=yes --num-callers=100 flac $*" >>test_flac.valgrind.log
62 valgrind --leak-check=yes --show-reachable=yes --num-callers=100 --logfile-fd=4 flac $* 4>>test_flac.valgrind.log
70 if [ x"$FLAC__TEST_WITH_VALGRIND" = xyes ] ; then
71 echo "valgrind --leak-check=yes --show-reachable=yes --num-callers=100 metaflac $*" >>test_flac.valgrind.log
72 valgrind --leak-check=yes --show-reachable=yes --num-callers=100 --logfile-fd=4 metaflac $* 4>>test_flac.valgrind.log
80 #n=`( [ -f "$1" ] && [ -f "$2" ] && metaflac --show-md5sum --no-filename "$1" "$2" 2>/dev/null || die "ERROR: comparing FLAC files $1 and $2 by MD5 sum" ) | uniq | wc -l`
81 n=`( [ -f "$1" ] && [ -f "$2" ] && metaflac --show-md5sum --no-filename "$1" "$2" 2>/dev/null || exit 1 ) | uniq | wc -l`
82 [ "$n" != "" ] && [ $n = 1 ]
85 if [ `env | grep -ic '^comspec='` != 0 ] ; then
91 echo "Checking for --ogg support in flac..."
92 if flac --ogg $SILENT --force-raw-format --endian=little --sign=signed --channels=1 --bps=8 --sample-rate=44100 -c $0 1>/dev/null 2>&1 ; then
94 echo "flac --ogg works"
97 echo "flac --ogg doesn't work"
100 echo "Generating streams..."
101 if [ ! -f wacky1.wav ] ; then
102 test_streams || die "ERROR during test_streams"
105 ############################################################################
106 # test that flac doesn't automatically overwrite files unless -f is used
107 ############################################################################
109 echo "Try encoding to a file that exists; should fail"
110 cp wacky1.wav exist.wav
112 if run_flac $TOTALLY_SILENT -0 exist.wav ; then
113 die "ERROR: it should have failed but didn't"
115 echo "OK, it failed as it should"
118 echo "Try encoding with -f to a file that exists; should succeed"
119 if run_flac $TOTALLY_SILENT -0 --force exist.wav ; then
120 echo "OK, it succeeded as it should"
122 die "ERROR: it should have succeeded but didn't"
125 echo "Try decoding to a file that exists; should fail"
126 if run_flac $TOTALLY_SILENT -d exist.flac ; then
127 die "ERROR: it should have failed but didn't"
129 echo "OK, it failed as it should"
132 echo "Try decoding with -f to a file that exists; should succeed"
133 if run_flac $TOTALLY_SILENT -d -f exist.flac ; then
134 echo "OK, it succeeded as it should"
136 die "ERROR: it should have succeeded but didn't"
139 rm -f exist.wav exist.flac
141 ############################################################################
142 # test fractional block sizes
143 ############################################################################
149 dd if=noise.raw ibs=4 count=$samples of=pbs.raw 2>/dev/null || $dddie
150 echo -n "fractional block size test (blocksize=$blocksize samples=$samples) encode... "
151 run_flac $SILENT --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"
153 run_flac $SILENT --force --decode --force-raw-format --endian=little --sign=signed -o pbs.cmp pbs.flac || die "ERROR"
154 echo -n "compare... "
155 cmp pbs.raw pbs.cmp || die "ERROR: file mismatch"
157 rm -f pbs.raw pbs.flac pbs.cmp
160 # The special significance of 2048 is it's the # of samples that flac calls
161 # FLAC__stream_encoder_process() on.
163 # We're trying to make sure the 1-sample overread logic in the stream encoder
164 # (used for last-block checking) works; these values probe around common
165 # multiples of the flac sample chunk size (2048) and the blocksize.
166 for samples in 31 32 33 34 35 2046 2047 2048 2049 2050 ; do
167 test_fractional 33 $samples
169 for 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
170 test_fractional 256 $samples
172 for samples in 1022 1023 1024 1025 1026 2046 2047 2048 2049 2050 4094 4095 4096 4097 4098 ; do
173 test_fractional 2048 $samples
175 for 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
176 test_fractional 4608 $samples
179 ############################################################################
180 # basic 'round-trip' tests of various kinds of streams
181 ############################################################################
186 channels=`echo $f | awk -F- '{print $2}'`
187 bps=`echo $f | awk -F- '{print $3}'`
188 echo -n "round-trip test ($f) encode... "
189 run_flac $SILENT --force --verify --force-raw-format --endian=little --sign=signed --sample-rate=44100 --bps=$bps --channels=$channels --no-padding --lax -o rt.flac $f || die "ERROR"
191 run_flac $SILENT --force --decode --force-raw-format --endian=little --sign=signed -o rt.raw rt.flac || die "ERROR"
192 echo -n "compare... "
193 cmp $f rt.raw || die "ERROR: file mismatch"
201 echo -n "round-trip test ($f) encode... "
202 run_flac $SILENT --force --verify --channel-map=none --no-padding --lax -o rt.flac $f || die "ERROR"
204 run_flac $SILENT --force --decode --channel-map=none -o rt.wav rt.flac || die "ERROR"
205 echo -n "compare... "
206 cmp $f rt.wav || die "ERROR: file mismatch"
214 echo -n "round-trip test ($f) encode... "
215 run_flac $SILENT --force --verify --channel-map=none --no-padding --lax -o rt.flac $f || die "ERROR"
217 run_flac $SILENT --force --decode --channel-map=none -o rt.aiff rt.flac || die "ERROR"
218 echo -n "compare... "
219 cmp $f rt.aiff || die "ERROR: file mismatch"
221 rm -f rt.flac rt.aiff
224 # assumes input file is WAVE; does not check the metadata-preserving features of flac-to-flac; that is checked later
228 echo -n "round-trip test ($f->flac->flac->wav) encode... "
229 run_flac $SILENT --force --verify --channel-map=none --no-padding --lax -o rt.flac $f || die "ERROR"
230 echo -n "re-encode... "
231 run_flac $SILENT --force --verify --lax -o rt2.flac rt.flac || die "ERROR"
233 run_flac $SILENT --force --decode --channel-map=none -o rt.wav rt2.flac || die "ERROR"
234 echo -n "compare... "
235 cmp $f rt.wav || die "ERROR: file mismatch"
237 rm -f rt.wav rt.flac rt2.flac
240 # assumes input file is WAVE; does not check the metadata-preserving features of flac-to-flac; that is checked later
244 echo -n "round-trip test ($f->oggflac->oggflac->wav) encode... "
245 run_flac $SILENT --force --verify --channel-map=none --no-padding --lax -o rt.ogg --ogg $f || die "ERROR"
246 echo -n "re-encode... "
247 run_flac $SILENT --force --verify --lax -o rt2.ogg --ogg rt.ogg || die "ERROR"
249 run_flac $SILENT --force --decode --channel-map=none -o rt.wav rt2.ogg || die "ERROR"
250 echo -n "compare... "
251 cmp $f rt.wav || die "ERROR: file mismatch"
253 rm -f rt.wav rt.ogg rt2.ogg
256 for f in rt-*.raw ; do
259 for f in rt-*.wav ; do
262 for f in rt-*.aiff ; do
265 for f in rt-*.wav ; do
268 if [ $has_ogg = yes ] ; then
269 for f in rt-*.wav ; do
274 ############################################################################
275 # test --skip and --until
276 ############################################################################
279 # first make some chopped-up raw files
281 echo "abcdefghijklmnopqrstuvwxyz1234567890ABCDEFGHIJKLMN" > master.raw
282 dd if=master.raw ibs=1 count=50 of=50c.raw 2>/dev/null || $dddie
283 dd if=master.raw ibs=1 skip=10 count=40 of=50c.skip10.raw 2>/dev/null || $dddie
284 dd if=master.raw ibs=1 skip=11 count=39 of=50c.skip11.raw 2>/dev/null || $dddie
285 dd if=master.raw ibs=1 skip=20 count=30 of=50c.skip20.raw 2>/dev/null || $dddie
286 dd if=master.raw ibs=1 skip=30 count=20 of=50c.skip30.raw 2>/dev/null || $dddie
287 dd if=master.raw ibs=1 skip=40 count=10 of=50c.skip40.raw 2>/dev/null || $dddie
288 dd if=master.raw ibs=1 count=10 of=50c.until10.raw 2>/dev/null || $dddie
289 dd if=master.raw ibs=1 count=20 of=50c.until20.raw 2>/dev/null || $dddie
290 dd if=master.raw ibs=1 count=30 of=50c.until30.raw 2>/dev/null || $dddie
291 dd if=master.raw ibs=1 count=39 of=50c.until39.raw 2>/dev/null || $dddie
292 dd if=master.raw ibs=1 count=40 of=50c.until40.raw 2>/dev/null || $dddie
293 dd if=master.raw ibs=1 skip=10 count=20 of=50c.skip10.until30.raw 2>/dev/null || $dddie
294 dd if=master.raw ibs=1 skip=10 count=29 of=50c.skip10.until39.raw 2>/dev/null || $dddie
295 dd if=master.raw ibs=1 skip=10 count=30 of=50c.skip10.until40.raw 2>/dev/null || $dddie
296 dd if=master.raw ibs=1 skip=20 count=10 of=50c.skip20.until30.raw 2>/dev/null || $dddie
297 dd if=master.raw ibs=1 skip=20 count=20 of=50c.skip20.until40.raw 2>/dev/null || $dddie
299 wav_eopt="$SILENT --force --verify --no-padding --lax"
300 wav_dopt="$SILENT --force --decode"
302 raw_eopt="$wav_eopt --force-raw-format --endian=big --sign=signed --sample-rate=10 --bps=8 --channels=1"
303 raw_dopt="$wav_dopt --force-raw-format --endian=big --sign=signed"
306 # convert them to WAVE/AIFF/Ogg FLAC files
310 run_flac "$2" $1.raw || die "ERROR converting $1.raw to WAVE"
311 run_flac "$3" $1.flac || die "ERROR converting $1.raw to WAVE"
313 convert_to_wav 50c "$raw_eopt" "$wav_dopt"
314 convert_to_wav 50c.skip10 "$raw_eopt" "$wav_dopt"
315 convert_to_wav 50c.skip11 "$raw_eopt" "$wav_dopt"
316 convert_to_wav 50c.skip20 "$raw_eopt" "$wav_dopt"
317 convert_to_wav 50c.skip30 "$raw_eopt" "$wav_dopt"
318 convert_to_wav 50c.skip40 "$raw_eopt" "$wav_dopt"
319 convert_to_wav 50c.until10 "$raw_eopt" "$wav_dopt"
320 convert_to_wav 50c.until20 "$raw_eopt" "$wav_dopt"
321 convert_to_wav 50c.until30 "$raw_eopt" "$wav_dopt"
322 convert_to_wav 50c.until39 "$raw_eopt" "$wav_dopt"
323 convert_to_wav 50c.until40 "$raw_eopt" "$wav_dopt"
324 convert_to_wav 50c.skip10.until30 "$raw_eopt" "$wav_dopt"
325 convert_to_wav 50c.skip10.until39 "$raw_eopt" "$wav_dopt"
326 convert_to_wav 50c.skip10.until40 "$raw_eopt" "$wav_dopt"
327 convert_to_wav 50c.skip20.until30 "$raw_eopt" "$wav_dopt"
328 convert_to_wav 50c.skip20.until40 "$raw_eopt" "$wav_dopt"
332 run_flac "$2" $1.raw || die "ERROR converting $1.raw to AIFF"
333 run_flac "$3" $1.flac -o $1.aiff || die "ERROR converting $1.raw to AIFF"
335 convert_to_aiff 50c "$raw_eopt" "$wav_dopt"
336 convert_to_aiff 50c.skip10 "$raw_eopt" "$wav_dopt"
337 convert_to_aiff 50c.skip11 "$raw_eopt" "$wav_dopt"
338 convert_to_aiff 50c.skip20 "$raw_eopt" "$wav_dopt"
339 convert_to_aiff 50c.skip30 "$raw_eopt" "$wav_dopt"
340 convert_to_aiff 50c.skip40 "$raw_eopt" "$wav_dopt"
341 convert_to_aiff 50c.until10 "$raw_eopt" "$wav_dopt"
342 convert_to_aiff 50c.until20 "$raw_eopt" "$wav_dopt"
343 convert_to_aiff 50c.until30 "$raw_eopt" "$wav_dopt"
344 convert_to_aiff 50c.until39 "$raw_eopt" "$wav_dopt"
345 convert_to_aiff 50c.until40 "$raw_eopt" "$wav_dopt"
346 convert_to_aiff 50c.skip10.until30 "$raw_eopt" "$wav_dopt"
347 convert_to_aiff 50c.skip10.until39 "$raw_eopt" "$wav_dopt"
348 convert_to_aiff 50c.skip10.until40 "$raw_eopt" "$wav_dopt"
349 convert_to_aiff 50c.skip20.until30 "$raw_eopt" "$wav_dopt"
350 convert_to_aiff 50c.skip20.until40 "$raw_eopt" "$wav_dopt"
354 run_flac "$wav_eopt" --ogg $1.wav || die "ERROR converting $1.raw to Ogg FLAC"
356 if [ $has_ogg = yes ] ; then
358 convert_to_ogg 50c.skip10
359 convert_to_ogg 50c.skip11
360 convert_to_ogg 50c.skip20
361 convert_to_ogg 50c.skip30
362 convert_to_ogg 50c.skip40
363 convert_to_ogg 50c.until10
364 convert_to_ogg 50c.until20
365 convert_to_ogg 50c.until30
366 convert_to_ogg 50c.until39
367 convert_to_ogg 50c.until40
368 convert_to_ogg 50c.skip10.until30
369 convert_to_ogg 50c.skip10.until39
370 convert_to_ogg 50c.skip10.until40
371 convert_to_ogg 50c.skip20.until30
372 convert_to_ogg 50c.skip20.until40
380 [ "$in_fmt" = wav ] || [ "$in_fmt" = aiff ] || [ "$in_fmt" = raw ] || [ "$in_fmt" = flac ] || [ "$in_fmt" = ogg ] || die "ERROR: internal error, bad 'in' format '$in_fmt'"
382 [ "$out_fmt" = flac ] || [ "$out_fmt" = ogg ] || die "ERROR: internal error, bad 'out' format '$out_fmt'"
384 if [ $in_fmt = raw ] ; then
392 if ( [ $in_fmt = flac ] || [ $in_fmt = ogg ] ) && ( [ $out_fmt = flac ] || [ $out_fmt = ogg ] ) ; then
398 if [ $out_fmt = ogg ] ; then
403 # test --skip when encoding
406 desc="($in_fmt<->$out_fmt)"
408 echo -n "testing --skip=# (encode) $desc... "
409 run_flac $eopt --skip=10 -o z50c.skip10.$out_fmt 50c.$in_fmt || die "ERROR generating FLAC file $desc"
410 [ $in_fmt = $out_fmt ] || run_flac $dopt -o z50c.skip10.$in_fmt z50c.skip10.$out_fmt || die "ERROR decoding FLAC file $desc"
411 $CMP 50c.skip10.$in_fmt z50c.skip10.$in_fmt || die "ERROR: file mismatch for --skip=10 (encode) $desc"
412 rm -f z50c.skip10.$out_fmt z50c.skip10.$in_fmt
415 echo -n "testing --skip=mm:ss (encode) $desc... "
416 run_flac $eopt --skip=0:01 -o z50c.skip0:01.$out_fmt 50c.$in_fmt || die "ERROR generating FLAC file $desc"
417 [ $in_fmt = $out_fmt ] || run_flac $dopt -o z50c.skip0:01.$in_fmt z50c.skip0:01.$out_fmt || die "ERROR decoding FLAC file $desc"
418 $CMP 50c.skip10.$in_fmt z50c.skip0:01.$in_fmt || die "ERROR: file mismatch for --skip=0:01 (encode) $desc"
419 rm -f z50c.skip0:01.$out_fmt z50c.skip0:01.$in_fmt
422 echo -n "testing --skip=mm:ss.sss (encode) $desc... "
423 run_flac $eopt --skip=0:01.1001 -o z50c.skip0:01.1001.$out_fmt 50c.$in_fmt || die "ERROR generating FLAC file $desc"
424 [ $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"
425 $CMP 50c.skip11.$in_fmt z50c.skip0:01.1001.$in_fmt || die "ERROR: file mismatch for --skip=0:01.1001 (encode) $desc"
426 rm -f z50c.skip0:01.1001.$out_fmt z50c.skip0:01.1001.$in_fmt
430 # test --skip when decoding
433 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"
435 echo -n "testing --skip=# (decode) $desc... "
436 run_flac $dopt --skip=10 -o z50c.skip10.$in_fmt z50c.$out_fmt || die "ERROR decoding FLAC file $desc"
437 $CMP 50c.skip10.$in_fmt z50c.skip10.$in_fmt || die "ERROR: file mismatch for --skip=10 (decode) $desc"
438 rm -f z50c.skip10.$in_fmt
441 echo -n "testing --skip=mm:ss (decode) $desc... "
442 run_flac $dopt --skip=0:01 -o z50c.skip0:01.$in_fmt z50c.$out_fmt || die "ERROR decoding FLAC file $desc"
443 $CMP 50c.skip10.$in_fmt z50c.skip0:01.$in_fmt || die "ERROR: file mismatch for --skip=0:01 (decode) $desc"
444 rm -f z50c.skip0:01.$in_fmt
447 echo -n "testing --skip=mm:ss.sss (decode) $desc... "
448 run_flac $dopt --skip=0:01.1001 -o z50c.skip0:01.1001.$in_fmt z50c.$out_fmt || die "ERROR decoding FLAC file $desc"
449 $CMP 50c.skip11.$in_fmt z50c.skip0:01.1001.$in_fmt || die "ERROR: file mismatch for --skip=0:01.1001 (decode) $desc"
450 rm -f z50c.skip0:01.1001.$in_fmt
456 # test --until when encoding
459 echo -n "testing --until=# (encode) $desc... "
460 run_flac $eopt --until=40 -o z50c.until40.$out_fmt 50c.$in_fmt || die "ERROR generating FLAC file $desc"
461 [ $in_fmt = $out_fmt ] || run_flac $dopt -o z50c.until40.$in_fmt z50c.until40.$out_fmt || die "ERROR decoding FLAC file $desc"
462 $CMP 50c.until40.$in_fmt z50c.until40.$in_fmt || die "ERROR: file mismatch for --until=40 (encode) $desc"
463 rm -f z50c.until40.$out_fmt z50c.until40.$in_fmt
466 echo -n "testing --until=mm:ss (encode) $desc... "
467 run_flac $eopt --until=0:04 -o z50c.until0:04.$out_fmt 50c.$in_fmt || die "ERROR generating FLAC file $desc"
468 [ $in_fmt = $out_fmt ] || run_flac $dopt -o z50c.until0:04.$in_fmt z50c.until0:04.$out_fmt || die "ERROR decoding FLAC file $desc"
469 $CMP 50c.until40.$in_fmt z50c.until0:04.$in_fmt || die "ERROR: file mismatch for --until=0:04 (encode) $desc"
470 rm -f z50c.until0:04.$out_fmt z50c.until0:04.$in_fmt
473 echo -n "testing --until=mm:ss.sss (encode) $desc... "
474 run_flac $eopt --until=0:03.9001 -o z50c.until0:03.9001.$out_fmt 50c.$in_fmt || die "ERROR generating FLAC file $desc"
475 [ $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"
476 $CMP 50c.until39.$in_fmt z50c.until0:03.9001.$in_fmt || die "ERROR: file mismatch for --until=0:03.9001 (encode) $desc"
477 rm -f z50c.until0:03.9001.$out_fmt z50c.until0:03.9001.$in_fmt
480 echo -n "testing --until=-# (encode) $desc... "
481 run_flac $eopt --until=-10 -o z50c.until-10.$out_fmt 50c.$in_fmt || die "ERROR generating FLAC file $desc"
482 [ $in_fmt = $out_fmt ] || run_flac $dopt -o z50c.until-10.$in_fmt z50c.until-10.$out_fmt || die "ERROR decoding FLAC file $desc"
483 $CMP 50c.until40.$in_fmt z50c.until-10.$in_fmt || die "ERROR: file mismatch for --until=-10 (encode) $desc"
484 rm -f z50c.until-10.$out_fmt z50c.until-10.$in_fmt
487 echo -n "testing --until=-mm:ss (encode) $desc... "
488 run_flac $eopt --until=-0:01 -o z50c.until-0:01.$out_fmt 50c.$in_fmt || die "ERROR generating FLAC file $desc"
489 [ $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"
490 $CMP 50c.until40.$in_fmt z50c.until-0:01.$in_fmt || die "ERROR: file mismatch for --until=-0:01 (encode) $desc"
491 rm -f z50c.until-0:01.$out_fmt z50c.until-0:01.$in_fmt
494 echo -n "testing --until=-mm:ss.sss (encode) $desc... "
495 run_flac $eopt --until=-0:01.1001 -o z50c.until-0:01.1001.$out_fmt 50c.$in_fmt || die "ERROR generating FLAC file $desc"
496 [ $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"
497 $CMP 50c.until39.$in_fmt z50c.until-0:01.1001.$in_fmt || die "ERROR: file mismatch for --until=-0:01.1001 (encode) $desc"
498 rm -f z50c.until-0:01.1001.$out_fmt z50c.until-0:01.1001.$in_fmt
502 # test --until when decoding
505 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"
507 echo -n "testing --until=# (decode) $desc... "
508 run_flac $dopt --until=40 -o z50c.until40.$in_fmt z50c.$out_fmt || die "ERROR decoding FLAC file $desc"
509 $CMP 50c.until40.$in_fmt z50c.until40.$in_fmt || die "ERROR: file mismatch for --until=40 (decode) $desc"
510 rm -f z50c.until40.$in_fmt
513 echo -n "testing --until=mm:ss (decode) $desc... "
514 run_flac $dopt --until=0:04 -o z50c.until0:04.$in_fmt z50c.$out_fmt || die "ERROR decoding FLAC file $desc"
515 $CMP 50c.until40.$in_fmt z50c.until0:04.$in_fmt || die "ERROR: file mismatch for --until=0:04 (decode) $desc"
516 rm -f z50c.until0:04.$in_fmt
519 echo -n "testing --until=mm:ss.sss (decode) $desc... "
520 run_flac $dopt --until=0:03.9001 -o z50c.until0:03.9001.$in_fmt z50c.$out_fmt || die "ERROR decoding FLAC file $desc"
521 $CMP 50c.until39.$in_fmt z50c.until0:03.9001.$in_fmt || die "ERROR: file mismatch for --until=0:03.9001 (decode) $desc"
522 rm -f z50c.until0:03.9001.$in_fmt
525 echo -n "testing --until=-# (decode) $desc... "
526 run_flac $dopt --until=-10 -o z50c.until-10.$in_fmt z50c.$out_fmt || die "ERROR decoding FLAC file $desc"
527 $CMP 50c.until40.$in_fmt z50c.until-10.$in_fmt || die "ERROR: file mismatch for --until=-10 (decode) $desc"
528 rm -f z50c.until-10.$in_fmt
531 echo -n "testing --until=-mm:ss (decode) $desc... "
532 run_flac $dopt --until=-0:01 -o z50c.until-0:01.$in_fmt z50c.$out_fmt || die "ERROR decoding FLAC file $desc"
533 $CMP 50c.until40.$in_fmt z50c.until-0:01.$in_fmt || die "ERROR: file mismatch for --until=-0:01 (decode) $desc"
534 rm -f z50c.until-0:01.$in_fmt
537 echo -n "testing --until=-mm:ss.sss (decode) $desc... "
538 run_flac $dopt --until=-0:01.1001 -o z50c.until-0:01.1001.$in_fmt z50c.$out_fmt || die "ERROR decoding FLAC file $desc"
539 $CMP 50c.until39.$in_fmt z50c.until-0:01.1001.$in_fmt || die "ERROR: file mismatch for --until=-0:01.1001 (decode) $desc"
540 rm -f z50c.until-0:01.1001.$in_fmt
546 # test --skip and --until when encoding
549 echo -n "testing --skip=10 --until=# (encode) $desc... "
550 run_flac $eopt --skip=10 --until=40 -o z50c.skip10.until40.$out_fmt 50c.$in_fmt || die "ERROR generating FLAC file $desc"
551 [ $in_fmt = $out_fmt ] || run_flac $dopt -o z50c.skip10.until40.$in_fmt z50c.skip10.until40.$out_fmt || die "ERROR decoding FLAC file $desc"
552 $CMP 50c.skip10.until40.$in_fmt z50c.skip10.until40.$in_fmt || die "ERROR: file mismatch for --skip=10 --until=40 (encode) $desc"
553 rm -f z50c.skip10.until40.$out_fmt z50c.skip10.until40.$in_fmt
556 echo -n "testing --skip=10 --until=mm:ss (encode) $desc... "
557 run_flac $eopt --skip=10 --until=0:04 -o z50c.skip10.until0:04.$out_fmt 50c.$in_fmt || die "ERROR generating FLAC file $desc"
558 [ $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"
559 $CMP 50c.skip10.until40.$in_fmt z50c.skip10.until0:04.$in_fmt || die "ERROR: file mismatch for --skip=10 --until=0:04 (encode) $desc"
560 rm -f z50c.skip10.until0:04.$out_fmt z50c.skip10.until0:04.$in_fmt
563 echo -n "testing --skip=10 --until=mm:ss.sss (encode) $desc... "
564 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"
565 [ $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"
566 $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"
567 rm -f z50c.skip10.until0:03.9001.$out_fmt z50c.skip10.until0:03.9001.$in_fmt
570 echo -n "testing --skip=10 --until=+# (encode) $desc... "
571 run_flac $eopt --skip=10 --until=+30 -o z50c.skip10.until+30.$out_fmt 50c.$in_fmt || die "ERROR generating FLAC file $desc"
572 [ $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"
573 $CMP 50c.skip10.until40.$in_fmt z50c.skip10.until+30.$in_fmt || die "ERROR: file mismatch for --skip=10 --until=+30 (encode) $desc"
574 rm -f z50c.skip10.until+30.$out_fmt z50c.skip10.until+30.$in_fmt
577 echo -n "testing --skip=10 --until=+mm:ss (encode) $desc... "
578 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"
579 [ $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"
580 $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"
581 rm -f z50c.skip10.until+0:03.$out_fmt z50c.skip10.until+0:03.$in_fmt
584 echo -n "testing --skip=10 --until=+mm:ss.sss (encode) $desc... "
585 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"
586 [ $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"
587 $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"
588 rm -f z50c.skip10.until+0:02.9001.$out_fmt z50c.skip10.until+0:02.9001.$in_fmt
591 echo -n "testing --skip=10 --until=-# (encode) $desc... "
592 run_flac $eopt --skip=10 --until=-10 -o z50c.skip10.until-10.$out_fmt 50c.$in_fmt || die "ERROR generating FLAC file $desc"
593 [ $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"
594 $CMP 50c.skip10.until40.$in_fmt z50c.skip10.until-10.$in_fmt || die "ERROR: file mismatch for --skip=10 --until=-10 (encode) $desc"
595 rm -f z50c.skip10.until-10.$out_fmt z50c.skip10.until-10.$in_fmt
598 echo -n "testing --skip=10 --until=-mm:ss (encode) $desc... "
599 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"
600 [ $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"
601 $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"
602 rm -f z50c.skip10.until-0:01.$out_fmt z50c.skip10.until-0:01.$in_fmt
605 echo -n "testing --skip=10 --until=-mm:ss.sss (encode) $desc... "
606 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"
607 [ $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"
608 $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"
609 rm -f z50c.skip10.until-0:01.1001.$out_fmt z50c.skip10.until-0:01.1001.$in_fmt
613 # test --skip and --until when decoding
616 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"
619 echo -n "testing --skip=10 --until=# (decode) $desc... "
620 run_flac $dopt --skip=10 --until=40 -o z50c.skip10.until40.$in_fmt z50c.$out_fmt || die "ERROR decoding FLAC file $desc"
621 $CMP 50c.skip10.until40.$in_fmt z50c.skip10.until40.$in_fmt || die "ERROR: file mismatch for --skip=10 --until=40 (decode) $desc"
622 rm -f z50c.skip10.until40.$in_fmt
625 echo -n "testing --skip=10 --until=mm:ss (decode) $desc... "
626 run_flac $dopt --skip=10 --until=0:04 -o z50c.skip10.until0:04.$in_fmt z50c.$out_fmt || die "ERROR decoding FLAC file $desc"
627 $CMP 50c.skip10.until40.$in_fmt z50c.skip10.until0:04.$in_fmt || die "ERROR: file mismatch for --skip=10 --until=0:04 (decode) $desc"
628 rm -f z50c.skip10.until0:04.$in_fmt
631 echo -n "testing --skip=10 --until=mm:ss.sss (decode) $desc... "
632 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"
633 $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"
634 rm -f z50c.skip10.until0:03.9001.$in_fmt
637 echo -n "testing --skip=10 --until=-# (decode) $desc... "
638 run_flac $dopt --skip=10 --until=-10 -o z50c.skip10.until-10.$in_fmt z50c.$out_fmt || die "ERROR decoding FLAC file $desc"
639 $CMP 50c.skip10.until40.$in_fmt z50c.skip10.until-10.$in_fmt || die "ERROR: file mismatch for --skip=10 --until=-10 (decode) $desc"
640 rm -f z50c.skip10.until-10.$in_fmt
643 echo -n "testing --skip=10 --until=-mm:ss (decode) $desc... "
644 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"
645 $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"
646 rm -f z50c.skip10.until-0:01.$in_fmt
649 echo -n "testing --skip=10 --until=-mm:ss.sss (decode) $desc... "
650 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"
651 $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"
652 rm -f z50c.skip10.until-0:01.1001.$in_fmt
658 test_skip_until raw flac
659 test_skip_until wav flac
660 test_skip_until aiff flac
661 test_skip_until flac flac
662 #@@@if [ $has_ogg = yes ] ; then
663 #@@@ #@@@ doesn't work yet because md5cmp doesn't work because metaflac doesn't work on ogg flac yet
664 #@@@ test_skip_until ogg flac
667 if [ $has_ogg = yes ] ; then
668 test_skip_until raw ogg
669 test_skip_until wav ogg
670 test_skip_until aiff ogg
671 #@@@ doesn't work yet because md5cmp doesn't work because metaflac doesn't work on ogg flac yet
672 #@@@test_skip_until flac ogg
673 #@@@test_skip_until ogg ogg
676 echo "testing seek extremes:"
678 run_flac --verify --force $SILENT --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"
680 if [ $is_win = no ] ; then
681 total_noise_cdda_samples=`run_metaflac --show-total-samples noise.flac`
682 [ $? = 0 ] || die "ERROR getting total sample count from noise.flac"
684 # some flavors of cygwin don't seem to treat the \x0d as a word
685 # separator, so we hard code it. we'll just have to fix it later
686 # if we change the way noise.flac is made.
687 total_noise_cdda_samples=393216
690 echo -n "testing --skip=0... "
691 run_flac $wav_dopt --skip=0 -o z.wav noise.flac || die "ERROR decoding FLAC file noise.flac"
694 for delta in 2 1 ; do
695 n=`expr $total_noise_cdda_samples - $delta`
696 echo -n "testing --skip=$n... "
697 run_flac $wav_dopt --skip=$n -o z.wav noise.flac || die "ERROR decoding FLAC file noise.flac"
704 ############################################################################
706 ############################################################################
708 #@@@ cat will not work on old cygwin, need to fix
709 if [ $is_win = no ] ; then
710 echo -n "testing --input-size=50 --skip=10... "
711 cat 50c.raw | run_flac $raw_eopt --input-size=50 --skip=10 -o z50c.skip10.flac - || die "ERROR generating FLAC file"
712 run_flac $raw_dopt -o z50c.skip10.raw z50c.skip10.flac || die "ERROR decoding FLAC file"
713 cmp 50c.skip10.raw z50c.skip10.raw || die "ERROR: file mismatch for --input-size=50 --skip=10"
714 rm -f z50c.skip10.raw z50c.skip10.flac
719 ############################################################################
721 ############################################################################
724 # create the cue sheet
727 cat > $cuesheet << EOF
728 CATALOG 1234567890123
745 [ "$in_fmt" = wav ] || [ "$in_fmt" = aiff ] || [ "$in_fmt" = raw ] || [ "$in_fmt" = flac ] || [ "$in_fmt" = ogg ] || die "ERROR: internal error, bad 'in' format '$in_fmt'"
747 [ "$out_fmt" = flac ] || [ "$out_fmt" = ogg ] || die "ERROR: internal error, bad 'out' format '$out_fmt'"
749 if [ $in_fmt = raw ] ; then
757 if ( [ $in_fmt = flac ] || [ $in_fmt = ogg ] ) && ( [ $out_fmt = flac ] || [ $out_fmt = ogg ] ) ; then
763 if [ $out_fmt = ogg ] ; then
767 desc="($in_fmt<->$out_fmt)"
770 # for this we need just need just one FLAC file; --cue only works while decoding
772 run_flac $eopt --cuesheet=$cuesheet -o z50c.cue.$out_fmt 50c.$in_fmt || die "ERROR generating FLAC file $desc"
774 # To make it easy to translate from cue point to sample numbers, the
775 # file has a sample rate of 10 Hz and a cuesheet like so:
777 # TRACK 01, INDEX 01 : 0:00.00 -> sample 0
778 # TRACK 01, INDEX 02 : 0:01.00 -> sample 10
779 # TRACK 01, INDEX 03 : 0:02.00 -> sample 20
780 # TRACK 02, INDEX 01 : 0:03.00 -> sample 30
781 # TRACK 04, INDEX 01 : 0:04.00 -> sample 40
783 echo -n "testing --cue=- $desc... "
784 run_flac $dopt -o z50c.cued.$in_fmt --cue=- z50c.cue.$out_fmt || die "ERROR decoding FLAC file $desc"
785 $CMP 50c.$in_fmt z50c.cued.$in_fmt || die "ERROR: file mismatch for --cue=- $desc"
786 rm -f z50c.cued.$in_fmt
789 echo -n "testing --cue=1.0 $desc... "
790 run_flac $dopt -o z50c.cued.$in_fmt --cue=1.0 z50c.cue.$out_fmt || die "ERROR decoding FLAC file $desc"
791 $CMP 50c.$in_fmt z50c.cued.$in_fmt || die "ERROR: file mismatch for --cue=1.0 $desc"
792 rm -f z50c.cued.$in_fmt
795 echo -n "testing --cue=1.0- $desc... "
796 run_flac $dopt -o z50c.cued.$in_fmt --cue=1.0- z50c.cue.$out_fmt || die "ERROR decoding FLAC file $desc"
797 $CMP 50c.$in_fmt z50c.cued.$in_fmt || die "ERROR: file mismatch for --cue=1.0- $desc"
798 rm -f z50c.cued.$in_fmt
801 echo -n "testing --cue=1.1 $desc... "
802 run_flac $dopt -o z50c.cued.$in_fmt --cue=1.1 z50c.cue.$out_fmt || die "ERROR decoding FLAC file $desc"
803 $CMP 50c.$in_fmt z50c.cued.$in_fmt || die "ERROR: file mismatch for --cue=1.1 $desc"
804 rm -f z50c.cued.$in_fmt
807 echo -n "testing --cue=1.1- $desc... "
808 run_flac $dopt -o z50c.cued.$in_fmt --cue=1.1- z50c.cue.$out_fmt || die "ERROR decoding FLAC file $desc"
809 $CMP 50c.$in_fmt z50c.cued.$in_fmt || die "ERROR: file mismatch for --cue=1.1- $desc"
810 rm -f z50c.cued.$in_fmt
813 echo -n "testing --cue=1.2 $desc... "
814 run_flac $dopt -o z50c.cued.$in_fmt --cue=1.2 z50c.cue.$out_fmt || die "ERROR decoding FLAC file $desc"
815 $CMP 50c.skip10.$in_fmt z50c.cued.$in_fmt || die "ERROR: file mismatch for --cue=1.2 $desc"
816 rm -f z50c.cued.$in_fmt
819 echo -n "testing --cue=1.2- $desc... "
820 run_flac $dopt -o z50c.cued.$in_fmt --cue=1.2- z50c.cue.$out_fmt || die "ERROR decoding FLAC file $desc"
821 $CMP 50c.skip10.$in_fmt z50c.cued.$in_fmt || die "ERROR: file mismatch for --cue=1.2- $desc"
822 rm -f z50c.cued.$in_fmt
825 echo -n "testing --cue=1.4 $desc... "
826 run_flac $dopt -o z50c.cued.$in_fmt --cue=1.4 z50c.cue.$out_fmt || die "ERROR decoding FLAC file $desc"
827 $CMP 50c.skip20.$in_fmt z50c.cued.$in_fmt || die "ERROR: file mismatch for --cue=1.4 $desc"
828 rm -f z50c.cued.$in_fmt
831 echo -n "testing --cue=1.4- $desc... "
832 run_flac $dopt -o z50c.cued.$in_fmt --cue=1.4- z50c.cue.$out_fmt || die "ERROR decoding FLAC file $desc"
833 $CMP 50c.skip20.$in_fmt z50c.cued.$in_fmt || die "ERROR: file mismatch for --cue=1.4- $desc"
834 rm -f z50c.cued.$in_fmt
837 echo -n "testing --cue=-5.0 $desc... "
838 run_flac $dopt -o z50c.cued.$in_fmt --cue=-5.0 z50c.cue.$out_fmt || die "ERROR decoding FLAC file $desc"
839 $CMP 50c.$in_fmt z50c.cued.$in_fmt || die "ERROR: file mismatch for --cue=-5.0 $desc"
840 rm -f z50c.cued.$in_fmt
843 echo -n "testing --cue=-4.1 $desc... "
844 run_flac $dopt -o z50c.cued.$in_fmt --cue=-4.1 z50c.cue.$out_fmt || die "ERROR decoding FLAC file $desc"
845 $CMP 50c.until40.$in_fmt z50c.cued.$in_fmt || die "ERROR: file mismatch for --cue=-4.1 $desc"
846 rm -f z50c.cued.$in_fmt
849 echo -n "testing --cue=-3.1 $desc... "
850 run_flac $dopt -o z50c.cued.$in_fmt --cue=-3.1 z50c.cue.$out_fmt || die "ERROR decoding FLAC file $desc"
851 $CMP 50c.until40.$in_fmt z50c.cued.$in_fmt || die "ERROR: file mismatch for --cue=-3.1 $desc"
852 rm -f z50c.cued.$in_fmt
855 echo -n "testing --cue=-1.4 $desc... "
856 run_flac $dopt -o z50c.cued.$in_fmt --cue=-1.4 z50c.cue.$out_fmt || die "ERROR decoding FLAC file $desc"
857 $CMP 50c.until30.$in_fmt z50c.cued.$in_fmt || die "ERROR: file mismatch for --cue=-1.4 $desc"
858 rm -f z50c.cued.$in_fmt
861 echo -n "testing --cue=1.0-5.0 $desc... "
862 run_flac $dopt -o z50c.cued.$in_fmt --cue=1.0-5.0 z50c.cue.$out_fmt || die "ERROR decoding FLAC file $desc"
863 $CMP 50c.$in_fmt z50c.cued.$in_fmt || die "ERROR: file mismatch for --cue=1.0-5.0 $desc"
864 rm -f z50c.cued.$in_fmt
867 echo -n "testing --cue=1.1-5.0 $desc... "
868 run_flac $dopt -o z50c.cued.$in_fmt --cue=1.1-5.0 z50c.cue.$out_fmt || die "ERROR decoding FLAC file $desc"
869 $CMP 50c.$in_fmt z50c.cued.$in_fmt || die "ERROR: file mismatch for --cue=1.1-5.0 $desc"
870 rm -f z50c.cued.$in_fmt
873 echo -n "testing --cue=1.2-4.1 $desc... "
874 run_flac $dopt -o z50c.cued.$in_fmt --cue=1.2-4.1 z50c.cue.$out_fmt || die "ERROR decoding FLAC file $desc"
875 $CMP 50c.skip10.until40.$in_fmt z50c.cued.$in_fmt || die "ERROR: file mismatch for --cue=1.2-4.1 $desc"
876 rm -f z50c.cued.$in_fmt
879 echo -n "testing --cue=1.4-2.0 $desc... "
880 run_flac $dopt -o z50c.cued.$in_fmt --cue=1.4-2.0 z50c.cue.$out_fmt || die "ERROR decoding FLAC file $desc"
881 $CMP 50c.skip20.until30.$in_fmt z50c.cued.$in_fmt || die "ERROR: file mismatch for --cue=1.4-2.0 $desc"
882 rm -f z50c.cued.$in_fmt
885 rm -f z50c.cue.$out_fmt
892 #@@@if [ $has_ogg = yes ] ; then
893 #@@@ #@@@ doesn't work yet because md5cmp doesn't work because metaflac doesn't work on ogg flac yet
894 #@@@ test_cue ogg flac
897 if [ $has_ogg = yes ] ; then
901 #@@@ doesn't work yet because md5cmp doesn't work because metaflac doesn't work on ogg flac yet
902 #@@@test_cue flac ogg
906 ############################################################################
907 # test 'fixup' code that happens when a FLAC file with total_samples == 0
908 # in the STREAMINFO block is converted to WAVE or AIFF, requiring the
909 # decoder go back and fix up the chunk headers
910 ############################################################################
912 echo -n "WAVE fixup test... "
914 echo -n "prepare... "
915 convert_to_wav noise "$raw_eopt" "$wav_dopt" || die "ERROR creating reference WAVE"
918 # the pipe from 'cat' to 'flac' does not work on cygwin because of the EOF/
919 # binary-mode stdin problem, so we use an undocumented option to metaflac to
920 # set the total sample count to 0
921 if [ $is_win = yes ] ; then
922 run_flac $raw_eopt noise.raw -o fixup.flac || die "ERROR generating FLAC file"
923 run_metaflac --set-total-samples=0 fixup.flac 2> /dev/null
925 cat noise.raw | run_flac $raw_eopt - -c > fixup.flac || die "ERROR generating FLAC file"
929 run_flac $wav_dopt fixup.flac -o fixup.wav || die "ERROR decoding FLAC file"
931 echo -n "compare... "
932 cmp noise.wav fixup.wav || die "ERROR: file mismatch"
935 rm -f noise.wav fixup.wav fixup.flac
937 echo -n "AIFF fixup test... "
939 echo -n "prepare... "
940 convert_to_aiff noise "$raw_eopt" "$wav_dopt" || die "ERROR creating reference AIFF"
943 # the pipe from 'cat' to 'flac' does not work on cygwin because of the EOF/
944 # binary-mode stdin problem, so we use an undocumented option to metaflac to
945 # set the total sample count to 0
946 if [ $is_win = yes ] ; then
947 run_flac $raw_eopt noise.raw -o fixup.flac || die "ERROR generating FLAC file"
948 run_metaflac --set-total-samples=0 fixup.flac 2> /dev/null
950 cat noise.raw | run_flac $raw_eopt - -c > fixup.flac || die "ERROR generating FLAC file"
954 run_flac $wav_dopt fixup.flac -o fixup.aiff || die "ERROR decoding FLAC file"
956 echo -n "compare... "
957 cmp noise.aiff fixup.aiff || die "ERROR: file mismatch"
960 rm -f noise.aiff fixup.aiff fixup.flac
963 ############################################################################
965 ############################################################################
967 echo "Generating multiple input files from noise..."
968 multifile_format_decode="--endian=big --sign=signed"
969 multifile_format_encode="$multifile_format_decode --sample-rate=44100 --bps=16 --channels=2 --no-padding"
970 short_noise_cdda_samples=`expr $total_noise_cdda_samples / 8`
971 run_flac --verify --force $SILENT --force-raw-format $multifile_format_encode --until=$short_noise_cdda_samples -o shortnoise.flac noise.raw || die "ERROR generating FLAC file"
972 run_flac --decode --force $SILENT shortnoise.flac -o shortnoise.raw --force-raw-format $multifile_format_decode || die "ERROR generating RAW file"
973 run_flac --decode --force $SILENT shortnoise.flac || die "ERROR generating WAVE file"
974 run_flac --decode --force $SILENT shortnoise.flac -o shortnoise.aiff || die "ERROR generating AIFF file"
975 cp shortnoise.flac file0.flac
976 cp shortnoise.flac file1.flac
977 cp shortnoise.flac file2.flac
978 rm -f shortnoise.flac
979 cp shortnoise.wav file0.wav
980 cp shortnoise.wav file1.wav
981 cp shortnoise.wav file2.wav
983 cp shortnoise.aiff file0.aiff
984 cp shortnoise.aiff file1.aiff
985 cp shortnoise.aiff file2.aiff
986 rm -f shortnoise.aiff
987 cp shortnoise.raw file0.raw
988 cp shortnoise.raw file1.raw
989 cp shortnoise.raw file2.raw
991 # create authoritative sector-aligned files for comparison
992 file0_samples=`expr \( $short_noise_cdda_samples / 588 \) \* 588`
993 file0_remainder=`expr $short_noise_cdda_samples - $file0_samples`
994 file1_samples=`expr \( \( $file0_remainder + $short_noise_cdda_samples \) / 588 \) \* 588`
995 file1_remainder=`expr $file0_remainder + $short_noise_cdda_samples - $file1_samples`
996 file1_samples=`expr $file1_samples - $file0_remainder`
997 file2_samples=`expr \( \( $file1_remainder + $short_noise_cdda_samples \) / 588 \) \* 588`
998 file2_remainder=`expr $file1_remainder + $short_noise_cdda_samples - $file2_samples`
999 file2_samples=`expr $file2_samples - $file1_remainder`
1000 if [ $file2_remainder != '0' ] ; then
1001 file2_samples=`expr $file2_samples + $file2_remainder`
1002 file2_remainder=`expr 588 - $file2_remainder`
1005 dd if=file0.raw ibs=4 count=$file0_samples of=file0s.raw 2>/dev/null || $dddie
1006 dd if=file0.raw ibs=4 count=$file0_remainder of=file1s.raw skip=$file0_samples 2>/dev/null || $dddie
1007 dd if=file1.raw ibs=4 count=$file1_samples of=z.raw 2>/dev/null || $dddie
1008 cat z.raw >> file1s.raw || die "ERROR: cat-ing sector-aligned files"
1009 dd if=file1.raw ibs=4 count=$file1_remainder of=file2s.raw skip=$file1_samples 2>/dev/null || $dddie
1010 dd if=file2.raw ibs=4 count=$file2_samples of=z.raw 2>/dev/null || $dddie
1011 cat z.raw >> file2s.raw || die "ERROR: cat-ing sector-aligned files"
1012 dd if=/dev/zero ibs=4 count=$file2_remainder of=z.raw 2>/dev/null || $dddie
1013 cat z.raw >> file2s.raw || die "ERROR: cat-ing sector-aligned files"
1016 convert_to_wav file0s "$multifile_format_encode --force" "$SILENT --force --decode" || die "ERROR creating authoritative sector-aligned WAVE"
1017 convert_to_wav file1s "$multifile_format_encode --force" "$SILENT --force --decode" || die "ERROR creating authoritative sector-aligned WAVE"
1018 convert_to_wav file2s "$multifile_format_encode --force" "$SILENT --force --decode" || die "ERROR creating authoritative sector-aligned WAVE"
1020 convert_to_aiff file0s "$multifile_format_encode --force" "$SILENT --force --decode" || die "ERROR creating authoritative sector-aligned AIFF"
1021 convert_to_aiff file1s "$multifile_format_encode --force" "$SILENT --force --decode" || die "ERROR creating authoritative sector-aligned AIFF"
1022 convert_to_aiff file2s "$multifile_format_encode --force" "$SILENT --force --decode" || die "ERROR creating authoritative sector-aligned AIFF"
1031 extra_encode_options=""
1032 extra_decode_options=""
1033 if [ $input_type = "raw" ] ; then
1034 extra_encode_options="--force-raw-format $multifile_format_encode"
1035 extra_decode_options="--force-raw-format $multifile_format_decode"
1037 if [ $input_type = "aiff" ] ; then
1038 extra_decode_options="--force-aiff-format"
1042 if [ $streamtype = ogg ] ; then
1044 encode_options="$encode_options --ogg"
1049 if [ $sector_align = sector_align ] ; then
1050 encode_options="$encode_options --sector-align"
1053 if [ $input_type = flac ] || [ $input_type = ogg ] ; then
1060 cp file$n.$input_type file${n}x.$input_type
1062 run_flac --force $encode_options $extra_encode_options file0x.$input_type file1x.$input_type file2x.$input_type || die "ERROR"
1063 run_flac --force --decode $extra_decode_options file0x.$suffix file1x.$suffix file2x.$suffix || die "ERROR"
1064 if [ $sector_align != sector_align ] ; then
1066 $CMP file$n.$input_type file${n}x.$input_type || die "ERROR: file mismatch on file #$n"
1070 $CMP file${n}s.$input_type file${n}x.$input_type || die "ERROR: file mismatch on file #$n"
1074 rm -f file${n}x.$suffix file${n}x.$input_type
1078 input_types="raw wav aiff flac"
1079 #@@@ doesn't work yet because md5cmp doesn't work because metaflac doesn't work on ogg flac yet
1080 #@@@if [ $has_ogg = yes ] ; then
1081 #@@@ input_types="$input_types ogg"
1083 for input_type in $input_types ; do
1084 echo "Testing multiple $input_type files without verify..."
1085 test_multifile $input_type flac no_sector_align ""
1087 echo "Testing multiple $input_type files with verify..."
1088 test_multifile $input_type flac no_sector_align "--verify"
1090 if [ $input_type != flac ] && [ $input_type != ogg ] ; then # --sector-align not supported for FLAC input
1091 echo "Testing multiple $input_type files with --sector-align, without verify..."
1092 test_multifile $input_type flac sector_align ""
1094 echo "Testing multiple $input_type files with --sector-align, with verify..."
1095 test_multifile $input_type flac sector_align "--verify"
1098 if [ $has_ogg = yes ] ; then
1099 echo "Testing multiple $input_type files with --ogg, without verify..."
1100 test_multifile $input_type ogg no_sector_align ""
1102 echo "Testing multiple $input_type files with --ogg, with verify..."
1103 test_multifile $input_type ogg no_sector_align "--verify"
1105 if [ $input_type != flac ] ; then # --sector-align not supported for FLAC input
1106 echo "Testing multiple $input_type files with --ogg and --sector-align, without verify..."
1107 test_multifile $input_type ogg sector_align ""
1109 echo "Testing multiple $input_type files with --ogg and --sector-align, with verify..."
1110 test_multifile $input_type ogg sector_align "--verify"
1113 echo "Testing multiple $input_type files with --ogg and --serial-number, with verify..."
1114 test_multifile $input_type ogg no_sector_align "--serial-number=321 --verify"
1119 ############################################################################
1120 # test the metadata-handling properties of flac-to-flac encoding
1121 ############################################################################
1123 echo "Testing the metadata-handling properties of flac-to-flac encoding..."
1125 testdir="flac-to-flac-metadata-test-files"
1128 # minor danger, changing vendor strings will change the length of the
1129 # VORBIS_COMMENT block, but if we add "^ length: " to the patterns,
1130 # we lose info about PADDING size that we need
1131 grep -Ev '^ vendor string: |^ m..imum .....size: ' | sed -e 's/, stream_offset.*//'
1138 expect="$case-expect.meta"
1140 run_flac $SILENT -f -o out.flac $args $file || die "ERROR encoding FLAC file"
1141 run_metaflac --list out.flac | filter > out.meta || die "ERROR listing metadata of output FLAC file"
1142 diff -q -w $expect out.meta 2>/dev/null || die "ERROR: metadata does not match expected $expect"
1146 #filter=', stream_offset.*|^ vendor string: |^ length: |^ m..imum .....size: '
1147 cd $testdir || die "ERROR changing to directory $testdir"
1149 # case 00a: no alterations on a file with all metadata types, keep all metadata, in same order
1150 flac2flac input-SCVAUP.flac case00a ""
1151 # case 01a: on file with multiple PADDING blocks, they should be aggregated into one at the end
1152 flac2flac input-SCVPAP.flac case01a ""
1153 # case 01b: on file with multiple PADDING blocks and --no-padding specified, they should all be deleted
1154 flac2flac input-SCVPAP.flac case01b "--no-padding"
1155 # case 01c: on file with multiple PADDING blocks and -P specified, they should all be overwritten with -P value
1156 flac2flac input-SCVPAP.flac case01c "-P 1234"
1157 # case 01d: on file with no PADDING blocks, use -P setting
1158 flac2flac input-SCVA.flac case01d "-P 1234"
1159 # case 01e: on file with no PADDING blocks and no -P given, use default padding
1160 flac2flac input-SCVA.flac case01e ""
1161 # case 02a: on file with no VORBIS_COMMENT block, add new VORBIS_COMMENT
1162 flac2flac input-SCPAP.flac case02a ""
1163 # case 02b: on file with no VORBIS_COMMENT block and --tag, add new VORBIS_COMMENT with tags
1164 flac2flac input-SCPAP.flac case02b "--tag=artist=0"
1165 # case 02c: on file with VORBIS_COMMENT block and --tag, replace existing VORBIS_COMMENT with new tags
1166 flac2flac input-SCVAUP.flac case02c "$TOTALLY_SILENT --tag=artist=0"
1167 # case 03a: on file with no CUESHEET block and --cuesheet specified, add it
1168 flac2flac input-SVAUP.flac case03a "--cuesheet=input0.cue"
1169 # case 03b: on file with CUESHEET block and --cuesheet specified, overwrite existing CUESHEET
1170 flac2flac input-SCVAUP.flac case03b "$TOTALLY_SILENT --cuesheet=input0.cue"
1171 # case 03c: on file with CUESHEET block and size-changing option specified, drop existing CUESHEET
1172 flac2flac input-SCVAUP.flac case03c "$TOTALLY_SILENT --skip=1"
1173 # case 04a: on file with no SEEKTABLE block and --no-seektable specified, no SEEKTABLE
1174 flac2flac input-VA.flac case04a "--no-padding --no-seektable"
1175 # case 04b: on file with no SEEKTABLE block and -S specified, new SEEKTABLE
1176 flac2flac input-VA.flac case04b "--no-padding -S 5x"
1177 # case 04c: on file with no SEEKTABLE block and no seektable options specified, new SEEKTABLE with default points
1178 flac2flac input-VA.flac case04c "--no-padding"
1179 # case 04d: on file with SEEKTABLE block and --no-seektable specified, drop existing SEEKTABLE
1180 flac2flac input-SCVA.flac case04d "--no-padding --no-seektable"
1181 # case 04e: on file with SEEKTABLE block and -S specified, overwrite existing SEEKTABLE
1182 flac2flac input-SCVA.flac case04e "$TOTALLY_SILENT --no-padding -S 5x"
1183 # case 04f: on file with SEEKTABLE block and size-changing option specified, drop existing SEEKTABLE, new SEEKTABLE with default points
1184 #(already covered by case03c)
1186 rm -f out.flac out.meta
1188 #@@@ when metaflac handles ogg flac, duplicate flac2flac tests here