Chris@0: #!/bin/bash Chris@0: Chris@0: base=/import/c4dm-music-a/C4DM\ Music\ Collection Chris@0: Chris@0: mine=`date '+%Y-%m-%d_%H.%M.%S'`_$$ Chris@0: logfile="logs/$mine.log" Chris@0: statusfile="logs/$mine.status" Chris@0: matlogfile="logs/$mine.matlog" Chris@0: mkdir -p logs Chris@0: Chris@0: echo "base: $base" Chris@0: echo "log file to $logfile" Chris@0: echo "overall status reports to $statusfile" Chris@0: Chris@0: report_failure() { Chris@0: echo "FAIL $@" >> "$statusfile" Chris@0: } Chris@0: report_success() { Chris@0: echo "WIN $@" >> "$statusfile" Chris@0: } Chris@0: report_existing() { Chris@0: echo "HAZ $@" >> "$statusfile" Chris@0: } Chris@0: report_busy() { Chris@0: echo "BUSY $@" >> "$statusfile" Chris@0: } Chris@0: Chris@0: find "$base" -type d | while read source; do Chris@0: Chris@0: ls "$source" | fgrep -q .wav || continue Chris@0: Chris@0: echo "source: $source" Chris@0: dirname=${source#$base} Chris@0: dirname=${dirname#/} Chris@0: echo "dirname: $dirname" Chris@0: [ -n "$dirname" ] || continue Chris@0: Chris@0: for wavfilename in "$source/"*.wav; do # loop over songs Chris@0: Chris@0: echo "$wavfilename" Chris@0: Chris@0: songbasename=`basename "${wavfilename%.wav}"` Chris@0: echo .................. new song "$dirname/$songbasename" ............. Chris@0: songdir="output/$dirname/$songbasename" # this is where all song-related features will go into Chris@0: mkdir -p "$songdir" Chris@0: Chris@0: ( if ! flock -en 200; then Chris@0: echo "songdir $songdir is locked already, skipping it" Chris@0: report_busy "$wavfilename" Chris@0: exit Chris@0: fi Chris@0: Chris@0: echo "have lock on songdir $songdir" Chris@0: Chris@0: if [ -s "$songdir/$songbasename""_vamp_matthiasm_nnls_chroma_bothchroma.csv" ]; then Chris@0: echo "non-empty output file(s) exist -- not re-generating" Chris@0: report_existing "$wavfilename" Chris@0: exit Chris@0: fi Chris@0: Chris@0: echo oooooooooooooooooooooooooooooooooooooooooooooooo Chris@0: echo low level feature extraction Chris@0: echo oooooooooooooooooooooooooooooooooooooooooooooooo Chris@0: VAMP_PATH=. ./sonic-annotator-unix \ Chris@0: -d vamp:matthiasm:nnls_chroma:simplechord \ Chris@0: -d vamp:matthiasm:nnls_chroma:bothchroma \ Chris@0: -d vamp:matthiasm:nnls_chroma:localtuning \ Chris@0: -d vamp:matthiasm:nnls_chroma:logfreqspec \ Chris@0: -d vamp:matthiasm:nnls_chroma:semitonespectrum \ Chris@0: -d vamp:matthiasm:nnls_chroma:tunedlogfreqspec \ Chris@0: -d vamp:matthiasm:nnls_chroma:tuning \ Chris@0: -w csv \ Chris@0: --csv-basedir "$songdir/" \ Chris@0: "$wavfilename" Chris@0: matlab_infile=`echo "$wavfilename" | sed "s/'/''/g"` Chris@0: matlab_chromafile=`echo "$songdir/$songbasename" | sed "s/'/''/g"`_vamp_matthiasm_nnls_chroma_bothchroma.csv Chris@0: matlab_outbase=`echo "$songdir/$songbasename" | sed "s/'/''/g"` Chris@0: matlab_segout="$matlab_outbase".seg Chris@0: matlab_chordout="$matlab_outbase".chord Chris@0: # matlab_keyout="$matlab_outbase".key # is still done in matlab Chris@0: echo oooooooooooooooooooooooooooooooooooooooooooooooo Chris@0: echo segmentation Chris@0: echo oooooooooooooooooooooooooooooooooooooooooooooooo Chris@0: echo "run_segmentation('$matlab_infile','$matlab_segout','$matlab_chromafile')" | matlab -nodisplay -nojvm 2>&1 >/dev/null | tee "$matlogfile" Chris@0: if grep -qi "error" "$matlogfile" ; then Chris@0: report_failure "$wavfilename" Chris@0: exit Chris@0: else Chris@0: rm "$matlogfile" Chris@0: fi Chris@0: echo oooooooooooooooooooooooooooooooooooooooooooooooo Chris@0: echo DBN chord estimation Chris@0: echo oooooooooooooooooooooooooooooooooooooooooooooooo Chris@0: echo "run_chordandkey('$matlab_infile','$matlab_chordout','$matlab_chromafile')" | matlab -nodisplay -nojvm 2>&1 >/dev/null | tee "$matlogfile" Chris@0: cat "$matlogfile" Chris@0: if grep -qi "error" "$matlogfile" ; then Chris@0: report_failure "$wavfilename" Chris@0: exit Chris@0: else Chris@0: rm "$matlogfile" Chris@0: fi Chris@0: report_success "$wavfilename" Chris@0: Chris@0: )200>"$songdir/.lock" Chris@0: done Chris@0: Chris@0: done > "$logfile" 2>&1 Chris@0: Chris@0: