Mercurial > dottes
view makeWebAudio.sh @ 1029:1139aa0eb0c2
Revist tempo change code when generating web audio.
Now Mac friendly.
author | Jim Hague <jim.hague@acm.org> |
---|---|
date | Wed, 19 Feb 2020 10:33:55 +0000 |
parents | e4d31e094d24 |
children | 70e1ff83fe34 |
line wrap: on
line source
#!/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. makeaudiofiles() { name=`basename $1 .abc` tunedir="$2" abc2midi $1 -o $tunedir/${name}.tmp.mid mv $tunedir/${name}.tmp.mid $tunedir/${name}.mid timidity -OwM $3 -o $tunedir/${name}.wav $tunedir/${name}.mid lame -m m -V 9 --quiet $tunedir/${name}.wav $tunedir/${name}.tmp.mp3 mv $tunedir/${name}.tmp.mp3 $tunedir/${name}.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 $tunedir/${name}.tmp.ogg $tunedir/${name}.wav mv $tunedir/${name}.tmp.ogg $tunedir/${name}.ogg rm $tunedir/${name}.wav } # 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 )) echo "Old tempo $tempo new tempo ${notelenprefix}${newtempo}" # 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 } # Generate audio files and slow speed (currently half speed) audio files. find $booke -maxdepth 1 -name "*.abc" | sort | while read filename do name=`basename $filename .abc` tunedir=$basetunedir/$name # Already generated? if [ -f $tunedir/${name}.mp3 ]; then continue fi mkdir -p $tunedir makeaudiofiles $filename $tunedir # 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