Monkey's Audio (ape) encoding added
authorAndrew Strong <andrew.david.strong@gmail.com>
Fri, 20 Mar 2015 02:46:33 +0000 (13:46 +1100)
committerAndrew Strong <andrew.david.strong@gmail.com>
Fri, 20 Mar 2015 02:46:33 +0000 (13:46 +1100)
Encoding to Monkey's Audio (ape) format now supported using
Monkey's Audio Console Front End (mac). Tagging uses APEv2
tags from Robert Muth's apetag application.

abcde
abcde.1
abcde.conf
changelog

diff --git a/abcde b/abcde
index 1653eea..3474f85 100755 (executable)
--- a/abcde
+++ b/abcde
@@ -48,7 +48,7 @@ echo "-m     Modify playlist to include CRLF endings, to comply with some player
 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,opus,wv). Defaults to vorbis"
+echo "       Output file type(s) (vorbis,mp3,flac,spx,mpc,wav,m4a,opus,wv,ape). 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 <host1[,host2]...>"
@@ -920,7 +920,14 @@ do_tag ()
                opus)
                        run_command tagtrack-$OUTPUT-$1 true
                        ;;
-
+        ape)
+          case "$APENCODER" in
+           mac) # For mac use the aged apetag: http://www.muth.org/Robert/Apetag/ ... FIXME: use a more modern tagger when/if one appears.   Andrew.
+            run_command tagtrack-$OUTPUT-$1 nice $ENCNICE "$APETAG" -i "$ABCDETEMPDIR/track$1.ape" -m overwrite -p artist="$TRACKARTIST" \
+            -p album="$DALBUM" -p title="$TRACKNAME" -p track=${TRACKNUM:-$1} -p year="$CDYEAR" -p genre="$CDGENRE" -p comment="$COMMENT"
+           ;;
+           esac
+          ;;
                flac)
                        (
                        echo ARTIST="$TRACKARTIST"
@@ -1049,6 +1056,9 @@ do_encode ()
                        opus)
                                TEMPARG="PIPE_$OPUSENCODERSYNTAX"
                                ;;
+                       ape)
+                               TEMPARG="PIPE_$APENCODERSYNTAX"
+                               ;;
                        flac)
                                TEMPARG="PIPE_$FLACENCODERSYNTAX"
                                ;;
@@ -1100,6 +1110,9 @@ do_encode ()
                                opus)
                                        OUTPUT=$OPUSOUTPUTCONTAINER
                                        ;;
+                               ape)
+                                       OUTPUT=$APEOUTPUTCONTAINER
+                                       ;;
                                flac)
                                        OUTPUT=$FLACOUTPUTCONTAINER
                                        ;;
@@ -1175,6 +1188,13 @@ do_encode ()
                                        ;;
                                esac
                                ;;
+                       ape)
+                         case "$APENCODERSYNTAX" in
+                          mac)
+                          $RUN_COMMAND nice $EFFECTIVE_NICE $APENCODER "$IN" "$OUT" $APENCODEROPTS
+                          ;;
+                         esac
+                       ;;
                        flac)
                                case "$2" in
                                %local*%)
@@ -1488,6 +1508,9 @@ do_move ()
                                opus)
                                        OUTPUT=$OPUSOUTPUTCONTAINER
                                        ;;
+                               ape)
+                                       OUTPUT=$APEOUTPUTCONTAINER
+                                       ;;
                                flac)
                                        OUTPUT=$FLACOUTPUTCONTAINER
                                        ;;
@@ -1572,6 +1595,9 @@ do_playlist ()
                        opus)
                                OUTPUT=$OPUSOUTPUTCONTAINER
                                ;;
+                       ape)
+                               OUTPUT=$APEOUTPUTCONTAINER
+                               ;;
                        flac)
                                OUTPUT=$FLACOUTPUTCONTAINER
                                ;;
@@ -3304,6 +3330,8 @@ VORBIZE=vorbize
 OGGENC=oggenc
 #opus
 OPUSENC=opusenc
+# ape
+APENC=mac
 # flac
 FLAC=flac
 # speex
@@ -3323,6 +3351,7 @@ METAFLAC=metaflac
 AACTAG=faac
 NEROAACTAG=neroAacTag
 FDKAAC=fdkaac
+APETAG=apetag
 
 CDPARANOIA=cdparanoia
 CDDA2WAV=icedax
@@ -3361,6 +3390,9 @@ OGGENCOPTS=
 VORBISGAINOPTS="--album"
 #opus
 OPUSENCOPTS=
+# ape
+# mac has no defaults and will choke without one so we place one... Andrew
+APENCOPTS='-c3000'
 # flac
 # The flac option is a workaround for an error where flac fails
 # to encode with error 'floating point exception'. This is flac 
@@ -3849,6 +3881,7 @@ case "$OUTPUTTYPE" in *:*)
                case "$OUTPUT" in
                        vorbis:*|ogg:*) OGGENCODEROPTSCLI="$( echo $OUTPUT | cut -d: -f2- )" ;;
                        opus:*) OPUSENCODEROPTSCLI="$( echo $OUTPUT | cut -d: -f2- )" ;;
+                       ape:*)  APENCODEROPTSCLI="$( 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- )" ;;
@@ -3883,6 +3916,10 @@ do
                        [ "$OPUSENCODERSYNTAX" = "default" ] && OPUSENCODERSYNTAX=opusenc
                        OPUSOUTPUTCONTAINER=opus
                        ;;
+               ape)
+                       [ "$APENCODERSYNTAX" = "default" ] && APENCODERSYNTAX=mac
+                       APEOUTPUTCONTAINER=ape
+                       ;;
                mp3)
                        [ "$MP3ENCODERSYNTAX" = "default" ] && MP3ENCODERSYNTAX=lame
                        [ "$DOTAG" = "y" ] && NEEDTAGGER=y
@@ -3975,6 +4012,12 @@ case "$OPUSENCODERSYNTAX" in
                OPUSENCODER="$OPUSENC"
                ;;
 esac
+case "$APENCODERSYNTAX" in
+       mac)
+               APENCODEROPTS="${APENCODEROPTSCLI:-$APENCOPTS}"
+               APENCODER="$APENC"
+               ;;
+esac
 case "$FLACENCODERSYNTAX" in
        flac)
                FLACENCODEROPTS="${FLACENCODEROPTSCLI:-$FLACOPTS}"
@@ -4157,6 +4200,8 @@ if [ "$USEPIPES" = "y" ]; then
                        PIPEENCODERSVARCHECK="PIPE_$OGGENCODERSYNTAX" ;;
                opus)
                        PIPEENCODERSVARCHECK="PIPE_$OPUSENCODERSYNTAX" ;;
+               ape)
+                       PIPEENCODERSVARCHECK="PIPE_$APENCODERSYNTAX" ;;
                flac)
                        PIPEENCODERSVARCHECK="PIPE_$FLACENCODERSYNTAX" ;;
                spx)
@@ -4187,7 +4232,7 @@ fi
 # Make sure a buncha things exist
 for X in $CDROMREADER $CDDISCID ${NEEDTAGGER+$TAGGER} $MP3ENCODER \
        $OGGENCODER $OPUSENCODER $FLACENCODER $SPEEXENCODER $MPCENCODER \
-       $AACENCODER $WVENCODER $CDDBTOOL \
+       $AACENCODER $WVENCODER $CDDBTOOL $APENCODER $APETAG \
        ${NEEDHTTPGET+$HTTPGET} ${NEEDDISTMP3+$DISTMP3} \
        ${NEEDCOMMENTER+$VORBISCOMMENT} ${NEEDMETAFLAC+$METAFLAC} \
        ${NEEDNORMALIZER+$NORMALIZER} ${NEEDEJECT+$EJECT} \
diff --git a/abcde.1 b/abcde.1
index c2f2989..351b604 100644 (file)
--- a/abcde.1
+++ b/abcde.1
@@ -1,7 +1,7 @@
 .TH abcde 1
 .SH NAME
 abcde \- Grab an entire CD and compress it to Ogg/Vorbis, MP3, FLAC, Ogg/Speex, AAC, 
-WavPack and/or MPP/MP+(Musepack) format.
+WavPack, Monkey's Audio (ape) and/or MPP/MP+(Musepack) format.
 .SH SYNOPSIS
 .B abcde
 .I [options] [tracks]
@@ -11,8 +11,8 @@ tagging or commenting it, is very involved.
 .BR abcde
 is designed to automate this. It will take an entire CD and convert it into
 a compressed audio format - Ogg/Vorbis, MPEG Audio Layer III, Free Lossless
-Audio Codec (FLAC), Ogg/Speex, MPP/MP+(Musepack), M4A (AAC) wv (WavPack) 
-or Opus format(s).
+Audio Codec (FLAC), Ogg/Speex, Monkey's Audio (ape), MPP/MP+(Musepack),
+M4A (AAC) wv (WavPack) or Opus format(s).
 With one command, it will:
 .TP
 .B *
@@ -27,8 +27,8 @@ Grab an audio track (or all the audio CD tracks) from your CD
 Normalize the volume of the individual file (or the album as a single unit)
 .TP
 .B *
-Compress to Ogg/Vorbis, MP3, FLAC, Ogg/Speex, MPP/MP+(Musepack), M4A, wv (WavPack) 
-and/or Opus format(s), all in one CD read
+Compress to Ogg/Vorbis, MP3, FLAC, Ogg/Speex, MPP/MP+(Musepack), M4A, wv (WavPack), 
+Monkey's Audio (ape) and/or Opus format(s), all in one CD read
 .TP
 .B *
 Comment or ID3/ID3v2 tag
@@ -137,10 +137,10 @@ Non interactive mode. Do not ask anything from the user. Just go ahead.
 .TP
 .B \-o [filetype][:filetypeoptions]
 Select output type. Can be "vorbis" (or "ogg"), "mp3", "flac", "spx", "mpc",
-"m4a", "wav", "wv" or "opus".  Specify a comma-delimited list of output types to obtain
-all specified types.  See the OUTPUTTYPE configuration variable. One can pass
-options to the encoder for a specific filetype on the command line separating
-them with a colon. The options must be escaped with double-quotes.
+"m4a", "wav", "wv", "ape" or "opus".  Specify a comma-delimited list of output 
+types to obtain all specified types.  See the OUTPUTTYPE configuration variable. 
+One can pass options to the encoder for a specific filetype on the command line 
+separating them with a colon. The options must be escaped with double-quotes.
 .TP
 .B \-p
 Pads track numbers with 0\'s.
@@ -328,6 +328,10 @@ as \'default\'.
 Specifies the style of encoder to use for the Opus encoder. At this point only
 \'opusenc\' is available for Opus encoding.
 .TP
+.B APENCODERSYNTAX
+Specifies the style of encoder to use for the Monkey's Audio (ape) encoder. 
+At this point only \'mac\' is available for Monkey's Audio encoding.
+.TP
 .B NORMALIZERSYNTAX
 Specifies the style of normalizer to use.  Valid options are \'default\'
 and \'normalize'\ (and both run \'normalize-audio\'), since we only support it,
@@ -364,16 +368,16 @@ with \fBdistmp3\fR (DISTMP3NICE).
 .B PATHNAMES
 The following configuration file options specify the pathnames of their
 respective utilities: LAME, TOOLAME, GOGO, BLADEENC, L3ENC, XINGMP3ENC, MP3ENC,
-VORBIZE, OGGENC, FLAC, SPEEXENC, MPCENC, AACENC, WVENC, OPUSENC, ID3, EYED3, METAFLAC,
-CDPARANOIA, CDDA2WAV, PIRD, CDDAFS, CDDISCID, CDDBTOOL, EJECT, MD5SUM, DISTMP3,
-VORBISCOMMENT, NORMALIZE, CDSPEED, MP3GAIN, VORBISGAIN, MPPGAIN, MKCUE, MKTOC,
-CUE2DISCID (see option "\-X"), DIFF and HTTPGET.
+VORBIZE, OGGENC, FLAC, SPEEXENC, MPCENC, AACENC, APENC, APETAG, WVENC, OPUSENC, 
+ID3, EYED3, METAFLAC, CDPARANOIA, CDDA2WAV, PIRD, CDDAFS, CDDISCID, CDDBTOOL, 
+EJECT, MD5SUM, DISTMP3, VORBISCOMMENT, NORMALIZE, CDSPEED, MP3GAIN, VORBISGAIN, 
+MPPGAIN, MKCUE, MKTOC, CUE2DISCID (see option "\-X"), DIFF and HTTPGET.
 .TP
 .B COMMAND-LINE OPTIONS
 If you wish to specify command-line options to any of the programs \fBabcde\fR uses,
 set the following configuration file options: LAMEOPTS, TOOLAMEOPTS, GOGOOPTS,
 BLADEENCOPTS, L3ENCOPTS, XINGMP3ENCOPTS, MP3ENCOPTS, VORBIZEOPTS, WVENCOPTS, OGGENCOPTS,
-FLACOPTS, SPEEXENCOPTS, MPCENCOPTS, AACENCOPTS, OPUSENCOPTS, ID3OPTS, EYED3OPTS,
+FLACOPTS, SPEEXENCOPTS, MPCENCOPTS, AACENCOPTS, OPUSENCOPTS, APENCOPTS, ID3OPTS, EYED3OPTS,
 MP3GAINOPTS, CDPARANOIAOPTS, CDDA2WAVOPTS, PIRDOPTS, CDDAFSOPTS, CDDBTOOLOPTS,
 EJECTOPTS, DISTMP3OPTS, NORMALIZEOPTS, CDSPEEDOPTS, MKCUEOPTS, VORBISCOMMMENTOPTS,
 METAFLACOPTS, DIFFOPTS, FLACGAINOPTS, VORBISGAINOPTS and HTTPGETOPTS.
@@ -408,22 +412,23 @@ Specifies the encoding format to output, as well as the default extension and
 encoder. Defaults to "vorbis". Valid settings are "vorbis" (or "ogg")
 (Ogg/Vorbis), "mp3" (MPEG-1 Audio Layer III), "flac" (Free Lossless Audio
 Codec), "spx" (Ogg/Speex), "mpc" (MPP/MP+ (Musepack)), "m4a" (AAC)),
-"wv" (WavPack", "wav" (Microsoft Waveform) or "opus" (Opus Interactive Audio Codec). Values
-like "vorbis,mp3" encode the tracks in both Ogg/Vorbis and MP3 formats. For example
+"wv" (WavPack", "wav" (Microsoft Waveform), "ape" (Monkey's Audio) 
+or "opus" (Opus Interactive Audio Codec). Values like "vorbis,mp3" 
+encode the tracks in both Ogg/Vorbis and MP3 formats. For example
 .br
 OUTPUTTYPE=vorbis,flac
 .br
 For each value in OUTPUTTYPE, \fBabcde\fR expands a different process for encoding,
 tagging and moving, so you can use the format placeholder, OUTPUT, to create
 different subdirectories to hold the different types. The variable OUTPUT will
-be 'vorbis', 'mp3', 'flac', 'spx', 'mpc', 'm4a', 'wv' and/or 'wav', depending on the
-OUTPUTTYPE you define. For example
+be 'vorbis', 'mp3', 'flac', 'spx', 'mpc', 'm4a', 'wv', 'ape' and/or 'wav', depending 
+on the OUTPUTTYPE you define. For example
 .br
 OUTPUTFORMAT='${OUTPUT}/${ARTISTFILE}/${ALBUMFILE}/${TRACKNUM}._${TRACKFILE}'
 .TP
 .B OUTPUTFORMAT
 Specifies the format for completed Ogg/Vorbis, MP3, FLAC, Ogg/Speex, MPP/MP+
-(Musepack) or M4A filenames. Variables are included using standard shell
+(Musepack), Monkey's Audio (ape) or M4A filenames. Variables are included using standard shell
 syntax. Allowed variables are GENRE, ALBUMFILE, ARTISTFILE, TRACKFILE,
 TRACKNUM, and YEAR. Default is \'${ARTISTFILE}-${ALBUMFILE}/${TRACKNUM}-${TRACKFILE}\'.
 Make sure to use single quotes around this variable. TRACKNUM is automatically
@@ -558,9 +563,9 @@ Will extract the files contained in singletrack using the embedded cuesheet.
 \fBabcde\fR requires the following backend tools to work:
 .TP
 .B *
-An Ogg/Vorbis, MP3, FLAC, Ogg/Speex, MPP/MP+(Musepack), M4A encoder or Opus encoder 
-(oggenc, vorbize, lame, gogo, bladeenc, l3enc, mp3enc, flac, speexenc, mpcenc, faac, 
-neroAacEnc, fdkaac, wavpack, opusenc).
+An Ogg/Vorbis, MP3, FLAC, Ogg/Speex, MPP/MP+(Musepack), M4A encoder, 
+Monkey's Audio (ape) encoder or Opus encoder (oggenc, vorbize, lame, gogo, bladeenc, 
+l3enc, mp3enc, flac, speexenc, mpcenc, faac, neroAacEnc, fdkaac, wavpack, mac, opusenc).
 .TP
 .B *
 An audio CD reading utility (cdparanoia, icedax, cdda2wav, pird,
@@ -580,6 +585,9 @@ information about the CD.
 (for MP3s) id3 or eyeD3, id3 v1 and v2 tagging programs.
 .TP
 .B *
+For Monkey's Audio (ape): Robert Muth's 'apetag' tagging program.
+.TP
+.B *
 (optional) distmp3, a client/server for distributed mp3 encoding.
 .TP
 .B *
index 0156748..66c6757 100644 (file)
@@ -64,6 +64,7 @@
 # wavpack - encoder for WVENCODER
 # faac, neroAacEnc, fdkaac - for AACENCODER
 # opusenc - for OPUSENCODER
+# mac - for APENCODER
 # default is a valid option for oggenc, lame, flac, speexenc, mpcenc, wavpack, faac and opus.
 # Currently this affects the default location of the binary, the variable
 # to pick encoder command-line options from, and where the options are
@@ -76,6 +77,7 @@
 #WVENCODERSYNTAX=default
 #AACENCODERSYNTAX=default
 #OPUSENCODERSYNTAX=default
+#APENCODERSYNTAX=default
 
 # Specify the syntax of the normalize binary here - so far only 'normalize'
 # is supported.
 #WVENC=wavpack
 #AACENC=faac
 #OPUSENC=opusenc
+#APENC=mac
 
 #ID3=id3
 #ID3V2=id3v2
 # For the encoder options look at: 'opusenc -h'
 #OPUSENCOPTS=
 
+# Monkey's Audio (ape)
+# Without this set mac chokes unfortunately. Choices
+# are from 1000 to 5000.
+#APENCOPTS='-c3000'
+#APETAG=apetag
+
 # There are three ways to tag MP3 files: id3v1 (with id3), id3v2.3
 # (with id3v2) and id3v2.4 (with eyeD3). Use ID3TAGV to select one of
 # the older formats
 # OUTPUTTYPE can be any of a number of formats, either a single format
 # (e.g. "ogg") or a combination of them separated with ","
 # (e.g. "flac,mp3"). Currently recognised and supported are:
-# "flac", "m4a", "mp3, "mpc", "ogg", "opus", "spx", "vorbis", "wav", "wv"
+# "flac", "m4a", "mp3, "mpc", "ogg", "opus", "spx", "vorbis", "wav", "wv", "ape"
 #OUTPUTTYPE=ogg
 
 # Output filename format - change this to reflect your inner desire to
index 4524083..1bcc0fd 100644 (file)
--- a/changelog
+++ b/changelog
@@ -1,5 +1,7 @@
 abcde 2.6.1
 
+  * Monkey's Audio (ape) encoding added. Tagging is with
+    Robert Muth's apetag.
   * Simplify Opus tagging.This closes Issue 133.
   * Allow 'clean' when OUTPUTTYPE=wav, broken for some time.
    Thanks to Roger rogerx.oss<at>gmail.com for showing the