#!/bin/bash # # @(#)make-audio-cd 1.1.0 28/10/2004 Copyright 2003-2004 Robert M. Stockmann # stock@stokkie.net # # A simple menu driven script to convert your mp3's into a full featured # audio CD-ROM album including CD-TEXT labels. Make sure your CD Burner is # correctly adjusted inside /usr/share/cdrdao/drivers . For instance when # cdrecord dev=ATA -scanbus reports this : # # scsibus0: # 0,0,0 0) 'PIONEER ' 'DVD-RW DVR-107D' '1.05' Removable CD-ROM # 0,1,0 1) * # # make sure your cdrdao driver inside /usr/share/cdrdao/drivers is configured # for the use of CD_TEXT, i.e. : # # W|PIONEER|DVD-RW DVR-107D|generic-mmc|OPT_MMC_CD_TEXT # # umask 0066 tempdir=`tempdir 2>/dev/null` || tempdir=/tmp/audio-album$$ mkdir $tempdir TOC_TITLE="" TOC_PERFORMER="" TOC_MESSAGE="" TOC_FILE="" TOC_SONGTITLE="" TOC_SONGPERFORMER="" TOC_SONGMESSAGE="" echo "Edit/Add audio Album Title and Performer" > $tempdir/ALBUM echo "Edit/Add audio Track Title and Performer" > $tempdir/TRACKS echo "Convert mp3 to wav" > $tempdir/CONVERT echo "Write your TOC file" > $tempdir/TOC echo "Read your TOC file" > $tempdir/TOCREAD echo "Create audio CD-ROM ISO" > $tempdir/ISO OPTIONS="ALBUM CONVERT TRACKS TOC TOCREAD ISO" MENU() { succes=n while [ $success=n ] do clear tput home echo '' echo "The following options are available : " echo "" j=0 for i in `echo $OPTIONS` do j=`expr $j \+ 1` echo "$i" > $tempdir/$j echo " $j : `cat $tempdir/$i` " done echo echo echo -n "Enter the Option of your choice, press q to quit : " read answer if [ "$answer" = "q" ]; then EXIT fi OPTION=`cat $tempdir/$answer` if [ "$OPTION" = "" ]; then echo " wrong selection, please select again " succes=n else echo " your selection = $OPTION " succes=y break fi done $OPTION } ALBUM_TITLE() { succes=n while [ $success=n ] do clear tput home echo '' echo echo -n "Enter the ALBUM Title : " read TOC_TITLE if [ "$TOC_TITLE" = "" ]; then echo " wrong input, please select again " succes=n else echo " your ALBUM Title = $TOC_TITLE " succes=y break fi done ALBUM } ALBUM_PERFORMER() { succes=n while [ $success=n ] do clear tput home echo '' echo echo -n "Enter the ALBUM Artists name(s) : " read TOC_PERFORMER if [ "$TOC_PERFORMER" = "" ]; then echo " wrong input, please select again " succes=n else echo " your ALBUM Artists name(s) = $TOC_PERFORMER " succes=y break fi done ALBUM } ALBUM_MESSAGE() { succes=n while [ $success=n ] do clear tput home echo '' echo echo -n "Enter the ALBUM Comments : " read TOC_MESSAGE if [ "$TOC_MESSAGE" = "" ]; then echo " wrong input, please select again " succes=n else echo " your ALBUM Comments = $TOC_MESSAGE " succes=y break fi done ALBUM } ALBUM() { succes=n while [ $success=n ] do clear tput home echo '' echo "The current audio Album Title info : " echo "" echo " 1 : Album Title : $TOC_TITLE " echo " 2 : Album Artist(s) : $TOC_PERFORMER " echo " 3 : Album Comments : $TOC_MESSAGE " echo "" echo -n "Enter the Option of your choice, press q to quit : " read answer if [ "$answer" = "q" ]; then MENU fi OPTION=`echo $answer` if [ "$OPTION" = "1" ] then echo " your selection = $OPTION " ALBUM_TITLE succes=y break elif [ "$OPTION" = "2" ] then echo " your selection = $OPTION " ALBUM_PERFORMER succes=y break elif [ "$OPTION" = "3" ] then echo " your selection = $OPTION " ALBUM_MESSAGE succes=y break else echo " wrong selection, please select again " succes=n fi done MENU } TRACK_STORE() { echo "TOC_FILE=\"$TOC_FILE\"" > $tempdir/$TOC_FILE.info echo "TOC_SONGTITLE=\"$TOC_SONGTITLE\"" >> $tempdir/$TOC_FILE.info echo "TOC_SONGPERFORMER=\"$TOC_SONGPERFORMER\"" >> $tempdir/$TOC_FILE.info echo "TOC_SONGMESSAGE=\"$TOC_SONGMESSAGE\"" >> $tempdir/$TOC_FILE.info TOC_FILE="" TOC_SONGTITLE="" TOC_SONGPERFORMER="" TOC_SONGMESSAGE="" } TRACK_TITLE() { succes=n while [ $success=n ] do clear tput home echo '' echo echo -n "Enter the TRACK Title : " read TOC_SONGTITLE if [ "$TOC_SONGTITLE" = "" ]; then echo " wrong input, please select again " succes=n else echo " your Track Title = $TOC_SONGTITLE " succes=y break fi done } TRACK_PERFORMER() { succes=n while [ $success=n ] do clear tput home echo '' echo echo -n "Enter the TRACK Performer(s) : " read TOC_SONGPERFORMER if [ "$TOC_SONGPERFORMER" = "" ]; then echo " wrong input, please select again " succes=n else echo " your Track Performer(s) = $TOC_SONGPERFORMER " succes=y break fi done } TRACK_MESSAGE() { succes=n while [ $success=n ] do clear tput home echo '' echo echo -n "Enter the TRACK Comments : " read TOC_SONGMESSAGE if [ "$TOC_SONGMESSAGE" = "" ]; then echo " wrong input, please select again " succes=n else echo " your Track Comments = $TOC_SONGMESSAGE " succes=y break fi done } TRACKS() { WAVS=`/bin/ls -1 *.wav` if [ "$WAVS" = "" ]; then echo "" echo " You didn't convert your mp3 files to wave format yet. " echo " Please do so first by choosing the Convert option" echo "" echo -n "press c to continue : " read answer if [ "$answer" = "c" ]; then MENU else EXIT fi fi for i in $WAVS do succes=n while [ $success=n ] do TOC_FILE="$i" if [ -f $tempdir/$TOC_FILE.info ]; then . $tempdir/$TOC_FILE.info fi clear tput home echo '' echo "The Track info of $i : " echo "" echo " 1 : Track Title : $TOC_SONGTITLE " echo " 2 : Track Performer(s) : $TOC_SONGPERFORMER " echo " 3 : Track Comments : $TOC_SONGMESSAGE " echo "" echo " 4 : Store the above Track info " echo "" echo "" echo -n "Enter the Option of your choice, press q to quit : " read answer if [ "$answer" = "q" ]; then MENU fi OPTION=`echo $answer` if [ "$OPTION" = "1" ] then echo " your selection = $OPTION " TRACK_TITLE elif [ "$OPTION" = "2" ] then echo " your selection = $OPTION " TRACK_PERFORMER elif [ "$OPTION" = "3" ] then echo " your selection = $OPTION " TRACK_MESSAGE elif [ "$OPTION" = "4" ] then echo " your selection = $OPTION " TRACK_STORE succes=y break else echo " wrong selection, please select again " succes=n fi done done MENU } TOC() { WAVS=`/bin/ls -1 *.wav` if [ "$WAVS" = "" ]; then echo "" echo " You didn't convert your mp3 files to wave format yet. " echo " Please do so first by choosing the Convert option" echo "" echo -n "press c to continue : " read answer if [ "$answer" = "c" ]; then MENU else EXIT fi fi NWAVS=`/bin/ls -1 *.wav | wc -l` echo "CD_DA CD_TEXT { LANGUAGE_MAP { 0: EN } LANGUAGE 0 { TITLE \"$TOC_TITLE\" PERFORMER \"$TOC_PERFORMER\" MESSAGE \"$TOC_MESSAGE\" DISC_ID \"XY12345\" } }" > tocfile j=0 for i in $WAVS do j=`expr $j \+ 1` TOC_FILE="$i" if [ -f $tempdir/$TOC_FILE.info ]; then . $tempdir/$TOC_FILE.info fi echo " // Track $i TRACK AUDIO NO COPY NO PRE_EMPHASIS TWO_CHANNEL_AUDIO CD_TEXT { LANGUAGE 0 { TITLE \"$TOC_SONGTITLE\" PERFORMER \"$TOC_SONGPERFORMER\" MESSAGE \"$TOC_SONGMESSAGE\" } } FILE \"$TOC_FILE\" 0" >> tocfile if [ "$j" = "1" ]; then echo "" >> tocfile elif [ "$j" = "$NWAVS" ]; then echo "" >> tocfile else echo "START 00:02:00" >> tocfile echo "" >> tocfile fi done MENU } TOCREAD() { WAVS=`/bin/ls -1 *.wav` if [ "$WAVS" = "" ]; then echo "" echo " You didn't convert your mp3 files to wave format yet. " echo " Please do so first by choosing the Convert option" echo "" echo -n "press c to continue : " read answer if [ "$answer" = "c" ]; then MENU else EXIT fi fi TOC_TITLE=`cat tocfile | grep TITLE | head -1 | awk -F"\"" '{ print $2 }'` TOC_PERFORMER=`cat tocfile | grep PERFORMER | head -1 | awk -F"\"" '{ print $2 }'` TOC_MESSAGE=`cat tocfile | grep MESSAGE | head -1 | awk -F"\"" '{ print $2 }'` echo "FILE 00-dummyfile.wav 0" > $tempdir/files cat tocfile | grep FILE >> $tempdir/files cat tocfile | grep TITLE | nl > $tempdir/a cat tocfile | grep PERFORMER | nl > $tempdir/b cat tocfile | grep MESSAGE | nl > $tempdir/c cat $tempdir/files | grep FILE | nl > $tempdir/d NTOTAL=`cat tocfile | grep TITLE | wc -l ` for i in `seq 2 $NTOTAL` do TOC_SONGTITLE=`cat $tempdir/a | grep " $i" | awk -F"\"" '{ print $2 }'` TOC_SONGPERFORMER=`cat $tempdir/b | grep " $i" | awk -F"\"" '{ print $2 }'` TOC_SONGMESSAGE=`cat $tempdir/c | grep " $i" | awk -F"\"" '{ print $2 }'` TOC_FILE=`cat $tempdir/d | grep " $i" | awk -F"\"" '{ print $2 }'` TRACK_STORE done MENU } CONVERT() { # mp32wav # # audio in cd-rom format is at 44.1kHz. mp3 format however can be # also 48.0kHz. So when preparing wav files for editing/authoring # your own audio cd-rom, use 44.1kHz. A nice trick here is to # rename/label the mp3 files with a prefix like 01-, 02- , etc. # to adjust the correct playing sequence as it is burned onto # your audio CD-ROM. # MP3S=`/bin/ls -1 *.mp3` for i in `echo $MP3S` do j=`echo "$i" | sed 's/mp3\$/wav/'` echo "" echo -n " Converting : " echo -en \\033[34m echo -n " $i ==> $j " echo -en \\033[39m mpg123 -q -s $i 2> /dev/null | sox -t raw -r 44100 -s -w -c2 - $j echo -n " [ " echo -en \\033[32m echo -n "OK" echo -en \\033[39m echo -n " ]" done echo "" MENU } ISO() { cdrecord dev=ATA -scanbus 2> /dev/null| grep CD-ROM > $tempdir/burners BURN_DEVS=`cat $tempdir/burners | awk '{ print $1 }'` for i in $BURN_DEVS do cat $tempdir/burners | grep $i |\ awk -F"'" '{ print $2" "$4 }' > $tempdir/$i done succes=n while [ $success=n ] do clear tput home echo '' echo "The following burners are available : " echo "" j=0 for i in `echo $BURN_DEVS` do j=`expr $j \+ 1` echo "$i" > $tempdir/burn$j echo " $j : `cat $tempdir/$i` " done echo echo echo -n "Enter the Burner of your choice, press q to quit : " read answer if [ "$answer" = "q" ]; then EXIT fi OPTION=`cat $tempdir/burn$answer` if [ "$OPTION" = "" ]; then echo " wrong selection, please select again " succes=n else echo " your selection = $OPTION " succes=y break fi done DEVICE="ATA:$OPTION" echo -en \\033[34m cdrdao write --device $DEVICE tocfile echo -en \\033[39m MENU } EXIT() { rm -rf $tempdir umask 0022 exit 0 } MENU umask 0022 exit 0