view audio_key_detection/qm-keydetector/qm-keydetector.sh @ 26:f0d29b4dd81c abstract

Removed pdf; added paragraph on Onset Detector
author luisf <luis.figueira@eecs.qmul.ac.uk>
date Fri, 06 Sep 2013 11:11:07 +0100
parents 14844597d4d7
children
line wrap: on
line source

mydir=`dirname "$0"`
infile="$1"
outfile="$2"

if [ t"$infile" = "t" ] || [ t"$outfile" = "t" ]; then
    echo "Usage: $0 infile.wav outfile.txt"
    exit 2
fi

mkdir -p "$mydir"/out || exit 1

echo "Processing input WAV file $infile, writing results to $outfile..." 1>&2

# We want output like
#
# Bb<TAB>minor
#
# Our Sonic Annotator output gives us something like that for each
# detected key change (the feature label, in column 4), but we want
# the modal key (modal in the statistical rather than the musical
# sense!) and Sonic Annotator doesn't retain labels for summaries.  So
# let's write to a temporary file, retrieve the modal value, then pick
# the label (from earlier in the file) whose value corresponds to it.

VAMP_PATH="$mydir" sonic-annotator \
    -t "$mydir"/qm-keydetector.ttl \
    -w csv --csv-separator ";" \
    --csv-basedir "$mydir/out" \
    --csv-force \
    -S mode \
    "$infile" || exit 1

inbase=`basename "$infile"`
inbase=${inbase%.*}
tempfile="out/${inbase}_vamp_qm-vamp-plugins_qm-keydetector_key.csv"
if [ ! -f "$tempfile" ]; then
    echo "Key output file $tempfile not found! bailing out"; exit 1
fi

mode=`grep ';mode;' "$tempfile" | awk -F';' '{ print $4; }'`

cat "$tempfile" | \
    awk -F';' '{ print $2, $3 }' | \
    grep "^$mode \"" | \
    head -n 1 | \
    sed -e 's/^[^"]*"//' -e 's/"[^"]*$//' -e 's,/ [^ ]* ,,' -e 's/ /\t/' \
    > "$outfile"