1*600f14f4SXin Li#!/bin/sh -e 2*600f14f4SXin Li 3*600f14f4SXin Li# FLAC - Free Lossless Audio Codec 4*600f14f4SXin Li# Copyright (C) 2001-2009 Josh Coalson 5*600f14f4SXin Li# Copyright (C) 2011-2023 Xiph.Org Foundation 6*600f14f4SXin Li# 7*600f14f4SXin Li# This file is part the FLAC project. FLAC is comprised of several 8*600f14f4SXin Li# components distributed under different licenses. The codec libraries 9*600f14f4SXin Li# are distributed under Xiph.Org's BSD-like license (see the file 10*600f14f4SXin Li# COPYING.Xiph in this distribution). All other programs, libraries, and 11*600f14f4SXin Li# plugins are distributed under the GPL (see COPYING.GPL). The documentation 12*600f14f4SXin Li# is distributed under the Gnu FDL (see COPYING.FDL). Each file in the 13*600f14f4SXin Li# FLAC distribution contains at the top the terms under which it may be 14*600f14f4SXin Li# distributed. 15*600f14f4SXin Li# 16*600f14f4SXin Li# Since this particular file is relevant to all components of FLAC, 17*600f14f4SXin Li# it may be distributed under the Xiph.Org license, which is the least 18*600f14f4SXin Li# restrictive of those mentioned above. See the file COPYING.Xiph in this 19*600f14f4SXin Li# distribution. 20*600f14f4SXin Li 21*600f14f4SXin Li. ./common.sh 22*600f14f4SXin Li 23*600f14f4SXin Li# we use '.' as decimal separator in --skip/--until tests 24*600f14f4SXin Liexport LANG=C LC_ALL=C 25*600f14f4SXin Li 26*600f14f4SXin Lidddie="die ERROR: creating files with dd" 27*600f14f4SXin Li 28*600f14f4SXin LiPATH="$(pwd)/../src/flac:$PATH" 29*600f14f4SXin LiPATH="$(pwd)/../src/metaflac:$PATH" 30*600f14f4SXin LiPATH="$(pwd)/../src/test_streams:$PATH" 31*600f14f4SXin LiPATH="$(pwd)/../objs/$BUILD/bin:$PATH" 32*600f14f4SXin Li 33*600f14f4SXin Liflac${EXE} --help 1>/dev/null 2>/dev/null || die "ERROR can't find flac executable" 34*600f14f4SXin Li 35*600f14f4SXin Lirun_flac () 36*600f14f4SXin Li{ 37*600f14f4SXin Li if [ "$FLAC__TEST_WITH_VALGRIND" = yes ] ; then 38*600f14f4SXin Li echo "valgrind --leak-check=yes --show-reachable=yes --num-callers=50 flac $*" >>test_flac.valgrind.log 39*600f14f4SXin Li valgrind --leak-check=yes --show-reachable=yes --num-callers=50 --log-fd=4 flac${EXE} $TOTALLY_SILENT --no-error-on-compression-fail $* 4>>test_flac.valgrind.log 40*600f14f4SXin Li else 41*600f14f4SXin Li flac${EXE} $TOTALLY_SILENT --no-error-on-compression-fail $* 42*600f14f4SXin Li fi 43*600f14f4SXin Li} 44*600f14f4SXin Li 45*600f14f4SXin Lirun_metaflac () 46*600f14f4SXin Li{ 47*600f14f4SXin Li if [ "$FLAC__TEST_WITH_VALGRIND" = yes ] ; then 48*600f14f4SXin Li echo "valgrind --leak-check=yes --show-reachable=yes --num-callers=50 metaflac $*" >>test_flac.valgrind.log 49*600f14f4SXin Li valgrind --leak-check=yes --show-reachable=yes --num-callers=50 --log-fd=4 metaflac${EXE} $* 4>>test_flac.valgrind.log 50*600f14f4SXin Li else 51*600f14f4SXin Li metaflac${EXE} $* 52*600f14f4SXin Li fi 53*600f14f4SXin Li} 54*600f14f4SXin Li 55*600f14f4SXin Limd5cmp () 56*600f14f4SXin Li{ 57*600f14f4SXin Li n=$( ( [ -f "$1" ] && [ -f "$2" ] && metaflac${EXE} --show-md5sum --no-filename "$1" "$2" 2>/dev/null || exit 1 ) | uniq | wc -l) 58*600f14f4SXin Li [ "$n" != "" ] && [ $n = 1 ] 59*600f14f4SXin Li} 60*600f14f4SXin Li 61*600f14f4SXin Liecho "Checking for --ogg support in flac..." 62*600f14f4SXin Liif flac${EXE} --ogg $TOTTALY_SILENT --force-raw-format --endian=little --sign=signed --channels=1 --bps=8 --sample-rate=44100 -c $0 1>/dev/null 2>&1 ; then 63*600f14f4SXin Li has_ogg=yes; 64*600f14f4SXin Li echo "flac --ogg works" 65*600f14f4SXin Lielse 66*600f14f4SXin Li has_ogg=no; 67*600f14f4SXin Li echo "flac --ogg doesn't work" 68*600f14f4SXin Lifi 69*600f14f4SXin Li 70*600f14f4SXin Liecho "Generating streams..." 71*600f14f4SXin Liif [ ! -f wacky1.wav ] ; then 72*600f14f4SXin Li test_streams || die "ERROR during test_streams" 73*600f14f4SXin Lifi 74*600f14f4SXin Li 75*600f14f4SXin Li############################################################################ 76*600f14f4SXin Li# test that flac doesn't automatically overwrite files unless -f is used 77*600f14f4SXin Li############################################################################ 78*600f14f4SXin Li 79*600f14f4SXin Liecho "Try encoding to a file that exists; should fail" 80*600f14f4SXin Licp wacky1.wav exist.wav 81*600f14f4SXin Litouch exist.flac 82*600f14f4SXin Liif run_flac -0 exist.wav ; then 83*600f14f4SXin Li die "ERROR: it should have failed but didn't" 84*600f14f4SXin Lielse 85*600f14f4SXin Li echo "OK, it failed as it should" 86*600f14f4SXin Lifi 87*600f14f4SXin Li 88*600f14f4SXin Liecho "Try encoding with -f to a file that exists; should succeed" 89*600f14f4SXin Liif run_flac -0 --force exist.wav ; then 90*600f14f4SXin Li echo "OK, it succeeded as it should" 91*600f14f4SXin Lielse 92*600f14f4SXin Li die "ERROR: it should have succeeded but didn't" 93*600f14f4SXin Lifi 94*600f14f4SXin Li 95*600f14f4SXin Liecho "Try decoding to a file that exists; should fail" 96*600f14f4SXin Liif run_flac -d exist.flac ; then 97*600f14f4SXin Li die "ERROR: it should have failed but didn't" 98*600f14f4SXin Lielse 99*600f14f4SXin Li echo "OK, it failed as it should" 100*600f14f4SXin Lifi 101*600f14f4SXin Li 102*600f14f4SXin Liecho "Try decoding with -f to a file that exists; should succeed" 103*600f14f4SXin Liif run_flac -d -f exist.flac ; then 104*600f14f4SXin Li echo "OK, it succeeded as it should" 105*600f14f4SXin Lielse 106*600f14f4SXin Li die "ERROR: it should have succeeded but didn't" 107*600f14f4SXin Lifi 108*600f14f4SXin Li 109*600f14f4SXin Lirm -f exist.wav exist.flac 110*600f14f4SXin Li 111*600f14f4SXin Li############################################################################ 112*600f14f4SXin Li# test fractional block sizes 113*600f14f4SXin Li############################################################################ 114*600f14f4SXin Li 115*600f14f4SXin Litest_fractional () 116*600f14f4SXin Li{ 117*600f14f4SXin Li blocksize=$1 118*600f14f4SXin Li samples=$2 119*600f14f4SXin Li dd if=noise.raw ibs=4 count=$samples of=pbs.raw 2>/dev/null || $dddie 120*600f14f4SXin Li echo $ECHO_N "fractional block size test (blocksize=$blocksize samples=$samples) encode... " $ECHO_C 121*600f14f4SXin Li run_flac --force --verify --force-raw-format --endian=little --sign=signed --sample-rate=44100 --bps=16 --channels=2 --blocksize=$blocksize --no-padding --lax -o pbs.flac pbs.raw || die "ERROR" 122*600f14f4SXin Li echo $ECHO_N "decode... " $ECHO_C 123*600f14f4SXin Li run_flac --force --decode --force-raw-format --endian=little --sign=signed -o pbs.cmp pbs.flac || die "ERROR" 124*600f14f4SXin Li echo $ECHO_N "compare... " $ECHO_C 125*600f14f4SXin Li cmp pbs.raw pbs.cmp || die "ERROR: file mismatch" 126*600f14f4SXin Li echo "OK" 127*600f14f4SXin Li rm -f pbs.raw pbs.flac pbs.cmp 128*600f14f4SXin Li} 129*600f14f4SXin Li 130*600f14f4SXin Li# The special significance of 2048 is it's the # of samples that flac calls 131*600f14f4SXin Li# FLAC__stream_encoder_process() on. 132*600f14f4SXin Li# 133*600f14f4SXin Li# We're trying to make sure the 1-sample overread logic in the stream encoder 134*600f14f4SXin Li# (used for last-block checking) works; these values probe around common 135*600f14f4SXin Li# multiples of the flac sample chunk size (2048) and the blocksize. 136*600f14f4SXin Lifor samples in 31 32 33 34 35 2046 2047 2048 2049 2050 ; do 137*600f14f4SXin Li test_fractional 33 $samples 138*600f14f4SXin Lidone 139*600f14f4SXin Lifor 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 140*600f14f4SXin Li test_fractional 256 $samples 141*600f14f4SXin Lidone 142*600f14f4SXin Lifor samples in 1022 1023 1024 1025 1026 2046 2047 2048 2049 2050 4094 4095 4096 4097 4098 ; do 143*600f14f4SXin Li test_fractional 2048 $samples 144*600f14f4SXin Lidone 145*600f14f4SXin Lifor 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 146*600f14f4SXin Li test_fractional 4608 $samples 147*600f14f4SXin Lidone 148*600f14f4SXin Li 149*600f14f4SXin Li############################################################################ 150*600f14f4SXin Li# basic 'round-trip' tests of various kinds of streams 151*600f14f4SXin Li############################################################################ 152*600f14f4SXin Li 153*600f14f4SXin Lirt_test_raw () 154*600f14f4SXin Li{ 155*600f14f4SXin Li f="$1" 156*600f14f4SXin Li extra="$2" 157*600f14f4SXin Li channels="$(echo $f | awk -F- '{print $2}')" 158*600f14f4SXin Li bps="$(echo $f | awk -F- '{print $3}')" 159*600f14f4SXin Li sign="$(echo $f | awk -F- '{print $4}')" 160*600f14f4SXin Li 161*600f14f4SXin Li echo $ECHO_N "round-trip test ($f) encode... " $ECHO_C 162*600f14f4SXin Li run_flac --force --verify --force-raw-format --endian=little --sign=$sign --sample-rate=44100 --bps=$bps --channels=$channels --no-padding --lax -o rt.flac $extra $f || die "ERROR" 163*600f14f4SXin Li echo $ECHO_N "decode... " $ECHO_C 164*600f14f4SXin Li run_flac --force --decode --force-raw-format --endian=little --sign=$sign -o rt.raw $extra rt.flac || die "ERROR" 165*600f14f4SXin Li echo $ECHO_N "compare... " $ECHO_C 166*600f14f4SXin Li cmp $f rt.raw || die "ERROR: file mismatch" 167*600f14f4SXin Li echo "OK" 168*600f14f4SXin Li rm -f rt.flac rt.raw 169*600f14f4SXin Li} 170*600f14f4SXin Li 171*600f14f4SXin Lirt_test_wav () 172*600f14f4SXin Li{ 173*600f14f4SXin Li f="$1" 174*600f14f4SXin Li extra="$2" 175*600f14f4SXin Li echo $ECHO_N "round-trip test ($f) encode... " $ECHO_C 176*600f14f4SXin Li run_flac --force --verify --channel-map=none --no-padding --lax -o rt.flac $extra $f || die "ERROR" 177*600f14f4SXin Li echo $ECHO_N "decode... " $ECHO_C 178*600f14f4SXin Li run_flac --force --decode --channel-map=none -o rt.wav $extra rt.flac || die "ERROR" 179*600f14f4SXin Li echo $ECHO_N "compare... " $ECHO_C 180*600f14f4SXin Li cmp $f rt.wav || die "ERROR: file mismatch" 181*600f14f4SXin Li echo "OK" 182*600f14f4SXin Li rm -f rt.flac rt.wav 183*600f14f4SXin Li} 184*600f14f4SXin Li 185*600f14f4SXin Lirt_test_wav_autokf () 186*600f14f4SXin Li{ 187*600f14f4SXin Li f="$1" 188*600f14f4SXin Li extra="$2" 189*600f14f4SXin Li echo $ECHO_N "round-trip test ($f) encode... " $ECHO_C 190*600f14f4SXin Li run_flac --force --verify --channel-map=none --no-padding --lax -o rt.flac $extra $f || die "ERROR" 191*600f14f4SXin Li echo $ECHO_N "decode... " $ECHO_C 192*600f14f4SXin Li run_flac --force --decode --channel-map=none $extra rt.flac || die "ERROR" 193*600f14f4SXin Li echo $ECHO_N "compare... " $ECHO_C 194*600f14f4SXin Li cmp $f rt.wav || die "ERROR: file mismatch" 195*600f14f4SXin Li echo "OK" 196*600f14f4SXin Li rm -f rt.flac rt.wav 197*600f14f4SXin Li} 198*600f14f4SXin Li 199*600f14f4SXin Lirt_test_w64 () 200*600f14f4SXin Li{ 201*600f14f4SXin Li f="$1" 202*600f14f4SXin Li extra="$2" 203*600f14f4SXin Li echo $ECHO_N "round-trip test ($f) encode... " $ECHO_C 204*600f14f4SXin Li run_flac --force --verify --channel-map=none --no-padding --lax -o rt.flac $extra $f || die "ERROR" 205*600f14f4SXin Li echo $ECHO_N "decode... " $ECHO_C 206*600f14f4SXin Li run_flac --force --decode --channel-map=none -o rt.w64 $extra rt.flac || die "ERROR" 207*600f14f4SXin Li echo $ECHO_N "compare... " $ECHO_C 208*600f14f4SXin Li cmp $f rt.w64 || die "ERROR: file mismatch" 209*600f14f4SXin Li echo "OK" 210*600f14f4SXin Li rm -f rt.flac rt.w64 211*600f14f4SXin Li} 212*600f14f4SXin Li 213*600f14f4SXin Lirt_test_w64_autokf () 214*600f14f4SXin Li{ 215*600f14f4SXin Li f="$1" 216*600f14f4SXin Li extra="$2" 217*600f14f4SXin Li echo $ECHO_N "round-trip test ($f) encode... " $ECHO_C 218*600f14f4SXin Li run_flac --force --verify --channel-map=none --no-padding --lax -o rt.flac $extra $f || die "ERROR" 219*600f14f4SXin Li echo $ECHO_N "decode... " $ECHO_C 220*600f14f4SXin Li run_flac --force --decode --channel-map=none $extra rt.flac || die "ERROR" 221*600f14f4SXin Li echo $ECHO_N "compare... " $ECHO_C 222*600f14f4SXin Li cmp $f rt.w64 || die "ERROR: file mismatch" 223*600f14f4SXin Li echo "OK" 224*600f14f4SXin Li rm -f rt.flac rt.w64 225*600f14f4SXin Li} 226*600f14f4SXin Li 227*600f14f4SXin Lirt_test_rf64 () 228*600f14f4SXin Li{ 229*600f14f4SXin Li f="$1" 230*600f14f4SXin Li extra="$2" 231*600f14f4SXin Li echo $ECHO_N "round-trip test ($f) encode... " $ECHO_C 232*600f14f4SXin Li run_flac --force --verify --channel-map=none --no-padding --lax -o rt.flac $extra $f || die "ERROR" 233*600f14f4SXin Li echo $ECHO_N "decode... " $ECHO_C 234*600f14f4SXin Li run_flac --force --decode --channel-map=none -o rt.rf64 $extra rt.flac || die "ERROR" 235*600f14f4SXin Li echo $ECHO_N "compare... " $ECHO_C 236*600f14f4SXin Li cmp $f rt.rf64 || die "ERROR: file mismatch" 237*600f14f4SXin Li echo "OK" 238*600f14f4SXin Li rm -f rt.flac rt.rf64 239*600f14f4SXin Li} 240*600f14f4SXin Li 241*600f14f4SXin Lirt_test_rf64_autokf () 242*600f14f4SXin Li{ 243*600f14f4SXin Li f="$1" 244*600f14f4SXin Li extra="$2" 245*600f14f4SXin Li echo $ECHO_N "round-trip test ($f) encode... " $ECHO_C 246*600f14f4SXin Li run_flac --force --verify --channel-map=none --no-padding --lax -o rt.flac $extra $f || die "ERROR" 247*600f14f4SXin Li echo $ECHO_N "decode... " $ECHO_C 248*600f14f4SXin Li run_flac --force --decode --channel-map=none $extra rt.flac || die "ERROR" 249*600f14f4SXin Li echo $ECHO_N "compare... " $ECHO_C 250*600f14f4SXin Li cmp $f rt.rf64 || die "ERROR: file mismatch" 251*600f14f4SXin Li echo "OK" 252*600f14f4SXin Li rm -f rt.flac rt.rf64 253*600f14f4SXin Li} 254*600f14f4SXin Li 255*600f14f4SXin Lirt_test_aiff () 256*600f14f4SXin Li{ 257*600f14f4SXin Li f="$1" 258*600f14f4SXin Li extra="$2" 259*600f14f4SXin Li echo $ECHO_N "round-trip test ($f) encode... " $ECHO_C 260*600f14f4SXin Li run_flac --force --verify --channel-map=none --no-padding --lax -o rt.flac $extra $f || die "ERROR" 261*600f14f4SXin Li echo $ECHO_N "decode... " $ECHO_C 262*600f14f4SXin Li run_flac --force --decode --channel-map=none -o rt.aiff $extra rt.flac || die "ERROR" 263*600f14f4SXin Li echo $ECHO_N "compare... " $ECHO_C 264*600f14f4SXin Li cmp $f rt.aiff || die "ERROR: file mismatch" 265*600f14f4SXin Li echo "OK" 266*600f14f4SXin Li rm -f rt.flac rt.aiff 267*600f14f4SXin Li} 268*600f14f4SXin Li 269*600f14f4SXin Lirt_test_autokf () 270*600f14f4SXin Li{ 271*600f14f4SXin Li f="$1" 272*600f14f4SXin Li extra="$2" 273*600f14f4SXin Li echo $ECHO_N "round-trip test ($f) encode... " $ECHO_C 274*600f14f4SXin Li run_flac --force --verify --no-padding --lax -o rt.flac $extra $f || die "ERROR" 275*600f14f4SXin Li echo $ECHO_N "decode... " $ECHO_C 276*600f14f4SXin Li run_flac --force --decode $extra rt.flac || die "ERROR" 277*600f14f4SXin Li echo $ECHO_N "compare... " $ECHO_C 278*600f14f4SXin Li cmp $f $3 || die "ERROR: file mismatch" 279*600f14f4SXin Li echo "OK" 280*600f14f4SXin Li rm -f rt.flac $3 281*600f14f4SXin Li} 282*600f14f4SXin Li 283*600f14f4SXin Li# assumes input file is WAVE; does not check the metadata-preserving features of flac-to-flac; that is checked later 284*600f14f4SXin Lirt_test_flac () 285*600f14f4SXin Li{ 286*600f14f4SXin Li f="$1" 287*600f14f4SXin Li extra="$2" 288*600f14f4SXin Li echo $ECHO_N "round-trip test ($f->flac->flac->wav) encode... " $ECHO_C 289*600f14f4SXin Li run_flac --force --verify --channel-map=none --no-padding --lax -o rt.flac $extra $f || die "ERROR" 290*600f14f4SXin Li echo $ECHO_N "re-encode... " $ECHO_C 291*600f14f4SXin Li run_flac --force --verify --lax -o rt2.flac rt.flac || die "ERROR" 292*600f14f4SXin Li echo $ECHO_N "decode... " $ECHO_C 293*600f14f4SXin Li run_flac --force --decode --channel-map=none -o rt.wav $extra rt2.flac || die "ERROR" 294*600f14f4SXin Li echo $ECHO_N "compare... " $ECHO_C 295*600f14f4SXin Li cmp $f rt.wav || die "ERROR: file mismatch" 296*600f14f4SXin Li echo "OK" 297*600f14f4SXin Li rm -f rt.wav rt.flac rt2.flac 298*600f14f4SXin Li} 299*600f14f4SXin Li 300*600f14f4SXin Li# assumes input file is WAVE; does not check the metadata-preserving features of flac-to-flac; that is checked later 301*600f14f4SXin Lirt_test_ogg_flac () 302*600f14f4SXin Li{ 303*600f14f4SXin Li f="$1" 304*600f14f4SXin Li extra="$2" 305*600f14f4SXin Li echo $ECHO_N "round-trip test ($f->oggflac->oggflac->wav) encode... " $ECHO_C 306*600f14f4SXin Li run_flac --force --verify --channel-map=none --no-padding --lax -o rt.oga --ogg $extra $f || die "ERROR" 307*600f14f4SXin Li echo $ECHO_N "re-encode... " $ECHO_C 308*600f14f4SXin Li run_flac --force --verify --lax -o rt2.oga --ogg rt.oga || die "ERROR" 309*600f14f4SXin Li echo $ECHO_N "decode... " $ECHO_C 310*600f14f4SXin Li run_flac --force --decode --channel-map=none -o rt.wav $extra rt2.oga || die "ERROR" 311*600f14f4SXin Li echo $ECHO_N "compare... " $ECHO_C 312*600f14f4SXin Li cmp $f rt.wav || die "ERROR: file mismatch" 313*600f14f4SXin Li echo "OK" 314*600f14f4SXin Li rm -f rt.wav rt.oga rt2.oga 315*600f14f4SXin Li} 316*600f14f4SXin Li 317*600f14f4SXin Lifor f in rt-*.raw ; do 318*600f14f4SXin Li rt_test_raw $f 319*600f14f4SXin Lidone 320*600f14f4SXin Lifor f in rt-*.wav ; do 321*600f14f4SXin Li rt_test_wav $f 322*600f14f4SXin Lidone 323*600f14f4SXin Lifor f in rt-*.w64 ; do 324*600f14f4SXin Li rt_test_w64 $f 325*600f14f4SXin Lidone 326*600f14f4SXin Lifor f in rt-*.rf64 ; do 327*600f14f4SXin Li rt_test_rf64 $f 328*600f14f4SXin Lidone 329*600f14f4SXin Lifor f in rt-*.aiff ; do 330*600f14f4SXin Li rt_test_aiff $f 331*600f14f4SXin Lidone 332*600f14f4SXin Lifor f in rt-*.wav ; do 333*600f14f4SXin Li rt_test_flac $f 334*600f14f4SXin Lidone 335*600f14f4SXin Liif [ $has_ogg = yes ] ; then 336*600f14f4SXin Li for f in rt-*.wav ; do 337*600f14f4SXin Li rt_test_ogg_flac $f 338*600f14f4SXin Li done 339*600f14f4SXin Lifi 340*600f14f4SXin Li 341*600f14f4SXin Li############################################################################ 342*600f14f4SXin Li# test --skip and --until 343*600f14f4SXin Li############################################################################ 344*600f14f4SXin Li 345*600f14f4SXin Li# 346*600f14f4SXin Li# first make some chopped-up raw files 347*600f14f4SXin Li# 348*600f14f4SXin Liecho "abcdefghijklmnopqrstuvwxyz1234567890ABCDEFGHIJKLMN" > master.raw 349*600f14f4SXin Lidd if=master.raw ibs=1 count=50 of=50c.raw 2>/dev/null || $dddie 350*600f14f4SXin Lidd if=master.raw ibs=1 skip=10 count=40 of=50c.skip10.raw 2>/dev/null || $dddie 351*600f14f4SXin Lidd if=master.raw ibs=1 skip=11 count=39 of=50c.skip11.raw 2>/dev/null || $dddie 352*600f14f4SXin Lidd if=master.raw ibs=1 skip=20 count=30 of=50c.skip20.raw 2>/dev/null || $dddie 353*600f14f4SXin Lidd if=master.raw ibs=1 skip=30 count=20 of=50c.skip30.raw 2>/dev/null || $dddie 354*600f14f4SXin Lidd if=master.raw ibs=1 skip=40 count=10 of=50c.skip40.raw 2>/dev/null || $dddie 355*600f14f4SXin Lidd if=master.raw ibs=1 count=10 of=50c.until10.raw 2>/dev/null || $dddie 356*600f14f4SXin Lidd if=master.raw ibs=1 count=20 of=50c.until20.raw 2>/dev/null || $dddie 357*600f14f4SXin Lidd if=master.raw ibs=1 count=30 of=50c.until30.raw 2>/dev/null || $dddie 358*600f14f4SXin Lidd if=master.raw ibs=1 count=39 of=50c.until39.raw 2>/dev/null || $dddie 359*600f14f4SXin Lidd if=master.raw ibs=1 count=40 of=50c.until40.raw 2>/dev/null || $dddie 360*600f14f4SXin Lidd if=master.raw ibs=1 skip=10 count=20 of=50c.skip10.until30.raw 2>/dev/null || $dddie 361*600f14f4SXin Lidd if=master.raw ibs=1 skip=10 count=29 of=50c.skip10.until39.raw 2>/dev/null || $dddie 362*600f14f4SXin Lidd if=master.raw ibs=1 skip=10 count=30 of=50c.skip10.until40.raw 2>/dev/null || $dddie 363*600f14f4SXin Lidd if=master.raw ibs=1 skip=20 count=10 of=50c.skip20.until30.raw 2>/dev/null || $dddie 364*600f14f4SXin Lidd if=master.raw ibs=1 skip=20 count=20 of=50c.skip20.until40.raw 2>/dev/null || $dddie 365*600f14f4SXin Li 366*600f14f4SXin Liwav_eopt="--force --verify --no-padding --lax" 367*600f14f4SXin Liwav_dopt="--force --decode" 368*600f14f4SXin Li 369*600f14f4SXin Liraw_eopt="$wav_eopt --force-raw-format --endian=big --sign=signed --sample-rate=10 --bps=8 --channels=1" 370*600f14f4SXin Liraw_dopt="$wav_dopt --force-raw-format --endian=big --sign=signed" 371*600f14f4SXin Li 372*600f14f4SXin Li# 373*600f14f4SXin Li# convert them to WAVE/AIFF/Ogg FLAC files 374*600f14f4SXin Li# 375*600f14f4SXin Liconvert_to_wav () 376*600f14f4SXin Li{ 377*600f14f4SXin Li run_flac "$2" $1.raw || die "ERROR converting $1.raw to WAVE" 378*600f14f4SXin Li run_flac "$3" $1.flac || die "ERROR converting $1.raw to WAVE" 379*600f14f4SXin Li} 380*600f14f4SXin Liconvert_to_wav 50c "$raw_eopt" "$wav_dopt" 381*600f14f4SXin Liconvert_to_wav 50c.skip10 "$raw_eopt" "$wav_dopt" 382*600f14f4SXin Liconvert_to_wav 50c.skip11 "$raw_eopt" "$wav_dopt" 383*600f14f4SXin Liconvert_to_wav 50c.skip20 "$raw_eopt" "$wav_dopt" 384*600f14f4SXin Liconvert_to_wav 50c.skip30 "$raw_eopt" "$wav_dopt" 385*600f14f4SXin Liconvert_to_wav 50c.skip40 "$raw_eopt" "$wav_dopt" 386*600f14f4SXin Liconvert_to_wav 50c.until10 "$raw_eopt" "$wav_dopt" 387*600f14f4SXin Liconvert_to_wav 50c.until20 "$raw_eopt" "$wav_dopt" 388*600f14f4SXin Liconvert_to_wav 50c.until30 "$raw_eopt" "$wav_dopt" 389*600f14f4SXin Liconvert_to_wav 50c.until39 "$raw_eopt" "$wav_dopt" 390*600f14f4SXin Liconvert_to_wav 50c.until40 "$raw_eopt" "$wav_dopt" 391*600f14f4SXin Liconvert_to_wav 50c.skip10.until30 "$raw_eopt" "$wav_dopt" 392*600f14f4SXin Liconvert_to_wav 50c.skip10.until39 "$raw_eopt" "$wav_dopt" 393*600f14f4SXin Liconvert_to_wav 50c.skip10.until40 "$raw_eopt" "$wav_dopt" 394*600f14f4SXin Liconvert_to_wav 50c.skip20.until30 "$raw_eopt" "$wav_dopt" 395*600f14f4SXin Liconvert_to_wav 50c.skip20.until40 "$raw_eopt" "$wav_dopt" 396*600f14f4SXin Li 397*600f14f4SXin Liconvert_to_aiff () 398*600f14f4SXin Li{ 399*600f14f4SXin Li run_flac "$2" $1.raw || die "ERROR converting $1.raw to AIFF" 400*600f14f4SXin Li run_flac "$3" $1.flac -o $1.aiff || die "ERROR converting $1.raw to AIFF" 401*600f14f4SXin Li} 402*600f14f4SXin Liconvert_to_aiff 50c "$raw_eopt" "$wav_dopt" 403*600f14f4SXin Liconvert_to_aiff 50c.skip10 "$raw_eopt" "$wav_dopt" 404*600f14f4SXin Liconvert_to_aiff 50c.skip11 "$raw_eopt" "$wav_dopt" 405*600f14f4SXin Liconvert_to_aiff 50c.skip20 "$raw_eopt" "$wav_dopt" 406*600f14f4SXin Liconvert_to_aiff 50c.skip30 "$raw_eopt" "$wav_dopt" 407*600f14f4SXin Liconvert_to_aiff 50c.skip40 "$raw_eopt" "$wav_dopt" 408*600f14f4SXin Liconvert_to_aiff 50c.until10 "$raw_eopt" "$wav_dopt" 409*600f14f4SXin Liconvert_to_aiff 50c.until20 "$raw_eopt" "$wav_dopt" 410*600f14f4SXin Liconvert_to_aiff 50c.until30 "$raw_eopt" "$wav_dopt" 411*600f14f4SXin Liconvert_to_aiff 50c.until39 "$raw_eopt" "$wav_dopt" 412*600f14f4SXin Liconvert_to_aiff 50c.until40 "$raw_eopt" "$wav_dopt" 413*600f14f4SXin Liconvert_to_aiff 50c.skip10.until30 "$raw_eopt" "$wav_dopt" 414*600f14f4SXin Liconvert_to_aiff 50c.skip10.until39 "$raw_eopt" "$wav_dopt" 415*600f14f4SXin Liconvert_to_aiff 50c.skip10.until40 "$raw_eopt" "$wav_dopt" 416*600f14f4SXin Liconvert_to_aiff 50c.skip20.until30 "$raw_eopt" "$wav_dopt" 417*600f14f4SXin Liconvert_to_aiff 50c.skip20.until40 "$raw_eopt" "$wav_dopt" 418*600f14f4SXin Li 419*600f14f4SXin Liconvert_to_ogg () 420*600f14f4SXin Li{ 421*600f14f4SXin Li run_flac "$wav_eopt" --ogg $1.wav || die "ERROR converting $1.raw to Ogg FLAC" 422*600f14f4SXin Li} 423*600f14f4SXin Liif [ $has_ogg = yes ] ; then 424*600f14f4SXin Li convert_to_ogg 50c 425*600f14f4SXin Li convert_to_ogg 50c.skip10 426*600f14f4SXin Li convert_to_ogg 50c.skip11 427*600f14f4SXin Li convert_to_ogg 50c.skip20 428*600f14f4SXin Li convert_to_ogg 50c.skip30 429*600f14f4SXin Li convert_to_ogg 50c.skip40 430*600f14f4SXin Li convert_to_ogg 50c.until10 431*600f14f4SXin Li convert_to_ogg 50c.until20 432*600f14f4SXin Li convert_to_ogg 50c.until30 433*600f14f4SXin Li convert_to_ogg 50c.until39 434*600f14f4SXin Li convert_to_ogg 50c.until40 435*600f14f4SXin Li convert_to_ogg 50c.skip10.until30 436*600f14f4SXin Li convert_to_ogg 50c.skip10.until39 437*600f14f4SXin Li convert_to_ogg 50c.skip10.until40 438*600f14f4SXin Li convert_to_ogg 50c.skip20.until30 439*600f14f4SXin Li convert_to_ogg 50c.skip20.until40 440*600f14f4SXin Lifi 441*600f14f4SXin Li 442*600f14f4SXin Litest_skip_until () 443*600f14f4SXin Li{ 444*600f14f4SXin Li in_fmt=$1 445*600f14f4SXin Li out_fmt=$2 446*600f14f4SXin Li 447*600f14f4SXin Li [ "$in_fmt" = wav ] || [ "$in_fmt" = aiff ] || [ "$in_fmt" = raw ] || [ "$in_fmt" = flac ] || [ "$in_fmt" = ogg ] || die "ERROR: internal error, bad 'in' format '$in_fmt'" 448*600f14f4SXin Li 449*600f14f4SXin Li [ "$out_fmt" = flac ] || [ "$out_fmt" = ogg ] || die "ERROR: internal error, bad 'out' format '$out_fmt'" 450*600f14f4SXin Li 451*600f14f4SXin Li if [ $in_fmt = raw ] ; then 452*600f14f4SXin Li eopt="$raw_eopt" 453*600f14f4SXin Li dopt="$raw_dopt" 454*600f14f4SXin Li else 455*600f14f4SXin Li eopt="$wav_eopt" 456*600f14f4SXin Li dopt="$wav_dopt" 457*600f14f4SXin Li fi 458*600f14f4SXin Li 459*600f14f4SXin Li if [ $in_fmt = flac -o $in_fmt = ogg ] && [ $out_fmt = flac -o $out_fmt = ogg ]; then 460*600f14f4SXin Li CMP=md5cmp 461*600f14f4SXin Li else 462*600f14f4SXin Li CMP=cmp 463*600f14f4SXin Li fi 464*600f14f4SXin Li 465*600f14f4SXin Li if [ $out_fmt = ogg ] ; then 466*600f14f4SXin Li eopt="--ogg $eopt" 467*600f14f4SXin Li fi 468*600f14f4SXin Li 469*600f14f4SXin Li # 470*600f14f4SXin Li # test --skip when encoding 471*600f14f4SXin Li # 472*600f14f4SXin Li 473*600f14f4SXin Li desc="($in_fmt<->$out_fmt)" 474*600f14f4SXin Li 475*600f14f4SXin Li echo $ECHO_N "testing --skip=# (encode) $desc... " $ECHO_C 476*600f14f4SXin Li run_flac $eopt --skip=10 -o z50c.skip10.$out_fmt 50c.$in_fmt || die "ERROR generating FLAC file $desc" 477*600f14f4SXin Li [ $in_fmt = $out_fmt ] || run_flac $dopt -o z50c.skip10.$in_fmt z50c.skip10.$out_fmt || die "ERROR decoding FLAC file $desc" 478*600f14f4SXin Li $CMP 50c.skip10.$in_fmt z50c.skip10.$in_fmt || die "ERROR: file mismatch for --skip=10 (encode) $desc" 479*600f14f4SXin Li rm -f z50c.skip10.$out_fmt z50c.skip10.$in_fmt 480*600f14f4SXin Li echo OK 481*600f14f4SXin Li 482*600f14f4SXin Li echo $ECHO_N "testing --skip=mm:ss (encode) $desc... " $ECHO_C 483*600f14f4SXin Li run_flac $eopt --skip=0:01 -o z50c.skip0_01.$out_fmt 50c.$in_fmt || die "ERROR generating FLAC file $desc" 484*600f14f4SXin Li 485*600f14f4SXin Li [ $in_fmt = $out_fmt ] || run_flac $dopt -o z50c.skip0_01.$in_fmt z50c.skip0_01.$out_fmt || die "ERROR decoding FLAC file $desc" 486*600f14f4SXin Li $CMP 50c.skip10.$in_fmt z50c.skip0_01.$in_fmt || die "ERROR: file mismatch for --skip=0:01 (encode) $desc" 487*600f14f4SXin Li rm -f z50c.skip0_01.$out_fmt z50c.skip0_01.$in_fmt 488*600f14f4SXin Li echo OK 489*600f14f4SXin Li 490*600f14f4SXin Li echo $ECHO_N "testing --skip=mm:ss.sss (encode) $desc... " $ECHO_C 491*600f14f4SXin Li run_flac $eopt --skip=0:01.1001 -o z50c.skip0_01.1001.$out_fmt 50c.$in_fmt || die "ERROR generating FLAC file $desc" 492*600f14f4SXin Li [ $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" 493*600f14f4SXin Li $CMP 50c.skip11.$in_fmt z50c.skip0_01.1001.$in_fmt || die "ERROR: file mismatch for --skip=0:01.1001 (encode) $desc" 494*600f14f4SXin Li rm -f z50c.skip0_01.1001.$out_fmt z50c.skip0_01.1001.$in_fmt 495*600f14f4SXin Li echo OK 496*600f14f4SXin Li 497*600f14f4SXin Li # 498*600f14f4SXin Li # test --skip when decoding 499*600f14f4SXin Li # 500*600f14f4SXin Li 501*600f14f4SXin Li 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" 502*600f14f4SXin Li 503*600f14f4SXin Li echo $ECHO_N "testing --skip=# (decode) $desc... " $ECHO_C 504*600f14f4SXin Li run_flac $dopt --skip=10 -o z50c.skip10.$in_fmt z50c.$out_fmt || die "ERROR decoding FLAC file $desc" 505*600f14f4SXin Li $CMP 50c.skip10.$in_fmt z50c.skip10.$in_fmt || die "ERROR: file mismatch for --skip=10 (decode) $desc" 506*600f14f4SXin Li rm -f z50c.skip10.$in_fmt 507*600f14f4SXin Li echo OK 508*600f14f4SXin Li 509*600f14f4SXin Li echo $ECHO_N "testing --skip=mm:ss (decode) $desc... " $ECHO_C 510*600f14f4SXin Li run_flac $dopt --skip=0:01 -o z50c.skip0_01.$in_fmt z50c.$out_fmt || die "ERROR decoding FLAC file $desc" 511*600f14f4SXin Li $CMP 50c.skip10.$in_fmt z50c.skip0_01.$in_fmt || die "ERROR: file mismatch for --skip=0:01 (decode) $desc" 512*600f14f4SXin Li rm -f z50c.skip0_01.$in_fmt 513*600f14f4SXin Li echo OK 514*600f14f4SXin Li 515*600f14f4SXin Li echo $ECHO_N "testing --skip=mm:ss.sss (decode) $desc... " $ECHO_C 516*600f14f4SXin Li run_flac $dopt --skip=0:01.1001 -o z50c.skip0_01.1001.$in_fmt z50c.$out_fmt || die "ERROR decoding FLAC file $desc" 517*600f14f4SXin Li $CMP 50c.skip11.$in_fmt z50c.skip0_01.1001.$in_fmt || die "ERROR: file mismatch for --skip=0:01.1001 (decode) $desc" 518*600f14f4SXin Li rm -f z50c.skip0_01.1001.$in_fmt 519*600f14f4SXin Li echo OK 520*600f14f4SXin Li 521*600f14f4SXin Li rm -f z50c.$out_fmt 522*600f14f4SXin Li 523*600f14f4SXin Li # 524*600f14f4SXin Li # test --until when encoding 525*600f14f4SXin Li # 526*600f14f4SXin Li 527*600f14f4SXin Li echo $ECHO_N "testing --until=# (encode) $desc... " $ECHO_C 528*600f14f4SXin Li run_flac $eopt --until=40 -o z50c.until40.$out_fmt 50c.$in_fmt || die "ERROR generating FLAC file $desc" 529*600f14f4SXin Li [ $in_fmt = $out_fmt ] || run_flac $dopt -o z50c.until40.$in_fmt z50c.until40.$out_fmt || die "ERROR decoding FLAC file $desc" 530*600f14f4SXin Li $CMP 50c.until40.$in_fmt z50c.until40.$in_fmt || die "ERROR: file mismatch for --until=40 (encode) $desc" 531*600f14f4SXin Li rm -f z50c.until40.$out_fmt z50c.until40.$in_fmt 532*600f14f4SXin Li echo OK 533*600f14f4SXin Li 534*600f14f4SXin Li echo $ECHO_N "testing --until=mm:ss (encode) $desc... " $ECHO_C 535*600f14f4SXin Li run_flac $eopt --until=0:04 -o z50c.until0_04.$out_fmt 50c.$in_fmt || die "ERROR generating FLAC file $desc" 536*600f14f4SXin Li [ $in_fmt = $out_fmt ] || run_flac $dopt -o z50c.until0_04.$in_fmt z50c.until0_04.$out_fmt || die "ERROR decoding FLAC file $desc" 537*600f14f4SXin Li $CMP 50c.until40.$in_fmt z50c.until0_04.$in_fmt || die "ERROR: file mismatch for --until=0:04 (encode) $desc" 538*600f14f4SXin Li rm -f z50c.until0_04.$out_fmt z50c.until0_04.$in_fmt 539*600f14f4SXin Li echo OK 540*600f14f4SXin Li 541*600f14f4SXin Li echo $ECHO_N "testing --until=mm:ss.sss (encode) $desc... " $ECHO_C 542*600f14f4SXin Li run_flac $eopt --until=0:03.9001 -o z50c.until0_03.9001.$out_fmt 50c.$in_fmt || die "ERROR generating FLAC file $desc" 543*600f14f4SXin Li [ $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" 544*600f14f4SXin Li $CMP 50c.until39.$in_fmt z50c.until0_03.9001.$in_fmt || die "ERROR: file mismatch for --until=0:03.9001 (encode) $desc" 545*600f14f4SXin Li rm -f z50c.until0_03.9001.$out_fmt z50c.until0_03.9001.$in_fmt 546*600f14f4SXin Li echo OK 547*600f14f4SXin Li 548*600f14f4SXin Li echo $ECHO_N "testing --until=-# (encode) $desc... " $ECHO_C 549*600f14f4SXin Li run_flac $eopt --until=-10 -o z50c.until-10.$out_fmt 50c.$in_fmt || die "ERROR generating FLAC file $desc" 550*600f14f4SXin Li [ $in_fmt = $out_fmt ] || run_flac $dopt -o z50c.until-10.$in_fmt z50c.until-10.$out_fmt || die "ERROR decoding FLAC file $desc" 551*600f14f4SXin Li $CMP 50c.until40.$in_fmt z50c.until-10.$in_fmt || die "ERROR: file mismatch for --until=-10 (encode) $desc" 552*600f14f4SXin Li rm -f z50c.until-10.$out_fmt z50c.until-10.$in_fmt 553*600f14f4SXin Li echo OK 554*600f14f4SXin Li 555*600f14f4SXin Li echo $ECHO_N "testing --until=-mm:ss (encode) $desc... " $ECHO_C 556*600f14f4SXin Li run_flac $eopt --until=-0:01 -o z50c.until-0_01.$out_fmt 50c.$in_fmt || die "ERROR generating FLAC file $desc" 557*600f14f4SXin Li [ $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" 558*600f14f4SXin Li $CMP 50c.until40.$in_fmt z50c.until-0_01.$in_fmt || die "ERROR: file mismatch for --until=-0:01 (encode) $desc" 559*600f14f4SXin Li rm -f z50c.until-0_01.$out_fmt z50c.until-0_01.$in_fmt 560*600f14f4SXin Li echo OK 561*600f14f4SXin Li 562*600f14f4SXin Li echo $ECHO_N "testing --until=-mm:ss.sss (encode) $desc... " $ECHO_C 563*600f14f4SXin Li run_flac $eopt --until=-0:01.1001 -o z50c.until-0_01.1001.$out_fmt 50c.$in_fmt || die "ERROR generating FLAC file $desc" 564*600f14f4SXin Li [ $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" 565*600f14f4SXin Li $CMP 50c.until39.$in_fmt z50c.until-0_01.1001.$in_fmt || die "ERROR: file mismatch for --until=-0:01.1001 (encode) $desc" 566*600f14f4SXin Li rm -f z50c.until-0_01.1001.$out_fmt z50c.until-0_01.1001.$in_fmt 567*600f14f4SXin Li echo OK 568*600f14f4SXin Li 569*600f14f4SXin Li # 570*600f14f4SXin Li # test --until when decoding 571*600f14f4SXin Li # 572*600f14f4SXin Li 573*600f14f4SXin Li 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" 574*600f14f4SXin Li 575*600f14f4SXin Li echo $ECHO_N "testing --until=# (decode) $desc... " $ECHO_C 576*600f14f4SXin Li run_flac $dopt --until=40 -o z50c.until40.$in_fmt z50c.$out_fmt || die "ERROR decoding FLAC file $desc" 577*600f14f4SXin Li $CMP 50c.until40.$in_fmt z50c.until40.$in_fmt || die "ERROR: file mismatch for --until=40 (decode) $desc" 578*600f14f4SXin Li rm -f z50c.until40.$in_fmt 579*600f14f4SXin Li echo OK 580*600f14f4SXin Li 581*600f14f4SXin Li echo $ECHO_N "testing --until=mm:ss (decode) $desc... " $ECHO_C 582*600f14f4SXin Li run_flac $dopt --until=0:04 -o z50c.until0_04.$in_fmt z50c.$out_fmt || die "ERROR decoding FLAC file $desc" 583*600f14f4SXin Li $CMP 50c.until40.$in_fmt z50c.until0_04.$in_fmt || die "ERROR: file mismatch for --until=0:04 (decode) $desc" 584*600f14f4SXin Li rm -f z50c.until0_04.$in_fmt 585*600f14f4SXin Li echo OK 586*600f14f4SXin Li 587*600f14f4SXin Li echo $ECHO_N "testing --until=mm:ss.sss (decode) $desc... " $ECHO_C 588*600f14f4SXin Li run_flac $dopt --until=0:03.9001 -o z50c.until0_03.9001.$in_fmt z50c.$out_fmt || die "ERROR decoding FLAC file $desc" 589*600f14f4SXin Li $CMP 50c.until39.$in_fmt z50c.until0_03.9001.$in_fmt || die "ERROR: file mismatch for --until=0:03.9001 (decode) $desc" 590*600f14f4SXin Li rm -f z50c.until0_03.9001.$in_fmt 591*600f14f4SXin Li echo OK 592*600f14f4SXin Li 593*600f14f4SXin Li echo $ECHO_N "testing --until=-# (decode) $desc... " $ECHO_C 594*600f14f4SXin Li run_flac $dopt --until=-10 -o z50c.until-10.$in_fmt z50c.$out_fmt || die "ERROR decoding FLAC file $desc" 595*600f14f4SXin Li $CMP 50c.until40.$in_fmt z50c.until-10.$in_fmt || die "ERROR: file mismatch for --until=-10 (decode) $desc" 596*600f14f4SXin Li rm -f z50c.until-10.$in_fmt 597*600f14f4SXin Li echo OK 598*600f14f4SXin Li 599*600f14f4SXin Li echo $ECHO_N "testing --until=-mm:ss (decode) $desc... " $ECHO_C 600*600f14f4SXin Li run_flac $dopt --until=-0:01 -o z50c.until-0_01.$in_fmt z50c.$out_fmt || die "ERROR decoding FLAC file $desc" 601*600f14f4SXin Li $CMP 50c.until40.$in_fmt z50c.until-0_01.$in_fmt || die "ERROR: file mismatch for --until=-0:01 (decode) $desc" 602*600f14f4SXin Li rm -f z50c.until-0_01.$in_fmt 603*600f14f4SXin Li echo OK 604*600f14f4SXin Li 605*600f14f4SXin Li echo $ECHO_N "testing --until=-mm:ss.sss (decode) $desc... " $ECHO_C 606*600f14f4SXin Li run_flac $dopt --until=-0:01.1001 -o z50c.until-0_01.1001.$in_fmt z50c.$out_fmt || die "ERROR decoding FLAC file $desc" 607*600f14f4SXin Li $CMP 50c.until39.$in_fmt z50c.until-0_01.1001.$in_fmt || die "ERROR: file mismatch for --until=-0:01.1001 (decode) $desc" 608*600f14f4SXin Li rm -f z50c.until-0_01.1001.$in_fmt 609*600f14f4SXin Li echo OK 610*600f14f4SXin Li 611*600f14f4SXin Li rm -f z50c.$out_fmt 612*600f14f4SXin Li 613*600f14f4SXin Li # 614*600f14f4SXin Li # test --skip and --until when encoding 615*600f14f4SXin Li # 616*600f14f4SXin Li 617*600f14f4SXin Li echo $ECHO_N "testing --skip=10 --until=# (encode) $desc... " $ECHO_C 618*600f14f4SXin Li run_flac $eopt --skip=10 --until=40 -o z50c.skip10.until40.$out_fmt 50c.$in_fmt || die "ERROR generating FLAC file $desc" 619*600f14f4SXin Li [ $in_fmt = $out_fmt ] || run_flac $dopt -o z50c.skip10.until40.$in_fmt z50c.skip10.until40.$out_fmt || die "ERROR decoding FLAC file $desc" 620*600f14f4SXin Li $CMP 50c.skip10.until40.$in_fmt z50c.skip10.until40.$in_fmt || die "ERROR: file mismatch for --skip=10 --until=40 (encode) $desc" 621*600f14f4SXin Li rm -f z50c.skip10.until40.$out_fmt z50c.skip10.until40.$in_fmt 622*600f14f4SXin Li echo OK 623*600f14f4SXin Li 624*600f14f4SXin Li echo $ECHO_N "testing --skip=10 --until=mm:ss (encode) $desc... " $ECHO_C 625*600f14f4SXin Li run_flac $eopt --skip=10 --until=0:04 -o z50c.skip10.until0_04.$out_fmt 50c.$in_fmt || die "ERROR generating FLAC file $desc" 626*600f14f4SXin Li [ $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" 627*600f14f4SXin Li $CMP 50c.skip10.until40.$in_fmt z50c.skip10.until0_04.$in_fmt || die "ERROR: file mismatch for --skip=10 --until=0:04 (encode) $desc" 628*600f14f4SXin Li rm -f z50c.skip10.until0_04.$out_fmt z50c.skip10.until0_04.$in_fmt 629*600f14f4SXin Li echo OK 630*600f14f4SXin Li 631*600f14f4SXin Li echo $ECHO_N "testing --skip=10 --until=mm:ss.sss (encode) $desc... " $ECHO_C 632*600f14f4SXin Li 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" 633*600f14f4SXin Li [ $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" 634*600f14f4SXin Li $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" 635*600f14f4SXin Li rm -f z50c.skip10.until0_03.9001.$out_fmt z50c.skip10.until0_03.9001.$in_fmt 636*600f14f4SXin Li echo OK 637*600f14f4SXin Li 638*600f14f4SXin Li echo $ECHO_N "testing --skip=10 --until=+# (encode) $desc... " $ECHO_C 639*600f14f4SXin Li run_flac $eopt --skip=10 --until=+30 -o z50c.skip10.until+30.$out_fmt 50c.$in_fmt || die "ERROR generating FLAC file $desc" 640*600f14f4SXin Li [ $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" 641*600f14f4SXin Li $CMP 50c.skip10.until40.$in_fmt z50c.skip10.until+30.$in_fmt || die "ERROR: file mismatch for --skip=10 --until=+30 (encode) $desc" 642*600f14f4SXin Li rm -f z50c.skip10.until+30.$out_fmt z50c.skip10.until+30.$in_fmt 643*600f14f4SXin Li echo OK 644*600f14f4SXin Li 645*600f14f4SXin Li echo $ECHO_N "testing --skip=10 --until=+mm:ss (encode) $desc... " $ECHO_C 646*600f14f4SXin Li 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" 647*600f14f4SXin Li [ $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" 648*600f14f4SXin Li $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" 649*600f14f4SXin Li rm -f z50c.skip10.until+0_03.$out_fmt z50c.skip10.until+0_03.$in_fmt 650*600f14f4SXin Li echo OK 651*600f14f4SXin Li 652*600f14f4SXin Li echo $ECHO_N "testing --skip=10 --until=+mm:ss.sss (encode) $desc... " $ECHO_C 653*600f14f4SXin Li 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" 654*600f14f4SXin Li [ $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" 655*600f14f4SXin Li $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" 656*600f14f4SXin Li rm -f z50c.skip10.until+0_02.9001.$out_fmt z50c.skip10.until+0_02.9001.$in_fmt 657*600f14f4SXin Li echo OK 658*600f14f4SXin Li 659*600f14f4SXin Li echo $ECHO_N "testing --skip=10 --until=-# (encode) $desc... " $ECHO_C 660*600f14f4SXin Li run_flac $eopt --skip=10 --until=-10 -o z50c.skip10.until-10.$out_fmt 50c.$in_fmt || die "ERROR generating FLAC file $desc" 661*600f14f4SXin Li [ $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" 662*600f14f4SXin Li $CMP 50c.skip10.until40.$in_fmt z50c.skip10.until-10.$in_fmt || die "ERROR: file mismatch for --skip=10 --until=-10 (encode) $desc" 663*600f14f4SXin Li rm -f z50c.skip10.until-10.$out_fmt z50c.skip10.until-10.$in_fmt 664*600f14f4SXin Li echo OK 665*600f14f4SXin Li 666*600f14f4SXin Li echo $ECHO_N "testing --skip=10 --until=-mm:ss (encode) $desc... " $ECHO_C 667*600f14f4SXin Li 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" 668*600f14f4SXin Li [ $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" 669*600f14f4SXin Li $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" 670*600f14f4SXin Li rm -f z50c.skip10.until-0_01.$out_fmt z50c.skip10.until-0_01.$in_fmt 671*600f14f4SXin Li echo OK 672*600f14f4SXin Li 673*600f14f4SXin Li echo $ECHO_N "testing --skip=10 --until=-mm:ss.sss (encode) $desc... " $ECHO_C 674*600f14f4SXin Li 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" 675*600f14f4SXin Li [ $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" 676*600f14f4SXin Li $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" 677*600f14f4SXin Li rm -f z50c.skip10.until-0_01.1001.$out_fmt z50c.skip10.until-0_01.1001.$in_fmt 678*600f14f4SXin Li echo OK 679*600f14f4SXin Li 680*600f14f4SXin Li # 681*600f14f4SXin Li # test --skip and --until when decoding 682*600f14f4SXin Li # 683*600f14f4SXin Li 684*600f14f4SXin Li 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" 685*600f14f4SXin Li 686*600f14f4SXin Li 687*600f14f4SXin Li echo $ECHO_N "testing --skip=10 --until=# (decode) $desc... " $ECHO_C 688*600f14f4SXin Li run_flac $dopt --skip=10 --until=40 -o z50c.skip10.until40.$in_fmt z50c.$out_fmt || die "ERROR decoding FLAC file $desc" 689*600f14f4SXin Li $CMP 50c.skip10.until40.$in_fmt z50c.skip10.until40.$in_fmt || die "ERROR: file mismatch for --skip=10 --until=40 (decode) $desc" 690*600f14f4SXin Li rm -f z50c.skip10.until40.$in_fmt 691*600f14f4SXin Li echo OK 692*600f14f4SXin Li 693*600f14f4SXin Li echo $ECHO_N "testing --skip=10 --until=mm:ss (decode) $desc... " $ECHO_C 694*600f14f4SXin Li run_flac $dopt --skip=10 --until=0:04 -o z50c.skip10.until0_04.$in_fmt z50c.$out_fmt || die "ERROR decoding FLAC file $desc" 695*600f14f4SXin Li $CMP 50c.skip10.until40.$in_fmt z50c.skip10.until0_04.$in_fmt || die "ERROR: file mismatch for --skip=10 --until=0:04 (decode) $desc" 696*600f14f4SXin Li rm -f z50c.skip10.until0_04.$in_fmt 697*600f14f4SXin Li echo OK 698*600f14f4SXin Li 699*600f14f4SXin Li echo $ECHO_N "testing --skip=10 --until=mm:ss.sss (decode) $desc... " $ECHO_C 700*600f14f4SXin Li 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" 701*600f14f4SXin Li $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" 702*600f14f4SXin Li rm -f z50c.skip10.until0_03.9001.$in_fmt 703*600f14f4SXin Li echo OK 704*600f14f4SXin Li 705*600f14f4SXin Li echo $ECHO_N "testing --skip=10 --until=-# (decode) $desc... " $ECHO_C 706*600f14f4SXin Li run_flac $dopt --skip=10 --until=-10 -o z50c.skip10.until-10.$in_fmt z50c.$out_fmt || die "ERROR decoding FLAC file $desc" 707*600f14f4SXin Li $CMP 50c.skip10.until40.$in_fmt z50c.skip10.until-10.$in_fmt || die "ERROR: file mismatch for --skip=10 --until=-10 (decode) $desc" 708*600f14f4SXin Li rm -f z50c.skip10.until-10.$in_fmt 709*600f14f4SXin Li echo OK 710*600f14f4SXin Li 711*600f14f4SXin Li echo $ECHO_N "testing --skip=10 --until=-mm:ss (decode) $desc... " $ECHO_C 712*600f14f4SXin Li 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" 713*600f14f4SXin Li $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" 714*600f14f4SXin Li rm -f z50c.skip10.until-0_01.$in_fmt 715*600f14f4SXin Li echo OK 716*600f14f4SXin Li 717*600f14f4SXin Li echo $ECHO_N "testing --skip=10 --until=-mm:ss.sss (decode) $desc... " $ECHO_C 718*600f14f4SXin Li 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" 719*600f14f4SXin Li $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" 720*600f14f4SXin Li rm -f z50c.skip10.until-0_01.1001.$in_fmt 721*600f14f4SXin Li echo OK 722*600f14f4SXin Li 723*600f14f4SXin Li rm -f z50c.$out_fmt 724*600f14f4SXin Li} 725*600f14f4SXin Li 726*600f14f4SXin Litest_skip_until raw flac 727*600f14f4SXin Litest_skip_until wav flac 728*600f14f4SXin Litest_skip_until aiff flac 729*600f14f4SXin Litest_skip_until flac flac 730*600f14f4SXin Li#@@@if [ $has_ogg = yes ] ; then 731*600f14f4SXin Li#@@@ #@@@ doesn't work yet because md5cmp doesn't work because metaflac doesn't work on ogg flac yet 732*600f14f4SXin Li#@@@ test_skip_until ogg flac 733*600f14f4SXin Li#@@@fi 734*600f14f4SXin Li 735*600f14f4SXin Liif [ $has_ogg = yes ] ; then 736*600f14f4SXin Li test_skip_until raw ogg 737*600f14f4SXin Li test_skip_until wav ogg 738*600f14f4SXin Li test_skip_until aiff ogg 739*600f14f4SXin Li #@@@ doesn't work yet because md5cmp doesn't work because metaflac doesn't work on ogg flac yet 740*600f14f4SXin Li #@@@test_skip_until flac ogg 741*600f14f4SXin Li #@@@test_skip_until ogg ogg 742*600f14f4SXin Lifi 743*600f14f4SXin Li 744*600f14f4SXin Liecho "testing seek extremes:" 745*600f14f4SXin Li 746*600f14f4SXin Lirun_flac --verify --force --no-padding --force-raw-format --endian=big --sign=signed --sample-rate=44100 --bps=16 --channels=2 --blocksize=576 noise.raw || die "ERROR generating FLAC file" 747*600f14f4SXin Li 748*600f14f4SXin Liif [ $is_win = no ] ; then 749*600f14f4SXin Li total_noise_cdda_samples="$(run_metaflac --show-total-samples noise.flac)" 750*600f14f4SXin Li [ $? = 0 ] || die "ERROR getting total sample count from noise.flac" 751*600f14f4SXin Lielse 752*600f14f4SXin Li # some flavors of cygwin don't seem to treat the \x0d as a word 753*600f14f4SXin Li # separator, so we hard code it. we'll just have to fix it later 754*600f14f4SXin Li # if we change the way noise.flac is made. 755*600f14f4SXin Li total_noise_cdda_samples=393216 756*600f14f4SXin Lifi 757*600f14f4SXin Li 758*600f14f4SXin Liecho $ECHO_N "testing --skip=0... " $ECHO_C 759*600f14f4SXin Lirun_flac $wav_dopt --skip=0 -o z.wav noise.flac || die "ERROR decoding FLAC file noise.flac" 760*600f14f4SXin Liecho OK 761*600f14f4SXin Li 762*600f14f4SXin Lifor delta in 2 1 ; do 763*600f14f4SXin Li n=$((total_noise_cdda_samples - delta)) 764*600f14f4SXin Li echo $ECHO_N "testing --skip=$n... " $ECHO_C 765*600f14f4SXin Li run_flac $wav_dopt --skip=$n -o z.wav noise.flac || die "ERROR decoding FLAC file noise.flac" 766*600f14f4SXin Li echo OK 767*600f14f4SXin Lidone 768*600f14f4SXin Li 769*600f14f4SXin Lirm noise.flac z.wav 770*600f14f4SXin Li 771*600f14f4SXin Li############################################################################ 772*600f14f4SXin Li# test --input-size 773*600f14f4SXin Li############################################################################ 774*600f14f4SXin Li 775*600f14f4SXin Li#@@@ cat will not work on old cygwin, need to fix 776*600f14f4SXin Liif [ $is_win = no ] ; then 777*600f14f4SXin Li echo $ECHO_N "testing --input-size=50 --skip=10... " $ECHO_C 778*600f14f4SXin Li run_flac $raw_eopt --input-size=50 --skip=10 -o z50c.skip10.flac - < 50c.raw || die "ERROR generating FLAC file" 779*600f14f4SXin Li run_flac $raw_dopt -o z50c.skip10.raw z50c.skip10.flac || die "ERROR decoding FLAC file" 780*600f14f4SXin Li cmp 50c.skip10.raw z50c.skip10.raw || die "ERROR: file mismatch for --input-size=50 --skip=10" 781*600f14f4SXin Li rm -f z50c.skip10.raw z50c.skip10.flac 782*600f14f4SXin Li echo OK 783*600f14f4SXin Lifi 784*600f14f4SXin Li 785*600f14f4SXin Li############################################################################ 786*600f14f4SXin Li# test --output-prefix 787*600f14f4SXin Li############################################################################ 788*600f14f4SXin Li 789*600f14f4SXin Liin_dir=./tmp_in 790*600f14f4SXin Liout_dir=./tmp_out 791*600f14f4SXin Limkdir $in_dir $out_dir || die "ERROR failed to create temp directories" 792*600f14f4SXin Li 793*600f14f4SXin Licp 50c.raw 50c.flac $in_dir 794*600f14f4SXin Li 795*600f14f4SXin Li# 796*600f14f4SXin Li# test --output-prefix when encoding 797*600f14f4SXin Li# 798*600f14f4SXin Li 799*600f14f4SXin Liecho $ECHO_N "testing --output-prefix=$out_dir/ (encode)... " $ECHO_C 800*600f14f4SXin Lirun_flac $raw_eopt --output-prefix=$out_dir/ $in_dir/50c.raw || die "ERROR generating FLAC file in $out_dir (encode)" 801*600f14f4SXin Li[ -f $out_dir/50c.flac ] || die "ERROR FLAC file not in $out_dir (encode)" 802*600f14f4SXin Lirun_flac $raw_dopt $out_dir/50c.flac || die "ERROR decoding FLAC file (encode)" 803*600f14f4SXin Li[ -f $out_dir/50c.raw ] || die "ERROR RAW file not in $out_dir (encode)" 804*600f14f4SXin Licmp 50c.raw $out_dir/50c.raw || die "ERROR: file mismatch for --output-prefix=$out_dir (encode)" 805*600f14f4SXin Lirm -f $out_dir/50c.flac $out_dir/50c.raw 806*600f14f4SXin Liecho OK 807*600f14f4SXin Li 808*600f14f4SXin Li# 809*600f14f4SXin Li# test --ouput-prefix when decoding 810*600f14f4SXin Li# 811*600f14f4SXin Li 812*600f14f4SXin Liecho $ECHO_N "testing --output-prefix=$out_dir/ (decode)... " $ECHO_C 813*600f14f4SXin Lirun_flac $raw_dopt --output-prefix=$out_dir/ $in_dir/50c.flac || die "ERROR deocding FLAC file in $out_dir (decode)" 814*600f14f4SXin Li[ -f $out_dir/50c.raw ] || die "ERROR RAW file not in $out_dir (decode)" 815*600f14f4SXin Lirun_flac $raw_eopt $out_dir/50c.raw || die "ERROR generating FLAC file (decode)" 816*600f14f4SXin Li[ -f $out_dir/50c.flac ] || die "ERROR FLAC file not in $out_dir (decode)" 817*600f14f4SXin Licmp 50c.flac $out_dir/50c.flac || die "ERROR: file mismatch for --output-prefix=$out_dir (decode)" 818*600f14f4SXin Lirm -f $out_dir/50c.flac $out_dir/50c.raw 819*600f14f4SXin Liecho OK 820*600f14f4SXin Li 821*600f14f4SXin Lirm -rf $in_dir $out_dir 822*600f14f4SXin Li 823*600f14f4SXin Li############################################################################ 824*600f14f4SXin Li# test --cue 825*600f14f4SXin Li############################################################################ 826*600f14f4SXin Li 827*600f14f4SXin Li# 828*600f14f4SXin Li# create the cue sheet 829*600f14f4SXin Li# 830*600f14f4SXin Licuesheet=cuetest.cue 831*600f14f4SXin Licat > $cuesheet << EOF 832*600f14f4SXin LiCATALOG 1234567890123 833*600f14f4SXin LiFILE "blah" WAVE 834*600f14f4SXin Li TRACK 01 AUDIO 835*600f14f4SXin Li INDEX 01 0 836*600f14f4SXin Li INDEX 02 10 837*600f14f4SXin Li INDEX 03 20 838*600f14f4SXin Li TRACK 02 AUDIO 839*600f14f4SXin Li INDEX 01 30 840*600f14f4SXin Li TRACK 04 AUDIO 841*600f14f4SXin Li INDEX 01 40 842*600f14f4SXin LiEOF 843*600f14f4SXin Li 844*600f14f4SXin Litest_cue () 845*600f14f4SXin Li{ 846*600f14f4SXin Li in_fmt=$1 847*600f14f4SXin Li out_fmt=$2 848*600f14f4SXin Li 849*600f14f4SXin Li [ "$in_fmt" = wav ] || [ "$in_fmt" = aiff ] || [ "$in_fmt" = raw ] || [ "$in_fmt" = flac ] || [ "$in_fmt" = ogg ] || die "ERROR: internal error, bad 'in' format '$in_fmt'" 850*600f14f4SXin Li 851*600f14f4SXin Li [ "$out_fmt" = flac ] || [ "$out_fmt" = ogg ] || die "ERROR: internal error, bad 'out' format '$out_fmt'" 852*600f14f4SXin Li 853*600f14f4SXin Li if [ $in_fmt = raw ] ; then 854*600f14f4SXin Li eopt="$raw_eopt" 855*600f14f4SXin Li dopt="$raw_dopt" 856*600f14f4SXin Li else 857*600f14f4SXin Li eopt="$wav_eopt" 858*600f14f4SXin Li dopt="$wav_dopt" 859*600f14f4SXin Li fi 860*600f14f4SXin Li 861*600f14f4SXin Li if [ $in_fmt = flac -o $in_fmt = ogg ] && [ $out_fmt = flac -o $out_fmt = ogg ]; then 862*600f14f4SXin Li CMP=md5cmp 863*600f14f4SXin Li else 864*600f14f4SXin Li CMP=cmp 865*600f14f4SXin Li fi 866*600f14f4SXin Li 867*600f14f4SXin Li if [ $out_fmt = ogg ] ; then 868*600f14f4SXin Li eopt="--ogg $eopt" 869*600f14f4SXin Li fi 870*600f14f4SXin Li 871*600f14f4SXin Li desc="($in_fmt<->$out_fmt)" 872*600f14f4SXin Li 873*600f14f4SXin Li # 874*600f14f4SXin Li # for this we need just need just one FLAC file; --cue only works while decoding 875*600f14f4SXin Li # 876*600f14f4SXin Li run_flac $eopt --cuesheet=$cuesheet -o z50c.cue.$out_fmt 50c.$in_fmt || die "ERROR generating FLAC file $desc" 877*600f14f4SXin Li 878*600f14f4SXin Li # To make it easy to translate from cue point to sample numbers, the 879*600f14f4SXin Li # file has a sample rate of 10 Hz and a cuesheet like so: 880*600f14f4SXin Li # 881*600f14f4SXin Li # TRACK 01, INDEX 01 : 0:00.00 -> sample 0 882*600f14f4SXin Li # TRACK 01, INDEX 02 : 0:01.00 -> sample 10 883*600f14f4SXin Li # TRACK 01, INDEX 03 : 0:02.00 -> sample 20 884*600f14f4SXin Li # TRACK 02, INDEX 01 : 0:03.00 -> sample 30 885*600f14f4SXin Li # TRACK 04, INDEX 01 : 0:04.00 -> sample 40 886*600f14f4SXin Li # 887*600f14f4SXin Li echo $ECHO_N "testing --cue=- $desc... " $ECHO_C 888*600f14f4SXin Li run_flac $dopt -o z50c.cued.$in_fmt --cue=- z50c.cue.$out_fmt || die "ERROR decoding FLAC file $desc" 889*600f14f4SXin Li $CMP 50c.$in_fmt z50c.cued.$in_fmt || die "ERROR: file mismatch for --cue=- $desc" 890*600f14f4SXin Li rm -f z50c.cued.$in_fmt 891*600f14f4SXin Li echo OK 892*600f14f4SXin Li 893*600f14f4SXin Li echo $ECHO_N "testing --cue=1.0 $desc... " $ECHO_C 894*600f14f4SXin Li run_flac $dopt -o z50c.cued.$in_fmt --cue=1.0 z50c.cue.$out_fmt || die "ERROR decoding FLAC file $desc" 895*600f14f4SXin Li $CMP 50c.$in_fmt z50c.cued.$in_fmt || die "ERROR: file mismatch for --cue=1.0 $desc" 896*600f14f4SXin Li rm -f z50c.cued.$in_fmt 897*600f14f4SXin Li echo OK 898*600f14f4SXin Li 899*600f14f4SXin Li echo $ECHO_N "testing --cue=1.0- $desc... " $ECHO_C 900*600f14f4SXin Li run_flac $dopt -o z50c.cued.$in_fmt --cue=1.0- z50c.cue.$out_fmt || die "ERROR decoding FLAC file $desc" 901*600f14f4SXin Li $CMP 50c.$in_fmt z50c.cued.$in_fmt || die "ERROR: file mismatch for --cue=1.0- $desc" 902*600f14f4SXin Li rm -f z50c.cued.$in_fmt 903*600f14f4SXin Li echo OK 904*600f14f4SXin Li 905*600f14f4SXin Li echo $ECHO_N "testing --cue=1.1 $desc... " $ECHO_C 906*600f14f4SXin Li run_flac $dopt -o z50c.cued.$in_fmt --cue=1.1 z50c.cue.$out_fmt || die "ERROR decoding FLAC file $desc" 907*600f14f4SXin Li $CMP 50c.$in_fmt z50c.cued.$in_fmt || die "ERROR: file mismatch for --cue=1.1 $desc" 908*600f14f4SXin Li rm -f z50c.cued.$in_fmt 909*600f14f4SXin Li echo OK 910*600f14f4SXin Li 911*600f14f4SXin Li echo $ECHO_N "testing --cue=1.1- $desc... " $ECHO_C 912*600f14f4SXin Li run_flac $dopt -o z50c.cued.$in_fmt --cue=1.1- z50c.cue.$out_fmt || die "ERROR decoding FLAC file $desc" 913*600f14f4SXin Li $CMP 50c.$in_fmt z50c.cued.$in_fmt || die "ERROR: file mismatch for --cue=1.1- $desc" 914*600f14f4SXin Li rm -f z50c.cued.$in_fmt 915*600f14f4SXin Li echo OK 916*600f14f4SXin Li 917*600f14f4SXin Li echo $ECHO_N "testing --cue=1.2 $desc... " $ECHO_C 918*600f14f4SXin Li run_flac $dopt -o z50c.cued.$in_fmt --cue=1.2 z50c.cue.$out_fmt || die "ERROR decoding FLAC file $desc" 919*600f14f4SXin Li $CMP 50c.skip10.$in_fmt z50c.cued.$in_fmt || die "ERROR: file mismatch for --cue=1.2 $desc" 920*600f14f4SXin Li rm -f z50c.cued.$in_fmt 921*600f14f4SXin Li echo OK 922*600f14f4SXin Li 923*600f14f4SXin Li echo $ECHO_N "testing --cue=1.2- $desc... " $ECHO_C 924*600f14f4SXin Li run_flac $dopt -o z50c.cued.$in_fmt --cue=1.2- z50c.cue.$out_fmt || die "ERROR decoding FLAC file $desc" 925*600f14f4SXin Li $CMP 50c.skip10.$in_fmt z50c.cued.$in_fmt || die "ERROR: file mismatch for --cue=1.2- $desc" 926*600f14f4SXin Li rm -f z50c.cued.$in_fmt 927*600f14f4SXin Li echo OK 928*600f14f4SXin Li 929*600f14f4SXin Li echo $ECHO_N "testing --cue=1.4 $desc... " $ECHO_C 930*600f14f4SXin Li run_flac $dopt -o z50c.cued.$in_fmt --cue=1.4 z50c.cue.$out_fmt || die "ERROR decoding FLAC file $desc" 931*600f14f4SXin Li $CMP 50c.skip20.$in_fmt z50c.cued.$in_fmt || die "ERROR: file mismatch for --cue=1.4 $desc" 932*600f14f4SXin Li rm -f z50c.cued.$in_fmt 933*600f14f4SXin Li echo OK 934*600f14f4SXin Li 935*600f14f4SXin Li echo $ECHO_N "testing --cue=1.4- $desc... " $ECHO_C 936*600f14f4SXin Li run_flac $dopt -o z50c.cued.$in_fmt --cue=1.4- z50c.cue.$out_fmt || die "ERROR decoding FLAC file $desc" 937*600f14f4SXin Li $CMP 50c.skip20.$in_fmt z50c.cued.$in_fmt || die "ERROR: file mismatch for --cue=1.4- $desc" 938*600f14f4SXin Li rm -f z50c.cued.$in_fmt 939*600f14f4SXin Li echo OK 940*600f14f4SXin Li 941*600f14f4SXin Li echo $ECHO_N "testing --cue=-5.0 $desc... " $ECHO_C 942*600f14f4SXin Li run_flac $dopt -o z50c.cued.$in_fmt --cue=-5.0 z50c.cue.$out_fmt || die "ERROR decoding FLAC file $desc" 943*600f14f4SXin Li $CMP 50c.$in_fmt z50c.cued.$in_fmt || die "ERROR: file mismatch for --cue=-5.0 $desc" 944*600f14f4SXin Li rm -f z50c.cued.$in_fmt 945*600f14f4SXin Li echo OK 946*600f14f4SXin Li 947*600f14f4SXin Li echo $ECHO_N "testing --cue=-4.1 $desc... " $ECHO_C 948*600f14f4SXin Li run_flac $dopt -o z50c.cued.$in_fmt --cue=-4.1 z50c.cue.$out_fmt || die "ERROR decoding FLAC file $desc" 949*600f14f4SXin Li $CMP 50c.until40.$in_fmt z50c.cued.$in_fmt || die "ERROR: file mismatch for --cue=-4.1 $desc" 950*600f14f4SXin Li rm -f z50c.cued.$in_fmt 951*600f14f4SXin Li echo OK 952*600f14f4SXin Li 953*600f14f4SXin Li echo $ECHO_N "testing --cue=-3.1 $desc... " $ECHO_C 954*600f14f4SXin Li run_flac $dopt -o z50c.cued.$in_fmt --cue=-3.1 z50c.cue.$out_fmt || die "ERROR decoding FLAC file $desc" 955*600f14f4SXin Li $CMP 50c.until40.$in_fmt z50c.cued.$in_fmt || die "ERROR: file mismatch for --cue=-3.1 $desc" 956*600f14f4SXin Li rm -f z50c.cued.$in_fmt 957*600f14f4SXin Li echo OK 958*600f14f4SXin Li 959*600f14f4SXin Li echo $ECHO_N "testing --cue=-1.4 $desc... " $ECHO_C 960*600f14f4SXin Li run_flac $dopt -o z50c.cued.$in_fmt --cue=-1.4 z50c.cue.$out_fmt || die "ERROR decoding FLAC file $desc" 961*600f14f4SXin Li $CMP 50c.until30.$in_fmt z50c.cued.$in_fmt || die "ERROR: file mismatch for --cue=-1.4 $desc" 962*600f14f4SXin Li rm -f z50c.cued.$in_fmt 963*600f14f4SXin Li echo OK 964*600f14f4SXin Li 965*600f14f4SXin Li echo $ECHO_N "testing --cue=1.0-5.0 $desc... " $ECHO_C 966*600f14f4SXin Li run_flac $dopt -o z50c.cued.$in_fmt --cue=1.0-5.0 z50c.cue.$out_fmt || die "ERROR decoding FLAC file $desc" 967*600f14f4SXin Li $CMP 50c.$in_fmt z50c.cued.$in_fmt || die "ERROR: file mismatch for --cue=1.0-5.0 $desc" 968*600f14f4SXin Li rm -f z50c.cued.$in_fmt 969*600f14f4SXin Li echo OK 970*600f14f4SXin Li 971*600f14f4SXin Li echo $ECHO_N "testing --cue=1.1-5.0 $desc... " $ECHO_C 972*600f14f4SXin Li run_flac $dopt -o z50c.cued.$in_fmt --cue=1.1-5.0 z50c.cue.$out_fmt || die "ERROR decoding FLAC file $desc" 973*600f14f4SXin Li $CMP 50c.$in_fmt z50c.cued.$in_fmt || die "ERROR: file mismatch for --cue=1.1-5.0 $desc" 974*600f14f4SXin Li rm -f z50c.cued.$in_fmt 975*600f14f4SXin Li echo OK 976*600f14f4SXin Li 977*600f14f4SXin Li echo $ECHO_N "testing --cue=1.2-4.1 $desc... " $ECHO_C 978*600f14f4SXin Li run_flac $dopt -o z50c.cued.$in_fmt --cue=1.2-4.1 z50c.cue.$out_fmt || die "ERROR decoding FLAC file $desc" 979*600f14f4SXin Li $CMP 50c.skip10.until40.$in_fmt z50c.cued.$in_fmt || die "ERROR: file mismatch for --cue=1.2-4.1 $desc" 980*600f14f4SXin Li rm -f z50c.cued.$in_fmt 981*600f14f4SXin Li echo OK 982*600f14f4SXin Li 983*600f14f4SXin Li echo $ECHO_N "testing --cue=1.4-2.0 $desc... " $ECHO_C 984*600f14f4SXin Li run_flac $dopt -o z50c.cued.$in_fmt --cue=1.4-2.0 z50c.cue.$out_fmt || die "ERROR decoding FLAC file $desc" 985*600f14f4SXin Li $CMP 50c.skip20.until30.$in_fmt z50c.cued.$in_fmt || die "ERROR: file mismatch for --cue=1.4-2.0 $desc" 986*600f14f4SXin Li rm -f z50c.cued.$in_fmt 987*600f14f4SXin Li echo OK 988*600f14f4SXin Li 989*600f14f4SXin Li rm -f z50c.cue.$out_fmt 990*600f14f4SXin Li} 991*600f14f4SXin Li 992*600f14f4SXin Litest_cue raw flac 993*600f14f4SXin Litest_cue wav flac 994*600f14f4SXin Litest_cue aiff flac 995*600f14f4SXin Litest_cue flac flac 996*600f14f4SXin Li#@@@if [ $has_ogg = yes ] ; then 997*600f14f4SXin Li#@@@ #@@@ doesn't work yet because md5cmp doesn't work because metaflac doesn't work on ogg flac yet 998*600f14f4SXin Li#@@@ test_cue ogg flac 999*600f14f4SXin Li#@@@fi 1000*600f14f4SXin Li 1001*600f14f4SXin Liif [ $has_ogg = yes ] ; then 1002*600f14f4SXin Li test_cue raw ogg 1003*600f14f4SXin Li test_cue wav ogg 1004*600f14f4SXin Li test_cue aiff ogg 1005*600f14f4SXin Li #@@@ doesn't work yet because md5cmp doesn't work because metaflac doesn't work on ogg flac yet 1006*600f14f4SXin Li #@@@test_cue flac ogg 1007*600f14f4SXin Li #@@@test_cue ogg ogg 1008*600f14f4SXin Lifi 1009*600f14f4SXin Li 1010*600f14f4SXin Li############################################################################ 1011*600f14f4SXin Li# test 'fixup' code that happens when a FLAC file with total_samples == 0 1012*600f14f4SXin Li# in the STREAMINFO block is converted to WAVE or AIFF, requiring the 1013*600f14f4SXin Li# decoder go back and fix up the chunk headers 1014*600f14f4SXin Li############################################################################ 1015*600f14f4SXin Li 1016*600f14f4SXin Liecho $ECHO_N "WAVE fixup test... " $ECHO_C 1017*600f14f4SXin Li 1018*600f14f4SXin Liecho $ECHO_N "prepare... " $ECHO_C 1019*600f14f4SXin Liconvert_to_wav noise "$raw_eopt" "$wav_dopt" || die "ERROR creating reference WAVE" 1020*600f14f4SXin Li 1021*600f14f4SXin Liecho $ECHO_N "encode... " $ECHO_C 1022*600f14f4SXin Li# the pipe from 'cat' to 'flac' does not work on cygwin because of the EOF/ 1023*600f14f4SXin Li# binary-mode stdin problem, so we use an undocumented option to metaflac to 1024*600f14f4SXin Li# set the total sample count to 0 1025*600f14f4SXin Liif [ $is_win = yes ] ; then 1026*600f14f4SXin Li run_flac $raw_eopt noise.raw -o fixup.flac || die "ERROR generating FLAC file" 1027*600f14f4SXin Li run_metaflac --set-total-samples=0 fixup.flac 2> /dev/null 1028*600f14f4SXin Lielse 1029*600f14f4SXin Li run_flac $raw_eopt - -c < noise.raw > fixup.flac || die "ERROR generating FLAC file" 1030*600f14f4SXin Lifi 1031*600f14f4SXin Li 1032*600f14f4SXin Liecho $ECHO_N "decode... " $ECHO_C 1033*600f14f4SXin Lirun_flac $wav_dopt fixup.flac -o fixup.wav || die "ERROR decoding FLAC file" 1034*600f14f4SXin Li 1035*600f14f4SXin Liecho $ECHO_N "compare... " $ECHO_C 1036*600f14f4SXin Licmp noise.wav fixup.wav || die "ERROR: file mismatch" 1037*600f14f4SXin Li 1038*600f14f4SXin Liecho OK 1039*600f14f4SXin Lirm -f noise.wav fixup.wav fixup.flac 1040*600f14f4SXin Li 1041*600f14f4SXin Liecho $ECHO_N "AIFF fixup test... " $ECHO_C 1042*600f14f4SXin Li 1043*600f14f4SXin Liecho $ECHO_N "prepare... " $ECHO_C 1044*600f14f4SXin Liconvert_to_aiff noise "$raw_eopt" "$wav_dopt" || die "ERROR creating reference AIFF" 1045*600f14f4SXin Li 1046*600f14f4SXin Liecho $ECHO_N "encode... " $ECHO_C 1047*600f14f4SXin Li# the pipe from 'cat' to 'flac' does not work on cygwin because of the EOF/ 1048*600f14f4SXin Li# binary-mode stdin problem, so we use an undocumented option to metaflac to 1049*600f14f4SXin Li# set the total sample count to 0 1050*600f14f4SXin Liif [ $is_win = yes ] ; then 1051*600f14f4SXin Li run_flac $raw_eopt noise.raw -o fixup.flac || die "ERROR generating FLAC file" 1052*600f14f4SXin Li run_metaflac --set-total-samples=0 fixup.flac 2> /dev/null 1053*600f14f4SXin Lielse 1054*600f14f4SXin Li run_flac $raw_eopt - -c < noise.raw > fixup.flac || die "ERROR generating FLAC file" 1055*600f14f4SXin Lifi 1056*600f14f4SXin Li 1057*600f14f4SXin Liecho $ECHO_N "decode... " $ECHO_C 1058*600f14f4SXin Lirun_flac $wav_dopt fixup.flac -o fixup.aiff || die "ERROR decoding FLAC file" 1059*600f14f4SXin Li 1060*600f14f4SXin Liecho $ECHO_N "compare... " $ECHO_C 1061*600f14f4SXin Licmp noise.aiff fixup.aiff || die "ERROR: file mismatch" 1062*600f14f4SXin Li 1063*600f14f4SXin Liecho OK 1064*600f14f4SXin Lirm -f noise.aiff fixup.aiff fixup.flac 1065*600f14f4SXin Li 1066*600f14f4SXin Li 1067*600f14f4SXin Li############################################################################ 1068*600f14f4SXin Li# multi-file tests 1069*600f14f4SXin Li############################################################################ 1070*600f14f4SXin Li 1071*600f14f4SXin Liecho "Generating multiple input files from noise..." 1072*600f14f4SXin Limultifile_format_decode="--endian=big --sign=signed" 1073*600f14f4SXin Limultifile_format_encode="$multifile_format_decode --sample-rate=44100 --bps=16 --channels=2 --no-padding" 1074*600f14f4SXin Lishort_noise_cdda_samples=$((total_noise_cdda_samples / 8)) 1075*600f14f4SXin Lirun_flac --verify --force --force-raw-format $multifile_format_encode --until=$short_noise_cdda_samples -o shortnoise.flac noise.raw || die "ERROR generating FLAC file" 1076*600f14f4SXin Lirun_flac --decode --force shortnoise.flac -o shortnoise.raw --force-raw-format $multifile_format_decode || die "ERROR generating RAW file" 1077*600f14f4SXin Lirun_flac --decode --force shortnoise.flac || die "ERROR generating WAVE file" 1078*600f14f4SXin Lirun_flac --decode --force shortnoise.flac -o shortnoise.aiff || die "ERROR generating AIFF file" 1079*600f14f4SXin Licp shortnoise.flac file0.flac 1080*600f14f4SXin Licp shortnoise.flac file1.flac 1081*600f14f4SXin Licp shortnoise.flac file2.flac 1082*600f14f4SXin Lirm -f shortnoise.flac 1083*600f14f4SXin Licp shortnoise.wav file0.wav 1084*600f14f4SXin Licp shortnoise.wav file1.wav 1085*600f14f4SXin Licp shortnoise.wav file2.wav 1086*600f14f4SXin Lirm -f shortnoise.wav 1087*600f14f4SXin Licp shortnoise.aiff file0.aiff 1088*600f14f4SXin Licp shortnoise.aiff file1.aiff 1089*600f14f4SXin Licp shortnoise.aiff file2.aiff 1090*600f14f4SXin Lirm -f shortnoise.aiff 1091*600f14f4SXin Licp shortnoise.raw file0.raw 1092*600f14f4SXin Licp shortnoise.raw file1.raw 1093*600f14f4SXin Licp shortnoise.raw file2.raw 1094*600f14f4SXin Lirm -f shortnoise.raw 1095*600f14f4SXin Li 1096*600f14f4SXin Litest_multifile () 1097*600f14f4SXin Li{ 1098*600f14f4SXin Li input_type=$1 1099*600f14f4SXin Li streamtype=$2 1100*600f14f4SXin Li encode_options="$3" 1101*600f14f4SXin Li 1102*600f14f4SXin Li extra_encode_options="" 1103*600f14f4SXin Li extra_decode_options="" 1104*600f14f4SXin Li if [ $input_type = "raw" ] ; then 1105*600f14f4SXin Li extra_encode_options="--force-raw-format $multifile_format_encode" 1106*600f14f4SXin Li extra_decode_options="--force-raw-format $multifile_format_decode" 1107*600f14f4SXin Li else 1108*600f14f4SXin Li if [ $input_type = "aiff" ] ; then 1109*600f14f4SXin Li extra_decode_options="--force-aiff-format" 1110*600f14f4SXin Li fi 1111*600f14f4SXin Li fi 1112*600f14f4SXin Li 1113*600f14f4SXin Li if [ $streamtype = ogg ] ; then 1114*600f14f4SXin Li suffix=oga 1115*600f14f4SXin Li encode_options="$encode_options --ogg" 1116*600f14f4SXin Li else 1117*600f14f4SXin Li suffix=flac 1118*600f14f4SXin Li fi 1119*600f14f4SXin Li 1120*600f14f4SXin Li if [ $input_type = flac ] || [ $input_type = ogg ] ; then 1121*600f14f4SXin Li CMP=md5cmp 1122*600f14f4SXin Li else 1123*600f14f4SXin Li CMP=cmp 1124*600f14f4SXin Li fi 1125*600f14f4SXin Li 1126*600f14f4SXin Li for n in 0 1 2 ; do 1127*600f14f4SXin Li cp file$n.$input_type file${n}x.$input_type 1128*600f14f4SXin Li done 1129*600f14f4SXin Li run_flac --force $encode_options $extra_encode_options file0x.$input_type file1x.$input_type file2x.$input_type || die "ERROR" 1130*600f14f4SXin Li run_flac --force --decode $extra_decode_options file0x.$suffix file1x.$suffix file2x.$suffix || die "ERROR" 1131*600f14f4SXin Li for n in 0 1 2 ; do 1132*600f14f4SXin Li $CMP file$n.$input_type file${n}x.$input_type || die "ERROR: file mismatch on file #$n" 1133*600f14f4SXin Li done 1134*600f14f4SXin Li for n in 0 1 2 ; do 1135*600f14f4SXin Li rm -f file${n}x.$suffix file${n}x.$input_type 1136*600f14f4SXin Li done 1137*600f14f4SXin Li} 1138*600f14f4SXin Li 1139*600f14f4SXin Liinput_types="raw wav aiff flac" 1140*600f14f4SXin Li#@@@ doesn't work yet because md5cmp doesn't work because metaflac doesn't work on ogg flac yet 1141*600f14f4SXin Li#@@@if [ $has_ogg = yes ] ; then 1142*600f14f4SXin Li#@@@ input_types="$input_types ogg" 1143*600f14f4SXin Li#@@@fi 1144*600f14f4SXin Lifor input_type in $input_types ; do 1145*600f14f4SXin Li echo "Testing multiple $input_type files without verify..." 1146*600f14f4SXin Li test_multifile $input_type flac "" 1147*600f14f4SXin Li 1148*600f14f4SXin Li echo "Testing multiple $input_type files with verify..." 1149*600f14f4SXin Li test_multifile $input_type flac "--verify" 1150*600f14f4SXin Li 1151*600f14f4SXin Li if [ $has_ogg = yes ] ; then 1152*600f14f4SXin Li echo "Testing multiple $input_type files with --ogg, without verify..." 1153*600f14f4SXin Li test_multifile $input_type ogg "" 1154*600f14f4SXin Li 1155*600f14f4SXin Li echo "Testing multiple $input_type files with --ogg, with verify..." 1156*600f14f4SXin Li test_multifile $input_type ogg "--verify" 1157*600f14f4SXin Li 1158*600f14f4SXin Li echo "Testing multiple $input_type files with --ogg and --serial-number, with verify..." 1159*600f14f4SXin Li test_multifile $input_type ogg "--serial-number=321 --verify" 1160*600f14f4SXin Li fi 1161*600f14f4SXin Lidone 1162*600f14f4SXin Li 1163*600f14f4SXin Li 1164*600f14f4SXin Li############################################################################ 1165*600f14f4SXin Li# test --keep-foreign-metadata 1166*600f14f4SXin Li############################################################################ 1167*600f14f4SXin Li 1168*600f14f4SXin Liecho "Testing --keep-foreign-metadata..." 1169*600f14f4SXin Li 1170*600f14f4SXin Lirt_test_wav wacky1.wav '--keep-foreign-metadata' 1171*600f14f4SXin Lirt_test_wav wacky2.wav '--keep-foreign-metadata' 1172*600f14f4SXin Lirt_test_w64 wacky1.w64 '--keep-foreign-metadata' 1173*600f14f4SXin Lirt_test_w64 wacky2.w64 '--keep-foreign-metadata' 1174*600f14f4SXin Lirt_test_rf64 wacky1.rf64 '--keep-foreign-metadata' 1175*600f14f4SXin Lirt_test_rf64 wacky2.rf64 '--keep-foreign-metadata' 1176*600f14f4SXin Li 1177*600f14f4SXin Lirt_test_wav_autokf wacky1.wav '--keep-foreign-metadata' 1178*600f14f4SXin Lirt_test_wav_autokf wacky2.wav '--keep-foreign-metadata' 1179*600f14f4SXin Lirt_test_w64_autokf wacky1.w64 '--keep-foreign-metadata' 1180*600f14f4SXin Lirt_test_w64_autokf wacky2.w64 '--keep-foreign-metadata' 1181*600f14f4SXin Lirt_test_rf64_autokf wacky1.rf64 '--keep-foreign-metadata' 1182*600f14f4SXin Lirt_test_rf64_autokf wacky2.rf64 '--keep-foreign-metadata' 1183*600f14f4SXin Li 1184*600f14f4SXin Litestdatadir=${top_srcdir}/test/foreign-metadata-test-files 1185*600f14f4SXin Li 1186*600f14f4SXin Lirt_test_autokf "$testdatadir/BWF-WaveFmtEx.wav" '--keep-foreign-metadata' 'rt.wav' 1187*600f14f4SXin Lirt_test_autokf "$testdatadir/AIFF-ID3.aiff" '--keep-foreign-metadata' 'rt.aiff' 1188*600f14f4SXin Lirt_test_autokf "$testdatadir/AIFF-C-sowt-tag.aifc" '--keep-foreign-metadata' 'rt.aifc' 1189*600f14f4SXin Lirt_test_autokf "$testdatadir/AIFF-C-sowt-compression-type-name.aifc" '--keep-foreign-metadata' 'rt.aifc' 1190*600f14f4SXin Lirt_test_autokf "$testdatadir/24bit-WaveFmtPCM.wav" '--keep-foreign-metadata' 'rt.wav' 1191*600f14f4SXin Li 1192*600f14f4SXin Li############################################################################ 1193*600f14f4SXin Li# test the metadata-handling properties of flac-to-flac encoding 1194*600f14f4SXin Li############################################################################ 1195*600f14f4SXin Li 1196*600f14f4SXin Liecho "Testing the metadata-handling properties of flac-to-flac encoding..." 1197*600f14f4SXin Li 1198*600f14f4SXin Litestdatadir=${top_srcdir}/test/flac-to-flac-metadata-test-files 1199*600f14f4SXin Li 1200*600f14f4SXin Lifilter () 1201*600f14f4SXin Li{ 1202*600f14f4SXin Li # minor danger, changing vendor strings might change the length of the 1203*600f14f4SXin Li # VORBIS_COMMENT block, but if we add "^ length: " to the patterns, 1204*600f14f4SXin Li # we lose info about PADDING size that we need 1205*600f14f4SXin Li grep -Ev '^ vendor string: |^ m..imum .....size: ' | sed -e 's/, stream_offset.*//' 1206*600f14f4SXin Li} 1207*600f14f4SXin Liflac2flac () 1208*600f14f4SXin Li{ 1209*600f14f4SXin Li file="$testdatadir/$1" 1210*600f14f4SXin Li case="$testdatadir/$2" 1211*600f14f4SXin Li args="$3" 1212*600f14f4SXin Li expect="$case-expect.meta" 1213*600f14f4SXin Li echo $ECHO_N "$2... " $ECHO_C 1214*600f14f4SXin Li # The 'make distcheck' target needs this. 1215*600f14f4SXin Li chmod u+w $file 1216*600f14f4SXin Li run_flac -f -o out.flac $args $file || die "ERROR encoding FLAC file" 1217*600f14f4SXin Li run_metaflac --list out.flac | filter > out1.meta || die "ERROR listing metadata of output FLAC file" 1218*600f14f4SXin Li # Ignore lengths which can be affected by the version string. 1219*600f14f4SXin Li sed "s/length:.*/length: XXX/" out1.meta > out.meta 1220*600f14f4SXin Li diff -q -w $expect out.meta 2>/dev/null || die "ERROR: metadata does not match expected $expect" 1221*600f14f4SXin Li echo OK 1222*600f14f4SXin Li} 1223*600f14f4SXin Li 1224*600f14f4SXin Li#filter=', stream_offset.*|^ vendor string: |^ length: |^ m..imum .....size: ' 1225*600f14f4SXin Li 1226*600f14f4SXin Li# case 00a: no alterations on a file with all metadata types, keep all metadata, in same order 1227*600f14f4SXin Liflac2flac input-SCVAUP.flac case00a "" 1228*600f14f4SXin Li# case 01a: on file with multiple PADDING blocks, they should be aggregated into one at the end 1229*600f14f4SXin Liflac2flac input-SCVPAP.flac case01a "" 1230*600f14f4SXin Li# case 01b: on file with multiple PADDING blocks and --no-padding specified, they should all be deleted 1231*600f14f4SXin Liflac2flac input-SCVPAP.flac case01b "--no-padding" 1232*600f14f4SXin Li# case 01c: on file with multiple PADDING blocks and -P specified, they should all be overwritten with -P value 1233*600f14f4SXin Liflac2flac input-SCVPAP.flac case01c "-P 1234" 1234*600f14f4SXin Li# case 01d: on file with no PADDING blocks, use -P setting 1235*600f14f4SXin Liflac2flac input-SCVA.flac case01d "-P 1234" 1236*600f14f4SXin Li# case 01e: on file with no PADDING blocks and no -P given, use default padding 1237*600f14f4SXin Liflac2flac input-SCVA.flac case01e "" 1238*600f14f4SXin Li# case 02a: on file with no VORBIS_COMMENT block, add new VORBIS_COMMENT 1239*600f14f4SXin Liflac2flac input-SCPAP.flac case02a "" 1240*600f14f4SXin Li# case 02b: on file with no VORBIS_COMMENT block and --tag, add new VORBIS_COMMENT with tags 1241*600f14f4SXin Liflac2flac input-SCPAP.flac case02b "--tag=artist=0" 1242*600f14f4SXin Li# case 02c: on file with VORBIS_COMMENT block and --tag, replace existing VORBIS_COMMENT with new tags 1243*600f14f4SXin Liflac2flac input-SCVAUP.flac case02c "--tag=artist=0" 1244*600f14f4SXin Li# case 03a: on file with no CUESHEET block and --cuesheet specified, add it 1245*600f14f4SXin Liflac2flac input-SVAUP.flac case03a "--cuesheet=$testdatadir/input0.cue" 1246*600f14f4SXin Li# case 03b: on file with CUESHEET block and --cuesheet specified, overwrite existing CUESHEET 1247*600f14f4SXin Liflac2flac input-SCVAUP.flac case03b "--cuesheet=$testdatadir/input0.cue" 1248*600f14f4SXin Li# case 03c: on file with CUESHEET block and size-changing option specified, drop existing CUESHEET 1249*600f14f4SXin Liflac2flac input-SCVAUP.flac case03c "--skip=1" 1250*600f14f4SXin Li# case 04a: on file with no SEEKTABLE block and --no-seektable specified, no SEEKTABLE 1251*600f14f4SXin Liflac2flac input-VA.flac case04a "--no-padding --no-seektable" 1252*600f14f4SXin Li# case 04b: on file with no SEEKTABLE block and -S specified, new SEEKTABLE 1253*600f14f4SXin Liflac2flac input-VA.flac case04b "--no-padding -S 5x" 1254*600f14f4SXin Li# case 04c: on file with no SEEKTABLE block and no seektable options specified, new SEEKTABLE with default points 1255*600f14f4SXin Liflac2flac input-VA.flac case04c "--no-padding" 1256*600f14f4SXin Li# case 04d: on file with SEEKTABLE block and --no-seektable specified, drop existing SEEKTABLE 1257*600f14f4SXin Liflac2flac input-SCVA.flac case04d "--no-padding --no-seektable" 1258*600f14f4SXin Li# case 04e: on file with SEEKTABLE block and -S specified, overwrite existing SEEKTABLE 1259*600f14f4SXin Liflac2flac input-SCVA.flac case04e "--no-padding -S 5x" 1260*600f14f4SXin Li# case 04f: on file with SEEKTABLE block and size-changing option specified, drop existing SEEKTABLE, new SEEKTABLE with default points 1261*600f14f4SXin Li#(already covered by case03c) 1262*600f14f4SXin Li 1263*600f14f4SXin Li############################################################################ 1264*600f14f4SXin Li# test limiting minimum bitrate 1265*600f14f4SXin Li############################################################################ 1266*600f14f4SXin Li 1267*600f14f4SXin Liecho $ECHO_N "Testing --limit-min-bitrate" $ECHO_C 1268*600f14f4SXin Li 1269*600f14f4SXin Lirun_flac -f -o out.flac --no-padding --no-seektable --limit-min-bitrate "$testdatadir/input-VA.flac" 1270*600f14f4SXin Lisize=$(wc -c < out.flac) 1271*600f14f4SXin Li 1272*600f14f4SXin Liif [ "$size" -lt "1022" ]; then 1273*600f14f4SXin Li die "ERROR: filesize of flac file encoded with --limit-min-bitrate is smaller than expected" 1274*600f14f4SXin Lifi 1275*600f14f4SXin Li 1276*600f14f4SXin Liecho OK 1277*600f14f4SXin Li 1278*600f14f4SXin Li############################################################################ 1279*600f14f4SXin Li# test overflow of total samples field in STREAMINFO 1280*600f14f4SXin Li############################################################################ 1281*600f14f4SXin Li 1282*600f14f4SXin Litest_total_samples_overflow () 1283*600f14f4SXin Li{ 1284*600f14f4SXin Li total_samples=$1 1285*600f14f4SXin Li expected_stored_total_samples=$2 1286*600f14f4SXin Li echo $ECHO_N "total_samples overflow test (samples=$total_samples) encode... " $ECHO_C 1287*600f14f4SXin Li head -c $total_samples /dev/zero | run_flac --force --verify --sign=signed --sample-rate=96000 -b 16384 --channels=1 --endian=little --bps=8 -o big-$total_samples.flac - || die "ERROR" 1288*600f14f4SXin Li echo $ECHO_N "decode... " $ECHO_C 1289*600f14f4SXin Li run_flac -t big-$total_samples.flac || die "ERROR" 1290*600f14f4SXin Li echo $ECHO_N "check... " $ECHO_C 1291*600f14f4SXin Li run_metaflac --show-total-samples big-$total_samples.flac > big-$total_samples.cmp1 1292*600f14f4SXin Li echo $expected_stored_total_samples > big-$total_samples.cmp2 1293*600f14f4SXin Li diff -q -w big-$total_samples.cmp1 big-$total_samples.cmp2 || die "ERROR" 1294*600f14f4SXin Li echo "OK" 1295*600f14f4SXin Li rm -f big-$total_samples.flac big-$total_samples.cmp1 big-$total_samples.cmp2 1296*600f14f4SXin Li} 1297*600f14f4SXin Li 1298*600f14f4SXin Liif [ "$FLAC__TEST_LEVEL" -gt 1 ] ; then 1299*600f14f4SXin Li test_total_samples_overflow 68719476735 68719476735 1300*600f14f4SXin Li test_total_samples_overflow 68719476736 0 1301*600f14f4SXin Li test_total_samples_overflow 68719476737 0 1302*600f14f4SXin Lifi 1303*600f14f4SXin Li 1304*600f14f4SXin Li############################################################################ 1305*600f14f4SXin Li# test handling of UTF-8 filenames 1306*600f14f4SXin Li############################################################################ 1307*600f14f4SXin Li 1308*600f14f4SXin Li 1309*600f14f4SXin Litest_utf8_handling () 1310*600f14f4SXin Li{ 1311*600f14f4SXin Li echo $ECHO_N "Test decoding from $1... " $ECHO_C 1312*600f14f4SXin Li run_flac -d $testdatadir/$1 -o out.wav 1313*600f14f4SXin Li if [ -f out.wav ] ; then 1314*600f14f4SXin Li echo "OK" 1315*600f14f4SXin Li else 1316*600f14f4SXin Li die "Decoding failed" 1317*600f14f4SXin Li fi 1318*600f14f4SXin Li echo $ECHO_N "Test encoding to $1... " $ECHO_C 1319*600f14f4SXin Li run_flac out.wav -o $1 1320*600f14f4SXin Li if [ -f $1 ] ; then 1321*600f14f4SXin Li echo "OK" 1322*600f14f4SXin Li else 1323*600f14f4SXin Li die "Encoding failed" 1324*600f14f4SXin Li fi 1325*600f14f4SXin Li rm -f $1 out.wav 1326*600f14f4SXin Li} 1327*600f14f4SXin Li 1328*600f14f4SXin Liif [ "$WIN32BUSYBOX" != "yes" ]; then 1329*600f14f4SXin Li test_utf8_handling שלום.flac 1330*600f14f4SXin Li test_utf8_handling .flac 1331*600f14f4SXin Li test_utf8_handling Prøve.flac 1332*600f14f4SXin Lifi 1333*600f14f4SXin Li 1334*600f14f4SXin Lirm -f out.flac out.meta out1.meta 1335*600f14f4SXin Li 1336*600f14f4SXin Li#@@@ when metaflac handles ogg flac, duplicate flac2flac tests here 1337*600f14f4SXin Li 1338*600f14f4SXin Licd .. 1339