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