X-Git-Url: https://git.hcoop.net/clinton/abcde.git/blobdiff_plain/156f84a5214e88d8f66f388ac08b8deedc5b39d7..ede6c12006f4723a1672ee579e1319919bf972ca:/abcde diff --git a/abcde b/abcde index 70726f4..0f891da 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. @@ -59,7 +59,8 @@ 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" @@ -452,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 )) @@ -926,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 @@ -1242,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 @@ -1391,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 @@ -1437,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 @@ -1673,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" @@ -1760,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 @@ -1789,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" @@ -1809,11 +1827,11 @@ do_localcddb () single) # List out disc title/author and contents do_cddbparse "${CDDBLOCALFILE}" - if [ "$CDROMREADERSYNTAX" = "flac" ] ; then - echo -n "Embedded cuesheet entry found, use it? [y/n] (y): " >&2 - else + #if [ "$CDROMREADERSYNTAX" = "flac" ] ; then + # echo -n "Embedded cuesheet entry found, use it? [y/n] (y): " >&2 + #else echo -n "Locally cached CDDB entry found, use it? [y/n] (y): " >&2 - fi + #fi if [ "$INTERACTIVE" = "y" ]; then read USELOCALRESP while [ "$USELOCALRESP" != "y" ] && [ "$USELOCALRESP" != "n" ] && [ "$USELOCALRESP" != "" ] ; do @@ -1850,7 +1868,7 @@ do_musicbrainzstat () : } -do_musizbrainz () +do_musicbrainz () { : } @@ -2562,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" @@ -2709,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" @@ -2737,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 @@ -2836,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]" @@ -3109,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- )" ;; @@ -3148,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 @@ -3380,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} \ @@ -3490,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 @@ -3721,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 @@ -3777,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