# do_encode [tracknumber] [hostname]
# If no hostname is specified, encode locally
# variables used:
-# TRACKS, TRACKNAME, TRACKARTIST, DISTMP3, DISTMP3OPTS, {FOO}ENCODERSYNTAX, OUTPUTTYPE, ENCODEROPTS, DALBUM, DARTIST, ENCNICE, CDYEAR, CDGENRE, COMMENT
+# TRACKS, TRACKNAME, TRACKARTIST, DISTMP3, DISTMP3OPTS, {FOO}ENCODERSYNTAX, OUTPUTTYPE, ENCODEROPTS,
+# DALBUM, DARTIST, ENCNICE, CDYEAR, CDGENRE, COMMENT
do_encode ()
{
if [ "$USEPIPES" = "y" ]; then
wv)
TEMPARG="PIPE_$WVENCODERSYNTAX"
;;
- ape)
- TEMPARG="PIPE_$APENCODERSYNTAX"
- ;;
aac)
TEMPARG="PIPE_$AACENCODERSYNTAX"
;;
IN="$( eval echo "\$$TEMPARG" )"
else
IN="$ABCDETEMPDIR/track$1.wav"
- case "$OUTPUT" in
- mp3)
- case "$MP3ENCODERSYNTAX" in
- # FIXME # check if mp3enc needs -if for pipes
- # FIXME # I have not been able to find a working mp3enc binary
- mp3enc)
- FILEARG="-if $IN"
- ;;
- *)
- FILEARG="$IN"
- ;;
- esac
- ;;
- *)
- FILEARG="$IN"
- ;;
- esac
fi
# We need IN to proceed, if we are not using pipes.
if [ -s "$IN" -o X"$USEPIPES" = "Xy" ] ; then
RUN_COMMAND=""
# We need a way to store the creation of the files when using PIPES
RUN_COMMAND_PIPES="run_command encodetrack-$OUTPUT-$1 true"
- # When pipping it does not make sense to have a higher nice for
+ # When piping it does not make sense to have a higher nice for
# reading than for encoding, since it will be hold by the
# encoding process. Setting an effective nice, to calm down a
# bit the reading process.
lame|toolame|gogo) $RUN_COMMAND nice $EFFECTIVE_NICE $MP3ENCODER $MP3ENCODEROPTS "$IN" "$OUT" ;;
bladeenc) $RUN_COMMAND nice $EFFECTIVE_NICE $MP3ENCODER $MP3ENCODEROPTS -quit "$IN" ;;
l3enc|xingmp3enc) $RUN_COMMAND nice $EFFECTIVE_NICE $MP3ENCODER "$IN" "$OUT" $MP3ENCODEROPTS ;;
- # FIXME # Relates to the previous FIXME since it might need the "-if" removed.
mp3enc) $RUN_COMMAND nice $EFFECTIVE_NICE $MP3ENCODER -if "$IN" -of "$OUT" $MP3ENCODEROPTS ;;
esac
;;
%local*%)
case "$OPUSENCODERSYNTAX" in
opusenc)
- # Tag the file at encode time, as it can't be done after encoding.
- if [ "$DOTAG" = "y" ]; then
- $RUN_COMMAND nice $EFFECTIVE_NICE $OPUSENCODER $OPUSENCODEROPTS --artist "$TRACKARTIST" --album "$DALBUM" --title "$TRACKNAME" \
- --genre "$CDGENRE" --date "$CDYEAR" --comment TRACKNUMBER="$1" ${COMMENT:+--comment COMMENT="$COMMENT"} "$IN" "$OUT"
- else
- $RUN_COMMAND nice $EFFECTIVE_NICE $OPUSENCODER $OPUSENCODEROPTS "$IN" "$OUT"
- fi
- ;;
+ # Tag the file at encode time, as it can't be done after encoding.
+ if [ "$DOTAG" = "y" ]; then
+ $RUN_COMMAND nice $EFFECTIVE_NICE $OPUSENCODER $OPUSENCODEROPTS --artist "$TRACKARTIST" \
+ --album "$DALBUM" --title "$TRACKNAME" --genre "$CDGENRE" --date "$CDYEAR" --comment TRACKNUMBER="$1" \
+ ${COMMENT:+--comment COMMENT="$COMMENT"} "$IN" "$OUT"
+ else
+ $RUN_COMMAND nice $EFFECTIVE_NICE $OPUSENCODER $OPUSENCODEROPTS "$IN" "$OUT"
+ fi
+ ;;
esac
;;
*)
fi
# Tag the file at encode time, as it can't be done after encoding.
if [ "$DOTAG" = "y" ]; then
- $RUN_COMMAND nice $EFFECTIVE_NICE $SPEEXENCODER $SPEEXENCODEROPTS --author "$TRACKARTIST" --title "$TRACKNAME" ${COMMENT:+--comment "$COMMENT"} "$IN" "$OUT"
+ $RUN_COMMAND nice $EFFECTIVE_NICE $SPEEXENCODER $SPEEXENCODEROPTS --author "$TRACKARTIST" --title "$TRACKNAME" \
+ ${COMMENT:+--comment "$COMMENT"} "$IN" "$OUT"
else
$RUN_COMMAND nice $EFFECTIVE_NICE $SPEEXENCODER $SPEEXENCODEROPTS "$IN" "$OUT"
fi
;;
mpc)
- # Tag the file inline at encode time.
- if [ "$DOTAG" = "y" ]; then
- $RUN_COMMAND nice $EFFECTIVE_NICE $MPCENCODER $MPCENCODEROPTS --artist "$TRACKARTIST" --album "$DALBUM" --title "$TRACKNAME" \
- --track "$1" --genre "$CDGENRE" --year "$CDYEAR" ${COMMENT:+--comment "$COMMENT"} "$IN" "$OUT"
+ # Tag the file inline at encode time.
+ if [ "$DOTAG" = "y" ]; then
+ $RUN_COMMAND nice $EFFECTIVE_NICE $MPCENCODER $MPCENCODEROPTS --artist "$TRACKARTIST" --album "$DALBUM" \
+ --title "$TRACKNAME" --track "$1" --genre "$CDGENRE" --year "$CDYEAR" ${COMMENT:+--comment "$COMMENT"} "$IN" "$OUT"
else
- $RUN_COMMAND nice $EFFECTIVE_NICE $MPCENCODER $MPCENCODEROPTS "$IN" "$OUT"
+ $RUN_COMMAND nice $EFFECTIVE_NICE $MPCENCODER $MPCENCODEROPTS "$IN" "$OUT"
fi
;;
wv)
- if [ "$DOTAG" = "y" ]; then
- # wavpack tagging is done inline using Apev2 tags:
- $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
+ 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
;;
ape)
- $RUN_COMMAND nice $EFFECTIVE_NICE $APENCODER "$IN" "$OUT" $APENCODEROPTS
- ;;
+ $RUN_COMMAND nice $EFFECTIVE_NICE $APENCODER "$IN" "$OUT" $APENCODEROPTS
+ ;;
aac)
- # aac container is only used to catch faac encoded files where faac
- # is compiled without mp4 support (with libmp4v2). Andrew.
- $RUN_COMMAND nice $EFFECTIVE_NICE $AACENCODER $AACENCODEROPTS -o "$OUT" "$IN"
- ;;
+ # 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 -o "$OUT" "$IN"
+ ;;
m4a)
- case "$AACENCODERSYNTAX" in
- faac)
- if [ "$DOTAG" = "y" ]; then
- $RUN_COMMAND nice $EFFECTIVE_NICE $AACENCODER $AACENCODEROPTS --artist "$TRACKARTIST" \
- --album "$DALBUM" --title "$TRACKNAME" --track ${TRACKNUM:-$1} --year "$CDYEAR" \
- --genre "$CDGENRE" --comment "$COMMENT" -o "$OUT" "$IN"
- else
- $RUN_COMMAND nice $EFFECTIVE_NICE $AACENCODER $AACENCODEROPTS -o "$OUT" "$IN"
- fi
- ;;
- neroAacEnc)
- $RUN_COMMAND nice $EFFECTIVE_NICE $AACENCODER $AACENCODEROPTS -if "$IN" -of "$OUT"
- ;;
- fdkaac)
- if [ "$DOTAG" = "y" ]; then
- $RUN_COMMAND nice $EFFECTIVE_NICE $AACENCODER $AACENCODEROPTS --artist "$TRACKARTIST" --album "$DALBUM" \
- --title "$TRACKNAME" --track "$1" --genre "$CDGENRE" --date "$CDYEAR" --comment "$COMMENT" "$IN" -o "$OUT"
- else
- $RUN_COMMAND nice $EFFECTIVE_NICE $AACENCODER $AACENCODEROPTS "$IN" -o "$OUT"
- fi
- ;;
- esac
+ case "$AACENCODERSYNTAX" in
+ faac)
+ if [ "$DOTAG" = "y" ]; then
+ $RUN_COMMAND nice $EFFECTIVE_NICE $AACENCODER $AACENCODEROPTS --artist "$TRACKARTIST" --album "$DALBUM" \
+ --title "$TRACKNAME" --track ${TRACKNUM:-$1} --year "$CDYEAR" --genre "$CDGENRE" --comment "$COMMENT" -o "$OUT" "$IN"
+ else
+ $RUN_COMMAND nice $EFFECTIVE_NICE $AACENCODER $AACENCODEROPTS -o "$OUT" "$IN"
+ fi
+ ;;
+ neroAacEnc)
+ $RUN_COMMAND nice $EFFECTIVE_NICE $AACENCODER $AACENCODEROPTS -if "$IN" -of "$OUT"
+ ;;
+ fdkaac)
+ if [ "$DOTAG" = "y" ]; then
+ $RUN_COMMAND nice $EFFECTIVE_NICE $AACENCODER $AACENCODEROPTS --artist "$TRACKARTIST" --album "$DALBUM" \
+ --title "$TRACKNAME" --track "$1" --genre "$CDGENRE" --date "$CDYEAR" --comment "$COMMENT" "$IN" -o "$OUT"
+ else
+ $RUN_COMMAND nice $EFFECTIVE_NICE $AACENCODER $AACENCODEROPTS "$IN" -o "$OUT"
+ fi
+ ;;
+ esac
;;
wav)
# In case of wav output we need nothing. Just keep the wavs.
# But we need the following to allow full logging and subsequent
- # successful cleaning of $ABCDETEMPDIR. Andrew.
- echo "encodetrack-$OUTPUT-$UTRACKNUM" >> "$ABCDETEMPDIR/status"
+ # successful cleaning of $ABCDETEMPDIR.
+ echo "encodetrack-$OUTPUT-$UTRACKNUM" >> "$ABCDETEMPDIR/status"
;;
esac
$RUN_COMMAND_PIPES
APENC=mac
APETAG=apetag
# m4a
-AACENC=faac
+FAAC=faac
+NEROAACENC=neroAacEnc
+FDKAAC=fdkaac
ID3=id3
ID3V2=id3v2
EYED3=eyeD3
VORBISCOMMENT=vorbiscomment
METAFLAC=metaflac
-AACTAG=faac
NEROAACTAG=neroAacTag
-FDKAAC=fdkaac
CDPARANOIA=cdparanoia
CDDA2WAV=icedax
# so we set one here. Andrew.
APENCOPTS='-c4000'
# m4a
-AACENCOPTS=
+FAACENCOPTS=
+NEROACENCOPTS=
+FDKAACENCOPTS=
ID3OPTS=
EYED3OPTS=""
m4a)
[ "$AACENCODERSYNTAX" = "default" ] && AACENCODERSYNTAX=faac
[ "$DOTAG" = "y" ] && CHECKFAACBUILD=y
+ [ "$AACENCODERSYNTAX" = "neroAacEnc" ] && NEEDNEROAACTAG=y
;;
wav)
if [ "$KEEPWAVS" = "y" ]; then
;;
esac
case "$AACENCODERSYNTAX" in
- faac|neroAacEnc|fdkaac)
- AACENCODEROPTS="${AACENCODEROPTSCLI:-$AACENCOPTS}"
- AACENCODER="$AACENC"
+ # Some elaborate 'if' work to keep backward compatability for those
+ # who don't realise that AACENCOPTS does not work with abcde from
+ # version 2.6.1 onwards.
+ faac)
+ if [ -z "$FAACENCOPTS" ] && [ -n "$AACENCOPTS" ]; then
+ AACENCODEROPTS="${AACENCODEROPTSCLI:-$AACENCOPTS}"
+ AACENCODER="$FAAC"
+ else
+ AACENCODEROPTS="${AACENCODEROPTSCLI:-$FAACENCOPTS}"
+ AACENCODER="$FAAC"
+ fi
+ ;;
+ neroAacEnc)
+ if [ -z "$NEROAACENCOPTS" ] && [ -n "$AACENCOPTS" ]; then
+ AACENCODEROPTS="${AACENCODEROPTSCLI:-$AACENCOPTS}"
+ AACENCODER="$NEROAACENC"
+ else
+ AACENCODEROPTS="${AACENCODEROPTSCLI:-$NEROAACENCOPTS}"
+ AACENCODER="$NEROAACENC"
+ fi
+ ;;
+ fdkaac)
+ if [ -z "$FDKAACENCOPTS" ] && [ -n "$AACENCOPTS" ]; then
+ AACENCODEROPTS="${AACENCODEROPTSCLI:-$AACENCOPTS}"
+ AACENCODER="$FDKAAC"
+ else
+ AACENCODEROPTS="${AACENCODEROPTSCLI:-$FDKAACENCOPTS}"
+ AACENCODER="$FDKAAC"
+ fi
;;
esac
###USEPIPESSUPPORT###
# Rippers with USEPIPE support
-# FIXME # Include here all the rippers we can figure out support pipes
PIPERIPPER_cdparanoia="-"
+# Note that by default in abcde cdda2wav redirects to icedax.
+PIPERIPPER_cdda2wav="-"
PIPERIPPER_debug="-"
PIPERIPPER_flac="-c "
PIPERIPPER_pird="-"
# Encoders with USEPIPE support
-# FIXME # Include here all the encoders we can figure out support pipes
+PIPE_mp3enc="-sti"
PIPE_lame="-"
PIPE_bladeenc="-"
PIPE_oggenc="-"
PIPE_opusenc="-"
PIPE_flac="-"
+PIPE_speexenc="-"
+PIPE_mpcenc="-"
+PIPE_wavpack="-"
+PIPE_faac="-"
+# Both neroAacEnc and fdkaac seem to manage without the addition of
+# the 'ignorelength' option in PIPE_$AACENCODERSYNTAX when piping
+# in this manner. Andrew.
+PIPE_neroAacEnc="-"
+PIPE_fdkaac="-"
# Figure out if we can use pipes with the ripper/encoder combination
# exit otherwise
flac)
PIPEENCODERSVARCHECK="PIPE_$FLACENCODERSYNTAX" ;;
spx)
- PIPEENCODERSVARCHECK="PIPE_$SPEEXENCODER" ;;
+ PIPEENCODERSVARCHECK="PIPE_$SPEEXENCODERSYNTAX" ;;
mpc)
- PIPEENCODERSVARCHECK="PIPE_$MPCENCODER" ;;
+ PIPEENCODERSVARCHECK="PIPE_$MPCENCODERSYNTAX" ;;
wv)
- PIPEENCODERSVARCHECK="PIPE_$WVENCODER" ;;
- ape)
- PIPEENCODERSVARCHECK="PIPE_$APENCODER" ;;
+ PIPEENCODERSVARCHECK="PIPE_$WVENCODERSYNTAX" ;;
+ m4a)
+ PIPEENCODERSVARCHECK="PIPE_$AACENCODERSYNTAX" ;;
+ aac)
+ PIPEENCODERSVARCHECK="PIPE_$AACENCODERSYNTAX" ;;
esac
decho "PIPERIPPERSVARCHECK: $( eval echo "\$$PIPERIPPERSVARCHECK" )"
if [ "$( eval echo "\$$PIPERIPPERSVARCHECK" )" = "$" ] || \
${NEEDVORBISGAIN+$VORBISGAIN} ${NEEDMP3GAIN+$MP3GAIN} \
${NEEDMPCGAIN+$MPCGAIN} ${NEEDCUEREADER+$CUEREADER} \
${NEEDWVGAIN+WVGAIN} ${NEEDAPETAG+$APETAG} \
- ${NEEDCUE2DISCID+$CUE2DISCID}
+ ${NEEDCUE2DISCID+$CUE2DISCID} ${NEEDNEROAACTAG+$NEROAACTAG}
do
checkexec "$X"
done