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). Defaults to vorbis"
+echo " Output file type(s) (vorbis,mp3,flac,spx,mpc,wav,m4a,opus,wv,ape). 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]...>"
run_command replaygain-mp3 nice $ENCNICE $MP3GAIN $MP3GAINOPTS "${OUTPUTFILES[@]}"
;;
mpc)
- run_command replaygain-mpc nice $ENCNICE $MPPGAIN --auto "${OUTPUTFILES[@]}"
+ run_command replaygain-mpc nice $ENCNICE $MPCGAIN "${OUTPUTFILES[@]}"
+ ;;
+ wv)
+ run_command replaygain-wv nice $ENCNICE $WVGAIN $WVGAINOPTS "${OUTPUTFILES[@]}"
;;
*);;
esac
TPE2="Various"
fi
+
case "$ID3SYNTAX" in
- id3);;
+ id3)
+ run_command tagtrack-$OUTPUT-$1 nice $ENCNICE \
+ $TAGGER $TAGGEROPTS -c "$COMMENTOUTPUT" \
+ -A "$DALBUM" -a "$TRACKARTIST" -t "$TRACKNAME" \
+ -y "$CDYEAR" -g "$GENREID" \
+ -T "${TRACKNUM:-$1}" \
+ "$ABCDETEMPDIR/track$1.$OUTPUT"
+ ;;
+ id3v2)
+ # FIXME # track numbers in mp3 come with 1/10, so we cannot
+ # happily substitute them with $TRACKNUM
+ run_command tagtrack-$OUTPUT-$1 nice $ENCNICE \
+ $TAGGER $TAGGEROPTS -c "$COMMENTOUTPUT" \
+ -A "$DALBUM" -a "$TRACKARTIST" -t "$TRACKNAME" \
+ -y "$CDYEAR" -g "$GENREID" \
+ -T "${TRACKNUM:-$1}/$TRACKS" \
+ ${TPE2:+--TPE2 "$TPE2"} \
+ "$ABCDETEMPDIR/track$1.$OUTPUT"
+ ;;
eyed3*)
# FIXME # track numbers in mp3 come with 1/10, so we cannot
# happily substitute them with $TRACKNUM
eyed3_06) addopts=( \
${ENCODING:+--set-encoding="$ENCODING"} \
${TPE2:+--set-text-frame=TPE2:"$TPE2"} \
+ # We set 'recording-date' so the date tag will show
+ # in Audacious, vlc and friends... Andrew.
+ ${CDYEAR:+--set-text-frame="TDRC:$CDYEAR"} \
${COMMENTOUTPUT:+--comment=::"$COMMENTOUTPUT"} \
);;
*) addopts=( \
${ENCODING:+--encoding="$ENCODING"} \
${TPE2:+--text-frame=TPE2:"$TPE2"} \
+ # We set 'recording-date' so the date tag will show
+ # in Audacious, vlc and friends... Andrew.
+ ${CDYEAR:+--text-frame="TDRC:$CDYEAR"} \
${COMMENTOUTPUT:+--comment "$COMMENTOUTPUT"} \
);;
esac
run_command tagtrack-$OUTPUT-$1 nice $ENCNICE $TAGGER $TAGGEROPTS \
-A "$DALBUM" \
- -a "$TRACKARTIST" -t "$TRACKNAME" ${CDYEAR:+-Y "$CDYEAR"} \
+ -a "$TRACKARTIST" -t "$TRACKNAME" \
-G "$GENREID" -n "${TRACKNUM:-$1}" \
${TRACKNUM:+-N "$TRACKS"} \
"${addopts[@]}" \
"$ABCDETEMPDIR/track$1.$OUTPUT"
;;
- # FIXME # Still not activated...
- id3ed)
- run_command tagtrack-$OUTPUT-$1 nice $ENCNICE \
- $TAGGER $TAGGEROPTS -c "$COMMENTOUTPUT" \
- -a "$DALBUM" -n "$TRACKARTIST" -s "$TRACKNAME" \
- -y "$CDYEAR" -g "$GENREID" -k "${TRACKNUM:-$1}" \
- "$ABCDETEMPDIR/track$1.$OUTPUT"
- ;;
*)
- # FIXME # track numbers in mp3 come with 1/10, so we cannot
- # happily substitute them with $TRACKNUM
- run_command tagtrack-$OUTPUT-$1 nice $ENCNICE \
- $TAGGER $TAGGEROPTS -c "$COMMENTOUTPUT" \
- -A "$DALBUM" -a "$TRACKARTIST" -t "$TRACKNAME" \
- -y "$CDYEAR" -g "$GENREID" \
- -T "${TRACKNUM:-$1}/$TRACKS" \
- ${TPE2:+--TPE2 "$TPE2"} \
- "$ABCDETEMPDIR/track$1.$OUTPUT"
+ log error "Internal error: ID3SYNTAX has an illegal value"
+ exit 1
;;
esac
;;
wv)
run_command tagtrack-$OUTPUT-$1 true
;;
+ ape) # This tagging syntax is suitable for Robert Muth's application 'apetag', the Monkey's Audio
+ # Console port (mac) used for encoding does not have the ability to tag. Andrew.
+ run_command tagtrack-$OUTPUT-$1 nice $ENCNICE "$APETAG" -i "$ABCDETEMPDIR/track$1.ape" -m overwrite \
+ -p artist="$TRACKARTIST" -p album="$DALBUM" -p title="$TRACKNAME" -p track=${TRACKNUM:-$1} \
+ -p year="$CDYEAR" -p genre="$CDGENRE" ${COMMENTOUTPUT:+-p comment="$COMMENTOUTPUT"}
+ ;;
aac)
run_command tagtrack-$OUTPUT-$1 true
;;
wv)
TEMPARG="PIPE_$WVCENCODERSYNTAX"
;;
+ ape)
+ TEMPARG="PIPE_$APENCODERSYNTAX"
+ ;;
aac)
TEMPARG="PIPE_$AACENCODERSYNTAX"
;;
%local*%)
case "$OPUSENCODERSYNTAX" in
opusenc)
-
- if [ "$(eval echo ${COMMENT})" != "" ]; then
- case "$COMMENT" in
- *=*) ;;
- *) COMMENT="COMMENT=$COMMENT" ;;
- 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 $OPUSENCODER $OPUSENCODEROPTS --artist "$TRACKARTIST" --album "$DALBUM" --title "$TRACKNAME" --genre "$CDGENRE" --date "$CDYEAR" --comment TRACKNUMBER="$1" ${COMMENT:+--comment "$COMMENT"} "$IN" "$OUT"
+ $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
fi
;;
mpc)
- # MPP/MP+(Musepack) format (.mpc) is done locally, with inline
- # tagging. Uses mpcenc for Musepack SV8 encoding, changed from
- # Musepack SV7 which used mppenc....
- $RUN_COMMAND nice $EFFECTIVE_NICE $MPCENCODER $MPCENCODEROPTS --artist "$TRACKARTIST" --album "$DALBUM" --title "$TRACKNAME" --track "$1" --genre "$CDGENRE" --year "$CDYEAR" --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"
+ fi
;;
wv)
if [ "$DOTAG" = "y" ]; then
$RUN_COMMAND nice $EFFECTIVE_NICE $WVENCODER $WVENCODEROPTS "$IN" -o "$OUT"
fi
;;
+ ape)
+ $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.
fdkaac)
if [ "$DOTAG" = "y" ]; then
$RUN_COMMAND nice $EFFECTIVE_NICE $AACENCODER $AACENCODEROPTS --artist "$TRACKARTIST" --album "$DALBUM" \
- --title "$TRACKNAME" --track "$1" --genre "$CDGENRE" --long-tag Year:"$CDYEAR" --comment "$COMMENT" "$IN" -o "$OUT"
+ --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
;;
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"
;;
esac
$RUN_COMMAND_PIPES
# do_batch_gain
# variables used:
-# MP3GAIN, MP3GAINOPTS, VORBISGAIN, VORBISGAINOPTS, MPPGAIN, MPPGAINOPTS
+# MP3GAIN, MP3GAINOPTS, VORBISGAIN, VORBISGAINOPTS, MPCGAIN
# FIXME #
do_batch_gain ()
{
SPEEXENCODERSYNTAX=default
MPCENCODERSYNTAX=default
WVENCODERSYNTAX=default
+APENCODERSYNTAX=default
AACENCODERSYNTAX=default
NORMALIZERSYNTAX=default
CUEREADERSYNTAX=default
VAPLAYLISTDATAPREFIX=''
DOSPLAYLIST=n
COMMENT=''
-ID3TAGV=2
+ID3TAGV=id3v2.4
ENCNICE=10
READNICE=10
DISTMP3NICE=10
FLAC=flac
# speex
SPEEXENC=speexenc
-# mpp (Musepack)
+# mpc (Musepack)
MPCENC=mpcenc
# wv (wavpack)
WVENC=wavpack
+# ape
+APENC=mac
+APETAG=apetag
# m4a
AACENC=faac
ID3=id3
+ID3V2=id3v2
EYED3=eyeD3
VORBISCOMMENT=vorbiscomment
METAFLAC=metaflac
CDSPEED=eject
VORBISGAIN=vorbisgain
MP3GAIN=mp3gain
-MPPGAIN=replaygain
+MPCGAIN=mpcgain
+WVGAIN=wvgain
+# For Wavpack replay gain we set both the default of 'track gain'
+# as well as this option for 'album gain'. Better media players
+# such as vlc can select either or neither. Andrew.
+WVGAINOPTS='-a'
MKCUE=mkcue
MKTOC=cdrdao
DIFF=diff
#opus
OPUSENCOPTS=
# flac
-FLACOPTS=
+# The flac option is a workaround for an error where flac fails
+# to encode with error 'floating point exception'. This is flac
+# error in get_console_width(), corrected in flac 1.3.1
+FLACOPTS="--silent"
FLACGAINOPTS="--add-replay-gain"
# speex
SPEEXENCOPTS=
MPCENCOPTS=
# wv
WVENCOPTS=
+# ape
+# Monkey's Audio Console (mac) chokes without a mode setting
+# so we set one here. Andrew.
+APENCOPTS='-c4000'
# m4a
AACENCOPTS=
spx:*) SPEEXENCODEROPTSCLI="$( echo $OUTPUT | cut -d: -f2- )" ;;
mpc:*) MPCENCODEROPTSCLI="$( echo $OUTPUT | cut -d: -f2- )" ;;
wv:*) WVENCODEROPTSCLI="$( echo $OUTPUT | cut -d: -f2- )" ;;
+ ape:*) APENCODEROPTSCLI="$( echo $OUTPUT | cut -d: -f2- )" ;;
m4a:*|aac:*) AACENCODEROPTSCLI="$( echo $OUTPUT | cut -d: -f2- )" ;;
esac
done
- for OUTPUT in "$(echo "$OUTPUTTYPE" | tr , \ )"; do
- TEMPOUTPUT=$( echo "$OUTPUT" | cut -d: -f1 )
+ # Allows commandline selection of options while using multiple outputs.
+ # Example: abcde -o 'flac:-8,mp3:-b 320' Patch by Matthias Andree.
+ for OUTPUT in $(echo "$OUTPUTTYPE" | tr -d ' ' | tr , ' '); do
+ TEMPOUTPUT=${OUTPUT%%:*}
TEMPOUTPUTTYPE="${TEMPOUTPUTTYPE:+$TEMPOUTPUTTYPE,}$TEMPOUTPUT"
done
OUTPUTTYPE="$TEMPOUTPUTTYPE"
;;
mpc)
[ "$MPCENCODERSYNTAX" = "default" ] && MPCENCODERSYNTAX=mpcenc
- [ "$DOREPLAYGAIN" = "y" ] && NEEDMPPGAIN=y
+ [ "$DOREPLAYGAIN" = "y" ] && NEEDMPCGAIN=y
;;
wv)
[ "$WVENCODERSYNTAX" = "default" ] && WVENCODERSYNTAX=wavpack
[ "$DOTAG" = "y" ]
+ [ "$DOREPLAYGAIN" = "y" ] && NEEDWVCGAIN=y
+ ;;
+ ape)
+ [ "$APENCODERSYNTAX" = "default" ] && APENCODERSYNTAX=mac
+ [ "$DOTAG" = "y" ]
;;
aac)
[ "$AACENCODERSYNTAX" = "default" ] && AACENCODERSYNTAX=faac
WVENCODER="$WVENC"
;;
esac
+case "$APENCODERSYNTAX" in
+ mac)
+ APENCODEROPTS="${APENCODEROPTSCLI:-$APENCOPTS}"
+ APENCODER="$APENC"
+ ;;
+esac
case "$AACENCODERSYNTAX" in
faac|neroAacEnc|fdkaac)
AACENCODEROPTS="${AACENCODEROPTSCLI:-$AACENCOPTS}"
esac
# and which tagger
-if [ "$ID3TAGV" = "1" ]; then
- TAGGER="$ID3"
- TAGGEROPTS="$ID3OPTS"
-else
- TAGGER="$EYED3"
- # 0.7 changed syntax
- if $EYED3 --help 2>&1 | grep -q -- --set-encoding ; then
- # only if it offers the --set-encoding, assume <= 0.6.x
- ID3SYNTAX=eyed3_06
- TAGGEROPTS="--set-encoding utf16-LE $EYED3OPTS"
- else
- # anything wrong, any failure, assume >= 0.7
- ID3SYNTAX=eyed3
- TAGGEROPTS="--encoding utf16 $EYED3OPTS"
- fi
-fi
+case "$ID3TAGV" in
+ id3v1)
+ TAGGER="$ID3"
+ ID3SYNTAX=id3
+ TAGGEROPTS="$ID3OPTS"
+ ;;
+ id3v2.3)
+ TAGGER="$ID3V2"
+ ID3SYNTAX=id3v2
+ TAGGEROPTS="$ID3V2OPTS"
+ ;;
+ id3v2.4)
+ TAGGER="$EYED3"
+ # Note that eyeD3 is set to tag in utf-16 (below). This causes
+ # trouble with CDDBPROTO=5 (which we test here) but also
+ # with cached cddb files in latin1 (which we cannot test).
+ if [ "$CDDBPROTO" -lt 6 ]; then
+ log warning "You cannot have id3v2.4 tags encoded in latin1. Setting CDDBPROTO to 6 for now."
+ CDDBPROTO=6
+ fi
+ # eyeD3 version 0.7 changed syntax
+ if $EYED3 --help 2>&1 | grep -q -- --set-encoding ; then
+ # only if it offers the --set-encoding, assume <= 0.6.x
+ ID3SYNTAX=eyed3_06
+ TAGGEROPTS="--set-encoding utf16-LE $EYED3OPTS"
+ else
+ # anything wrong, any failure, assume >= 0.7
+ ID3SYNTAX=eyed3
+ TAGGEROPTS="--encoding utf16 $EYED3OPTS"
+ fi
+ ;;
+ *)
+ log error "Error: ID3TAGV must be either \"id3v1\", \"id3v2.3\" or \"id3v2.4\""
+ exit 1
+ ;;
+esac
# NOGAP is specific to lame. Other encoders fail ...
if [ "$NOGAP" = "y" ] && [ ! "$MP3ENCODER" = "lame" ]; then
PIPEENCODERSVARCHECK="PIPE_$MPCENCODER" ;;
wv)
PIPEENCODERSVARCHECK="PIPE_$WVENCODER" ;;
+ ape)
+ PIPEENCODERSVARCHECK="PIPE_$APENCODER" ;;
esac
decho "PIPERIPPERSVARCHECK: $( eval echo "\$$PIPERIPPERSVARCHECK" )"
if [ "$( eval echo "\$$PIPERIPPERSVARCHECK" )" = "$" ] || \
# Make sure a buncha things exist
for X in $CDROMREADER $CDDISCID ${NEEDTAGGER+$TAGGER} $MP3ENCODER \
$OGGENCODER $OPUSENCODER $FLACENCODER $SPEEXENCODER $MPCENCODER \
- $AACENCODER $WVENCODER $CDDBTOOL \
+ $AACENCODER $WVENCODER $CDDBTOOL $APENCODER $APETAG \
${NEEDHTTPGET+$HTTPGET} ${NEEDDISTMP3+$DISTMP3} \
${NEEDCOMMENTER+$VORBISCOMMENT} ${NEEDMETAFLAC+$METAFLAC} \
${NEEDNORMALIZER+$NORMALIZER} ${NEEDEJECT+$EJECT} \
${NEEDDISKUTIL+diskutil} ${NEEDCDSPEED+$CDSPEED} \
${NEEDVORBISGAIN+$VORBISGAIN} ${NEEDMP3GAIN+$MP3GAIN} \
- ${NEEDMPPGAIN+$MPPGAIN} ${NEEDCUEREADER+$CUEREADER} \
+ ${NEEDMPCGAIN+$MPCGAIN} ${NEEDCUEREADER+$CUEREADER} \
+ ${NEEDWVGAIN+WVGAIN} \
${NEEDCUE2DISCID+$CUE2DISCID}
do
checkexec "$X"