All pastes #24852 Raw Edit

Unnamed

public shellscript v1 · immutable
#24852 ·published 2005-10-07 16:09 UTC
rendered paste body
#!/bin/sh# convert 'non-compliant' cuesheet, created with EAC (with gaps added to prev track)# to 'single-file' joined cuesum() {    F=$(($FI+$FL)); FF=$(($F%75)) # frames    S=$(($SI+$SL)); SS=$(($S%60+$F/75)); [ $SS -ge 60 ] && S=$SS # seconds    M=$(($MI+$ML)); MM=$(($M+$S/60)) # minutes    SS="${SS/60/00}"; FF="${FF/75/00}"}leadzero() {    [ ${#MM} -lt 2 ] && MM=0$MM; [ ${#SS} -lt 2 ] && SS=0$SS; [ ${#FF} -lt 2 ] && FF=0$FF}if [ -z "$1" ]; then    echo "Usage: $0 <cuesheet.cue>"else    sed '/\<REM\> /d; /./!d' "$1" | dos2unix > TMP.CUE # clean comments and blank lines    IDX=$(shntool len "`grep FILE TMP.CUE | head -n1 | cut -d'"' -f2`" | tail -n2 | head -n1 |        sed 's/^[ ]*//; s/ .*//; s/\./:/')    [ ${#IDX} -lt 9 ] && IDX=0$IDX    # process first two tracks    grep -B100 "TRACK 02" TMP.CUE | sed '/FILE/d' | sed '$D' > NEW.CUE # start new cue (sed cuts last line)    sed -n '/TRACK 02/,/TRACK 03/p' TMP.CUE | sed "s/\(.*INDEX 01 \).*/\1$IDX/; /FILE /d" | sed '$D' >> NEW.CUE    # collect some data: 'INDEX 00' of track XX -> I[XX], length of track XX -> L[XX]    NT=`grep TRACK TMP.CUE | tail -n1 | sed 's:[^0-9]::g'` # number of tracks    C=1    while [ $C -le $NT ]; do        CN=$(($C+1))        # extract range of cuesheet for current track        sed -n "/TRACK `[ ${#C} -lt 2 ] && echo 0$C || echo $C`/,/TRACK `[ ${#CN} -lt 2 ] && echo 0$CN || echo $CN`/p" \            TMP.CUE > RANGE        if grep -q "INDEX 00" RANGE; then            I[$C]=$(echo `grep "INDEX 00" RANGE | sed 's/.* 00 //; s/:0/:/g; s/^0//'`) # index 00        fi        # get length of referenced file        FILE=`grep FILE TMP.CUE | head -n$C | tail -n1 | cut -d'"' -f2`	L[$C]=$(shntool len "$FILE" | tail -n2 | head -n1 | sed 's/^[ ]*//; s/ .*//; s/\./:/; s/:0/:/g')        C=$CN    done    # process tracks from No.3    C=3    while [ $C -le $NT ]; do        CP=$(($C-1)); CN=$(($C+1))        ML=`echo ${IDX/#0} | cut -d: -f1`; SL=`echo ${IDX/#0} | cut -d: -f2`; FL=`echo ${IDX/#0} | cut -d: -f3`        # if 'INDEX 00' presented, calculate its absolute position        if [ -n "${I[$C]}" ]; then            MI=`echo ${I[$C]} | cut -d: -f1`; SI=`echo ${I[$C]} | cut -d: -f2`; FI=`echo ${I[$C]} | cut -d: -f3`            sum            leadzero            IDX0="$MM:$SS:$FF"        fi        # calculate abs pos of 'INDEX 01'        MI=`echo ${L[$CP]} | cut -d: -f1`; SI=`echo ${L[$CP]} | cut -d: -f2`; FI=`echo ${L[$CP]} | cut -d: -f3`        sum        IDX="$MM:$SS:$FF"	leadzero        IDX1="$MM:$SS:$FF"        # replace indeces and append modified range to new cue        sed -n "/TRACK `[ ${#C} -lt 2 ] && echo 0$C || echo $C`/,/TRACK `[ ${#CN} -lt 2 ] && echo 0$CN || echo $CN`/p" \            TMP.CUE | sed '$D' | sed "s/\(.*INDEX 00 \).*/\1$IDX0/; s/\(.*INDEX 01 \).*/\1$IDX1/; /FILE/d" >> \            NEW.CUE        IDX0=""        C=$CN    done    # process last track    ML=`echo ${IDX/#0} | cut -d: -f1`; SL=`echo ${IDX/#0} | cut -d: -f2`; FL=`echo ${IDX/#0} | cut -d: -f3`    MI=`echo ${L[$NT]} | cut -d: -f1`; SI=`echo ${L[$NT]} | cut -d: -f2`; FI=`echo ${L[$NT]} | cut -d: -f3`    leadzero    tail -n1 TMP.CUE | sed "s/\(.*INDEX 01 \).*/\1$MM:$SS:$FF/" >> NEW.CUE # finish new cue    echo FILE "joined.wav" WAVE > joined.cue    cat NEW.CUE >> joined.cue    rm -f {TMP,NEW}.CUE RANGE # clean junk    echo "All done, check joined.cue"fi