Commit ab4d27cbb65d6c897cee927f6c28b3f8820cd3e9

Authored by Georg Hopp
1 parent 2b3f3a1a

--no commit message

Showing 1 changed file with 162 additions and 81 deletions
... ... @@ -17,35 +17,78 @@ case "${scriptDir}" in /*);; *) scriptDir="${PWD}/${scriptDir}";; esac
17 17
18 18 # --------------------------------------------------------------
19 19 # string definitions
20   -usage=$"usage: $0 [-t {m|f|o}] [-p path] [-e encoder] [-c cddb-entry] [-h|-?]
21   - [-I interface] [-D device] [-v[v]]
22   -\t-t: you can specify either m for encoding to mp3
23   -\t using lame, or f for making lossless encoding using flac,
24   -\t or o for making ogg/vorbis, or w for uncompressed wav.
25   -\t Omitting this results in encoding to flac.
26   -\t mp3s will be placed under a subfolder mp3 and flacs
27   -\t under a subfolder flac
28   -\t-p: specifies the path to save the encoded data.
29   -\t Defaults to the users home directory.
30   -\t-e: specifies the mp3 encoder to use.
31   -\t valid encoders are actually: lame,bladeenc
32   -\t Defaults to lame.
33   -\t-c: specifies the CDDB-Entry to use.
34   -\t sometimes there is more than 1 entry for a cd in cddb.
35   -\t Then you can specify wich one to use by this option.
36   -\t You can checkout all entries using cddb.pl.
37   -\t-I: specifies cdda2wav interface to use.
38   -\t Valid interfaces are generic_scsi and cooked_ioctl.
39   -\t Please note that cooked_ioctl is not available on all systems.
40   -\t Defaults to generic_scsi
41   -\t-D: specifies device to use with cdda2wav.
42   -\t Defaults to /dev/cdrom
43   -\t-v: make the script more verbose. The verbosity level defaults
44   -\t to 1. When -v is given the level is 2 and -vv increases the
45   -\t level to 3, what means give debug output.
46   -\t-q: make the script silent. Equivalent to -v0
47   -\t-h|
48   -\t-?: Shows this help."
  20 +enhUsage=$"usage: $0 [-t(m|f|o|w)] [-p path] [-e encoder] [-c cddbitem] [-h]
  21 + [-I interface] [-D device] [-v[v|0]] [-q]
  22 + [--help] [--encoding=(m|f|o|w)] [--encoder=(lame|bladeenc)]
  23 + [--path=<string>] [--interface=(cooked_ioctl|generic_scsi)]
  24 + [--device=<string>]
  25 + options:
  26 + -h | --help: gives this help
  27 + -v: set verbosity level.
  28 + -v0 disable all output
  29 + -v be more verbose
  30 + -vv enables debug
  31 + -q: make the script silent. Equivalent to -v0
  32 + -t | --encoding: you can specify either m for encoding to mp3
  33 + using lame, or f for making lossless encoding using flac,
  34 + or o for making ogg/vorbis, or w for uncompressed wav.
  35 + Omitting this results in encoding to flac.
  36 + mp3s will be placed under a subfolder mp3 and flacs
  37 + under a subfolder flac
  38 + -p | --path: specifies the path to save the encoded data.
  39 + Defaults to the users home directory.
  40 + -e | --encoder: specifies the mp3 encoder to use.
  41 + valid encoders are actually: lame,bladeenc
  42 + Defaults to lame.
  43 + -c: specifies the CDDB-Entry to use.
  44 + sometimes there is more than 1 entry for a cd in cddb.
  45 + Then you can specify wich one to use by this option.
  46 + You can checkout all entries using cddb.pl.
  47 + -I | --interface: specifies cdda2wav interface to use.
  48 + Valid interfaces are generic_scsi and cooked_ioctl.
  49 + Please note that cooked_ioctl is not available on all
  50 + systems. Defaults to cooked_ioctl if device begins with
  51 + /dev else to generic_scsi
  52 + -D | --device: specifies device to use with cdda2wav. All values that
  53 + are valid for cdda2wav are valid here.
  54 + Defaults to /dev/cdrom
  55 +
  56 +This script uses cdda2wav, cddb and various encoders to rip an audio CD."
  57 +
  58 +usage=$"usage: $0 [-t(m|f|o|w)] [-p path] [-e encoder] [-c cddbitem] [-h]
  59 + [-I interface] [-D device] [-v[v|0]] [-q]
  60 + options:
  61 + -h: this help
  62 + -v: set verbosity level.
  63 + -v0 disable all output
  64 + -v be more verbose
  65 + -vv enables debug
  66 + -q: make the script silent. Equivalent to -v0
  67 + -t: you can specify either m for encoding to mp3
  68 + using lame, or f for making lossless encoding using flac,
  69 + or o for making ogg/vorbis, or w for uncompressed wav.
  70 + Omitting this results in encoding to flac.
  71 + mp3s will be placed under a subfolder mp3 and flacs
  72 + under a subfolder flac
  73 + -p: specifies the path to save the encoded data.
  74 + Defaults to the users home directory.
  75 + -e: specifies the mp3 encoder to use.
  76 + valid encoders are actually: lame,bladeenc
  77 + Defaults to lame.
  78 + -c: specifies the CDDB-Entry to use.
  79 + sometimes there is more than 1 entry for a cd in cddb.
  80 + Then you can specify wich one to use by this option.
  81 + You can checkout all entries using cddb.pl.
  82 + -I: specifies cdda2wav interface to use.
  83 + Valid interfaces are generic_scsi and cooked_ioctl.
  84 + Please note that cooked_ioctl is not available on all
  85 + systems. Defaults to cooked_ioctl if device begins with
  86 + /dev else to generic_scsi
  87 + -D: specifies device to use with cdda2wav. All values that
  88 + are valid for cdda2wav are valid here.
  89 + Defaults to /dev/cdrom
  90 +
  91 +This script uses cdda2wav, cddb and various encoders to rip an audio CD."
49 92
50 93 ready=$"done"
51 94
... ... @@ -79,92 +122,130 @@ TRACKS:
79 122 ======="
80 123 # --------------------------------------------------------------
81 124
  125 +# --------------------------------------------------------------
  126 +# Optionen auswerten (im Moment nur angabe einer alternativen
  127 +# Konfigurationsdatei, und vebose). Vorher default-werte setzen.
  128 +# Irgendwie hab ich noch Probleme mit -? das scheint nicht zu funzen.
  129 +$GETOPT -T >/dev/null 2>&1
  130 +if [ $? -eq 4 ]
  131 +then
  132 + # enhanced getopt
  133 + usage="${enhUsage}"
  134 +
  135 + TEMP="`$GETOPT -o "?hv::qt:p:e:c:I:D:" -l "help,encoding:,encoder:,path:,interface:,device:" -- "$@"`"
  136 +else
  137 + # old getopt
  138 + TEMP="`$GETOPT "?hv::qt:p:e:c:I:D:" "$@"`"
  139 +fi
  140 +test $? -ne 0 && { echo -e "${usage}"; exit 1; } # on error
  141 +
  142 +eval set -- "$TEMP" # set $1,$2,...
  143 +
82 144 taOrder="t"
83 145 encodingDir=$HOME
84 146 encodingType="f"
85 147 encoder="lame"
86 148 cddbEntry=1
87   -cddaIf="generic_scsi"
  149 +cddaIf=""
88 150 cddaDev="/dev/cdrom"
89 151 verbose=1
90   -
91   -# ----------------------------------------------------------------
92   -# get commandline options
93   -while getopts qvt:p:he:c:I:D: option
  152 +while true
94 153 do
95   - case $option in
96   - t)
97   - if [ "${OPTARG}" != "m" -a "${OPTARG}" != "f" -a \
98   - "${OPTARG}" != "o" -a "${OPTARG}" != "w" ]
  154 + case "$1" in
  155 + --)
  156 + shift; break;;
  157 +
  158 + -v)
  159 + # v has an optional argument. As we are in quoted mode,
  160 + # an empty parameter will be generated if its optional
  161 + # argument is not found.
  162 + if [ -z "$2" ]
99 163 then
100   - echo -e "$usage"
101   - exit 1
  164 + verbose=2
  165 + shift 2
  166 + else
  167 + case "$2" in
  168 + v) verbose=3; shift 2;;
  169 + *) verbose="$2"; shift 2;;
  170 + esac
102 171 fi
103   - encodingType=$OPTARG
104 172 ;;
105   - p)
106   - if [ ! \( -d ${OPTARG} \) ]
  173 +
  174 + -q)
  175 + verbose=0
  176 + ;;
  177 +
  178 + -t|--encoding)
  179 + if [ "$2" != "m" -a "$2" != "f" -a \
  180 + "$2" != "o" -a "$2" != "w" ]
107 181 then
108 182 echo -e "$usage"
109 183 exit 1
110 184 fi
111   - encodingDir=$OPTARG
  185 + encodingType=$2
112 186 ;;
113   - e)
114   - if [ -z ${OPTARG} ]
  187 +
  188 + -p|--path)
  189 + if [ ! \( -d $2 \) ]
115 190 then
116 191 echo -e "$usage"
117 192 exit 1
118 193 fi
119   - encoder=$OPTARG
  194 + encodingDir=$2
120 195 ;;
121   - c)
122   - if [ ${OPTARG} -lt 1 ]
  196 +
  197 + -e|--encoder)
  198 + if [ -z $2 ]
123 199 then
124 200 echo -e "$usage"
125 201 exit 1
126 202 fi
127   - cddbEntry=$OPTARG
  203 + encoder=$2
128 204 ;;
129   - v)
130   - if [ "${OPTARG}" -a "${OPTARG}" != "0" -a "${OPTARG}" != "v" ]
  205 +
  206 + -c)
  207 + if [ $2 -lt 1 ]
131 208 then
132 209 echo -e "$usage"
133 210 exit 1
134 211 fi
135   - test -z "${OPTARG}" && verbose=2
136   - test "${OPTARG}" = "0" && verbose=0
137   - test "${OPTARG}" = "v" && verbose=3
138   - ;;
139   - q)
140   - verbose=0
  212 + cddbEntry=$2
141 213 ;;
142   - I)
143   - if [ "${OPTARG}" != "generic_scsi" -a \
144   - "${OPTARG}" != "cooked_ioctl" ]
  214 +
  215 + -I)
  216 + if [ "$2" != "generic_scsi" -a \
  217 + "$2" != "cooked_ioctl" ]
145 218 then
146 219 echo -e "$usage"
147 220 exit 1
148 221 fi
149   - cddaIf=$OPTARG
  222 + cddaIf=$2
150 223 ;;
151   - D)
152   - if [ ${OPTARG} -lt 1 ]
  224 +
  225 + -D)
  226 + if [ $2 -lt 1 ]
153 227 then
154 228 echo -e "$usage"
155 229 exit 1
156 230 fi
157   - cddaDev=$OPTARG
  231 + cddaDev=$2
158 232 ;;
159   - [h\?])
160   - echo -e "$usage"
  233 +
  234 + -h|--help|*)
  235 + echo "${usage}"
161 236 exit 1
162 237 ;;
163   - esac
  238 + esac
164 239 done
165   -# ----------------------------------------------------------------
  240 +# --------------------------------------------------------------
166 241
167   -echo "verbose: $verbose"
  242 +if [ -z "${cddaIf}" ]
  243 +then
  244 + test "${cddaDev%/*}" = "/dev" &&\
  245 + cddaIf="cooked_ioctl" ||\
  246 + cddaIf="generic_scsi"
  247 +fi
  248 +# ----------------------------------------------------------------
168 249
169 250 # ----------------------------------------------------------------
170 251 # set encodingDir for used encodingType
... ... @@ -283,11 +364,9 @@ do
283 364 # processing at once, so the percentage is not shown correctly
284 365 if [ ${verbose} -ge 2 ]
285 366 then
286   - outCmd="tr '\r' '\n' |
287   - sed '/^ [0-9]/!d;s/^.* \([0-9]*%\).*$/\r'\"\${outStr}\"'\1/' |
288   - tr -d '\n'"
  367 + outStream="/dev/stdout"
289 368 else
290   - outCmd="cat >/dev/null"
  369 + outStream="/dev/null"
291 370 fi
292 371
293 372 case ${encodingType} in
... ... @@ -303,8 +382,10 @@ do
303 382 -T genre="${dGenre}" -T title="${tTitle[$i]}" \
304 383 -T tracknumber="${trackNr}" -T tracknum="${trackNr}" \
305 384 -T date="${dYear}" -T comment="" \
306   - -o "${encodingDir}/${outFile}" - 2>/dev/null
307   - ) | $outCmd
  385 + -o "${encodingDir}/${outFile}" - #2>/dev/null
  386 + ) | tr '\r' '\n' |\
  387 + sed '/^ [0-9]/!d;s/^.* \([0-9]*%\).*$/\r'"${outStr}"'\1/' |\
  388 + tr -d '\n' >$outStream
308 389 ;;
309 390 m)
310 391 outFile="`printf %02d ${trackNr}`-${tTitle[$i]}.mp3"
... ... @@ -323,7 +404,7 @@ do
323 404 - "${encodingDir}/${outFile}" 2>/dev/null
324 405 ) | tr '\r' '\n' |\
325 406 sed '/^ [0-9]/!d;s/^.* \([0-9]*%\).*$/\r'"${outStr}"'\1/' |\
326   - tr -d '\n'
  407 + tr -d '\n' >$outStream
327 408 ;;
328 409 bladeenc)
329 410 (
... ... @@ -333,7 +414,7 @@ do
333 414 "${encodingDir}/${outFile}" 2>/dev/null
334 415 ) | tr '\r' '\n' |\
335 416 sed '/^ [0-9]/!d;s/^.* \([0-9]*%\).*$/\r'"${outStr}"'\1/' |\
336   - tr -d '\n'
  417 + tr -d '\n' >$outStream
337 418 ;;
338 419 esac
339 420 ;;
... ... @@ -351,7 +432,7 @@ do
351 432 -o "${encodingDir}/${outFile}" - 2>/dev/null
352 433 ) | tr '\r' '\n' |\
353 434 sed '/^ [0-9]/!d;s/^.* \([0-9]*%\).*$/\r'"${outStr}"'\1/' |\
354   - tr -d '\n'
  435 + tr -d '\n' >$outStream
355 436 ;;
356 437 w)
357 438 outFile="`printf %02d ${trackNr}`-${tTitle[$i]}.wav"
... ... @@ -363,11 +444,11 @@ do
363 444 "${encodingDir}/${outFile}"
364 445 ) | tr '\r' '\n' |\
365 446 sed '/^ [0-9]/!d;s/^.* \([0-9]*%\).*$/\r'"${outStr}"'\1/' |\
366   - tr -d '\n'
  447 + tr -d '\n' >$outStream
367 448 ;;
368 449 esac
369 450
370   - echo # do a newline after each file
  451 + test ${verbose} -ge 2 && echo # do a newline after each file
371 452 i=$((i+1))
372 453 done
373 454
... ...
Please register or login to post a comment