Mercurial > hg > tuning-difference
view iterative-chroma/chromacompare.sh @ 10:d35ddf54e21f
Merge
author | Chris Cannam |
---|---|
date | Mon, 02 Feb 2015 18:56:41 +0000 |
parents | 1924df3245f4 |
children | 7cdaaf6f64f1 |
line wrap: on
line source
#!/bin/bash set -e mypath=`dirname $0` sonic-annotator --minversion 1.1 || exit 1 reference="$1" other="$2" usage() { echo "Usage: $0 reference.wav other.wav" 1>&2 exit 2 } test -n "$reference" || usage test -n "$other" || usage if ! test -f "$reference" ; then echo "Reference file $reference not found" 1>&2 exit 1 fi if ! test -f "$other" ; then echo "Other file $other not found" 1>&2 exit 1 fi refchroma="/tmp/$$.ref" otherchroma="/tmp/$$.other" tmpscript="/tmp/$$.dc" transform="/tmp/$$.ttl" scores="/tmp/$$.scores.txt" trap "rm $refchroma $otherchroma $tmpscript $transform $scores" 0 extract() { hz="$1" file="$2" cat chroma-excerpt.ttl | sed 's,"440","'"$hz"'",' > "$transform" sonic-annotator -t "$transform" --summary mean --summary-only -w csv --csv-stdout --csv-omit-filename "$file" 2>/dev/null | cut -d, -f4-15 | sed 's/,/\n/g' } extract 440 "$reference" | cat -n > "$refchroma" sox "$other" -r 44100 -c 1 b.wav for cents in $(seq -400 10 400) ; do hz=$(perl -e "print 440.0 * (2.0 ** ($cents / 1200.0))") extract "$hz" b.wav | cat -n > "$otherchroma" ( echo "6 k 0" join "$refchroma" "$otherchroma" | \ awk '{ print $2, $3, "- d * +" }' # square difference echo "p" ) > "$tmpscript" dist=$( cat "$tmpscript" | dc ) echo "$dist $hz" done | tee "$scores" echo echo Scores: sort -n "$scores" echo bestfreq=$(sort -n "$scores" | head -1 | awk '{ print $2; }') echo "I reckon the tuning frequency is $bestfreq"