#!/bin/bash #cue2tracks OPTSTRING=c:i:o:h while getopts ${OPTSTRING} NAME; do case ${NAME} in h) echo "usage: cue2tracks -c -i -o | -h" ;; c) CUE=${OPTARG} ;; i) INFORMAT=${OPTARG} ;; o) OUTFORMAT=${OPTARG} ;; esac done case ${INFORMAT} in mp3) which lame &>/dev/null || (echo lame required to decode mp3 files, exiting; exit 50) ;; ogg) which oggdec &>/dev/null || (echo oggdec required to decode ogg files, exiting; exit 51) ;; wav) : ;; ape) which mac &>/dev/null || (echo mac required to decode ape files, exiting; exit 52) ;; mpc) which mppdec &>/dev/null || (echo mppdec required to decode mpc files, exiting; exit 53) ;; flac) which flac &>/dev/null || (echo flac required to decode flac files, exiting; exit 54) ;; *) echo "cue2tracks can't handle this input format"; exit 60 ;; esac case ${OUTFORMAT} in mp3) which lame &>/dev/null || (echo lame required to encode mp3 files, exiting; exit 55) ;; ogg) which oggenc &>/dev/null || (echo oggenc required to encode ogg files, exiting; exit 56) ;; wav) : ;; ape) which mac &>/dev/null || (echo mac required to encode ape files, exiting; exit 57) ;; mpc) which mppenc &>/dev/null || (echo mppenc required to encode mpc files, exiting; exit 58) ;; flac) which flac &>/dev/null || (echo flac required to encode flac files, exiting; exit 59) ;; *) echo "cue2tracks can't handle this output format"; exit 61 ;; esac [ -e "${CUE}" ] || (echo "cue2tracks can't find ${CUE}", exit 62) INFILE="${CUE%cue}${INFORMAT}"; [ -e "${INFILE}" ] || (echo "cue2tracks can't find ${INFILE}"; exit 63) which sox &>/dev/null || (echo sox is required by cue2tracks, exiting; exit 64) gettracksnames() { n=1 while read TRACK; do eval TRACK${n}=\"$(printf "%02d - ${TRACK}" $n)\" ((n++)) done <<<"$(awk -F'"' '/ TITLE/{print $2}' "${CUE}")" NUMBER=$((n-1)); BNUMBER=$n } gettracksnames gettrackslengths() { n=1; while read TIME; do set ${TIME//:/ } case $# in 3) eval OFFSET${n}=$(((60*10#$1)+10#$2))${3/$'\r'} ;; 4) eval OFFSET${n}=$(((3600*10#$1)+(60*10#$2)+10#$3))${4/$'\r'} ;; esac ((n++)) done <<<"$(awk '/INDEX 01/{print $3}' "${CUE}")" } gettrackslengths towav() { TMPWAV="${INFILE%${INFORMAT}}"wav erase=1 case ${INFORMAT} in wav) erase=0 ;; mp3) lame --decode "${INFILE}" "${TMPWAV}" ;; ogg) oggdec "${INFILE}" -o "${TMPWAV}" ;; ape) mac "${INFILE}" "${TMPWAV}" -d ;; mpc) mppdec "${INFILE}" "${TMPWAV}" ;; flac) flac -d "${INFILE}" ;; esac } towav gettotallength() { LENGTH=$(sox "${TMPWAV}" -e stat 2>&1 | awk '/Length/{print $3}') set ${LENGTH/./ } eval OFFSET$BNUMBER="${1}${2:0:2}" } gettotallength splitandconvert() { for ((n=1,m=2;n<=NUMBER;n++,m++)); do eval debut=\${OFFSET$n} eval fin=\${OFFSET$m} eval trackname=\${TRACK$n} duree=$((fin-debut)) offset1=$((debut/360000)):$((debut%360000/6000)):$((debut%360000%6000/100)).$((debut%360000%6000%100)) offset2=$((duree/360000)):$((duree%360000/6000)):$((duree%360000%6000/100)).$((duree%360000%6000%100)) sox "${TMPWAV}" "${trackname}".wav trim "${offset1}" "${offset2}" case ${OUTFORMAT} in mp3) lame --preset insame "${trackname}".wav "${trackname}".mp3 ;; ogg) oggenc -q 10 "${trackname}".wav -o "${trackname}".ogg ;; wav) : ;; ape) mac "${trackname}".wav "${trackname}".ape -c5000 ;; mpc) mppenc --xtreme "${trackname}".wav ;; flac) flac -8 "${trackname}".wav ;; esac ((erase)) && rm -f "${trackname}".wav done } splitandconvert ((erase)) && rm -f "${TMPWAV}" exit 0