History

use tabs instead of spaces if possible

Serge Zirukin committed 16 years ago

Commit 10bb59c1 parent 390d89d1 file · +458 −458Browse files

Unified · Split

split2flac.sh+458−458
@@ -96,73 +96,73 @@ It also supports internal CUE sheets (FLAC, APE and WV)." · 95 unmodified lines
9696 msg="echo -e"
9797
9898 emsg () {
99− $msg "${cR}$1${cZ}"
99+ $msg "${cR}$1${cZ}"
100100 }
101101
102102 update_colors () {
103− if [ "${NOCOLORS}" -eq 0 ]; then
104− cR="\033[31m"
105− cG="\033[32m"
106− cC="\033[35m"
107− cP="\033[36m"
108− cU="\033[4m"
109− cZ="\033[0m"
110− else
111− unset cR cG cC cP cU cZ
112− fi
103+ if [ "${NOCOLORS}" -eq 0 ]; then
104+ cR="\033[31m"
105+ cG="\033[32m"
106+ cC="\033[35m"
107+ cP="\033[36m"
108+ cU="\033[4m"
109+ cZ="\033[0m"
110+ else
111+ unset cR cG cC cP cU cZ
112+ fi
113113 }
114114
115115 update_colors
116116
117117 # parse arguments
118118 while [ "$1" ]; do
119− case "$1" in
120− -o) DIR=$2; shift;;
121− -cue) CUE=$2; shift;;
122− -cuecharset) CHARSET=$2; shift;;
123− -f) FORMAT=$2; shift;;
124− -c) NOPIC=0; PIC=$2; shift;;
125− -nc) NOPIC=1;;
126− -cs) PIC_SIZE=$2; shift;;
127− -d) NOSUBDIRS=0;;
128− -nd) NOSUBDIRS=1;;
129− -r) NORENAME=0;;
130− -nr) NORENAME=1;;
131− -p) DRY=1;;
132− -D) REMOVE=1;;
133− -nD) REMOVE=0;;
134− -F) FORCE=1;;
135− -colors) NOCOLORS=0; update_colors;;
136− -nocolors) NOCOLORS=1; update_colors;;
137− -s) SAVE=1;;
138− -h|--help|-help) eval "$msg \"${HELP}\""; exit 0;;
139− -v|--version) $msg "split2${FORMAT} version: ${VERSION}"; exit 0;;
140− -*) eval "$msg \"${HELP}\""; emsg "\nUnknown option $1"; exit 1;;
141− *)
142− if [ "${INPATH}" ]; then
143− eval "$msg \"${HELP}\""
144− emsg "\nUnknown option $1"
145− exit 1
146− elif [ ! -r "$1" ]; then
147− emsg "Unable to read $1"
148− exit 2
149− else
150− INPATH="$1"
151− fi;;
152− esac
153− shift
119+ case "$1" in
120+ -o) DIR=$2; shift;;
121+ -cue) CUE=$2; shift;;
122+ -cuecharset) CHARSET=$2; shift;;
123+ -f) FORMAT=$2; shift;;
124+ -c) NOPIC=0; PIC=$2; shift;;
125+ -nc) NOPIC=1;;
126+ -cs) PIC_SIZE=$2; shift;;
127+ -d) NOSUBDIRS=0;;
128+ -nd) NOSUBDIRS=1;;
129+ -r) NORENAME=0;;
130+ -nr) NORENAME=1;;
131+ -p) DRY=1;;
132+ -D) REMOVE=1;;
133+ -nD) REMOVE=0;;
134+ -F) FORCE=1;;
135+ -colors) NOCOLORS=0; update_colors;;
136+ -nocolors) NOCOLORS=1; update_colors;;
137+ -s) SAVE=1;;
138+ -h|--help|-help) eval "$msg \"${HELP}\""; exit 0;;
139+ -v|--version) $msg "split2${FORMAT} version: ${VERSION}"; exit 0;;
140+ -*) eval "$msg \"${HELP}\""; emsg "\nUnknown option $1"; exit 1;;
141+ *)
142+ if [ "${INPATH}" ]; then
143+ eval "$msg \"${HELP}\""
144+ emsg "\nUnknown option $1"
145+ exit 1
146+ elif [ ! -r "$1" ]; then
147+ emsg "Unable to read $1"
148+ exit 2
149+ else
150+ INPATH="$1"
151+ fi;;
152+ esac
153+ shift
154154 done
155155
156156 # save configuration if needed
157157 if [ ${SAVE} -eq 1 ]; then
158− echo "DIR=\"${DIR}\"" > "${CONFIG}"
159− echo "NOSUBDIRS=${NOSUBDIRS}" >> "${CONFIG}"
160− echo "NORENAME=${NORENAME}" >> "${CONFIG}"
161− echo "NOPIC=${NOPIC}" >> "${CONFIG}"
162− echo "REMOVE=${REMOVE}" >> "${CONFIG}"
163− echo "PIC_SIZE=${PIC_SIZE}" >> "${CONFIG}"
164− echo "NOCOLORS=${NOCOLORS}" >> "${CONFIG}"
165− $msg "${cP}Configuration saved$cZ"
158+ echo "DIR=\"${DIR}\"" > "${CONFIG}"
159+ echo "NOSUBDIRS=${NOSUBDIRS}" >> "${CONFIG}"
160+ echo "NORENAME=${NORENAME}" >> "${CONFIG}"
161+ echo "NOPIC=${NOPIC}" >> "${CONFIG}"
162+ echo "REMOVE=${REMOVE}" >> "${CONFIG}"
163+ echo "PIC_SIZE=${PIC_SIZE}" >> "${CONFIG}"
164+ echo "NOCOLORS=${NOCOLORS}" >> "${CONFIG}"
165+ $msg "${cP}Configuration saved$cZ"
166166 fi
167167
168168 METAFLAC="metaflac --no-utf8-convert"
@@ -175,427 +175,427 @@ VALIDATE="sed s/[^-[:space:][:alnum:]&_#,.'\"\(\)!?]//g" · 6 unmodified lines
175175 # check & print output format
176176 msg_format="${cG}Output format :$cZ"
177177 case ${FORMAT} in
178− flac) $msg "$msg_format FLAC";;
179− m4a) $msg "$msg_format M4A";;
180− mp3) $msg "$msg_format MP3";;
181− ogg) $msg "$msg_format OGG VORBIS";;
182− wav) $msg "$msg_format WAVE";;
183− *) emsg "Unknown output format \"${FORMAT}\""; exit 1;;
178+ flac) $msg "$msg_format FLAC";;
179+ m4a) $msg "$msg_format M4A";;
180+ mp3) $msg "$msg_format MP3";;
181+ ogg) $msg "$msg_format OGG VORBIS";;
182+ wav) $msg "$msg_format WAVE";;
183+ *) emsg "Unknown output format \"${FORMAT}\""; exit 1;;
184184 esac
185185
186186 $msg "${cG}Output dir :$cZ ${DIR:?Output directory was not set}"
187187
188188 # splits a file
189189 split_file () {
190− FILE="$1"
191−
192− if [ ! -r "${FILE}" ]; then
193− emsg "Can not read the file"
194− return 1
195− fi
196−
197− # search for a cue sheet if not specified
198− if [ -z "${CUE}" ]; then
199− CUE="${FILE}.cue"
200− if [ ! -r "${CUE}" ]; then
201− CUE="${FILE%.*}.cue"
202− if [ ! -r "${CUE}" ]; then
203− # try to extract internal one
204− CUESHEET=$(${METAFLAC} --show-tag=CUESHEET "${FILE}" 2>/dev/null | sed 's/^cuesheet=//;s/^CUESHEET=//')
205−
206− # try WV internal cue sheet
207− if [ -z "${CUESHEET}" ]; then
208− CUESHEET=$(wvunpack -q -c "${FILE}" 2>/dev/null)
209− fi
210−
211− # try APE internal cue sheet (omfg!)
212− if [ -z "${CUESHEET}" ]; then
213− APETAGEX=$(tail -c 32 "$1" | cut -b 1-8 2>/dev/null)
214− if [ "${APETAGEX}" = "APETAGEX" ]; then
215− LENGTH=$(tail -c 32 "$1" | cut -b 13-16 | od -t u4 | awk '{printf $2}') 2>/dev/null
216− tail -c ${LENGTH} "$1" | grep -a CUESHEET >/dev/null 2>&1
217− if [ $? -eq 0 ]; then
218− CUESHEET=$(tail -c ${LENGTH} "$1" | sed 's/.*CUESHEET.//g' 2>/dev/null)
219− if [ $? -ne 0 ]; then
220− CUESHEET=""
221− fi
222− fi
223− fi
224− fi
225−
226− if [ "${CUESHEET}" ]; then
227− $msg "${cP}Found internal cue sheet$cZ"
228− CUE="${TMPCUE}"
229− echo "${CUESHEET}" > "${CUE}"
230−
231− if [ $? -ne 0 ]; then
232− emsg "Unable to save internal cue sheet"
233− return 1
234− fi
235− else
236− unset CUE
237− fi
238− fi
239− fi
240− fi
241−
242− # print cue sheet filename
243− if [ -z "${CUE}" ]; then
244− emsg "No cue sheet"
245− return 1
246− fi
247−
248− if [ "${CHARSET}" ]; then
249− $msg "${cG}Cue charset : $cP${CHARSET} -> utf-8$cZ"
250− CUESHEET=$(iconv -c -f "${CHARSET}" -t utf-8 "${CUE}" 2>/dev/null)
251− if [ $? -ne 0 ]; then
252− emsg "Unable to convert cue sheet from ${CHARSET} to utf-8"
253− return 1
254− fi
255− CUE="${TMPCUE}"
256− echo "${CUESHEET}" > "${CUE}"
257−
258− if [ $? -ne 0 ]; then
259− emsg "Unable to save converted cue sheet"
260− return 1
261− fi
262− fi
263−
264− # search for a front cover image
265− if [ ${NOPIC} -eq 1 ]; then
266− unset PIC
267− elif [ -z "${PIC}" ]; then
268− # try common names
269− SDIR=$(dirname "${FILE}")
270−
271− for i in cover.jpg front_cover.jpg folder.jpg; do
272− if [ -r "${SDIR}/$i" ]; then
273− PIC="${SDIR}/$i"
274− break
275− fi
276− done
277−
278− # try to extract internal one
279− if [ -z "${PIC}" ]; then
280− ${METAFLAC} --export-picture-to="${TMPPIC}" "${FILE}" 2>/dev/null
281− if [ $? -ne 0 ]; then
282− unset PIC
283− else
284− PIC="${TMPPIC}"
285− fi
286− fi
287− fi
288−
289− $msg "${cG}Cue sheet :$cZ ${CUE}"
290− $msg "${cG}Cover image :$cZ ${PIC:-not set}"
291−
292− # file removal warning
293− if [ ${REMOVE} -eq 1 ]; then
294− msg_removal="\n${cR}Also remove original"
295− if [ ${FORCE} -eq 1 ]; then
296− $msg "$msg_removal (WITHOUT ASKING)$cZ"
297− else
298− $msg "$msg_removal if user says 'y'$cZ"
299− fi
300− fi
301−
302− # get common tags
303− TAG_ARTIST=$(${GETTAG} %P "${CUE}" 2>/dev/null)
304− TAG_ALBUM=$(${GETTAG} %T "${CUE}" 2>/dev/null)
305− TRACKS_NUM=$(${GETTAG} %N "${CUE}" 2>/dev/null)
306−
307− if [ -z "${TRACKS_NUM}" ]; then
308− emsg "Failed to get number of tracks from CUE sheet."
309− emsg "There may be an error in the sheet."
310− emsg "Running ${GETTAG} %N \"${CUE}\" produces this:"
311− ${GETTAG} %N "${CUE}"
312− return 1
313− fi
314−
315− TAG_GENRE=$(awk '{ if (/REM[ \t]+GENRE[ \t]+(.*)/) { print $0; exit } }' < "${CUE}")
316− TAG_GENRE=$(echo ${TAG_GENRE} | sed 's/REM[ \t]\+GENRE[ \t]\+//;s/"\(.*\)"/\1/')
317−
318− YEAR=$(awk '{ if (/REM[ \t]+DATE/) { printf "%i", $3; exit } }' < "${CUE}")
319− YEAR=$(echo ${YEAR} | tr -d -c '[:digit:]')
320−
321− unset TAG_DATE
322−
323− if [ "${YEAR}" ]; then
324− if [ ${YEAR} -ne 0 ]; then
325− TAG_DATE="${YEAR}"
326− fi
327− fi
328−
329− $msg "\n${cG}Artist :$cZ ${TAG_ARTIST}"
330− $msg "${cG}Album :$cZ ${TAG_ALBUM}"
331− if [ "${TAG_GENRE}" ]; then
332− $msg "${cG}Genre :$cZ ${TAG_GENRE}"
333− fi
334− if [ "${TAG_DATE}" ]; then
335− $msg "${cG}Year :$cZ ${TAG_DATE}"
336− fi
337− $msg "${cG}Tracks :$cZ ${TRACKS_NUM}\n"
338−
339− # prepare output directory
340− OUT="${DIR}"
341−
342− if [ ${NOSUBDIRS} -ne 1 ]; then
343− DIR_ARTIST=$(echo ${TAG_ARTIST} | ${VALIDATE})
344− DIR_ALBUM=$(echo ${TAG_ALBUM} | ${VALIDATE})
345−
346− if [ "${TAG_DATE}" ]; then
347− DIR_ALBUM="${TAG_DATE} - ${DIR_ALBUM}"
348− fi
349−
350− if [ ${DRY} -ne 1 ]; then
351− mkdir -p "${OUT}/${DIR_ARTIST}"
352− fi
353− OUT="${OUT}/${DIR_ARTIST}/${DIR_ALBUM}"
354− fi
355−
356− $msg "${cP}Saving tracks to $cZ\"${OUT}\""
357−
358− if [ ${DRY} -ne 1 ]; then
359− # create output dir
360− mkdir "${OUT}"
361−
362− if [ $? -ne 0 -a ${NOSUBDIRS} -ne 1 ]; then
363− emsg "Failed to create output directory (already splitted?)"
364− return 1
365− fi
366−
367− case ${FORMAT} in
368− flac) ENC="flac flac -8 - -o %f";;
369− m4a) ENC="cust ext=m4a faac -q 500 -o %f -";;
370− mp3) ENC="cust ext=mp3 lame --preset extreme - %f";;
371− ogg) ENC="cust ext=ogg oggenc -q 10 - -o %f";;
372− wav) ENC="wav";;
373− *) emsg "Unknown output format ${FORMAT}"; exit 1;;
374− esac
375−
376− # split to tracks
377− cuebreakpoints "${CUE}" 2>/dev/null | \
378− shnsplit -O never -o "${ENC}" -d "${OUT}" -t "%n" "${FILE}"
379− if [ $? -ne 0 ]; then
380− emsg "Failed to split"
381− return 1
382− fi
383−
384− # prepare cover image
385− if [ "${PIC}" ]; then
386− convert "${PIC}" -resize "${PIC_SIZE}" "${TMPPIC}"
387− if [ $? -eq 0 ]; then
388− PIC="${TMPPIC}"
389− else
390− $msg "${cR}Failed to convert cover image$cZ"
391− unset PIC
392− fi
393− fi
394− fi
395−
396− # set tags and rename
397− $msg "\n${cP}Setting tags$cZ"
398−
399− i=1
400− while [ $i -le ${TRACKS_NUM} ]; do
401− TAG_TITLE=$(cueprint -n $i -t %t "${CUE}" 2>/dev/null)
402− FILE_TRACK="$(printf %02i $i)"
403− FILE_TITLE=$(echo ${TAG_TITLE} | ${VALIDATE})
404− f="${OUT}/${FILE_TRACK}.${FORMAT}"
405−
406− $msg "$i: $cG${TAG_TITLE}$cZ"
407−
408− if [ ${NORENAME} -ne 1 ]; then
409− FINAL="${OUT}/${FILE_TRACK} - ${FILE_TITLE}.${FORMAT}"
410− if [ ${DRY} -ne 1 ]; then
411− mv "$f" "${FINAL}"
412− if [ $? -ne 0 ]; then
413− emsg "Failed to rename track file"
414− return 1
415− fi
416− fi
417− else
418− FINAL="$f"
419− fi
420−
421− if [ ${DRY} -ne 1 ]; then
422− case ${FORMAT} in
423− flac)
424− ${METAFLAC} --remove-all-tags \
425− --set-tag="ARTIST=${TAG_ARTIST}" \
426− --set-tag="ALBUM=${TAG_ALBUM}" \
427− --set-tag="TITLE=${TAG_TITLE}" \
428− --set-tag="TRACKNUMBER=$i" \
429− "${FINAL}" >/dev/null
430− RES=$?
431−
432− if [ "${TAG_GENRE}" ]; then
433− ${METAFLAC} --set-tag="GENRE=${TAG_GENRE}" "${FINAL}" >/dev/null
434− RES=$RES$?
435− fi
436−
437− if [ "${TAG_DATE}" ]; then
438− ${METAFLAC} --set-tag="DATE=${TAG_DATE}" "${FINAL}" >/dev/null
439− RES=$RES$?
440− fi
441−
442− if [ "${PIC}" ]; then
443− ${METAFLAC} --import-picture-from="${PIC}" "${FINAL}" >/dev/null
444− RES=$RES$?
445− fi
446− ;;
447−
448− mp3)
449− ${ID3TAG} "-a${TAG_ARTIST}" \
450− "-A${TAG_ALBUM}" \
451− "-s${TAG_TITLE}" \
452− "-t$i" \
453− "-T${TRACKS_NUM}" \
454− "${FINAL}" >/dev/null
455− RES=$?
456−
457− if [ "${TAG_GENRE}" ]; then
458− ${ID3TAG} -g"${TAG_GENRE}" "${FINAL}" >/dev/null
459− RES=$RES$?
460− fi
461−
462− if [ "${TAG_DATE}" ]; then
463− ${ID3TAG} -y"${TAG_DATE}" "${FINAL}" >/dev/null
464− RES=$RES$?
465− fi
466− ;;
467−
468− ogg)
469− ${VORBISCOMMENT} "${FINAL}" \
470− -t "ARTIST=${TAG_ARTIST}" \
471− -t "ALBUM=${TAG_ALBUM}" \
472− -t "TITLE=${TAG_TITLE}" \
473− -t "TRACKNUMBER=$i" >/dev/null
474− RES=$?
475−
476− if [ "${TAG_GENRE}" ]; then
477− ${VORBISCOMMENT} "${FINAL}" -t "GENRE=${TAG_GENRE}" >/dev/null
478− RES=$RES$?
479− fi
480−
481− if [ "${TAG_DATE}" ]; then
482− ${VORBISCOMMENT} "${FINAL}" -t "DATE=${TAG_DATE}" >/dev/null
483− RES=$RES$?
484− fi
485− ;;
486−
487− m4a)
488− ${MP4TAGS} "${FINAL}" \
489− -a "${TAG_ARTIST}" \
490− -A "${TAG_ALBUM}" \
491− -s "${TAG_TITLE}" \
492− -t "$i" \
493− -T "${TRACKS_NUM}" >/dev/null
494− RES=$?
495−
496− if [ "${TAG_GENRE}" ]; then
497− ${MP4TAGS} "${FINAL}" -g "${TAG_GENRE}" >/dev/null
498− RES=$RES$?
499− fi
500−
501− if [ "${TAG_DATE}" ]; then
502− ${MP4TAGS} "${FINAL}" -y "${TAG_DATE}" >/dev/null
503− RES=$RES$?
504− fi
505−
506− if [ "${PIC}" ]; then
507− ${MP4TAGS} "${FINAL}" -P "${PIC}" >/dev/null
508− RES=$RES$?
509− fi
510− ;;
511−
512− wav)
513− RES=0
514− ;;
515−
516− *)
517− emsg "Unknown output format ${FORMAT}"
518− return 1
519− ;;
520− esac
521−
522− if [ ${RES} -ne 0 ]; then
523− emsg "Failed to set tags for track"
524− return 1
525− fi
526− fi
527−
528− $msg " -> ${cP}${FINAL}$cZ"
529−
530− i=$(($i + 1))
531− done
532−
533− rm -f "${TMPPIC}"
534− rm -f "${TMPCUE}"
535−
536− if [ ${DRY} -ne 1 -a ${REMOVE} -eq 1 ]; then
537− YEP="n"
538−
539− if [ ${FORCE} -ne 1 ]; then
540− echo -n "Are you sure you want to delete original? [y] >"
541− read YEP
542− fi
543−
544− if [ "${YEP}" = "y" -o ${FORCE} -eq 1 ]; then
545− rm -f "${FILE}"
546− fi
547− fi
548−
549− return 0
190+ FILE="$1"
191+
192+ if [ ! -r "${FILE}" ]; then
193+ emsg "Can not read the file"
194+ return 1
195+ fi
196+
197+ # search for a cue sheet if not specified
198+ if [ -z "${CUE}" ]; then
199+ CUE="${FILE}.cue"
200+ if [ ! -r "${CUE}" ]; then
201+ CUE="${FILE%.*}.cue"
202+ if [ ! -r "${CUE}" ]; then
203+ # try to extract internal one
204+ CUESHEET=$(${METAFLAC} --show-tag=CUESHEET "${FILE}" 2>/dev/null | sed 's/^cuesheet=//;s/^CUESHEET=//')
205+
206+ # try WV internal cue sheet
207+ if [ -z "${CUESHEET}" ]; then
208+ CUESHEET=$(wvunpack -q -c "${FILE}" 2>/dev/null)
209+ fi
210+
211+ # try APE internal cue sheet (omfg!)
212+ if [ -z "${CUESHEET}" ]; then
213+ APETAGEX=$(tail -c 32 "$1" | cut -b 1-8 2>/dev/null)
214+ if [ "${APETAGEX}" = "APETAGEX" ]; then
215+ LENGTH=$(tail -c 32 "$1" | cut -b 13-16 | od -t u4 | awk '{printf $2}') 2>/dev/null
216+ tail -c ${LENGTH} "$1" | grep -a CUESHEET >/dev/null 2>&1
217+ if [ $? -eq 0 ]; then
218+ CUESHEET=$(tail -c ${LENGTH} "$1" | sed 's/.*CUESHEET.//g' 2>/dev/null)
219+ if [ $? -ne 0 ]; then
220+ CUESHEET=""
221+ fi
222+ fi
223+ fi
224+ fi
225+
226+ if [ "${CUESHEET}" ]; then
227+ $msg "${cP}Found internal cue sheet$cZ"
228+ CUE="${TMPCUE}"
229+ echo "${CUESHEET}" > "${CUE}"
230+
231+ if [ $? -ne 0 ]; then
232+ emsg "Unable to save internal cue sheet"
233+ return 1
234+ fi
235+ else
236+ unset CUE
237+ fi
238+ fi
239+ fi
240+ fi
241+
242+ # print cue sheet filename
243+ if [ -z "${CUE}" ]; then
244+ emsg "No cue sheet"
245+ return 1
246+ fi
247+
248+ if [ "${CHARSET}" ]; then
249+ $msg "${cG}Cue charset : $cP${CHARSET} -> utf-8$cZ"
250+ CUESHEET=$(iconv -c -f "${CHARSET}" -t utf-8 "${CUE}" 2>/dev/null)
251+ if [ $? -ne 0 ]; then
252+ emsg "Unable to convert cue sheet from ${CHARSET} to utf-8"
253+ return 1
254+ fi
255+ CUE="${TMPCUE}"
256+ echo "${CUESHEET}" > "${CUE}"
257+
258+ if [ $? -ne 0 ]; then
259+ emsg "Unable to save converted cue sheet"
260+ return 1
261+ fi
262+ fi
263+
264+ # search for a front cover image
265+ if [ ${NOPIC} -eq 1 ]; then
266+ unset PIC
267+ elif [ -z "${PIC}" ]; then
268+ # try common names
269+ SDIR=$(dirname "${FILE}")
270+
271+ for i in cover.jpg front_cover.jpg folder.jpg; do
272+ if [ -r "${SDIR}/$i" ]; then
273+ PIC="${SDIR}/$i"
274+ break
275+ fi
276+ done
277+
278+ # try to extract internal one
279+ if [ -z "${PIC}" ]; then
280+ ${METAFLAC} --export-picture-to="${TMPPIC}" "${FILE}" 2>/dev/null
281+ if [ $? -ne 0 ]; then
282+ unset PIC
283+ else
284+ PIC="${TMPPIC}"
285+ fi
286+ fi
287+ fi
288+
289+ $msg "${cG}Cue sheet :$cZ ${CUE}"
290+ $msg "${cG}Cover image :$cZ ${PIC:-not set}"
291+
292+ # file removal warning
293+ if [ ${REMOVE} -eq 1 ]; then
294+ msg_removal="\n${cR}Also remove original"
295+ if [ ${FORCE} -eq 1 ]; then
296+ $msg "$msg_removal (WITHOUT ASKING)$cZ"
297+ else
298+ $msg "$msg_removal if user says 'y'$cZ"
299+ fi
300+ fi
301+
302+ # get common tags
303+ TAG_ARTIST=$(${GETTAG} %P "${CUE}" 2>/dev/null)
304+ TAG_ALBUM=$(${GETTAG} %T "${CUE}" 2>/dev/null)
305+ TRACKS_NUM=$(${GETTAG} %N "${CUE}" 2>/dev/null)
306+
307+ if [ -z "${TRACKS_NUM}" ]; then
308+ emsg "Failed to get number of tracks from CUE sheet."
309+ emsg "There may be an error in the sheet."
310+ emsg "Running ${GETTAG} %N \"${CUE}\" produces this:"
311+ ${GETTAG} %N "${CUE}"
312+ return 1
313+ fi
314+
315+ TAG_GENRE=$(awk '{ if (/REM[ \t]+GENRE[ \t]+(.*)/) { print $0; exit } }' < "${CUE}")
316+ TAG_GENRE=$(echo ${TAG_GENRE} | sed 's/REM[ \t]\+GENRE[ \t]\+//;s/"\(.*\)"/\1/')
317+
318+ YEAR=$(awk '{ if (/REM[ \t]+DATE/) { printf "%i", $3; exit } }' < "${CUE}")
319+ YEAR=$(echo ${YEAR} | tr -d -c '[:digit:]')
320+
321+ unset TAG_DATE
322+
323+ if [ "${YEAR}" ]; then
324+ if [ ${YEAR} -ne 0 ]; then
325+ TAG_DATE="${YEAR}"
326+ fi
327+ fi
328+
329+ $msg "\n${cG}Artist :$cZ ${TAG_ARTIST}"
330+ $msg "${cG}Album :$cZ ${TAG_ALBUM}"
331+ if [ "${TAG_GENRE}" ]; then
332+ $msg "${cG}Genre :$cZ ${TAG_GENRE}"
333+ fi
334+ if [ "${TAG_DATE}" ]; then
335+ $msg "${cG}Year :$cZ ${TAG_DATE}"
336+ fi
337+ $msg "${cG}Tracks :$cZ ${TRACKS_NUM}\n"
338+
339+ # prepare output directory
340+ OUT="${DIR}"
341+
342+ if [ ${NOSUBDIRS} -ne 1 ]; then
343+ DIR_ARTIST=$(echo ${TAG_ARTIST} | ${VALIDATE})
344+ DIR_ALBUM=$(echo ${TAG_ALBUM} | ${VALIDATE})
345+
346+ if [ "${TAG_DATE}" ]; then
347+ DIR_ALBUM="${TAG_DATE} - ${DIR_ALBUM}"
348+ fi
349+
350+ if [ ${DRY} -ne 1 ]; then
351+ mkdir -p "${OUT}/${DIR_ARTIST}"
352+ fi
353+ OUT="${OUT}/${DIR_ARTIST}/${DIR_ALBUM}"
354+ fi
355+
356+ $msg "${cP}Saving tracks to $cZ\"${OUT}\""
357+
358+ if [ ${DRY} -ne 1 ]; then
359+ # create output dir
360+ mkdir "${OUT}"
361+
362+ if [ $? -ne 0 -a ${NOSUBDIRS} -ne 1 ]; then
363+ emsg "Failed to create output directory (already splitted?)"
364+ return 1
365+ fi
366+
367+ case ${FORMAT} in
368+ flac) ENC="flac flac -8 - -o %f";;
369+ m4a) ENC="cust ext=m4a faac -q 500 -o %f -";;
370+ mp3) ENC="cust ext=mp3 lame --preset extreme - %f";;
371+ ogg) ENC="cust ext=ogg oggenc -q 10 - -o %f";;
372+ wav) ENC="wav";;
373+ *) emsg "Unknown output format ${FORMAT}"; exit 1;;
374+ esac
375+
376+ # split to tracks
377+ cuebreakpoints "${CUE}" 2>/dev/null | \
378+ shnsplit -O never -o "${ENC}" -d "${OUT}" -t "%n" "${FILE}"
379+ if [ $? -ne 0 ]; then
380+ emsg "Failed to split"
381+ return 1
382+ fi
383+
384+ # prepare cover image
385+ if [ "${PIC}" ]; then
386+ convert "${PIC}" -resize "${PIC_SIZE}" "${TMPPIC}"
387+ if [ $? -eq 0 ]; then
388+ PIC="${TMPPIC}"
389+ else
390+ $msg "${cR}Failed to convert cover image$cZ"
391+ unset PIC
392+ fi
393+ fi
394+ fi
395+
396+ # set tags and rename
397+ $msg "\n${cP}Setting tags$cZ"
398+
399+ i=1
400+ while [ $i -le ${TRACKS_NUM} ]; do
401+ TAG_TITLE=$(cueprint -n $i -t %t "${CUE}" 2>/dev/null)
402+ FILE_TRACK="$(printf %02i $i)"
403+ FILE_TITLE=$(echo ${TAG_TITLE} | ${VALIDATE})
404+ f="${OUT}/${FILE_TRACK}.${FORMAT}"
405+
406+ $msg "$i: $cG${TAG_TITLE}$cZ"
407+
408+ if [ ${NORENAME} -ne 1 ]; then
409+ FINAL="${OUT}/${FILE_TRACK} - ${FILE_TITLE}.${FORMAT}"
410+ if [ ${DRY} -ne 1 ]; then
411+ mv "$f" "${FINAL}"
412+ if [ $? -ne 0 ]; then
413+ emsg "Failed to rename track file"
414+ return 1
415+ fi
416+ fi
417+ else
418+ FINAL="$f"
419+ fi
420+
421+ if [ ${DRY} -ne 1 ]; then
422+ case ${FORMAT} in
423+ flac)
424+ ${METAFLAC} --remove-all-tags \
425+ --set-tag="ARTIST=${TAG_ARTIST}" \
426+ --set-tag="ALBUM=${TAG_ALBUM}" \
427+ --set-tag="TITLE=${TAG_TITLE}" \
428+ --set-tag="TRACKNUMBER=$i" \
429+ "${FINAL}" >/dev/null
430+ RES=$?
431+
432+ if [ "${TAG_GENRE}" ]; then
433+ ${METAFLAC} --set-tag="GENRE=${TAG_GENRE}" "${FINAL}" >/dev/null
434+ RES=$RES$?
435+ fi
436+
437+ if [ "${TAG_DATE}" ]; then
438+ ${METAFLAC} --set-tag="DATE=${TAG_DATE}" "${FINAL}" >/dev/null
439+ RES=$RES$?
440+ fi
441+
442+ if [ "${PIC}" ]; then
443+ ${METAFLAC} --import-picture-from="${PIC}" "${FINAL}" >/dev/null
444+ RES=$RES$?
445+ fi
446+ ;;
447+
448+ mp3)
449+ ${ID3TAG} "-a${TAG_ARTIST}" \
450+ "-A${TAG_ALBUM}" \
451+ "-s${TAG_TITLE}" \
452+ "-t$i" \
453+ "-T${TRACKS_NUM}" \
454+ "${FINAL}" >/dev/null
455+ RES=$?
456+
457+ if [ "${TAG_GENRE}" ]; then
458+ ${ID3TAG} -g"${TAG_GENRE}" "${FINAL}" >/dev/null
459+ RES=$RES$?
460+ fi
461+
462+ if [ "${TAG_DATE}" ]; then
463+ ${ID3TAG} -y"${TAG_DATE}" "${FINAL}" >/dev/null
464+ RES=$RES$?
465+ fi
466+ ;;
467+
468+ ogg)
469+ ${VORBISCOMMENT} "${FINAL}" \
470+ -t "ARTIST=${TAG_ARTIST}" \
471+ -t "ALBUM=${TAG_ALBUM}" \
472+ -t "TITLE=${TAG_TITLE}" \
473+ -t "TRACKNUMBER=$i" >/dev/null
474+ RES=$?
475+
476+ if [ "${TAG_GENRE}" ]; then
477+ ${VORBISCOMMENT} "${FINAL}" -t "GENRE=${TAG_GENRE}" >/dev/null
478+ RES=$RES$?
479+ fi
480+
481+ if [ "${TAG_DATE}" ]; then
482+ ${VORBISCOMMENT} "${FINAL}" -t "DATE=${TAG_DATE}" >/dev/null
483+ RES=$RES$?
484+ fi
485+ ;;
486+
487+ m4a)
488+ ${MP4TAGS} "${FINAL}" \
489+ -a "${TAG_ARTIST}" \
490+ -A "${TAG_ALBUM}" \
491+ -s "${TAG_TITLE}" \
492+ -t "$i" \
493+ -T "${TRACKS_NUM}" >/dev/null
494+ RES=$?
495+
496+ if [ "${TAG_GENRE}" ]; then
497+ ${MP4TAGS} "${FINAL}" -g "${TAG_GENRE}" >/dev/null
498+ RES=$RES$?
499+ fi
500+
501+ if [ "${TAG_DATE}" ]; then
502+ ${MP4TAGS} "${FINAL}" -y "${TAG_DATE}" >/dev/null
503+ RES=$RES$?
504+ fi
505+
506+ if [ "${PIC}" ]; then
507+ ${MP4TAGS} "${FINAL}" -P "${PIC}" >/dev/null
508+ RES=$RES$?
509+ fi
510+ ;;
511+
512+ wav)
513+ RES=0
514+ ;;
515+
516+ *)
517+ emsg "Unknown output format ${FORMAT}"
518+ return 1
519+ ;;
520+ esac
521+
522+ if [ ${RES} -ne 0 ]; then
523+ emsg "Failed to set tags for track"
524+ return 1
525+ fi
526+ fi
527+
528+ $msg " -> ${cP}${FINAL}$cZ"
529+
530+ i=$(($i + 1))
531+ done
532+
533+ rm -f "${TMPPIC}"
534+ rm -f "${TMPCUE}"
535+
536+ if [ ${DRY} -ne 1 -a ${REMOVE} -eq 1 ]; then
537+ YEP="n"
538+
539+ if [ ${FORCE} -ne 1 ]; then
540+ echo -n "Are you sure you want to delete original? [y] >"
541+ read YEP
542+ fi
543+
544+ if [ "${YEP}" = "y" -o ${FORCE} -eq 1 ]; then
545+ rm -f "${FILE}"
546+ fi
547+ fi
548+
549+ return 0
550550 }
551551
552552 split_collection () {
553− NUM_FAILED=0
554−
555− while read -r FILE; do
556− $msg "$cG>> $cC\"${FILE}\"$cZ"
557− unset PIC CUE
558− split_file "${FILE}"
559−
560− if [ ! $? -eq 0 ]; then
561− emsg "Failed to split \"${FILE}\""
562− echo "${FILE}" >> "${FAILED}"
563− NUM_FAILED=$((${NUM_FAILED} + 1))
564− fi
565−
566− echo
567− done
568−
569− if [ ${NUM_FAILED} -ne 0 ]; then
570− emsg "${NUM_FAILED} file(s) failed to split (already splited?):"
571− $msg "${cR}"
572− sort "${FAILED}" -o "${FAILED}"
573− cat "${FAILED}"
574− emsg "\nThese files are also listed in ${FAILED}."
575− return 1
576− fi
577−
578− return 0
553+ NUM_FAILED=0
554+
555+ while read -r FILE; do
556+ $msg "$cG>> $cC\"${FILE}\"$cZ"
557+ unset PIC CUE
558+ split_file "${FILE}"
559+
560+ if [ ! $? -eq 0 ]; then
561+ emsg "Failed to split \"${FILE}\""
562+ echo "${FILE}" >> "${FAILED}"
563+ NUM_FAILED=$((${NUM_FAILED} + 1))
564+ fi
565+
566+ echo
567+ done
568+
569+ if [ ${NUM_FAILED} -ne 0 ]; then
570+ emsg "${NUM_FAILED} file(s) failed to split (already splited?):"
571+ $msg "${cR}"
572+ sort "${FAILED}" -o "${FAILED}"
573+ cat "${FAILED}"
574+ emsg "\nThese files are also listed in ${FAILED}."
575+ return 1
576+ fi
577+
578+ return 0
579579 }
580580
581581 # searches for files in a directory and splits them
582582 split_dir () {
583− rm -f "${FAILED}"
584− find "$1" -iname '*.flac' -o -iname '*.ape' -o -iname '*.wv' | split_collection
583+ rm -f "${FAILED}"
584+ find "$1" -iname '*.flac' -o -iname '*.ape' -o -iname '*.wv' | split_collection
585585 }
586586
587587 if [ -d "${INPATH}" ]; then
588− if [ ! -x "${INPATH}" ]; then
589− emsg "Directory \"${INPATH}\" is not accessible"
590− exit 2
591− fi
592− $msg "${cG}Input dir :$cZ ${INPATH}$cZ\n"
593− split_dir "${INPATH}"
588+ if [ ! -x "${INPATH}" ]; then
589+ emsg "Directory \"${INPATH}\" is not accessible"
590+ exit 2
591+ fi
592+ $msg "${cG}Input dir :$cZ ${INPATH}$cZ\n"
593+ split_dir "${INPATH}"
594594 elif [ "${INPATH}" ]; then
595− split_file "${INPATH}"
595+ split_file "${INPATH}"
596596 else
597− emsg "No input filename given. Use -h for help."
598− exit 1
597+ emsg "No input filename given. Use -h for help."
598+ exit 1
599599 fi
600600
601601 # exit code of split_dir or split_file
@@ -604,5 +604,5 @@ STATUS=$? · 2 unmodified lines
604604 $msg "\n${cP}Finished$cZ"
605605
606606 if [ ${STATUS} -ne 0 ]; then
607− exit 3
607+ exit 3
608608 fi

Keyboard shortcuts

General

Show keyboard shortcuts
?
Focus the current search
/

Issues and pull requests

Open filters
f

Issues, pull requests and Inbox

Select next item
j↓
Select previous item
k↑
Open selected item
Enter
Dismiss filters or clear selection
Esc

Repository code

Go to file
t