X-Git-Url: https://git.hcoop.net/clinton/abcde.git/blobdiff_plain/1a78cb785cca43caa750d78894efcf09859bfd1e..3279389d8ee446d738a258c4f8b82e5ca92d8126:/abcde diff --git a/abcde b/abcde index ab379ae..2358c1f 100755 --- a/abcde +++ b/abcde @@ -58,7 +58,7 @@ echo "-r " echo " Also encode on these remote hosts" echo "-R Use local CDDB in recursive mode" echo "-s " -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" @@ -68,7 +68,7 @@ echo "-V Be a bit more verbose about what is happening behind the scenes" echo "-x Eject CD after all tracks are read" echo "-w " 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." @@ -362,11 +362,11 @@ checkexec () 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) MISSING_PACKAGE=lame ;; - flac) MISSING_PACKAGE=flac ;; + 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 @@ -420,6 +420,9 @@ getcddbinfo() 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 } @@ -539,6 +542,7 @@ do_replaygain() 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[@]}" @@ -774,11 +778,14 @@ return 0 # 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 @@ -847,6 +854,9 @@ do_tag () 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 @@ -879,6 +889,9 @@ do_tag () 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 @@ -895,7 +908,20 @@ do_tag () 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 @@ -2859,6 +2885,13 @@ post_read () : } +# post_encode +# Empty post_encode function, to be defined in the configuration file. +post_encode () +{ +: +} + ############################################################################### # End of functions # @@ -2951,6 +2984,10 @@ AACENC=faac ID3=id3 ID3V2=id3v2 EYED3=eyeD3 +VORBISCOMMENT=vorbiscomment +METAFLAC=metaflac +AACTAG=faac + CDPARANOIA=cdparanoia CDDA2WAV=cdda2wav DAGRAB=dagrab @@ -2961,8 +2998,6 @@ MUSICBRAINZ=musicbrainz-get-tracks EJECT=eject MD5SUM=md5sum DISTMP3=distmp3 -VORBISCOMMENT=vorbiscomment -METAFLAC=metaflac NORMALIZE=normalize-audio CDSPEED=eject VORBISGAIN=vorbisgain @@ -3170,7 +3205,10 @@ while getopts 1a:bBc:C:d:Defghj:klLmMnNo:pPr:s:S:t:T:UvVxX:w:W:z opt ; do 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 @@ -3495,6 +3533,7 @@ do ;; m4a) [ "$AACENCODERSYNTAX" = "default" ] && AACENCODERSYNTAX=faac + [ "$DOTAG" = "y" ] && CHECKATOMICPARSLEY=y ;; wav) if [ "$KEEPWAVS" = "y" ]; then @@ -3553,6 +3592,8 @@ case "$FLACENCODERSYNTAX" in 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" @@ -3717,6 +3758,7 @@ fi 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} \ @@ -3728,6 +3770,15 @@ do 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 @@ -4145,6 +4196,9 @@ if [ "$DOREPLAYGAIN" = "y" ]; then 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:"