Chris@222
|
1 #!/bin/sh
|
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@222
|
6 piano_path="/home/cannam/Music/piano_small_dataset"
|
Chris@222
|
7 yc="/home/cannam/code/may/bin/yc"
|
Chris@222
|
8
|
Chris@222
|
9 if [ ! -d "$piano_path" ]; then
|
Chris@222
|
10 echo "Piano dataset directory $piano_path not found, giving up"
|
Chris@222
|
11 exit 1
|
Chris@222
|
12 fi
|
Chris@222
|
13
|
Chris@222
|
14 if ! "$yc" -v ; then
|
Chris@222
|
15 echo "Failed to run Yeti compiler yc at $yc_path, giving up";
|
Chris@222
|
16 fi
|
Chris@222
|
17
|
Chris@222
|
18 if ! sonic-annotator -v ; then
|
Chris@222
|
19 echo "Failed to run sonic-annotator (not in PATH?), giving up"
|
Chris@222
|
20 exit 1
|
Chris@222
|
21 fi
|
Chris@222
|
22
|
Chris@222
|
23 rdffile="../../silvet.n3"
|
Chris@222
|
24 if [ ! -f "$rdffile" ] ; then
|
Chris@222
|
25 echo "Failed to find plugin RDF file at $rdffile, giving up"
|
Chris@222
|
26 exit 1
|
Chris@222
|
27 fi
|
Chris@222
|
28
|
Chris@222
|
29 case "$piano_path" in
|
Chris@222
|
30 *\ *) echo "Piano dataset path $piano_path has a space in it, this script won't handle that"; exit 1;;
|
Chris@222
|
31 esac
|
Chris@222
|
32
|
Chris@222
|
33 ( cd ../.. ; make -f Makefile.linux ) || exit 1
|
Chris@222
|
34
|
Chris@222
|
35 VAMP_PATH=../..
|
Chris@222
|
36 export VAMP_PATH
|
Chris@222
|
37
|
Chris@222
|
38 outfile="/tmp/$$"
|
Chris@222
|
39
|
Chris@222
|
40 tmpwav="/tmp/$$.wav"
|
Chris@222
|
41
|
Chris@222
|
42 transfile="/tmp/$$transform.ttl"
|
Chris@222
|
43
|
Chris@222
|
44 trap 'rm -f "$outfile" "$tmpwav" "$instfile" "$transfile" "$outfile.lab"' 0
|
Chris@222
|
45
|
Chris@222
|
46 infiles=$(find "$piano_path" -name \*.wav)
|
Chris@222
|
47
|
Chris@222
|
48 echo
|
Chris@222
|
49 echo "Input files are:"
|
Chris@222
|
50 echo $infiles | fmt -1
|
Chris@222
|
51
|
Chris@222
|
52 time for infile in $infiles; do
|
Chris@222
|
53
|
Chris@222
|
54 echo
|
Chris@222
|
55 echo "Evaluating for file $infile..."
|
Chris@222
|
56
|
Chris@222
|
57 intended_instrument=1 ## assumption: 1 == piano
|
Chris@222
|
58
|
Chris@222
|
59 # We run this twice, once using the default instrument
|
Chris@222
|
60 # (i.e. "multiple or unknown") and once using the intended
|
Chris@222
|
61 # instrument preset (piano).
|
Chris@222
|
62
|
Chris@222
|
63 filename=$(basename "$infile" .wav)
|
Chris@222
|
64
|
Chris@222
|
65 for instrument in $intended_instrument 0; do
|
Chris@222
|
66
|
Chris@222
|
67 echo
|
Chris@222
|
68 echo "For file $filename, instrument $instrument..."
|
Chris@222
|
69
|
Chris@222
|
70 # Don't normalise -- part of the point here is to make it work
|
Chris@222
|
71 # for various different levels
|
Chris@222
|
72 cp "$infile" "$tmpwav"
|
Chris@222
|
73
|
Chris@222
|
74 # generate the transform by interpolating the instrument parameter
|
Chris@222
|
75 cat transform.ttl | sed "s/INSTRUMENT_PARAMETER/$instrument/" > "$transfile"
|
Chris@222
|
76
|
Chris@222
|
77 sonic-annotator \
|
Chris@222
|
78 --writer csv \
|
Chris@222
|
79 --csv-one-file "$outfile" \
|
Chris@222
|
80 --csv-force \
|
Chris@222
|
81 --transform "$transfile" \
|
Chris@222
|
82 "$tmpwav"
|
Chris@222
|
83
|
Chris@222
|
84 cat "$outfile" | \
|
Chris@222
|
85 sed 's/^[^,]*,//' | \
|
Chris@222
|
86 while IFS=, read start duration frequency level label; do
|
Chris@222
|
87 end=`echo "$start $duration + p" | dc`
|
Chris@222
|
88 echo -e "$start\t$end\t$frequency"
|
Chris@222
|
89 done > "$outfile.lab"
|
Chris@222
|
90
|
Chris@222
|
91 for ms in 50; do
|
Chris@222
|
92 mark=""
|
Chris@222
|
93 if [ "$instrument" = "0" ]; then
|
Chris@222
|
94 mark=" <-- generic for $filename";
|
Chris@222
|
95 else
|
Chris@222
|
96 mark=" <-- piano preset for $filename";
|
Chris@222
|
97 fi;
|
Chris@222
|
98 echo
|
Chris@222
|
99 echo "Validating against ground truth at $ms ms:"
|
Chris@222
|
100 "$yc" ./evaluate_lab.yeti "$ms" "../piano-groundtruth/$filename.lab" "$outfile.lab" | sed 's,$,'"$mark"','
|
Chris@222
|
101 done;
|
Chris@222
|
102
|
Chris@222
|
103 echo
|
Chris@222
|
104 done
|
Chris@222
|
105 done
|