# Copyright (c) 1998-2001 Robert Woodcock <rcw@debian.org>
# Copyright (c) 2003-2006 Jesus Climent <jesus.climent@hispalinux.es>
# Copyright (c) 2009-2012 Colin Tuckley <colint@debian.org>
-# Copyright (c) 2012 Steve McIntyre <93sam@@debian.org>
+# Copyright (c) 2012- Steve McIntyre <93sam@@debian.org>
+# Copyright (c) 2015- Andrew Strong <andrew.david.strong@gmail.com>
# This code is hereby licensed for public consumption under either the
# GNU GPL v2 or greater, or Larry Wall's Artistic license - your choice.
#
# You should have received a copy of the GNU General Public License along
# with this program; if not, write to the Free Software Foundation, Inc.,
# 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
-#
-# Copyright for this work is to expire January 1, 2010, after which it
-# shall be public domain.
-VERSION='2.6.1-UNRELEASED'
+VERSION='2.7.2-UNRELEASED'
usage ()
{
echo "-n No lookup. Don't query CDDB, just create and use template"
echo "-N Noninteractive. Never prompt for anything"
echo "-o <type1[,type2]...>"
-echo " Output file type(s) (vorbis,mp3,flac,spx,mpc,wav,m4a,opus,wv,ape). Defaults to vorbis"
+echo " Output file type(s) (vorbis,mp3,flac,spx,mpc,wav,m4a,opus,wv,ape,mp2,tta). Defaults to vorbis"
echo "-p Pad track numbers with 0's (if less than 10 tracks)"
echo "-P Use UNIX pipes to read+encode without wav files"
echo "-r <host1[,host2]...>"
BLURB="$1"
shift
case $BLURB in
- error) echo "[ERROR] abcde: $@" >&2 ;;
- warning) echo "[WARNING] $@" >&2 ;;
- info) echo "[INFO] $@" ;;
+ error) >&2 echo "[ERROR] abcde: $@" >&2 ;;
+ warning) >&2 echo "[WARNING] $@" >&2 ;;
+ info) >&4 echo "[INFO] $@" ;;
esac
}
if [ "$(which $X)" = "" ]; then
log error "$X is not in your path." >&2
log info "Define the full path to the executable if it exists on your system." >&2
- if [ -e /etc/debian_release ] ; then
+ if [ -e /etc/debian_* ] ; then
case $X in
oggenc) MISSING_PACKAGE=vorbis-tools ;;
lame|flac) MISSING_PACKAGE=$X ;;
esac
- log info "Hint: apt-get install $MISSING_PACKAGE" >&2
+ log info "Hint: sudo apt-get install $MISSING_PACKAGE" >&2
fi
exit 1
elif [ ! -x "$(which $X)" ]; then
"jpop") id=146 ;;
"synthpop") id=147 ;;
"rock/pop"|"rock / pop") id=148 ;;
- *) return 1 ;;
+ *) id=255 ;;
esac
echo ${id}
return 0
fi
(
# These are from
- # http://www.xiph.org/ogg/vorbis/doc/v-comment.html
+ # http://www.xiph.org/vorbis/doc/v-comment.html
echo ARTIST="$TRACKARTIST"
echo ALBUM="$DALBUM"
echo GENRE="$CDGENRE"
fi
echo TRACKNUMBER=${TRACKNUM:-$1}
+ # TRACKTOTAL is not in the proposed, minimal list of standard field names from
+ # xiph.org: http://www.xiph.org/vorbis/doc/v-comment.html but is in common usage
+ # and read by mediainfo, ffprobe, vlc, Aqualung, ogg123, Foobar. And now abcde :)
+ # The tag is quietly ignored by Audacious, MPlayer, mpv, XMMS....
+ echo TRACKTOTAL="${TRACKS}"
if [ -n "$DISCNUMBER" ]; then
echo DISCNUMBER="$DISCNUMBER"
fi
echo GENRE="$CDGENRE"
fi
echo TRACKNUMBER="${TRACKNUM:-$1}"
+ # TRACKTOTAL is not in the proposed, minimal list of standard field names from
+ # xiph.org: http://www.xiph.org/vorbis/doc/v-comment.html but is in common usage
+ # and read by mediainfo, ffprobe, vlc, Aqualung, ogg123, Foobar. And now abcde :)
+ # The tag is quietly ignored by Audacious, MPlayer, mpv, XMMS....
+ echo TRACKTOTAL="${TRACKS}"
if [ -n "$DISCNUMBER" ]; then
echo DISCNUMBER="$DISCNUMBER"
fi
-p artist="$TRACKARTIST" -p album="$DALBUM" -p title="$TRACKNAME" -p track=${TRACKNUM:-$1} \
-p year="$CDYEAR" -p genre="$CDGENRE" ${COMMENTOUTPUT:+-p comment="$COMMENTOUTPUT"}
;;
+ mp2)
+ # Using Mutagen's mid3v2 for tagging with id3v2.4.0. Interesting enough vlc, MPlayer and XMMS ignore
+ # these tags but they are read by Audacious, Xine, Aqualung, mediainfo, ffplay, ffprobe. FFmpeg does
+ # not currently tag mp2 audio so twolame and FFmpeg will both use mid3v2...
+ run_command tagtrack-$OUTPUT-$1 nice $ENCNICE "$MID3V2" --verbose -A "$DALBUM" -a "$TRACKARTIST" -t "$TRACKNAME" \
+ -y "$CDYEAR" -g "$CDGENRE" -T "${TRACKNUM:-$1}/$TRACKS" ${TPE2:+--TPE2 "$TPE2"} ${COMMENTOUTPUT:+--comment="$COMMENTOUTPUT"} \
+ "$ABCDETEMPDIR/track$1.mp2"
+ ;;
aac)
run_command tagtrack-$OUTPUT-$1 true
;;
faac)
run_command tagtrack-$OUTPUT-$1 true
;;
+ qaac)
+ run_command tagtrack-$OUTPUT-$1 true
+ ;;
+ fhgaacenc)
+ # Tag post encode with AtomicParsley. Note that previous problems with seg fault when using
+ # 'overWrite' cannot be reproduced with newer versions: https://bitbucket.org/wez/atomicparsley
+ run_command tagtrack-$OUTPUT-$1 nice $ENCNICE "$ATOMICPARSLEY" "$ABCDETEMPDIR/track$1.m4a" \
+ --artist="$TRACKARTIST" --album="$DALBUM" --title="$TRACKNAME" --tracknum=${TRACKNUM:-$1} \
+ --year="$CDYEAR" --genre="$CDGENRE" --comment="$COMMENT" $ATOMICPARSLEYOPTS --overWrite
+ ;;
+ ffmpeg)
+ run_command tagtrack-$OUTPUT-$1 true
+ ;;
esac
;;
+ tta)
+ # We use mid3v2 tagging for True Audio:
+ run_command tagtrack-$OUTPUT-$1 nice $ENCNICE "$MID3V2" --verbose -A "$DALBUM" -a "$TRACKARTIST" -t "$TRACKNAME" \
+ -y "$CDYEAR" -g "$CDGENRE" -T "${TRACKNUM:-$1}/$TRACKS" ${TPE2:+--TPE2 "$TPE2"} ${COMMENTOUTPUT:+--comment="$COMMENTOUTPUT"} \
+ "$ABCDETEMPDIR/track$1.tta"
+ ;;
wav)
run_command tagtrack-$OUTPUT-$1 true
;;
case "$OUTPUT" in
mp3)
case "$MP3ENCODERSYNTAX" in
- lame|toolame)
+ lame)
(
cd "$ABCDETEMPDIR"
TRACKFILES=
wv)
TEMPARG="PIPE_$WVENCODERSYNTAX"
;;
+ tta)
+ TEMPARG="PIPE_$TTAENCODERSYNTAX"
+ ;;
aac)
TEMPARG="PIPE_$AACENCODERSYNTAX"
;;
case "$2" in
%local*%)
case "$MP3ENCODERSYNTAX" in
- lame|toolame|gogo) $RUN_COMMAND nice $EFFECTIVE_NICE $MP3ENCODER $MP3ENCODEROPTS "$IN" "$OUT" ;;
+ lame|gogo) $RUN_COMMAND nice $EFFECTIVE_NICE $MP3ENCODER $MP3ENCODEROPTS "$IN" "$OUT" ;;
bladeenc) $RUN_COMMAND nice $EFFECTIVE_NICE $MP3ENCODER $MP3ENCODEROPTS -quit "$IN" "$OUT" ;;
l3enc|xingmp3enc) $RUN_COMMAND nice $EFFECTIVE_NICE $MP3ENCODER "$IN" "$OUT" $MP3ENCODEROPTS ;;
mp3enc) $RUN_COMMAND nice $EFFECTIVE_NICE $MP3ENCODER -if "$IN" -of "$OUT" $MP3ENCODEROPTS ;;
$RUN_COMMAND nice $EFFECTIVE_NICE $MPCENCODER $MPCENCODEROPTS "$IN" "$OUT"
fi
;;
+ tta)
+ case "$TTAENCODERSYNTAX" in
+ # tta is the newer version with a small syntax change...
+ tta)
+ $RUN_COMMAND nice $EFFECTIVE_NICE $TTAENCODER -e $TTAENCODEROPTS "$IN" "$OUT"
+ ;;
+ ttaenc)
+ $RUN_COMMAND nice $EFFECTIVE_NICE $TTAENCODER -e $TTAENCODEROPTS "$IN" -o "$OUT"
+ ;;
+ esac
+ ;;
wv)
- if [ "$DOTAG" = "y" ]; then
- $RUN_COMMAND nice $EFFECTIVE_NICE $WVENCODER $WVENCODEROPTS -w Artist="$TRACKARTIST" -w Album="$DALBUM" \
- -w Title="$TRACKNAME" -w Track="$1" -w Genre="$CDGENRE" -w Year="$CDYEAR" ${COMMENT:+-w Comment="$COMMENT"} "$IN" -o "$OUT"
- else
- $RUN_COMMAND nice $EFFECTIVE_NICE $WVENCODER $WVENCODEROPTS "$IN" -o "$OUT"
- fi
+ case "$WVENCODERSYNTAX" in
+ wavpack)
+ if [ "$DOTAG" = "y" ]; then
+ $RUN_COMMAND nice $EFFECTIVE_NICE $WVENCODER $WVENCODEROPTS -w Artist="$TRACKARTIST" -w Album="$DALBUM" \
+ -w Title="$TRACKNAME" -w Track="$1" -w Genre="$CDGENRE" -w Year="$CDYEAR" ${COMMENT:+-w Comment="$COMMENT"} "$IN" -o "$OUT"
+ else
+ $RUN_COMMAND nice $EFFECTIVE_NICE $WVENCODER $WVENCODEROPTS "$IN" -o "$OUT"
+ fi
+ ;;
+ ffmpeg)
+ if [ "$DOTAG" = "y" ]; then
+ $RUN_COMMAND nice $EFFECTIVE_NICE $WVENCODER -i "$IN" $WVENCODEROPTS -metadata artist="$TRACKARTIST" \
+ -metadata album="$DALBUM" -metadata title="$TRACKNAME" -metadata track=${TRACKNUM:-$1} -metadata date="$CDYEAR" \
+ -metadata genre="$CDGENRE" -metadata comment="$COMMENT" "$OUT"
+ else
+ $RUN_COMMAND nice $EFFECTIVE_NICE $WVENCODER -i "$IN" $WVENCODEROPTS "$OUT"
+ fi
+ ;;
+ esac
;;
ape)
$RUN_COMMAND nice $EFFECTIVE_NICE $APENCODER "$IN" "$OUT" $APENCODEROPTS
;;
+ mp2)
+ case "$MP2ENCODERSYNTAX" in
+ twolame)
+ $RUN_COMMAND nice $EFFECTIVE_NICE $MP2ENCODER $MP2ENCODEROPTS "$IN" "$OUT"
+ ;;
+ ffmpeg)
+ $RUN_COMMAND nice $EFFECTIVE_NICE $MP2ENCODER -i "$IN" $MP2ENCODEROPTS "$OUT"
+ ;;
+ esac
+ ;;
aac)
# aac container is only used to catch faac encoded files where faac
# is compiled without mp4 support (with libmp4v2).
$RUN_COMMAND nice $EFFECTIVE_NICE $AACENCODER $AACENCODEROPTS "$IN" -o "$OUT"
fi
;;
+ qaac)
+ if [ "$DOTAG" = "y" ]; then
+ $RUN_COMMAND nice $EFFECTIVE_NICE $WINE $AACENCODER $AACENCODEROPTS --artist "$TRACKARTIST" --album "$DALBUM" \
+ --title "$TRACKNAME" --track ${TRACKNUM:-$1} --date "$CDYEAR" --genre "$CDGENRE" --comment "$COMMENT" -o "$OUT" "$IN"
+ else
+ $RUN_COMMAND nice $EFFECTIVE_NICE $WINE $AACENCODER $AACENCODEROPTS -o "$OUT" "$IN"
+ fi
+ ;;
+ fhgaacenc)
+ $RUN_COMMAND nice $EFFECTIVE_NICE $WINE $AACENCODER $AACENCODEROPTS "$IN" "$OUT"
+ ;;
+ ffmpeg)
+ if [ "$DOTAG" = "y" ]; then
+ $RUN_COMMAND nice $EFFECTIVE_NICE $AACENCODER -i "$IN" $AACENCODEROPTS -metadata artist="$TRACKARTIST" \
+ -metadata album="$DALBUM" -metadata title="$TRACKNAME" -metadata track=${TRACKNUM:-$1} -metadata date="$CDYEAR" \
+ -metadata genre="$CDGENRE" -metadata comment="$COMMENT" "$OUT"
+ else
+ $RUN_COMMAND nice $EFFECTIVE_NICE $AACENCODER -i "$IN" $AACENCODEROPTS "$OUT"
+ fi
+ ;;
esac
;;
wav)
OUTPUT="$TMPOUTPUT"
# Create ALBUMFILE, ARTISTFILE, TRACKFILE
- # Munge filenames as follows:
- # ' ' -> '_'
- # '/' -> '_'
- # ''' -> ''
- # '?' -> ''
- # Eat control characters
ALBUMFILE="$(mungefilename "$DALBUM")"
ARTISTFILE="$(mungefilename "$TRACKARTIST")"
TRACKFILE="$(mungefilename "$TRACKNAME")"
CDTEXT_READER=icedax
elif new_checkexec cdda2wav; then
CDTEXT_READER=cdda2wav
- else
+ else
# Didn't find either, bail
return 0
fi
# set variables
ALBUMFILE="$(mungefilename "$DALBUM")"
ARTISTFILE="$(mungefilename "$DARTIST")"
+ GENRE="$(mungegenre "$GENRE")"
+ YEAR=${CDYEAR:-$CDYEAR}
# have we got a musicbrainz mbid or amazon asin?
case "$CDDBMETHOD" in
musicbrainz)
$HTTPGET "$ALBUMARTURL" > "$ABCDETEMPDIR/$ALBUMARTFILE"
if [ $? -ne 0 ]; then
vecho "could not download cover from amazon" >&2
+ else
+ # Check that size is reasonable; sometimes when there is no cover image
+ # on amazon.com a 1x1 pixel gif image will be downloaded instead:
+ FILESIZE=$(wc -c < "$ABCDETEMPDIR/$ALBUMARTFILE")
+ if [ "$FILESIZE" -lt 1024 ]; then
+ rm "$ABCDETEMPDIR/$ALBUMARTFILE"
+ vecho "could not download cover from amazon" >&2
+ fi
fi
else
vecho "no amazon ID found" >&2
if [ x"$EXTRAVERBOSE" != "x" ] && [ $EXTRAVERBOSE -gt 0 ] ; then
case $1 in
warning) shift ; log warning "$@" ;;
- *) echo "$@" ;;
+ *) >&4 echo "$@" ;;
esac
fi
}
if [ x"$EXTRAVERBOSE" != "x" ] && [ $EXTRAVERBOSE -gt 1 ] ; then
case $1 in
warning) shift ; log warning "$@" ;;
- *) echo "$@" ;;
+ *) >&4 echo "$@" ;;
esac
fi
}
if [ x"$DEBUG" != "x" ]; then
if echo $1 | grep "^\[" > /dev/null 2>&1 ; then
DEBUGECHO=$(echo "$@" | tr -d '[]')
- echo "[DEBUG] $DEBUGECHO: `eval echo \\$${DEBUGECHO}`"
+ echo >&4 "[DEBUG] $DEBUGECHO: `eval echo \\$${DEBUGECHO}`"
else
- echo "[DEBUG] $1"
+ echo >&4 "[DEBUG] $1"
fi
fi
}
# Custom filename munging:
mungefilename ()
{
- #echo "$@" | sed s,:,\ -,g | tr \ /\* __+ | tr -d \'\"\?\[:cntrl:\]
- echo "$@" | sed s,:,\ -,g | tr \ / __ | tr -d \'\"\?\[:cntrl:\]
+ echo "$@" | sed -e 's/^\.*//' -e 's/ /_/g' | tr -d ":><|*/\"'?[:cntrl:]"
}
# Custom genre munging:
SPEEXENCODERSYNTAX=default
MPCENCODERSYNTAX=default
WVENCODERSYNTAX=default
+TTAENCODERSYNTAX=default
APENCODERSYNTAX=default
+MP2ENCODERSYNTAX=default
AACENCODERSYNTAX=default
NORMALIZERSYNTAX=default
CUEREADERSYNTAX=default
# program paths - defaults to checking your $PATH
# mp3
LAME=lame
-TOOLAME=toolame
GOGO=gogo
BLADEENC=bladeenc
L3ENC=l3enc
# mpc (Musepack)
MPCENC=mpcenc
# wv (wavpack)
+# WVENC is retained in abcde 2.7.1 for backwards compatibility
+# with abcde 2.7:
WVENC=wavpack
+WAVPACK=wavpack
+# True Audio: 'tta' is the newer version, 'ttaenc' is the older version:
+TTA=tta
+TTAENC=ttaenc
# ape
APENC=mac
APETAG=apetag
+# mp2
+TWOLAME=twolame
# m4a
FAAC=faac
NEROAACENC=neroAacEnc
FDKAAC=fdkaac
+# Note that the qaac PATH will almost always require adjustment
+# as it is a Windows application being run through Wine. More
+# detailed notes in the sample abcde.conf file in the abcde tarball.
+QAAC=qaac
+FHGAACENC=fhgaacenc
+# The path to 'avconv' rather than 'ffmpeg'can be used here:
+FFMPEG=ffmpeg
ID3=id3
ID3V2=id3v2
+MID3V2=mid3v2
EYED3=eyeD3
VORBISCOMMENT=vorbiscomment
METAFLAC=metaflac
NEROAACTAG=neroAacTag
+ATOMICPARSLEY=AtomicParsley
+WINE=wine
CDPARANOIA=cdparanoia
CD_PARANOIA=cd-paranoia
CDDA2WAV=icedax
# Options for programs called from abcde
# mp3
LAMEOPTS=
-TOOLAMEOPTS=
GOGOOPTS=
BLADEENCOPTS=
L3ENCOPTS=
# mpc
MPCENCOPTS=
# wv
-WVENCOPTS=
+WAVPACKENCOPTS=
+# True Audio has no useful options but it is here anyway :)
+TTAENCOPTS=
# ape
# Monkey's Audio Console (mac) chokes without a mode setting
# so we set one here.
APENCOPTS='-c4000'
+# mp2
+TWOLAMENCOPTS=
# m4a
FAACENCOPTS=
NEROACENCOPTS=
# fdkaac chokes without either a bitrate or bitrate-mode specified so
# we set bitrate here.
-FDKAACENCOPTS='192k'
+FDKAACENCOPTS='--bitrate 192k'
+QAACENCOPTS=
+FHGAACENCOPTS=
+FFMPEGENCOPTS=
ID3OPTS=
EYED3OPTS=""
+ATOMICPARSLEYOPTS=
CDPARANOIAOPTS=
PIRDOPTS=
CDDA2WAVOPTS=
# This option is basically for Debian package dependencies:
# List of preferred outputs - by default, run with whatever we have in the path
-DEFAULT_OUTPUT_BINARIES=vorbis:oggenc,flac:flac,mp3:toolame,mp3:lame,mp3:bladeenc,spx:speex,m4a:faac:opus
+DEFAULT_OUTPUT_BINARIES=vorbis:oggenc,flac:flac,mp3:lame,mp3:bladeenc,spx:speex,m4a:faac:opus
# List of preferred cdromreaders - by default, run whichever we have in the path
DEFAULT_CDROMREADERS="cdparanoia icedax cdda2wav libcdio pird"
+# fd for when `vecho` and `log info` called with redirected stdout
+exec 4>&1
+
# Assume fetch if under FreeBSD. curl is used for Mac OS X. wget is used for
# Linux/OpenBSD. ftp is user for NetBSD.
# Let's use these checkings to determine the OS flavour, which will be used
spx:*) SPEEXENCODEROPTSCLI="$( echo $OUTPUT | cut -d: -f2- )" ;;
mpc:*) MPCENCODEROPTSCLI="$( echo $OUTPUT | cut -d: -f2- )" ;;
wv:*) WVENCODEROPTSCLI="$( echo $OUTPUT | cut -d: -f2- )" ;;
+ tta:*) TTAENCODEROPTSCLI="$( echo $OUTPUT | cut -d: -f2- )" ;;
ape:*) APENCODEROPTSCLI="$( echo $OUTPUT | cut -d: -f2- )" ;;
+ mp2:*) MP2ENCODEROPTSCLI="$( echo $OUTPUT | cut -d: -f2- )" ;;
m4a:*|aac:*) AACENCODEROPTSCLI="$( echo $OUTPUT | cut -d: -f2- )" ;;
esac
done
[ "$WVENCODERSYNTAX" = "default" ] && WVENCODERSYNTAX=wavpack
[ "$DOTAG" = "y" ]
[ "$DOREPLAYGAIN" = "y" ] && NEEDWVGAIN=y
+ [ "$WVENCODERSYNTAX" = "ffmpeg" ] && DOREPLAYGAIN=n
;;
ape)
[ "$APENCODERSYNTAX" = "default" ] && APENCODERSYNTAX=mac
[ "$DOTAG" = "y" ] && NEEDAPETAG=y
;;
+ mp2)
+ [ "$MP2ENCODERSYNTAX" = "default" ] && MP2ENCODERSYNTAX=twolame
+ [ "$DOTAG" = "y" ] && NEEDMID3V2=y
+ [ "$MP2ENCODERSYNTAX" = "ffmpeg" ] && [ "$DOTAG" = "y" ] && NEEDMID3V2=y
+ ;;
+ tta)
+ [ "$TTAENCODERSYNTAX" = "default" ] && TTAENCODERSYNTAX=tta
+ [ "$DOTAG" = "y" ] && NEEDMID3V2=y
+ [ "$TTAENCODERSYNTAX" = "ttaenc" ] && [ "$DOTAG" = "y" ] && NEEDMID3V2=y
+ ;;
aac)
[ "$AACENCODERSYNTAX" = "default" ] && AACENCODERSYNTAX=faac
[ "$DOTAG" = "n" ]
[ "$AACENCODERSYNTAX" = "default" ] && AACENCODERSYNTAX=faac
[ "$DOTAG" = "y" ] && CHECKFAACBUILD=y
[ "$AACENCODERSYNTAX" = "neroAacEnc" ] && NEEDNEROAACTAG=y
+ [ "$AACENCODERSYNTAX" = "qaac" ] && NEEDWINE=y
+ [ "$AACENCODERSYNTAX" = "fhgaacenc" ] && NEEDWINE=y && NEEDATOMICPARSLEY=y
+ [ "$AACENCODERSYNTAX" = "ffmpeg" ] && [ "$DOTAG" = "y" ]
;;
wav)
if [ "$KEEPWAVS" = "y" ]; then
MP3ENCODEROPTS="${MP3ENCODEROPTSCLI:-$LAMEOPTS}"
MP3ENCODER="$LAME"
;;
- toolame)
- MP3ENCODEROPTS="${MP3ENCODEROPTSCLI:-$TOOLAMEOPTS}"
- MP3ENCODER="$TOOLAME"
- ;;
gogo)
MP3ENCODEROPTS="${MP3ENCODEROPTSCLI:-$GOGOOPTS}"
MP3ENCODER="$GOGO"
esac
case "$WVENCODERSYNTAX" in
wavpack)
- WVENCODEROPTS="${WVENCODEROPTSCLI:-$WVENCOPTS}"
- WVENCODER="$WVENC"
+ # Syntax changed slightly between abcde 2.7 and abcde 2.7.1,
+ # and in the interests of backward compatibility:
+ if [ -z "$WAVPACKENCOPTS" ] && [ -n "$WVENCOPTS" ]; then
+ WVENCODEROPTS="${WVENCODEROPTSCLI:-$WVENCOPTS}"
+ WVENCODER="$WAVPACK"
+ else
+ WVENCODEROPTS="${WVENCODEROPTSCLI:-$WAVPACKENCOPTS}"
+ WVENCODER="$WAVPACK"
+ fi
+ ;;
+ ffmpeg)
+ WVENCODEROPTS="${WVENCODEROPTSCLI:-$FFMPEGENCOPTS}"
+ WVENCODER="$FFMPEG"
+ ;;
+esac
+case "$TTAENCODERSYNTAX" in
+ tta)
+ TTAENCODEROPTS="${TTAENCODEROPTSCLI:-$TTAENCOPTS}"
+ TTAENCODER="$TTA"
+ ;;
+ ttaenc)
+ TTAENCODEROPTS="${TTAENCODEROPTSCLI:-$TTAENCOPTS}"
+ TTAENCODER="$TTAENC"
;;
esac
case "$APENCODERSYNTAX" in
APENCODER="$APENC"
;;
esac
+case "$MP2ENCODERSYNTAX" in
+ twolame)
+ MP2ENCODEROPTS="${MP2ENCODEROPTSCLI:-$TWOLAMENCOPTS}"
+ MP2ENCODER="$TWOLAME"
+ ;;
+ ffmpeg)
+ MP2ENCODEROPTS="${MP2ENCODEROPTSCLI:-$FFMPEGENCOPTS}"
+ MP2ENCODER="$FFMPEG"
+ ;;
+esac
case "$AACENCODERSYNTAX" in
- # Some elaborate 'if' work to keep backward compatability for those
+ # Some elaborate 'if' work to keep backward compatibility for those
# who don't realise that AACENCOPTS does not work with abcde from
- # version 2.6.1 onwards.
+ # version 2.7 onwards.
faac)
if [ -z "$FAACENCOPTS" ] && [ -n "$AACENCOPTS" ]; then
AACENCODEROPTS="${AACENCODEROPTSCLI:-$AACENCOPTS}"
AACENCODER="$FDKAAC"
fi
;;
+ qaac)
+ if [ -z "$QAACENCOPTS" ] && [ -n "$AACENCOPTS" ]; then
+ AACENCODEROPTS="${AACENCODEROPTSCLI:-$AACENCOPTS}"
+ AACENCODER="$QAAC"
+ else
+ AACENCODEROPTS="${AACENCODEROPTSCLI:-$QAACENCOPTS}"
+ AACENCODER="$QAAC"
+ fi
+ ;;
+ fhgaacenc)
+ if [ -z "$FHGAACENCOPTS" ] && [ -n "$AACENCOPTS" ]; then
+ AACENCODEROPTS="${AACENCODEROPTSCLI:-$AACENCOPTS}"
+ AACENCODER="$FHGAACENC"
+ else
+ AACENCODEROPTS="${AACENCODEROPTSCLI:-$FHGAACENCOPTS}"
+ AACENCODER="$FHGAACENC"
+ fi
+ ;;
+ ffmpeg)
+ if [ -z "$FFMPEGENCOPTS" ] && [ -n "$AACENCOPTS" ]; then
+ AACENCODEROPTS="${AACENCODEROPTSCLI:-$AACENCOPTS}"
+ AACENCODER="$FFMPEG"
+ else
+ AACENCODEROPTS="${AACENCODEROPTSCLI:-$FFMPEGENCOPTS}"
+ AACENCODER="$FFMPEG"
+ fi
+ ;;
esac
# and which tagger
PIPE_mpcenc="-"
PIPE_wavpack="-"
PIPE_faac="-"
+PIPE_qaac="-"
+PIPE_fhgaacenc="-"
+PIPE_ffmpeg="-"
+PIPE_tta="-"
+PIPE_ttaenc="-"
# Both neroAacEnc and fdkaac seem to manage without the addition of
# the 'ignorelength' option in PIPE_$AACENCODERSYNTAX when piping
# in this manner. Andrew.
PIPEENCODERSVARCHECK="PIPE_$MPCENCODERSYNTAX" ;;
wv)
PIPEENCODERSVARCHECK="PIPE_$WVENCODERSYNTAX" ;;
+ tta)
+ PIPEENCODERSVARCHECK="PIPE_$TTAENCODERSYNTAX" ;;
m4a)
PIPEENCODERSVARCHECK="PIPE_$AACENCODERSYNTAX" ;;
aac)
if [ "$( eval echo "\$$PIPERIPPERSVARCHECK" )" = "$" ] || \
[ "$( eval echo "\$$PIPERIPPERSVARCHECK" )" = "" ] ; then
log error "no support for pipes with given ripper"
- log error "read the USEPIPES file from the source tarball to get help."
- log error "On a Debian system, it is under /usr/share/doc/abcde/USEPIPES.gz"
+ log error "read the FAQ file from the source tarball to get help."
exit 1;
fi
decho "PIPEENCODERSVARCHECK: $( eval echo "\$$PIPEENCODERSVARCHECK" )"
if [ "$( eval echo "\$$PIPEENCODERSVARCHECK" )" = "$" ] || \
[ "$( eval echo "\$$PIPEENCODERSVARCHECK" )" = "" ] ; then
log error "no support for pipes with given encoder"
- log error "read the USEPIPES file from the source tarball to help"
- log error "on a Debian system, read /usr/share/doc/abcde/USEPIPES.gz"
+ log error "read the FAQ file from the source tarball to get help"
exit 1;
fi
fi
# Make sure a buncha things exist
for X in $CDROMREADER $CDDISCID ${NEEDTAGGER+$TAGGER} $MP3ENCODER \
$OGGENCODER $OPUSENCODER $FLACENCODER $SPEEXENCODER $MPCENCODER \
- $AACENCODER $WVENCODER $CDDBTOOL $APENCODER \
+ $AACENCODER $WVENCODER $CDDBTOOL $APENCODER $MP2ENCODER $TTAENCODER \
${NEEDHTTPGET+$HTTPGET} ${NEEDDISTMP3+$DISTMP3} \
${NEEDCOMMENTER+$VORBISCOMMENT} ${NEEDMETAFLAC+$METAFLAC} \
${NEEDNORMALIZER+$NORMALIZER} ${NEEDEJECT+$EJECT} \
${NEEDMPCGAIN+$MPCGAIN} ${NEEDCUEREADER+$CUEREADER} \
${NEEDWVGAIN+WVGAIN} ${NEEDAPETAG+$APETAG} \
${NEEDCUE2DISCID+$CUE2DISCID} ${NEEDNEROAACTAG+$NEROAACTAG} \
- ${NEEDGLYRC+$GLYRC}
+ ${NEEDGLYRC+$GLYRC} ${NEEDWINE+$WINE} ${NEEDATOMICPARSLEY+$ATOMICPARSLEY} \
+ ${NEEDMID3V2+$MID3V2}
do
checkexec "$X"
done
$eject $EJECTOPTS $cd
elif [ X"$(uname)" = X"Darwin" ] ; then
diskutil eject ${CDROM#/dev/} 0
- elif [ -x $(which $EJECT) ]; then
+ elif [ -x $(which $EJECT) ]; then
$EJECT $EJECTOPTS "$CDROM"
fi
#fi
#BACK
if [ "$BATCHNORM" = "y" ] || [ "$NOGAP" = "y" ]; then
read GOAHEAD # For blocking - will contain either "NO" or "NEXTTRACK"
- if [ "$GOAHEAD" = "NO" ]; then break; fi
- for LASTTRACK in $TRACKQUEUE; do :; done
- if checkstatus readtrack-$LASTTRACK; then
- if [ "$DONORMALIZE" = "y" ] && [ "$BATCHNORM" = "y" ]; then
- if checkstatus normalizetrack-$LASTTRACK; then :; else do_batch_normalize; fi
- if checkerrors batch-normalize; then exit 1; fi
- fi
- if [ "$DOENCODE" = "y" ] && [ "$NOGAP" = "y" ]; then
- if [ "$DONORMALIZE" = "y" ]; then
- for UTRACKNUM in $TRACKQUEUE
- do
- if checkstatus readtrack-$UTRACKNUM; then
- if checkstatus normalizetrack-$UTRACKNUM; then :; else do_normalize $UTRACKNUM; fi
- fi
- done
+ if [ "$GOAHEAD" != "NO" ]; then
+ for LASTTRACK in $TRACKQUEUE; do :; done
+ if checkstatus readtrack-$LASTTRACK; then
+ if [ "$DONORMALIZE" = "y" ] && [ "$BATCHNORM" = "y" ]; then
+ if checkstatus normalizetrack-$LASTTRACK; then :; else do_batch_normalize; fi
+ if checkerrors batch-normalize; then exit 1; fi
+ fi
+ if [ "$DOENCODE" = "y" ] && [ "$NOGAP" = "y" ]; then
+ if [ "$DONORMALIZE" = "y" ]; then
+ for UTRACKNUM in $TRACKQUEUE
+ do
+ if checkstatus readtrack-$UTRACKNUM; then
+ if checkstatus normalizetrack-$UTRACKNUM; then :; else do_normalize $UTRACKNUM; fi
+ fi
+ done
+ fi
+ if checkstatus encodetrack-$LASTTRACK; then :; else do_nogap_encode; fi
+ if checkerrors nogap-encode; then exit 1; fi
fi
- if checkstatus encodetrack-$LASTTRACK; then :; else do_nogap_encode; fi
- if checkerrors nogap-encode; then exit 1; fi
fi
fi
fi