Chris@0
|
1 #!/bin/bash
|
Chris@0
|
2
|
Chris@0
|
3 base=/import/c4dm-music-a/C4DM\ Music\ Collection
|
Chris@0
|
4
|
Chris@0
|
5 mine=`date '+%Y-%m-%d_%H.%M.%S'`_$$
|
Chris@0
|
6 logfile="logs/$mine.log"
|
Chris@0
|
7 statusfile="logs/$mine.status"
|
Chris@0
|
8 matlogfile="logs/$mine.matlog"
|
Chris@0
|
9 mkdir -p logs
|
Chris@0
|
10
|
Chris@0
|
11 echo "base: $base"
|
Chris@0
|
12 echo "log file to $logfile"
|
Chris@0
|
13 echo "overall status reports to $statusfile"
|
Chris@0
|
14
|
Chris@0
|
15 report_failure() {
|
Chris@0
|
16 echo "FAIL $@" >> "$statusfile"
|
Chris@0
|
17 }
|
Chris@0
|
18 report_success() {
|
Chris@0
|
19 echo "WIN $@" >> "$statusfile"
|
Chris@0
|
20 }
|
Chris@0
|
21 report_existing() {
|
Chris@0
|
22 echo "HAZ $@" >> "$statusfile"
|
Chris@0
|
23 }
|
Chris@0
|
24 report_busy() {
|
Chris@0
|
25 echo "BUSY $@" >> "$statusfile"
|
Chris@0
|
26 }
|
Chris@0
|
27
|
Chris@0
|
28 find "$base" -type d | while read source; do
|
Chris@0
|
29
|
Chris@0
|
30 ls "$source" | fgrep -q .wav || continue
|
Chris@0
|
31
|
Chris@0
|
32 echo "source: $source"
|
Chris@0
|
33 dirname=${source#$base}
|
Chris@0
|
34 dirname=${dirname#/}
|
Chris@0
|
35 echo "dirname: $dirname"
|
Chris@0
|
36 [ -n "$dirname" ] || continue
|
Chris@0
|
37
|
Chris@0
|
38 for wavfilename in "$source/"*.wav; do # loop over songs
|
Chris@0
|
39
|
Chris@0
|
40 echo "$wavfilename"
|
Chris@0
|
41
|
Chris@0
|
42 songbasename=`basename "${wavfilename%.wav}"`
|
Chris@0
|
43 echo .................. new song "$dirname/$songbasename" .............
|
Chris@0
|
44 songdir="output/$dirname/$songbasename" # this is where all song-related features will go into
|
Chris@0
|
45 mkdir -p "$songdir"
|
Chris@0
|
46
|
Chris@0
|
47 ( if ! flock -en 200; then
|
Chris@0
|
48 echo "songdir $songdir is locked already, skipping it"
|
Chris@0
|
49 report_busy "$wavfilename"
|
Chris@0
|
50 exit
|
Chris@0
|
51 fi
|
Chris@0
|
52
|
Chris@0
|
53 echo "have lock on songdir $songdir"
|
Chris@0
|
54
|
Chris@0
|
55 if [ -s "$songdir/$songbasename""_vamp_matthiasm_nnls_chroma_bothchroma.csv" ]; then
|
Chris@0
|
56 echo "non-empty output file(s) exist -- not re-generating"
|
Chris@0
|
57 report_existing "$wavfilename"
|
Chris@0
|
58 exit
|
Chris@0
|
59 fi
|
Chris@0
|
60
|
Chris@0
|
61 echo oooooooooooooooooooooooooooooooooooooooooooooooo
|
Chris@0
|
62 echo low level feature extraction
|
Chris@0
|
63 echo oooooooooooooooooooooooooooooooooooooooooooooooo
|
Chris@0
|
64 VAMP_PATH=. ./sonic-annotator-unix \
|
Chris@0
|
65 -d vamp:matthiasm:nnls_chroma:simplechord \
|
Chris@0
|
66 -d vamp:matthiasm:nnls_chroma:bothchroma \
|
Chris@0
|
67 -d vamp:matthiasm:nnls_chroma:localtuning \
|
Chris@0
|
68 -d vamp:matthiasm:nnls_chroma:logfreqspec \
|
Chris@0
|
69 -d vamp:matthiasm:nnls_chroma:semitonespectrum \
|
Chris@0
|
70 -d vamp:matthiasm:nnls_chroma:tunedlogfreqspec \
|
Chris@0
|
71 -d vamp:matthiasm:nnls_chroma:tuning \
|
Chris@0
|
72 -w csv \
|
Chris@0
|
73 --csv-basedir "$songdir/" \
|
Chris@0
|
74 "$wavfilename"
|
Chris@0
|
75 matlab_infile=`echo "$wavfilename" | sed "s/'/''/g"`
|
Chris@0
|
76 matlab_chromafile=`echo "$songdir/$songbasename" | sed "s/'/''/g"`_vamp_matthiasm_nnls_chroma_bothchroma.csv
|
Chris@0
|
77 matlab_outbase=`echo "$songdir/$songbasename" | sed "s/'/''/g"`
|
Chris@0
|
78 matlab_segout="$matlab_outbase".seg
|
Chris@0
|
79 matlab_chordout="$matlab_outbase".chord
|
Chris@0
|
80 # matlab_keyout="$matlab_outbase".key # is still done in matlab
|
Chris@0
|
81 echo oooooooooooooooooooooooooooooooooooooooooooooooo
|
Chris@0
|
82 echo segmentation
|
Chris@0
|
83 echo oooooooooooooooooooooooooooooooooooooooooooooooo
|
Chris@0
|
84 echo "run_segmentation('$matlab_infile','$matlab_segout','$matlab_chromafile')" | matlab -nodisplay -nojvm 2>&1 >/dev/null | tee "$matlogfile"
|
Chris@0
|
85 if grep -qi "error" "$matlogfile" ; then
|
Chris@0
|
86 report_failure "$wavfilename"
|
Chris@0
|
87 exit
|
Chris@0
|
88 else
|
Chris@0
|
89 rm "$matlogfile"
|
Chris@0
|
90 fi
|
Chris@0
|
91 echo oooooooooooooooooooooooooooooooooooooooooooooooo
|
Chris@0
|
92 echo DBN chord estimation
|
Chris@0
|
93 echo oooooooooooooooooooooooooooooooooooooooooooooooo
|
Chris@0
|
94 echo "run_chordandkey('$matlab_infile','$matlab_chordout','$matlab_chromafile')" | matlab -nodisplay -nojvm 2>&1 >/dev/null | tee "$matlogfile"
|
Chris@0
|
95 cat "$matlogfile"
|
Chris@0
|
96 if grep -qi "error" "$matlogfile" ; then
|
Chris@0
|
97 report_failure "$wavfilename"
|
Chris@0
|
98 exit
|
Chris@0
|
99 else
|
Chris@0
|
100 rm "$matlogfile"
|
Chris@0
|
101 fi
|
Chris@0
|
102 report_success "$wavfilename"
|
Chris@0
|
103
|
Chris@0
|
104 )200>"$songdir/.lock"
|
Chris@0
|
105 done
|
Chris@0
|
106
|
Chris@0
|
107 done > "$logfile" 2>&1
|
Chris@0
|
108
|
Chris@0
|
109
|