# !/bin/sh
# 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 <name prefix for all mp3 files>
#
# list_audio_tracks is a (symbolic) link to cdda2wav
# and used to generate a list of audio track numbers and start
# sectors, which in turn are used in a loop to spawn cdda2wav
# and the post processor on a track by track basis.

# specify the audio track listing program and its options
LAT=list_audio_tracks
LAT_OPTIONS=

# specify the sampling program and its options
# do not specify the track option here!
CDDA2WAV=cdda2wav
CDDA2WAV_OPTS='-Owav -H -P0 -q'

# for normal use, comment out the next line
#DEBUG='-d1'

# the post processor is fed through a named pipe to avoid space waste
# specify the post processing program and its options
MP_CODER=l3enc
#MP_OPTIONS='2>/dev/null 1>/dev/null'
MP_OPTIONS='-br 128000'
#MP_OPTIONS='-hq'

# name of the named pipe
NPIPEPREFIX='npipe'$$
NPIPE=$NPIPEPREFIX".wav"

FILEPREFIX=${1:-audiotrack}

mkfifo $NPIPE

# clean up named pipe on exit, abort, ...
trap "rm -rf $NPIPE" 0 2 3 4 6 7 8 10 11 12 13 15

# feed track numbers and start sectors into loop
$LAT $LAT_OPTIONS | while read TRACK STARTSECTOR;
do
  $CDDA2WAV $CDDA2WAV_OPTS -t$TRACK $DEBUG $NPIPE &
#  echo n | $MP_CODER $NPIPE $FILEPREFIX$TRACK.mp3 $MP_OPTIONS 
  $MP_CODER $NPIPE $FILEPREFIX$TRACK.mp3 $MP_OPTIONS 

  # check result code
  RES=$?
  if [ $RES = 0 ] ; then
    echo File $FILEPREFIX$TRACK.mp3 finished successfully.
  else
    echo File $FILEPREFIX$TRACK.mp3 failed \(result $RES\). Aborted. >&2
    break
  fi
done

