annotate testdata/evaluation/run-piano.sh @ 372:af71cbdab621 tip

Update bqvec code
author Chris Cannam
date Tue, 19 Nov 2019 10:13:32 +0000
parents 1d6b5e0bed94
children
rev   line source
Chris@339 1 #!/bin/bash
Chris@222 2
Chris@222 3 # Assumption: instrument parameter value 0 of the Silvet plugin is
Chris@222 4 # always "multiple or unknown instruments" and 1 is always "piano".
Chris@222 5
Chris@339 6 set -eu
Chris@339 7
Chris@222 8 piano_path="/home/cannam/Music/piano_small_dataset"
Chris@222 9 yc="/home/cannam/code/may/bin/yc"
Chris@222 10
Chris@222 11 if [ ! -d "$piano_path" ]; then
Chris@222 12 echo "Piano dataset directory $piano_path not found, giving up"
Chris@222 13 exit 1
Chris@222 14 fi
Chris@222 15
Chris@222 16 if ! "$yc" -v ; then
Chris@222 17 echo "Failed to run Yeti compiler yc at $yc_path, giving up";
Chris@222 18 fi
Chris@222 19
Chris@222 20 if ! sonic-annotator -v ; then
Chris@222 21 echo "Failed to run sonic-annotator (not in PATH?), giving up"
Chris@222 22 exit 1
Chris@222 23 fi
Chris@222 24
Chris@222 25 rdffile="../../silvet.n3"
Chris@222 26 if [ ! -f "$rdffile" ] ; then
Chris@222 27 echo "Failed to find plugin RDF file at $rdffile, giving up"
Chris@222 28 exit 1
Chris@222 29 fi
Chris@222 30
Chris@222 31 case "$piano_path" in
Chris@222 32 *\ *) echo "Piano dataset path $piano_path has a space in it, this script won't handle that"; exit 1;;
Chris@222 33 esac
Chris@222 34
Chris@222 35 ( cd ../.. ; make -f Makefile.linux ) || exit 1
Chris@222 36
Chris@222 37 VAMP_PATH=../..
Chris@222 38 export VAMP_PATH
Chris@222 39
Chris@222 40 outfile="/tmp/$$"
Chris@225 41 reference="/tmp/$$ref"
Chris@222 42
Chris@222 43 tmpwav="/tmp/$$.wav"
Chris@222 44
Chris@222 45 transfile="/tmp/$$transform.ttl"
Chris@222 46
Chris@271 47 trap 'rm -f "$outfile" "$tmpwav" "$transfile" "$reference.lab" "$outfile.lab"' 0
Chris@222 48
Chris@238 49 infiles=$(find "$piano_path" -name \*.wav | sort)
Chris@222 50
Chris@222 51 echo
Chris@222 52 echo "Input files are:"
Chris@222 53 echo $infiles | fmt -1
Chris@222 54
Chris@222 55 time for infile in $infiles; do
Chris@222 56
Chris@222 57 echo
Chris@222 58 echo "Evaluating for file $infile..."
Chris@222 59
Chris@222 60 intended_instrument=1 ## assumption: 1 == piano
Chris@222 61
Chris@222 62 # We run this twice, once using the default instrument
Chris@222 63 # (i.e. "multiple or unknown") and once using the intended
Chris@222 64 # instrument preset (piano).
Chris@222 65
Chris@222 66 filename=$(basename "$infile" .wav)
Chris@222 67
Chris@225 68 duration=30
Chris@225 69
Chris@339 70 for instrument in $intended_instrument 0 ; do
Chris@222 71
Chris@363 72 for mode in 1 0; do
Chris@269 73
Chris@269 74 for norm in no; do
Chris@222 75
Chris@269 76 echo
Chris@339 77 echo "For mode $mode, file $filename, instrument $instrument, norm $norm..."
Chris@222 78
Chris@269 79 if [ "$norm" = "no" ]; then
Chris@269 80 # Don't normalise; plugin is now supposed to do it
Chris@269 81 sox "$infile" "$tmpwav" trim 0 $duration
Chris@269 82 else
Chris@269 83 # Normalise as reference
Chris@269 84 sox "$infile" "$tmpwav" trim 0 $duration gain -n -6.020599913279624
Chris@269 85 fi
Chris@222 86
Chris@269 87 # generate the transform by interpolating the instrument parameter
Chris@269 88 cat transform.ttl | \
Chris@269 89 sed "s/INSTRUMENT_PARAMETER/$instrument/" | \
Chris@269 90 sed "s/MODE_PARAMETER/$mode/" > "$transfile"
Chris@222 91
Chris@269 92 sonic-annotator \
Chris@269 93 --writer csv \
Chris@269 94 --csv-one-file "$outfile" \
Chris@269 95 --csv-force \
Chris@269 96 --transform "$transfile" \
Chris@269 97 "$tmpwav"
Chris@222 98
Chris@269 99 cat "$outfile" | \
Chris@269 100 sed 's/^[^,]*,//' | \
Chris@269 101 while IFS=, read start duration frequency level label; do
Chris@269 102 end=`echo "$start $duration + p" | dc`
Chris@269 103 echo -e "$start\t$end\t$frequency"
Chris@269 104 done > "$outfile.lab"
Chris@223 105
Chris@269 106 for ms in 50 100 150; do
Chris@269 107 mark=""
Chris@269 108 if [ "$ms" = "50" ]; then
Chris@269 109 if [ "$instrument" = "0" ]; then
Chris@339 110 mark=" <-- main generic preset for $filename (mode = $mode, norm = $norm)";
Chris@269 111 else
Chris@339 112 mark=" <-- main piano preset for $filename (mode = $mode, norm = $norm)";
Chris@269 113 fi
Chris@269 114 fi;
Chris@269 115 echo
Chris@269 116 echo "Validating against ground truth at $ms ms:"
Chris@269 117 egrep '(^[0-9]\.)|(^[012][0-9]\.)' "../piano-groundtruth/$filename.lab" > "$reference.lab"
Chris@339 118 "$yc" ../scripts/evaluate_lab.yeti "$ms" "$reference.lab" "$outfile.lab" | sed 's#$#'"$mark"'#'
Chris@269 119 done;
Chris@223 120 echo
Chris@269 121 done
Chris@223 122 done
Chris@222 123 done
Chris@222 124 done