#!/bin/bash
# Copyright (c) 1998-2001 Robert Woodcock <rcw@debian.org>
# Copyright (c) 2003-2006 Jesus Climent <jesus.climent@hispalinux.es>
+# Copyright (c) 2009-2012 Colin Tuckley <colint@debian.org>
+# Copyright (c) 2012 Steve McIntyre <93sam@@debian.org>
# This code is hereby licensed for public consumption under either the
# GNU GPL v2 or greater, or Larry Wall's Artistic license - your choice.
#
#
# Copyright for this work is to expire January 1, 2010, after which it
# shall be public domain.
-#
-# $Id$
-VERSION='2.5.3-UNRELEASED'
+VERSION='2.6.1-UNRELEASED'
usage ()
{
echo " cddb,read,normalize,encode,tag,move,replaygain,playlist,clean"
#echo "-A Experimental actions (retag, transcode)"
echo "-b Enable batch normalization"
-#echo "-B Disable batch replaygain (do file by file)"
echo "-c <file>"
echo " Specify a configuration file (overrides system and user config files)"
echo "-C <discid#>"
echo "-n No lookup. Don't query CDDB, just create and use template"
echo "-N Noninteractive. Never prompt for anything"
echo "-o <type1[,type2]...>"
-echo " Output file type(s) (vorbis,mp3,flac,spx,mpc,wav,m4a). Defaults to vorbis"
+echo " Output file type(s) (vorbis,mp3,flac,spx,mpc,wav,m4a,opus,wv). 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 <level>"
-echo " Set quality level (high,medium,low)"
echo "-r <host1[,host2]...>"
echo " Also encode on these remote hosts"
echo "-s <field>"
esac
}
-# Funtions to replace the need of seq, which is too distribution dependant.
+# Functions to replace the need of seq, which is too distribution dependent.
f_seq_row ()
{
i=$1
gettracknum()
{
if [ -n "$STARTTRACKNUMBER" ] ; then
- # Get the trackpadding from the current track
- CURRENTTRACKPADDING=$(echo -n $UTRACKNUM | wc -c)
+ # Get the trackpadding from the current track, also trim whitespace for MacOSX
+ CURRENTTRACKPADDING=$(echo -n $UTRACKNUM | wc -c | tr -d ' ')
TRACKNUM=$( printf %0.${CURRENTTRACKPADDING}d $(expr ${UTRACKNUM} + ${STARTTRACKNUMBER} - $FIRSTTRACK ))
else
TRACKNUM=${UTRACKNUM}
case "$CDDBMETHOD" in
cddb)
- printf -v DISCID "%08lx" $(( ($CDDBCKSUM % 0xff) << 24 | $TOTALTIME << 8 | $TRACKS))
+ printf -v DISCID "%08lx" $(( ($CDDBCKSUM % 0xff) * 16777216 | $TOTALTIME * 256 | $TRACKS))
;;
musicbrainz)
# FIXME: don't assume the first track is 1
vorbis|ogg)
OUTPUT=$OGGOUTPUTCONTAINER
;;
+ opus)
+ OUTPUT=$OPUSOUTPUTCONTAINER
+ ;;
flac)
OUTPUT=$FLACOUTPUTCONTAINER
;;
else
OUTPUTFILE="$(eval echo \""$ONETRACKOUTPUTFORMAT"\")"
fi
- else
+ else
if [ "$VARIOUSARTISTS" = "y" ]; then
OUTPUTFILE="$(eval echo \""$VAOUTPUTFORMAT"\")"
else
# do_tag [tracknumber]
# id3 tags a filename
# variables used:
-# TRACKS, TRACKNAME, TRACKARTIST, TAGGER, TAGGEROPTS, VORBISCOMMENT, METAFLAC, ATOMICPARSLEY
+# TRACKS, TRACKNAME, TRACKARTIST, TAGGER, TAGGEROPTS, VORBISCOMMENT, METAFLAC,
# COMMENT, DALBUM, DARTIST, CDYEAR, CDGENRE
do_tag ()
{
if [ "$VARIOUSARTISTS" = "y" ]; then
TPE2="Various"
fi
-
+
+
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 nice $ENCNICE $TAGGER $TAGGEROPTS \
- --comment=::"$COMMENTOUTPUT" -A "$DALBUM" \
- -a "$TRACKARTIST" -t "$TRACKNAME" -Y "$CDYEAR" \
- -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...
- id3ed)
+ id3)
run_command tagtrack-$OUTPUT-$1 nice $ENCNICE \
$TAGGER $TAGGEROPTS -c "$COMMENTOUTPUT" \
- -a "$DALBUM" -n "$TRACKARTIST" -s "$TRACKNAME" \
- -y "$CDYEAR" -g "$GENREID" -k "${TRACKNUM:-$1}" \
+ -A "$DALBUM" -a "$TRACKARTIST" -t "$TRACKNAME" \
+ -y "$CDYEAR" -g "$GENREID" \
+ -T "${TRACKNUM:-$1}" \
"$ABCDETEMPDIR/track$1.$OUTPUT"
;;
- *)
+ id3v2)
# FIXME # track numbers in mp3 come with 1/10, so we cannot
# happily substitute them with $TRACKNUM
run_command tagtrack-$OUTPUT-$1 nice $ENCNICE \
${TPE2:+--TPE2 "$TPE2"} \
"$ABCDETEMPDIR/track$1.$OUTPUT"
;;
+ eyed3*)
+ # FIXME # track numbers in mp3 come with 1/10, so we cannot
+ # happily substitute them with $TRACKNUM
+ case "$ID3SYNTAX" in
+ eyed3_06) addopts=( \
+ ${ENCODING:+--set-encoding="$ENCODING"} \
+ ${TPE2:+--set-text-frame=TPE2:"$TPE2"} \
+ # We set 'recording-date' so the date tag will show
+ # in Audacious, vlc and friends... Andrew.
+ ${CDYEAR:+--set-text-frame="TDRC:$CDYEAR"} \
+ ${COMMENTOUTPUT:+--comment=::"$COMMENTOUTPUT"} \
+ );;
+ *) addopts=( \
+ ${ENCODING:+--encoding="$ENCODING"} \
+ ${TPE2:+--text-frame=TPE2:"$TPE2"} \
+ # We set 'recording-date' so the date tag will show
+ # in Audacious, vlc and friends... Andrew.
+ ${CDYEAR:+--text-frame="TDRC:$CDYEAR"} \
+ ${COMMENTOUTPUT:+--comment "$COMMENTOUTPUT"} \
+ );;
+ esac
+ run_command tagtrack-$OUTPUT-$1 nice $ENCNICE $TAGGER $TAGGEROPTS \
+ -A "$DALBUM" \
+ -a "$TRACKARTIST" -t "$TRACKNAME" \
+ -G "$GENREID" -n "${TRACKNUM:-$1}" \
+ ${TRACKNUM:+-N "$TRACKS"} \
+ "${addopts[@]}" \
+ "$ABCDETEMPDIR/track$1.$OUTPUT"
+ ;;
+ *)
+ log error "Internal error: ID3SYNTAX has an illegal value"
+ exit 1
+ ;;
esac
;;
vorbis|ogg)
fi
if [ -n "$CDGENRE" ]; then
echo GENRE="$CDGENRE"
- fi
+ fi
echo TRACKNUMBER=${TRACKNUM:-$1}
if [ -n "$DISCNUMBER" ]; then
echo DISCNUMBER="$DISCNUMBER"
case "$COMMENTOUTPUT" in
*=*) echo "$COMMENTOUTPUT";;
*) echo COMMENT="$COMMENTOUTPUT";;
- esac
+ esac
fi
) | run_command tagtrack-$OUTPUT-$1 nice $ENCNICE \
$VORBISCOMMENT $VORBISCOMMENTOPTS -w \
;;
esac
;;
+ opus)
+ run_command tagtrack-$OUTPUT-$1 true
+ ;;
+
flac)
(
echo ARTIST="$TRACKARTIST"
fi
if [ -n "$CDGENRE" ]; then
echo GENRE="$CDGENRE"
- fi
+ fi
echo TRACKNUMBER="${TRACKNUM:-$1}"
if [ -n "$DISCNUMBER" ]; then
echo DISCNUMBER="$DISCNUMBER"
case "$COMMENTOUTPUT" in
*=*) echo "$COMMENTOUTPUT";;
*) echo COMMENT="$COMMENTOUTPUT";;
- esac
+ esac
fi
) | run_command tagtrack-$OUTPUT-$1 nice $ENCNICE $METAFLAC $METAFLACOPTS ${IMPORTCUESHEET:+--import-cuesheet-from="$ABCDETEMPDIR/$CUEFILE"} --import-tags-from=- "$ABCDETEMPDIR/track$1.$FLACOUTPUTCONTAINER"
;;
mpc)
run_command tagtrack-$OUTPUT-$1 true
;;
+ wv)
+ run_command tagtrack-$OUTPUT-$1 true
+ ;;
+ aac)
+ run_command tagtrack-$OUTPUT-$1 true
+ ;;
m4a)
- # Use a temp-file of our choice. --overWrite seems to
- # case core dumps with AtomicParsley 0.9.0
- ATOMICTEMPFILE="$ABCDETEMPDIR/track$1.m4a-atomic"
-
- VARIOUSBOOL="false"
- if [ "$VARIOUSARTISTS" = "y" ]; then
- VARIOUSBOOL="true"
- fi
-
- #It has to be command file opts for AtomicParsley
- run_command tagtrack-$OUTPUT-$1 nice $ENCNICE $ATOMICPARSLEY "$ABCDETEMPDIR/track$1.m4a" --artist "$TRACKARTIST" --album "$DALBUM" --title "$TRACKNAME" --tracknum ${TRACKNUM:-$1} --year "$CDYEAR" --genre "$CDGENRE" --compilation $VARIOUSBOOL --comment "$COMMENTOUTPUT" --output $ATOMICTEMPFILE
- if [ -f $ATOMICTEMPFILE ]; then
- mv "$ATOMICTEMPFILE" "$ABCDETEMPDIR/track$1.m4a"
- fi
+ case "$AACENCODERSYNTAX" in
+ fdkaac) # We will use inline tagging...
+ run_command tagtrack-$OUTPUT-$1 true
+ ;;
+ neroAacEnc) # Tag post encode with neroAacTag...
+ run_command tagtrack-$OUTPUT-$1 nice $ENCNICE "$NEROAACTAG" "$ABCDETEMPDIR/track$1.m4a" \
+ -meta:artist="$TRACKARTIST" -meta:album="$DALBUM" -meta:title="$TRACKNAME" -meta:track=${TRACKNUM:-$1} \
+ -meta:year="$CDYEAR" -meta:genre="$CDGENRE" -meta:comment="$COMMENT"
+ ;;
+ faac)
+ run_command tagtrack-$OUTPUT-$1 true
+ ;;
+ esac
;;
wav)
run_command tagtrack-$OUTPUT-$1 true
esac
;;
esac
- done
+ done
if checkerrors "nogap-encode"; then :; else
if [ ! "$KEEPWAVS" = "y" ] ; then
if [ ! "$KEEPWAVS" = "move" ] ; then
vorbis|ogg)
TEMPARG="PIPE_$OGGENCODERSYNTAX"
;;
+ opus)
+ TEMPARG="PIPE_$OPUSENCODERSYNTAX"
+ ;;
flac)
TEMPARG="PIPE_$FLACENCODERSYNTAX"
;;
TEMPARG="PIPE_$SPEEXENCODER"
;;
mpc)
- TEMPARG="PIPE_$MPPENCODER"
+ TEMPARG="PIPE_$MPCENCODER"
+ ;;
+ wv)
+ TEMPARG="PIPE_$WVCENCODERSYNTAX"
+ ;;
+ aac)
+ TEMPARG="PIPE_$AACENCODERSYNTAX"
;;
m4a)
TEMPARG="PIPE_$AACENCODERSYNTAX"
vorbis|ogg)
OUTPUT=$OGGOUTPUTCONTAINER
;;
+ opus)
+ OUTPUT=$OPUSOUTPUTCONTAINER
+ ;;
flac)
OUTPUT=$FLACOUTPUTCONTAINER
;;
;;
esac
;;
+ opus)
+ case "$2" in
+ %local*%)
+ case "$OPUSENCODERSYNTAX" in
+ opusenc)
+ # Tag the file at encode time, as it can't be done after encoding.
+ if [ "$DOTAG" = "y" ]; then
+ $RUN_COMMAND nice $EFFECTIVE_NICE $OPUSENCODER $OPUSENCODEROPTS --artist "$TRACKARTIST" --album "$DALBUM" --title "$TRACKNAME" \
+ --genre "$CDGENRE" --date "$CDYEAR" --comment TRACKNUMBER="$1" ${COMMENT:+--comment COMMENT="$COMMENT"} "$IN" "$OUT"
+ else
+ $RUN_COMMAND nice $EFFECTIVE_NICE $OPUSENCODER $OPUSENCODEROPTS "$IN" "$OUT"
+ fi
+ ;;
+ esac
+ ;;
+ *)
+ $RUN_COMMAND nice $DISTMP3NICE $DISTMP3 $DISTMP3OPTS "$2" "$IN" "$OUT" >/dev/null 2>&1
+ ;;
+ esac
+ ;;
flac)
case "$2" in
%local*%)
case "$COMMENT" in
*=*) ;;
*) COMMENT="COMMENT=$COMMENT" ;;
- esac
+ esac
fi
# Tag the file at encode time, as it can't be done after encoding.
if [ "$DOTAG" = "y" ]; then
$RUN_COMMAND nice $EFFECTIVE_NICE $SPEEXENCODER $SPEEXENCODEROPTS "$IN" "$OUT"
fi
;;
- mpc)
- # MPP/MP+(Musepack) format (.mpc) is done locally, with inline
- # tagging.
- # I tried compiling the mppenc from corecodecs.org and got some
- # errors, so I have not tried it myself.
- ## FIXME ## Needs some cleanup to determine if an empty tag sent
- ## FIXME ## to the encoder ends up empty.
- $RUN_COMMAND nice $EFFECTIVE_NICE $MPPENCODER $MPPENCODEROPTS --artist "$TRACKARTIST" --album "$DALBUM" --title "$TRACKNAME" --track "$1" --genre "$CDGENRE" --year "$CDYEAR" --comment "$COMMENT" "$IN" "$OUT"
+ mpc)
+ # Tag the file inline at encode time.
+ $RUN_COMMAND nice $EFFECTIVE_NICE $MPCENCODER $MPCENCODEROPTS --artist "$TRACKARTIST" --album "$DALBUM" --title "$TRACKNAME" \
+ --track "$1" --genre "$CDGENRE" --year "$CDYEAR" --comment "$COMMENT" "$IN" "$OUT"
;;
+ wv)
+ if [ "$DOTAG" = "y" ]; then
+ # wavpack tagging is done inline using Apev2 tags:
+ $RUN_COMMAND nice $EFFECTIVE_NICE $WVENCODER $WVENCODEROPTS -w Artist="$TRACKARTIST" -w Album="$DALBUM" -w Title="$TRACKNAME" \
+ -w Track="$1" -w Genre="$CDGENRE" -w Year="$CDYEAR" -w Comment="$COMMENT" "$IN" -o "$OUT"
+ else
+ $RUN_COMMAND nice $EFFECTIVE_NICE $WVENCODER $WVENCODEROPTS "$IN" -o "$OUT"
+ fi
+ ;;
+ aac)
+ # aac container is only used to catch faac encoded files where faac
+ # is compiled without mp4 support (with libmp4v2). Andrew.
+ $RUN_COMMAND nice $EFFECTIVE_NICE $AACENCODER $AACENCODEROPTS -o "$OUT" "$IN"
+ ;;
m4a)
- # Tag the file at encode time, as it can't be done after encoding.
- if [ "$DOTAG" = "y" ]; then
- $RUN_COMMAND nice $EFFECTIVE_NICE $AACENCODER $AACENCODEROPTS --artist "$TRACKARTIST" --album "$DALBUM" --title "$TRACKNAME" --track "$1" --genre "$CDGENRE" --year "$CDYEAR" --comment "$COMMENT" -o "$OUT" "$IN"
-
- else
- $RUN_COMMAND nice $ENCNICE $AACENCODER $AACENCODEROPTS -o "$OUT" "$IN"
- fi
+ case "$AACENCODERSYNTAX" in
+ faac)
+ if [ "$DOTAG" = "y" ]; then
+ $RUN_COMMAND nice $EFFECTIVE_NICE $AACENCODER $AACENCODEROPTS --artist "$TRACKARTIST" \
+ --album "$DALBUM" --title "$TRACKNAME" --track ${TRACKNUM:-$1} --year "$CDYEAR" \
+ --genre "$CDGENRE" --comment "$COMMENT" -o "$OUT" "$IN"
+ else
+ $RUN_COMMAND nice $EFFECTIVE_NICE $AACENCODER $AACENCODEROPTS -o "$OUT" "$IN"
+ fi
+ ;;
+ neroAacEnc)
+ $RUN_COMMAND nice $EFFECTIVE_NICE $AACENCODER $AACENCODEROPTS -if "$IN" -of "$OUT"
+ ;;
+ fdkaac)
+ if [ "$DOTAG" = "y" ]; then
+ $RUN_COMMAND nice $EFFECTIVE_NICE $AACENCODER $AACENCODEROPTS --artist "$TRACKARTIST" --album "$DALBUM" \
+ --title "$TRACKNAME" --track "$1" --genre "$CDGENRE" --date "$CDYEAR" --comment "$COMMENT" "$IN" -o "$OUT"
+ else
+ $RUN_COMMAND nice $EFFECTIVE_NICE $AACENCODER $AACENCODEROPTS "$IN" -o "$OUT"
+ fi
+ ;;
+ esac
;;
wav)
# In case of wav output we need nothing. Just keep the wavs.
+ # But we need the following to allow full logging and subsequent
+ # successful cleaning of $ABCDETEMPDIR. Andrew.
+ echo "encodetrack-$OUTPUT-$UTRACKNUM" >> "$ABCDETEMPDIR/status"
;;
esac
$RUN_COMMAND_PIPES
else
OUTPUTFILE="$(eval echo \""$ONETRACKOUTPUTFORMAT"\")"
fi
- else
+ else
if [ "$VARIOUSARTISTS" = "y" ]; then
OUTPUTFILE="$(eval echo \""$VAOUTPUTFORMAT"\")"
else
vorbis|ogg)
OUTPUT=$OGGOUTPUTCONTAINER
;;
+ opus)
+ OUTPUT=$OPUSOUTPUTCONTAINER
+ ;;
flac)
OUTPUT=$FLACOUTPUTCONTAINER
;;
vorbis|ogg)
OUTPUT=$OGGOUTPUTCONTAINER
;;
+ opus)
+ OUTPUT=$OPUSOUTPUTCONTAINER
+ ;;
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.
+ # We used to wipe it out if it existed. Now we request permission if interactive.
for LASTTRACK in $TRACKQUEUE; do :; done
ALBUMFILE="$(mungefilename "$DALBUM")"
ARTISTFILE="$(mungefilename "$DARTIST")"
LEADIN=88200
i=0
N=0
-
+
while read line ; do
set -- $line
case "$1" in
esac
;;
esac
-
+
done
-
+
TRACKS=$i
LEADOUT=$(( $LEADOUT + $LEADIN ))
LENGTH=$(( $LEADOUT/75 - $TRACK1/75 ))
DISCID=$(( ( $N % 255 ) * 2**24 | $LENGTH * 2**8 | $TRACKS ))
printf "%08x %i" $DISCID $TRACKS
-
+
j=1
while [ $j -le $TRACKS ] ; do
eval echo -n "\" \$TRACK$j\""
shift 2
echo REM DISCID $DISCID
- echo FILE \""$CUEWAVEFILE"\" WAVE
+ echo FILE \""$CUEWAVFILE"\" WAVE
if [ $1 -ne 150 ] && [ $MODE = "PREGAP" ] ; then
OFFSET=$1
echo cdparanoia-audio-tracks=$CDPARANOIAAUDIOTRACKS >> "$ABCDETEMPDIR/status"
fi
fi
-
+
# Create the discid file
echo "$TRACKINFO" > "$ABCDETEMPDIR/discid"
if checkstatus cddbmethod > /dev/null 2>&1 ; then :; else
do_localcddb ()
{
if checkstatus cddb-readcomplete && checkstatus cddb-choice >/dev/null; then :; else
-
+
CDDBLOCALSTATUS="notfound"
CDDBDISCID=$(echo $TRACKINFO | cut -d' ' -f1)
USELOCALRESP="y"
else
CDDBLOCALMATCH=none
fi
-
+
# If the user has selected to check a local CDDB repo, we proceed with it
case $CDDBLOCALMATCH in
multiple)
# List out disc title/author and contents
CDDBLOCALREAD="$ABCDETEMPDIR/cddblocalread.$X"
cat "$RESULT" > "${CDDBLOCALREAD}"
- {
+ {
echo -n "#$X: "
do_cddbparse "${CDDBLOCALREAD}"
echo ""
return 0
fi
- if [ "$CDROMID" = "" ]; then
- CDDA2WAVCDROM="$CDROM"
- else
+ if [ "$OSFLAVOUR" = "OSX" ] ; then
+ # Hei, we have to unmount the device before running anything like cdda2wav/icedax in OSX
+ diskutil unmount ${CDROM#/dev/}
+ # Also, in OSX the cdrom device for cdda2wav/icedax changes...
+ CDDA2WAVCDROM="IODVDServices"
+ elif [ "$OSFLAVOUR" = "FBSD" ] ; then
CDDA2WAVCDROM="$CDROMID"
+ else
+ if [ "$CDROMID" = "" ]; then
+ CDDA2WAVCDROM="$CDROM"
+ else
+ CDDA2WAVCDROM="$CDROMID"
+ fi
fi
# Do we have CD-Text on the disc (and can the drive read it?)
TRACKM1=$(($TRACK - 1))
TITLE="$(grep -E ^Track\ +$TRACK: "$ABCDETEMPDIR/cd-text" | tr -d \\r\\n | sed 's~^Track ..: .~~g;'"s~'$~~g")"
echo "$TRACK: $TITLE" >> "$ABCDETEMPDIR/cddbchoices"
- sed -i "s~^TTITLE${TRACKM1}=.*~TTITLE${TRACKM1}=${TITLE}~" "$ABCDETEMPDIR/cddbread.1"
+ sed "s~^TTITLE${TRACKM1}=.*~TTITLE${TRACKM1}=${TITLE}~" "$ABCDETEMPDIR/cddbread.1" > "$ABCDETEMPDIR/cddbread.new"
+ mv -f "$ABCDETEMPDIR/cddbread.new" "$ABCDETEMPDIR/cddbread.1"
done
- sed -i "s~^DTITLE=.*~DTITLE=${ATITLE}~" "$ABCDETEMPDIR/cddbread.1"
+ sed "s~^DTITLE=.*~DTITLE=${ATITLE}~" "$ABCDETEMPDIR/cddbread.1" > "$ABCDETEMPDIR/cddbread.new"
+ mv -f "$ABCDETEMPDIR/cddbread.new" "$ABCDETEMPDIR/cddbread.1"
echo >> "$ABCDETEMPDIR/cddbchoices"
echo "cdtext-readcomplete" >> "$ABCDETEMPDIR/status"
}
2??) # Server responded, everything seems OK
rc=0
;;
+ *) # unknown error
+ break
+ ;;
esac
;;
esac
{
CDDBDISCID=$(echo $TRACKINFO | cut -d' ' -f1)
CDDBLOCALFILE="${CDDBLOCALDIR}/${CDDBDISCID}"
-
+
# Perform CDDB query if it hasn't already been done
if checkstatus cddb-querycomplete; then :; else
if [ "$CDDBAVAIL" = "n" ]; then
echo cddb-read-1-complete >> "$ABCDETEMPDIR/status"
echo cddb-choice=1 >> "$ABCDETEMPDIR/status"
;;
- esac
+ esac
echo "cddb-readcomplete" >> "$ABCDETEMPDIR/status"
fi
}
# It's all going to fit in one page, cat it
cat "$ABCDETEMPDIR/cddbchoices" >&2
fi
-
+
CDDBCHOICENUM=""
# Setting the choice to an impossible integer to avoid errors in the numeric comparisons
CDCHOICENUM=-1
exit 1
fi
CDDBDATA="$ABCDETEMPDIR/cddbread.$(checkstatus cddb-choice)"
- echo -n "Edit selected CDDB data? [y/n] (" >&2
+ echo -n "Edit selected CDDB data " >&2
if [ "$INTERACTIVE" = "y" ]; then
if [ "$UNKNOWNDISK" = "y" ]; then
- echo -n "y): " >&2
+ echo -n "[Y/n]? " >&2
read EDITCDDB
[ "$EDITCDDB" != "n" ] && EDITCDDB=y
else
- echo -n "n): " >&2
+ echo -n "[y/N]? " >&2
read EDITCDDB
fi
else
- echo "n): n" >&2
+ echo "[y/N]? " >&2
EDITCDDB=n
fi
if [ "$EDITCDDB" = "y" ]; then
CDDBDATAMD5SUM=$($MD5SUM "$CDDBDATA" | cut -d " " -f 1);
-
+
# Use the debian sensible-editor wrapper to pick the editor that the
# user has requested via their $EDITOR environment variable
if [ -x "/usr/bin/sensible-editor" ]; then
# 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 | icedax) READTRACKNUMS="$FIRSTTRACK+$LASTTRACK" ;;
+ pird) READTRACKNUMS="$FIRSTTRACK..$LASTTRACK" ;;
*) echo "abcde error: $CDROMREADERSYNTAX does not support ONETRACK mode"
exit 1 ;;
esac
cdda2wav | icedax)
if [ "$OSFLAVOUR" = "OSX" ] ; then
# Hei, we have to unmount the device before running anything like cdda2wav/icedax in OSX
- diskutil unmount ${CDROM#/dev/} 0
+ diskutil unmount ${CDROM#/dev/}
# Also, in OSX the cdrom device for cdda2wav/icedax changes...
CDDA2WAVCDROM="IODVDServices"
elif [ "$OSFLAVOUR" = "FBSD" ] ; then
else
nice $READNICE $CDROMREADER -d "$CDROM" -v $UTRACKNUM "$FILEARG"
fi ;;
+ pird)
+ if [ "$REDIR" = "y" ]; then
+ nice $READNICE $CDROMREADER -j ${READTRACKNUMS:-$UTRACKNUM} "$CDROM" "$FILEARG"
+ else
+ nice $READNICE $CDROMREADER -j ${READTRACKNUMS:-$UTRACKNUM} "$CDROM" "$PIPERIPPER_pird" > "$FILEARG"
+ fi ;;
cddafs)
# Find the track's mounted path
REALTRACKNUM=$(expr $UTRACKNUM + 0)
MP3ENCODERSYNTAX=default
OGGENCODERSYNTAX=default
+OPUSENCODERSYNTAX=default
FLACENCODERSYNTAX=default
SPEEXENCODERSYNTAX=default
-MPPENCODERSYNTAX=default
+MPCENCODERSYNTAX=default
+WVENCODERSYNTAX=default
AACENCODERSYNTAX=default
NORMALIZERSYNTAX=default
CUEREADERSYNTAX=default
VAPLAYLISTDATAPREFIX=''
DOSPLAYLIST=n
COMMENT=''
-ID3TAGV=2
+ID3TAGV=id3v2.4
ENCNICE=10
READNICE=10
DISTMP3NICE=10
# ogg
VORBIZE=vorbize
OGGENC=oggenc
+#opus
+OPUSENC=opusenc
# flac
FLAC=flac
# speex
SPEEXENC=speexenc
# mpp (Musepack)
-MPPENC=mppenc
+MPCENC=mpcenc
+# wv (wavpack)
+WVENC=wavpack
# m4a
AACENC=faac
VORBISCOMMENT=vorbiscomment
METAFLAC=metaflac
AACTAG=faac
-ATOMICPARSLEY=AtomicParsley
+NEROAACTAG=neroAacTag
+FDKAAC=fdkaac
CDPARANOIA=cdparanoia
CDDA2WAV=icedax
DAGRAB=dagrab
CDDAFS=cp
+PIRD=pird
CDDISCID=cd-discid
CDDBTOOL=cddb-tool
MUSICBRAINZ=abcde-musicbrainz-tool
VORBIZEOPTS=
OGGENCOPTS=
VORBISGAINOPTS="--album"
+#opus
+OPUSENCOPTS=
# flac
-FLACOPTS=
+# The flac option is a workaround for an error where flac fails
+# to encode with error 'floating point exception'. This is flac
+# error in get_console_width(), corrected in flac 1.3.1
+FLACOPTS="--silent"
FLACGAINOPTS="--add-replay-gain"
# speex
SPEEXENCOPTS=
# mpc
-MPPENCOPTS=
+MPCENCOPTS=
+# wv
+WVENCOPTS=
# m4a
AACENCOPTS=
ID3OPTS=
-ID3V2OPTS=
+EYED3OPTS=""
CDPARANOIAOPTS=
CDDA2WAVOPTS=
DAGRABOPTS=
# List of actions to perform - by default, run to completion
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:toolame,mp3:lame,mp3:bladeenc,spx:speex,m4a:faac
+# This option is basically for Debian package dependencies:
+# List of preferred outputs - by default, run with whatever we have in the path
+DEFAULT_OUTPUT_BINARIES=vorbis:oggenc,flac:flac,mp3:toolame,mp3:lame,mp3:bladeenc,spx:speex,m4a:faac:opus
-# List of prefered cdromreaders - by default, run whichever we have in the path
-DEFAULT_CDROMREADERS="cdparanoia icedax cdda2wav"
+# List of preferred cdromreaders - by default, run whichever we have in the path
+DEFAULT_CDROMREADERS="cdparanoia icedax cdda2wav pird"
-# 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
+# Assume 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
# later
# We should have diskutil in OSX, but let's be sure...
NEEDDISKUTIL=y
CDROMREADERSYNTAX=cddafs
+ # We won't find the eject program in OSX, and doing checkexec will fail further below...
+ unset EJECT
elif [ X$(uname) = "XOpenBSD" ] ; then
HTTPGET=wget
MD5SUM=md5
fi
# If CDDBAVAIL is set to n, no CDDB read is done
-# If USEID3 is set to n, no ID3 tagging is done
CDDBAVAIL=y
-USEID3=y
-USEID3V2=y
# There we go..
# But before we get into business, let us chop off any GREP environmental
if [ "$CDROM" = "" ] ; then
if [ -e /dev/cdroms/cdrom0 ]; then
CDROM=/dev/cdroms/cdrom0
+ elif [ "$OSFLAVOUR" = "OSX" ] && [[ $(diskutil list) =~ CD_part.*(disk.)$'\n' ]]; then
+ CDROM=/dev/${BASH_REMATCH[1]}
elif [ -e /dev/cdrom ]; then
CDROM=/dev/cdrom
elif [ -e /dev/sr0 ]; then
CDROM=/dev/acd0c
elif [ -e /dev/disk1 ]; then
CDROM=/dev/disk1
- elif [ "$OSFLAVOUR" = "OSX" ] && [[ $(diskutil list) =~ CD_part.*(disk.)$'\n' ]]; then
- CDROM=/dev/${BASH_REMATCH[1]}
fi
fi
# We used to use EXTRAVERBOSE=y to turn on more debug output. Now
-# that's changed to a number to allow for more control. If
-# EXTRAVERBOSE=y, set it to 1 for backwards compatibility.
-if [ "$EXTRAVERBOSE" = "y" ]; then
- EXTRAVERBOSE=1
-fi
-if [ "$EXTRAVERBOSE" = "n" ]; then
- EXTRAVERBOSE=0
-fi
+# that's changed to a number to allow for more control. Deal with
+# EXTRAVERBOSE=y/n, set it to 1/0 for backwards compatibility.
+case "$EXTRAVERBOSE" in
+ *y*|*Y*)
+ EXTRAVERBOSE=1
+ ;;
+ *n*|*N*)
+ EXTRAVERBOSE=0
+ ;;
+esac
# Parse command line options
-#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:pPq:r:s:S:t:T:UvVxX:w:W:z opt ; do
+while getopts 1a:bc:C:d:Defghj:klLmMnNo:pPr:s:S:t:T:UvVxX:w:W:z opt ; do
case "$opt" in
1) ONETRACK=y ;;
a) ACTIONS="$OPTARG" ;;
A) EXPACTIONS="$OPTARG" ;;
b) BATCHNORM=y ;;
- B) NOBATCHREPLAYGAIN=y ;;
c) if [ -e "$OPTARG" ] ; then . "$OPTARG" ; else log error "config file \"$OPTARG\" cannot be found." ; exit 1 ; fi ;;
C) DISCID="$( echo ${OPTARG#abcde.} | tr -d /)" ;;
d) CDROM="$OPTARG" ;;
o) OUTPUTTYPE="$OPTARG" ;;
p) PADTRACKS=y ;;
P) USEPIPES=y ;;
- q) QUALITYLEVEL="$OPTARG" ;;
r) REMOTEHOSTS="$OPTARG" ;;
R) CDDBLOCALRECURSIVE=y ;;
s) SHOWCDDBFIELDS="$OPTARG" ;;
X) CUE2DISCID="$OPTARG" ;;
w) COMMENT="$OPTARG" ;;
W) if echo $OPTARG | grep "[[:digit:]]" > /dev/null 2>&1 ; then
- STARTTRACKNUMBER="${OPTARG}01"
+ STARTTRACKNUMBER="${OPTARG}$(printf %02d ${STARTTRACKNUMBER:-01})"
STARTTRACKNUMBERTAG="y"
COMMENT="CD${OPTARG}"
DISCNUMBER="${OPTARG}"
flac) ;;
cdparanoia) ;;
cdda2wav | icedax) ;;
+ pird) ;;
*) log error "$CDROMREADERSYNTAX does not support ONETRACK mode"
exit 1 ;;
esac
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"
- log error "Use \"cdrecord -scanbus\" to obtain a adecuate ID an set CDROMID accordingly"
+ log error "Use \"cdrecord -scanbus\" to obtain an adequate ID and set CDROMID accordingly"
exit 1
fi
fi
CDROMREADER="$DAGRAB"
CDROMREADEROPTS="$DAGRABOPTS"
;;
+ pird)
+ CDROMREADER="$PIRD"
+ CDROMREADEROPTS="$PIRDOPTS"
+ ;;
cddafs)
CDROMREADER="$CDDAFS"
CDROMREADEROPTS="$CDDAFSOPTS"
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 \ \|| tr , \ | tr \| \ )"; do
+case "$OUTPUTTYPE" in *:*)
+ for OUTPUT in $(echo "$OUTPUTTYPE" | tr \ \|| tr , \ ); do
+ OUTPUT="$(echo "$OUTPUT" | tr \| \ )"
case "$OUTPUT" in
vorbis:*|ogg:*) OGGENCODEROPTSCLI="$( echo $OUTPUT | cut -d: -f2- )" ;;
+ opus:*) OPUSENCODEROPTSCLI="$( echo $OUTPUT | cut -d: -f2- )" ;;
mp3:*) MP3ENCODEROPTSCLI="$( echo $OUTPUT | cut -d: -f2- )" ;;
flac:*) FLACENCODEROPTSCLI="$( echo $OUTPUT | cut -d: -f2- )" ;;
spx:*) SPEEXENCODEROPTSCLI="$( echo $OUTPUT | cut -d: -f2- )" ;;
- mpc:*) MPPENCODEROPTSCLI="$( echo $OUTPUT | cut -d: -f2- )" ;;
- m4a:*) AACENCODEROPTSCLI="$( echo $OUTPUT | cut -d: -f2- )" ;;
+ mpc:*) MPCENCODEROPTSCLI="$( echo $OUTPUT | cut -d: -f2- )" ;;
+ wv:*) WVENCODEROPTSCLI="$( echo $OUTPUT | cut -d: -f2- )" ;;
+ m4a:*|aac:*) AACENCODEROPTSCLI="$( echo $OUTPUT | cut -d: -f2- )" ;;
esac
done
for OUTPUT in "$(echo "$OUTPUTTYPE" | tr , \ )"; do
TEMPOUTPUTTYPE="${TEMPOUTPUTTYPE:+$TEMPOUTPUTTYPE,}$TEMPOUTPUT"
done
OUTPUTTYPE="$TEMPOUTPUTTYPE"
-fi
+ ;;
+esac
# If nothing has been specified, use oggenc for oggs and lame for mp3s and flac
-# for flacs and speexenc for speex and mppenc for mpps and faac for m4as
+# for flacs and speexenc for speex and mpcenc for mpcs and faac for m4as and
+# wavpack for wvs...
# Getting ready for multiple output changes
for OUTPUT in $(echo $OUTPUTTYPE | tr , \ )
[ "$DOREPLAYGAIN" = "y" ] && NEEDVORBISGAIN=y
OGGOUTPUTCONTAINER=ogg
;;
+ opus)
+ [ "$OPUSENCODERSYNTAX" = "default" ] && OPUSENCODERSYNTAX=opusenc
+ OPUSOUTPUTCONTAINER=opus
+ ;;
mp3)
[ "$MP3ENCODERSYNTAX" = "default" ] && MP3ENCODERSYNTAX=lame
[ "$DOTAG" = "y" ] && NEEDTAGGER=y
# [ "$DOREPLAYGAIN" = "y" ] &&
;;
mpc)
- [ "$MPPENCODERSYNTAX" = "default" ] && MPPENCODERSYNTAX=mppenc
+ [ "$MPCENCODERSYNTAX" = "default" ] && MPCENCODERSYNTAX=mpcenc
[ "$DOREPLAYGAIN" = "y" ] && NEEDMPPGAIN=y
;;
+ wv)
+ [ "$WVENCODERSYNTAX" = "default" ] && WVENCODERSYNTAX=wavpack
+ [ "$DOTAG" = "y" ]
+ ;;
+ aac)
+ [ "$AACENCODERSYNTAX" = "default" ] && AACENCODERSYNTAX=faac
+ [ "$DOTAG" = "n" ]
+ # Neither Faac nor AtomicParsley can tag the .aac files which are used for faac
+ # compiled without libmp4v2... Andrew.
+ ;;
m4a)
[ "$AACENCODERSYNTAX" = "default" ] && AACENCODERSYNTAX=faac
- [ "$DOTAG" = "y" ] && CHECKATOMICPARSLEY=y
+ [ "$DOTAG" = "y" ] && CHECKFAACBUILD=y
;;
wav)
if [ "$KEEPWAVS" = "y" ]; then
OGGENCODER="$OGGENC"
;;
esac
+case "$OPUSENCODERSYNTAX" in
+ opusenc)
+ OPUSENCODEROPTS="${OPUSENCODEROPTSCLI:-$OPUSENCOPTS}"
+ OPUSENCODER="$OPUSENC"
+ ;;
+esac
case "$FLACENCODERSYNTAX" in
flac)
FLACENCODEROPTS="${FLACENCODEROPTSCLI:-$FLACOPTS}"
- FLACENCODER="$FLAC"
+ FLACENCODER="$FLAC"
if [ "$DOREPLAYGAIN" = "y" ]; then
FLACENCODEROPTS="${FLACENCODEROPTS} --replay-gain"
fi
SPEEXENCODER="$SPEEXENC"
;;
esac
-case "$MPPENCODERSYNTAX" in
- mppenc)
- MPPENCODEROPTS="${MPPENCODEROPTSCLI:-$MPPENCOPTS}"
- MPPENCODER="$MPPENC"
+case "$MPCENCODERSYNTAX" in
+ mpcenc)
+ MPCENCODEROPTS="${MPCENCODEROPTSCLI:-$MPCENCOPTS}"
+ MPCENCODER="$MPCENC"
+ ;;
+esac
+case "$WVENCODERSYNTAX" in
+ wavpack)
+ WVCENCODEROPTS="${WVENCODEROPTSCLI:-$WVENCOPTS}"
+ WVENCODER="$WVENC"
;;
esac
case "$AACENCODERSYNTAX" in
- faac)
+ faac|neroAacEnc|fdkaac)
AACENCODEROPTS="${AACENCODEROPTSCLI:-$AACENCOPTS}"
AACENCODER="$AACENC"
;;
esac
# and which tagger
-if [ "$ID3TAGV" = "1" ]; then
- TAGGER="$ID3"
- TAGGEROPTS="$ID3OPTS"
-else
- TAGGER="$ID3V2"
- TAGGEROPTS="$ID3V2OPTS"
-fi
+case "$ID3TAGV" in
+ id3v1)
+ TAGGER="$ID3"
+ ID3SYNTAX=id3
+ TAGGEROPTS="$ID3OPTS"
+ ;;
+ id3v2.3)
+ TAGGER="$ID3V2"
+ ID3SYNTAX=id3v2
+ TAGGEROPTS="$ID3V2OPTS"
+ ;;
+ id3v2.4)
+ TAGGER="$EYED3"
+ # Note that eyeD3 is set to tag in utf-16 (below). This causes
+ # trouble with CDDBPROTO=5 (which we test here) but also
+ # with cached cddb files in latin1 (which we cannot test).
+ if [ "$CDDBPROTO" -lt 6 ]; then
+ log warning "You cannot have id3v2.4 tags encoded in latin1. Setting CDDBPROTO to 6 for now."
+ CDDBPROTO=6
+ fi
+ # eyeD3 version 0.7 changed syntax
+ if $EYED3 --help 2>&1 | grep -q -- --set-encoding ; then
+ # only if it offers the --set-encoding, assume <= 0.6.x
+ ID3SYNTAX=eyed3_06
+ TAGGEROPTS="--set-encoding utf16-LE $EYED3OPTS"
+ else
+ # anything wrong, any failure, assume >= 0.7
+ ID3SYNTAX=eyed3
+ TAGGEROPTS="--encoding utf16 $EYED3OPTS"
+ fi
+ ;;
+ *)
+ log error "Error: ID3TAGV must be either \"id3v1\", \"id3v2.3\" or \"id3v2.4\""
+ exit 1
+ ;;
+esac
# NOGAP is specific to lame. Other encoders fail ...
if [ "$NOGAP" = "y" ] && [ ! "$MP3ENCODER" = "lame" ]; then
if [ X"$CDSPEEDVALUE" != "X" ] && [ "$DOREAD" = "y" ]; then
case "$CDROMREADERSYNTAX" in
cdparanoia|debug) CDROMREADEROPTS="$CDPARANOIAOPTS -S $CDSPEEDVALUE" ;;
+ pird) CDROMREADEROPTS="$PIRDOPTS -s $CDSPEEDVALUE" ;;
### FIXME ### translate "cue2discid" from python to bash
flac) NEEDMETAFLAC=y ; NEEDCUE2DISCID=y ; CDSPEEDVALUE="" ;;
*) NEEDCDSPEED=y ;;
PIPERIPPER_cdparanoia="-"
PIPERIPPER_debug="-"
PIPERIPPER_flac="-c "
+PIPERIPPER_pird="-"
# Encoders with USEPIPE support
# FIXME # Include here all the encoders we can figure out support pipes
PIPE_lame="-"
PIPE_bladeenc="-"
PIPE_oggenc="-"
+PIPE_opusenc="-"
PIPE_flac="-"
# Figure out if we can use pipes with the ripper/encoder combination
PIPEENCODERSVARCHECK="PIPE_$MP3ENCODERSYNTAX" ;;
vorbis|ogg)
PIPEENCODERSVARCHECK="PIPE_$OGGENCODERSYNTAX" ;;
+ opus)
+ PIPEENCODERSVARCHECK="PIPE_$OPUSENCODERSYNTAX" ;;
flac)
PIPEENCODERSVARCHECK="PIPE_$FLACENCODERSYNTAX" ;;
spx)
PIPEENCODERSVARCHECK="PIPE_$SPEEXENCODER" ;;
mpc)
- PIPEENCODERSVARCHECK="PIPE_$MPPENCODER" ;;
+ PIPEENCODERSVARCHECK="PIPE_$MPCENCODER" ;;
+ wv)
+ PIPEENCODERSVARCHECK="PIPE_$WVENCODER" ;;
esac
decho "PIPERIPPERSVARCHECK: $( eval echo "\$$PIPERIPPERSVARCHECK" )"
if [ "$( eval echo "\$$PIPERIPPERSVARCHECK" )" = "$" ] || \
# Make sure a buncha things exist
for X in $CDROMREADER $CDDISCID ${NEEDTAGGER+$TAGGER} $MP3ENCODER \
- $OGGENCODER $FLACENCODER $SPEEXENCODER $MPPENCODER \
- $AACENCODER $CDDBTOOL \
- ${NEEDATOMICPARSLEY+$ATOMICPARSLEY} \
+ $OGGENCODER $OPUSENCODER $FLACENCODER $SPEEXENCODER $MPCENCODER \
+ $AACENCODER $WVENCODER $CDDBTOOL \
${NEEDHTTPGET+$HTTPGET} ${NEEDDISTMP3+$DISTMP3} \
${NEEDCOMMENTER+$VORBISCOMMENT} ${NEEDMETAFLAC+$METAFLAC} \
${NEEDNORMALIZER+$NORMALIZER} ${NEEDEJECT+$EJECT} \
checkexec "$X"
done
-if [ "$CHECKATOMICPARSLEY" = "y" ]; then
- if ! new_checkexec "$ATOMICPARSLEY"; then
- echo "WARNING: $ATOMICPARSLEY Not Found Not Post-Tagging!"
- DOTAG='n'
- else
- echo "Using $ATOMICPARSLEY To Tag AAC Tracks."
- fi
+# Under Debian and Ubuntu faac is compiled without libmp4v2 which means no support
+# for the mp4 container and no tagging capability. (AtomicParsley also cannot tag
+# these files). The resulting files are actually ADTS streams which belong in an
+# aac container and with some version sniffing this is all cleaned up below. If
+# faac is compiled with libmp4v2 inline tagging occurs with faac. Andrew.
+
+if [ "$CHECKFAACBUILD" = "y" ] && [ "$AACENCODERSYNTAX" = "faac" ] ; then
+ if faac --help 2>&1 | grep -q -F 'MP4 support unavailable.'; then
+ echo "WARNING: Your copy of Faac does not have mp4 support"
+ echo "WARNING: Encoding untagged files to aac..."
+ OUTPUTTYPE=aac
+ else
+ echo "Using Faac to Tag AAC Tracks..."
+ fi
fi
# And last but not least, check if we can diff between files. We do not abort,
# - set the CD speed value with eject -x
vecho -n "Executing customizable pre-read function... "
- pre_read # Execute the user-defined pre-read funtion. Close the CD with it.
+ pre_read # Execute the user-defined pre-read function. Close the CD with it.
vecho "done."
fi
esac
fi
CHOICE=$(checkstatus cddb-choice)
- if [ $CHOICE = 0 ] ; then
+ if [ "$CHOICE" = 0 ] ; then
# We don't have any information at all; try to fall back
# to CD-Text for basic information
vecho "No CDDB information found, trying cdtext from the CD"
if [ X"$CDSPEEDVALUE" != "X" ]; then
case "$CDROMREADERSYNTAX" in
cdparanoia|debug) ;;
+ pird) ;;
flac) ;;
*) do_cdspeed ;;
esac
echo NEXTTRACK
fi
-# Execute the user-defined post_read funtion before ejecting CD
+# Execute the user-defined post_read function before ejecting CD
post_read
# We are now finished with the cdrom - it can be safely ejected. Note that
# abcde will not have completed yet.
-if [ "$EJECTCD" = "y" ] && [ -x $(which $EJECT) ]; then
+if [ "$EJECTCD" = "y" ]; then
# We check if the disk we are processing is actually the disk inside the
# CD tray. If not, we do not eject the CD, since it might be so that the
# user ejected it manually.
$eject $EJECTOPTS $cd
elif [ X"$(uname)" = X"Darwin" ] ; then
diskutil eject ${CDROM#/dev/} 0
- else
+ elif [ -x $(which $EJECT) ]; then
$EJECT $EJECTOPTS "$CDROM"
fi
#fi