#!/bin/bash # # $Id: cdda2mp3 356 2011-09-24 23:25:47Z svnuser $ # # $Log: cdda2mp3,v $ # Revision 1.4 2000/12/20 07:11:08 merlin # Lots of updates # # Revision 1.3 1998/05/24 02:31:43 merlin # Modified not to use fifos anymore # # Revision 1.2 1998/05/24 02:24:13 merlin # Version that actually works on this system # # Revision 1.1 1998/05/24 02:21:49 merlin # Original version from the distribution # # # Demo script for processing all audio tracks with a mp3 decoder # based on a news article by Tom Kludy # This variant uses named pipes in order to save space. # There is another variant of this script, which uses temporary # wav files (see cdda2mp3.new). # # usage: cdda2mp3 # USAGE="$0 [-t tty for cdparanoia] [-d 1st track to dump] [-e 1st track to encode] [-o offset between dump and encode] [-dp (disable paranoia)] [-f file prefix]" TTY=/dev/null DUMPTRACK=1 ENCTRACK=1 OFFSET=1 DP="" FILEPREFIX="audiotrack" #NUMBEROFTRACKS=`cdda2wav -N -d0.01 -v3 2>&1 | grep " 1-" | sed -e "s/ 1- //" -e "s/ .*//"` NUMBEROFTRACKS=`cdparanoia -Q 2>&1 | tail -2 | head -1 | sed -e "s/\. .*//" -e "s/ *//"` echo "CD has $NUMBEROFTRACKS tracks" while [ $# -gt 0 ] do case $1 in -t) if [ $# -eq 1 ]; then echo $USAGE>&2 exit 1 else TTY=$2 shift fi ;; -d) if [ $# -eq 1 ]; then echo $USAGE>&2 exit 1 else DUMPTRACK=$2 shift fi ;; -e) if [ $# -eq 1 ]; then echo $USAGE>&2 exit 1 else ENCTRACK=$2 shift fi ;; -o) if [ $# -eq 1 ]; then echo $USAGE>&2 exit 1 else OFFSET=$2 shift fi ;; -f) if [ $# -eq 1 ]; then echo $USAGE>&2 exit 1 else FILEPREFIX=$2 shift fi ;; -dp) DP="-Z" shift ;; *) if [ $# -eq 1 ]; then echo $USAGE>&2 exit 1 else echo $USAGE>&2 exit 1 fi ;; esac shift done # feed track numbers and start sectors into loop ( while [ $DUMPTRACK -le $NUMBEROFTRACKS ] do OLDDUMPTRACK=`expr $DUMPTRACK - $OFFSET` echo "Dumping track $DUMPTRACK at `date '+%k:%M:%S'`" > $TTY cdparanoia $DP $DUMPTRACK $FILEPREFIX$DUMPTRACK.wav >$TTY 2>&1 echo "Done dumping track $DUMPTRACK at `date '+%k:%M:%S'`" >$TTY # Wait for the track to be encoded while [ $OLDDUMPTRACK -gt 0 -a -f $FILEPREFIX$OLDDUMPTRACK.wav ] do sleep 1 done DUMPTRACK=`expr $DUMPTRACK + 1` done # Encoding is waiting for the next file before starting, so we create it # temporarly touch "$FILEPREFIX$DUMPTRACK.wav" sleep 10 rm "$FILEPREFIX$DUMPTRACK.wav" )& while [ $ENCTRACK -le $NUMBEROFTRACKS ] do NEWENCTRACK=`expr $ENCTRACK + 1` # Wait for the track to be dumped while [ ! -f "$FILEPREFIX$NEWENCTRACK.wav" ] do sleep 1 done echo "Encoding track $ENCTRACK at `date '+%k:%M:%S'`" l3enc "$FILEPREFIX$ENCTRACK.wav" "$FILEPREFIX$ENCTRACK.mp3" # check result code RES=$? if [ $RES = 0 ] ; then echo echo "Done encoding track $ENCTRACK at `date '+%k:%M:%S'`" rm "$FILEPREFIX$ENCTRACK.wav" else echo echo "File $FILEPREFIX$ENCTRACK.mp3 failed at `date '+%k:%M:%S'` (result $RES). Aborted." >&2 exit 1 fi ENCTRACK=$NEWENCTRACK done # cda -dev /dev/cdrom on &>/dev/null; cda toc >cda; cda -dev /dev/cdrom off 2>/dev/null