Mercurial > hg > tuning-difference
diff iterative-chroma/chromacompare.sh @ 6:1924df3245f4
Rearrange, one subdir per experiment
author | Chris Cannam |
---|---|
date | Mon, 02 Feb 2015 11:18:43 +0000 |
parents | |
children | 7cdaaf6f64f1 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/iterative-chroma/chromacompare.sh Mon Feb 02 11:18:43 2015 +0000 @@ -0,0 +1,73 @@ +#!/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" + +