X-Git-Url: https://git.hcoop.net/clinton/abcde.git/blobdiff_plain/163568c42b97d81705a47e273ad40cd2bd8e145b..34cdb166bd3f888d7f80cf6165740b9677bd8111:/abcde diff --git a/abcde b/abcde index 5186a0f..79afd6a 100755 --- a/abcde +++ b/abcde @@ -13,7 +13,7 @@ # # $Id$ -VERSION='2.3.99.8' +VERSION='2.4.1' usage () { @@ -496,7 +496,7 @@ makeids () do_replaygain() { if checkstatus replaygain; then :; else - run_command "" echo "Adding replygain information..." + run_command "" echo "Adding replaygain information..." for TMPOUTPUT in $( echo $OUTPUTTYPE | tr , \ ) do case $TMPOUTPUT in @@ -541,14 +541,14 @@ do_replaygain() done case "$OUTPUT" in flac) - run_command replaygain-flac nice $ENCNICE $METAFLAC --add-replay-gain "${OUTPUTFILES[@]}" + run_command replaygain-flac nice $ENCNICE $METAFLAC $FLACGAINOPTS "${OUTPUTFILES[@]}" #run_command replaygain-flac true ;; vorbis|ogg) - run_command replaygain-vorbis nice $ENCNICE $VORBISGAIN --album "${OUTPUTFILES[@]}" + run_command replaygain-vorbis nice $ENCNICE $VORBISGAIN $VORBISGAINOPTS "${OUTPUTFILES[@]}" ;; mp3) - run_command replaygain-mp3 nice $ENCNICE $MP3GAIN -a -k "${OUTPUTFILES[@]}" + run_command replaygain-mp3 nice $ENCNICE $MP3GAIN $MP3GAINOPTS "${OUTPUTFILES[@]}" ;; mpc) run_command replaygain-mpc nice $ENCNICE $MPPGAIN --auto "${OUTPUTFILES[@]}" @@ -779,7 +779,7 @@ return 0 # id3 tags a filename # variables used: # TRACKS, TRACKNAME, TRACKARTIST, TAGGER, TAGGEROPTS, VORBISCOMMENT, METAFLAC, ATOMICPARSLEY -# COMMENT, DALBUM, DARTIST, CDYEAR, CDGENRE (and temporarily) ID3TAGV +# COMMENT, DALBUM, DARTIST, CDYEAR, CDGENRE do_tag () { COMMENTOUTPUT="$(eval echo ${COMMENT})" @@ -799,6 +799,11 @@ do_tag () mp3) # id3v2 v0.1.9 claims to have solved the -c bug, so we merge both id3 and id3v2 GENREID=$(do_getgenreid "${CDGENRE}") + # Set TPE2 in case we have a Various Artists rip. + TPE2="" + if [ "$VARIOUSARTISTS" = "y" ]; then + TPE2="Various" + fi case "$ID3SYNTAX" in id3);; @@ -811,6 +816,7 @@ do_tag () -G "$GENREID" -n "${TRACKNUM:-$1}" \ "${TRACKNUM:+-N $TRACKS}" \ "${ENCODING:+--set-encoding=$ENCODING}" \ + "${TPE2:+--set-user-text-frame=TPE2:$TPE2}" \ "$ABCDETEMPDIR/track$1.$OUTPUT" ;; # FIXME # Still not activated... @@ -828,7 +834,8 @@ do_tag () $TAGGER $TAGGEROPTS -c "$COMMENTOUTPUT" \ -A "$DALBUM" -a "$TRACKARTIST" -t "$TRACKNAME" \ -y "$CDYEAR" -g "$GENREID" \ - -T "${TRACKNUM:-$1/$TRACKS}" \ + -T "${TRACKNUM:-$1}/$TRACKS" \ + ${TPE2:+--TPE2 "$TPE2"} \ "$ABCDETEMPDIR/track$1.$OUTPUT" ;; esac @@ -1118,7 +1125,7 @@ do_encode () fi # Quick hack to avoid tagging Ogg/Speex, since there is no other way to tag than inline tagging if [ ! "$DOTAG" = "y" ]; then - $RUN_COMMAND nice $EFFECTIVE_NICE $SPEEXENCODER $SPEEXENCODEROPTS --author "$TRACKARTIST" --title "$TRACKNAME" "$COMMENT" "$IN" "$OUT" + $RUN_COMMAND nice $EFFECTIVE_NICE $SPEEXENCODER $SPEEXENCODEROPTS --author "$TRACKARTIST" --title "$TRACKNAME" --comment "$COMMENT" "$IN" "$OUT" else $RUN_COMMAND nice $EFFECTIVE_NICE $SPEEXENCODER $SPEEXENCODEROPTS "$IN" "$OUT" fi @@ -1655,7 +1662,7 @@ abcde.mkcue () { local MODE DISCID TRACKS local i OFFSET LBA - + local CUEWAVFILE if [ "$1" = --wholedisc ] ; then MODE=INDEX @@ -1663,6 +1670,21 @@ abcde.mkcue () { MODE=PREGAP fi + vecho "One track is $ONETRACK" + TRACKFILE="$(mungefilename "$TRACKNAME")" + ARTISTFILE="$(mungefilename "$TRACKARTIST")" + ALBUMFILE="$(mungefilename "$DALBUM")" + if [ "$ONETRACK" = "y" ]; then + if [ "$VARIOUSARTISTS" = "y" ]; then + CUEWAVFILE="$(eval echo \""$VAONETRACKOUTPUTFORMAT"\" | sed -e 's@^.*/@@').$OUTPUT" + else + CUEWAVFILE="$(eval echo \""$ONETRACKOUTPUTFORMAT"\" | sed -e 's@^.*/@@').$OUTPUT" + fi + vecho "Cue wav file is $CUEWAVFILE" + else + CUEWAVFILE="dummy.wav" + fi + set -- $TRACKINFO DISCID=$1 @@ -1670,9 +1692,9 @@ abcde.mkcue () { shift 2 echo REM DISCID $DISCID - echo FILE \"dummy.wav\" WAVE + echo FILE \""$CUEWAVEFILE"\" WAVE - if [ $1 -ne 150 ] && [ $MODE = "PREGAP"] ; then + if [ $1 -ne 150 ] && [ $MODE = "PREGAP" ] ; then OFFSET=$1 else OFFSET=150 @@ -2004,6 +2026,25 @@ do_cleancue() eval track="\$TRACK$n" n=$(expr $n + 1) echo " TITLE \"$track\"" >> "$CUEFILE_OUT" + # When making a single-track rip, put the + # actual file name into the file declaration + # in the cue file so that it is usable by + # music players and the like + elif [ "$ONETRACK" = "y" ] && + echo "$line" | grep '^FILE "dummy.wav" WAVE' > /dev/null 2>&1 ; then + + TRACKFILE="$(mungefilename "$TRACKNAME")" + ARTISTFILE="$(mungefilename "$TRACKARTIST")" + ALBUMFILE="$(mungefilename "$DALBUM")" + + if [ "$VARIOUSARTISTS" = "y" ]; then + OUTPUTFILE="$(eval echo \""$VAONETRACKOUTPUTFORMAT"\" | sed -e 's@^.*/@@').$OUTPUT" + else + OUTPUTFILE="$(eval echo \""$ONETRACKOUTPUTFORMAT"\" | sed -e 's@^.*/@@').$OUTPUT" + fi + + echo "FILE \"$OUTPUTFILE\" WAVE" >> "$CUEFILE_OUT" + continue fi # FIXME # If the lines above are uncommented, remove the line below. echo "$line" >> "$CUEFILE_OUT" @@ -2708,7 +2749,7 @@ do_cdread () # FIXME # Add the possibility of grabbing ranges of tracks in onetrack # FIXME # Until then, we grab the whole CD in one track, no matter what # the user said - # We need the first and last track for cdda2wav + # We need the first and last track for cdda2wav/icedax FIRSTTRACK=$2 LASTTRACK=$(expr $3 + 0) UTRACKNUM=$FIRSTTRACK @@ -2718,7 +2759,7 @@ do_cdread () #XX FIXME XX # Add a variable to check if tracks are provided in command line and if not, use "0-" to rip the tracks READTRACKNUMS="$FIRSTTRACK-$LASTTRACK" ;; - cdda2wav) READTRACKNUMS="$FIRSTTRACK+$LASTTRACK" ;; + cdda2wav | icedax) READTRACKNUMS="$FIRSTTRACK+$LASTTRACK" ;; *) echo "abcde error: $CDROMREADERSYNTAX does not support ONETRACK mode" exit 1 ;; esac @@ -2729,7 +2770,7 @@ do_cdread () if [ "$USEPIPES" = "y" ]; then TEMPARG="PIPERIPPER_$CDROMREADERSYNTAX" FILEARG="$( eval echo "\$$TEMPARG" )" - REDIR="" + REDIR="y" PIPE_MESSAGE="and encoding " else WAVDATA="$ABCDETEMPDIR/track$UTRACKNUM.wav" @@ -2745,7 +2786,7 @@ do_cdread () FILEARG="$WAVDATA" ;; esac - REDIR=">&2" + REDIR="n" fi if [ "$1" = "onetrack" ]; then echo "Grabbing ${PIPE_MESSAGE}tracks $UTRACKNUM - $LASTTRACK as one track ..." >&2 @@ -2765,12 +2806,17 @@ do_cdread () STRIPTRACKNUM=$(expr $UTRACKNUM + 0) nice $READNICE $FLAC -d -f --cue=${READTRACKNUMS:-$STRIPTRACKNUM.1-$(($STRIPTRACKNUM + 1)).0} "$FILEARG" "$CDROM" ;; cdparanoia) - nice $READNICE $CDROMREADER -$CDPARANOIACDROMBUS "$CDROM" ${READTRACKNUMS:-$UTRACKNUM} "$FILEARG" $REDIR ;; - cdda2wav) + if [ "$REDIR" = "y" ]; then + nice $READNICE $CDROMREADER -$CDPARANOIACDROMBUS "$CDROM" ${READTRACKNUMS:-$UTRACKNUM} "$FILEARG" >&2 + else + nice $READNICE $CDROMREADER -$CDPARANOIACDROMBUS "$CDROM" ${READTRACKNUMS:-$UTRACKNUM} "$FILEARG" + fi;; + + cdda2wav | icedax) if [ "$OSFLAVOUR" = "OSX" ] ; then - # Hei, we have to unmount the device before running anything like cdda2wav in OSX + # Hei, we have to unmount the device before running anything like cdda2wav/icedax in OSX disktool -u ${CDROM#/dev/} 0 - # Also, in OSX the cdrom device for cdda2wav changes... + # Also, in OSX the cdrom device for cdda2wav/icedax changes... CDDA2WAVCDROM="IODVDServices" elif [ "$OSFLAVOUR" = "FBSD" ] ; then CDDA2WAVCDROM="$CDROMID" @@ -2781,12 +2827,19 @@ do_cdread () CDDA2WAVCDROM="$CDROMID" fi fi - nice $READNICE $CDROMREADER -D $CDDA2WAVCDROM -t ${READTRACKNUMS:-$UTRACKNUM} "$FILEARG" $REDIR - ;; + if [ "$REDIR" = "y" ]; then + nice $READNICE $CDROMREADER -D $CDDA2WAVCDROM -t ${READTRACKNUMS:-$UTRACKNUM} "$FILEARG" >&2 + else + nice $READNICE $CDROMREADER -D $CDDA2WAVCDROM -t ${READTRACKNUMS:-$UTRACKNUM} "$FILEARG" + fi ;; ## FIXME ## We have an exception for dagrab, since it uses -f ## FIXME ## Shall we just use -f $FILEARG ?? - dagrab) nice $READNICE $CDROMREADER -d "$CDROM" -v $UTRACKNUM "$FILEARG" $REDIR - ;; + dagrab) + if [ "$REDIR" = "y" ]; then + nice $READNICE $CDROMREADER -d "$CDROM" -v $UTRACKNUM "$FILEARG" >&2 + else + nice $READNICE $CDROMREADER -d "$CDROM" -v $UTRACKNUM "$FILEARG" + fi ;; cddafs) # Find the track's mounted path REALTRACKNUM=$(expr $UTRACKNUM + 0) @@ -2794,12 +2847,20 @@ do_cdread () FILEPATH=$(find "$FILEPATH" | grep "/$REALTRACKNUM "); # If the file exists, copy it if [ -e "$FILEPATH" ] ; then - nice $READNICE $CDROMREADER "$FILEPATH" "$FILEARG" $REDIR + if [ "$REDIR" = "y" ]; then + nice $READNICE $CDROMREADER "$FILEPATH" "$FILEARG" >&2 + else + nice $READNICE $CDROMREADER "$FILEPATH" "$FILEARG" + fi else false fi ;; - debug) nice $READNICE $CDROMREADER -$CDPARANOIACDROMBUS "$CDROM" -w $UTRACKNUM-[:1] "$FILEARG" $REDIR - ;; + debug) + if [ "$REDIR" = "y" ]; then + nice $READNICE $CDROMREADER -$CDPARANOIACDROMBUS "$CDROM" -w $UTRACKNUM-[:1] "$FILEARG" >&2 + else + nice $READNICE $CDROMREADER -$CDPARANOIACDROMBUS "$CDROM" -w $UTRACKNUM-[:1] "$FILEARG" + fi ;; esac RETURN=$? # If we get some error or we get some missing wav @@ -2963,7 +3024,7 @@ NOGAP=n BATCHNORM=n NOCDDBQUERY=n -# If using scsi devices, cdda2wav needs a CDROMID, instead of a device node +# If using scsi devices, cdda2wav/icedax needs a CDROMID, instead of a device node # i.e. CDROMID="1,0,0" CDROMID="" # If we are using the IDE bus, we need CDPARANOIACDROMBUS defined as "d" @@ -2999,7 +3060,7 @@ METAFLAC=metaflac AACTAG=faac CDPARANOIA=cdparanoia -CDDA2WAV=cdda2wav +CDDA2WAV=icedax DAGRAB=dagrab CDDAFS=cp CDDISCID=cd-discid @@ -3027,11 +3088,14 @@ BLADEENCOPTS= L3ENCOPTS= XINGMP3ENCOPTS= MP3ENCOPTS= +MP3GAINOPTS="-a -k" # ogg VORBIZEOPTS= OGGENCOPTS= +VORBISGAINOPTS="--album" # flac FLACOPTS= +FLACGAINOPTS="--add-replay-gain" # speex SPEEXENCOPTS= # mpc @@ -3068,7 +3132,7 @@ ACTIONS=cddb,read,encode,tag,move,clean DEFAULT_OUTPUT_BINARIES=vorbis:oggenc,flac:flac,mp3:toolame,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" +DEFAULT_CDROMREADERS="cdparanoia icedax cdda2wav" # List of quality levels associated with the encoders: DEFAULT_QUALITY_XLO="oggenc:-q -1,lame:-q 9,speex:--quality 1,m4a:" @@ -3281,7 +3345,7 @@ if [ "$ONETRACK" = "y" ]; then case "$CDROMREADERSYNTAX" in flac) ;; cdparanoia) ;; - cdda2wav) ;; + cdda2wav | icedax) ;; *) log error "$CDROMREADERSYNTAX does not support ONETRACK mode" exit 1 ;; esac @@ -3369,7 +3433,7 @@ done # At this point a CDROM has to be defined, so we check it exists. if [ X"$CDROM" != "X" ] ; then - if [ "$CDROMREADERSYNTAX" = "cdda2wav" ] && [ "$NEEDCDROMID" = "y" ] ; then + if ( [ "$CDROMREADERSYNTAX" = "cdda2wav" ] || [ "$CDROMREADERSYNTAX" = "icedax" ] ) && [ "$NEEDCDROMID" = "y" ] ; then if [ "$OSFLAVOUR" = "FBSD" ]; then if echo "$CDROMID" | grep "^[0-9],[0-9],[0-9]$" >/dev/null 2>&1 ; then :; else log error "CDROMID not in the right format for $CDROMREADERSYNTAX" @@ -3467,7 +3531,7 @@ case "$CDROMREADERSYNTAX" in CDROMREADER="$CDPARANOIA" CDROMREADEROPTS="$CDPARANOIAOPTS" ;; - cdda2wav) + cdda2wav | icedax) CDROMREADER="$CDDA2WAV" CDROMREADEROPTS="$CDDA2WAVOPTS" ;;