tomwalters@54
|
1 #!/bin/bash
|
tomwalters@54
|
2 #
|
tomwalters@71
|
3 HCOPY_CONFIG=hcopy.config
|
tomwalters@54
|
4 HCOPY=`which HCopy`
|
tomwalters@71
|
5 if [ "$HCOPY" == "" ]; then
|
tomwalters@54
|
6 echo "Please build HTK and make the binaries available in the path"
|
tomwalters@54
|
7 fi
|
tomwalters@54
|
8
|
tomwalters@54
|
9 set -e
|
tomwalters@54
|
10 set -u
|
tomwalters@54
|
11
|
tomwalters@54
|
12 FEATURES_DIR=$1
|
tomwalters@54
|
13 SOUND_SOURCE=$2
|
tomwalters@54
|
14
|
tomwalters@54
|
15 FULL_LIST=feature_generation_script
|
tomwalters@54
|
16
|
tomwalters@54
|
17 # Temporary file names
|
tomwalters@54
|
18 SYLLIST=syllable_list
|
tomwalters@54
|
19 TALKERS=talker_list
|
tomwalters@54
|
20
|
tomwalters@54
|
21 # The vowels and consonants that make up the CNBH database
|
tomwalters@54
|
22 VOWELS="a e i o u"
|
tomwalters@54
|
23 CONSONANTS="b d f g h k l m n p r s t v w x y z"
|
tomwalters@54
|
24
|
tomwalters@54
|
25 if [ ! -e $FEATURES_DIR/.features_script_success ]; then
|
tomwalters@54
|
26 mkdir -p $FEATURES_DIR
|
tomwalters@54
|
27
|
tomwalters@54
|
28 # Make the sets of VC, CV, and vowel only labels, plus silence and use them to
|
tomwalters@54
|
29 # generate the grammar, dictionary and list of syllables
|
tomwalters@54
|
30 if [ -a $FEATURES_DIR/$SYLLIST.tmp.tmp ]
|
tomwalters@54
|
31 then
|
tomwalters@54
|
32 rm $FEATURES_DIR/$SYLLIST.tmp.tmp
|
tomwalters@54
|
33 fi
|
tomwalters@54
|
34
|
tomwalters@54
|
35 for v in $VOWELS; do
|
tomwalters@54
|
36 for c in $CONSONANTS; do
|
tomwalters@54
|
37 echo $v$c >> $FEATURES_DIR/$SYLLIST.tmp.tmp
|
tomwalters@54
|
38 echo $c$v >> $FEATURES_DIR/$SYLLIST.tmp.tmp
|
tomwalters@54
|
39 done
|
tomwalters@54
|
40 done
|
tomwalters@54
|
41
|
tomwalters@54
|
42 # Sort the syllable list and delete the
|
tomwalters@54
|
43 # temporary, unsorted version
|
tomwalters@54
|
44 sort $FEATURES_DIR/$SYLLIST.tmp.tmp > $FEATURES_DIR/$SYLLIST.tmp
|
tomwalters@54
|
45 rm $FEATURES_DIR/$SYLLIST.tmp.tmp
|
tomwalters@54
|
46
|
tomwalters@54
|
47 cat <<"EOF" > $FEATURES_DIR/${TALKERS}.tmp
|
tomwalters@54
|
48 170.9p112.2s
|
tomwalters@54
|
49 171.0p112.8s
|
tomwalters@54
|
50 171.3p111.7s
|
tomwalters@54
|
51 171.5p113.1s
|
tomwalters@54
|
52 171.9p111.5s
|
tomwalters@54
|
53 172.1p113.0s
|
tomwalters@54
|
54 172.4p111.9s
|
tomwalters@54
|
55 172.5p112.5s
|
tomwalters@54
|
56 171.7p112.3s
|
tomwalters@54
|
57 137.0p104.3s
|
tomwalters@54
|
58 141.3p135.4s
|
tomwalters@54
|
59 145.5p106.3s
|
tomwalters@54
|
60 148.8p128.8s
|
tomwalters@54
|
61 151.6p83.9s
|
tomwalters@54
|
62 153.0p108.1s
|
tomwalters@54
|
63 155.5p123.5s
|
tomwalters@54
|
64 156.7p90.6s
|
tomwalters@54
|
65 159.5p109.6s
|
tomwalters@54
|
66 161.1p119.4s
|
tomwalters@54
|
67 161.1p96.8s
|
tomwalters@54
|
68 163.4p157.6s
|
tomwalters@54
|
69 164.7p110.8s
|
tomwalters@54
|
70 164.9p102.1s
|
tomwalters@54
|
71 165.6p144.0s
|
tomwalters@54
|
72 165.7p116.2s
|
tomwalters@54
|
73 167.4p133.5s
|
tomwalters@54
|
74 167.8p106.5s
|
tomwalters@54
|
75 168.6p111.6s
|
tomwalters@54
|
76 168.9p125.4s
|
tomwalters@54
|
77 169.0p114.0s
|
tomwalters@54
|
78 170.0p109.7s
|
tomwalters@54
|
79 170.1p119.5s
|
tomwalters@54
|
80 171.0p115.5s
|
tomwalters@54
|
81 172.4p109.3s
|
tomwalters@54
|
82 173.3p105.6s
|
tomwalters@54
|
83 173.5p115.0s
|
tomwalters@54
|
84 174.5p100.6s
|
tomwalters@54
|
85 174.5p110.6s
|
tomwalters@54
|
86 174.9p113.0s
|
tomwalters@54
|
87 175.7p118.5s
|
tomwalters@54
|
88 176.1p94.5s
|
tomwalters@54
|
89 178.0p108.5s
|
tomwalters@54
|
90 178.1p87.6s
|
tomwalters@54
|
91 178.8p123.6s
|
tomwalters@54
|
92 179.0p113.9s
|
tomwalters@54
|
93 180.4p80.1s
|
tomwalters@54
|
94 183.0p105.7s
|
tomwalters@54
|
95 183.0p130.4s
|
tomwalters@54
|
96 184.8p115.1s
|
tomwalters@54
|
97 188.1p139.2s
|
tomwalters@54
|
98 189.6p102.1s
|
tomwalters@54
|
99 192.7p116.7s
|
tomwalters@54
|
100 194.5p150.4s
|
tomwalters@54
|
101 198.1p97.9s
|
tomwalters@54
|
102 202.7p118.6s
|
tomwalters@54
|
103 208.6p93.2s
|
tomwalters@54
|
104 215.2p121.0s
|
tomwalters@54
|
105 EOF
|
tomwalters@54
|
106
|
tomwalters@54
|
107
|
tomwalters@54
|
108 # Make the necessary directories for the computed features
|
tomwalters@54
|
109 echo "Making directory structure..."
|
tomwalters@54
|
110 for syllable in $(cat $FEATURES_DIR/${SYLLIST}.tmp); do
|
tomwalters@54
|
111 mkdir -p $FEATURES_DIR/$syllable
|
tomwalters@54
|
112 done
|
tomwalters@54
|
113
|
tomwalters@54
|
114 echo "Creating HCopy config file..."
|
tomwalters@54
|
115 cat <<"EOF" > $FEATURES_DIR/${HCOPY_CONFIG}
|
tomwalters@54
|
116 # Coding parameters
|
tomwalters@54
|
117 SOURCEFORMAT= WAV
|
tomwalters@54
|
118 TARGETKIND = MFCC_0_D_A
|
tomwalters@54
|
119 TARGETRATE = 100000.0
|
tomwalters@54
|
120 SAVECOMPRESSED = T
|
tomwalters@54
|
121 SAVEWITHCRC = T
|
tomwalters@54
|
122 WINDOWSIZE = 250000.0
|
tomwalters@54
|
123 USEHAMMING = T
|
tomwalters@54
|
124 PREEMCOEF = 0.97
|
tomwalters@54
|
125 NUMCHANS = 200
|
tomwalters@54
|
126 CEPLIFTER = 22
|
tomwalters@54
|
127 NUMCEPS = 12
|
tomwalters@54
|
128 ENORMALISE = F
|
tomwalters@54
|
129 # Parameters a bit like Welling and Ney (2002)
|
tomwalters@54
|
130 # Can't do zero, it seems.
|
tomwalters@54
|
131 WARPLCUTOFF = 10
|
tomwalters@54
|
132 # Upper frequency is the Nyquist freq. (24000Hz)
|
tomwalters@54
|
133 # so choose the break freq. close to that
|
tomwalters@54
|
134 WARPUCUTOFF = 23000
|
tomwalters@54
|
135 EOF
|
tomwalters@54
|
136
|
tomwalters@73
|
137 for TALKER in $(cat $FEATURES_DIR/${TALKERS}.tmp); do
|
tomwalters@77
|
138 echo "Generating script..."
|
tomwalters@77
|
139 exec 3> $FEATURES_DIR/${FULL_LIST}_$TALKER
|
tomwalters@77
|
140 for syllable in $(cat $FEATURES_DIR/${SYLLIST}.tmp); do
|
tomwalters@77
|
141 SOURCE_FILENAME=$SOUND_SOURCE/$syllable/${syllable}${TALKER}.wav
|
tomwalters@77
|
142 DEST_FILENAME=$FEATURES_DIR/$syllable/${syllable}${TALKER}.htk
|
tomwalters@77
|
143 echo "$SOURCE_FILENAME ${DEST_FILENAME}" >&3
|
tomwalters@77
|
144 done
|
tomwalters@77
|
145 exec 3>&-
|
tomwalters@54
|
146 cp $FEATURES_DIR/${HCOPY_CONFIG} $FEATURES_DIR/${HCOPY_CONFIG}_$TALKER
|
tomwalters@77
|
147 scale=`echo $TALKER | sed 's/.*p//' | sed 's/s.*//'`
|
tomwalters@54
|
148 warpfactor=0`echo "scale=4; 100.0/$scale" | bc`
|
tomwalters@74
|
149 echo "WARPFREQ = $warpfactor" >> $FEATURES_DIR/${HCOPY_CONFIG}_$TALKER
|
tomwalters@77
|
150 HCopy -T 1 -C $FEATURES_DIR/${HCOPY_CONFIG}_$TALKER -S $FEATURES_DIR/${FULL_LIST}_$TALKER
|
tomwalters@54
|
151 done
|
tomwalters@54
|
152
|
tomwalters@77
|
153 #echo "Waiting for tasks to complete..."
|
tomwalters@77
|
154 #wait
|
tomwalters@77
|
155 #echo "Done!"
|
tomwalters@54
|
156
|
tomwalters@54
|
157 rm $FEATURES_DIR/$SYLLIST.tmp
|
tomwalters@54
|
158 rm $FEATURES_DIR/${TALKERS}.tmp
|
tomwalters@54
|
159 touch $FEATURES_DIR/.features_script_success
|
tomwalters@54
|
160 fi |