X-Git-Url: https://git.hcoop.net/clinton/abcde.git/blobdiff_plain/2d38e786853e86344ff7cfbdf1ff2dc86149109d..56672932c9ab0f47d825df7d3856162b3442e390:/abcde diff --git a/abcde b/abcde index ab24d28..7a7eab1 100755 --- a/abcde +++ b/abcde @@ -1,12 +1,12 @@ #!/bin/bash # Copyright (c) 1998-2001 Robert Woodcock -# Copyright (c) 2003-2005 Jesus Climent +# Copyright (c) 2003-2006 Jesus Climent # 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +# 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. @@ -54,13 +54,13 @@ echo "-P Use UNIX pipes to read+encode without wav files" echo "-r " echo " Also encode on these remote hosts" echo "-R Use local CDDB in recursive mode" -#echo "-R Add replaygain values to the tag info (only for vorbis,flac,mp3)" echo "-s " echo " Show dielfs 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 "-u Use UNICODE tags and comments" +echo "-u Use UNICODE (UTF8) tags and comments" +echo "-U Do NOT use UNICODE (UTF8) tags and comments" echo "-v Show version number and exit" echo "-V Be a bit more verbose about what is happening behind the scenes" echo "-x Eject CD after all tracks are read" @@ -357,7 +357,7 @@ checkexec () 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 exit 1 - elif [ ! -x $(which $X) ]; then + elif [ ! -x "$(which $X)" ]; then log error "$X is not executable." >&2 exit 1 fi @@ -453,10 +453,18 @@ do_replaygain() ARTISTFILE="$(mungefilename "$TRACKARTIST")" ALBUMFILE="$(mungefilename "$DALBUM")" gettracknum - if [ "$VARIOUSARTISTS" = "y" ]; then - OUTPUTFILE="$(eval echo "$VAOUTPUTFORMAT")" - else - OUTPUTFILE="$(eval echo "$OUTPUTFORMAT")" + if [ "$ONETRACK" = "y" ]; then + if [ "$VARIOUSARTISTS" = "y" ]; then + OUTPUTFILE="$(eval echo \""$VAONETRACKOUTPUTFORMAT"\")" + else + OUTPUTFILE="$(eval echo \""$ONETRACKOUTPUTFORMAT"\")" + fi + else + if [ "$VARIOUSARTISTS" = "y" ]; then + OUTPUTFILE="$(eval echo \""$VAOUTPUTFORMAT"\")" + else + OUTPUTFILE="$(eval echo \""$OUTPUTFORMAT"\")" + fi fi OUTPUTFILES[$REPLAYINDEX]="$OUTPUTDIR/$OUTPUTFILE.$OUTPUT" (( REPLAYINDEX = $REPLAYINDEX + 1 )) @@ -721,15 +729,25 @@ do_tag () case "$ID3SYNTAX" in id3);; eyed3) - # FIXME # track numbers in mp3 come with 1/10, so we cannot happily substitute them with $TRACKNUM - run_command tagtrack-$OUTPUT-$1 $TAGGER $TAGGEROPTS --commen=::"$COMMENTOUTPUT" \ - -A "$DALBUM" -a "$TRACKARTIST" -t "$TRACKNAME" -Y "$CDYEAR" \ + # FIXME # track numbers in mp3 come with 1/10, so we cannot + # happily substitute them with $TRACKNUM + run_command tagtrack-$OUTPUT-$1 $TAGGER $TAGGEROPTS \ + --comment=::"$COMMENTOUTPUT" -A "$DALBUM" \ + -a "$TRACKARTIST" -t "$TRACKNAME" -Y "$CDYEAR" \ -G "$GENREID" -n "${TRACKNUM:-$1}" "${TRACKNUM:+-N $TRACKS}" \ - "${ENCODING:+--set-encoding=$ENCODING}" + "${ENCODING:+--set-encoding=$ENCODING}" \ + "$ABCDETEMPDIR/track$1.$OUTPUT" + ;; + # FIXME # Still not activated... + id3ed) + run_command tagtrack-$OUTPUT-$1 $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 + # FIXME # track numbers in mp3 come with 1/10, so we cannot + # happily substitute them with $TRACKNUM run_command tagtrack-$OUTPUT-$1 $TAGGER $TAGGEROPTS -c "$COMMENTOUTPUT" \ -A "$DALBUM" -a "$TRACKARTIST" -t "$TRACKNAME" -y "$CDYEAR" \ -g "$GENREID" -T "${TRACKNUM:-$1/$TRACKS}" \ @@ -917,18 +935,16 @@ do_encode () do case "$TMPOUTPUT" in vorbis|ogg) - OUT="$ABCDETEMPDIR/track$1.$OGGOUTPUTCONTAINER" OUTPUT=$OGGOUTPUTCONTAINER ;; flac) - OUT="$ABCDETEMPDIR/track$1.$FLACOUTPUTCONTAINER" OUTPUT=$FLACOUTPUTCONTAINER ;; *) - OUT="$ABCDETEMPDIR/track$1.$OUTPUT" OUTPUT=$TMPOUTPUT ;; esac + OUT="$ABCDETEMPDIR/track$1.$OUTPUT" if [ "$NOGAP" = "y" ] && checkstatus encodetrack-$OUTPUT-$1 ; then continue fi @@ -1233,11 +1249,19 @@ do_move () gettracknum # Supported variables for OUTPUTFORMAT are GENRE, YEAR, ALBUMFILE, # ARTISTFILE, TRACKFILE, and TRACKNUM. - if [ "$VARIOUSARTISTS" = "y" ]; then - OUTPUTFILE="$(eval echo "$VAOUTPUTFORMAT")" - else - OUTPUTFILE="$(eval echo "$OUTPUTFORMAT")" - fi + if [ "$ONETRACK" = "y" ]; then + if [ "$VARIOUSARTISTS" = "y" ]; then + OUTPUTFILE="$(eval echo \""$VAONETRACKOUTPUTFORMAT"\")" + else + OUTPUTFILE="$(eval echo \""$ONETRACKOUTPUTFORMAT"\")" + fi + else + if [ "$VARIOUSARTISTS" = "y" ]; then + OUTPUTFILE="$(eval echo \""$VAOUTPUTFORMAT"\")" + else + OUTPUTFILE="$(eval echo \""$OUTPUTFORMAT"\")" + fi + fi if checkerrors "tagtrack-$OUTPUT-$1"; then :; else # Once we know the specific output was successful, we can change # the OUTPUT to the value containing the container @@ -1382,9 +1406,9 @@ do_playlist () # TRACKNUM value before evaluation gettracknum if [ "$VARIOUSARTISTS" = "y" ]; then - OUTPUTFILE="$(eval echo "$VAOUTPUTFORMAT")" + OUTPUTFILE="$(eval echo \""$VAOUTPUTFORMAT\"")" else - OUTPUTFILE="$(eval echo "$OUTPUTFORMAT")" + OUTPUTFILE="$(eval echo \""$OUTPUTFORMAT\"")" fi if [ "$VARIOUSARTISTS" = "y" ]; then if [ "$VAPLAYLISTDATAPREFIX" ] ; then @@ -1428,8 +1452,8 @@ do_discid () disktool -u ${CDROM#/dev/} fi if [ "$CDROMREADERSYNTAX" = "flac" ] ; then - if $METAFLAC $METAFLACOPTS --export-cuesheet-to=- $CDROM > /dev/null 2>&1 ; then - TRACKINFO=$($METAFLAC $METAFLACOPTS --export-cuesheet-to=- $CDROM | $CUE2DISCID) + if $METAFLAC $METAFLACOPTS --export-cuesheet-to=- "$CDROM" > /dev/null 2>&1 ; then + TRACKINFO=$($METAFLAC $METAFLACOPTS --export-cuesheet-to=- "$CDROM" | $CUE2DISCID) else log error "the input flac file does not contain a cuesheet." exit 1 @@ -1664,7 +1688,7 @@ do_cleancue() echo "TITLE \"$DALBUM\"" >> "$CUEFILE_OUT" cat "$CUEFILE_IN" | while read line do - if echo "$line" | grep "INDEX" > /dev/null 2>&1 ; then + if echo "$line" | grep "INDEX 01" > /dev/null 2>&1 ; then eval track="\$TRACK$n" n=$(expr $n + 1) echo "TITLE \"$track\"" >> "$CUEFILE_OUT" @@ -1751,9 +1775,11 @@ do_localcddb () echo -n "#$X: " do_cddbparse "${CDDBLOCALREAD}" echo "" + ##FIXME## QUICK HACK !!!! + if [ ! "$INTERACTIVE" = "y" ]; then break ; fi } >> "$ABCDETEMPDIR/cddblocalchoices" done - if [ $(cat "$ABCDETEMPDIR/cddblocalchoices" | wc -l) -ge 24 ]; then + if [ $(cat "$ABCDETEMPDIR/cddblocalchoices" | wc -l) -ge 24 ] && [ "$INTERACTIVE" = "y" ]; then page "$ABCDETEMPDIR/cddblocalchoices" else # It's all going to fit in one page, cat it @@ -1780,8 +1806,9 @@ do_localcddb () done else ### FIXME ### - echo "Selected ..." + #echo "Selected ..." CDDBLOCALRESP=y + CDDBLOCALCHOICENUM=1 fi if [ ! "$CDDBLOCALCHOICENUM" = "0" ]; then #echo "Using local copy of CDDB data" @@ -1841,7 +1868,7 @@ do_musicbrainzstat () : } -do_musizbrainz () +do_musicbrainz () { : } @@ -2553,7 +2580,7 @@ post_read () CDDBMETHOD=cddb CDDBURL="http://freedb.freedb.org/~cddb/cddb.cgi" CDDBSUBMIT=freedb-submit@freedb.org -CDDBPROTO=5 +CDDBPROTO=6 HELLOINFO="$(whoami)@$(hostname)" CDDBCOPYLOCAL="n" CDDBLOCALPOLICY="always" @@ -2700,7 +2727,7 @@ ACTIONS=cddb,read,encode,tag,move,clean # This option is basicaly for Debian package dependencies: # List of prefered outputs - by default, run with whatever we have in the path -DEFAULT_OUTPUT_BINARIES=vorbis:oggenc,flac:flac,mp3:lame,mp3:bladeenc,spx:speex +DEFAULT_OUTPUT_BINARIES=vorbis:oggenc,flac:flac,mp3:lame,mp3:bladeenc,spx:speex,m4a:faac # List of prefered cdromreaders - by default, run whichever we have in the path DEFAULT_CDROMREADERS="cdparanoia cdda2wav" @@ -2728,7 +2755,7 @@ elif [ X$(uname) = "XNetBSD" ] ; then HTTPGET=ftp MD5SUM=md5 OSFLAVOUR=NBSD -elif [ X$(uname) = "Solaris" ] ; then +elif [ X$(uname) = "SunOS" ] ; then HTTPGET="" MD5SUM=md5 OSFLAVOUR=SunOS @@ -2827,6 +2854,7 @@ while getopts 1a:bBc:C:d:Defghj:klLmMnNo:pPr:s:S:t:T:uvVxw:W:z opt ; do t) STARTTRACKNUMBER="$OPTARG" ;; T) STARTTRACKNUMBER="$OPTARG" ; STARTTRACKNUMBERTAG="y" ;; u) CDDBPROTO=6 ;; + U) CDDBPROTO=5 ;; v) echo "This is abcde v$VERSION." echo "Usage: abcde [options] [tracks]" @@ -3100,7 +3128,7 @@ esac # Allow -o OUTPUT(1):OPTIONS(1),...,OUTPUT(N):OPTIONS(N) mode of operation if echo "$OUTPUTTYPE" | grep ":" > /dev/null 2>&1 ; then - for OUTPUT in "$(echo "$OUTPUTTYPE" | tr , \ )"; do + for OUTPUT in "$(echo "$OUTPUTTYPE" | tr \ \|| tr , \ | tr \| \ )"; do case "$OUTPUT" in vorbis:*|ogg:*) OGGENCODEROPTSCLI="$( echo $OUTPUT | cut -d: -f2- )" ;; mp3:*) MP3ENCODEROPTSCLI="$( echo $OUTPUT | cut -d: -f2- )" ;; @@ -3139,6 +3167,7 @@ do [ "$FLACENCODERSYNTAX" = "default" ] && FLACENCODERSYNTAX=flac [ "$DOTAG" = "y" ] && NEEDMETAFLAC=y [ "$DOREPLAYGAIN" = "y" ] && NEEDMETAFLAC=y + [ "$ONETRACK" = "y" ] && [ "$MAKECUEFILE" = "y" ] && NEEDMETAFLAC=y ;; spx) [ "$SPEEXENCODERSYNTAX" = "default" ] && SPEEXENCODERSYNTAX=speexenc @@ -3310,7 +3339,7 @@ if [ "$MAKECUEFILE" = "y" ]; then NEEDCUEREADER=y fi -if [ X"$CDSPEEDVALUE" != "X" ] && [ "$DOREAD" = "y"]; then +if [ X"$CDSPEEDVALUE" != "X" ] && [ "$DOREAD" = "y" ]; then case "$CDROMREADERSYNTAX" in cdparanoia|debug) CDROMREADEROPTS="$CDPARANOIAOPTS -S $CDSPEEDVALUE" ;; ### FIXME ### translate "cue2discid" from python to bash @@ -3371,6 +3400,7 @@ fi # Make sure a buncha things exist for X in $CDROMREADER $CDDISCID ${NEEDTAGGER+$TAGGER} $MP3ENCODER \ $OGGENCODER $FLACENCODER $SPEEXENCODER $MPPENCODER \ + $AACENCODER \ ${NEEDHTTPGET+$HTTPGET} ${NEEDDISTMP3+$DISTMP3} \ ${NEEDCOMMENTER+$VORBISCOMMENT} ${NEEDMETAFLAC+$METAFLAC} \ ${NEEDNORMALIZER+$NORMALIZER} ${NEEDEJECT+$EJECT} \ @@ -3481,7 +3511,7 @@ fi if checkstatus onetrack ; then ONETRACK=y ; fi if [ "$ONETRACK" = "y" ]; then - # Reuse the CUEFILE in case we created it in a previous run + # Reuse the CUEFILE in case we created it (now or in a previous run) if CUEFILE=$(checkstatus cuefile); then IMPORTCUESHEET=y fi @@ -3712,6 +3742,8 @@ do fi # Don't proceed with the rest of the loop if we can't encode if [ "$ABORT" ]; then continue; fi + ## FIXME ## Add here + ## run_command tagtrack-$OUTPUT-$1 $METAFLAC $METAFLACOPTS ${IMPORTCUESHEET:+--import-cuesheet-from="$ABCDETEMPDIR/$CUEFILE"} --import-tags-from=- "$ABCDETEMPDIR/track$1.$FLACOUTPUTCONTAINER" # Set TRACKNUM, TRACKNAME if [ -e "$CDDBDATA" ]; then if [ "$ONETRACK" = "y" ]; then @@ -3768,8 +3800,9 @@ done # Go through it again and make sure there's no distmp3 stragglers, otherwise # we'll delete the files they're working on +# Do NOT play ball if there is no ball to play (so ABORT if needed) ## FIXME ## Check also for files which are encoded using PIPEs. -if [ "$DOENCODE" = "y" -a "$USEPIPES" != "y" ]; then +if [ "$DOENCODE" = "y" ] && [ "$USEPIPES" != "y" ] && [ ! "$ABORT" ]; then PROCEED= until [ $PROCEED ] do