#!/bin/sh

# Sample rate conversion tests.  Create a 20s sweep at the input sampling rate,
# then use each resampler to convert it to the output rate.  Display the results
# in a PNG file for each conversion.

# Set up the following two before running the script:
SOX=./sox                        # The actual sox executable
SSRC_PATH=/usr/local/bin         # Path to the two ssrc executables

RANGE=180

# Temporary files
BASE=`basename $0`
IN=/tmp/$BASE-in-$$.wav
OUT=/tmp/$BASE-out-$$.wav
TIME=/tmp/$BASE-time-$$.wav

test_converters () {
  # Create input file
  max=`expr $1 / 2`
  $SOX -r $1 -n -twavpcm $IN synth 20 sin 0:$max sin $max:0 gain -2 
  for src in \
      "rate -h" \
      "rate -v" \
      "ssrc" \
      "ssrc_hp" \
      ; do
    echo $src
    case "$src" in
      ssrc*) time -f %U -o $TIME $SSRC_PATH/$src --quiet --rate $2 $IN $OUT;;
      *)     time -f %U -o $TIME $SOX $IN -r $2 $OUT $src;;
    esac
    t=`cat $TIME`
    $SOX $OUT -n spectrogram \
      -X 30 -z $RANGE -w kaiser \
      -t "$1->$2: $src" -c "${t}s user time" \
      -o "$1_$2_`echo $src | tr ' ' '_'`.png"
  done
  
  rm -f $IN $OUT $TIME # Clean up
}

test_converters 11025 48000
test_converters 22000 96100
test_converters 44100 96000
test_converters 96000 44100
test_converters 96000 8000 # rabbit 0.1.3 hangs, 0.1.4 is okay
