Split Music Image in Debian

Share my script used to split music image file into indivdual track of wav or flac

OS: Debian/ununtu

Install necessary tool:

sudo apt-get clean

sudo apt-get update

sudo apt-get install -y shntool dos2unix enca flac ffmpeg

Convert

# output track in wav format

sudo split.sh CDImage.wav wav

# output track in flac format

sudo split.sh CDImage.wav flac

Split.sh

#/bin/bash

if [ $# -ne 2 ] && [ $# -ne 1 ]
then

echo "Usage:   sudo split.sh FILE [DECODE]"
echo "Example: sudo split.sh CDImage wav"
echo "         sudo split.sh CDImage flac"
echo "         sudo split.sh CDImage.wav"
echo "         sudo split.sh CDImage.wav flac"
echo "         sudo split.sh CDImage"
echo "Note:"
echo "         The Input Audio File =   FILE.wav or FILE.flac or FILE.ape"
echo "         DECODE               =   wav or flac (Output Audio Format)"
echo "         The Input CUE File   =   FILE.cue"
exit

fi


BFILE=$1

if [ -f ${BFILE} ];then
  AUDIO_FILE=${BFILE}
  EXT=${BFILE##*.}
  case $EXT in
    "wav"|"WAV")
       FORMAT="wav"
       ;;
    "flac"|"FLAC")
       FORMAT="flac"
       ;;
    "ape"|"APE")
       FORMAT="ape"
       ;;
    esac
else if [ -f $BFILE.wav ];then
       AUDIO_FILE=$BFILE.wav
       FORMAT="wav"
     else if [ -f $BFILE.flac ];then
             AUDIO_FILE=$BFILE.flac
             FORMAT="flac"
          else if [ -f $BFILE.ape ];then
                 AUDIO_FILE=$BFILE.ape
                 FORMAT="ape"
               else
                 echo "Not found audio file: $1.wav or $1.flac or $1.ape "
                 echo "Exit"
                 exit
               fi
          fi  
     fi
fi


if [ $# -ne 1 ];then
DECODE=$2
fi

if [ "A${DECODE}B" = "AB" ];then
  DECODE="wav"
fi


if [ "A${FORMAT}B" = "AB" ];then
  FORMAT="${DECODE}"
fi

if [ "A${DECODE}B" = "AapeB" ];then
  DECODE="wav"
fi


echo "Audio  File   = ${AUDIO_FILE}"
echo "Input  Format = ${FORMAT} " 
echo "Output Format = ${DECODE} "


if [ "$FORMAT" = "ape" ]
then
echo -e "First, convert ape format to ${DECODE} format, waite a minute..."
DECODE_FILE=$BFILE.${DECODE}
#avconv -i "$AUDIO_FILE" "$DECODE_FILE"
ffmpeg -i "$AUDIO_FILE" "$DECODE_FILE"
AUDIO_FILE=$DECODE_FILE
CONVERT="true"
FORMAT="${DECODE}"
fi


#if [ ! "$DECODE" = "$FORMAT" ];then
#echo -e "First, convert ${FORMAT} format to ${DECODE} format, waite a 
#minute..."
#DECODE_FILE=$BFILE.${DECODE}
#avconv -i "$AUDIO_FILE" "$DECODE_FILE"
#ffmpeg -i "$AUDIO_FILE" "$DECODE_FILE"
#AUDIO_FILE=$DECODE_FILE
#CONVERT="true"
#fi


CUE_FILE=$BFILE.cue
CUE_FILE_LINUX=$BFILE-linux.cue

if [ ! -f ${CUE_FILE} ];then
  MY_DIR="`dirname ${BFILE}`"
  MY_NAME="`basename ${BFILE}`"
  MY_BASE="${MY_NAME%.*}"
  CUE_FILE=${MY_DIR}/${MY_BASE}.cue
  if [ ! -f ${CUE_FILE} ];then
   echo "unable to find cue file of:"
   echo "  $BFILE.cue or ${CUE_FILE} "
   exit
  fi
fi

CODE="`enca ${CUE_FILE} |grep ";"|sed "s/.*; //"`"
echo "CODE=${CODE}"

echo iconv -f "${CODE}" -t utf8 "$CUE_FILE" -o "$CUE_FILE_LINUX"

iconv -f "${CODE}" -t utf8 "$CUE_FILE" -o "$CUE_FILE_LINUX"


dos2unix "$CUE_FILE_LINUX"


echo shntool split -t "%n-%t" -f "$CUE_FILE_LINUX" -o $DECODE "$AUDIO_FILE"
shntool split -t "%n-%t" -f "$CUE_FILE_LINUX" -o $DECODE "$AUDIO_FILE"


if [ "$CONVERT" = "true" ]
then
if [ ! "AB" = "A${DECODE_FILE}B" ];then
  if [ -f ${DECODE_FILE} ];then
   echo -e "Remove temporary flac file: $DECODE_FILE"
   rm -f "$DECODE_FILE"
  fi
fi

fi