makeWebAudio.sh
author Jim Hague <jim.hague@acm.org>
Sun, 01 Sep 2013 23:13:06 +0100
changeset 394 ae9c05d2aafd
parent 393 c5d404bf68a3
child 399 aeef7b1ca0ad
permissions -rwxr-xr-x
Make slow speed web audio files.

#!/bin/bash
#
# Make audio required for the website but not for the book.
# They go into web/<book>.
#

if [ $# != 1 ]; then
    echo "Usage: makeWebAudio.sh <book dir name>"
    exit 1
fi

dir=`pwd`

booke=$dir/$1
builddir=$dir/web/$1

mkdir -p $builddir

# Make MP3 and OGG files for the input .abc. In case we're generating
# to a live site (which we won't be), do this to temp files and rename
# into place to make updates as atomic as possible.
makeaudiofiles()
{
    name=`basename $1 .abc`
    tmpname=${name}.tmp

    abc2midi $1 -o $builddir/${tmpname}.mid
    timidity -OwM -o $builddir/${tmpname}.wav $builddir/${tmpname}.mid
    lame -m m -V 9 --quiet $builddir/${tmpname}.wav $builddir/${tmpname}.mp3
    # Timidity can generate OGG directly. But we need to generate WAV
    # for lame, and oggenc produces smaller output. OGG is needed for
    # Firefox's audio tag. FF doesn't support MP3, some others support
    # MP3 but not OGG.
    oggenc -Q -q 0 -o $builddir/${tmpname}.ogg $builddir/${tmpname}.wav

    mv $builddir/${tmpname}.mid $builddir/${name}.mid
    mv $builddir/${tmpname}.mp3 $builddir/${name}.mp3
    mv $builddir/${tmpname}.ogg $builddir/${name}.ogg
    rm $builddir/${tmpname}.wav
}

# Generate audio files and slow speed (currently half speed) audio files.
find $booke -name "*.abc" | sort |
    while read filename
    do
        makeaudiofiles $filename

        name=`basename $filename .abc`
        slowspeedfilename="slowspeed-${name}.abc"

        # Prepare slow speed audio files.
        # The tempo is either a plain number, or <notelen>=<number>.
        tempo=`$dir/abcfield.py --field Q $filename`
        if [ -z $tempo ]; then
            echo "Warning: $filename has no tempo. Using 120."
            tempo="120"
        fi
        pos=`expr index $tempo '='`
        numtempo=${tempo:pos}
        notelenprefix=${tempo:0:pos}
        # Make new tempo half original speed.
        newtempo=$(( $numtempo / 2 ))
        # Insert new tempo and delete old. Old may not exist,
        # so do this rather than overwrite.
        sed -e "/^Q:/d" -e "/^K:/aQ: ${notelenprefix}${newtempo}" $filename > $builddir/$slowspeedfilename
        makeaudiofiles $builddir/$slowspeedfilename
    done