272 lines · 7.3 KB · Shell
RawDownload
#!/bin/sh## SoX Regression Test script: Lossless file conversion bindir="."builddir="."srcdir="." if [ -f ./sox.exe ] ; then   EXEEXT=".exe"else  EXEEXT=""fi # Set options & allow user to override paths.  Useful for testing an# installed sox.while [ $# -ne 0 ]; do    case "$1" in        -e)        echo=$1        ;;         -V)        verbose=$1        echo=$1        ;;         -a)      # Perform each test up to 3 times with different #s of        all=all  # channels; probably enough coverage without this though.        ;;         --bindir=*)        bindir=`echo $1 | sed 's/.*=//'`        ;;         -i)        shift        bindir=$1        ;;         --builddir=*)        builddir=`echo $1 | sed 's/.*=//'`        ;;         -b)        shift        builddir=$1        ;;         --srcdir=*)        srcdir=`echo $1 | sed 's/.*=//'`        ;;         -c)        shift        srcdir=$1        ;;         *)        echo "Unknown option"        exit 1    esac    shiftdone getFormat () {  formatExt=$1; formatText=$1; formatFlags=""  case $1 in    al )  formatText="alaw" ;;    ul )  formatText="ulaw" ;;    wavu8)formatText="u8 in wav";  formatFlags="-e unsigned -b 8"; formatExt="wav" ;;    s1X ) formatText="s8 (swap bits)"; formatExt="s8"; formatFlags="-X" ;;    s1N ) formatText="s8 (swap nibbles)"; formatExt="s8"; formatFlags="-N" ;;    s1XN) formatText="s8 (swap nibbles & bits)"; formatExt="s8"; formatFlags="-X -N" ;;  esac}  execute() {  if [ "${echo}x" != "x" ] ; then    echo $*  fi  cmd=$1  shift  echo $* | xargs $cmd} convertToAndFrom () {  while [ $# != 0 ]; do      if [ "${skip}x" != "x" ] ; then        format1_skip=`echo ${skip} | grep ${format1}`        from_skip=`echo ${skip} | grep ${1}`      fi      if [ "${format1_skip}x" = "x" -a "${from_skip}x" = "x" ] ; then        getFormat ${format1}; format1Ext=$formatExt; format1Text=$formatText; format1Flags=$formatFlags        getFormat         $1; format2Ext=$formatExt; format2Text=$formatText; format2Flags=$formatFlags        execute ${bindir}/sox${EXEEXT} $verbose -RD -r $rate -c $channels -n $format1Flags input.$format1Ext synth $samples's' sin 300-3300 noise trapezium        execute ${bindir}/sox${EXEEXT} $verbose -RD -r $rate -c $channels $format1Flags input.$format1Ext $format2Flags intermediate.$format2Ext        execute ${bindir}/sox${EXEEXT} $verbose -RD -r $rate -c $channels $format2Flags intermediate.$format2Ext $format1Flags output.$format1Ext        intermediateReference=vectors/intermediate`echo "$channels $rate $format1Flags $format1Ext $format2Flags"|tr " " "_"`.$format2Ext 	# Uncomment to generate new reference files	# N.B. new reference files must be manually checked for correctness        #cp -i intermediate.$format2Ext $intermediateReference         if test -f $intermediateReference        then          cmp -s $intermediateReference intermediate.$format2Ext          if [ "$?" != "0" ]          then            echo "*FAIL vector* channels=$channels \"$format1Text\" ---> \"$format2Text\"."            exit 1    # This allows failure inspection.          fi	  vectors=`expr $vectors + 1`        fi         if cmp -s input.$format1Ext output.$format1Ext        then          echo "ok     channels=$channels \"$format1Text\" <--> \"$format2Text\"."        else          echo "*FAIL* channels=$channels \"$format1Text\" <--> \"$format2Text\"."          exit 1    # This allows failure inspection.        fi        rm -f input.$format1Ext intermediate.$format2Ext output.$format1Ext      fi      shift  done} do_multichannel_formats () {  format1=u8  convertToAndFrom s8 u8 s16 u16 s24 u24 s32 u32 f32 f64 dat au wav aiff aifc flac caf sph wv sox   format1=s16  convertToAndFrom s16 u16 s24 u24 s32 u32 f32 f64 dat au wav aiff aifc flac caf sph wv sox   format1=u24  convertToAndFrom s24 u24 s32 u32 f32 f64 wav aiff aifc flac sph wv sox  (samples=23500; convertToAndFrom paf) || exit 1   format1=s32  convertToAndFrom s32 u32 f64 wav aiff aifc caf sph wv mat4 mat5 sox   format1=al  convertToAndFrom al s16 u16 s32 f32 f64 dat aiff aifc flac caf w64   format1=ul  convertToAndFrom ul s16 u16 s32 f32 f64 dat aiff aifc flac caf sph   format1=wavu8  convertToAndFrom wavu8 aiff aifc au dat sf flac caf sph} do_twochannel_formats () {  format1=wavu8  convertToAndFrom avr maud  (rate=8000; convertToAndFrom voc) || exit 1      # Fixed rate  (samples=23492; convertToAndFrom 8svx) || exit 1 # Even number of samples only} do_singlechannel_formats () {  format1=vox  convertToAndFrom vox s16 u16 s24 u24 s32 u32 f32 f64 dat au wav aiff aifc flac caf sox   format1=ima  convertToAndFrom ima s16 u16 s24 u24 s32 u32 f32 f64 dat au aiff aifc flac caf # FIXME: wav   format1=wavu8  convertToAndFrom smp s8 s1X s1N s1XN sndt sndr  #(rate=50000; convertToAndFrom txw) || exit 1     # FIXME  (rate=11025; convertToAndFrom hcom) || exit 1     # Fixed rates   format1=wve  (rate=8000; convertToAndFrom al s16 u16 s32 f32 f64 dat) || exit 1 # Fixed rate   format1=prc  (rate=8000; convertToAndFrom al s16 u16 s32 f32 f64 dat) || exit 1 # Fixed rate} stderr_time () {  egrep -v "^real |^user |^sys " $1 1>&2  grep "^user " $1 | sed "s/^user //"} # Reading and writing performance testtime="/usr/bin/time -p"timeIO () {  $time ${bindir}/sox${EXEEXT} -c $channels -r $rate -n tmp.sox synth $samples's' saw 0:`expr $rate / 2` noise brown vol .9 2> tmp.write  echo TIME synth channels=$channels samples=$samples `stderr_time tmp.write`s  if [ `uname` != SunOS ]; then    while [ $# != 0 ]; do      if [ "${skip}x" != "x" ] ; then        from_skip=`echo ${skip} | grep ${1}`      fi      if [ "${from_skip}x" = "x" ] ; then        getFormat $1;        ($time ${bindir}/sox${EXEEXT} $verbose -D tmp.sox $formatFlags -t $1 - 2> tmp.read) | \        ($time ${bindir}/sox${EXEEXT} $verbose -t $1 -c $channels -r $rate - -t sox /dev/null 2> tmp.write)        echo "TIME `printf %4s $formatText` write=`stderr_time tmp.write`s read=`stderr_time tmp.read`s"      fi      shift    done  fi  rm -f tmp.sox tmp.write tmp.read} # Don't try to test un-built formatsskip_check () {  while [ $# -ne 0 ]; do    ${bindir}/sox${EXEEXT} --help|grep "^AUDIO FILE.*\<$1\>">/dev/null || skip="$1 $skip"    shift  done}  # Run tests ${builddir}/sox_sample_test${EXEEXT} || exit 1 skip_check caf flac mat4 mat5 paf w64 wv vectors=0 rate=44100samples=23493 channels=3 do_multichannel_formats channels=2 if [ "$all" = "all" ]; then  do_multichannel_formatsfido_twochannel_formatsformat1=cdda         # 2-channel onlyconvertToAndFrom s16 u24 aiff channels=1 if [ "$all" = "all" ]; then  do_multichannel_formats  do_twochannel_formatsfido_singlechannel_formats if false; then # needs skip & dir work for general use${srcdir}/test-commentsif [ $? -eq 0 ]; then  echo "ok     comments"else  echo "*FAIL* comments"  exit 1fifi ${bindir}/sox${EXEEXT} -c 1 -r 44100 -n output.u8 synth .01 vol .5if [ `wc -c <output.u8` = 441 ]; then  echo "ok     synth size"else  echo "*FAIL* synth size"firm output.u8 echo "Checked $vectors vectors" channels=2samples=1e7timeIO s8 u8 s16 u16 s24 u24 s32 u32 f32 f64 au wav aiff aifc sph # FIXME?: caf flac dat test -n "$skip" && echo "Skipped: $skip" # Run one last command so return code is not error# when $skip is empty.echo "done."

Keyboard shortcuts

General

Show keyboard shortcuts
?
Focus the current search
/

Issues and pull requests

Open filters
f

Issues, pull requests and Inbox

Select next item
j↓
Select previous item
k↑
Open selected item
Enter
Dismiss filters or clear selection
Esc

Repository code

Go to file
t