echo " Also encode on these remote hosts"
echo "-R Use local CDDB in recursive mode"
echo "-s <field>"
-echo " Show dielfs from the CDDB info (year,genre)"
+echo " Show fields from the CDDB info (year,genre)"
echo "-S <#> Set the CD speed"
echo "-t <#> Start the track numbering at a given number"
echo "-T <#> Same as -t but modifies tag numbering"
echo "-x Eject CD after all tracks are read"
echo "-w <comment>"
echo " Add a comment to the CD tracks"
-echo "-W <#> Contatenate CDs: -T #01 -w \"CD #\""
+echo "-W <#> Concatenate CDs: -T #01 -w \"CD #\""
echo "-z Use debug CDROMREADERSYNTAX option (needs cdparanoia)"
echo ""
echo "Tracks is a space-delimited list of tracks to grab."
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
+ case $X in
+ oggenc) MISSING_PACKAGE=vorbis-tools ;;
+ lame|flac) MISSING_PACKAGE=$X ;;
+ esac
+ log info "Hint: apt-get install $MISSING_PACKAGE" >&2
+ fi
exit 1
elif [ ! -x "$(which $X)" ]; then
log error "$X is not executable." >&2
TRACKNAME)
TRACKNAME="$(grep ^TTITLE$CDDBTRACKNUM= "$CDDBDATA" | cut -f2- -d= | tr -d \[:cntrl:\] | sed 's/\ \+$//')"
;;
+ TRACK-INFO)
+ grep ^EXTT$CDDBTRACKNUM= "$CDDBDATA" | cut -f2- -d= | tr -d \[:cntrl:\] | perl -p -e 's/\\n/\n/;'
+ ;;
esac
}
TRACKFILE="$(mungefilename "$TRACKNAME")"
ARTISTFILE="$(mungefilename "$TRACKARTIST")"
ALBUMFILE="$(mungefilename "$DALBUM")"
+ GENRE="$(mungegenre "$GENRE")"
+ YEAR=${CDYEAR:-$CDYEAR}
gettracknum
if [ "$ONETRACK" = "y" ]; then
if [ "$VARIOUSARTISTS" = "y" ]; then
case "$OUTPUT" in
flac)
run_command replaygain-flac nice $ENCNICE $METAFLAC --add-replay-gain "${OUTPUTFILES[@]}"
+ #run_command replaygain-flac true
;;
vorbis|ogg)
run_command replaygain-vorbis nice $ENCNICE $VORBISGAIN --album "${OUTPUTFILES[@]}"
# do_tag [tracknumber]
# id3 tags a filename
# variables used:
-# TRACKS, TRACKNAME, TRACKARTIST, TAGGER, TAGGEROPTS, VORBISCOMMENT, METAFLAC,
+# TRACKS, TRACKNAME, TRACKARTIST, TAGGER, TAGGEROPTS, VORBISCOMMENT, METAFLAC, ATOMICPARSLEY
# COMMENT, DALBUM, DARTIST, CDYEAR, CDGENRE (and temporarily) ID3TAGV
do_tag ()
{
COMMENTOUTPUT="$(eval echo ${COMMENT})"
+ if [ -z "$COMMENTOUTPUT" ]; then
+ COMMENTOUTPUT="$(getcddbinfo TRACK-INFO)"
+ fi
CDDBDISCID=$(echo $TRACKINFO | cut -d' ' -f1)
run_command '' echo "Tagging track $1 of $TRACKS: $TRACKNAME..."
# If we want to start the tracks with a given number, we need to modify the
echo GENRE="$CDGENRE"
fi
echo TRACKNUMBER=${TRACKNUM:-$1}
+ if [ -n "$DISCNUMBER" ]; then
+ echo DISCNUMBER="$DISCNUMBER"
+ fi
echo CDDB=$CDDBDISCID
if [ "$(eval echo ${COMMENT})" != "" ]; then
case "$COMMENTOUTPUT" in
echo GENRE="$CDGENRE"
fi
echo TRACKNUMBER="${TRACKNUM:-$1}"
+ if [ -n "$DISCNUMBER" ]; then
+ echo DISCNUMBER="$DISCNUMBER"
+ fi
echo CDDB="$CDDBDISCID"
if [ "$(eval echo ${COMMENT})" != "" ]; then
case "$COMMENTOUTPUT" in
run_command tagtrack-$OUTPUT-$1 true
;;
m4a)
- run_command tagtrack-$OUTPUT-$1 true
+ # Use a temp-file of our choice. --overWrite seems to
+ # case core dumps with AtomicParsley 0.9.0
+ ATOMICTEMPFILE="$ABCDETEMPDIR/track$1.m4a-atomic"
+
+ VARIOUSBOOL="false"
+ if [ "$VARIOUSARTISTS" = "y" ]; then
+ VARIOUSBOOL="true"
+ fi
+
+ #It has to be command file opts for 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" --compilation $VARIOUSBOOL --comment "$COMMENTOUTPUT" --output $ATOMICTEMPFILE
+ if [ -f $ATOMICTEMPFILE ]; then
+ mv "$ATOMICTEMPFILE" "$ABCDETEMPDIR/track$1.m4a"
+ fi
;;
wav)
run_command tagtrack-$OUTPUT-$1 true
read ERASEPLAYLIST
case $ERASEPLAYLIST in
e|E|a|A|k|K) DONE=y ;;
+ "") ERASEPLAYLIST=e ; DONE=y ;;
*) ;;
esac
done
:
}
+# post_encode
+# Empty post_encode function, to be defined in the configuration file.
+post_encode ()
+{
+:
+}
+
###############################################################################
# End of functions
#
ID3=id3
ID3V2=id3v2
EYED3=eyeD3
+VORBISCOMMENT=vorbiscomment
+METAFLAC=metaflac
+AACTAG=faac
+
CDPARANOIA=cdparanoia
CDDA2WAV=cdda2wav
DAGRAB=dagrab
EJECT=eject
MD5SUM=md5sum
DISTMP3=distmp3
-VORBISCOMMENT=vorbiscomment
-METAFLAC=metaflac
NORMALIZE=normalize-audio
CDSPEED=eject
VORBISGAIN=vorbisgain
if [ "$HTTPGETOPTS" = "" ] ; then
case $HTTPGET in
- wget) HTTPGETOPTS="-q -nv -O -";;
+ wget) HTTPGETOPTS="-q -nv -e timestamping=off -O -";;
curl) HTTPGETOPTS="-f -s";;
fetch)HTTPGETOPTS="-q -o -";;
ftp) HTTPGETOPTS="-a -V -o - ";;
X) CUE2DISCID="$OPTARG" ;;
w) COMMENT="$OPTARG" ;;
W) if echo $OPTARG | grep "[[:digit:]]" > /dev/null 2>&1 ; then
- STARTTRACKNUMBER="${OPTARG}01" ; STARTTRACKNUMBERTAG="y" ; COMMENT="CD${OPTARG}"
+ STARTTRACKNUMBER="${OPTARG}01"
+ STARTTRACKNUMBERTAG="y"
+ COMMENT="CD${OPTARG}"
+ DISCNUMBER="${OPTARG}"
else
log error "argument of -W must be integer"
exit 1
BATCHNORM=n
fi
-# Check the encoding format from the ones available in the system, if nothing has been configured in the system.
+# Check the encoding format from the ones available in the system, if nothing has been configured.
if [ X"$OUTPUTTYPE" = "X" ]; then
for DEFAULT_OUTPUT in $( echo "$DEFAULT_OUTPUT_BINARIES" | tr , \ ); do
DEFAULT_OUTPUT_FORMAT="$(echo $DEFAULT_OUTPUT | cut -d ":" -f 1)"
;;
m4a)
[ "$AACENCODERSYNTAX" = "default" ] && AACENCODERSYNTAX=faac
+ [ "$DOTAG" = "y" ] && CHECKATOMICPARSLEY=y
;;
wav)
if [ "$KEEPWAVS" = "y" ]; then
flac)
FLACENCODEROPTS="${FLACENCODEROPTSCLI:-$FLACOPTS}"
FLACENCODER="$FLAC"
+ if [ "$DOREPLAYGAIN" = "y" ]; then
+ FLACENCODEROPTS="${FLACENCODEROPTS} --replay-gain"
# FLAC streams can be encapsulated on a Ogg transport layer
if echo "$FLACENCODEROPTS" | egrep -- "(^| )--ogg($| )" > /dev/null 2>&1 ;then
log error "FLAC on an Ogg container is not yet supported"
for X in $CDROMREADER $CDDISCID ${NEEDTAGGER+$TAGGER} $MP3ENCODER \
$OGGENCODER $FLACENCODER $SPEEXENCODER $MPPENCODER \
$AACENCODER \
+ ${NEEDATOMICPARSLEY+$ATOMICPARSLEY} \
${NEEDHTTPGET+$HTTPGET} ${NEEDDISTMP3+$DISTMP3} \
${NEEDCOMMENTER+$VORBISCOMMENT} ${NEEDMETAFLAC+$METAFLAC} \
${NEEDNORMALIZER+$NORMALIZER} ${NEEDEJECT+$EJECT} \
checkexec "$X"
done
+if [ "$CHECKATOMICPARSLEY" = "y" ]; then
+ if ! new_checkexec "$ATOMICPARSLEY"; then
+ echo "WARNING: $ATOMICPARSLEY Not Found Not Post-Tagging!"
+ DOTAG='n'
+ else
+ echo "Using $ATOMICPARSLEY To Tag AAC Tracks."
+ fi
+fi
+
# And last but not least, check if we can diff between files. We do not abort,
# since diffing is not critical...
if [ -x $(which $DIFF) ]; then :; else
do_replaygain
fi
+# Execute the user-defined post_encode function before cleaning up
+post_encode
+
# Check to see if run_command logged any errors
if [ -f "$ABCDETEMPDIR/errors" ]; then
log error "The following commands failed to run:"