#!/bin/bash

# cdencode 1.2 encodes CD-Audio discs to FLAC, MP3, or OGG files
# Copyright (C) 2009-2014 Cezary M. Kruk <c.kruk@bigfoot.com>

device="/dev/cdrom"
mp3_bitrate="--r3mix -m s"
ogg_bitrate="-q 6"
flac_compression="-5"

tempfile=`mktemp /tmp/.cdencode.XXXXXX`

method=`echo $0 | sed 's/.*\///'`
command=`echo $method | sed 's/\./_/'`

help="yes"
for preset in cd2flac.cdda2wav cd2flac.cdparanoia \
               cd2mp3.cdda2wav  cd2mp3.cdparanoia \
               cd2ogg.cdda2wav  cd2ogg.cdparanoia
do
    if [ "$preset" == "$method" ]
    then
        help="no"
    fi
done

if [ "$help" == "yes" ]
then
    echo "cdencode: encodes CD-Audio discs to MP3 or OGG files"
    echo
    echo "use one of the following links: cd2flac.cdda2wav   "
    echo "                                cd2flac.cdparanoia "
    echo "                                 cd2mp3.cdda2wav   "
    echo "                                 cd2mp3.cdparanoia "
    echo "                                 cd2ogg.cdda2wav   "
    echo "                                 cd2ogg.cdparanoia "
    echo
    exit
fi

function testpath()
{
    if [ "`which $1 2> /dev/null`" == "" ]
    then
        echo "There is no $1 program in the path."
        if [ "$1" == "cdda2wav" ]
        then
            echo "Install cdrtools or icedax package."
        elif [ "$1" == "oggenc" ]
        then
            echo "Install vorbis-tools package."
        else
            echo "Install $1 package."
        fi
        exit
    fi
}

cddb.pl -I > $tempfile
sed -i "s/\"/'/g;s/:/;/g;s/\// - /g;s/\\\/-/g;s/|/ - /g;s/*//g;s/?//g;s/<//g;s/>//g;" $tempfile
reset
cat $tempfile
echo
read -p "Press Enter... "

artist="`cat $tempfile | grep '^artist; ' | sed 's/artist; //'`"
title="`cat $tempfile | grep '^title; ' | sed 's/title; //'`"
genre="`cat $tempfile | grep '^genre; ' | sed 's/genre; //'`"
year="`cat $tempfile | grep '^year; ' | sed 's/year; //'`"
cddbid="`cat $tempfile | grep '^cddbid; ' | sed 's/cddbid; //'`"
trackno="`cat $tempfile | grep '^trackno; ' | sed 's/trackno; //'`"

directory="$artist - $title [$genre, $year]"
mkdir "$directory"

cd2flac_cdda2wav()
{
    testpath cdda2wav
    testpath flac
    comment="comment=freecode.com/projects/cdwrite"
    cdda2wav -D $device -x -paranoia -t $track - | \
        flac -T "$comment" \
            -T "artist=$artist" -T "album=$title" -T "genre=$genre" -T "date=$year" \
            -T "tracknumber=$number" -T "title=$tracktitle" \
            $flac_compression - -o "$directory/$number $tracktitle".flac
}

cd2flac_cdparanoia()
{
    testpath cdparanoia
    testpath flac
    comment="comment=freecode.com/projects/cdwrite"
    cdparanoia -d $device -B $track - | \
        flac -T "$comment" \
            -T "artist=$artist" -T "album=$title" -T "genre=$genre" -T "date=$year" \
            -T "tracknumber=$number" -T "title=$tracktitle" \
            $flac_compression - -o "$directory/$number $tracktitle".flac
}

cd2mp3_cdda2wav()
{
    testpath cdda2wav
    testpath lame
    cdda2wav -D $device -x -paranoia -t $track - | \
        lame $mp3_bitrate - "$directory/$number $tracktitle".mp3
}

cd2mp3_cdparanoia()
{
    testpath cdparanoia
    testpath lame
    cdparanoia -d $device -B $track - | \
        lame $mp3_bitrate - "$directory/$number $tracktitle".mp3
}

cd2ogg_cdda2wav()
{
    testpath cdda2wav
    testpath oggenc
    comment="comment=freecode.com/projects/cdwrite"
    cdda2wav -D $device -x -paranoia -t $track - | \
        oggenc $ogg_bitrate -o "$directory/$number $tracktitle".ogg \
            -c "$comment" -a "$artist" -l "$title" -G "$genre" -d "$year" \
            -N "$number" -t "$tracktitle" -
}

cd2ogg_cdparanoia()
{
    testpath cdparanoia
    testpath oggenc
    comment="comment=freecode.com/projects/cdwrite"
    cdparanoia -d $device -B $track - | \
        oggenc $ogg_bitrate -o "$directory/$number $tracktitle".ogg \
            -c "$comment" -a "$artist" -l "$title" -G "$genre" -d "$year" \
            -N "$number" -t "$tracktitle" -
}

for track in `seq 1 $trackno`
do
    tracktitle=`cat $tempfile | grep "track $track; " | sed "s/track $track; //"`
    number=$track
    if [ "$number" -lt "10" ]
    then
        number=0$number
    fi
    $command
done

cd "$directory"
settags
cd -

rm $tempfile

