#!/bin/sh
#
# TODO:
#  * Autodetect input file format
#  * Decode (ape/flac) the big input file to WAV instead of assuming it is WAV
#  * Try to guess filename parameters from what is available in current directory

#set -x

#for i in 1 2 3 4 5 6 7 8 9; do unset name ; name="`grep "TRACK 0${i}" -A 1 CDImage.flac.cue |grep TITLE|sed 's/ *TITLE "\(.*\)"/\1/'`";  echo -"${name}"- ; done

#flac -d --cue=${i}.1-$((${i}+1)).1

track_name()
{
  CUE_FILE="$1"
  TRACK=$2

  if test ${TRACK} -lt 10; then TRACK=0${TRACK}; fi

  grep "TRACK ${TRACK}" -A 1 "${CUE_FILE}" |grep TITLE|sed 's/ *TITLE "\(.*\)"/\1/'|tr -d '\r'
}

tracks_count()
{
  CUE_FILE="$1"

  grep TRACK "$1"|wc -l
}

flac_split()
{
  CUE_FILE="$1"
  FLAC_FILE="$2"
  ARTIST="$3"
  ALBUM="$4"
  TRACKS="1 2 3 4 5 6 7 8 9"

  for TRACK in ${TRACKS}
  do
      NAME=`track_name "${CUE_FILE}" ${TRACK}`
      if test ${TRACK} -lt 10; then TRACKPLUS=0${TRACK}; else TRACKPLUS=${TRACK}; fi
      FILENAME="${TRACKPLUS} - `echo ${NAME}|sed 's/\//|/'`"
      echo -n "Extracting \"${FILENAME}\"... "
      flac -s -d --cue=${TRACK}.1-$((${TRACK}+1)).1 -o "${FILENAME}.wav" "${FLAC_FILE}"
      echo "done."
      #echo -n "Encoding \"${FILENAME}\"... "
      #oggenc -Q -q 8 -a "${ARTIST}" -l "${ALBUM}" -t "${NAME}" -N ${TRACK} "${FILENAME}.wav"
      #echo "done."
      #rm "${FILENAME}.wav"
  done
}

wav_split()
{
  CUE_FILE="$1"
  WAV_FILE="$2"
  ARTIST="$3"
  ALBUM="$4"
#  TRACKS="1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16"
#  TRACKS="1 2 3 4 5 6 7 8 9 10 11"
#  TRACKS="1"

  TRACKS_COUNT=`tracks_count "${CUE_FILE}"`

  echo "Artist: ${ARTIST}"
  echo "Album: ${ALBUM}"
  echo "Tracks count: ${TRACKS_COUNT}"

  TRACK=1
  while test ${TRACK} -le ${TRACKS_COUNT}
  do
    TRACKS="${TRACKS} ${TRACK}"
    TRACK=$((${TRACK}+1))
  done

#  echo "Tracks: \"${TRACKS}\""

  for TRACK in ${TRACKS}
  do
    NAME=`track_name "${CUE_FILE}" ${TRACK}`
    if test ${TRACK} -lt 10; then TRACKPLUS=0${TRACK}; else TRACKPLUS=${TRACK}; fi
    echo "${TRACKPLUS} - ${NAME}"
  done

  echo -n "Press enter to start splitting or Crtl-C to abort: "

  read

  echo "---------------------"

#  bchunk -w "${WAV_FILE}" "${CUE_FILE}" split-track0 # !!!!!!!!!!!!!!! produces click in the begining of first track
#  exit 0

  cuebreakpoints "${CUE_FILE}" | shntool split -o wav "${WAV_FILE}"

  for TRACK in ${TRACKS}
  do
    NAME=`track_name "${CUE_FILE}" ${TRACK}`
    if test ${TRACK} -lt 10; then TRACKPLUS=0${TRACK}; else TRACKPLUS=${TRACK}; fi
    FILENAME="${TRACKPLUS} - `echo ${NAME}|sed 's/\//|/'`"
    mv -v split-track0${TRACKPLUS}.wav "${FILENAME}.wav"
  done

  echo "Splitting complete."
  echo -n "Press enter to start encoding or Crtl-C to abort: "

  read

  echo "---------------------"

  for TRACK in ${TRACKS}
  do
    NAME=`track_name "${CUE_FILE}" ${TRACK}`
    if test ${TRACK} -lt 10; then TRACKPLUS=0${TRACK}; else TRACKPLUS=${TRACK}; fi
    FILENAME="${TRACKPLUS} - `echo ${NAME}|sed 's/\//|/'`"
    echo -n "Encoding \"${NAME}\" as \"${FILENAME}\"... "
    oggenc -Q -q 8 -a "${ARTIST}" -l "${ALBUM}" -t "${NAME}" -N ${TRACK} "${FILENAME}.wav"
    echo "done."
    rm "${FILENAME}.wav"
  done

  echo "Encoding complete."
}

wav_split "$1" "$2" "$3" "$4"
#flac_split "$1" "$2" "$3" "$4"
#wav_split "CDImage.cue" "CDImage.wav" "Roxette" "Joyride"
#flac_split "CDImage.flac.cue" "CDImage.flac" "Roxette" "Room Service"


#http://www.hydrogenaudio.org/forums/index.php?showtopic=43801
#cuebreakpoints cdimage.cue | shntool split cdimage.wav

