1### (c)2000-2011 Robert Hegemann
2###
3### /<path>/<artist>/<year>-<album>/<track-no> <title>
4###
5### SRC_ROOT : where the CD are located
6### DST_ROOT : where newly encoded tracks should go
7### DONE_ROOT : where verified encoded tracks are located
8### LAME_EXE : points to program
9### LAME_OPT : what options to use
10################################################################
11_V=2
12SRC_ROOT=/windows/W/CD
13DST_ROOT=/windows/Z/mp3v${_V}wg
14DONE_ROOT=/windows/Z/mp3v${_V}wg
15LAME_EXE=lame-399
16LAME_OPT="-V${_V} --quiet --noreplaygain --id3v2-only"
17
18SKIP_DONE_FOLDER_EXISTS=1
19SKIP_DEST_FOLDER_EXISTS=1
20SCAN_ALBUM_GAIN_ONLY=0
21
22case "$0" in
23    mk_album_gain.sh) SCAN_ALBUM_GAIN_ONLY=1;;
24esac
25case "$1" in
26    --scan-gain-only) SCAN_ALBUM_GAIN_ONLY=1;;
27esac
28if [ $SCAN_ALBUM_GAIN_ONLY = 1 ]
29then
30    SKIP_DONE_FOLDER_EXISTS=0
31    SKIP_DEST_FOLDER_EXISTS=0
32fi
33
34if (test -e "${SRC_ROOT}")
35then
36    if test -e "${DST_ROOT}"
37    then
38        :
39    else
40        mkdir "${DST_ROOT}"
41    fi
42
43    for _artist in "${SRC_ROOT}"/*
44    do
45        _ARTIST=$(basename "${_artist}")
46        DST_ARTIST=${DST_ROOT}/${_ARTIST}
47        DS2_ARTIST=${DONE_ROOT}/${_ARTIST}
48        echo "${_ARTIST}"
49
50        VARIOUS_ARTISTS_MODE=0
51        case "${_ARTIST}" in
52        "Various" | "Various Artists" )
53            VARIOUS_ARTISTS_MODE=1
54            ID3_ALBUM_ARTIST="Various Artists"
55            ;;
56        "Musik Express" )
57            VARIOUS_ARTISTS_MODE=2
58            ID3_ALBUM_ARTIST="Various (ME)"
59            ;;
60        *)
61            VARIOUS_ARTISTS_MODE=0
62            ID3_ALBUM_ARTIST=${_ARTIST}
63            ;;
64        esac
65
66        for _cd in "${_artist}"/*
67        do
68            _CD=$(basename "${_cd}")
69            DST_CD=${DST_ARTIST}/${_CD}
70            DS2_CD=${DS2_ARTIST}/${_CD}
71            ID3_YR=`echo "${_CD}"|cut -b 1-4`
72            ID3_CD=`echo "${_CD}"|cut -b 6-`
73            if [ $SKIP_DONE_FOLDER_EXISTS = 1 ]
74            then
75                if test -e "${DS2_CD}"
76                then
77                    continue
78                fi
79            fi
80            if [ $SKIP_DEST_FOLDER_EXISTS = 1 ]
81            then
82                if test -e "${DST_CD}"
83                then
84                    continue
85                fi
86            fi
87            echo "${_ARTIST} / ${_CD}"
88
89            ALBUM_GAIN="1.0"
90            if test -e "${_cd}/album_gain_scale.txt"
91            then
92                ALBUM_GAIN=`cat "${_cd}/album_gain_scale.txt"`
93            elif test -e "${DS2_CD}/album_gain_scale.txt"
94            then
95                ALBUM_GAIN=`cat "${DS2_CD}/album_gain_scale.txt"`
96            elif test -e "${DST_CD}/album_gain_scale.txt"
97            then
98                ALBUM_GAIN=`cat "${DST_CD}/album_gain_scale.txt"`
99            else
100                unset ALBUM_GAIN
101            fi
102            if [ "${ALBUM_GAIN}" = "" ]
103            then
104                if test -e "${DST_ARTIST}"
105                then
106                    :
107                else
108                    mkdir "${DST_ARTIST}"
109                fi
110                if test -e "${DST_CD}"
111                then
112                    :
113                else
114                    mkdir "${DST_CD}"
115                fi
116                ALBUM_GAIN=`wavegain -x -a "${_cd}"/ 2>/dev/null`
117                echo ${ALBUM_GAIN} > "${DST_CD}/album_gain_scale.txt"
118            fi
119            if [ $SCAN_ALBUM_GAIN_ONLY = 1 ]
120            then
121                continue
122            fi
123
124            for _song in "${_cd}"/*.wav
125            do
126                _SONG=$(basename "${_song}" .wav)
127                DST_SONG=${DST_CD}/$(basename "${_song}" .wav).mp3
128                if test -e "${DST_SONG}"
129                then
130                    :
131                else
132                    if test -e "${DST_ARTIST}"
133                    then
134                        :
135                    else
136                        mkdir "${DST_ARTIST}"
137                    fi
138                    if test -e "${DST_CD}"
139                    then
140                        :
141                    else
142                        mkdir "${DST_CD}"
143                    fi
144                    ID3_TRACK=`echo "${_SONG}"|cut -b 1-2`
145                    if [ $VARIOUS_ARTISTS_MODE = 0 ]
146                    then
147                        ID3_TITLE=`echo "${_SONG}"|cut -b 4-`
148                        ID3_TRACK_ARTIST=${_ARTIST}
149                    else
150                        ID3_TITLE=`echo "${_SONG% - *}"|cut -b 4-`
151                        ID3_TRACK_ARTIST=`echo "${_SONG#* - }"`
152                    fi
153                    ${LAME_EXE} ${LAME_OPT} \
154                            --scale ${ALBUM_GAIN} \
155                            --ta "${ID3_TRACK_ARTIST}" \
156                            --tl "${ID3_CD}" \
157                            --ty "${ID3_YR}" \
158                            --tt "${ID3_TITLE}" \
159                            --tn "${ID3_TRACK}" \
160                            --tv "TXXX=ALBUM ARTIST=${ID3_ALBUM_ARTIST}" \
161                            --tv "TXXX=LAME SCALE=${ALBUM_GAIN}" \
162                            "${_song}" "${DST_SONG}" &
163                fi
164            done
165            wait
166        done
167    done
168else
169    echo Quellverzeichnis ${SRC_ROOT} existiert nicht.
170fi
171