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 valgrind --leak-check=yes --show-reachable=yes --num-callers=100 --logfile-fd=4 flac $* 4>>test_flac.valgrind.log
69 if [ x"$FLAC__TEST_WITH_VALGRIND" = xyes ] ; then
70 valgrind --leak-check=yes --show-reachable=yes --num-callers=100 --logfile-fd=4 metaflac $* 4>>test_flac.valgrind.log
78 #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`
79 n=`( [ -f "$1" ] && [ -f "$2" ] && metaflac --show-md5sum --no-filename "$1" "$2" 2>/dev/null || exit 1 ) | uniq | wc -l`
80 [ "$n" != "" ] && [ $n = 1 ]
83 if [ `env | grep -ic '^comspec='` != 0 ] ; then
89 echo "Checking for --ogg support in flac..."
90 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
92 echo "flac --ogg works"
95 echo "flac --ogg doesn't work"
98 echo "Generating streams..."
99 if [ ! -f wacky1.wav ] ; then
100 test_streams || die "ERROR during test_streams"
103 ############################################################################
104 # test that flac doesn't automatically overwrite files unless -f is used
105 ############################################################################
107 echo "Try encoding to a file that exists; should fail"
108 cp wacky1.wav exist.wav
110 if run_flac $TOTALLY_SILENT -0 exist.wav ; then
111 die "ERROR: it should have failed but didn't"
113 echo "OK, it failed as it should"
116 echo "Try encoding with -f to a file that exists; should succeed"
117 if run_flac $TOTALLY_SILENT -0 --force exist.wav ; then
118 echo "OK, it succeeded as it should"
120 die "ERROR: it should have succeeded but didn't"
123 echo "Try decoding to a file that exists; should fail"
124 if run_flac $TOTALLY_SILENT -d exist.flac ; then
125 die "ERROR: it should have failed but didn't"
127 echo "OK, it failed as it should"
130 echo "Try decoding with -f to a file that exists; should succeed"
131 if run_flac $TOTALLY_SILENT -d -f exist.flac ; then
132 echo "OK, it succeeded as it should"
134 die "ERROR: it should have succeeded but didn't"
137 rm -f exist.wav exist.flac
139 ############################################################################
140 # test fractional block sizes
141 ############################################################################
147 dd if=noise.raw ibs=4 count=$samples of=pbs.raw 2>/dev/null || $dddie
148 echo -n "fractional block size test (blocksize=$blocksize samples=$samples) encode... "
149 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"
151 run_flac $SILENT --force --decode --force-raw-format --endian=little --sign=signed -o pbs.cmp pbs.flac || die "ERROR"
152 echo -n "compare... "
153 cmp pbs.raw pbs.cmp || die "ERROR: file mismatch"
155 rm -f pbs.raw pbs.flac pbs.cmp
158 # The special significance of 2048 is it's the # of samples that flac calls
159 # FLAC__stream_encoder_process() on.
161 # We're trying to make sure the 1-sample overread logic in the stream encoder
162 # (used for last-block checking) works; these values probe around common
163 # multiples of the flac sample chunk size (2048) and the blocksize.
164 for samples in 31 32 33 34 35 2046 2047 2048 2049 2050 ; do
165 test_fractional 33 $samples
167 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
168 test_fractional 256 $samples
170 for samples in 1022 1023 1024 1025 1026 2046 2047 2048 2049 2050 4094 4095 4096 4097 4098 ; do
171 test_fractional 2048 $samples
173 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
174 test_fractional 4608 $samples
177 ############################################################################
178 # basic 'round-trip' tests of various kinds of streams
179 ############################################################################
184 channels=`echo $f | awk -F- '{print $2}'`
185 bps=`echo $f | awk -F- '{print $3}'`
186 echo -n "round-trip test ($f) encode... "
187 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"
189 run_flac $SILENT --force --decode --force-raw-format --endian=little --sign=signed -o rt.raw rt.flac || die "ERROR"
190 echo -n "compare... "
191 cmp $f rt.raw || die "ERROR: file mismatch"
199 echo -n "round-trip test ($f) encode... "
200 run_flac $SILENT --force --verify --channel-map=none --no-padding --lax -o rt.flac $f || die "ERROR"
202 run_flac $SILENT --force --decode --channel-map=none -o rt.wav rt.flac || die "ERROR"
203 echo -n "compare... "
204 cmp $f rt.wav || die "ERROR: file mismatch"
212 echo -n "round-trip test ($f) encode... "
213 run_flac $SILENT --force --verify --channel-map=none --no-padding --lax -o rt.flac $f || die "ERROR"
215 run_flac $SILENT --force --decode --channel-map=none -o rt.aiff rt.flac || die "ERROR"
216 echo -n "compare... "
217 cmp $f rt.aiff || die "ERROR: file mismatch"
219 rm -f rt.flac rt.aiff
222 # assumes input file is WAVE; does not check the metadata-preserving features of flac-to-flac; that is checked later
226 echo -n "round-trip test ($f->flac->flac->wav) encode... "
227 run_flac $SILENT --force --verify --channel-map=none --no-padding --lax -o rt.flac $f || die "ERROR"
228 echo -n "re-encode... "
229 run_flac $SILENT --force --verify --lax -o rt2.flac rt.flac || die "ERROR"
231 run_flac $SILENT --force --decode --channel-map=none -o rt.wav rt2.flac || die "ERROR"
232 echo -n "compare... "
233 cmp $f rt.wav || die "ERROR: file mismatch"
235 rm -f rt.wav rt.flac rt2.flac
238 # assumes input file is WAVE; does not check the metadata-preserving features of flac-to-flac; that is checked later
242 echo -n "round-trip test ($f->oggflac->oggflac->wav) encode... "
243 run_flac $SILENT --force --verify --channel-map=none --no-padding --lax -o rt.ogg --ogg $f || die "ERROR"
244 echo -n "re-encode... "
245 run_flac $SILENT --force --verify --lax -o rt2.ogg --ogg rt.ogg || die "ERROR"
247 run_flac $SILENT --force --decode --channel-map=none -o rt.wav rt2.ogg || die "ERROR"
248 echo -n "compare... "
249 cmp $f rt.wav || die "ERROR: file mismatch"
251 rm -f rt.wav rt.ogg rt2.ogg
254 for f in rt-*.raw ; do
257 for f in rt-*.wav ; do
260 for f in rt-*.aiff ; do
263 for f in rt-*.wav ; do
266 if [ $has_ogg = yes ] ; then
267 for f in rt-*.wav ; do
272 ############################################################################
273 # test --skip and --until
274 ############################################################################
277 # first make some chopped-up raw files
279 echo "abcdefghijklmnopqrstuvwxyz1234567890ABCDEFGHIJKLMN" > master.raw
280 dd if=master.raw ibs=1 count=50 of=50c.raw 2>/dev/null || $dddie
281 dd if=master.raw ibs=1 skip=10 count=40 of=50c.skip10.raw 2>/dev/null || $dddie
282 dd if=master.raw ibs=1 skip=11 count=39 of=50c.skip11.raw 2>/dev/null || $dddie
283 dd if=master.raw ibs=1 skip=20 count=30 of=50c.skip20.raw 2>/dev/null || $dddie
284 dd if=master.raw ibs=1 skip=30 count=20 of=50c.skip30.raw 2>/dev/null || $dddie
285 dd if=master.raw ibs=1 skip=40 count=10 of=50c.skip40.raw 2>/dev/null || $dddie
286 dd if=master.raw ibs=1 count=10 of=50c.until10.raw 2>/dev/null || $dddie
287 dd if=master.raw ibs=1 count=20 of=50c.until20.raw 2>/dev/null || $dddie
288 dd if=master.raw ibs=1 count=30 of=50c.until30.raw 2>/dev/null || $dddie
289 dd if=master.raw ibs=1 count=39 of=50c.until39.raw 2>/dev/null || $dddie
290 dd if=master.raw ibs=1 count=40 of=50c.until40.raw 2>/dev/null || $dddie
291 dd if=master.raw ibs=1 skip=10 count=20 of=50c.skip10.until30.raw 2>/dev/null || $dddie
292 dd if=master.raw ibs=1 skip=10 count=29 of=50c.skip10.until39.raw 2>/dev/null || $dddie
293 dd if=master.raw ibs=1 skip=10 count=30 of=50c.skip10.until40.raw 2>/dev/null || $dddie
294 dd if=master.raw ibs=1 skip=20 count=10 of=50c.skip20.until30.raw 2>/dev/null || $dddie
295 dd if=master.raw ibs=1 skip=20 count=20 of=50c.skip20.until40.raw 2>/dev/null || $dddie
297 wav_eopt="$SILENT --force --verify --no-padding --lax"
298 wav_dopt="$SILENT --force --decode"
300 raw_eopt="$wav_eopt --force-raw-format --endian=big --sign=signed --sample-rate=10 --bps=8 --channels=1
301 raw_dopt="$wav_dopt --force-raw-format --endian=big --sign=signed"
304 # convert them to WAVE/AIFF/Ogg FLAC files
308 run_flac "$2" $1.raw || die "ERROR converting $1.raw to WAVE"
309 run_flac "$3" $1.flac || die "ERROR converting $1.raw to WAVE"
311 convert_to_wav 50c "$raw_eopt" "$wav_dopt"
312 convert_to_wav 50c.skip10 "$raw_eopt" "$wav_dopt"
313 convert_to_wav 50c.skip11 "$raw_eopt" "$wav_dopt"
314 convert_to_wav 50c.skip20 "$raw_eopt" "$wav_dopt"
315 convert_to_wav 50c.skip30 "$raw_eopt" "$wav_dopt"
316 convert_to_wav 50c.skip40 "$raw_eopt" "$wav_dopt"
317 convert_to_wav 50c.until10 "$raw_eopt" "$wav_dopt"
318 convert_to_wav 50c.until20 "$raw_eopt" "$wav_dopt"
319 convert_to_wav 50c.until30 "$raw_eopt" "$wav_dopt"
320 convert_to_wav 50c.until39 "$raw_eopt" "$wav_dopt"
321 convert_to_wav 50c.until40 "$raw_eopt" "$wav_dopt"
322 convert_to_wav 50c.skip10.until30 "$raw_eopt" "$wav_dopt"
323 convert_to_wav 50c.skip10.until39 "$raw_eopt" "$wav_dopt"
324 convert_to_wav 50c.skip10.until40 "$raw_eopt" "$wav_dopt"
325 convert_to_wav 50c.skip20.until30 "$raw_eopt" "$wav_dopt"
326 convert_to_wav 50c.skip20.until40 "$raw_eopt" "$wav_dopt"
330 run_flac "$2" $1.raw || die "ERROR converting $1.raw to AIFF"
331 run_flac "$3" $1.flac -o $1.aiff || die "ERROR converting $1.raw to AIFF"
333 convert_to_aiff 50c "$raw_eopt" "$wav_dopt"
334 convert_to_aiff 50c.skip10 "$raw_eopt" "$wav_dopt"
335 convert_to_aiff 50c.skip11 "$raw_eopt" "$wav_dopt"
336 convert_to_aiff 50c.skip20 "$raw_eopt" "$wav_dopt"
337 convert_to_aiff 50c.skip30 "$raw_eopt" "$wav_dopt"
338 convert_to_aiff 50c.skip40 "$raw_eopt" "$wav_dopt"
339 convert_to_aiff 50c.until10 "$raw_eopt" "$wav_dopt"
340 convert_to_aiff 50c.until20 "$raw_eopt" "$wav_dopt"
341 convert_to_aiff 50c.until30 "$raw_eopt" "$wav_dopt"
342 convert_to_aiff 50c.until39 "$raw_eopt" "$wav_dopt"
343 convert_to_aiff 50c.until40 "$raw_eopt" "$wav_dopt"
344 convert_to_aiff 50c.skip10.until30 "$raw_eopt" "$wav_dopt"
345 convert_to_aiff 50c.skip10.until39 "$raw_eopt" "$wav_dopt"
346 convert_to_aiff 50c.skip10.until40 "$raw_eopt" "$wav_dopt"
347 convert_to_aiff 50c.skip20.until30 "$raw_eopt" "$wav_dopt"
348 convert_to_aiff 50c.skip20.until40 "$raw_eopt" "$wav_dopt"
352 run_flac "$wav_eopt" --ogg $1.wav || die "ERROR converting $1.raw to Ogg FLAC"
354 if [ $has_ogg = yes ] ; then
356 convert_to_ogg 50c.skip10
357 convert_to_ogg 50c.skip11
358 convert_to_ogg 50c.skip20
359 convert_to_ogg 50c.skip30
360 convert_to_ogg 50c.skip40
361 convert_to_ogg 50c.until10
362 convert_to_ogg 50c.until20
363 convert_to_ogg 50c.until30
364 convert_to_ogg 50c.until39
365 convert_to_ogg 50c.until40
366 convert_to_ogg 50c.skip10.until30
367 convert_to_ogg 50c.skip10.until39
368 convert_to_ogg 50c.skip10.until40
369 convert_to_ogg 50c.skip20.until30
370 convert_to_ogg 50c.skip20.until40
378 [ "$in_fmt" = wav ] || [ "$in_fmt" = aiff ] || [ "$in_fmt" = raw ] || [ "$in_fmt" = flac ] || [ "$in_fmt" = ogg ] || die "ERROR: internal error, bad 'in' format '$in_fmt'"
380 [ "$out_fmt" = flac ] || [ "$out_fmt" = ogg ] || die "ERROR: internal error, bad 'out' format '$out_fmt'"
382 if [ $in_fmt = raw ] ; then
390 if ( [ $in_fmt = flac ] || [ $in_fmt = ogg ] ) && ( [ $out_fmt = flac ] || [ $out_fmt = ogg ] ) ; then
396 if [ $out_fmt = ogg ] ; then
401 # test --skip when encoding
404 desc="($in_fmt<->$out_fmt)"
406 echo -n "testing --skip=# (encode) $desc... "
407 run_flac $eopt --skip=10 -o z50c.skip10.$out_fmt 50c.$in_fmt || die "ERROR generating FLAC file $desc"
408 [ $in_fmt = $out_fmt ] || run_flac $dopt -o z50c.skip10.$in_fmt z50c.skip10.$out_fmt || die "ERROR decoding FLAC file $desc"
409 $CMP 50c.skip10.$in_fmt z50c.skip10.$in_fmt || die "ERROR: file mismatch for --skip=10 (encode) $desc"
410 rm -f z50c.skip10.$out_fmt z50c.skip10.$in_fmt
413 echo -n "testing --skip=mm:ss (encode) $desc... "
414 run_flac $eopt --skip=0:01 -o z50c.skip0:01.$out_fmt 50c.$in_fmt || die "ERROR generating FLAC file $desc"
415 [ $in_fmt = $out_fmt ] || run_flac $dopt -o z50c.skip0:01.$in_fmt z50c.skip0:01.$out_fmt || die "ERROR decoding FLAC file $desc"
416 $CMP 50c.skip10.$in_fmt z50c.skip0:01.$in_fmt || die "ERROR: file mismatch for --skip=0:01 (encode) $desc"
417 rm -f z50c.skip0:01.$out_fmt z50c.skip0:01.$in_fmt
420 echo -n "testing --skip=mm:ss.sss (encode) $desc... "
421 run_flac $eopt --skip=0:01.1001 -o z50c.skip0:01.1001.$out_fmt 50c.$in_fmt || die "ERROR generating FLAC file $desc"
422 [ $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"
423 $CMP 50c.skip11.$in_fmt z50c.skip0:01.1001.$in_fmt || die "ERROR: file mismatch for --skip=0:01.1001 (encode) $desc"
424 rm -f z50c.skip0:01.1001.$out_fmt z50c.skip0:01.1001.$in_fmt
428 # test --skip when decoding
431 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"
433 echo -n "testing --skip=# (decode) $desc... "
434 run_flac $dopt --skip=10 -o z50c.skip10.$in_fmt z50c.$out_fmt || die "ERROR decoding FLAC file $desc"
435 $CMP 50c.skip10.$in_fmt z50c.skip10.$in_fmt || die "ERROR: file mismatch for --skip=10 (decode) $desc"
436 rm -f z50c.skip10.$in_fmt
439 echo -n "testing --skip=mm:ss (decode) $desc... "
440 run_flac $dopt --skip=0:01 -o z50c.skip0:01.$in_fmt z50c.$out_fmt || die "ERROR decoding FLAC file $desc"
441 $CMP 50c.skip10.$in_fmt z50c.skip0:01.$in_fmt || die "ERROR: file mismatch for --skip=0:01 (decode) $desc"
442 rm -f z50c.skip0:01.$in_fmt
445 echo -n "testing --skip=mm:ss.sss (decode) $desc... "
446 run_flac $dopt --skip=0:01.1001 -o z50c.skip0:01.1001.$in_fmt z50c.$out_fmt || die "ERROR decoding FLAC file $desc"
447 $CMP 50c.skip11.$in_fmt z50c.skip0:01.1001.$in_fmt || die "ERROR: file mismatch for --skip=0:01.1001 (decode) $desc"
448 rm -f z50c.skip0:01.1001.$in_fmt
454 # test --until when encoding
457 echo -n "testing --until=# (encode) $desc... "
458 run_flac $eopt --until=40 -o z50c.until40.$out_fmt 50c.$in_fmt || die "ERROR generating FLAC file $desc"
459 [ $in_fmt = $out_fmt ] || run_flac $dopt -o z50c.until40.$in_fmt z50c.until40.$out_fmt || die "ERROR decoding FLAC file $desc"
460 $CMP 50c.until40.$in_fmt z50c.until40.$in_fmt || die "ERROR: file mismatch for --until=40 (encode) $desc"
461 rm -f z50c.until40.$out_fmt z50c.until40.$in_fmt
464 echo -n "testing --until=mm:ss (encode) $desc... "
465 run_flac $eopt --until=0:04 -o z50c.until0:04.$out_fmt 50c.$in_fmt || die "ERROR generating FLAC file $desc"
466 [ $in_fmt = $out_fmt ] || run_flac $dopt -o z50c.until0:04.$in_fmt z50c.until0:04.$out_fmt || die "ERROR decoding FLAC file $desc"
467 $CMP 50c.until40.$in_fmt z50c.until0:04.$in_fmt || die "ERROR: file mismatch for --until=0:04 (encode) $desc"
468 rm -f z50c.until0:04.$out_fmt z50c.until0:04.$in_fmt
471 echo -n "testing --until=mm:ss.sss (encode) $desc... "
472 run_flac $eopt --until=0:03.9001 -o z50c.until0:03.9001.$out_fmt 50c.$in_fmt || die "ERROR generating FLAC file $desc"
473 [ $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"
474 $CMP 50c.until39.$in_fmt z50c.until0:03.9001.$in_fmt || die "ERROR: file mismatch for --until=0:03.9001 (encode) $desc"
475 rm -f z50c.until0:03.9001.$out_fmt z50c.until0:03.9001.$in_fmt
478 echo -n "testing --until=-# (encode) $desc... "
479 run_flac $eopt --until=-10 -o z50c.until-10.$out_fmt 50c.$in_fmt || die "ERROR generating FLAC file $desc"
480 [ $in_fmt = $out_fmt ] || run_flac $dopt -o z50c.until-10.$in_fmt z50c.until-10.$out_fmt || die "ERROR decoding FLAC file $desc"
481 $CMP 50c.until40.$in_fmt z50c.until-10.$in_fmt || die "ERROR: file mismatch for --until=-10 (encode) $desc"
482 rm -f z50c.until-10.$out_fmt z50c.until-10.$in_fmt
485 echo -n "testing --until=-mm:ss (encode) $desc... "
486 run_flac $eopt --until=-0:01 -o z50c.until-0:01.$out_fmt 50c.$in_fmt || die "ERROR generating FLAC file $desc"
487 [ $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"
488 $CMP 50c.until40.$in_fmt z50c.until-0:01.$in_fmt || die "ERROR: file mismatch for --until=-0:01 (encode) $desc"
489 rm -f z50c.until-0:01.$out_fmt z50c.until-0:01.$in_fmt
492 echo -n "testing --until=-mm:ss.sss (encode) $desc... "
493 run_flac $eopt --until=-0:01.1001 -o z50c.until-0:01.1001.$out_fmt 50c.$in_fmt || die "ERROR generating FLAC file $desc"
494 [ $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"
495 $CMP 50c.until39.$in_fmt z50c.until-0:01.1001.$in_fmt || die "ERROR: file mismatch for --until=-0:01.1001 (encode) $desc"
496 rm -f z50c.until-0:01.1001.$out_fmt z50c.until-0:01.1001.$in_fmt
500 # test --until when decoding
503 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"
505 echo -n "testing --until=# (decode) $desc... "
506 run_flac $dopt --until=40 -o z50c.until40.$in_fmt z50c.$out_fmt || die "ERROR decoding FLAC file $desc"
507 $CMP 50c.until40.$in_fmt z50c.until40.$in_fmt || die "ERROR: file mismatch for --until=40 (decode) $desc"
508 rm -f z50c.until40.$in_fmt
511 echo -n "testing --until=mm:ss (decode) $desc... "
512 run_flac $dopt --until=0:04 -o z50c.until0:04.$in_fmt z50c.$out_fmt || die "ERROR decoding FLAC file $desc"
513 $CMP 50c.until40.$in_fmt z50c.until0:04.$in_fmt || die "ERROR: file mismatch for --until=0:04 (decode) $desc"
514 rm -f z50c.until0:04.$in_fmt
517 echo -n "testing --until=mm:ss.sss (decode) $desc... "
518 run_flac $dopt --until=0:03.9001 -o z50c.until0:03.9001.$in_fmt z50c.$out_fmt || die "ERROR decoding FLAC file $desc"
519 $CMP 50c.until39.$in_fmt z50c.until0:03.9001.$in_fmt || die "ERROR: file mismatch for --until=0:03.9001 (decode) $desc"
520 rm -f z50c.until0:03.9001.$in_fmt
523 echo -n "testing --until=-# (decode) $desc... "
524 run_flac $dopt --until=-10 -o z50c.until-10.$in_fmt z50c.$out_fmt || die "ERROR decoding FLAC file $desc"
525 $CMP 50c.until40.$in_fmt z50c.until-10.$in_fmt || die "ERROR: file mismatch for --until=-10 (decode) $desc"
526 rm -f z50c.until-10.$in_fmt
529 echo -n "testing --until=-mm:ss (decode) $desc... "
530 run_flac $dopt --until=-0:01 -o z50c.until-0:01.$in_fmt z50c.$out_fmt || die "ERROR decoding FLAC file $desc"
531 $CMP 50c.until40.$in_fmt z50c.until-0:01.$in_fmt || die "ERROR: file mismatch for --until=-0:01 (decode) $desc"
532 rm -f z50c.until-0:01.$in_fmt
535 echo -n "testing --until=-mm:ss.sss (decode) $desc... "
536 run_flac $dopt --until=-0:01.1001 -o z50c.until-0:01.1001.$in_fmt z50c.$out_fmt || die "ERROR decoding FLAC file $desc"
537 $CMP 50c.until39.$in_fmt z50c.until-0:01.1001.$in_fmt || die "ERROR: file mismatch for --until=-0:01.1001 (decode) $desc"
538 rm -f z50c.until-0:01.1001.$in_fmt
544 # test --skip and --until when encoding
547 echo -n "testing --skip=10 --until=# (encode) $desc... "
548 run_flac $eopt --skip=10 --until=40 -o z50c.skip10.until40.$out_fmt 50c.$in_fmt || die "ERROR generating FLAC file $desc"
549 [ $in_fmt = $out_fmt ] || run_flac $dopt -o z50c.skip10.until40.$in_fmt z50c.skip10.until40.$out_fmt || die "ERROR decoding FLAC file $desc"
550 $CMP 50c.skip10.until40.$in_fmt z50c.skip10.until40.$in_fmt || die "ERROR: file mismatch for --skip=10 --until=40 (encode) $desc"
551 rm -f z50c.skip10.until40.$out_fmt z50c.skip10.until40.$in_fmt
554 echo -n "testing --skip=10 --until=mm:ss (encode) $desc... "
555 run_flac $eopt --skip=10 --until=0:04 -o z50c.skip10.until0:04.$out_fmt 50c.$in_fmt || die "ERROR generating FLAC file $desc"
556 [ $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"
557 $CMP 50c.skip10.until40.$in_fmt z50c.skip10.until0:04.$in_fmt || die "ERROR: file mismatch for --skip=10 --until=0:04 (encode) $desc"
558 rm -f z50c.skip10.until0:04.$out_fmt z50c.skip10.until0:04.$in_fmt
561 echo -n "testing --skip=10 --until=mm:ss.sss (encode) $desc... "
562 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"
563 [ $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"
564 $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"
565 rm -f z50c.skip10.until0:03.9001.$out_fmt z50c.skip10.until0:03.9001.$in_fmt
568 echo -n "testing --skip=10 --until=+# (encode) $desc... "
569 run_flac $eopt --skip=10 --until=+30 -o z50c.skip10.until+30.$out_fmt 50c.$in_fmt || die "ERROR generating FLAC file $desc"
570 [ $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"
571 $CMP 50c.skip10.until40.$in_fmt z50c.skip10.until+30.$in_fmt || die "ERROR: file mismatch for --skip=10 --until=+30 (encode) $desc"
572 rm -f z50c.skip10.until+30.$out_fmt z50c.skip10.until+30.$in_fmt
575 echo -n "testing --skip=10 --until=+mm:ss (encode) $desc... "
576 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"
577 [ $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"
578 $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"
579 rm -f z50c.skip10.until+0:03.$out_fmt z50c.skip10.until+0:03.$in_fmt
582 echo -n "testing --skip=10 --until=+mm:ss.sss (encode) $desc... "
583 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"
584 [ $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"
585 $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"
586 rm -f z50c.skip10.until+0:02.9001.$out_fmt z50c.skip10.until+0:02.9001.$in_fmt
589 echo -n "testing --skip=10 --until=-# (encode) $desc... "
590 run_flac $eopt --skip=10 --until=-10 -o z50c.skip10.until-10.$out_fmt 50c.$in_fmt || die "ERROR generating FLAC file $desc"
591 [ $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"
592 $CMP 50c.skip10.until40.$in_fmt z50c.skip10.until-10.$in_fmt || die "ERROR: file mismatch for --skip=10 --until=-10 (encode) $desc"
593 rm -f z50c.skip10.until-10.$out_fmt z50c.skip10.until-10.$in_fmt
596 echo -n "testing --skip=10 --until=-mm:ss (encode) $desc... "
597 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"
598 [ $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"
599 $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"
600 rm -f z50c.skip10.until-0:01.$out_fmt z50c.skip10.until-0:01.$in_fmt
603 echo -n "testing --skip=10 --until=-mm:ss.sss (encode) $desc... "
604 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"
605 [ $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"
606 $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"
607 rm -f z50c.skip10.until-0:01.1001.$out_fmt z50c.skip10.until-0:01.1001.$in_fmt
611 # test --skip and --until when decoding
614 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"
617 echo -n "testing --skip=10 --until=# (decode) $desc... "
618 run_flac $dopt --skip=10 --until=40 -o z50c.skip10.until40.$in_fmt z50c.$out_fmt || die "ERROR decoding FLAC file $desc"
619 $CMP 50c.skip10.until40.$in_fmt z50c.skip10.until40.$in_fmt || die "ERROR: file mismatch for --skip=10 --until=40 (decode) $desc"
620 rm -f z50c.skip10.until40.$in_fmt
623 echo -n "testing --skip=10 --until=mm:ss (decode) $desc... "
624 run_flac $dopt --skip=10 --until=0:04 -o z50c.skip10.until0:04.$in_fmt z50c.$out_fmt || die "ERROR decoding FLAC file $desc"
625 $CMP 50c.skip10.until40.$in_fmt z50c.skip10.until0:04.$in_fmt || die "ERROR: file mismatch for --skip=10 --until=0:04 (decode) $desc"
626 rm -f z50c.skip10.until0:04.$in_fmt
629 echo -n "testing --skip=10 --until=mm:ss.sss (decode) $desc... "
630 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"
631 $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"
632 rm -f z50c.skip10.until0:03.9001.$in_fmt
635 echo -n "testing --skip=10 --until=-# (decode) $desc... "
636 run_flac $dopt --skip=10 --until=-10 -o z50c.skip10.until-10.$in_fmt z50c.$out_fmt || die "ERROR decoding FLAC file $desc"
637 $CMP 50c.skip10.until40.$in_fmt z50c.skip10.until-10.$in_fmt || die "ERROR: file mismatch for --skip=10 --until=-10 (decode) $desc"
638 rm -f z50c.skip10.until-10.$in_fmt
641 echo -n "testing --skip=10 --until=-mm:ss (decode) $desc... "
642 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"
643 $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"
644 rm -f z50c.skip10.until-0:01.$in_fmt
647 echo -n "testing --skip=10 --until=-mm:ss.sss (decode) $desc... "
648 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"
649 $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"
650 rm -f z50c.skip10.until-0:01.1001.$in_fmt
656 test_skip_until raw flac
657 test_skip_until wav flac
658 test_skip_until aiff flac
659 test_skip_until flac flac
660 #@@@if [ $has_ogg = yes ] ; then
661 #@@@ #@@@ doesn't work yet because md5cmp doesn't work because metaflac doesn't work on ogg flac yet
662 #@@@ test_skip_until ogg flac
665 if [ $has_ogg = yes ] ; then
666 test_skip_until raw ogg
667 test_skip_until wav ogg
668 test_skip_until aiff ogg
669 #@@@ doesn't work yet because md5cmp doesn't work because metaflac doesn't work on ogg flac yet
670 #@@@test_skip_until flac ogg
671 #@@@test_skip_until ogg ogg
674 echo "testing seek extremes:"
676 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"
678 if [ $is_win = no ] ; then
679 total_noise_cdda_samples=`run_metaflac --show-total-samples noise.flac`
680 [ $? = 0 ] || die "ERROR getting total sample count from noise.flac"
682 # some flavors of cygwin don't seem to treat the \x0d as a word
683 # separator, so we hard code it. we'll just have to fix it later
684 # if we change the way noise.flac is made.
685 total_noise_cdda_samples=393216
688 echo -n "testing --skip=0... "
689 run_flac $wav_dopt --skip=0 -o z.wav noise.flac || die "ERROR decoding FLAC file noise.flac"
692 for delta in 2 1 ; do
693 n=`expr $total_noise_cdda_samples - $delta`
694 echo -n "testing --skip=$n... "
695 run_flac $wav_dopt --skip=$n -o z.wav noise.flac || die "ERROR decoding FLAC file noise.flac"
702 ############################################################################
704 ############################################################################
706 #@@@ cat will not work on old cygwin, need to fix
707 if [ $is_win = no ] ; then
708 echo -n "testing --input-size=50 --skip=10... "
709 cat 50c.raw | run_flac $raw_eopt --input-size=50 --skip=10 -o z50c.skip10.flac - || die "ERROR generating FLAC file"
710 run_flac $raw_dopt -o z50c.skip10.raw z50c.skip10.flac || die "ERROR decoding FLAC file"
711 cmp 50c.skip10.raw z50c.skip10.raw || die "ERROR: file mismatch for --input-size=50 --skip=10"
712 rm -f z50c.skip10.raw z50c.skip10.flac
717 ############################################################################
719 ############################################################################
722 # create the cue sheet
725 cat > $cuesheet << EOF
726 CATALOG 1234567890123
743 [ "$in_fmt" = wav ] || [ "$in_fmt" = aiff ] || [ "$in_fmt" = raw ] || [ "$in_fmt" = flac ] || [ "$in_fmt" = ogg ] || die "ERROR: internal error, bad 'in' format '$in_fmt'"
745 [ "$out_fmt" = flac ] || [ "$out_fmt" = ogg ] || die "ERROR: internal error, bad 'out' format '$out_fmt'"
747 if [ $in_fmt = raw ] ; then
755 if ( [ $in_fmt = flac ] || [ $in_fmt = ogg ] ) && ( [ $out_fmt = flac ] || [ $out_fmt = ogg ] ) ; then
761 if [ $out_fmt = ogg ] ; then
765 desc="($in_fmt<->$out_fmt)"
768 # for this we need just need just one FLAC file; --cue only works while decoding
770 run_flac $eopt --cuesheet=$cuesheet -o z50c.cue.$out_fmt 50c.$in_fmt || die "ERROR generating FLAC file $desc"
772 # To make it easy to translate from cue point to sample numbers, the
773 # file has a sample rate of 10 Hz and a cuesheet like so:
775 # TRACK 01, INDEX 01 : 0:00.00 -> sample 0
776 # TRACK 01, INDEX 02 : 0:01.00 -> sample 10
777 # TRACK 01, INDEX 03 : 0:02.00 -> sample 20
778 # TRACK 02, INDEX 01 : 0:03.00 -> sample 30
779 # TRACK 04, INDEX 01 : 0:04.00 -> sample 40
781 echo -n "testing --cue=- $desc... "
782 run_flac $dopt -o z50c.cued.$in_fmt --cue=- z50c.cue.$out_fmt || die "ERROR decoding FLAC file $desc"
783 $CMP 50c.$in_fmt z50c.cued.$in_fmt || die "ERROR: file mismatch for --cue=- $desc"
784 rm -f z50c.cued.$in_fmt
787 echo -n "testing --cue=1.0 $desc... "
788 run_flac $dopt -o z50c.cued.$in_fmt --cue=1.0 z50c.cue.$out_fmt || die "ERROR decoding FLAC file $desc"
789 $CMP 50c.$in_fmt z50c.cued.$in_fmt || die "ERROR: file mismatch for --cue=1.0 $desc"
790 rm -f z50c.cued.$in_fmt
793 echo -n "testing --cue=1.0- $desc... "
794 run_flac $dopt -o z50c.cued.$in_fmt --cue=1.0- z50c.cue.$out_fmt || die "ERROR decoding FLAC file $desc"
795 $CMP 50c.$in_fmt z50c.cued.$in_fmt || die "ERROR: file mismatch for --cue=1.0- $desc"
796 rm -f z50c.cued.$in_fmt
799 echo -n "testing --cue=1.1 $desc... "
800 run_flac $dopt -o z50c.cued.$in_fmt --cue=1.1 z50c.cue.$out_fmt || die "ERROR decoding FLAC file $desc"
801 $CMP 50c.$in_fmt z50c.cued.$in_fmt || die "ERROR: file mismatch for --cue=1.1 $desc"
802 rm -f z50c.cued.$in_fmt
805 echo -n "testing --cue=1.1- $desc... "
806 run_flac $dopt -o z50c.cued.$in_fmt --cue=1.1- z50c.cue.$out_fmt || die "ERROR decoding FLAC file $desc"
807 $CMP 50c.$in_fmt z50c.cued.$in_fmt || die "ERROR: file mismatch for --cue=1.1- $desc"
808 rm -f z50c.cued.$in_fmt
811 echo -n "testing --cue=1.2 $desc... "
812 run_flac $dopt -o z50c.cued.$in_fmt --cue=1.2 z50c.cue.$out_fmt || die "ERROR decoding FLAC file $desc"
813 $CMP 50c.skip10.$in_fmt z50c.cued.$in_fmt || die "ERROR: file mismatch for --cue=1.2 $desc"
814 rm -f z50c.cued.$in_fmt
817 echo -n "testing --cue=1.2- $desc... "
818 run_flac $dopt -o z50c.cued.$in_fmt --cue=1.2- z50c.cue.$out_fmt || die "ERROR decoding FLAC file $desc"
819 $CMP 50c.skip10.$in_fmt z50c.cued.$in_fmt || die "ERROR: file mismatch for --cue=1.2- $desc"
820 rm -f z50c.cued.$in_fmt
823 echo -n "testing --cue=1.4 $desc... "
824 run_flac $dopt -o z50c.cued.$in_fmt --cue=1.4 z50c.cue.$out_fmt || die "ERROR decoding FLAC file $desc"
825 $CMP 50c.skip20.$in_fmt z50c.cued.$in_fmt || die "ERROR: file mismatch for --cue=1.4 $desc"
826 rm -f z50c.cued.$in_fmt
829 echo -n "testing --cue=1.4- $desc... "
830 run_flac $dopt -o z50c.cued.$in_fmt --cue=1.4- z50c.cue.$out_fmt || die "ERROR decoding FLAC file $desc"
831 $CMP 50c.skip20.$in_fmt z50c.cued.$in_fmt || die "ERROR: file mismatch for --cue=1.4- $desc"
832 rm -f z50c.cued.$in_fmt
835 echo -n "testing --cue=-5.0 $desc... "
836 run_flac $dopt -o z50c.cued.$in_fmt --cue=-5.0 z50c.cue.$out_fmt || die "ERROR decoding FLAC file $desc"
837 $CMP 50c.$in_fmt z50c.cued.$in_fmt || die "ERROR: file mismatch for --cue=-5.0 $desc"
838 rm -f z50c.cued.$in_fmt
841 echo -n "testing --cue=-4.1 $desc... "
842 run_flac $dopt -o z50c.cued.$in_fmt --cue=-4.1 z50c.cue.$out_fmt || die "ERROR decoding FLAC file $desc"
843 $CMP 50c.until40.$in_fmt z50c.cued.$in_fmt || die "ERROR: file mismatch for --cue=-4.1 $desc"
844 rm -f z50c.cued.$in_fmt
847 echo -n "testing --cue=-3.1 $desc... "
848 run_flac $dopt -o z50c.cued.$in_fmt --cue=-3.1 z50c.cue.$out_fmt || die "ERROR decoding FLAC file $desc"
849 $CMP 50c.until40.$in_fmt z50c.cued.$in_fmt || die "ERROR: file mismatch for --cue=-3.1 $desc"
850 rm -f z50c.cued.$in_fmt
853 echo -n "testing --cue=-1.4 $desc... "
854 run_flac $dopt -o z50c.cued.$in_fmt --cue=-1.4 z50c.cue.$out_fmt || die "ERROR decoding FLAC file $desc"
855 $CMP 50c.until30.$in_fmt z50c.cued.$in_fmt || die "ERROR: file mismatch for --cue=-1.4 $desc"
856 rm -f z50c.cued.$in_fmt
859 echo -n "testing --cue=1.0-5.0 $desc... "
860 run_flac $dopt -o z50c.cued.$in_fmt --cue=1.0-5.0 z50c.cue.$out_fmt || die "ERROR decoding FLAC file $desc"
861 $CMP 50c.$in_fmt z50c.cued.$in_fmt || die "ERROR: file mismatch for --cue=1.0-5.0 $desc"
862 rm -f z50c.cued.$in_fmt
865 echo -n "testing --cue=1.1-5.0 $desc... "
866 run_flac $dopt -o z50c.cued.$in_fmt --cue=1.1-5.0 z50c.cue.$out_fmt || die "ERROR decoding FLAC file $desc"
867 $CMP 50c.$in_fmt z50c.cued.$in_fmt || die "ERROR: file mismatch for --cue=1.1-5.0 $desc"
868 rm -f z50c.cued.$in_fmt
871 echo -n "testing --cue=1.2-4.1 $desc... "
872 run_flac $dopt -o z50c.cued.$in_fmt --cue=1.2-4.1 z50c.cue.$out_fmt || die "ERROR decoding FLAC file $desc"
873 $CMP 50c.skip10.until40.$in_fmt z50c.cued.$in_fmt || die "ERROR: file mismatch for --cue=1.2-4.1 $desc"
874 rm -f z50c.cued.$in_fmt
877 echo -n "testing --cue=1.4-2.0 $desc... "
878 run_flac $dopt -o z50c.cued.$in_fmt --cue=1.4-2.0 z50c.cue.$out_fmt || die "ERROR decoding FLAC file $desc"
879 $CMP 50c.skip20.until30.$in_fmt z50c.cued.$in_fmt || die "ERROR: file mismatch for --cue=1.4-2.0 $desc"
880 rm -f z50c.cued.$in_fmt
883 rm -f z50c.cue.$out_fmt
890 #@@@if [ $has_ogg = yes ] ; then
891 #@@@ #@@@ doesn't work yet because md5cmp doesn't work because metaflac doesn't work on ogg flac yet
892 #@@@ test_cue ogg flac
895 if [ $has_ogg = yes ] ; then
899 #@@@ doesn't work yet because md5cmp doesn't work because metaflac doesn't work on ogg flac yet
900 #@@@test_cue flac ogg
904 ############################################################################
905 # test 'fixup' code that happens when a FLAC file with total_samples == 0
906 # in the STREAMINFO block is converted to WAVE or AIFF, requiring the
907 # decoder go back and fix up the chunk headers
908 ############################################################################
910 echo -n "WAVE fixup test... "
912 echo -n "prepare... "
913 convert_to_wav noise "$raw_eopt" "$wav_dopt" || die "ERROR creating reference WAVE"
916 # the pipe from 'cat' to 'flac' does not work on cygwin because of the EOF/
917 # binary-mode stdin problem, so we use an undocumented option to metaflac to
918 # set the total sample count to 0
919 if [ $is_win = yes ] ; then
920 run_flac $raw_eopt noise.raw -o fixup.flac || die "ERROR generating FLAC file"
921 run_metaflac --set-total-samples=0 fixup.flac 2> /dev/null
923 cat noise.raw | run_flac $raw_eopt - -c > fixup.flac || die "ERROR generating FLAC file"
927 run_flac $wav_dopt fixup.flac -o fixup.wav || die "ERROR decoding FLAC file"
929 echo -n "compare... "
930 cmp noise.wav fixup.wav || die "ERROR: file mismatch"
933 rm -f noise.wav fixup.wav fixup.flac
935 echo -n "AIFF fixup test... "
937 echo -n "prepare... "
938 convert_to_aiff noise "$raw_eopt" "$wav_dopt" || die "ERROR creating reference AIFF"
941 # the pipe from 'cat' to 'flac' does not work on cygwin because of the EOF/
942 # binary-mode stdin problem, so we use an undocumented option to metaflac to
943 # set the total sample count to 0
944 if [ $is_win = yes ] ; then
945 run_flac $raw_eopt noise.raw -o fixup.flac || die "ERROR generating FLAC file"
946 run_metaflac --set-total-samples=0 fixup.flac 2> /dev/null
948 cat noise.raw | run_flac $raw_eopt - -c > fixup.flac || die "ERROR generating FLAC file"
952 run_flac $wav_dopt fixup.flac -o fixup.aiff || die "ERROR decoding FLAC file"
954 echo -n "compare... "
955 cmp noise.aiff fixup.aiff || die "ERROR: file mismatch"
958 rm -f noise.aiff fixup.aiff fixup.flac
961 ############################################################################
963 ############################################################################
965 echo "Generating multiple input files from noise..."
966 multifile_format_decode="--endian=big --sign=signed"
967 multifile_format_encode="$multifile_format_decode --sample-rate=44100 --bps=16 --channels=2 --no-padding"
968 short_noise_cdda_samples=`expr $total_noise_cdda_samples / 8`
969 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"
970 run_flac --decode --force $SILENT shortnoise.flac -o shortnoise.raw --force-raw-format $multifile_format_decode || die "ERROR generating RAW file"
971 run_flac --decode --force $SILENT shortnoise.flac || die "ERROR generating WAVE file"
972 run_flac --decode --force $SILENT shortnoise.flac -o shortnoise.aiff || die "ERROR generating AIFF file"
973 cp shortnoise.flac file0.flac
974 cp shortnoise.flac file1.flac
975 cp shortnoise.flac file2.flac
976 rm -f shortnoise.flac
977 cp shortnoise.wav file0.wav
978 cp shortnoise.wav file1.wav
979 cp shortnoise.wav file2.wav
981 cp shortnoise.aiff file0.aiff
982 cp shortnoise.aiff file1.aiff
983 cp shortnoise.aiff file2.aiff
984 rm -f shortnoise.aiff
985 cp shortnoise.raw file0.raw
986 cp shortnoise.raw file1.raw
987 cp shortnoise.raw file2.raw
989 # create authoritative sector-aligned files for comparison
990 file0_samples=`expr \( $short_noise_cdda_samples / 588 \) \* 588`
991 file0_remainder=`expr $short_noise_cdda_samples - $file0_samples`
992 file1_samples=`expr \( \( $file0_remainder + $short_noise_cdda_samples \) / 588 \) \* 588`
993 file1_remainder=`expr $file0_remainder + $short_noise_cdda_samples - $file1_samples`
994 file1_samples=`expr $file1_samples - $file0_remainder`
995 file2_samples=`expr \( \( $file1_remainder + $short_noise_cdda_samples \) / 588 \) \* 588`
996 file2_remainder=`expr $file1_remainder + $short_noise_cdda_samples - $file2_samples`
997 file2_samples=`expr $file2_samples - $file1_remainder`
998 if [ $file2_remainder != '0' ] ; then
999 file2_samples=`expr $file2_samples + $file2_remainder`
1000 file2_remainder=`expr 588 - $file2_remainder`
1003 dd if=file0.raw ibs=4 count=$file0_samples of=file0s.raw 2>/dev/null || $dddie
1004 dd if=file0.raw ibs=4 count=$file0_remainder of=file1s.raw skip=$file0_samples 2>/dev/null || $dddie
1005 dd if=file1.raw ibs=4 count=$file1_samples of=z.raw 2>/dev/null || $dddie
1006 cat z.raw >> file1s.raw || die "ERROR: cat-ing sector-aligned files"
1007 dd if=file1.raw ibs=4 count=$file1_remainder of=file2s.raw skip=$file1_samples 2>/dev/null || $dddie
1008 dd if=file2.raw ibs=4 count=$file2_samples of=z.raw 2>/dev/null || $dddie
1009 cat z.raw >> file2s.raw || die "ERROR: cat-ing sector-aligned files"
1010 dd if=/dev/zero ibs=4 count=$file2_remainder of=z.raw 2>/dev/null || $dddie
1011 cat z.raw >> file2s.raw || die "ERROR: cat-ing sector-aligned files"
1014 convert_to_wav file0s "$multifile_format_encode --force" "$SILENT --force --decode" || die "ERROR creating authoritative sector-aligned WAVE"
1015 convert_to_wav file1s "$multifile_format_encode --force" "$SILENT --force --decode" || die "ERROR creating authoritative sector-aligned WAVE"
1016 convert_to_wav file2s "$multifile_format_encode --force" "$SILENT --force --decode" || die "ERROR creating authoritative sector-aligned WAVE"
1018 convert_to_aiff file0s "$multifile_format_encode --force" "$SILENT --force --decode" || die "ERROR creating authoritative sector-aligned AIFF"
1019 convert_to_aiff file1s "$multifile_format_encode --force" "$SILENT --force --decode" || die "ERROR creating authoritative sector-aligned AIFF"
1020 convert_to_aiff file2s "$multifile_format_encode --force" "$SILENT --force --decode" || die "ERROR creating authoritative sector-aligned AIFF"
1029 extra_encode_options=""
1030 extra_decode_options=""
1031 if [ $input_type = "raw" ] ; then
1032 extra_encode_options="--force-raw-format $multifile_format_encode"
1033 extra_decode_options="--force-raw-format $multifile_format_decode"
1035 if [ $input_type = "aiff" ] ; then
1036 extra_decode_options="--force-aiff-format"
1040 if [ $streamtype = ogg ] ; then
1042 encode_options="$encode_options --ogg"
1047 if [ $sector_align = sector_align ] ; then
1048 encode_options="$encode_options --sector-align"
1051 if [ $input_type = flac ] || [ $input_type = ogg ] ; then
1058 cp file$n.$input_type file${n}x.$input_type
1060 run_flac --force $encode_options $extra_encode_options file0x.$input_type file1x.$input_type file2x.$input_type || die "ERROR"
1061 run_flac --force --decode $extra_decode_options file0x.$suffix file1x.$suffix file2x.$suffix || die "ERROR"
1062 if [ $sector_align != sector_align ] ; then
1064 $CMP file$n.$input_type file${n}x.$input_type || die "ERROR: file mismatch on file #$n"
1068 $CMP file${n}s.$input_type file${n}x.$input_type || die "ERROR: file mismatch on file #$n"
1072 rm -f file${n}x.$suffix file${n}x.$input_type
1076 input_types="raw wav aiff flac"
1077 #@@@ doesn't work yet because md5cmp doesn't work because metaflac doesn't work on ogg flac yet
1078 #@@@if [ $has_ogg = yes ] ; then
1079 #@@@ input_types="$input_types ogg"
1081 for input_type in $input_types ; do
1082 echo "Testing multiple $input_type files without verify..."
1083 test_multifile $input_type flac no_sector_align ""
1085 echo "Testing multiple $input_type files with verify..."
1086 test_multifile $input_type flac no_sector_align "--verify"
1088 if [ $input_type != flac ] && [ $input_type != ogg ] ; then # --sector-align not supported for FLAC input
1089 echo "Testing multiple $input_type files with --sector-align, without verify..."
1090 test_multifile $input_type flac sector_align ""
1092 echo "Testing multiple $input_type files with --sector-align, with verify..."
1093 test_multifile $input_type flac sector_align "--verify"
1096 if [ $has_ogg = yes ] ; then
1097 echo "Testing multiple $input_type files with --ogg, without verify..."
1098 test_multifile $input_type ogg no_sector_align ""
1100 echo "Testing multiple $input_type files with --ogg, with verify..."
1101 test_multifile $input_type ogg no_sector_align "--verify"
1103 if [ $input_type != flac ] ; then # --sector-align not supported for FLAC input
1104 echo "Testing multiple $input_type files with --ogg and --sector-align, without verify..."
1105 test_multifile $input_type ogg sector_align ""
1107 echo "Testing multiple $input_type files with --ogg and --sector-align, with verify..."
1108 test_multifile $input_type ogg sector_align "--verify"
1111 echo "Testing multiple $input_type files with --ogg and --serial-number, with verify..."
1112 test_multifile $input_type ogg no_sector_align "--serial-number=321 --verify"
1117 ############################################################################
1118 # test the metadata-handling properties of flac-to-flac encoding
1119 ############################################################################
1121 echo "Testing the metadata-handling properties of flac-to-flac encoding..."
1123 testdir="flac-to-flac-metadata-test-files"
1126 # minor danger, changing vendor strings will change the length of the
1127 # VORBIS_COMMENT block, but if we add "^ length: " to the patterns,
1128 # we lose info about PADDING size that we need
1129 grep -Ev '^ vendor string: |^ m..imum .....size: ' | sed -e 's/, stream_offset.*//'
1136 expect="$case-expect.meta"
1138 run_flac $SILENT -f -o out.flac $args $file || die "ERROR encoding FLAC file"
1139 run_metaflac --list out.flac | filter > out.meta || die "ERROR listing metadata of output FLAC file"
1140 diff -q -w $expect out.meta 2>/dev/null || die "ERROR: metadata does not match expected $expect"
1144 #filter=', stream_offset.*|^ vendor string: |^ length: |^ m..imum .....size: '
1145 cd $testdir || die "ERROR changing to directory $testdir"
1147 # case 00a: no alterations on a file with all metadata types, keep all metadata, in same order
1148 flac2flac input-SCVAUP.flac case00a ""
1149 # case 01a: on file with multiple PADDING blocks, they should be aggregated into one at the end
1150 flac2flac input-SCVPAP.flac case01a ""
1151 # case 01b: on file with multiple PADDING blocks and --no-padding specified, they should all be deleted
1152 flac2flac input-SCVPAP.flac case01b "--no-padding"
1153 # case 01c: on file with multiple PADDING blocks and -P specified, they should all be overwritten with -P value
1154 flac2flac input-SCVPAP.flac case01c "-P 1234"
1155 # case 01d: on file with no PADDING blocks, use -P setting
1156 flac2flac input-SCVA.flac case01d "-P 1234"
1157 # case 01e: on file with no PADDING blocks and no -P given, use default padding
1158 flac2flac input-SCVA.flac case01e ""
1159 # case 02a: on file with no VORBIS_COMMENT block, add new VORBIS_COMMENT
1160 flac2flac input-SCPAP.flac case02a ""
1161 # case 02b: on file with no VORBIS_COMMENT block and --tag, add new VORBIS_COMMENT with tags
1162 flac2flac input-SCPAP.flac case02b "--tag=artist=0"
1163 # case 02c: on file with VORBIS_COMMENT block and --tag, replace existing VORBIS_COMMENT with new tags
1164 flac2flac input-SCVAUP.flac case02c "$TOTALLY_SILENT --tag=artist=0"
1165 # case 03a: on file with no CUESHEET block and --cuesheet specified, add it
1166 flac2flac input-SVAUP.flac case03a "--cuesheet=input0.cue"
1167 # case 03b: on file with CUESHEET block and --cuesheet specified, overwrite existing CUESHEET
1168 flac2flac input-SCVAUP.flac case03b "$TOTALLY_SILENT --cuesheet=input0.cue"
1169 # case 03c: on file with CUESHEET block and size-changing option specified, drop existing CUESHEET
1170 flac2flac input-SCVAUP.flac case03c "$TOTALLY_SILENT --skip=1"
1171 # case 04a: on file with no SEEKTABLE block and --no-seektable specified, no SEEKTABLE
1172 flac2flac input-VA.flac case04a "--no-padding --no-seektable"
1173 # case 04b: on file with no SEEKTABLE block and -S specified, new SEEKTABLE
1174 flac2flac input-VA.flac case04b "--no-padding -S 5x"
1175 # case 04c: on file with no SEEKTABLE block and no seektable options specified, new SEEKTABLE with default points
1176 flac2flac input-VA.flac case04c "--no-padding"
1177 # case 04d: on file with SEEKTABLE block and --no-seektable specified, drop existing SEEKTABLE
1178 flac2flac input-SCVA.flac case04d "--no-padding --no-seektable"
1179 # case 04e: on file with SEEKTABLE block and -S specified, overwrite existing SEEKTABLE
1180 flac2flac input-SCVA.flac case04e "$TOTALLY_SILENT --no-padding -S 5x"
1181 # case 04f: on file with SEEKTABLE block and size-changing option specified, drop existing SEEKTABLE, new SEEKTABLE with default points
1182 #(already covered by case03c)
1184 rm -f out.flac out.meta
1186 #@@@ when metaflac handles ogg flac, duplicate flac2flac tests here