Attached is a patch to add a hook from which to call cdrdao (the least invasive), my abcde.conf that calls it from that hook, and a perl script that fixes the filenames in the TOC so one could simply decode their abcde-written track files into wavs and call cdrdao to burn a copy.
thanks, eric. -- http://ir.iit.edu/~ej
diff -ru abcde-2.3.3_faac/abcde abcde-2.3.3_faac_cdrdao/abcde
--- abcde-2.3.3_faac/abcde 2005-12-14 17:23:39.000000000 -0500
+++ abcde-2.3.3_faac_cdrdao/abcde 2005-12-14 17:49:30.000000000 -0500
@@ -2031,9 +2031,23 @@
:
}
+# post_cddb
+# Empty post_cddb function, to be defined in the configuration file.
+post_cddb ()
+{
+:
+}
+
# post_read
# Empty post_read function, to be defined in the configuration file.
-post_read ()
+post_read ()
+{
+:
+}
+
+# post_move
+# Empty post_move function, to be defined in the configuration file.
+post_move ()
{
:
}
@@ -2776,6 +2790,8 @@
| grep -v ^encode-output > "$ABCDETEMPDIR/status"
fi
+post_cddb
+
# Create playlist if needed (backgroundable) and start reading in tracks
(
@@ -3062,6 +3078,13 @@
fi
# If the above didn't catch the stragglers, this will
wait
+
+)
+
+# BUG: should check for empty errors file and/or GOAHEAD here and for
+# post_cddb and post_read
+post_move
+
# Check to see if run_command logged any errors
if [ -f "$ABCDETEMPDIR/errors" ]; then
echo "The following commands failed to run:"
@@ -3082,7 +3105,7 @@
else
echo "Finished. Not cleaning $ABCDETEMPDIR."
fi
-)
+
exit 0
# b:is_bash
diff -ru abcde-2.3.3_faac/abcde.conf abcde-2.3.3_faac_cdrdao/abcde.conf
--- abcde-2.3.3_faac/abcde.conf 2005-12-14 17:24:41.000000000 -0500
+++ abcde-2.3.3_faac_cdrdao/abcde.conf 2005-12-14 17:50:26.000000000 -0500
@@ -187,6 +187,7 @@
# playlist implies cddb
# The default action list is defined in the following comment.
#ACTIONS=cddb,read,encode,tag,move,clean
+ACTIONS=cddb,read,encode,tag,playlist,move,clean
# CD device you want to read from
#CDROM=/dev/cdrom
@@ -267,6 +268,12 @@
# echo "$@" | sed s,:,\ -,g | tr \ /\* __+ | tr -d \'\"\?\[:cntrl:\]
#}
+# leave spaces so we're consistent with gtkpod
+#mungefilename ()
+#{
+# echo "$@" | sed s,:,\ -,g | tr /\* _+ | tr -d \'\"\?\[:cntrl:\]
+#}
+
# Custom genre munging:
# By default we just transform uppercase to lowercase. Not much of a fancy
# function, with not much use, but one can disable it ot just turn the first
@@ -286,22 +293,56 @@
# set it here. In Debian, eject -x and cdset -x do the job.
# KEEP IN MIND that executables included in pre_read must be in your $PATH or
# you have to define them with full /path/to/binary
-# Uncomment and substitute the ":" with your commands.
#pre_read ()
#{
-#:
+# $EJECT -t
+# return $?
#}
-# Custom post-read function
-# By default it does nothing.
-# You can set some things to get abcde funtion in better ways:
-# * Store a copy of the CD TOC.
-# KEEP IN MIND that executables included in post_read must be in your $PATH or
-# you have to define them with full /path/to/binary
-# Uncomment and substitute the ":" with your commands.
+# Set up path for TOC file
+#post_cddb ()
+#{
+ # stolen from do_playlist and do_move
+# ALBUMFILE=$(mungefilename "$DALBUM")
+# ARTISTFILE=$(mungefilename "$DARTIST")
+# GENRE=$(mungegenre "$GENRE")
+# YEAR=$(echo $CDYEAR)
+# if [ "$VARIOUSARTISTS" = "y" ] ; then
+# OUTPUTFILE=$(eval echo $VAOUTPUTFORMAT)
+# SELECTEDPLAYLISTFORMAT=$VAPLAYLISTFORMAT
+# else
+# OUTPUTFILE=$(eval echo $OUTPUTFORMAT)
+# SELECTEDPLAYLISTFORMAT=$PLAYLISTFORMAT
+# fi
+# OUTPUTFILEDIR=$(dirname "$OUTPUTDIR/$OUTPUTFILE")
+# mkdir -p "$OUTPUTFILEDIR"
+ # HACK: remove the .${OUTPUT}.m3u from the end and we've got our format
+# TOCFORMAT=`echo "${OUTPUTFILEDIR}/$SELECTEDPLAYLISTFORMAT" | awk '{print
substr($0, 0, length($0) - 14)".toc";}'`
+# TOCFILE="$(eval echo \"$TOCFORMAT\")"
+# export TOCFILE
+#}
+
+# run cdrdao to read TOC
#post_read ()
#{
-#:
+# cdrdao read-toc --with-cddb "$TOCFILE" > "$ABCDETEMPDIR/cdrdao.out" 2>&1
+# RETURN=$?
+# if [ "$RETURN" != "0" ]; then
+# echo "cdrdao returned code $RETURN, see $ABCDETEMPDIR/cdrdao.out" >>
"$ABCDETEMPDIR/errors"
+# fi
+# return $RETURN
+#}
+
+# Create copy of TOC file with wavs as filenames
+#post_move ()
+#{
+# replace_toc_filenames.pl "$TOCFILE" > `echo "$TOCFILE" | awk '{print
substr($0, 0, length($0) - 3)"wavs.toc";}'` 2>
"$ABCDETEMPDIR/replace_toc_filenames.out"
+# RETURN=$?
+# if [ "$RETURN" != "0" ] || [ -s "$ABCDETEMPDIR/replace_toc_filenames.out"
]; then
+# echo "replace_toc_filenames.pl returned code $RETURN and produced the
following errors: " | cat - "$ABCDETEMPDIR/replace_toc_filenames.out" >>
"$ABCDETEMPDIR/errors"
+# fi
+# rm "$ABCDETEMPDIR/replace_toc_filenames.out"
+# return $RETURN
#}
# If you'd like to have abcde eject the cdrom after all the tracks have been
# System defaults for abcde version 2.2.x # Nothing in this file is uncommented by default. # # If you wish to override these system-wide settings, create your own # .abcde.conf file in your home directory. # CDDB options # If you wish to use a different CDDB server, edit this line. # If you just wanted to use a proxy server, just set your http_proxy # environment variable - wget will use it correctly. #CDDBURL="http://freedb.freedb.org/~cddb/cddb.cgi" # The CDDB protocol requires hello information, including a valid username # and hostname. If you feel paranoid about giving away such info, edit this # line - the format is [EMAIL PROTECTED] #HELLOINFO="[EMAIL PROTECTED]" # This controls the email address CDDB changes are submitted to. [EMAIL PROTECTED] # The following options control whether or not fetched CDDB entries # are cached locally in $CDDBLOCALDIR #CDDBCOPYLOCAL="n" #CDDBLOCALDIR="$HOME/.cddb" # If NOSUBMIT is set to y, then abcde will never prompt asking if you # wish to submit your edited cddb file. #NOSUBMIT=n # If NOCDDBQUERY is set to y, then abcde will never even try to access # the CDDB server; running abcde will automatically drop you into a # blank cddb file to edit at your leisure. This is the same as the # -n option. NOCDDBQUERY=y implies NOSUBMIT=y. #NOCDDBQUERY=n # Select here if you want to use the locally stored CDDB entries. # This is useful if you do a lot of editing to those CDDB entries. # Also, other tools like Grip store CDDB entries under $HOME/.cddb, # so they can be reused when ripping CDs. #CDDBUSELOCAL="n" # Specify the style of encoder to use here - # oggenc, vorbize - for OGGENCODERSYNTAX # lame, gogo, bladeenc, l3enc, xingmp3enc, mp3enc - for MP3ENCODERSYNTAX # flac - the only supported for FLACENCODERSYNTAX at the moment # speexenc - the only encoder for SPEEXENCODERSYNTAX # faac - encoder for AACENCODERSYNTAX # default is a valid option for oggenc, lame, flac, speexenc and faac. # Currently this affects the default location of the binary, the variable # to pick encoder command-line options from, and where the options are # given. #MP3ENCODERSYNTAX=default #OGGENCODERSYNTAX=default #FLACENCODERSYNTAX=default #SPEEXENCODERSYNTAX=default #AACENCODERSYNTAX=default # Specify the syntax of the normalize binary here - so far only 'normalize' # is supported. #NORMALIZERSYNTAX=default # CD reader program to use - currently recognized options are 'cdparanoia', # 'cdda2wav', 'dagrab' and 'cddafs' (Mac OS X only). #CDROMREADERSYNTAX=cdparanoia # Keep the wav files after encoding. Set it to "y" and remove "clean" from # the list of default actions, since we purge the temp directory as default. #KEEPWAVS=n # Track padding: force abcde to pad tracks using 0, so every song uses a two # digit entry. If set to "y", even a single song encoding outputs a file like # 01.my_song.ext #PADTRACKS=n # Define if you want abcde to be non-interactive. # Keep in mind that there is no way to deactivate it right now in the command # line, so setting this option makes abcde to be always non-interactive. #INTERACTIVE=n # Specify 'nice'ness of the encoder, the CD reader and the distmp3 proc. # This is a relative 'nice'ness (that is, if the parent process is at a # nice level of 12, and the ENCNICE is set to 3, then the encoder will # run with an absolute nice value of 15. Note also, that setting these # to be empty will result in some default niceness increase (4 in tcsh # and 10 using the bsdutils' nice). #ENCNICE=10 #READNICE=10 #DISTMP3NICE=10 # Paths of programs to use #LAME=lame #GOGO=gogo #BLADEENC=bladeenc #L3ENC=l3enc #XINGMP3ENC=xingmp3enc #MP3ENC=mp3enc #VORBIZE=vorbize #OGGENC=oggenc #FLAC=flac #SPEEXENC=speexenc AACENC=faac #ID3=id3 #ID3V2=id3v2 #CDPARANOIA=cdparanoia #CDDA2WAV=cdda2wav #CDDAFS=cp #CDDISCID=cd-discid #CDDBTOOL=cddb-tool #EJECT=eject #MD5SUM=md5sum #DISTMP3=distmp3 #VORBISCOMMENT=vorbiscomment #NORMALIZE=normalize-audio #CDSPEED=eject # Options to call programs with: # If HTTPGET is modified, the HTTPGETOPTS options should also be defined # accordingly. If HTTPGET is changed, the default options will be set, # if HTTPGETOPTS is empty or not defined. #HTTPGET=wget # for fetch (FreeBSD): HTTPGETOPTS="-q -o -" # for wget: HTTPGETOPTS="-q -O -" # for curl (MacOSX): HTTPGETOPTS="-f -s" #HTTPGETOPTS="-q -O -" # MP3: #LAMEOPTS= #GOGOOPTS= #BLADEENCOPTS= #L3ENCOPTS= #XINGMP3ENCOPTS= #MP3ENCOPTS= # Ogg: #VORBIZEOPTS= #OGGENCOPTS= # FLAC: FLACOPTS=--best # Speex: #SPEEXENCOPTS= # MPC/MP+ (Musepack): # For the encoder options take a look at the manpage. Set them like this: # MPPENCOPTS='--xtreme' if you wish to set more options then: # MPPENCOPTS='--xtreme --skip 20 --fade 10' AACENCOPTS='-q 150 -w' #ID3OPTS= #ID3V2OPTS= #CDPARANOIAOPTS= #CDDA2WAVOPTS= #CDDAFSOPTS="-f" #CDDBTOOLOPTS= #EJECTOPTS= #DISTMP3OPTS= #NORMALIZEOPTS= #CDSPEEDOPTS="-x" #CDSPEEDVALUE="" # Actions to take # Comma-separated list of one or more of the following: # cddb,read,normalize,encode,tag,move,playlist,clean # encode implies read # normalize implies read # tag implies cddb,read,encode # move implies cddb,read,encode,tag # playlist implies cddb # The default action list is defined in the following comment. ACTIONS=cddb,read,encode,tag,playlist,move,clean # CD device you want to read from #CDROM=/dev/cdrom # Optional CDROM device-ID for readers requiring the SCSI-syntax Bus,ID,Lun #CDROMID=0,3,0 # If you'd like to make a default location that overrides the current # directory for putting mp3's, uncomment this. #OUTPUTDIR=`pwd` # Or if you'd just like to put the temporary .wav files somewhere else # you can specify that here #WAVOUTPUTDIR=`pwd` # OUTPUTTYPE can be either "ogg", "mp3", "flac" or "spx", or a combination # of them separated with ",": "ogg,mp3". OUTPUTTYPE='flac,m4a' # Output filename format - change this to reflect your inner desire to # organize things differently than everyone else :) # You have the following variables at your disposal: # OUTPUT, GENRE, ALBUMFILE, ARTISTFILE, TRACKFILE, and TRACKNUM. # Make sure to single-quote this variable. abcde will automatically create # the directory portion of this filename. # NOTICE: OUTPUTTYPE has been deprecated in the OUTPUTFORMAT string. # Since multiple-output was integrated we always append the file type # to the files. Remove it from your user defined string if you are getting # files like ".ogg.ogg". #OUTPUTFORMAT='${ARTISTFILE}-${ALBUMFILE}/${TRACKNUM}.${TRACKFILE}' # Like OUTPUTFORMAT but for Various Artists discs. #VAOUTPUTFORMAT='${ARTISTFILE}/${TRACKFILE}' # Define how many encoders to run at once. This makes for huge speedups # on SMP systems. Defaults to 1. Equivalent to -j. #MAXPROCS=2 # Support for systems with low disk space: # n: Default parallelization (read entire CD in while encoding) # y: No parallelization (rip, encode, rip, encode...) #LOWDISK=n # If set to y, enables batch mode normalization, which preserves relative # volume differences between tracks of an album. Also enables nogap encoding # when using the 'lame' encoder. BATCH=y # Set the playlist file location format. Uses the same variables and format # as OUTPUTFORMAT. If the playlist is specified to be in a subdirectory, it # will be created for you and the playlist will reference files from that # subdirectory. #PLAYLISTFORMAT='${ARTISTFILE}-${ALBUMFILE}.${OUTPUT}.m3u' # If you want to prefix every filename in a playlist with an arbitrary # string (such as 'http://you/yourstuff/'), use this option #PLAYLISTDATAPREFIX='' #Like PLAYLIST{FORMAT,DATAPREFIX} but for Various Artists discs: #VAPLAYLISTFORMAT='${ARTISTFILE}-${ALBUMFILE}.${OUTPUT}.m3u' #VAPLAYLISTDATAPREFIX='' #This will give the playlist CR-LF line-endings, if set to "y". #(some hardware players insist on CR-LF line-endings) #DOSPLAYLIST=n # Custom filename munging: # By default, abcde will do the following to CDDB data to get a useful # filename: # * Translate colons to a space and a dash for Windows compatibility # * Eat control characters, single quotes, and question marks # * Translate spaces and forward slashes to underscores # * Translate stars into pluses. # To change that, redefine the mungefilename function. # mungefilename recieves the CDDB data (artist, track, title, whatever) # as $1 and outputs it on stdout. #mungefilename () #{ # echo "$@" | sed s,:,\ -,g | tr \ /\* __+ | tr -d \'\"\?\[:cntrl:\] #} # leave spaces so we're consistent with gtkpod mungefilename () { echo "$@" | sed s,:,\ -,g | tr /\* _+ | tr -d \'\"\?\[:cntrl:\] } # Custom genre munging: # By default we just transform uppercase to lowercase. Not much of a fancy # function, with not much use, but one can disable it ot just turn the first # Uppercase. #mungegenre () #{ # echo $CDGENRE | tr "[:upper:]" "[:lower:]" #} # Custom pre-read function # By default it does nothing. # You can set some things to get abcde funtion in better ways: # * Close the CD tray using eject -t (if available in eject and supported by # your CD device. # * Set the CD speed. You can also use the built-in options, but you can also # set it here. In Debian, eject -x and cdset -x do the job. # KEEP IN MIND that executables included in pre_read must be in your $PATH or # you have to define them with full /path/to/binary #pre_read () #{ #: #} # If you'd like to have abcde eject the cdrom after all the tracks have been # read, uncomment the following line. EJECTCD=y # To encode on the remote machines foo, bar, baz, quux, and qiix, as well as # on the local machine (requires distmp3 to be installed on local machine and # distmp3host to be installed and running on all remote machines - see README) #REMOTEHOSTS=foo,bar,baz,quux,qiix # Set to obtain some information about actions happening in the background # Usefull if you have a slow network or CDDB servers seem irresponsive. #EXTRAVERBOSE=n
replace_toc_filenames.pl
Description: Perl program
pgpnBwu4lJ8Ra.pgp
Description: PGP signature

