#!/bin/bash

function set_bitrate {
    case $CHOICE in
	A) TMPRATE=32;;
	B) TMPRATE=40;;
	C) TMPRATE=48;;
	D) TMPRATE=56;;
	E) TMPRATE=64;;
	F) TMPRATE=80;;
	G) TMPRATE=96;;
	H) TMPRATE=112;;
	I) TMPRATE=128;;
	J) TMPRATE=160;;
	K) TMPRATE=192;;
	L) TMPRATE=224;;
	M) TMPRATE=256;;
	N) TMPRATE=320;;
	O) TMPRATE="128-320";;
    esac
}

function set_stereo {
    case $CHOICE in
	A) STEREO="-m s";;
	B) STEREO="-m j";;
	C) STEREO="-m m";;
    esac
}

function configure_mp3 {
    unset MP0
    unset MP1
    unset MP2
    unset MP3
    unset MP4
    [ -z "$ID3AFTER" ] && ID3AFTER=yes
    MENU="MP3 MENU"
    MENUCHOICES=menuchoices2
    MP0=("A" "Select bitrate                          [$TMPRATE]" \
	 "B" "Set stereo mode                         [$SMODE]" \
	 "C" "Mark as copyright                       [$COPYTAG]" \
	 "D" "Specify source file suffix              [$EXT]" \
	 "E" "Delete source files after encoding ?    [$RMSRC]" \
	 "F" "Working directory:" \
	 "-" "[$WDIR]" \
	 "G" "Set ID3-tags:                           [$ID3]")
    if [ "$ID3" = "on" ]; then
	if [ "$ID3AFTER" = "yes" ]; then
		MP1=("H" "..directly after encoding               [$ID3AFTER]")
	fi
	if [ "$ID3NOW" = "yes" ]; then
	    MP2=("H" "..on existing track(s) without encoding [$ID3NOW]")
	fi
	    MP3=("I" "Artist      [$ARTIST]" \
		 "J" "Album-title [$ALBUM]" \
		 "K" "Year        [$YEAR]" \
		 "L" "Genre       [$GENRE]" \
		 "M" "Comment     [$CMNT]")
	if [ "$ID3NOW" = "yes" ]; then
	    MP4=("N" "Set on all tracks without encoding" \
		 "O" "Set tags interactively on all tracks without encoding")
	fi
    fi
    MP5=("P" "Start Encoding")
    menubox "${MP0[@]}" "${MP1[@]}" "${MP2[@]}" "${MP3[@]}" "${MP4[@]}" "${MP5[@]}"
}

function after_encoding {
    [ "$RMSRC" = "yes" ] && rm -f $FILE

    [ -z "$GENRE" ] && GENRE=255

    if [ "$ID3" = "on" ]; then
	[ "$ID3AFTER" = "yes" ] && \
	id3ed -q \
	      -n "$ARTIST" \
	      -a "$ALBUM" \
	      -y "$YEAR" \
	      -c "$CMNT" \
	      -g "$GENRE" \
	      $NAME.mp3
    fi
}

function process_files {
    for FILE in $WDIR/*.$EXT; do
	case $FILE in
	    *.$EXT) NAME=${FILE%[.]$EXT}
    		    if notlame -h $BITRATE $STEREO $COPY $FILE ${NAME}.mp3 ; then
		       after_encoding
    		    fi
		    ;;
	    *)	    msgbox "No \"$EXT\" file(s) found !"
		    ;;
	esac
    done
}

function play_wav {

    WAVFILE=${INPUT:=*.$EXT}

    for FILE in $WAVFILE; do

	echo "Playing $WDIR/$FILE"
	play $WDIR/$FILE

    done

}

function play_mp3 {

    MP3FILE=${INPUT:=*.$EXT}

    for FILE in $MP3FILE; do

	echo "Playing $WDIR/$FILE"
	mpg123 -b 1024 $WDIR/$FILE

    done

}

function mp3_to_wav {

    for FILE in $WDIR/*.$EXT ; do

	BNAME=`basename ${FILE} ${EXT}`

	mpg123 -b 10000 -s $FILE | sox -t raw -r 44100 -s -w -c 2 - $OUTDIR/${BNAME}wav

    done
}

function menuchoices1 {
    case $choice in
	1)  configure_mp3 && saverc_user
	    ;;
	2)  EXT=mp3
	    choose_wdir
	    inputbox "Enter mp3 filename(s) separated by spaces
or hit enter for all files in this directory"
	    if [ "$RETVAL" = "0" ]; then
		exec_command "play_mp3" ; killall mpg123
	    fi
	    ;;
	3)  choose_wdir
	    inputbox "Specify playlist (or hit enter for \"$PLAYLIST\")"
	    if [ "$RETVAL" = "0" ]; then
		PLAYLIST=${INPUT:=$PLAYLIST}
		mpg123 -b 1024 < /bin/grep *.mp3 $WDIR/$PLAYLIST
		hit_enter
	    fi
	    ;;
	4)  EXT=wav
	    choose_wdir
	    inputbox "Enter WAV filename(s) separated by spaces
or hit enter for all files in this directory"
	    if [ "$RETVAL" = "0" ]; then
		exec_command "play_wav" ; killall sox
	    fi
	    ;;
	5)  EXT=mp3
	    choose_wdir
	    select_outputdir
	    if [ "$RETVAL" = "0" ]; then
		exec_command "mp3_to_wav" ; killall mpg123
	    fi
	    ;;
	esac
    mp3menu
}

function menuchoices2 {
    case $choice in
	A)  RAD="Select Bitrate"
	    INPUT=set_bitrate
	    STRING=("A" "32" off \
		    "B" "40" off \
		    "C" "48" off \
		    "D" "56" off \
		    "E" "64" off \
		    "F" "80" off \
		    "G" "96" off \
		    "H" "112" off \
		    "I" "128" off \
		    "J" "160" off \
		    "K" "192" off \
		    "L" "224" off \
		    "M" "256" on \
		    "N" "320" off \
		    "O" "Variable Bitrate 128-320" off)
	    radiolist "${STRING[@]}"
	    BITRATE="-b $TMPRATE"
	    [ "$TMPRATE" = "128-320" ] && \
	    BITRATE="-b 128 -B 320 -v -V 0"
	    ;;
	B)  RAD="Select Stereo Mode"
	    INPUT=set_stereo
	    STRING=(A "Stereo" off \
		    B "Joint Stereo" on \
		    C "Mono" off)
	    radiolist "${STRING[@]}"
	    [ "$STEREO" = "-m s" ] && SMODE="Stereo"
	    [ "$STEREO" = "-m j" ] && SMODE="Joint Stereo"
	    [ "$STEREO" = "-m m" ] && SMODE="Mono"
	    ;;
	C)  if [ "$COPY" = "-c" ]; then
		COPY=
		COPYTAG=no
	    else
		COPY=-c
		COPYTAG=yes
	    fi
	    ;;
	D)  inputbox "Specify file extension of the source files.
(wav or mp3 or cdda.wav, etc)"
	    EXT=${INPUT:=$EXT}
	    ;;
	E)  [ "$RMSRC" = "yes" ] && RMSRC=no || RMSRC=yes
	    ;;
	F)  FILES="*.$EXT"
	    choose_wdir
	    ;;
	G)  [ "$ID3" = "on" ] && ID3=off || ID3=on
	    ;;
	H)  [ "$ID3AFTER" = "yes" ] && ID3AFTER=no || ID3AFTER=yes
	    [ "$ID3AFTER" = "yes" ] && ID3NOW=no || ID3NOW=yes
	    ;;
	I)  inputbox "Artist:" 2> /dev/null; ARTIST=$INPUT
	    ;;
	J)  inputbox "Album: " 2> /dev/null; ALBUM=$INPUT
	    ;;
	K)  inputbox "Year: " 2> /dev/null; YEAR=$INPUT
	    ;;
	L)  inputbox "Genre: " 2> /dev/null; GENRE=$INPUT
	    ;;
	M)  inputbox "Comment: " 2> /dev/null; CMNT=$INPUT
	    ;;
	N)  clear
	    [ -z "$GENRE" ] && GENRE=255
	    id3ed -q -n "$ARTIST" -a "$ALBUM" -y "$YEAR" -c "$CMNT" -g "$GENRE" $WDIR/*.mp3
	    hit_enter
	    ;;
	O)  cd $WDIR
	    echo -e "`ls *.mp3`" > $TXTTMP
	    textbox $TXTTMP
	    inputbox "Which track ? (enter * for all tracks)"
	    TRACK=$INPUT
	    exec_command --xterm "id3ed $WDIR/$TRACK"
	    ;;
	P)  exec_command process_files
	    ;;
    esac
    configure_mp3
}
