Lösung: Kopieren von Audio CDs: cpaudiocd

Hier ist die Musterlösung zu Aufgabe: Kopieren von Audio CDs: cpaudiocd.

Was man daran sehen kann?

#!/bin/sh
# kopiert eine Audio-CD komplett auf Platte, und schreibt ein
# Skript zum Brennen
#
# 27.04.2000 kw
#
# Das Unterdrücken der 2-sec-Pause soll laut "man cdrecord" so nur
# mit TEAC-Brennern funktionieren (ich habe einen TEAC CDR55S, da
# klappt das auch).
#

# SCSI-Bus,SCSI-Id,LUN
DEVICE0="0,6,0"


if [ $# -ge 1 ]
then
  projekt=$1
else
  echo -n "Name der CD und des Verzeichnisses: "
  read projekt
fi

echo "Das Verzeichnis für die Tracks ist $projekt"

echo -n "Der CD-Brenner hat SCSI-Bus,SCSI-Id,LUN: ($DEVICE0) "
read DEVICE

if [ ! "$DEVICE" ]
then
  DEVICE=$DEVICE0
fi

echo -n "Welche Tracks, z.B.: 1 5 8 10? (alle) "
read trackliste

echo -n "Zwischen den Stücken eine 2-sec-Pause j/n? (j) "
read jn
if [ "$jn" = "n" -o "$jn" = "N" ]
then
  pregap=" defpregap=0"
else
  pregap=""
fi

mkdir $projekt 2>/dev/null
cd $projekt

# Inhaltsverzeichnis lesen:

# diese Version hatte ich bis SuSE 6.2/cdda2wav 0.95beta07 verwendet:
# if cdda2wav -D $DEVICE -N -t1 -d1 -v 3 /dev/null 2>tmp.txt
# then
#   echo "Audio-CD erkannt."
# else
#   echo "keine Audio-CD?"
#   false
#   exit
# fi

# Das klappt jetzt leider nicht mehr, weil cdda2wav jetzt (SuSE 6.3)
# nicht mehr 0 zurückgibt, wenn alles ok läuft.
# Deshalb wird der Rückgabewert jetzt ignoriert:
cdda2wav -D $DEVICE -N -t1 -d1 -v 3 /dev/null 2>tmp.txt


# jetzt steht in tmp.txt etwa folgendes:
#   Read TOC CD Text failed (probably not supported).
#   #Cdda2wav version 0.95beta07 plus real time scheduling ...
#   AUDIOtrack pre-emphasis  copy-permitted tracktype channels
#         1-13           no              no     audio    2
#   Table of Contents: total tracks:13, (total time 39:37.00)
#     1.( 3:21.00),  2.( 2:31.00),  3.( 3:44.00),  4.( 1:23.00),...
#     6.( 5:35.00),  7.( 2:51.00),  8.( 5:39.00),  9.( 2:06.00),...
#    11.( 4:25.00), 12.( 1:20.00), 13.( 1:05.00),
#   CDDB discid: 0x9d09470d
#   samplefile size will be 176444 bytes.
#   recording 1.00000 seconds stereo with 16 bits @ 44100 Hz ->...
#   votes for little:  160,  votes for big:    0
#   little endian detected
#   track  1 successfully recorded
#     
# Daraus extrahieren wir mit grep die Zeile:
#         1-13           no              no     audio    2,
# und daraus mit sed dann die Anzahl der Tracks (hier: 13).

#echo "cdda2wav sagt:"
#cat tmp.txt

TRACKS=`cat tmp.txt | grep "^ *1-[0-9]* "|sed 's/^ *1-\([0-9]*\).*$/\1/'`
rm tmp.txt


if [ "$trackliste" ]
then

  # Tracks angegeben, also nur die kopieren:
  for i in $trackliste
  do
    # Damit die Dateinamen von ls und der shell richtig sortiert
    # werden, schreiben wir in i2 die Tracknummer zweistellig, und
    # nehmen dann $i2, um einen Dateinamen daraus zu bilden.
    # ( || true, weil cdda2wav wieder irgendeinen Unfug zurückgibt)
    i2=`printf %02d $i`
    if cdda2wav -q -D $DEVICE -s -b 16 -r 44100                  \
                -t $i -H $projekt"_"$i2.wav                      \
       || true
    then
      echo "Track $i gelesen"
    else
      echo "Lesen von Track $i gescheitert."
      false
      exit
    fi
  done

else

  # alle Tracks sollen kopiert werden
  # ( || true, weil cdda2wav wieder irgendeinen Unfug zurückgibt)
  if cdda2wav -q -D $DEVICE -s -b 16 -r 44100                   \
              -t 1+$TRACKS -B -H $projekt                       \
     || true
  then
    echo "Tracks 1-$TRACKS gelesen"
  else
    echo "Lesen der CD gescheitert."
    false
    exit
  fi

fi

echo "#!/bin/sh" >brenn
echo "cdrecord -eject -speed=16 dev=$DEVICE -audio -pad$pregap "\
     *.wav >>brenn
chmod 755 brenn

echo "Brennen der CD mit:"
echo "  cd $projekt; ./brenn; cd .."

true
exit



AnyWare@Wachtler.de