X-Git-Url: https://git.hcoop.net/clinton/abcde.git/blobdiff_plain/00840d9ad29e3280aae74bddfc20f969c26f808f..75c2c4242378477a093d19ded87391f50068a61f:/abcde diff --git a/abcde b/abcde index 0b78836..84a4445 100755 --- a/abcde +++ b/abcde @@ -11,7 +11,7 @@ # Copyright for this work is to expire January 1, 2010, after which it # shall be public domain. -VERSION="2.3.99-$Id$" +VERSION="2.3.99" usage () { @@ -28,10 +28,11 @@ echo " Specify a configuration file (overrides system and user config file echo "-C " echo " Specify discid to resume from (only needed if you no longer have the cd)" echo "-d " -echo " Specify CDROM device to grab" +echo " Specify CDROM device to grab (flac uses a single-track flac file)" echo "-D Debugging mode (equivalent to sh -x abcde)" echo "-e Erase encoded track information from status file" #echo "-E Set the encoding information for the tags" +echo "-f Force operations that otherwise are considered harmful. Read \"man abcde\"" echo "-h This help information" #echo "-i Tag files while encoding, when possible (local only) -NWY-" echo "-j <#> Number of encoder processes to run at once (localhost)" @@ -43,7 +44,7 @@ echo "-N Noninteractive. Never prompt for anything" echo "-m Modify playlist to include CRLF endings, to comply with some players" echo "-M Create a CUE file" echo "-o " -echo " Output file type(s) (vorbis,mp3,flac,spx,mpc). Defaults to vorbis" +echo " Output file type(s) (vorbis,mp3,flac,spx,mpc,wav). 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 " @@ -321,19 +322,27 @@ do_gettracknum() do_replaygain() { if checkstatus replaygain; then :; else - run_command "" echo "Adding reply-gain information..." + run_command "" echo "Adding replygain information..." for OUTPUT in $( echo $OUTPUTTYPE | tr , \ ) # THE OUTPUT NEEDS TO BE CORRECTED WITH THE CONTAINER? do + case $OUTPUT in + vorbis|ogg) + OUTPUT=$OGGOUTPUTCONTAINER + ;; + flac) + OUTPUT=$FLACOUTPUTCONTAINER + ;; + esac OUTPUTFILES="" for UTRACKNUM in $TRACKQUEUE do CDDBTRACKNUM=$(expr $UTRACKNUM - 1) do_getcddbinfo TRACKNAME splitvarious - TRACKFILE=$(mungefilename "$TRACKNAME") - ARTISTFILE=$(mungefilename "$TRACKARTIST") - ALBUMFILE=$(mungefilename "$DALBUM") + TRACKFILE="$(mungefilename "$TRACKNAME")" + ARTISTFILE="$(mungefilename "$TRACKARTIST")" + ALBUMFILE="$(mungefilename "$DALBUM")" do_gettracknum if [ "$VARIOUSARTISTS" = "y" ]; then OUTPUTFILE=$(eval echo $VAOUTPUTFORMAT) @@ -343,13 +352,18 @@ do_replaygain() OUTPUTFILES="$OUTPUTDIR/$OUTPUTFILE.$OUTPUT $OUTPUTFILES" done case "$OUTPUT" in - flac);; - ogg);; + flac) + run_command replaygain-flac $METAFLAC --add-replay-gain $OUTPUTFILES + ;; + vorbis|ogg) + run_command replaygain-vorbis $VORBISGAIN --album $OUTPUTFILES + ;; *);; esac - echo vorbisgain-$OUTPUT >> "$ABCDETEMPDIR/status" done - echo vorbisgain >> "$ABCDETEMPDIR/status" + if checkerrors replaygain-.{3,6}; then :; else + run_command replaygain true + fi fi } @@ -370,34 +384,34 @@ splitvarious () if [ "$VARIOUSARTISTS" = "y" ] && [ ! "$ONETRACK" = "y" ]; then case "$VARIOUSARTISTSTYLE" in forward) - DTITLEARTIST=$(echo "$TRACKNAME" | sed 's- / -~-g') - TRACKARTIST=$(echo "$DTITLEARTIST" | cut -f1 -d~) - TRACKNAME=$(echo "$DTITLEARTIST" | cut -f2 -d~) + DTITLEARTIST="$(echo "$TRACKNAME" | sed 's- / -~-g')" + TRACKARTIST="$(echo "$DTITLEARTIST" | cut -f1 -d~)" + TRACKNAME="$(echo "$DTITLEARTIST" | cut -f2 -d~)" ;; forward-dash) - DTITLEARTIST=$(echo "$TRACKNAME" | sed 's, - ,~,g') - TRACKARTIST=$(echo "$DTITLEARTIST" | cut -f1 -d~) - TRACKNAME=$(echo "$DTITLEARTIST" | cut -f2 -d~) + DTITLEARTIST="$(echo "$TRACKNAME" | sed 's, - ,~,g')" + TRACKARTIST="$(echo "$DTITLEARTIST" | cut -f1 -d~)" + TRACKNAME="$(echo "$DTITLEARTIST" | cut -f2 -d~)" ;; reverse) - DTITLEARTIST=$(echo "$TRACKNAME" | sed 's- / -~-g') - TRACKARTIST=$(echo "$DTITLEARTIST" | cut -f2 -d~) - TRACKNAME=$(echo "$DTITLEARTIST" | cut -f1 -d~) + DTITLEARTIST="$(echo "$TRACKNAME" | sed 's- / -~-g')" + TRACKARTIST="$(echo "$DTITLEARTIST" | cut -f2 -d~)" + TRACKNAME="$(echo "$DTITLEARTIST" | cut -f1 -d~)" ;; reverse-dash) - DTITLEARTIST=$(echo "$TRACKNAME" | sed 's, - ,~,g') - TRACKARTIST=$(echo "$DTITLEARTIST" | cut -f2 -d~) - TRACKNAME=$(echo "$DTITLEARTIST" | cut -f1 -d~) + DTITLEARTIST="$(echo "$TRACKNAME" | sed 's, - ,~,g')" + TRACKARTIST="$(echo "$DTITLEARTIST" | cut -f2 -d~)" + TRACKNAME="$(echo "$DTITLEARTIST" | cut -f1 -d~)" ;; colon) - DTITLEARTIST=$(echo "$TRACKNAME" | sed 's-: -~-g') - TRACKARTIST=$(echo "$DTITLEARTIST" | cut -f1 -d~) - TRACKNAME=$(echo "$DTITLEARTIST" | cut -f2 -d~) + DTITLEARTIST="$(echo "$TRACKNAME" | sed 's-: -~-g')" + TRACKARTIST="$(echo "$DTITLEARTIST" | cut -f1 -d~)" + TRACKNAME="$(echo "$DTITLEARTIST" | cut -f2 -d~)" ;; trailing-paren) - DTITLEARTIST=$(echo "$TRACKNAME" | sed 's,^\(.*\) (\(.*\)),\1~\2,') - TRACKARTIST=$(echo "$DTITLEARTIST" | cut -f2 -d~) - TRACKNAME=$(echo "$DTITLEARTIST" | cut -f1 -d~) + DTITLEARTIST="$(echo "$TRACKNAME" | sed 's,^\(.*\) (\(.*\)),\1~\2,')" + TRACKARTIST="$(echo "$DTITLEARTIST" | cut -f2 -d~)" + TRACKNAME="$(echo "$DTITLEARTIST" | cut -f1 -d~)" ;; esac elif [ "$VARIOUSARTISTS" = "y" ] && [ "$ONETRACK" = "y" ]; then @@ -574,14 +588,10 @@ return 0 do_tag () { COMMENTOUTPUT="$(eval echo ${COMMENT})" + 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 # TRACKNUM value before evaluation -# if [ -n "$STARTTRACKNUMBER" -a -n "$STARTTRACKNUMBERTAG" ] ; then -# # Get the trackpadding from the current track -# CURRENTTRACKPADDING=$(echo -n $UTRACKNUM | wc -c) -# TRACKNUM=$( printf %0.${CURRENTTRACKPADDING}d $(expr ${UTRACKNUM} + ${STARTTRACKNUMBER} - $FIRSTTRACK )) -# fi if [ -n "$STARTTRACKNUMBERTAG" ] ; then do_gettracknum fi @@ -675,11 +685,12 @@ do_tag () mpc) run_command tagtrack-$OUTPUT-$1 true ;; + wav) + run_command tagtrack-$OUTPUT-$1 true + ;; esac done - if checkerrors "tagtrack-(.{3,4})-$1"; then - run_command tagtrack-$1 false - else + if checkerrors "tagtrack-(.{3,6})-$1"; then :; else run_command tagtrack-$1 true fi @@ -711,7 +722,7 @@ do_batch_encode () else for UTRACKNUM in $TRACKQUEUE do - echo encodetrack-$UTRACKNUM >> status + run_command encodetrack-$UTRACKNUM true done fi ) @@ -857,15 +868,19 @@ do_encode () ## FIXME ## to the encoder ends up empty. $RUN_COMMAND nice $ENCNICE $MPPENCODER $MPPENCODEROPTS --artist "$TRACKARTIST" --album "$DALBUM" --title "$TRACKNAME" --track "$1" --genre "$CDGENRE" --year "$CDYEAR" --comment "$COMMENT" "$IN" "$OUT" ;; + wav) + # In case of wav output we need nothing. Just keep the wavs. + run_command encodetrack-$OUTPUT-$1 true + ;; esac done # Only remove .wav if the encoding succeeded - if checkerrors "encodetrack-(.{3,4})-$1"; then - run_command encodetrack-$1 false - else + if checkerrors "encodetrack-(.{3,6})-$1"; then :; else run_command encodetrack-$1 true if [ ! "$KEEPWAVS" = "y" ] ; then - rm -f "$IN" + if [ ! "$KEEPWAVS" = "move" ] ; then + rm -f "$IN" + fi fi fi else @@ -1055,27 +1070,20 @@ do_move () # ''' -> '' # '?' -> '' # Eat control characters - ALBUMFILE=$(mungefilename "$DALBUM") - ARTISTFILE=$(mungefilename "$TRACKARTIST") - TRACKFILE=$(mungefilename "$TRACKNAME") - GENRE=$(mungegenre "$GENRE") - YEAR=$(echo $CDYEAR) + ALBUMFILE="$(mungefilename "$DALBUM")" + ARTISTFILE="$(mungefilename "$TRACKARTIST")" + TRACKFILE="$(mungefilename "$TRACKNAME")" + GENRE="$(mungegenre "$GENRE")" + YEAR="$(echo $CDYEAR)" # If we want to start the tracks with a given number, we need to modify the # TRACKNUM value before evaluation - # if [ -n "$STARTTRACKNUMBER" ] ; then - # # Get the trackpadding from the current track - # CURRENTTRACKPADDING=$(echo -n $UTRACKNUM | wc -c) - # TRACKNUM=$( printf %0.${CURRENTTRACKPADDING}d $(expr ${UTRACKNUM} + ${STARTTRACKNUMBER} - $FIRSTTRACK )) - # else - # TRACKNUM=${UTRACKNUM} - # fi do_gettracknum # Supported variables for OUTPUTFORMAT are GENRE, ALBUMFILE, ARTISTFILE, # TRACKFILE, and TRACKNUM. if [ "$VARIOUSARTISTS" = "y" ]; then - OUTPUTFILE=$(eval echo $VAOUTPUTFORMAT) - else - OUTPUTFILE=$(eval echo $OUTPUTFORMAT) + OUTPUTFILE="$(eval echo "$VAOUTPUTFORMAT")" + else + OUTPUTFILE="$(eval echo "$OUTPUTFORMAT")" 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 @@ -1088,10 +1096,30 @@ do_move () ;; esac # Check that the directory for OUTPUTFILE exists, if it doesn't, create it - OUTPUTFILEDIR=$(dirname "$OUTPUTDIR/$OUTPUTFILE") - # mkdir -p shouldn't return an error if the directory already exists - mkdir -p "$OUTPUTFILEDIR" - run_command movetrack-$1 mv "$ABCDETEMPDIR/track$1.$OUTPUT" "$OUTPUTDIR/$OUTPUTFILE.$OUTPUT" + OUTPUTFILEDIR="$(dirname "$OUTPUTDIR/$OUTPUTFILE")" + case $OUTPUT in + wav) + if [ "$DOCLEAN" != "y" ] && [ "$FORCE" != "y" ]; then + ### FIXME ### introduce warnings? + : + else + # mkdir -p shouldn't return an error if the directory already exists + mkdir -p "$OUTPUTFILEDIR" + run_command movetrack-$1 mv "$ABCDETEMPDIR/track$1.$OUTPUT" "$OUTPUTDIR/$OUTPUTFILE.$OUTPUT" + if checkstatus movetrack-output-$OUTPUT; then :; else + run_command movetrack-output-$OUTPUT true + fi + fi + ;; + *) + # mkdir -p shouldn't return an error if the directory already exists + mkdir -p "$OUTPUTFILEDIR" + run_command movetrack-$1 mv "$ABCDETEMPDIR/track$1.$OUTPUT" "$OUTPUTDIR/$OUTPUTFILE.$OUTPUT" + if checkstatus movetrack-output-$OUTPUT; then :; else + run_command movetrack-output-$OUTPUT true + fi + ;; + esac # Lets move the cue file if CUEFILE=$(checkstatus cuefile) >/dev/null ; then if [ -r "$ABCDETEMPDIR/$CUEFILE" ]; then @@ -1100,6 +1128,14 @@ do_move () #run_command '' vecho "Copying cue file to its destination directory..." if checkstatus onetrack >/dev/null ; then case $OUTPUT in + wav) + if [ "$DOCLEAN" != "y" ] && [ "$FORCE" != "y" ]; then + # We dont have the dir, since it was not created before. + : + else + run_command movecue-$OUTPUT cp "$ABCDETEMPDIR/$CUEFILE" "$OUTPUTDIR/$OUTPUTFILE.cue" + fi + ;; # NOTE: Creating a cue file with the 3-char-extension files is to comply with # http://brianvictor.tripod.com/mp3cue.htm#details [a-z0-9][a-z0-9][a-z0-9]) @@ -1129,11 +1165,19 @@ do_playlist () { for OUTPUT in $(echo $OUTPUTTYPE | tr , \ ) do + case $OUTPUT in + vorbis|ogg) + OUTPUT=$OGGOUTPUTCONTAINER + ;; + flac) + OUTPUT=$FLACOUTPUTCONTAINER + ;; + esac # Create a playlist file for the playlist data to go into. # We used to wipe it out if it existed. Now we request permision if interactive. for LASTTRACK in $TRACKQUEUE; do :; done - ALBUMFILE=$(mungefilename "$DALBUM") - ARTISTFILE=$(mungefilename "$DARTIST") + ALBUMFILE="$(mungefilename "$DALBUM")" + ARTISTFILE="$(mungefilename "$DARTIST")" GENRE=$(mungegenre "$GENRE") YEAR=${CDYEAR:-$CDYEAR} if [ "$VARIOUSARTISTS" = "y" ] ; then @@ -1172,18 +1216,11 @@ do_playlist () #TRACKNAME=$(grep ^TTITLE$CDDBTRACKNUM= "$CDDBDATA" | cut -f2 -d= | tr -d \[:cntrl:\] | sed 's/\ \+$//') do_getcddbinfo TRACKNAME splitvarious - TRACKFILE=$(mungefilename "$TRACKNAME") - ARTISTFILE=$(mungefilename "$TRACKARTIST") - ALBUMFILE=$(mungefilename "$DALBUM") + TRACKFILE="$(mungefilename "$TRACKNAME")" + ARTISTFILE="$(mungefilename "$TRACKARTIST")" + ALBUMFILE="$(mungefilename "$DALBUM")" # If we want to start the tracks with a given number, we need to modify the # TRACKNUM value before evaluation - # if [ -n "$STARTTRACKNUMBER" ] ; then - # # Get the trackpadding from the current track - # CURRENTTRACKPADDING=$(echo -n $UTRACKNUM | wc -c) - # TRACKNUM=$( printf %0.${CURRENTTRACKPADDING}d $(expr ${UTRACKNUM} + ${STARTTRACKNUMBER} - $FIRSTTRACK )) - # else - # TRACKNUM=${UTRACKNUM} - # fi do_gettracknum if [ "$VARIOUSARTISTS" = "y" ]; then OUTPUTFILE=$(eval echo $VAOUTPUTFORMAT) @@ -1231,11 +1268,21 @@ do_discid () if [ "$OSFLAVOUR" = "OSX" ]; then disktool -u ${CDROM#/dev/} fi - TRACKINFO=$($CDDISCID $CDROM) + if [ "$CDROMREADERSYNTAX" = "flac" ] ; then + TRACKINFO=$($METAFLAC $METAFLACOPTS --export-cuesheet-to=- $CDROM | $CUE2DISCID) + else + TRACKINFO=$($CDDISCID $CDROM) + fi # Make sure there's a CD in there by checking cd-discid's return code - if [ "$?" = "1" ]; then - echo "abcde error: CD could not be read. Perhaps there's no CD in the drive?" >&2 - exit 1 + if [ ! "$?" = "0" ]; then + if [ "$CDROMREADERSYNTAX" = "flac" ] ; then + echo "abcde error: cuesheet information from the flac file could not be read." >&2 + echo "abcde error: Perhaps the flac file does not contain a cuesheet?." >&2 + exit 1 + else + echo "abcde error: CD could not be read. Perhaps there's no CD in the drive?" >&2 + exit 1 + fi fi # In OSX, remount the disc again if [ "$OSFLAVOUR" = "OSX" ]; then @@ -1270,12 +1317,10 @@ do_discid () if [ ! "$RET" = "0" ];then echo "Warning: Something went wrong while querying the CD... Maybe a DATA CD?" fi - TRACKS="$( echo "$CDPARANOIAOUTPUT" | egrep '^[[:space:]]+[[:digit:]]' | tail -n 1 | get_first | tr -d "." | tr '\n' ' ' )" + TRACKS="$(echo "$CDPARANOIAOUTPUT" | egrep '^[[:space:]]+[[:digit:]]' | tail -n 1 | get_first | tr -d "." | tr '\n' ' ')" CDPARANOIAAUDIOTRACKS="$TRACKS" else - if [ -f "$ABCDETEMPDIR/status" ] && checkstatus cdparanoia-audio-tracks ; then - TRACKS=$( cat "$ABCDETEMPDIR/cdparanoia-audio-tracks" ) - else + if [ -f "$ABCDETEMPDIR/status" ] && TRACKS=$(checkstatus cdparanoia-audio-tracks); then :; else TRACKS=$(echo $TRACKINFO | cut -f2 -d' ') fi fi @@ -1406,10 +1451,8 @@ do_discid () fi # If we got the CDPARANOIA status and it is not recorded, save it now if [ -n "$CDPARANOIAAUDIOTRACKS" ]; then - if checkstatus cdparanoia-audio-tracks; then :; else - if echo "$CDPARANOIAAUDIOTRACKS" >> "$ABCDETEMPDIR/cdparanoia-audio-tracks"; then - echo "cdparanoia-audio-tracks" >> "$ABCDETEMPDIR/status" - fi + if checkstatus cdparanoia-audio-tracks > /dev/null 2>&1; then :; else + echo cdparanoia-audio-tracks=$CDPARANOIAAUDIOTRACKS >> "$ABCDETEMPDIR/status" fi fi @@ -2030,6 +2073,8 @@ do_cdread () LASTTRACK=$3 UTRACKNUM=$FIRSTTRACK case "$CDROMREADERSYNTAX" in + ### FIXME ### How are we calculating the tracks in flac mode? + flac) READTRACKNUMS="$FIRSTTRACK.1-$(($LASTTRACK + 1)).0" ;; cdparanoia) READTRACKNUMS="$FIRSTTRACK-$LASTTRACK" ;; cdda2wav) READTRACKNUMS="$FIRSTTRACK+$LASTRACK" ;; *) echo "abcde error: $CDROMREADERSYNTAX does not support ONETRACK mode" @@ -2047,7 +2092,10 @@ do_cdread () else WAVDATA="$ABCDETEMPDIR/track$UTRACKNUM.wav" case "$CDROMREADERSYNTAX" in - ## FIXME ## Find the case for dagrab, to avoid exceptions + ## FIXME ## Find the cases for dagrab and flac, to avoid exceptions + flac) + FILEARG="--output-name=$WAVDATA" + ;; dagrab) FILEARG="-f $WAVDATA" ;; @@ -2069,6 +2117,10 @@ do_cdread () fi fi case "$CDROMREADERSYNTAX" in + ### FIXME ### use an exception for flac, since it uses -o + ### FIXME ### Shall we just use -o $FILEARG ?? + flac) + nice $READNICE $FLAC -d --cue=${READTRACKNUMS:-$UTRACKNUM.1-$(($UTRACKNUM + 1)).0} "$FILEARG" "$CDROM" ;; cdparanoia) nice $READNICE $CDROMREADER -$CDPARANOIACDROMBUS $CDROM ${READTRACKNUMS:-$UTRACKNUM} "$FILEARG" $REDIR ;; cdda2wav) @@ -2278,6 +2330,7 @@ VORBISGAIN=vorbisgain MKCUE=mkcue MKTOC=cdrdao DIFF=diff +CUE2DISCID=cue2discid # Options for programs called from abcde # mp3 @@ -2402,7 +2455,7 @@ fi # Parse command line options #while getopts 1a:A:bc:C:d:Dehj:klLmMnNo:pPr:Rs:S:t:T:vVxw:W: opt ; do -while getopts 1a:bc:C:d:Dehj:klLmMnNo:pPr:Rs:S:t:T:vVxw:W: opt ; do +while getopts 1a:bc:C:d:Defhj:klLmMnNo:pPr:Rs:S:t:T:vVxw:W:z opt ; do case "$opt" in 1) ONETRACK=y ;; a) ACTIONS="$OPTARG" ;; @@ -2416,7 +2469,7 @@ while getopts 1a:bc:C:d:Dehj:klLmMnNo:pPr:Rs:S:t:T:vVxw:W: opt ; do h) usage; exit ;; e) ERASEENCODEDSTATUS=y ;; E) ENCODING="$OPTARG" ;; -# f) FORCECDDBUSELOCAL=y ;; + f) FORCE=y ;; i) INLINETAG=y ;; j) MAXPROCS="$OPTARG" ;; k) KEEPWAVS=y ;; @@ -2454,16 +2507,28 @@ while getopts 1a:bc:C:d:Dehj:klLmMnNo:pPr:Rs:S:t:T:vVxw:W: opt ; do exit 1 fi ;; + z) echo "Placeholder for a future autodebug option" ;; ?) usage; exit ;; esac done shift $(($OPTIND - 1)) +# If the user specified a flac file, then switch to special flac mode +if echo $CDROM | grep -i -q '.flac$'; then + vecho "abcde: switching to flac CDROMREADERSYNTAX..." + CDROMREADERSYNTAX=flac + if [ "$EJECTCD" = "y" ];then + vecho "abcde: CDROM flac mode, deactivating EJECTCD..." + EJECTCD=n + fi +fi + # Decide if we can continue. if [ "$ONETRACK" = "y" ]; then # FIXME # remove check as soon as we find out about the other readers case "$CDROMREADERSYNTAX" in + flac) ;; cdparanoia) ;; cdda2wav) ;; *) echo "abcde error: $CDROMREADERSYNTAX does not support ONETRACK mode" @@ -2527,6 +2592,11 @@ do esac done +if [ "$DONORMALIZE" = "y" ] && [ "$DOREPLAYGAIN" = "y" ]; then + # FIXME # should we abort on error or just inform the user? + : +fi + for SHOWCDDBFIELD in $(echo $SHOWCDDBFIELDS | tr , \ ); do case $SHOWCDDBFIELD in y*|Y*) SHOWCDDBYEAR="y";; @@ -2619,6 +2689,10 @@ case "$CDROMREADERSYNTAX" in CDROMREADER="$CDDAFS" CDROMREADEROPTS="$CDDAFSOPTS" ;; + flac) + CDROMREADER="$FLAC" + CDROMREADEROPTS="$FLACOPTS" + ;; esac # There's only one normalize... @@ -2631,7 +2705,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 , \ )"; do case "$OUTPUT" in vorbis:*|ogg:*) OGGENCODEROPTSCLI="$( echo $OUTPUT | cut -d: -f2- )" ;; mp3:*) MP3ENCODEROPTSCLI="$( echo $OUTPUT | cut -d: -f2- )" ;; @@ -2640,7 +2714,7 @@ if echo "$OUTPUTTYPE" | grep ":" > /dev/null 2>&1 ; then mpc:*) MPPENCODEROPTSCLI="$( echo $OUTPUT | cut -d: -f2- )" ;; esac done - for OUTPUT in $(echo $OUTPUTTYPE | tr , \ ); do + for OUTPUT in "$(echo "$OUTPUTTYPE" | tr , \ )"; do TEMPOUTPUT=$( echo "$OUTPUT" | cut -d: -f1 ) TEMPOUTPUTTYPE="${TEMPOUTPUTTYPE:+$TEMPOUTPUTTYPE,}$TEMPOUTPUT" done @@ -2665,6 +2739,7 @@ do ;; flac) [ "$FLACENCODERSYNTAX" = "default" ] && FLACENCODERSYNTAX=flac + [ "$REPLAYGAIN" = "y" ] && NEEDMETAFLAC=y [ "$DOTAG" = "y" ] && NEEDMETAFLAC=y ;; spx) @@ -2673,6 +2748,12 @@ do mpc) [ "$MPPENCODERSYNTAX" = "default" ] && MPPENCODERSYNTAX=mppenc ;; + wav) + if [ "$KEEPWAVS" = "y" ]; then + vecho "Unsetting the KEEPWAVS option, since the resulting wav files were requested..." + fi + KEEPWAVS=move + ;; *) echo "abcde error: Invalid OUTPUTTYPE defined" >&2 exit 1 ;; @@ -2804,6 +2885,8 @@ fi if [ X"$CDSPEEDVALUE" != "X" ]; then case "$CDROMREADERSYNTAX" in cdparanoia|debug) CDROMREADEROPTS="$CDPARANOIAOPTS -S $CDSPEEDVALUE" ;; + ### FIXME ### translate "cue2discid" from python to bash + flac) NEEDMETAFLAC=y ; NEEDCUE2DISCID=y ;; *) NEEDCDSPEED=y ;; esac fi @@ -2811,6 +2894,7 @@ fi # Rippers with USEPIPE support # FIXME # Include here all the rippers we can figure out support pipes PIPE_cdparanoia="-" +PIPE_flac="-c " # Encoders with USEPIPE support # FIXME # Include here all the encoders we can figure out support pipes @@ -2836,8 +2920,8 @@ if [ "$USEPIPES" = "y" ]; then esac if [ ! -n "$( eval echo "\$$PIPERIPPERSVARCHECK" )" ] ; then echo "abcde error: no support for pipes with given ripper" >&2 - echo "read the USEPIPES file from the source tarball to help" >&2 - echo "on a Debian system, read /usr/share/doc/abcde/USEPIPES.gz" >&2 + echo "read the USEPIPES file from the source tarball to get help." >&2 + echo "On a Debian system, it is under /usr/share/doc/abcde/USEPIPES.gz" >&2 exit 1; fi if [ ! -n "$( eval echo "\$$PIPEENCODERSVARCHECK" )" ] ; then @@ -2855,7 +2939,8 @@ for X in $CDROMREADER $CDDISCID ${NEEDTAGGER+$TAGGER} $MP3ENCODER \ ${NEEDCOMMENTER+$VORBISCOMMENT} ${NEEDMETAFLAC+$METAFLAC} \ ${NEEDNORMALIZER+$NORMALIZER} ${NEEDEJECT+$EJECT} \ ${NEEDDISKTOOL+disktool} ${NEEDCDSPEED+$CDSPEED} \ - ${NEEDVORBISGAIN+$VORBISGAIN} ${NEEDCUEREADER+$CUEREADER} + ${NEEDVORBISGAIN+$VORBISGAIN} ${NEEDCUEREADER+$CUEREADER} \ + ${NEEDCUE2DISCID+$CUE2DISCID} do # Cut off the command-line options we just added in X=$(echo $X | cut -d' ' -f2) @@ -2912,14 +2997,15 @@ if [ "$DOCDDB" = "y" ]; then fi do_cddbedit - eval $($CDDBTOOL parse "$CDDBDATA") + eval "$($CDDBTOOL parse "$CDDBDATA")" fi # Before reading tracks, we set the speed of the device if [ X"$CDSPEEDVALUE" != "X" ]; then case "$CDROMREADERSYNTAX" in - cdparanoia|debug) : ;; + cdparanoia|debug) ;; + flac) ;; *) do_cdspeed ;; esac fi @@ -3221,7 +3307,7 @@ if [ "$DOENCODE" = "y" -a "$USEPIPES" != "y" ]; then fi # If the above didn't catch the stragglers, this will wait -if [ "$DOREPLAYGAIN" = "y" ]; then +if [ "$REPLAYGAIN" = "y" ]; then do_replaygain fi # Check to see if run_command logged any errors @@ -3235,6 +3321,14 @@ if [ "$KEEPWAVS" = "y" ];then # Don't clean up DOCLEAN=n fi +# Check if we have moved all the formats we had previously encoded, if we are not using the FORCE. +if [ ! "$FORCE" = "y" ]; then + ENCODED_FORMATS=$(egrep ^encodetrack-(.{3,6})-(.{1,2})$ "$ABCDETEMPDIR/status" | cut -d"-" -f2 | sort -u | tr '\n' '|') + MOVED_FORMATS=$(egrep ^movetrack-output-(.{3,6})$ "$ABCDETEMPDIR/status" | cut -d"-" -f2 | sort -u | tr '\n' '|') + if [ "$ENCODED_FORMATS" != "$MOVED_FORMATS" ]; then + echo "Not all encoded formats have been requested to be moved." + echo "Use \"-a clean -f -C $DISCID\" to force the removal of the remaining data." +fi if [ "$DOCLEAN" = "y" ]; then # Wipe all the evidence # Gimme gimme gimme some more time!