#!/bin/bash

mydir="`dirname $0`"

# Our input sweep is at 96kHz, so these factors correspond to 48, 24,
# 12, 6, 3, and 1.5kHz.

factors="2 4 8 16 32 64"

original=96000

do_src() {
    factor="$1"
    infile="$2"
    outfile="$3"
    time sndfile-resample -to "$(($original/$factor))" "$infile" "$outfile"
}

do_linear() {
    factor="$1"
    infile="$2"
    outfile="$3"
echo "factor is $factor"
    echo "running... sndfile-resample -to $(($original/$factor)) -c 4 $infile $outfile"
    time sndfile-resample -to "$(($original/$factor))" -c 4 "$infile" "$outfile"
}

do_resample_hq() {
    factor="$1"
    infile="$2"
    outfile="$3"
    time "$mydir/garage-resampler/resample" --snr 100 --bandwidth 0.02 --to "$(($original/$factor))" "$infile" "$outfile"
}

do_resample_mq() {
    factor="$1"
    infile="$2"
    outfile="$3"
    time "$mydir/garage-resampler/resample" --snr 70 --bandwidth 0.03 --to "$(($original/$factor))" "$infile" "$outfile"
}

do_resample_lq() {
    factor="$1"
    infile="$2"
    outfile="$3"
    time "$mydir/garage-resampler/resample" --snr 50 --bandwidth 0.05 --to "$(($original/$factor))" "$infile" "$outfile"
}

decimate_twice() {
    first="$1"
    second="$2"
    infile="$3"
    outfile="$4"
    "$mydir/qm-dsp-decimate/decimate" --by "$first" "$infile" "$outfile".tmp
    "$mydir/qm-dsp-decimate/decimate" --by "$second" "$outfile".tmp "$outfile"
    rm "$outfile".tmp
}    

do_decimate() {
    factor="$1"
    infile="$2"
    outfile="$3"
    time case "$factor" in
	16) decimate_twice 4 4 "$infile" "$outfile";;
	32) decimate_twice 8 4 "$infile" "$outfile";;
	64) decimate_twice 8 8 "$infile" "$outfile";;
	*) "$mydir/qm-dsp-decimate/decimate" --by "$factor" "$infile" "$outfile";;
    esac
}

mkdir -p "$mydir"/out

for f in $factors; do
    for impl in linear decimate resample_hq resample_mq resample_lq src; do
	echo "factor $f, impl $impl..."
	do_$impl "$f" "$mydir/infinitewave-testsignals/Swept_float.wav" "$mydir"/out/"$f"_"$impl".wav > "$mydir"/out/"$f"_"$impl".log 2>&1
    done
done

