138 lines
3.7 KiB
Bash
138 lines
3.7 KiB
Bash
#!/bin/sh
|
|
progname=mugeco version=0.1
|
|
programr='Alexander Leidinger'
|
|
progdate='7 Dec 2000'
|
|
progdesc='MUltiGEnerationCOding'
|
|
# NEEDS: getopt, lame
|
|
# Please have a look at the DEFAULTS section.
|
|
|
|
# $Id: mugeco.sh,v 1.6 2000/12/08 13:47:56 aleidinger Exp $
|
|
|
|
usage() {
|
|
cat << EOF
|
|
** $progname v$version, $progdate **
|
|
by $programr
|
|
$progdesc
|
|
usage: $progname [ <flags> ] -g <num> <file>
|
|
-v use builtin VBR options
|
|
-g <num> number of generations
|
|
-h help
|
|
|
|
used
|
|
- env vars:
|
|
* LAME : alternative encoder binary
|
|
* LAMEOPT: alternative encoder options
|
|
- VBR opts: $enc_vbr_opts
|
|
- CBR opts: $enc_cbr_opts
|
|
EOF
|
|
}
|
|
|
|
# DEFAULTS
|
|
|
|
# if you can, use getopt(1) (c)1997 by Frodo Looijaard <frodol@dds.nl>
|
|
# it's in most modern unixen, or look at http://huizen.dds.nl/~frodol/
|
|
: ${GETOPT=getopt} # helper program
|
|
# mktemp (optional) is also in most modern unixen (originally from OpenBSD)
|
|
: ${MKTEMP=mktemp} # helper program
|
|
: ${TMPDIR:=/tmp} # set default temp directory
|
|
: ${LAME:=lame} # path to LAME
|
|
|
|
enc_cbr_opts="-b192 -h --lowpass 18 --lowpass-width 0"
|
|
enc_vbr_opts="--vbr-mtrh --nspsytune -v -h -d -Y -X3"
|
|
enc_opts=${LAMEOPT:-$enc_cbr_opts}
|
|
num= # default number of generations
|
|
|
|
# DEFINE FUNCTIONS
|
|
|
|
e() { echo "$progname: $*"; }
|
|
die() { # usage: die [ <exitcode> [ <errormessage> ] ]
|
|
trap '' 1 2 3 13 15
|
|
exitcode=0
|
|
[ $# -gt 0 ] && { exitcode=$1; shift; }
|
|
[ $# -gt 0 ] && e "Error: $*" >&2
|
|
exit $exitcode
|
|
}
|
|
|
|
# tfile()
|
|
# this function creates temporary files. 'tfile temp' will make a tempfile
|
|
# and put the path to it in the variable $temp (defaults to variable $tf)
|
|
trap 'for f in $ztfiles; do rm -f "$f"; done' 0
|
|
trap 'trap "" 1 2 3 13 15; exit 10' 1 2 3 13 15
|
|
unset ztfiles
|
|
tfile() { # usage: tfile <variable_name>
|
|
ztf=`$MKTEMP -q $TMPDIR/$progname.XXXXXX 2>/dev/null` # try mktemp
|
|
if [ $? -gt 0 -o -z "$ztf" ]; then # if mktemp fails, do it unsafely
|
|
ztf=$TMPDIR/$LOGNAME.$progname.$$
|
|
[ -e "$ztf" ] && ztf= || { touch $ztf && chmod 600 $ztf; }
|
|
fi
|
|
[ "$ztf" -a -f "$ztf" ] || { echo Could not make tempfile; exit 8; }
|
|
ztfiles="$ztfiles $ztf"
|
|
eval ${1:-tf}='$ztf'
|
|
}
|
|
|
|
# PARSE COMMAND LINE
|
|
|
|
options="g:vh" # option string for getopt(1)
|
|
help=; [ "$1" = -h -o "$1" = -help -o "$1" = --help ] && help=yes
|
|
[ "$help" ] && { usage; die; }
|
|
$GETOPT -T >/dev/null 2>&1
|
|
[ $? -eq 4 ] && GETOPT="$GETOPT -n $progname -s sh" #frodol's getopt?
|
|
eval set -- `$GETOPT "$options" "$@"`
|
|
[ $# -lt 1 ] && { die 9 getopt failed; }
|
|
while [ $# -gt 0 ]; do
|
|
case "$1" in
|
|
-g) num=$2; shift ;;
|
|
-v) enc_opts=$enc_cbr_opts ;;
|
|
-h) help=y ;;
|
|
--) shift; break ;;
|
|
*) usage; die 9 "invalid command line syntax!" ;;
|
|
esac
|
|
shift
|
|
done
|
|
[ "$help" ] && { usage; die; }
|
|
[ $# -eq 0 ] && { usage; die 9 no arguments; } #change or remove if desired
|
|
# sanity checking
|
|
[ "$num" ] && echo "$num"|grep -q '^[0-9]*$' && [ $num -ge 1 ] \
|
|
|| die 1 please use the -g flag with a valid number
|
|
|
|
# MAIN PROGRAM
|
|
|
|
# what version of lame are we using?
|
|
lame_vers=`$LAME 2>&1 | awk 'NR==1{print $3}'`
|
|
|
|
# check filename
|
|
[ -f "$1" ] || die 2 "'$1' isn't a file"
|
|
echo "$1"|grep -qi '\.wav$' || die 2 "'$1' isn't a .wav"
|
|
|
|
# make tempfiles
|
|
base=`echo "$1"|sed 's/\.[^.]*$//'`
|
|
dest=${base}_generation_$num.wav
|
|
[ -e "$dest" ] && die 2 "'$dest' already exists"
|
|
touch "$dest" || die 2 "couldn't create '$dest'"
|
|
TMPDIR=. tfile tmpwav
|
|
TMPDIR=. tfile tmpmp3
|
|
cp -f "$1" "$tmpwav"
|
|
|
|
# do the loop
|
|
start=`date`
|
|
i=1
|
|
while [ $i -le $num ]; do
|
|
e "Working on file '$1', generation number $i..."
|
|
|
|
$LAME $enc_opts --tc "lame $lame_vers; Generation: $i" \
|
|
"$tmpwav" "$tmpmp3" || die 3 encoding failed
|
|
$LAME --decode --mp3input "$tmpmp3" "$tmpwav" || die 3 decoding failed
|
|
|
|
i=`expr $i + 1`
|
|
done
|
|
end=`date`
|
|
|
|
# save the result
|
|
ln -f "$tmpwav" "$dest"
|
|
|
|
echo
|
|
e "Start: $start"
|
|
e "Stop : $end"
|
|
|
|
die
|