annotate src/flac-1.2.1/test/test_flac.sh @ 169:223a55898ab9 tip default

Add null config files
author Chris Cannam <cannam@all-day-breakfast.com>
date Mon, 02 Mar 2020 14:03:47 +0000
parents 98c1576536ae
children
rev   line source
cannam@86 1 #!/bin/sh
cannam@86 2
cannam@86 3 # FLAC - Free Lossless Audio Codec
cannam@86 4 # Copyright (C) 2001,2002,2003,2004,2005,2006,2007 Josh Coalson
cannam@86 5 #
cannam@86 6 # This file is part the FLAC project. FLAC is comprised of several
cannam@86 7 # components distributed under difference licenses. The codec libraries
cannam@86 8 # are distributed under Xiph.Org's BSD-like license (see the file
cannam@86 9 # COPYING.Xiph in this distribution). All other programs, libraries, and
cannam@86 10 # plugins are distributed under the GPL (see COPYING.GPL). The documentation
cannam@86 11 # is distributed under the Gnu FDL (see COPYING.FDL). Each file in the
cannam@86 12 # FLAC distribution contains at the top the terms under which it may be
cannam@86 13 # distributed.
cannam@86 14 #
cannam@86 15 # Since this particular file is relevant to all components of FLAC,
cannam@86 16 # it may be distributed under the Xiph.Org license, which is the least
cannam@86 17 # restrictive of those mentioned above. See the file COPYING.Xiph in this
cannam@86 18 # distribution.
cannam@86 19
cannam@86 20 die ()
cannam@86 21 {
cannam@86 22 echo $* 1>&2
cannam@86 23 exit 1
cannam@86 24 }
cannam@86 25
cannam@86 26 dddie="die ERROR: creating files with dd"
cannam@86 27
cannam@86 28 if [ x = x"$1" ] ; then
cannam@86 29 BUILD=debug
cannam@86 30 else
cannam@86 31 BUILD="$1"
cannam@86 32 fi
cannam@86 33
cannam@86 34 # change to 'false' to show flac output (useful for debugging)
cannam@86 35 if true ; then
cannam@86 36 SILENT='--silent'
cannam@86 37 TOTALLY_SILENT='--totally-silent'
cannam@86 38 else
cannam@86 39 SILENT=''
cannam@86 40 TOTALLY_SILENT=''
cannam@86 41 fi
cannam@86 42
cannam@86 43 LD_LIBRARY_PATH=`pwd`/../src/libFLAC/.libs:$LD_LIBRARY_PATH
cannam@86 44 LD_LIBRARY_PATH=`pwd`/../src/share/grabbag/.libs:$LD_LIBRARY_PATH
cannam@86 45 LD_LIBRARY_PATH=`pwd`/../src/share/getopt/.libs:$LD_LIBRARY_PATH
cannam@86 46 LD_LIBRARY_PATH=`pwd`/../src/share/replaygain_analysis/.libs:$LD_LIBRARY_PATH
cannam@86 47 LD_LIBRARY_PATH=`pwd`/../src/share/replaygain_synthesis/.libs:$LD_LIBRARY_PATH
cannam@86 48 LD_LIBRARY_PATH=`pwd`/../src/share/utf8/.libs:$LD_LIBRARY_PATH
cannam@86 49 LD_LIBRARY_PATH=`pwd`/../obj/$BUILD/lib:$LD_LIBRARY_PATH
cannam@86 50 export LD_LIBRARY_PATH
cannam@86 51 PATH=`pwd`/../src/flac:$PATH
cannam@86 52 PATH=`pwd`/../src/metaflac:$PATH
cannam@86 53 PATH=`pwd`/../src/test_streams:$PATH
cannam@86 54 PATH=`pwd`/../obj/$BUILD/bin:$PATH
cannam@86 55
cannam@86 56 flac --help 1>/dev/null 2>/dev/null || die "ERROR can't find flac executable"
cannam@86 57
cannam@86 58 run_flac ()
cannam@86 59 {
cannam@86 60 if [ x"$FLAC__TEST_WITH_VALGRIND" = xyes ] ; then
cannam@86 61 echo "valgrind --leak-check=yes --show-reachable=yes --num-callers=100 flac $*" >>test_flac.valgrind.log
cannam@86 62 valgrind --leak-check=yes --show-reachable=yes --num-callers=100 --log-fd=4 flac $* 4>>test_flac.valgrind.log
cannam@86 63 else
cannam@86 64 flac $*
cannam@86 65 fi
cannam@86 66 }
cannam@86 67
cannam@86 68 run_metaflac ()
cannam@86 69 {
cannam@86 70 if [ x"$FLAC__TEST_WITH_VALGRIND" = xyes ] ; then
cannam@86 71 echo "valgrind --leak-check=yes --show-reachable=yes --num-callers=100 metaflac $*" >>test_flac.valgrind.log
cannam@86 72 valgrind --leak-check=yes --show-reachable=yes --num-callers=100 --log-fd=4 metaflac $* 4>>test_flac.valgrind.log
cannam@86 73 else
cannam@86 74 metaflac $*
cannam@86 75 fi
cannam@86 76 }
cannam@86 77
cannam@86 78 md5cmp ()
cannam@86 79 {
cannam@86 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`
cannam@86 81 n=`( [ -f "$1" ] && [ -f "$2" ] && metaflac --show-md5sum --no-filename "$1" "$2" 2>/dev/null || exit 1 ) | uniq | wc -l`
cannam@86 82 [ "$n" != "" ] && [ $n = 1 ]
cannam@86 83 }
cannam@86 84
cannam@86 85 if [ `env | grep -ic '^comspec='` != 0 ] ; then
cannam@86 86 is_win=yes
cannam@86 87 else
cannam@86 88 is_win=no
cannam@86 89 fi
cannam@86 90
cannam@86 91 echo "Checking for --ogg support in flac..."
cannam@86 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
cannam@86 93 has_ogg=yes;
cannam@86 94 echo "flac --ogg works"
cannam@86 95 else
cannam@86 96 has_ogg=no;
cannam@86 97 echo "flac --ogg doesn't work"
cannam@86 98 fi
cannam@86 99
cannam@86 100 echo "Generating streams..."
cannam@86 101 if [ ! -f wacky1.wav ] ; then
cannam@86 102 test_streams || die "ERROR during test_streams"
cannam@86 103 fi
cannam@86 104
cannam@86 105 ############################################################################
cannam@86 106 # test that flac doesn't automatically overwrite files unless -f is used
cannam@86 107 ############################################################################
cannam@86 108
cannam@86 109 echo "Try encoding to a file that exists; should fail"
cannam@86 110 cp wacky1.wav exist.wav
cannam@86 111 touch exist.flac
cannam@86 112 if run_flac $TOTALLY_SILENT -0 exist.wav ; then
cannam@86 113 die "ERROR: it should have failed but didn't"
cannam@86 114 else
cannam@86 115 echo "OK, it failed as it should"
cannam@86 116 fi
cannam@86 117
cannam@86 118 echo "Try encoding with -f to a file that exists; should succeed"
cannam@86 119 if run_flac $TOTALLY_SILENT -0 --force exist.wav ; then
cannam@86 120 echo "OK, it succeeded as it should"
cannam@86 121 else
cannam@86 122 die "ERROR: it should have succeeded but didn't"
cannam@86 123 fi
cannam@86 124
cannam@86 125 echo "Try decoding to a file that exists; should fail"
cannam@86 126 if run_flac $TOTALLY_SILENT -d exist.flac ; then
cannam@86 127 die "ERROR: it should have failed but didn't"
cannam@86 128 else
cannam@86 129 echo "OK, it failed as it should"
cannam@86 130 fi
cannam@86 131
cannam@86 132 echo "Try decoding with -f to a file that exists; should succeed"
cannam@86 133 if run_flac $TOTALLY_SILENT -d -f exist.flac ; then
cannam@86 134 echo "OK, it succeeded as it should"
cannam@86 135 else
cannam@86 136 die "ERROR: it should have succeeded but didn't"
cannam@86 137 fi
cannam@86 138
cannam@86 139 rm -f exist.wav exist.flac
cannam@86 140
cannam@86 141 ############################################################################
cannam@86 142 # test fractional block sizes
cannam@86 143 ############################################################################
cannam@86 144
cannam@86 145 test_fractional ()
cannam@86 146 {
cannam@86 147 blocksize=$1
cannam@86 148 samples=$2
cannam@86 149 dd if=noise.raw ibs=4 count=$samples of=pbs.raw 2>/dev/null || $dddie
cannam@86 150 echo -n "fractional block size test (blocksize=$blocksize samples=$samples) encode... "
cannam@86 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"
cannam@86 152 echo -n "decode... "
cannam@86 153 run_flac $SILENT --force --decode --force-raw-format --endian=little --sign=signed -o pbs.cmp pbs.flac || die "ERROR"
cannam@86 154 echo -n "compare... "
cannam@86 155 cmp pbs.raw pbs.cmp || die "ERROR: file mismatch"
cannam@86 156 echo "OK"
cannam@86 157 rm -f pbs.raw pbs.flac pbs.cmp
cannam@86 158 }
cannam@86 159
cannam@86 160 # The special significance of 2048 is it's the # of samples that flac calls
cannam@86 161 # FLAC__stream_encoder_process() on.
cannam@86 162 #
cannam@86 163 # We're trying to make sure the 1-sample overread logic in the stream encoder
cannam@86 164 # (used for last-block checking) works; these values probe around common
cannam@86 165 # multiples of the flac sample chunk size (2048) and the blocksize.
cannam@86 166 for samples in 31 32 33 34 35 2046 2047 2048 2049 2050 ; do
cannam@86 167 test_fractional 33 $samples
cannam@86 168 done
cannam@86 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
cannam@86 170 test_fractional 256 $samples
cannam@86 171 done
cannam@86 172 for samples in 1022 1023 1024 1025 1026 2046 2047 2048 2049 2050 4094 4095 4096 4097 4098 ; do
cannam@86 173 test_fractional 2048 $samples
cannam@86 174 done
cannam@86 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
cannam@86 176 test_fractional 4608 $samples
cannam@86 177 done
cannam@86 178
cannam@86 179 ############################################################################
cannam@86 180 # basic 'round-trip' tests of various kinds of streams
cannam@86 181 ############################################################################
cannam@86 182
cannam@86 183 rt_test_raw ()
cannam@86 184 {
cannam@86 185 f="$1"
cannam@86 186 channels=`echo $f | awk -F- '{print $2}'`
cannam@86 187 bps=`echo $f | awk -F- '{print $3}'`
cannam@86 188 echo -n "round-trip test ($f) encode... "
cannam@86 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"
cannam@86 190 echo -n "decode... "
cannam@86 191 run_flac $SILENT --force --decode --force-raw-format --endian=little --sign=signed -o rt.raw rt.flac || die "ERROR"
cannam@86 192 echo -n "compare... "
cannam@86 193 cmp $f rt.raw || die "ERROR: file mismatch"
cannam@86 194 echo "OK"
cannam@86 195 rm -f rt.flac rt.raw
cannam@86 196 }
cannam@86 197
cannam@86 198 rt_test_wav ()
cannam@86 199 {
cannam@86 200 f="$1"
cannam@86 201 echo -n "round-trip test ($f) encode... "
cannam@86 202 run_flac $SILENT --force --verify --channel-map=none --no-padding --lax -o rt.flac $f || die "ERROR"
cannam@86 203 echo -n "decode... "
cannam@86 204 run_flac $SILENT --force --decode --channel-map=none -o rt.wav rt.flac || die "ERROR"
cannam@86 205 echo -n "compare... "
cannam@86 206 cmp $f rt.wav || die "ERROR: file mismatch"
cannam@86 207 echo "OK"
cannam@86 208 rm -f rt.flac rt.wav
cannam@86 209 }
cannam@86 210
cannam@86 211 rt_test_aiff ()
cannam@86 212 {
cannam@86 213 f="$1"
cannam@86 214 echo -n "round-trip test ($f) encode... "
cannam@86 215 run_flac $SILENT --force --verify --channel-map=none --no-padding --lax -o rt.flac $f || die "ERROR"
cannam@86 216 echo -n "decode... "
cannam@86 217 run_flac $SILENT --force --decode --channel-map=none -o rt.aiff rt.flac || die "ERROR"
cannam@86 218 echo -n "compare... "
cannam@86 219 cmp $f rt.aiff || die "ERROR: file mismatch"
cannam@86 220 echo "OK"
cannam@86 221 rm -f rt.flac rt.aiff
cannam@86 222 }
cannam@86 223
cannam@86 224 # assumes input file is WAVE; does not check the metadata-preserving features of flac-to-flac; that is checked later
cannam@86 225 rt_test_flac ()
cannam@86 226 {
cannam@86 227 f="$1"
cannam@86 228 echo -n "round-trip test ($f->flac->flac->wav) encode... "
cannam@86 229 run_flac $SILENT --force --verify --channel-map=none --no-padding --lax -o rt.flac $f || die "ERROR"
cannam@86 230 echo -n "re-encode... "
cannam@86 231 run_flac $SILENT --force --verify --lax -o rt2.flac rt.flac || die "ERROR"
cannam@86 232 echo -n "decode... "
cannam@86 233 run_flac $SILENT --force --decode --channel-map=none -o rt.wav rt2.flac || die "ERROR"
cannam@86 234 echo -n "compare... "
cannam@86 235 cmp $f rt.wav || die "ERROR: file mismatch"
cannam@86 236 echo "OK"
cannam@86 237 rm -f rt.wav rt.flac rt2.flac
cannam@86 238 }
cannam@86 239
cannam@86 240 # assumes input file is WAVE; does not check the metadata-preserving features of flac-to-flac; that is checked later
cannam@86 241 rt_test_ogg_flac ()
cannam@86 242 {
cannam@86 243 f="$1"
cannam@86 244 echo -n "round-trip test ($f->oggflac->oggflac->wav) encode... "
cannam@86 245 run_flac $SILENT --force --verify --channel-map=none --no-padding --lax -o rt.oga --ogg $f || die "ERROR"
cannam@86 246 echo -n "re-encode... "
cannam@86 247 run_flac $SILENT --force --verify --lax -o rt2.oga --ogg rt.oga || die "ERROR"
cannam@86 248 echo -n "decode... "
cannam@86 249 run_flac $SILENT --force --decode --channel-map=none -o rt.wav rt2.oga || die "ERROR"
cannam@86 250 echo -n "compare... "
cannam@86 251 cmp $f rt.wav || die "ERROR: file mismatch"
cannam@86 252 echo "OK"
cannam@86 253 rm -f rt.wav rt.oga rt2.oga
cannam@86 254 }
cannam@86 255
cannam@86 256 for f in rt-*.raw ; do
cannam@86 257 rt_test_raw $f
cannam@86 258 done
cannam@86 259 for f in rt-*.wav ; do
cannam@86 260 rt_test_wav $f
cannam@86 261 done
cannam@86 262 for f in rt-*.aiff ; do
cannam@86 263 rt_test_aiff $f
cannam@86 264 done
cannam@86 265 for f in rt-*.wav ; do
cannam@86 266 rt_test_flac $f
cannam@86 267 done
cannam@86 268 if [ $has_ogg = yes ] ; then
cannam@86 269 for f in rt-*.wav ; do
cannam@86 270 rt_test_ogg_flac $f
cannam@86 271 done
cannam@86 272 fi
cannam@86 273
cannam@86 274 ############################################################################
cannam@86 275 # test --skip and --until
cannam@86 276 ############################################################################
cannam@86 277
cannam@86 278 #
cannam@86 279 # first make some chopped-up raw files
cannam@86 280 #
cannam@86 281 echo "abcdefghijklmnopqrstuvwxyz1234567890ABCDEFGHIJKLMN" > master.raw
cannam@86 282 dd if=master.raw ibs=1 count=50 of=50c.raw 2>/dev/null || $dddie
cannam@86 283 dd if=master.raw ibs=1 skip=10 count=40 of=50c.skip10.raw 2>/dev/null || $dddie
cannam@86 284 dd if=master.raw ibs=1 skip=11 count=39 of=50c.skip11.raw 2>/dev/null || $dddie
cannam@86 285 dd if=master.raw ibs=1 skip=20 count=30 of=50c.skip20.raw 2>/dev/null || $dddie
cannam@86 286 dd if=master.raw ibs=1 skip=30 count=20 of=50c.skip30.raw 2>/dev/null || $dddie
cannam@86 287 dd if=master.raw ibs=1 skip=40 count=10 of=50c.skip40.raw 2>/dev/null || $dddie
cannam@86 288 dd if=master.raw ibs=1 count=10 of=50c.until10.raw 2>/dev/null || $dddie
cannam@86 289 dd if=master.raw ibs=1 count=20 of=50c.until20.raw 2>/dev/null || $dddie
cannam@86 290 dd if=master.raw ibs=1 count=30 of=50c.until30.raw 2>/dev/null || $dddie
cannam@86 291 dd if=master.raw ibs=1 count=39 of=50c.until39.raw 2>/dev/null || $dddie
cannam@86 292 dd if=master.raw ibs=1 count=40 of=50c.until40.raw 2>/dev/null || $dddie
cannam@86 293 dd if=master.raw ibs=1 skip=10 count=20 of=50c.skip10.until30.raw 2>/dev/null || $dddie
cannam@86 294 dd if=master.raw ibs=1 skip=10 count=29 of=50c.skip10.until39.raw 2>/dev/null || $dddie
cannam@86 295 dd if=master.raw ibs=1 skip=10 count=30 of=50c.skip10.until40.raw 2>/dev/null || $dddie
cannam@86 296 dd if=master.raw ibs=1 skip=20 count=10 of=50c.skip20.until30.raw 2>/dev/null || $dddie
cannam@86 297 dd if=master.raw ibs=1 skip=20 count=20 of=50c.skip20.until40.raw 2>/dev/null || $dddie
cannam@86 298
cannam@86 299 wav_eopt="$SILENT --force --verify --no-padding --lax"
cannam@86 300 wav_dopt="$SILENT --force --decode"
cannam@86 301
cannam@86 302 raw_eopt="$wav_eopt --force-raw-format --endian=big --sign=signed --sample-rate=10 --bps=8 --channels=1"
cannam@86 303 raw_dopt="$wav_dopt --force-raw-format --endian=big --sign=signed"
cannam@86 304
cannam@86 305 #
cannam@86 306 # convert them to WAVE/AIFF/Ogg FLAC files
cannam@86 307 #
cannam@86 308 convert_to_wav ()
cannam@86 309 {
cannam@86 310 run_flac "$2" $1.raw || die "ERROR converting $1.raw to WAVE"
cannam@86 311 run_flac "$3" $1.flac || die "ERROR converting $1.raw to WAVE"
cannam@86 312 }
cannam@86 313 convert_to_wav 50c "$raw_eopt" "$wav_dopt"
cannam@86 314 convert_to_wav 50c.skip10 "$raw_eopt" "$wav_dopt"
cannam@86 315 convert_to_wav 50c.skip11 "$raw_eopt" "$wav_dopt"
cannam@86 316 convert_to_wav 50c.skip20 "$raw_eopt" "$wav_dopt"
cannam@86 317 convert_to_wav 50c.skip30 "$raw_eopt" "$wav_dopt"
cannam@86 318 convert_to_wav 50c.skip40 "$raw_eopt" "$wav_dopt"
cannam@86 319 convert_to_wav 50c.until10 "$raw_eopt" "$wav_dopt"
cannam@86 320 convert_to_wav 50c.until20 "$raw_eopt" "$wav_dopt"
cannam@86 321 convert_to_wav 50c.until30 "$raw_eopt" "$wav_dopt"
cannam@86 322 convert_to_wav 50c.until39 "$raw_eopt" "$wav_dopt"
cannam@86 323 convert_to_wav 50c.until40 "$raw_eopt" "$wav_dopt"
cannam@86 324 convert_to_wav 50c.skip10.until30 "$raw_eopt" "$wav_dopt"
cannam@86 325 convert_to_wav 50c.skip10.until39 "$raw_eopt" "$wav_dopt"
cannam@86 326 convert_to_wav 50c.skip10.until40 "$raw_eopt" "$wav_dopt"
cannam@86 327 convert_to_wav 50c.skip20.until30 "$raw_eopt" "$wav_dopt"
cannam@86 328 convert_to_wav 50c.skip20.until40 "$raw_eopt" "$wav_dopt"
cannam@86 329
cannam@86 330 convert_to_aiff ()
cannam@86 331 {
cannam@86 332 run_flac "$2" $1.raw || die "ERROR converting $1.raw to AIFF"
cannam@86 333 run_flac "$3" $1.flac -o $1.aiff || die "ERROR converting $1.raw to AIFF"
cannam@86 334 }
cannam@86 335 convert_to_aiff 50c "$raw_eopt" "$wav_dopt"
cannam@86 336 convert_to_aiff 50c.skip10 "$raw_eopt" "$wav_dopt"
cannam@86 337 convert_to_aiff 50c.skip11 "$raw_eopt" "$wav_dopt"
cannam@86 338 convert_to_aiff 50c.skip20 "$raw_eopt" "$wav_dopt"
cannam@86 339 convert_to_aiff 50c.skip30 "$raw_eopt" "$wav_dopt"
cannam@86 340 convert_to_aiff 50c.skip40 "$raw_eopt" "$wav_dopt"
cannam@86 341 convert_to_aiff 50c.until10 "$raw_eopt" "$wav_dopt"
cannam@86 342 convert_to_aiff 50c.until20 "$raw_eopt" "$wav_dopt"
cannam@86 343 convert_to_aiff 50c.until30 "$raw_eopt" "$wav_dopt"
cannam@86 344 convert_to_aiff 50c.until39 "$raw_eopt" "$wav_dopt"
cannam@86 345 convert_to_aiff 50c.until40 "$raw_eopt" "$wav_dopt"
cannam@86 346 convert_to_aiff 50c.skip10.until30 "$raw_eopt" "$wav_dopt"
cannam@86 347 convert_to_aiff 50c.skip10.until39 "$raw_eopt" "$wav_dopt"
cannam@86 348 convert_to_aiff 50c.skip10.until40 "$raw_eopt" "$wav_dopt"
cannam@86 349 convert_to_aiff 50c.skip20.until30 "$raw_eopt" "$wav_dopt"
cannam@86 350 convert_to_aiff 50c.skip20.until40 "$raw_eopt" "$wav_dopt"
cannam@86 351
cannam@86 352 convert_to_ogg ()
cannam@86 353 {
cannam@86 354 run_flac "$wav_eopt" --ogg $1.wav || die "ERROR converting $1.raw to Ogg FLAC"
cannam@86 355 }
cannam@86 356 if [ $has_ogg = yes ] ; then
cannam@86 357 convert_to_ogg 50c
cannam@86 358 convert_to_ogg 50c.skip10
cannam@86 359 convert_to_ogg 50c.skip11
cannam@86 360 convert_to_ogg 50c.skip20
cannam@86 361 convert_to_ogg 50c.skip30
cannam@86 362 convert_to_ogg 50c.skip40
cannam@86 363 convert_to_ogg 50c.until10
cannam@86 364 convert_to_ogg 50c.until20
cannam@86 365 convert_to_ogg 50c.until30
cannam@86 366 convert_to_ogg 50c.until39
cannam@86 367 convert_to_ogg 50c.until40
cannam@86 368 convert_to_ogg 50c.skip10.until30
cannam@86 369 convert_to_ogg 50c.skip10.until39
cannam@86 370 convert_to_ogg 50c.skip10.until40
cannam@86 371 convert_to_ogg 50c.skip20.until30
cannam@86 372 convert_to_ogg 50c.skip20.until40
cannam@86 373 fi
cannam@86 374
cannam@86 375 test_skip_until ()
cannam@86 376 {
cannam@86 377 in_fmt=$1
cannam@86 378 out_fmt=$2
cannam@86 379
cannam@86 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'"
cannam@86 381
cannam@86 382 [ "$out_fmt" = flac ] || [ "$out_fmt" = ogg ] || die "ERROR: internal error, bad 'out' format '$out_fmt'"
cannam@86 383
cannam@86 384 if [ $in_fmt = raw ] ; then
cannam@86 385 eopt="$raw_eopt"
cannam@86 386 dopt="$raw_dopt"
cannam@86 387 else
cannam@86 388 eopt="$wav_eopt"
cannam@86 389 dopt="$wav_dopt"
cannam@86 390 fi
cannam@86 391
cannam@86 392 if ( [ $in_fmt = flac ] || [ $in_fmt = ogg ] ) && ( [ $out_fmt = flac ] || [ $out_fmt = ogg ] ) ; then
cannam@86 393 CMP=md5cmp
cannam@86 394 else
cannam@86 395 CMP=cmp
cannam@86 396 fi
cannam@86 397
cannam@86 398 if [ $out_fmt = ogg ] ; then
cannam@86 399 eopt="--ogg $eopt"
cannam@86 400 fi
cannam@86 401
cannam@86 402 #
cannam@86 403 # test --skip when encoding
cannam@86 404 #
cannam@86 405
cannam@86 406 desc="($in_fmt<->$out_fmt)"
cannam@86 407
cannam@86 408 echo -n "testing --skip=# (encode) $desc... "
cannam@86 409 run_flac $eopt --skip=10 -o z50c.skip10.$out_fmt 50c.$in_fmt || die "ERROR generating FLAC file $desc"
cannam@86 410 [ $in_fmt = $out_fmt ] || run_flac $dopt -o z50c.skip10.$in_fmt z50c.skip10.$out_fmt || die "ERROR decoding FLAC file $desc"
cannam@86 411 $CMP 50c.skip10.$in_fmt z50c.skip10.$in_fmt || die "ERROR: file mismatch for --skip=10 (encode) $desc"
cannam@86 412 rm -f z50c.skip10.$out_fmt z50c.skip10.$in_fmt
cannam@86 413 echo OK
cannam@86 414
cannam@86 415 echo -n "testing --skip=mm:ss (encode) $desc... "
cannam@86 416 run_flac $eopt --skip=0:01 -o z50c.skip0:01.$out_fmt 50c.$in_fmt || die "ERROR generating FLAC file $desc"
cannam@86 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"
cannam@86 418 $CMP 50c.skip10.$in_fmt z50c.skip0:01.$in_fmt || die "ERROR: file mismatch for --skip=0:01 (encode) $desc"
cannam@86 419 rm -f z50c.skip0:01.$out_fmt z50c.skip0:01.$in_fmt
cannam@86 420 echo OK
cannam@86 421
cannam@86 422 echo -n "testing --skip=mm:ss.sss (encode) $desc... "
cannam@86 423 run_flac $eopt --skip=0:01.1001 -o z50c.skip0:01.1001.$out_fmt 50c.$in_fmt || die "ERROR generating FLAC file $desc"
cannam@86 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"
cannam@86 425 $CMP 50c.skip11.$in_fmt z50c.skip0:01.1001.$in_fmt || die "ERROR: file mismatch for --skip=0:01.1001 (encode) $desc"
cannam@86 426 rm -f z50c.skip0:01.1001.$out_fmt z50c.skip0:01.1001.$in_fmt
cannam@86 427 echo OK
cannam@86 428
cannam@86 429 #
cannam@86 430 # test --skip when decoding
cannam@86 431 #
cannam@86 432
cannam@86 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"
cannam@86 434
cannam@86 435 echo -n "testing --skip=# (decode) $desc... "
cannam@86 436 run_flac $dopt --skip=10 -o z50c.skip10.$in_fmt z50c.$out_fmt || die "ERROR decoding FLAC file $desc"
cannam@86 437 $CMP 50c.skip10.$in_fmt z50c.skip10.$in_fmt || die "ERROR: file mismatch for --skip=10 (decode) $desc"
cannam@86 438 rm -f z50c.skip10.$in_fmt
cannam@86 439 echo OK
cannam@86 440
cannam@86 441 echo -n "testing --skip=mm:ss (decode) $desc... "
cannam@86 442 run_flac $dopt --skip=0:01 -o z50c.skip0:01.$in_fmt z50c.$out_fmt || die "ERROR decoding FLAC file $desc"
cannam@86 443 $CMP 50c.skip10.$in_fmt z50c.skip0:01.$in_fmt || die "ERROR: file mismatch for --skip=0:01 (decode) $desc"
cannam@86 444 rm -f z50c.skip0:01.$in_fmt
cannam@86 445 echo OK
cannam@86 446
cannam@86 447 echo -n "testing --skip=mm:ss.sss (decode) $desc... "
cannam@86 448 run_flac $dopt --skip=0:01.1001 -o z50c.skip0:01.1001.$in_fmt z50c.$out_fmt || die "ERROR decoding FLAC file $desc"
cannam@86 449 $CMP 50c.skip11.$in_fmt z50c.skip0:01.1001.$in_fmt || die "ERROR: file mismatch for --skip=0:01.1001 (decode) $desc"
cannam@86 450 rm -f z50c.skip0:01.1001.$in_fmt
cannam@86 451 echo OK
cannam@86 452
cannam@86 453 rm -f z50c.$out_fmt
cannam@86 454
cannam@86 455 #
cannam@86 456 # test --until when encoding
cannam@86 457 #
cannam@86 458
cannam@86 459 echo -n "testing --until=# (encode) $desc... "
cannam@86 460 run_flac $eopt --until=40 -o z50c.until40.$out_fmt 50c.$in_fmt || die "ERROR generating FLAC file $desc"
cannam@86 461 [ $in_fmt = $out_fmt ] || run_flac $dopt -o z50c.until40.$in_fmt z50c.until40.$out_fmt || die "ERROR decoding FLAC file $desc"
cannam@86 462 $CMP 50c.until40.$in_fmt z50c.until40.$in_fmt || die "ERROR: file mismatch for --until=40 (encode) $desc"
cannam@86 463 rm -f z50c.until40.$out_fmt z50c.until40.$in_fmt
cannam@86 464 echo OK
cannam@86 465
cannam@86 466 echo -n "testing --until=mm:ss (encode) $desc... "
cannam@86 467 run_flac $eopt --until=0:04 -o z50c.until0:04.$out_fmt 50c.$in_fmt || die "ERROR generating FLAC file $desc"
cannam@86 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"
cannam@86 469 $CMP 50c.until40.$in_fmt z50c.until0:04.$in_fmt || die "ERROR: file mismatch for --until=0:04 (encode) $desc"
cannam@86 470 rm -f z50c.until0:04.$out_fmt z50c.until0:04.$in_fmt
cannam@86 471 echo OK
cannam@86 472
cannam@86 473 echo -n "testing --until=mm:ss.sss (encode) $desc... "
cannam@86 474 run_flac $eopt --until=0:03.9001 -o z50c.until0:03.9001.$out_fmt 50c.$in_fmt || die "ERROR generating FLAC file $desc"
cannam@86 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"
cannam@86 476 $CMP 50c.until39.$in_fmt z50c.until0:03.9001.$in_fmt || die "ERROR: file mismatch for --until=0:03.9001 (encode) $desc"
cannam@86 477 rm -f z50c.until0:03.9001.$out_fmt z50c.until0:03.9001.$in_fmt
cannam@86 478 echo OK
cannam@86 479
cannam@86 480 echo -n "testing --until=-# (encode) $desc... "
cannam@86 481 run_flac $eopt --until=-10 -o z50c.until-10.$out_fmt 50c.$in_fmt || die "ERROR generating FLAC file $desc"
cannam@86 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"
cannam@86 483 $CMP 50c.until40.$in_fmt z50c.until-10.$in_fmt || die "ERROR: file mismatch for --until=-10 (encode) $desc"
cannam@86 484 rm -f z50c.until-10.$out_fmt z50c.until-10.$in_fmt
cannam@86 485 echo OK
cannam@86 486
cannam@86 487 echo -n "testing --until=-mm:ss (encode) $desc... "
cannam@86 488 run_flac $eopt --until=-0:01 -o z50c.until-0:01.$out_fmt 50c.$in_fmt || die "ERROR generating FLAC file $desc"
cannam@86 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"
cannam@86 490 $CMP 50c.until40.$in_fmt z50c.until-0:01.$in_fmt || die "ERROR: file mismatch for --until=-0:01 (encode) $desc"
cannam@86 491 rm -f z50c.until-0:01.$out_fmt z50c.until-0:01.$in_fmt
cannam@86 492 echo OK
cannam@86 493
cannam@86 494 echo -n "testing --until=-mm:ss.sss (encode) $desc... "
cannam@86 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"
cannam@86 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"
cannam@86 497 $CMP 50c.until39.$in_fmt z50c.until-0:01.1001.$in_fmt || die "ERROR: file mismatch for --until=-0:01.1001 (encode) $desc"
cannam@86 498 rm -f z50c.until-0:01.1001.$out_fmt z50c.until-0:01.1001.$in_fmt
cannam@86 499 echo OK
cannam@86 500
cannam@86 501 #
cannam@86 502 # test --until when decoding
cannam@86 503 #
cannam@86 504
cannam@86 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"
cannam@86 506
cannam@86 507 echo -n "testing --until=# (decode) $desc... "
cannam@86 508 run_flac $dopt --until=40 -o z50c.until40.$in_fmt z50c.$out_fmt || die "ERROR decoding FLAC file $desc"
cannam@86 509 $CMP 50c.until40.$in_fmt z50c.until40.$in_fmt || die "ERROR: file mismatch for --until=40 (decode) $desc"
cannam@86 510 rm -f z50c.until40.$in_fmt
cannam@86 511 echo OK
cannam@86 512
cannam@86 513 echo -n "testing --until=mm:ss (decode) $desc... "
cannam@86 514 run_flac $dopt --until=0:04 -o z50c.until0:04.$in_fmt z50c.$out_fmt || die "ERROR decoding FLAC file $desc"
cannam@86 515 $CMP 50c.until40.$in_fmt z50c.until0:04.$in_fmt || die "ERROR: file mismatch for --until=0:04 (decode) $desc"
cannam@86 516 rm -f z50c.until0:04.$in_fmt
cannam@86 517 echo OK
cannam@86 518
cannam@86 519 echo -n "testing --until=mm:ss.sss (decode) $desc... "
cannam@86 520 run_flac $dopt --until=0:03.9001 -o z50c.until0:03.9001.$in_fmt z50c.$out_fmt || die "ERROR decoding FLAC file $desc"
cannam@86 521 $CMP 50c.until39.$in_fmt z50c.until0:03.9001.$in_fmt || die "ERROR: file mismatch for --until=0:03.9001 (decode) $desc"
cannam@86 522 rm -f z50c.until0:03.9001.$in_fmt
cannam@86 523 echo OK
cannam@86 524
cannam@86 525 echo -n "testing --until=-# (decode) $desc... "
cannam@86 526 run_flac $dopt --until=-10 -o z50c.until-10.$in_fmt z50c.$out_fmt || die "ERROR decoding FLAC file $desc"
cannam@86 527 $CMP 50c.until40.$in_fmt z50c.until-10.$in_fmt || die "ERROR: file mismatch for --until=-10 (decode) $desc"
cannam@86 528 rm -f z50c.until-10.$in_fmt
cannam@86 529 echo OK
cannam@86 530
cannam@86 531 echo -n "testing --until=-mm:ss (decode) $desc... "
cannam@86 532 run_flac $dopt --until=-0:01 -o z50c.until-0:01.$in_fmt z50c.$out_fmt || die "ERROR decoding FLAC file $desc"
cannam@86 533 $CMP 50c.until40.$in_fmt z50c.until-0:01.$in_fmt || die "ERROR: file mismatch for --until=-0:01 (decode) $desc"
cannam@86 534 rm -f z50c.until-0:01.$in_fmt
cannam@86 535 echo OK
cannam@86 536
cannam@86 537 echo -n "testing --until=-mm:ss.sss (decode) $desc... "
cannam@86 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"
cannam@86 539 $CMP 50c.until39.$in_fmt z50c.until-0:01.1001.$in_fmt || die "ERROR: file mismatch for --until=-0:01.1001 (decode) $desc"
cannam@86 540 rm -f z50c.until-0:01.1001.$in_fmt
cannam@86 541 echo OK
cannam@86 542
cannam@86 543 rm -f z50c.$out_fmt
cannam@86 544
cannam@86 545 #
cannam@86 546 # test --skip and --until when encoding
cannam@86 547 #
cannam@86 548
cannam@86 549 echo -n "testing --skip=10 --until=# (encode) $desc... "
cannam@86 550 run_flac $eopt --skip=10 --until=40 -o z50c.skip10.until40.$out_fmt 50c.$in_fmt || die "ERROR generating FLAC file $desc"
cannam@86 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"
cannam@86 552 $CMP 50c.skip10.until40.$in_fmt z50c.skip10.until40.$in_fmt || die "ERROR: file mismatch for --skip=10 --until=40 (encode) $desc"
cannam@86 553 rm -f z50c.skip10.until40.$out_fmt z50c.skip10.until40.$in_fmt
cannam@86 554 echo OK
cannam@86 555
cannam@86 556 echo -n "testing --skip=10 --until=mm:ss (encode) $desc... "
cannam@86 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"
cannam@86 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"
cannam@86 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"
cannam@86 560 rm -f z50c.skip10.until0:04.$out_fmt z50c.skip10.until0:04.$in_fmt
cannam@86 561 echo OK
cannam@86 562
cannam@86 563 echo -n "testing --skip=10 --until=mm:ss.sss (encode) $desc... "
cannam@86 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"
cannam@86 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"
cannam@86 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"
cannam@86 567 rm -f z50c.skip10.until0:03.9001.$out_fmt z50c.skip10.until0:03.9001.$in_fmt
cannam@86 568 echo OK
cannam@86 569
cannam@86 570 echo -n "testing --skip=10 --until=+# (encode) $desc... "
cannam@86 571 run_flac $eopt --skip=10 --until=+30 -o z50c.skip10.until+30.$out_fmt 50c.$in_fmt || die "ERROR generating FLAC file $desc"
cannam@86 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"
cannam@86 573 $CMP 50c.skip10.until40.$in_fmt z50c.skip10.until+30.$in_fmt || die "ERROR: file mismatch for --skip=10 --until=+30 (encode) $desc"
cannam@86 574 rm -f z50c.skip10.until+30.$out_fmt z50c.skip10.until+30.$in_fmt
cannam@86 575 echo OK
cannam@86 576
cannam@86 577 echo -n "testing --skip=10 --until=+mm:ss (encode) $desc... "
cannam@86 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"
cannam@86 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"
cannam@86 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"
cannam@86 581 rm -f z50c.skip10.until+0:03.$out_fmt z50c.skip10.until+0:03.$in_fmt
cannam@86 582 echo OK
cannam@86 583
cannam@86 584 echo -n "testing --skip=10 --until=+mm:ss.sss (encode) $desc... "
cannam@86 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"
cannam@86 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"
cannam@86 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"
cannam@86 588 rm -f z50c.skip10.until+0:02.9001.$out_fmt z50c.skip10.until+0:02.9001.$in_fmt
cannam@86 589 echo OK
cannam@86 590
cannam@86 591 echo -n "testing --skip=10 --until=-# (encode) $desc... "
cannam@86 592 run_flac $eopt --skip=10 --until=-10 -o z50c.skip10.until-10.$out_fmt 50c.$in_fmt || die "ERROR generating FLAC file $desc"
cannam@86 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"
cannam@86 594 $CMP 50c.skip10.until40.$in_fmt z50c.skip10.until-10.$in_fmt || die "ERROR: file mismatch for --skip=10 --until=-10 (encode) $desc"
cannam@86 595 rm -f z50c.skip10.until-10.$out_fmt z50c.skip10.until-10.$in_fmt
cannam@86 596 echo OK
cannam@86 597
cannam@86 598 echo -n "testing --skip=10 --until=-mm:ss (encode) $desc... "
cannam@86 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"
cannam@86 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"
cannam@86 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"
cannam@86 602 rm -f z50c.skip10.until-0:01.$out_fmt z50c.skip10.until-0:01.$in_fmt
cannam@86 603 echo OK
cannam@86 604
cannam@86 605 echo -n "testing --skip=10 --until=-mm:ss.sss (encode) $desc... "
cannam@86 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"
cannam@86 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"
cannam@86 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"
cannam@86 609 rm -f z50c.skip10.until-0:01.1001.$out_fmt z50c.skip10.until-0:01.1001.$in_fmt
cannam@86 610 echo OK
cannam@86 611
cannam@86 612 #
cannam@86 613 # test --skip and --until when decoding
cannam@86 614 #
cannam@86 615
cannam@86 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"
cannam@86 617
cannam@86 618
cannam@86 619 echo -n "testing --skip=10 --until=# (decode) $desc... "
cannam@86 620 run_flac $dopt --skip=10 --until=40 -o z50c.skip10.until40.$in_fmt z50c.$out_fmt || die "ERROR decoding FLAC file $desc"
cannam@86 621 $CMP 50c.skip10.until40.$in_fmt z50c.skip10.until40.$in_fmt || die "ERROR: file mismatch for --skip=10 --until=40 (decode) $desc"
cannam@86 622 rm -f z50c.skip10.until40.$in_fmt
cannam@86 623 echo OK
cannam@86 624
cannam@86 625 echo -n "testing --skip=10 --until=mm:ss (decode) $desc... "
cannam@86 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"
cannam@86 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"
cannam@86 628 rm -f z50c.skip10.until0:04.$in_fmt
cannam@86 629 echo OK
cannam@86 630
cannam@86 631 echo -n "testing --skip=10 --until=mm:ss.sss (decode) $desc... "
cannam@86 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"
cannam@86 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"
cannam@86 634 rm -f z50c.skip10.until0:03.9001.$in_fmt
cannam@86 635 echo OK
cannam@86 636
cannam@86 637 echo -n "testing --skip=10 --until=-# (decode) $desc... "
cannam@86 638 run_flac $dopt --skip=10 --until=-10 -o z50c.skip10.until-10.$in_fmt z50c.$out_fmt || die "ERROR decoding FLAC file $desc"
cannam@86 639 $CMP 50c.skip10.until40.$in_fmt z50c.skip10.until-10.$in_fmt || die "ERROR: file mismatch for --skip=10 --until=-10 (decode) $desc"
cannam@86 640 rm -f z50c.skip10.until-10.$in_fmt
cannam@86 641 echo OK
cannam@86 642
cannam@86 643 echo -n "testing --skip=10 --until=-mm:ss (decode) $desc... "
cannam@86 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"
cannam@86 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"
cannam@86 646 rm -f z50c.skip10.until-0:01.$in_fmt
cannam@86 647 echo OK
cannam@86 648
cannam@86 649 echo -n "testing --skip=10 --until=-mm:ss.sss (decode) $desc... "
cannam@86 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"
cannam@86 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"
cannam@86 652 rm -f z50c.skip10.until-0:01.1001.$in_fmt
cannam@86 653 echo OK
cannam@86 654
cannam@86 655 rm -f z50c.$out_fmt
cannam@86 656 }
cannam@86 657
cannam@86 658 test_skip_until raw flac
cannam@86 659 test_skip_until wav flac
cannam@86 660 test_skip_until aiff flac
cannam@86 661 test_skip_until flac flac
cannam@86 662 #@@@if [ $has_ogg = yes ] ; then
cannam@86 663 #@@@ #@@@ doesn't work yet because md5cmp doesn't work because metaflac doesn't work on ogg flac yet
cannam@86 664 #@@@ test_skip_until ogg flac
cannam@86 665 #@@@fi
cannam@86 666
cannam@86 667 if [ $has_ogg = yes ] ; then
cannam@86 668 test_skip_until raw ogg
cannam@86 669 test_skip_until wav ogg
cannam@86 670 test_skip_until aiff ogg
cannam@86 671 #@@@ doesn't work yet because md5cmp doesn't work because metaflac doesn't work on ogg flac yet
cannam@86 672 #@@@test_skip_until flac ogg
cannam@86 673 #@@@test_skip_until ogg ogg
cannam@86 674 fi
cannam@86 675
cannam@86 676 echo "testing seek extremes:"
cannam@86 677
cannam@86 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"
cannam@86 679
cannam@86 680 if [ $is_win = no ] ; then
cannam@86 681 total_noise_cdda_samples=`run_metaflac --show-total-samples noise.flac`
cannam@86 682 [ $? = 0 ] || die "ERROR getting total sample count from noise.flac"
cannam@86 683 else
cannam@86 684 # some flavors of cygwin don't seem to treat the \x0d as a word
cannam@86 685 # separator, so we hard code it. we'll just have to fix it later
cannam@86 686 # if we change the way noise.flac is made.
cannam@86 687 total_noise_cdda_samples=393216
cannam@86 688 fi
cannam@86 689
cannam@86 690 echo -n "testing --skip=0... "
cannam@86 691 run_flac $wav_dopt --skip=0 -o z.wav noise.flac || die "ERROR decoding FLAC file noise.flac"
cannam@86 692 echo OK
cannam@86 693
cannam@86 694 for delta in 2 1 ; do
cannam@86 695 n=`expr $total_noise_cdda_samples - $delta`
cannam@86 696 echo -n "testing --skip=$n... "
cannam@86 697 run_flac $wav_dopt --skip=$n -o z.wav noise.flac || die "ERROR decoding FLAC file noise.flac"
cannam@86 698 echo OK
cannam@86 699 done
cannam@86 700
cannam@86 701 rm noise.flac z.wav
cannam@86 702
cannam@86 703
cannam@86 704 ############################################################################
cannam@86 705 # test --input-size
cannam@86 706 ############################################################################
cannam@86 707
cannam@86 708 #@@@ cat will not work on old cygwin, need to fix
cannam@86 709 if [ $is_win = no ] ; then
cannam@86 710 echo -n "testing --input-size=50 --skip=10... "
cannam@86 711 cat 50c.raw | run_flac $raw_eopt --input-size=50 --skip=10 -o z50c.skip10.flac - || die "ERROR generating FLAC file"
cannam@86 712 run_flac $raw_dopt -o z50c.skip10.raw z50c.skip10.flac || die "ERROR decoding FLAC file"
cannam@86 713 cmp 50c.skip10.raw z50c.skip10.raw || die "ERROR: file mismatch for --input-size=50 --skip=10"
cannam@86 714 rm -f z50c.skip10.raw z50c.skip10.flac
cannam@86 715 echo OK
cannam@86 716 fi
cannam@86 717
cannam@86 718
cannam@86 719 ############################################################################
cannam@86 720 # test --cue
cannam@86 721 ############################################################################
cannam@86 722
cannam@86 723 #
cannam@86 724 # create the cue sheet
cannam@86 725 #
cannam@86 726 cuesheet=cuetest.cue
cannam@86 727 cat > $cuesheet << EOF
cannam@86 728 CATALOG 1234567890123
cannam@86 729 FILE "blah" WAVE
cannam@86 730 TRACK 01 AUDIO
cannam@86 731 INDEX 01 0
cannam@86 732 INDEX 02 10
cannam@86 733 INDEX 03 20
cannam@86 734 TRACK 02 AUDIO
cannam@86 735 INDEX 01 30
cannam@86 736 TRACK 04 AUDIO
cannam@86 737 INDEX 01 40
cannam@86 738 EOF
cannam@86 739
cannam@86 740 test_cue ()
cannam@86 741 {
cannam@86 742 in_fmt=$1
cannam@86 743 out_fmt=$2
cannam@86 744
cannam@86 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'"
cannam@86 746
cannam@86 747 [ "$out_fmt" = flac ] || [ "$out_fmt" = ogg ] || die "ERROR: internal error, bad 'out' format '$out_fmt'"
cannam@86 748
cannam@86 749 if [ $in_fmt = raw ] ; then
cannam@86 750 eopt="$raw_eopt"
cannam@86 751 dopt="$raw_dopt"
cannam@86 752 else
cannam@86 753 eopt="$wav_eopt"
cannam@86 754 dopt="$wav_dopt"
cannam@86 755 fi
cannam@86 756
cannam@86 757 if ( [ $in_fmt = flac ] || [ $in_fmt = ogg ] ) && ( [ $out_fmt = flac ] || [ $out_fmt = ogg ] ) ; then
cannam@86 758 CMP=md5cmp
cannam@86 759 else
cannam@86 760 CMP=cmp
cannam@86 761 fi
cannam@86 762
cannam@86 763 if [ $out_fmt = ogg ] ; then
cannam@86 764 eopt="--ogg $eopt"
cannam@86 765 fi
cannam@86 766
cannam@86 767 desc="($in_fmt<->$out_fmt)"
cannam@86 768
cannam@86 769 #
cannam@86 770 # for this we need just need just one FLAC file; --cue only works while decoding
cannam@86 771 #
cannam@86 772 run_flac $eopt --cuesheet=$cuesheet -o z50c.cue.$out_fmt 50c.$in_fmt || die "ERROR generating FLAC file $desc"
cannam@86 773
cannam@86 774 # To make it easy to translate from cue point to sample numbers, the
cannam@86 775 # file has a sample rate of 10 Hz and a cuesheet like so:
cannam@86 776 #
cannam@86 777 # TRACK 01, INDEX 01 : 0:00.00 -> sample 0
cannam@86 778 # TRACK 01, INDEX 02 : 0:01.00 -> sample 10
cannam@86 779 # TRACK 01, INDEX 03 : 0:02.00 -> sample 20
cannam@86 780 # TRACK 02, INDEX 01 : 0:03.00 -> sample 30
cannam@86 781 # TRACK 04, INDEX 01 : 0:04.00 -> sample 40
cannam@86 782 #
cannam@86 783 echo -n "testing --cue=- $desc... "
cannam@86 784 run_flac $dopt -o z50c.cued.$in_fmt --cue=- z50c.cue.$out_fmt || die "ERROR decoding FLAC file $desc"
cannam@86 785 $CMP 50c.$in_fmt z50c.cued.$in_fmt || die "ERROR: file mismatch for --cue=- $desc"
cannam@86 786 rm -f z50c.cued.$in_fmt
cannam@86 787 echo OK
cannam@86 788
cannam@86 789 echo -n "testing --cue=1.0 $desc... "
cannam@86 790 run_flac $dopt -o z50c.cued.$in_fmt --cue=1.0 z50c.cue.$out_fmt || die "ERROR decoding FLAC file $desc"
cannam@86 791 $CMP 50c.$in_fmt z50c.cued.$in_fmt || die "ERROR: file mismatch for --cue=1.0 $desc"
cannam@86 792 rm -f z50c.cued.$in_fmt
cannam@86 793 echo OK
cannam@86 794
cannam@86 795 echo -n "testing --cue=1.0- $desc... "
cannam@86 796 run_flac $dopt -o z50c.cued.$in_fmt --cue=1.0- z50c.cue.$out_fmt || die "ERROR decoding FLAC file $desc"
cannam@86 797 $CMP 50c.$in_fmt z50c.cued.$in_fmt || die "ERROR: file mismatch for --cue=1.0- $desc"
cannam@86 798 rm -f z50c.cued.$in_fmt
cannam@86 799 echo OK
cannam@86 800
cannam@86 801 echo -n "testing --cue=1.1 $desc... "
cannam@86 802 run_flac $dopt -o z50c.cued.$in_fmt --cue=1.1 z50c.cue.$out_fmt || die "ERROR decoding FLAC file $desc"
cannam@86 803 $CMP 50c.$in_fmt z50c.cued.$in_fmt || die "ERROR: file mismatch for --cue=1.1 $desc"
cannam@86 804 rm -f z50c.cued.$in_fmt
cannam@86 805 echo OK
cannam@86 806
cannam@86 807 echo -n "testing --cue=1.1- $desc... "
cannam@86 808 run_flac $dopt -o z50c.cued.$in_fmt --cue=1.1- z50c.cue.$out_fmt || die "ERROR decoding FLAC file $desc"
cannam@86 809 $CMP 50c.$in_fmt z50c.cued.$in_fmt || die "ERROR: file mismatch for --cue=1.1- $desc"
cannam@86 810 rm -f z50c.cued.$in_fmt
cannam@86 811 echo OK
cannam@86 812
cannam@86 813 echo -n "testing --cue=1.2 $desc... "
cannam@86 814 run_flac $dopt -o z50c.cued.$in_fmt --cue=1.2 z50c.cue.$out_fmt || die "ERROR decoding FLAC file $desc"
cannam@86 815 $CMP 50c.skip10.$in_fmt z50c.cued.$in_fmt || die "ERROR: file mismatch for --cue=1.2 $desc"
cannam@86 816 rm -f z50c.cued.$in_fmt
cannam@86 817 echo OK
cannam@86 818
cannam@86 819 echo -n "testing --cue=1.2- $desc... "
cannam@86 820 run_flac $dopt -o z50c.cued.$in_fmt --cue=1.2- z50c.cue.$out_fmt || die "ERROR decoding FLAC file $desc"
cannam@86 821 $CMP 50c.skip10.$in_fmt z50c.cued.$in_fmt || die "ERROR: file mismatch for --cue=1.2- $desc"
cannam@86 822 rm -f z50c.cued.$in_fmt
cannam@86 823 echo OK
cannam@86 824
cannam@86 825 echo -n "testing --cue=1.4 $desc... "
cannam@86 826 run_flac $dopt -o z50c.cued.$in_fmt --cue=1.4 z50c.cue.$out_fmt || die "ERROR decoding FLAC file $desc"
cannam@86 827 $CMP 50c.skip20.$in_fmt z50c.cued.$in_fmt || die "ERROR: file mismatch for --cue=1.4 $desc"
cannam@86 828 rm -f z50c.cued.$in_fmt
cannam@86 829 echo OK
cannam@86 830
cannam@86 831 echo -n "testing --cue=1.4- $desc... "
cannam@86 832 run_flac $dopt -o z50c.cued.$in_fmt --cue=1.4- z50c.cue.$out_fmt || die "ERROR decoding FLAC file $desc"
cannam@86 833 $CMP 50c.skip20.$in_fmt z50c.cued.$in_fmt || die "ERROR: file mismatch for --cue=1.4- $desc"
cannam@86 834 rm -f z50c.cued.$in_fmt
cannam@86 835 echo OK
cannam@86 836
cannam@86 837 echo -n "testing --cue=-5.0 $desc... "
cannam@86 838 run_flac $dopt -o z50c.cued.$in_fmt --cue=-5.0 z50c.cue.$out_fmt || die "ERROR decoding FLAC file $desc"
cannam@86 839 $CMP 50c.$in_fmt z50c.cued.$in_fmt || die "ERROR: file mismatch for --cue=-5.0 $desc"
cannam@86 840 rm -f z50c.cued.$in_fmt
cannam@86 841 echo OK
cannam@86 842
cannam@86 843 echo -n "testing --cue=-4.1 $desc... "
cannam@86 844 run_flac $dopt -o z50c.cued.$in_fmt --cue=-4.1 z50c.cue.$out_fmt || die "ERROR decoding FLAC file $desc"
cannam@86 845 $CMP 50c.until40.$in_fmt z50c.cued.$in_fmt || die "ERROR: file mismatch for --cue=-4.1 $desc"
cannam@86 846 rm -f z50c.cued.$in_fmt
cannam@86 847 echo OK
cannam@86 848
cannam@86 849 echo -n "testing --cue=-3.1 $desc... "
cannam@86 850 run_flac $dopt -o z50c.cued.$in_fmt --cue=-3.1 z50c.cue.$out_fmt || die "ERROR decoding FLAC file $desc"
cannam@86 851 $CMP 50c.until40.$in_fmt z50c.cued.$in_fmt || die "ERROR: file mismatch for --cue=-3.1 $desc"
cannam@86 852 rm -f z50c.cued.$in_fmt
cannam@86 853 echo OK
cannam@86 854
cannam@86 855 echo -n "testing --cue=-1.4 $desc... "
cannam@86 856 run_flac $dopt -o z50c.cued.$in_fmt --cue=-1.4 z50c.cue.$out_fmt || die "ERROR decoding FLAC file $desc"
cannam@86 857 $CMP 50c.until30.$in_fmt z50c.cued.$in_fmt || die "ERROR: file mismatch for --cue=-1.4 $desc"
cannam@86 858 rm -f z50c.cued.$in_fmt
cannam@86 859 echo OK
cannam@86 860
cannam@86 861 echo -n "testing --cue=1.0-5.0 $desc... "
cannam@86 862 run_flac $dopt -o z50c.cued.$in_fmt --cue=1.0-5.0 z50c.cue.$out_fmt || die "ERROR decoding FLAC file $desc"
cannam@86 863 $CMP 50c.$in_fmt z50c.cued.$in_fmt || die "ERROR: file mismatch for --cue=1.0-5.0 $desc"
cannam@86 864 rm -f z50c.cued.$in_fmt
cannam@86 865 echo OK
cannam@86 866
cannam@86 867 echo -n "testing --cue=1.1-5.0 $desc... "
cannam@86 868 run_flac $dopt -o z50c.cued.$in_fmt --cue=1.1-5.0 z50c.cue.$out_fmt || die "ERROR decoding FLAC file $desc"
cannam@86 869 $CMP 50c.$in_fmt z50c.cued.$in_fmt || die "ERROR: file mismatch for --cue=1.1-5.0 $desc"
cannam@86 870 rm -f z50c.cued.$in_fmt
cannam@86 871 echo OK
cannam@86 872
cannam@86 873 echo -n "testing --cue=1.2-4.1 $desc... "
cannam@86 874 run_flac $dopt -o z50c.cued.$in_fmt --cue=1.2-4.1 z50c.cue.$out_fmt || die "ERROR decoding FLAC file $desc"
cannam@86 875 $CMP 50c.skip10.until40.$in_fmt z50c.cued.$in_fmt || die "ERROR: file mismatch for --cue=1.2-4.1 $desc"
cannam@86 876 rm -f z50c.cued.$in_fmt
cannam@86 877 echo OK
cannam@86 878
cannam@86 879 echo -n "testing --cue=1.4-2.0 $desc... "
cannam@86 880 run_flac $dopt -o z50c.cued.$in_fmt --cue=1.4-2.0 z50c.cue.$out_fmt || die "ERROR decoding FLAC file $desc"
cannam@86 881 $CMP 50c.skip20.until30.$in_fmt z50c.cued.$in_fmt || die "ERROR: file mismatch for --cue=1.4-2.0 $desc"
cannam@86 882 rm -f z50c.cued.$in_fmt
cannam@86 883 echo OK
cannam@86 884
cannam@86 885 rm -f z50c.cue.$out_fmt
cannam@86 886 }
cannam@86 887
cannam@86 888 test_cue raw flac
cannam@86 889 test_cue wav flac
cannam@86 890 test_cue aiff flac
cannam@86 891 test_cue flac flac
cannam@86 892 #@@@if [ $has_ogg = yes ] ; then
cannam@86 893 #@@@ #@@@ doesn't work yet because md5cmp doesn't work because metaflac doesn't work on ogg flac yet
cannam@86 894 #@@@ test_cue ogg flac
cannam@86 895 #@@@fi
cannam@86 896
cannam@86 897 if [ $has_ogg = yes ] ; then
cannam@86 898 test_cue raw ogg
cannam@86 899 test_cue wav ogg
cannam@86 900 test_cue aiff ogg
cannam@86 901 #@@@ doesn't work yet because md5cmp doesn't work because metaflac doesn't work on ogg flac yet
cannam@86 902 #@@@test_cue flac ogg
cannam@86 903 #@@@test_cue ogg ogg
cannam@86 904 fi
cannam@86 905
cannam@86 906 ############################################################################
cannam@86 907 # test 'fixup' code that happens when a FLAC file with total_samples == 0
cannam@86 908 # in the STREAMINFO block is converted to WAVE or AIFF, requiring the
cannam@86 909 # decoder go back and fix up the chunk headers
cannam@86 910 ############################################################################
cannam@86 911
cannam@86 912 echo -n "WAVE fixup test... "
cannam@86 913
cannam@86 914 echo -n "prepare... "
cannam@86 915 convert_to_wav noise "$raw_eopt" "$wav_dopt" || die "ERROR creating reference WAVE"
cannam@86 916
cannam@86 917 echo -n "encode... "
cannam@86 918 # the pipe from 'cat' to 'flac' does not work on cygwin because of the EOF/
cannam@86 919 # binary-mode stdin problem, so we use an undocumented option to metaflac to
cannam@86 920 # set the total sample count to 0
cannam@86 921 if [ $is_win = yes ] ; then
cannam@86 922 run_flac $raw_eopt noise.raw -o fixup.flac || die "ERROR generating FLAC file"
cannam@86 923 run_metaflac --set-total-samples=0 fixup.flac 2> /dev/null
cannam@86 924 else
cannam@86 925 cat noise.raw | run_flac $raw_eopt - -c > fixup.flac || die "ERROR generating FLAC file"
cannam@86 926 fi
cannam@86 927
cannam@86 928 echo -n "decode... "
cannam@86 929 run_flac $wav_dopt fixup.flac -o fixup.wav || die "ERROR decoding FLAC file"
cannam@86 930
cannam@86 931 echo -n "compare... "
cannam@86 932 cmp noise.wav fixup.wav || die "ERROR: file mismatch"
cannam@86 933
cannam@86 934 echo OK
cannam@86 935 rm -f noise.wav fixup.wav fixup.flac
cannam@86 936
cannam@86 937 echo -n "AIFF fixup test... "
cannam@86 938
cannam@86 939 echo -n "prepare... "
cannam@86 940 convert_to_aiff noise "$raw_eopt" "$wav_dopt" || die "ERROR creating reference AIFF"
cannam@86 941
cannam@86 942 echo -n "encode... "
cannam@86 943 # the pipe from 'cat' to 'flac' does not work on cygwin because of the EOF/
cannam@86 944 # binary-mode stdin problem, so we use an undocumented option to metaflac to
cannam@86 945 # set the total sample count to 0
cannam@86 946 if [ $is_win = yes ] ; then
cannam@86 947 run_flac $raw_eopt noise.raw -o fixup.flac || die "ERROR generating FLAC file"
cannam@86 948 run_metaflac --set-total-samples=0 fixup.flac 2> /dev/null
cannam@86 949 else
cannam@86 950 cat noise.raw | run_flac $raw_eopt - -c > fixup.flac || die "ERROR generating FLAC file"
cannam@86 951 fi
cannam@86 952
cannam@86 953 echo -n "decode... "
cannam@86 954 run_flac $wav_dopt fixup.flac -o fixup.aiff || die "ERROR decoding FLAC file"
cannam@86 955
cannam@86 956 echo -n "compare... "
cannam@86 957 cmp noise.aiff fixup.aiff || die "ERROR: file mismatch"
cannam@86 958
cannam@86 959 echo OK
cannam@86 960 rm -f noise.aiff fixup.aiff fixup.flac
cannam@86 961
cannam@86 962
cannam@86 963 ############################################################################
cannam@86 964 # multi-file tests
cannam@86 965 ############################################################################
cannam@86 966
cannam@86 967 echo "Generating multiple input files from noise..."
cannam@86 968 multifile_format_decode="--endian=big --sign=signed"
cannam@86 969 multifile_format_encode="$multifile_format_decode --sample-rate=44100 --bps=16 --channels=2 --no-padding"
cannam@86 970 short_noise_cdda_samples=`expr $total_noise_cdda_samples / 8`
cannam@86 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"
cannam@86 972 run_flac --decode --force $SILENT shortnoise.flac -o shortnoise.raw --force-raw-format $multifile_format_decode || die "ERROR generating RAW file"
cannam@86 973 run_flac --decode --force $SILENT shortnoise.flac || die "ERROR generating WAVE file"
cannam@86 974 run_flac --decode --force $SILENT shortnoise.flac -o shortnoise.aiff || die "ERROR generating AIFF file"
cannam@86 975 cp shortnoise.flac file0.flac
cannam@86 976 cp shortnoise.flac file1.flac
cannam@86 977 cp shortnoise.flac file2.flac
cannam@86 978 rm -f shortnoise.flac
cannam@86 979 cp shortnoise.wav file0.wav
cannam@86 980 cp shortnoise.wav file1.wav
cannam@86 981 cp shortnoise.wav file2.wav
cannam@86 982 rm -f shortnoise.wav
cannam@86 983 cp shortnoise.aiff file0.aiff
cannam@86 984 cp shortnoise.aiff file1.aiff
cannam@86 985 cp shortnoise.aiff file2.aiff
cannam@86 986 rm -f shortnoise.aiff
cannam@86 987 cp shortnoise.raw file0.raw
cannam@86 988 cp shortnoise.raw file1.raw
cannam@86 989 cp shortnoise.raw file2.raw
cannam@86 990 rm -f shortnoise.raw
cannam@86 991 # create authoritative sector-aligned files for comparison
cannam@86 992 file0_samples=`expr \( $short_noise_cdda_samples / 588 \) \* 588`
cannam@86 993 file0_remainder=`expr $short_noise_cdda_samples - $file0_samples`
cannam@86 994 file1_samples=`expr \( \( $file0_remainder + $short_noise_cdda_samples \) / 588 \) \* 588`
cannam@86 995 file1_remainder=`expr $file0_remainder + $short_noise_cdda_samples - $file1_samples`
cannam@86 996 file1_samples=`expr $file1_samples - $file0_remainder`
cannam@86 997 file2_samples=`expr \( \( $file1_remainder + $short_noise_cdda_samples \) / 588 \) \* 588`
cannam@86 998 file2_remainder=`expr $file1_remainder + $short_noise_cdda_samples - $file2_samples`
cannam@86 999 file2_samples=`expr $file2_samples - $file1_remainder`
cannam@86 1000 if [ $file2_remainder != '0' ] ; then
cannam@86 1001 file2_samples=`expr $file2_samples + $file2_remainder`
cannam@86 1002 file2_remainder=`expr 588 - $file2_remainder`
cannam@86 1003 fi
cannam@86 1004
cannam@86 1005 dd if=file0.raw ibs=4 count=$file0_samples of=file0s.raw 2>/dev/null || $dddie
cannam@86 1006 dd if=file0.raw ibs=4 count=$file0_remainder of=file1s.raw skip=$file0_samples 2>/dev/null || $dddie
cannam@86 1007 dd if=file1.raw ibs=4 count=$file1_samples of=z.raw 2>/dev/null || $dddie
cannam@86 1008 cat z.raw >> file1s.raw || die "ERROR: cat-ing sector-aligned files"
cannam@86 1009 dd if=file1.raw ibs=4 count=$file1_remainder of=file2s.raw skip=$file1_samples 2>/dev/null || $dddie
cannam@86 1010 dd if=file2.raw ibs=4 count=$file2_samples of=z.raw 2>/dev/null || $dddie
cannam@86 1011 cat z.raw >> file2s.raw || die "ERROR: cat-ing sector-aligned files"
cannam@86 1012 dd if=/dev/zero ibs=4 count=$file2_remainder of=z.raw 2>/dev/null || $dddie
cannam@86 1013 cat z.raw >> file2s.raw || die "ERROR: cat-ing sector-aligned files"
cannam@86 1014 rm -f z.raw
cannam@86 1015
cannam@86 1016 convert_to_wav file0s "$multifile_format_encode --force" "$SILENT --force --decode" || die "ERROR creating authoritative sector-aligned WAVE"
cannam@86 1017 convert_to_wav file1s "$multifile_format_encode --force" "$SILENT --force --decode" || die "ERROR creating authoritative sector-aligned WAVE"
cannam@86 1018 convert_to_wav file2s "$multifile_format_encode --force" "$SILENT --force --decode" || die "ERROR creating authoritative sector-aligned WAVE"
cannam@86 1019
cannam@86 1020 convert_to_aiff file0s "$multifile_format_encode --force" "$SILENT --force --decode" || die "ERROR creating authoritative sector-aligned AIFF"
cannam@86 1021 convert_to_aiff file1s "$multifile_format_encode --force" "$SILENT --force --decode" || die "ERROR creating authoritative sector-aligned AIFF"
cannam@86 1022 convert_to_aiff file2s "$multifile_format_encode --force" "$SILENT --force --decode" || die "ERROR creating authoritative sector-aligned AIFF"
cannam@86 1023
cannam@86 1024 test_multifile ()
cannam@86 1025 {
cannam@86 1026 input_type=$1
cannam@86 1027 streamtype=$2
cannam@86 1028 sector_align=$3
cannam@86 1029 encode_options="$4"
cannam@86 1030
cannam@86 1031 extra_encode_options=""
cannam@86 1032 extra_decode_options=""
cannam@86 1033 if [ $input_type = "raw" ] ; then
cannam@86 1034 extra_encode_options="--force-raw-format $multifile_format_encode"
cannam@86 1035 extra_decode_options="--force-raw-format $multifile_format_decode"
cannam@86 1036 else
cannam@86 1037 if [ $input_type = "aiff" ] ; then
cannam@86 1038 extra_decode_options="--force-aiff-format"
cannam@86 1039 fi
cannam@86 1040 fi
cannam@86 1041
cannam@86 1042 if [ $streamtype = ogg ] ; then
cannam@86 1043 suffix=oga
cannam@86 1044 encode_options="$encode_options --ogg"
cannam@86 1045 else
cannam@86 1046 suffix=flac
cannam@86 1047 fi
cannam@86 1048
cannam@86 1049 if [ $sector_align = sector_align ] ; then
cannam@86 1050 encode_options="$encode_options --sector-align"
cannam@86 1051 fi
cannam@86 1052
cannam@86 1053 if [ $input_type = flac ] || [ $input_type = ogg ] ; then
cannam@86 1054 CMP=md5cmp
cannam@86 1055 else
cannam@86 1056 CMP=cmp
cannam@86 1057 fi
cannam@86 1058
cannam@86 1059 for n in 0 1 2 ; do
cannam@86 1060 cp file$n.$input_type file${n}x.$input_type
cannam@86 1061 done
cannam@86 1062 run_flac --force $encode_options $extra_encode_options file0x.$input_type file1x.$input_type file2x.$input_type || die "ERROR"
cannam@86 1063 run_flac --force --decode $extra_decode_options file0x.$suffix file1x.$suffix file2x.$suffix || die "ERROR"
cannam@86 1064 if [ $sector_align != sector_align ] ; then
cannam@86 1065 for n in 0 1 2 ; do
cannam@86 1066 $CMP file$n.$input_type file${n}x.$input_type || die "ERROR: file mismatch on file #$n"
cannam@86 1067 done
cannam@86 1068 else
cannam@86 1069 for n in 0 1 2 ; do
cannam@86 1070 $CMP file${n}s.$input_type file${n}x.$input_type || die "ERROR: file mismatch on file #$n"
cannam@86 1071 done
cannam@86 1072 fi
cannam@86 1073 for n in 0 1 2 ; do
cannam@86 1074 rm -f file${n}x.$suffix file${n}x.$input_type
cannam@86 1075 done
cannam@86 1076 }
cannam@86 1077
cannam@86 1078 input_types="raw wav aiff flac"
cannam@86 1079 #@@@ doesn't work yet because md5cmp doesn't work because metaflac doesn't work on ogg flac yet
cannam@86 1080 #@@@if [ $has_ogg = yes ] ; then
cannam@86 1081 #@@@ input_types="$input_types ogg"
cannam@86 1082 #@@@fi
cannam@86 1083 for input_type in $input_types ; do
cannam@86 1084 echo "Testing multiple $input_type files without verify..."
cannam@86 1085 test_multifile $input_type flac no_sector_align ""
cannam@86 1086
cannam@86 1087 echo "Testing multiple $input_type files with verify..."
cannam@86 1088 test_multifile $input_type flac no_sector_align "--verify"
cannam@86 1089
cannam@86 1090 if [ $input_type != flac ] && [ $input_type != ogg ] ; then # --sector-align not supported for FLAC input
cannam@86 1091 echo "Testing multiple $input_type files with --sector-align, without verify..."
cannam@86 1092 test_multifile $input_type flac sector_align ""
cannam@86 1093
cannam@86 1094 echo "Testing multiple $input_type files with --sector-align, with verify..."
cannam@86 1095 test_multifile $input_type flac sector_align "--verify"
cannam@86 1096 fi
cannam@86 1097
cannam@86 1098 if [ $has_ogg = yes ] ; then
cannam@86 1099 echo "Testing multiple $input_type files with --ogg, without verify..."
cannam@86 1100 test_multifile $input_type ogg no_sector_align ""
cannam@86 1101
cannam@86 1102 echo "Testing multiple $input_type files with --ogg, with verify..."
cannam@86 1103 test_multifile $input_type ogg no_sector_align "--verify"
cannam@86 1104
cannam@86 1105 if [ $input_type != flac ] ; then # --sector-align not supported for FLAC input
cannam@86 1106 echo "Testing multiple $input_type files with --ogg and --sector-align, without verify..."
cannam@86 1107 test_multifile $input_type ogg sector_align ""
cannam@86 1108
cannam@86 1109 echo "Testing multiple $input_type files with --ogg and --sector-align, with verify..."
cannam@86 1110 test_multifile $input_type ogg sector_align "--verify"
cannam@86 1111 fi
cannam@86 1112
cannam@86 1113 echo "Testing multiple $input_type files with --ogg and --serial-number, with verify..."
cannam@86 1114 test_multifile $input_type ogg no_sector_align "--serial-number=321 --verify"
cannam@86 1115 fi
cannam@86 1116 done
cannam@86 1117
cannam@86 1118
cannam@86 1119 ############################################################################
cannam@86 1120 # test the metadata-handling properties of flac-to-flac encoding
cannam@86 1121 ############################################################################
cannam@86 1122
cannam@86 1123 echo "Testing the metadata-handling properties of flac-to-flac encoding..."
cannam@86 1124
cannam@86 1125 testdir="flac-to-flac-metadata-test-files"
cannam@86 1126 filter ()
cannam@86 1127 {
cannam@86 1128 # minor danger, changing vendor strings might change the length of the
cannam@86 1129 # VORBIS_COMMENT block, but if we add "^ length: " to the patterns,
cannam@86 1130 # we lose info about PADDING size that we need
cannam@86 1131 grep -Ev '^ vendor string: |^ m..imum .....size: ' | sed -e 's/, stream_offset.*//'
cannam@86 1132 }
cannam@86 1133 flac2flac ()
cannam@86 1134 {
cannam@86 1135 file="$1"
cannam@86 1136 case="$2"
cannam@86 1137 args="$3"
cannam@86 1138 expect="$case-expect.meta"
cannam@86 1139 echo -n "$case... "
cannam@86 1140 run_flac $SILENT -f -o out.flac $args $file || die "ERROR encoding FLAC file"
cannam@86 1141 run_metaflac --list out.flac | filter > out.meta || die "ERROR listing metadata of output FLAC file"
cannam@86 1142 diff -q -w $expect out.meta 2>/dev/null || die "ERROR: metadata does not match expected $expect"
cannam@86 1143 echo OK
cannam@86 1144 }
cannam@86 1145
cannam@86 1146 #filter=', stream_offset.*|^ vendor string: |^ length: |^ m..imum .....size: '
cannam@86 1147 cd $testdir || die "ERROR changing to directory $testdir"
cannam@86 1148
cannam@86 1149 # case 00a: no alterations on a file with all metadata types, keep all metadata, in same order
cannam@86 1150 flac2flac input-SCVAUP.flac case00a ""
cannam@86 1151 # case 01a: on file with multiple PADDING blocks, they should be aggregated into one at the end
cannam@86 1152 flac2flac input-SCVPAP.flac case01a ""
cannam@86 1153 # case 01b: on file with multiple PADDING blocks and --no-padding specified, they should all be deleted
cannam@86 1154 flac2flac input-SCVPAP.flac case01b "--no-padding"
cannam@86 1155 # case 01c: on file with multiple PADDING blocks and -P specified, they should all be overwritten with -P value
cannam@86 1156 flac2flac input-SCVPAP.flac case01c "-P 1234"
cannam@86 1157 # case 01d: on file with no PADDING blocks, use -P setting
cannam@86 1158 flac2flac input-SCVA.flac case01d "-P 1234"
cannam@86 1159 # case 01e: on file with no PADDING blocks and no -P given, use default padding
cannam@86 1160 flac2flac input-SCVA.flac case01e ""
cannam@86 1161 # case 02a: on file with no VORBIS_COMMENT block, add new VORBIS_COMMENT
cannam@86 1162 flac2flac input-SCPAP.flac case02a ""
cannam@86 1163 # case 02b: on file with no VORBIS_COMMENT block and --tag, add new VORBIS_COMMENT with tags
cannam@86 1164 flac2flac input-SCPAP.flac case02b "--tag=artist=0"
cannam@86 1165 # case 02c: on file with VORBIS_COMMENT block and --tag, replace existing VORBIS_COMMENT with new tags
cannam@86 1166 flac2flac input-SCVAUP.flac case02c "$TOTALLY_SILENT --tag=artist=0"
cannam@86 1167 # case 03a: on file with no CUESHEET block and --cuesheet specified, add it
cannam@86 1168 flac2flac input-SVAUP.flac case03a "--cuesheet=input0.cue"
cannam@86 1169 # case 03b: on file with CUESHEET block and --cuesheet specified, overwrite existing CUESHEET
cannam@86 1170 flac2flac input-SCVAUP.flac case03b "$TOTALLY_SILENT --cuesheet=input0.cue"
cannam@86 1171 # case 03c: on file with CUESHEET block and size-changing option specified, drop existing CUESHEET
cannam@86 1172 flac2flac input-SCVAUP.flac case03c "$TOTALLY_SILENT --skip=1"
cannam@86 1173 # case 04a: on file with no SEEKTABLE block and --no-seektable specified, no SEEKTABLE
cannam@86 1174 flac2flac input-VA.flac case04a "--no-padding --no-seektable"
cannam@86 1175 # case 04b: on file with no SEEKTABLE block and -S specified, new SEEKTABLE
cannam@86 1176 flac2flac input-VA.flac case04b "--no-padding -S 5x"
cannam@86 1177 # case 04c: on file with no SEEKTABLE block and no seektable options specified, new SEEKTABLE with default points
cannam@86 1178 flac2flac input-VA.flac case04c "--no-padding"
cannam@86 1179 # case 04d: on file with SEEKTABLE block and --no-seektable specified, drop existing SEEKTABLE
cannam@86 1180 flac2flac input-SCVA.flac case04d "--no-padding --no-seektable"
cannam@86 1181 # case 04e: on file with SEEKTABLE block and -S specified, overwrite existing SEEKTABLE
cannam@86 1182 flac2flac input-SCVA.flac case04e "$TOTALLY_SILENT --no-padding -S 5x"
cannam@86 1183 # case 04f: on file with SEEKTABLE block and size-changing option specified, drop existing SEEKTABLE, new SEEKTABLE with default points
cannam@86 1184 #(already covered by case03c)
cannam@86 1185
cannam@86 1186 rm -f out.flac out.meta
cannam@86 1187
cannam@86 1188 #@@@ when metaflac handles ogg flac, duplicate flac2flac tests here
cannam@86 1189
cannam@86 1190 cd ..