#!/bin/bash
# ---------------------------------------------------------------------------- #
## \file raw2mp3.sh
## \author Sebastien Beaugrand
## \sa http://beaugrand.chez.com/
## \copyright CeCILL 2.1 Free Software license
# ---------------------------------------------------------------------------- #
# ffmpeg -i .mp4 -vcodec null -acodec pcm_s16le output.wav
# mv output.wav output.raw
# ---------------------------------------------------------------------------- #
silence_duration=0.01
if [ -n "$1" ]; then
    silence_duration=$1
fi

nbraw=`ls *.raw | wc -l`
for ((i = 1; i <= nbraw; ++i)); do
    if [ ! -f t.txt ]; then
        echo "warning: t.txt not found"
    elif grep SNG_TITLE t.txt >/dev/null; then
        cp t.txt t.bak
        sed 's/","/\n/g' t.bak | grep SNG_TITLE | cut -d '"' -f 3 >t.txt
        cat t.txt
        cat t.txt | wc -l
    fi
    raw=`ls *.raw | head -n $i | tail -n 1`
    rate=`ffprobe -show_streams $raw 2>/dev/null | grep sample_rate | cut -d '=' -f 2`
    echo -n "split $raw at $rate Hz ? (o/N) "
    read ret
    if [ "$ret" = o ]; then
        sox -t s16 -c 2 -r $rate $raw 0.wav silence \
            1 $silence_duration 0% 1 $silence_duration 0% : newfile : restart
        tmp=/tmp/wav2mp3.tmp
        ls 0???.wav >$tmp
        nbwav=`ls 0???.wav | wc -l`
        for ((j = 1; j <= nbwav; ++j)); do
            src=`head -n $j $tmp | tail -n 1`
            size=`stat -c "%s" $src`
            size=`printf "%10d" $size`
            echo `soxi -d $src`" $size $src"
        done
        for ((j = 1; j <= nbwav; ++j)); do
            src=`head -n $j $tmp | tail -n 1`
            for ((k = 1;; ++k)); do
                dst=`printf "%02d" $k`.wav
                if [ -f $dst ]; then
                    continue;
                fi
                if [ ! -f t.txt ] ||
                    [ -n "`head -n $k t.txt | tail -n 1`" ]; then
                    break;
                fi
            done
            echo -n "$src ==> $dst ? (O/n/d) "
            read ret
            if [ "$ret" = d ]; then
                rm $src
            elif [ "$ret" != n ]; then
                mv $src $dst
            fi
        done
        rm $tmp
    fi
done
ls -l

bitrate=192
echo -n "bitrate ? [$bitrate] "
read ret
if [ -n "$ret" ]; then
    bitrate=$ret
fi

nbwav=`ls *.wav | wc -l`
for ((i = 1; i <= nbwav; ++i)); do
    wav=`ls *.wav | head -n $i | tail -n 1`
    if [ -f t.txt ]; then
        j=${wav:0:2}
        k=`echo $j | awk '{ print $0+0 }'`
        mp3="$j - `head -n $k t.txt | tail -n 1`.mp3"
    else
        mp3=${wav/%.wav/.mp3}
    fi
    if [ -f "$mp3" ]; then
        echo -n "$mp3 existe, ecraser ? (o/N) "
        read ret
        if [ "$ret" != o ]; then
            continue
        fi
    fi
    echo "$wav ==> $mp3"
    lame -q 0 -b $bitrate --cbr -S "$wav" "$mp3"
done