From: data Date: Mon, 17 Apr 2006 20:40:14 +0000 (+0000) Subject: Small change in doc. X-Git-Url: https://git.hcoop.net/clinton/abcde.git/commitdiff_plain/d68ebfffb7417f90492b113c50f517893aac878d?ds=sidebyside Small change in doc. Prototype for the bash implementation of cue2discid. git-svn-id: http://abcde.googlecode.com/svn/trunk@215 a0fa61bc-5347-0410-a1a9-7f54aa4e1825 --- diff --git a/abcde b/abcde index c4d19d3..c7f5642 100755 --- a/abcde +++ b/abcde @@ -169,7 +169,7 @@ checkstatus () fi } -# chechwarnings [blurb] +# checkwarnings [blurb] # Returns "0" if the blurb was found (meaning there was an warning), # returns 1 if it wasn't (yes this is a little backwards). # Does not print the blurb on stdout. @@ -425,6 +425,60 @@ gettracknum() fi } +# makeids +# +# Calculate cddb disc ids without requiring specialized helper programs. +# largely copied from cd-discid and musicbrainz examples. some of the steps +# don't make sense, but they're necessary to match the ids generated by other +# programs. +# +## FIXME ## Right now, we get 2 frames more than with cue2discid ?? +# data@petit:~$ sh /tmp/cue2discid /home/data/tmp/flac/01.Roisin_Murphy--Ruby_Blue.flac +# processing offsetimes 00:00:00 04:47:10 08:20:37 11:46:46 17:45:36 21:41:57 27:32:21 32:03:73 35:39:28 38:27:33 43:50:38 44:42:34 +# 980b4b0c 12 150 21685 37687 53146 80061 97782 124071 144448 160603 173208 197438 201334 2895 +# data@petit:~$ metaflac --export-cuesheet-to=- /home/data/tmp/flac/01.Roisin_Murphy--Ruby_Blue.flac| python /home/data/sources/abcde/trunk/examples/cue2discid +# 980b4b0c 12 150 21685 37687 53146 80061 97782 124071 144448 160603 173208 197438 201334 2893 +# +# Variables: OFFSETS, TRACKS, LEADOUT, [LEADIN] +makeids () +{ + if [ X"$LEADOUT" = "X" ]; then + log warning "Error trying to calculate disc ids without lead-out information." + exit 1 + fi + + # default to a two second lead-in + IDMAGICNUM=150 + LEADIN=${LEADIN:=150} + + # number of cdframes per second + CDFRAMES=75 + + # reset cddb checksum for cddb disc-id calululation + CDDBCKSUM=0 + + COOKEDOFFSETS="" + for OFFSET in $(echo $OFFSETS) + do + COOKEDOFFSETS="${COOKEDOFFSETS} $(($OFFSET + $LEADIN))" + + OFFSETTIME=$(( ($OFFSET + $LEADIN) / $CDFRAMES )) + while [ $OFFSETTIME -gt 0 ]; do + CDDBCKSUM=$(($CDDBCKSUM + $OFFSETTIME % 10)) + OFFSETTIME=$(($OFFSETTIME / 10)) + done + + done + + COOKEDOFFSETS="${COOKEDOFFSETS:1}" # eat the leading space + + PREGAP=$(($(echo $OFFSETS | cut -f1 -d' '))) + TOTALTIME=$(( (($LEADOUT + $LEADIN + $PREGAP) / $CDFRAMES) - (($LEADIN + $PREGAP) / $CDFRAMES))) + + printf -v HEXSUM "%08lx" $(( ($CDDBCKSUM % 0xff) << 24 | $TOTALTIME << 8 | $TRACKS)) + TRACKINFO="${HEXSUM} $((TRACKS)) ${COOKEDOFFSETS} $((($LEADOUT + $LEADIN + $IDMAGICNUM) / $CDFRAMES))" +} + do_replaygain() { if checkstatus replaygain; then :; else @@ -1451,20 +1505,59 @@ do_discid () if [ "$OSFLAVOUR" = "OSX" ]; then disktool -u ${CDROM#/dev/} fi - if [ "$CDROMREADERSYNTAX" = "flac" ] ; then - if $METAFLAC $METAFLACOPTS --export-cuesheet-to=- "$CDROM" > /dev/null 2>&1 ; then - TRACKINFO=$($METAFLAC $METAFLACOPTS --export-cuesheet-to=- "$CDROM" | $CUE2DISCID) - else - log error "the input flac file does not contain a cuesheet." - exit 1 - fi - else - case "$CDDBMETHOD" in - cddb) TRACKINFO=$($CDDISCID $CDROM) ;; - # FIXME # musicbrainz needs a cleanup - musicbrainz) TRACKINFO=$($MUSICBRAINZ -c $CDROM ) ;; - esac - fi + case "$CDROMREADERSYNTAX" in + flac) + if $METAFLAC $METAFLACOPTS --export-cuesheet-to=- "$CDROM" > /dev/null 2>&1 ; then + case "$CUE2DISCID" in + builtin) + CUESHEET="$(metaflac $METAFLACOPTS --export-cuesheet-to=- "$CDROM")" + + #TRACKS=$(echo $CUESHEET | egrep "TRACK \+[[:digit:]]\+ \+AUDIO" |wc -l) + #TRACKS=0 + OFFSETTIMES=( $(echo "$CUESHEET" | sed -n -e's/\ *INDEX 01\ \+//p' ) ) + TRACKS=${#OFFSETTIMES[@]} + unset OFFSETS + #echo "processing offsetimes ${OFFSETTIMES[@]}" + for OFFSETTIME in ${OFFSETTIMES[@]}; do + OFFSETS="$OFFSETS $(( 10#${OFFSETTIME:0:2} * 4500 + 10#${OFFSETTIME:3:2} * 75 + 10#${OFFSETTIME:6:2} ))" + #OFFSETS[${#OFFSETS[*]}]=$(( 10#${OFFSETTIME:0:2} * 4500 + 10#${OFFSETTIME:3:2} * 75 + 10#${OFFSETTIME:6:2} )) + done + + LEADOUT=$(( $(echo "$CUESHEET" | grep lead-out | get_last) / 44100 * 75 )) + LEADIN=$(( $(echo "$CUESHEET" | grep lead-in | get_last) / 44100 * 75 )) + makeids + ;; + *) + TRACKINFO=$($METAFLAC $METAFLACOPTS --export-cuesheet-to=- "$CDROM" | $CUE2DISCID) + ;; + esac + else + log error "the input flac file does not contain a cuesheet." + exit 1 + fi + ;; +# cdparanoia|debug) +# CDPARANOIAOUTPUT="$( $CDROMREADER -$CDPARANOIACDROMBUS $CDROM -Q --verbose 2>&1 )" +# RET=$? +# if [ ! "$RET" = "0" ];then +# log warning "something went wrong while querying the CD... Maybe a DATA CD?" +# fi +# +# TRACKS="$(echo "$CDPARANOIAOUTPUT" | egrep '^[[:space:]]+[[:digit:]]' | tail -n 1 | get_first | tr -d "." | tr '\n' ' ')" +# CDPARANOIAAUDIOTRACKS="$TRACKS" +# +# LEADOUT="$(echo "$CDPARANOIAOUTPUT" | egrep -o '^TOTAL[[:space:]]+([[:digit:]]+)' | get_last)" +# OFFSETS="$(echo "$CDPARANOIAOUTPUT" | sed -n -e's/^ .* \([0-9]\+\) \[.*/\1/p')" +# makeids +# ;; + *) + case "$CDDBMETHOD" in + cddb) TRACKINFO=$($CDDISCID $CDROM) ;; + # FIXME # musicbrainz needs a cleanup + musicbrainz) TRACKINFO=$($MUSICBRAINZ -c $CDROM ) ;; + esac + ;; + esac # Make sure there's a CD in there by checking cd-discid's return code if [ ! "$?" = "0" ]; then if [ "$CDROMREADERSYNTAX" = "flac" ] ; then @@ -1500,7 +1593,7 @@ do_discid () ABCDETEMPDIR="$WAVOUTPUTDIR/abcde.$(echo $TRACKINFO | cut -f1 -d' ')" if [ -z "$TRACKQUEUE" ]; then - if [ ! "$STRIPDATATRACKS" = "y" ]; then + if [ ! "$STRIPDATATRACKS" = "n" ]; then case "$CDROMREADERSYNTAX" in cdparanoia|debug) if [ "$WEHAVEACD" = "y" ]; then @@ -1650,7 +1743,7 @@ do_discid () if $CUEREADER $CUEREADEROPTS > "$ABCDETEMPDIR/$CUEFILE"; then echo cuefile=$CUEFILE >> "$ABCDETEMPDIR/status" else - log warning "reading the CUE sheet with mkcue is still considered experimental" + log warning "reading the CUE sheet is still considered experimental" log warning "and there was a problem with the CD reading. abcde will continue," log warning "but consider reporting the problem to the abcde author" fi @@ -2829,7 +2922,6 @@ while getopts 1a:bBc:C:d:Defghj:klLmMnNo:pPr:s:S:t:T:uvVxw:W:z opt ; do C) DISCID="$( echo ${OPTARG#abcde.} | tr -d /)" ;; d) CDROM="$OPTARG" ;; D) set -x ;; - e) ERASEENCODEDSTATUS=y ;; h) usage; exit ;; e) ERASEENCODEDSTATUS=y ;; E) ENCODING="$OPTARG" ;; @@ -2872,6 +2964,7 @@ while getopts 1a:bBc:C:d:Defghj:klLmMnNo:pPr:s:S:t:T:uvVxw:W:z opt ; do fi ;; z) DEBUG=y ; CDROMREADERSYNTAX=debug ; EJECTCD="n" ;; + Z) CUE2DISCID=builtin;; ?) usage; exit ;; esac done @@ -2890,8 +2983,11 @@ if echo "$CDROM" | grep -i '.flac$' > /dev/null 2>&1 ; then fi vecho warning "switching to flac CDROMREADERSYNTAX..." CDROMREADERSYNTAX=flac - # Added a need on CUE2DISCID until we manage to convert the python script to bash. - NEEDCUE2DISCID=y + # We have a builtin version of cue2discid... + case "$CUE2DISCID" in + builtin);; + *) NEEDCUE2DISCID=y;; + esac NEEDMETAFLAC=y EJECTCD=n fi diff --git a/abcde.1 b/abcde.1 index 43c2cfd..1e720ff 100644 --- a/abcde.1 +++ b/abcde.1 @@ -45,7 +45,8 @@ Repeat until finished Encode the whole CD in a single file. The resulting file uses the CD title for tagging. If the resulting format is a flac file with an embedded cuesheet, the file can be used as a source for creating other formats. Use "-1 -M -o -flac" for obtaining such a file .TP +flac" for obtaining such a file. +.TP .B \-a [actions] Comma-delimited list of actions to perform. Can be one or more of: cddb, read, normalize, encode, tag, move, replaygain, playlist, clean. Normalize