X-Git-Url: https://git.hcoop.net/clinton/abcde.git/blobdiff_plain/f7c6d185a79bcd2ed8c54a9f71a3dcb5b7f5bcea..f4065e1b19d7d671177af1dc78a3b145f259fa07:/abcde diff --git a/abcde b/abcde index 31fe0dd..f78666c 100755 --- a/abcde +++ b/abcde @@ -47,11 +47,13 @@ echo "-n No lookup. Don't query CDDB, just create and use template" echo "-N Noninteractive. Never prompt for anything" echo "-m Modify playlist to include CRLF endings, to comply with some players" echo " WARNING: Deprecated. Use \"cue\" action" -echo "-M Create a CUE file" +#echo "-M Create a CUE file" echo "-o " echo " Output file type(s) (vorbis,mp3,flac,spx,mpc,wav,m4a). 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 "-q " +echo " Set quality level (high,medium,low)" echo "-r " echo " Also encode on these remote hosts" echo "-R Use local CDDB in recursive mode" @@ -354,10 +356,17 @@ checkexec () # Cut off any command-line option we added in X=$(echo $@ | cut -d' ' -f2) # Test for built-in abcde.function - [ "$X" != "${X#abcde.}" ] && type $X >/dev/null 2&>1 && return + [ "$X" != "${X#abcde.}" ] && type $X >/dev/null 2>&1 && return if [ "$(which $X)" = "" ]; then 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 + if [ -e /etc/debian_release ] ; then + case $X in + 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 @@ -508,6 +517,8 @@ do_replaygain() TRACKFILE="$(mungefilename "$TRACKNAME")" ARTISTFILE="$(mungefilename "$TRACKARTIST")" ALBUMFILE="$(mungefilename "$DALBUM")" + GENRE="$(mungegenre "$GENRE")" + YEAR=${CDYEAR:-$CDYEAR} gettracknum if [ "$ONETRACK" = "y" ]; then if [ "$VARIOUSARTISTS" = "y" ]; then @@ -790,23 +801,27 @@ do_tag () run_command tagtrack-$OUTPUT-$1 nice $ENCNICE $TAGGER $TAGGEROPTS \ --comment=::"$COMMENTOUTPUT" -A "$DALBUM" \ -a "$TRACKARTIST" -t "$TRACKNAME" -Y "$CDYEAR" \ - -G "$GENREID" -n "${TRACKNUM:-$1}" "${TRACKNUM:+-N $TRACKS}" \ + -G "$GENREID" -n "${TRACKNUM:-$1}" \ + "${TRACKNUM:+-N $TRACKS}" \ "${ENCODING:+--set-encoding=$ENCODING}" \ "$ABCDETEMPDIR/track$1.$OUTPUT" ;; # FIXME # Still not activated... id3ed) - run_command tagtrack-$OUTPUT-$1 nice $ENCNICE $TAGGER $TAGGEROPTS -c "$COMMENTOUTPUT" \ - -a "$DALBUM" -n "$TRACKARTIST" -s "$TRACKNAME" -y "$CDYEAR" \ - -g "$GENREID" -k "${TRACKNUM:-$1}" \ + run_command tagtrack-$OUTPUT-$1 nice $ENCNICE \ + $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 - run_command tagtrack-$OUTPUT-$1 nice $ENCNICE $TAGGER $TAGGEROPTS -c "$COMMENTOUTPUT" \ - -A "$DALBUM" -a "$TRACKARTIST" -t "$TRACKNAME" -y "$CDYEAR" \ - -g "$GENREID" -T "${TRACKNUM:-$1/$TRACKS}" \ + run_command tagtrack-$OUTPUT-$1 nice $ENCNICE \ + $TAGGER $TAGGEROPTS -c "$COMMENTOUTPUT" \ + -A "$DALBUM" -a "$TRACKARTIST" -t "$TRACKNAME" \ + -y "$CDYEAR" -g "$GENREID" \ + -T "${TRACKNUM:-$1/$TRACKS}" \ "$ABCDETEMPDIR/track$1.$OUTPUT" ;; esac @@ -819,7 +834,9 @@ do_tag () mv "$ABCDETEMPDIR/track$1.$OGGOUTPUTCONTAINER" "$ABCDETEMPDIR/track$1.uncommented.$OGGOUTPUTCONTAINER" fi ( - # These are from http://www.xiph.org/ogg/vorbis/doc/v-comment.html + # These are from + # http://www.xiph.org/ogg/vorbis/doc/v-comment.html + echo ARTIST="$TRACKARTIST" echo ALBUM="$DALBUM" echo TITLE="$TRACKNAME" @@ -830,6 +847,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 @@ -837,9 +857,11 @@ do_tag () *) echo COMMENT="$COMMENTOUTPUT";; esac fi - ) | run_command tagtrack-$OUTPUT-$1 nice $ENCNICE $VORBISCOMMENT $VORBISCOMMENTOPTS -w \ + ) | run_command tagtrack-$OUTPUT-$1 nice $ENCNICE \ + $VORBISCOMMENT $VORBISCOMMENTOPTS -w \ "$ABCDETEMPDIR/track$1.uncommented.$OGGOUTPUTCONTAINER" "$ABCDETEMPDIR/track$1.$OGGOUTPUTCONTAINER" - # Doublecheck that the commented file was created successfully before wiping the original + # Doublecheck that the commented file was created + # successfully before wiping the original if [ -f "$ABCDETEMPDIR/track$1.$OGGOUTPUTCONTAINER" ]; then rm -f "$ABCDETEMPDIR/track$1.uncommented.$OGGOUTPUTCONTAINER" else @@ -860,6 +882,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 @@ -894,7 +919,8 @@ do_tag () # OUTPUTTYPE, {FOO}ENCODERSYNTAX, ENCNICE, ENCODER, ENCODEROPTS do_nogap_encode () { - # The commands here don't go through run_command because they're never supposed to be silenced + # The commands here don't go through run_command because they're never + # supposed to be silenced echo "Encoding gapless MP3 tracks: $TRACKQUEUE" for OUTPUT in $(echo $OUTPUTTYPE | tr , \ ) do @@ -933,8 +959,8 @@ do_nogap_encode () fi fi fi - # Other encoders fall through to normal encoding as the tracks - # have not been entered in the status file. + # Other encoders fall through to normal encoding as the tracks have not + # been entered in the status file. } # do_encode [tracknumber] [hostname] @@ -1440,6 +1466,7 @@ do_playlist () read ERASEPLAYLIST case $ERASEPLAYLIST in e|E|a|A|k|K) DONE=y ;; + "") ERASEPLAYLIST=e ; DONE=y ;; *) ;; esac done @@ -1520,8 +1547,12 @@ abcde.cue2discid () { IFS=":" set -- $1 IFS="$OIFS" + local first second third + first=$(expr ${1} + 0 ) + second=$(expr ${2} + 0 ) + third=$(expr ${3} + 0 ) - echo $(( ((($1 * 60) + $2) * 75) + $3 )) + echo $(( ((($first * 60) + $second) * 75) + $third )) } OFFSET=150 @@ -1621,12 +1652,10 @@ abcde.mkcue () { echo REM DISCID $DISCID echo FILE \"dummy.wav\" WAVE - if [ $1 -ne 150 ] ; then - if [ $MODE = PREGAP ] ; then - OFFSET=$1 - else - OFFSET=150 - fi + if [ $1 -ne 150 ] && [ $MODE = "PREGAP"] ; then + OFFSET=$1 + else + OFFSET=150 fi i=1 @@ -1665,6 +1694,9 @@ do_discid () flac) if $METAFLAC $METAFLACOPTS --export-cuesheet-to=- "$CDROM" > /dev/null 2>&1 ; then case "$CUE2DISCID" in + # FIXME # right now we have 2 cue2discid internal + # implementations: builtin and abcde.cue2discid. Test + # both of them and decide which one we want to use. builtin) #vecho "Using builtin cue2discid implementation..." CUESHEET="$(metaflac $METAFLACOPTS --export-cuesheet-to=- "$CDROM")" @@ -2132,6 +2164,7 @@ do_musicbrainzstat () do_musicbrainz () { +# Use MBE_TOCGetCDIndexId on a perl query : } @@ -2924,6 +2957,10 @@ AACENC=faac ID3=id3 ID3V2=id3v2 EYED3=eyeD3 +VORBISCOMMENT=vorbiscomment +METAFLAC=metaflac +AACTAG=faac + CDPARANOIA=cdparanoia CDDA2WAV=cdda2wav DAGRAB=dagrab @@ -2934,8 +2971,6 @@ MUSICBRAINZ=musicbrainz-get-tracks EJECT=eject MD5SUM=md5sum DISTMP3=distmp3 -VORBISCOMMENT=vorbiscomment -METAFLAC=metaflac NORMALIZE=normalize-audio CDSPEED=eject VORBISGAIN=vorbisgain @@ -2998,6 +3033,12 @@ DEFAULT_OUTPUT_BINARIES=vorbis:oggenc,flac:flac,mp3:toolame,mp3:lame,mp3:bladeen # List of prefered cdromreaders - by default, run whichever we have in the path DEFAULT_CDROMREADERS="cdparanoia cdda2wav" +# List of quality levels associated with the encoders: +DEFAULT_QUALITY_XLO="oggenc:-q -1,lame:-q 9,speex:--quality 1,m4a:" +DEFAULT_QUALITY_LO="oggenc:-q 1,lame:-q 7,speex:--quality 5,m4a:" +DEFAULT_QUALITY_HI="oggenc:-q 7,lame:--preset standard,speex:--quality 9,m4a:" +DEFAULT_QUALITY_XHI="oggenc:-q 10,lame:--preset extreme,speex:--quality 10,m4a:" + # Asume fetch if under FreeBSD. curl is used for Mac OS X. wget is used for # Linux/OpenBSD. ftp is user for NetBSD. # Let's use these checkings to determine the OS flavour, which will be used @@ -3035,6 +3076,12 @@ CDDBAVAIL=y USEID3=y USEID3V2=y +# There we go.. +# But before we get into business, let us chop off any GREP environmental +# variables. +GREP_OPTIONS="" +GREP_COLOR="" + if [ -z "$OUTPUTDIR" ]; then OUTPUTDIR=$(pwd) fi @@ -3057,7 +3104,7 @@ fi if [ "$HTTPGETOPTS" = "" ] ; then case $HTTPGET in - wget) HTTPGETOPTS="-q -O -";; + wget) HTTPGETOPTS="-q -nv -O -";; curl) HTTPGETOPTS="-f -s";; fetch)HTTPGETOPTS="-q -o -";; ftp) HTTPGETOPTS="-a -V -o - ";; @@ -3083,8 +3130,8 @@ if [ "$CDROM" = "" ] ; then fi # Parse command line options -#while getopts 1a:bc:C:d:Dehj:klLmMnNo:pPr:Rs:S:t:T:vVxw:W: opt ; do -while getopts 1a:bBc:C:d:Defghj:klLmMnNo:pPr:s:S:t:T:uvVxX:w:W:z opt ; do +#while getopts 1a:bc:C:d:Dehj:klLmMnNo:pPq:r:Rs:S:t:T:vVxw:W: opt ; do +while getopts 1a:bBc:C:d:Defghj:klLmMnNo:pPr:s:S:t:T:UvVxX:w:W:z opt ; do case "$opt" in 1) ONETRACK=y ;; a) ACTIONS="$OPTARG" ;; @@ -3112,13 +3159,13 @@ while getopts 1a:bBc:C:d:Defghj:klLmMnNo:pPr:s:S:t:T:uvVxX:w:W:z opt ; do o) OUTPUTTYPE="$OPTARG" ;; p) PADTRACKS=y ;; P) USEPIPES=y ;; + q) QUALITYLEVEL="$OPTARG" ;; r) REMOTEHOSTS="$OPTARG" ;; R) CDDBLOCALRECURSIVE=y ;; s) SHOWCDDBFIELDS="$OPTARG" ;; S) CDSPEEDVALUE="$OPTARG" ;; t) STARTTRACKNUMBER="$OPTARG" ;; T) STARTTRACKNUMBER="$OPTARG" ; STARTTRACKNUMBERTAG="y" ;; - u) CDDBPROTO=6 ;; U) CDDBPROTO=5 ;; v) echo "This is abcde v$VERSION." @@ -3131,7 +3178,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 @@ -3242,7 +3292,8 @@ DOMOVE=n DOREPLAYGAIN=n DOPLAYLIST=n DOCLEAN=n -DOCUE=n +## FIXME ## Lets keep compatibility with -M +[ "$DOCUE" != "y" ] && DOCUE=n for ACTION in $(echo $ACTIONS | tr , \ ) do @@ -3352,7 +3403,7 @@ if [ "$BATCHNORM" = "y" ] && [ "$DONORMALIZE" = "n" ]; then BATCHNORM=n fi -# Check the encoding format from the ones available in the system, if nothing has been configured in the system. +# Check the encoding format from the ones available in the system, if nothing has been configured. if [ X"$OUTPUTTYPE" = "X" ]; then for DEFAULT_OUTPUT in $( echo "$DEFAULT_OUTPUT_BINARIES" | tr , \ ); do DEFAULT_OUTPUT_FORMAT="$(echo $DEFAULT_OUTPUT | cut -d ":" -f 1)" @@ -3711,7 +3762,7 @@ HTTPGET="$HTTPGET $HTTPGETOPTS" # Here it used to say: # One thousand lines in, we can start doing stuff with things -# Well, right now we are at line 3306 ;) +# Well, right now we are at line 3737 ;) # Export needed things so they can be read in this subshell export CDDBTOOL ABCDETEMPDIR TRACKQUEUE LOWDISK EJECTCD EJECT EJECTOPTS