"Fossies" - the Fresh Open Source Software Archive 
Member "burncdda-1.8.3/decodenorm.func" (17 May 2011, 8279 Bytes) of package /linux/privat/old/burncdda-1.8.3.tar.gz:
As a special service "Fossies" has tried to format the requested source page into HTML format using (guessed) Bash source code syntax highlighting (style:
standard) with prefixed line numbers and
code folding option.
Alternatively you can here
view or
download the uninterpreted source code file.
1 #!/usr/bin/env bash
2 #------------------------------------------------------------------------------
3 # burnCDDA is a shell script for burning Audio-CDs with
4 # cdrdao and cdrecord.
5 #
6 # (C) 2001 by Thorsten Muehlfelder <thenktor@gmx.de>
7 #
8 # This program is free software; you can redistribute it and/or
9 # modify it under the terms of the GNU General Public License (version 2)
10 # as published by the Free Software Foundation;
11 #
12 # This program is distributed in the hope that it will be useful,
13 # but WITHOUT ANY WARRANTY; without even the implied warranty of
14 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 # GNU General Public License for more details.
16 #
17 # You should have received a copy of the GNU General Public License
18 # along with this program; if not, write to the Free Software
19 # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
20 #------------------------------------------------------------------------------
21
22 # errormessage of decodenorm
23 function decerror()
24 {
25 DECERROR=$DECERROR+1
26 echo -e "${RED}WARNING:${NOCOLOR} An error occurred!"
27 echo -e "${BLUE}Press any key${NOCOLOR}"
28 read -n1
29 echo ""
30 continue
31 }
32
33
34 # calculates length of single tracks and adds them to CDTIME
35 function timecount()
36 {
37 FILESIZE=`ls -l "$1" | $GAWK '{print $5}'`
38 FILETIME=($FILESIZE/176400)
39 MINUTES=($FILETIME/60)
40 SECONDS=`expr $FILETIME % 60`
41 if [ $SECONDS -le 9 ]; then
42 echo "Track Length: $MINUTES:0$SECONDS"
43 else
44 echo "Track Length: $MINUTES:$SECONDS"
45 fi
46 CDTIME=($CDTIME+$FILETIME)
47 }
48
49
50 # decode and normalize function
51 function decodenorm()
52 {
53 mkdir "$IMGDIR/$WAVNAME"
54 if [ $CDEXTRA = 1 ]; then
55 mkdir "$IMGDIR/$WAVNAME/CD-EXTRA"
56 echo "CD-Extra: yes" > "$IMGDIR/$WAVNAME/WAVINFO"
57 else
58 echo "CD-Extra: no" > "$IMGDIR/$WAVNAME/WAVINFO"
59 fi
60 if [ $NORMSET = 1 ]; then
61 echo "Normalized: yes ($NORMAMP)" >> "$IMGDIR/$WAVNAME/WAVINFO"
62 else
63 echo "Normalized: no" >> "$IMGDIR/$WAVNAME/WAVINFO"
64 fi
65 # reset some variables
66 N=0
67 LN=1
68 DECERROR=0
69 NOTREADABLE=0
70 CDTIME=0
71 CDEXTRATSIZE=0
72 while [ $LN -le $MAXLN ]; do
73 LINE=`$HEAD -$LN "$PLAYLIST" | $TAIL -1 | $SED s/$'\r'//`
74 # check if first character of the line is "#" and if yes skip the line
75 EXTENDED=`echo "$LINE" | $HEAD -c 1`
76 if [ "$EXTENDED" = "#" ]; then
77 LN=$LN+1
78 continue
79 fi
80 # correct some errors caused by drag and drop from the file manager
81 FILEMANAGER=`echo "$LINE" | $HEAD -c 8`
82 if [ "$FILEMANAGER" = "file:///" ]; then
83 # use # instead of / as separator and substitude file:/// with /
84 # substitude %20 with ' '
85 # WARNING: there are many errors with special characters left
86 # don't know how to fix it in a simple way
87 LINE=`echo "$LINE" | $SED s#^file:///#/# | $SED s/%20/' '/g`
88 fi
89 echo "File: $LINE"
90 # cut the part after the "." and set it as TYP
91 TYP=`echo "$LINE" | $GAWK 'BEGIN { FS = "." } {if (NF > 1) print $NF}' | $TR [:upper:] [:lower:]`
92 N=$N+1
93 LN=$LN+1
94 if [ $N -le 9 ]; then
95 LL="0"
96 else
97 LL=""
98 fi
99 if [ -r "$LINE" ]; then
100 # copy file to CD-EXTRA directory?
101 if [ $CDEXTRA = 1 ]; then
102 cp "$LINE" "$IMGDIR/$WAVNAME/CD-EXTRA/"
103 fi
104 # decode different file types
105 if [ "$TYP" = "mp3" -a "$MPG321" != "NONE" ]; then
106 echo "mpg321..."
107 $NICE -n $NICELEVEL $MPG321 -q --wav "$IMGDIR/$WAVNAME/$WAVNAME.$LL$N.wav" "$LINE" || decerror
108 echo "--> $WAVNAME.$LL$N.wav"
109 if [ $NORMSET = 1 ]; then
110 echo "normalize..."
111 $NICE -n $NICELEVEL $NORMALIZE -q --amplitude=$NORMAMP "$IMGDIR/$WAVNAME/$WAVNAME.$LL$N.wav" || decerror
112 echo "--> $WAVNAME.$LL$N.wav was normalized to $NORMAMP"
113 fi
114 timecount "$IMGDIR/$WAVNAME/$WAVNAME.$LL$N.wav"
115 echo -e "${GREEN} OK${NOCOLOR}"
116 elif [ "$TYP" = "ogg" -a "$OGGDEC" != "NONE" ]; then
117 echo "oggdec..."
118 $NICE -n $NICELEVEL $OGGDEC -Q -o "$IMGDIR/$WAVNAME/$WAVNAME.$LL$N.wav" "$LINE" || decerror
119 echo "--> $WAVNAME.$LL$N.wav"
120 if [ $NORMSET = 1 ]; then
121 echo "normalize..."
122 $NICE -n $NICELEVEL $NORMALIZE -q --amplitude=$NORMAMP "$IMGDIR/$WAVNAME/$WAVNAME.$LL$N.wav" || decerror
123 echo "--> $WAVNAME.$LL$N.wav was normalized to $NORMAMP"
124 fi
125 timecount "$IMGDIR/$WAVNAME/$WAVNAME.$LL$N.wav"
126 echo -e "${GREEN} OK${NOCOLOR}"
127 elif [ "$TYP" = "mpc" -a "$MPPDEC" != "NONE" ]; then
128 echo "mppdec..."
129 $NICE -n $NICELEVEL $MPPDEC --silent "$LINE" "$IMGDIR/$WAVNAME/$WAVNAME.$LL$N.wav" || decerror
130 echo "--> $WAVNAME.$LL$N.wav"
131 if [ $NORMSET = 1 ]; then
132 echo "normalize..."
133 $NICE -n $NICELEVEL $NORMALIZE -q --amplitude=$NORMAMP "$IMGDIR/$WAVNAME/$WAVNAME.$LL$N.wav" || decerror
134 echo "--> $WAVNAME.$LL$N.wav was normalized to $NORMAMP"
135 fi
136 timecount "$IMGDIR/$WAVNAME/$WAVNAME.$LL$N.wav"
137 echo -e "${GREEN} OK${NOCOLOR}"
138 elif [ "$TYP" = "flac" -a "$FLACDEC" != "NONE" ]; then
139 echo "flac -d..."
140 $NICE -n $NICELEVEL $FLACDEC -s -d -o "$IMGDIR/$WAVNAME/$WAVNAME.$LL$N.wav" "$LINE" || decerror
141 echo "--> $WAVNAME.$LL$N.wav"
142 if [ $NORMSET = 1 ]; then
143 echo "normalize..."
144 $NICE -n $NICELEVEL $NORMALIZE -q --amplitude=$NORMAMP "$IMGDIR/$WAVNAME/$WAVNAME.$LL$N.wav" || decerror
145 echo "--> $WAVNAME.$LL$N.wav was normalized to $NORMAMP"
146 fi
147 timecount "$IMGDIR/$WAVNAME/$WAVNAME.$LL$N.wav"
148 echo -e "${GREEN} OK${NOCOLOR}"
149 elif [ "$TYP" = "wav" -a "$SOX" != "NONE" ]; then
150 echo "sox..."
151 $NICE -n $NICELEVEL $SOX "$LINE" -r 44100 -c 2 "$IMGDIR/$WAVNAME/$WAVNAME.$LL$N.wav" || decerror
152 echo "--> $WAVNAME.$LL$N.wav"
153 if [ $NORMSET = 1 ]; then
154 echo "normalize..."
155 $NICE -n $NICELEVEL $NORMALIZE -q --amplitude=$NORMAMP "$IMGDIR/$WAVNAME/$WAVNAME.$LL$N.wav" || decerror
156 echo "--> $WAVNAME.$LL$N.wav was normalized to $NORMAMP"
157 fi
158 timecount "$IMGDIR/$WAVNAME/$WAVNAME.$LL$N.wav"
159 echo -e "${GREEN} OK${NOCOLOR}"
160 else
161 echo "mplayer..."
162 $NICE -n $NICELEVEL $MPLAYER -really-quiet -noconsolecontrols -vc null -vo null \
163 -ao pcm:waveheader:fast:file="$IMGDIR/$WAVNAME/$WAVNAME.$LL$N.wav" \
164 -af resample=44100:0:2,channels=2 "$LINE" 1> /dev/null 2> /dev/null
165 if [ ! -r "$IMGDIR/$WAVNAME/$WAVNAME.$LL$N.wav" ]; then
166 decerror
167 fi
168 echo "--> $WAVNAME.$LL$N.wav"
169 if [ $NORMSET = 1 ]; then
170 echo "normalize..."
171 $NICE -n $NICELEVEL $NORMALIZE -q --amplitude=$NORMAMP "$IMGDIR/$WAVNAME/$WAVNAME.$LL$N.wav" || decerror
172 echo "--> $WAVNAME.$LL$N.wav was normalized to $NORMAMP"
173 fi
174 timecount "$IMGDIR/$WAVNAME/$WAVNAME.$LL$N.wav"
175 echo -e "${GREEN} OK${NOCOLOR}"
176 fi
177 else
178 echo "$LINE does not exist or is not readable"
179 NOTREADABLE=$NOTREADABLE+1
180 decerror
181 fi
182 echo -e "\n"
183 done
184 UNKNOWNERROR=$DECERROR-$NOTREADABLE
185 if [ $DECERROR -ge 1 ]; then
186 echo -e "WARNING:${RED} $DECERROR ${NOCOLOR}errors occurred at decoding. Perhaps some files will not be burned."
187 echo -e "${RED} $NOTREADABLE ${NOCOLOR}files did not exist or were not readable."
188 echo -e "${RED} $UNKNOWNERROR ${NOCOLOR}unknown errors. \n"
189 fi
190 echo "Processed $MAXN files in '$WAVNAME':"
191 MINUTES=($CDTIME/60)
192 SECONDS=`expr $CDTIME % 60`
193 if [ $SECONDS -le 9 ]; then
194 echo "Disc Length: $MINUTES:0$SECONDS"
195 echo "Disc Length: $MINUTES:0$SECONDS" >> "$IMGDIR/$WAVNAME/WAVINFO"
196 else
197 echo "Disc Length: $MINUTES:$SECONDS"
198 echo "Disc Length: $MINUTES:$SECONDS" >> "$IMGDIR/$WAVNAME/WAVINFO"
199 fi
200 if [ $CDEXTRA = 1 ]; then
201 # get number of sectors with mkisofs
202 CDEXTRATSIZE=$($MKISOFS -r -J -joliet-long -l -print-size "$IMGDIR/$WAVNAME/CD-EXTRA/" 2>&1 | $TAIL -n1 | $SED -e 's/^.*\ =\ //')
203 # a sector has 2048 bytes, 500 sectors are 1 MiB
204 CDEXTRAMB=($CDEXTRATSIZE/500)
205 echo "Data Size: $CDEXTRAMB MiB ($CDEXTRATSIZE sectors)"
206 echo "Data Size: $CDEXTRAMB MiB" >> "$IMGDIR/$WAVNAME/WAVINFO"
207 # total CDTIME is audio time + data "time" (a second audio uses 75 sectors) + ca. 160 seconds overhead (used by the sessions)
208 CDTIME=($CDTIME+160+$CDEXTRATSIZE/75)
209 MINUTES=($CDTIME/60)
210 SECONDS=`expr $CDTIME % 60`
211 if [ $SECONDS -le 9 ]; then
212 echo "Total Disc Length: $MINUTES:0$SECONDS"
213 echo "Total Disc Length: $MINUTES:0$SECONDS" >> "$IMGDIR/$WAVNAME/WAVINFO"
214 else
215 echo "Total Disc Length: $MINUTES:$SECONDS"
216 echo "Total Disc Length: $MINUTES:$SECONDS" >> "$IMGDIR/$WAVNAME/WAVINFO"
217 fi
218 fi
219 if [ $MINUTES -ge 80 ]; then
220 echo -e "${YELLOW}WARNING:${NOCOLOR} This may not fit on a standard 80 min. CD-R!"
221 echo "WARNING: This may not fit on a standard 80 min. CD-R!" >> "$IMGDIR/$WAVNAME/WAVINFO"
222 fi
223 }