dottes/makeWebAudio.sh

97 lines
3.2 KiB
Bash
Raw Permalink Normal View History

#!/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
basewebdir=$dir/web
basetunedir=$basewebdir/tunes
# Make MP3 and OGG files for the input .abc. Since we're listening to
# a doorbell playing the tunes, go for lowest quality (and hence smallest)
# MP3 and OGG. $1 is the input filename, $2 is the output directory,
# $3 is optional args for timidity.
2013-09-01 23:13:06 +01:00
makeaudiofiles()
{
name=`basename $1 .abc`
tunedir="$2"
2013-09-01 23:13:06 +01:00
abc2midi $1 -o $tunedir/${name}.tmp.mid -silent
mv $tunedir/${name}.tmp.mid $tunedir/${name}.mid
2024-01-07 10:47:38 +00:00
timidity --quiet -A600,600 -OwM $3 -o $tunedir/${name}.wav $tunedir/${name}.mid
lame -m m -V 9 --silent $tunedir/${name}.wav $tunedir/${name}.tmp.mp3
mv $tunedir/${name}.tmp.mp3 $tunedir/${name}.mp3
2013-09-01 23:13:06 +01:00
# 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 $tunedir/${name}.tmp.ogg $tunedir/${name}.wav
mv $tunedir/${name}.tmp.ogg $tunedir/${name}.ogg
2013-09-01 23:13:06 +01:00
rm $tunedir/${name}.wav
2013-09-01 23:13:06 +01:00
}
# Make audio for a new tempo for the abc file $1, giving the output
# files the same name with a prefix $3 in output directory $2. The new
# tempo is the original tempo (120 used if not specified), multiplied
# by $4 and divided by $5. These audio files are for Learner use;
# I've found that having the chords thumping away can make it hard to
# distinguish the melody, so arrange for timidity to mute everything
# except the melody track.
makeaudiofortempo()
{
name=`basename $1 .abc`
tunedir="$2"
newspeedfilename="$3-${name}.abc"
mkdir -p $tunedir
# Prepare new speed audio files.
# The tempo is either a plain number, or <notelen>=<number>.
tempo=`$dir/abcfield.py --field Q $1`
if [ -z $tempo ]; then
echo "Warning: $1 has no tempo. Using 120."
tempo="120"
fi
numtempo=${tempo##*=}
notelenprefix=${tempo%%=*}
if [ "$notelenprefix" = "$numtempo" ]; then
notelenprefix=
else
notelenprefix="${notelenprefix}="
fi
# Calculate new tempo.
newtempo=$(( ( $numtempo * $4 ) / $5 ))
# Insert new tempo and delete old. Old may not exist,
# so do this rather than overwrite.
sed -e "/^Q:/d" -e "/^K:/a\\
Q: ${notelenprefix}${newtempo}" $1 > $tunedir/$newspeedfilename
makeaudiofiles $tunedir/$newspeedfilename $tunedir --mute=0,-1
rm $tunedir/$newspeedfilename
}
2013-09-01 23:13:06 +01:00
# Generate audio files and slow speed (currently half speed) audio files.
find $booke -maxdepth 1 -name "*.abc" |
while read filename
do
name=`basename $filename .abc`
tunedir=$basetunedir/$name
mkdir -p $tunedir
makeaudiofiles $filename $tunedir
2013-09-01 23:13:06 +01:00
# Now make 1/4, 1/2 and 3/4 speed audio.
makeaudiofortempo $filename $tunedir "veryslow" 1 4
makeaudiofortempo $filename $tunedir "slow" 2 4
makeaudiofortempo $filename $tunedir "littleslow" 3 4
makeaudiofortempo $filename $tunedir "normal" 4 4
done