tomwalters@54: #!/bin/bash tomwalters@54: # tomwalters@165: tomwalters@54: HCOPY=`which HCopy` tomwalters@165: if [ $HCOPY == "" ]; then tomwalters@54: echo "Please build HTK and make the binaries available in the path" tomwalters@54: fi tomwalters@54: tomwalters@54: set -e tomwalters@54: set -u tomwalters@54: tomwalters@54: FEATURES_DIR=$1 tomwalters@54: SOUND_SOURCE=$2 tomwalters@54: tomwalters@54: FULL_LIST=feature_generation_script tomwalters@54: tomwalters@54: # Temporary file names tomwalters@54: SYLLIST=syllable_list tomwalters@54: TALKERS=talker_list tomwalters@54: tomwalters@54: # The vowels and consonants that make up the CNBH database tomwalters@54: VOWELS="a e i o u" tomwalters@54: CONSONANTS="b d f g h k l m n p r s t v w x y z" tomwalters@54: tomwalters@54: if [ ! -e $FEATURES_DIR/.features_script_success ]; then tomwalters@54: mkdir -p $FEATURES_DIR tomwalters@54: tomwalters@54: # Make the sets of VC, CV, and vowel only labels, plus silence and use them to tomwalters@54: # generate the grammar, dictionary and list of syllables tomwalters@54: if [ -a $FEATURES_DIR/$SYLLIST.tmp.tmp ] tomwalters@54: then tomwalters@54: rm $FEATURES_DIR/$SYLLIST.tmp.tmp tomwalters@54: fi tomwalters@54: tomwalters@54: for v in $VOWELS; do tomwalters@54: for c in $CONSONANTS; do tomwalters@54: echo $v$c >> $FEATURES_DIR/$SYLLIST.tmp.tmp tomwalters@54: echo $c$v >> $FEATURES_DIR/$SYLLIST.tmp.tmp tomwalters@54: done tomwalters@54: done tomwalters@54: tomwalters@54: # Sort the syllable list and delete the tomwalters@54: # temporary, unsorted version tomwalters@54: sort $FEATURES_DIR/$SYLLIST.tmp.tmp > $FEATURES_DIR/$SYLLIST.tmp tomwalters@54: rm $FEATURES_DIR/$SYLLIST.tmp.tmp tomwalters@54: tomwalters@54: cat <<"EOF" > $FEATURES_DIR/${TALKERS}.tmp tomwalters@54: 170.9p112.2s tomwalters@54: 171.0p112.8s tomwalters@54: 171.3p111.7s tomwalters@54: 171.5p113.1s tomwalters@54: 171.9p111.5s tomwalters@54: 172.1p113.0s tomwalters@54: 172.4p111.9s tomwalters@54: 172.5p112.5s tomwalters@54: 171.7p112.3s tomwalters@54: 137.0p104.3s tomwalters@54: 141.3p135.4s tomwalters@54: 145.5p106.3s tomwalters@54: 148.8p128.8s tomwalters@54: 151.6p83.9s tomwalters@54: 153.0p108.1s tomwalters@54: 155.5p123.5s tomwalters@54: 156.7p90.6s tomwalters@54: 159.5p109.6s tomwalters@54: 161.1p119.4s tomwalters@54: 161.1p96.8s tomwalters@54: 163.4p157.6s tomwalters@54: 164.7p110.8s tomwalters@54: 164.9p102.1s tomwalters@54: 165.6p144.0s tomwalters@54: 165.7p116.2s tomwalters@54: 167.4p133.5s tomwalters@54: 167.8p106.5s tomwalters@54: 168.6p111.6s tomwalters@54: 168.9p125.4s tomwalters@54: 169.0p114.0s tomwalters@54: 170.0p109.7s tomwalters@54: 170.1p119.5s tomwalters@54: 171.0p115.5s tomwalters@54: 172.4p109.3s tomwalters@54: 173.3p105.6s tomwalters@54: 173.5p115.0s tomwalters@54: 174.5p100.6s tomwalters@54: 174.5p110.6s tomwalters@54: 174.9p113.0s tomwalters@54: 175.7p118.5s tomwalters@54: 176.1p94.5s tomwalters@54: 178.0p108.5s tomwalters@54: 178.1p87.6s tomwalters@54: 178.8p123.6s tomwalters@54: 179.0p113.9s tomwalters@54: 180.4p80.1s tomwalters@54: 183.0p105.7s tomwalters@54: 183.0p130.4s tomwalters@54: 184.8p115.1s tomwalters@54: 188.1p139.2s tomwalters@54: 189.6p102.1s tomwalters@54: 192.7p116.7s tomwalters@54: 194.5p150.4s tomwalters@54: 198.1p97.9s tomwalters@54: 202.7p118.6s tomwalters@54: 208.6p93.2s tomwalters@54: 215.2p121.0s tomwalters@54: EOF tomwalters@54: tomwalters@165: echo "Generating script..." tomwalters@165: exec 3> $FEATURES_DIR/$FULL_LIST tomwalters@165: for syllable in $(cat $FEATURES_DIR/${SYLLIST}.tmp); do tomwalters@165: for speaker in $(cat $FEATURES_DIR/${TALKERS}.tmp); do tomwalters@165: SOURCE_FILENAME=$SOUND_SOURCE/$syllable/${syllable}${speaker}.wav tomwalters@165: DEST_FILENAME=$FEATURES_DIR/$syllable/${syllable}${speaker}.htk tomwalters@165: echo "$SOURCE_FILENAME ${DEST_FILENAME}" >&3 tomwalters@165: done tomwalters@165: done tomwalters@165: exec 3>&- tomwalters@54: tomwalters@54: # Make the necessary directories for the computed features tomwalters@54: echo "Making directory structure..." tomwalters@54: for syllable in $(cat $FEATURES_DIR/${SYLLIST}.tmp); do tomwalters@54: mkdir -p $FEATURES_DIR/$syllable tomwalters@54: done tomwalters@54: tomwalters@165: tomwalters@54: echo "Creating HCopy config file..." tomwalters@54: cat <<"EOF" > $FEATURES_DIR/${HCOPY_CONFIG} tomwalters@54: # Coding parameters tomwalters@54: SOURCEFORMAT= WAV tomwalters@54: TARGETKIND = MFCC_0_D_A tomwalters@54: TARGETRATE = 100000.0 tomwalters@54: SAVECOMPRESSED = T tomwalters@54: SAVEWITHCRC = T tomwalters@54: WINDOWSIZE = 250000.0 tomwalters@54: USEHAMMING = T tomwalters@54: PREEMCOEF = 0.97 tomwalters@54: NUMCHANS = 200 tomwalters@54: CEPLIFTER = 22 tomwalters@54: NUMCEPS = 12 tomwalters@54: ENORMALISE = F tomwalters@54: # Parameters a bit like Welling and Ney (2002) tomwalters@54: # Can't do zero, it seems. tomwalters@54: WARPLCUTOFF = 10 tomwalters@54: # Upper frequency is the Nyquist freq. (24000Hz) tomwalters@54: # so choose the break freq. close to that tomwalters@165: WARPUCUTOFF = 23000 tomwalters@54: EOF tomwalters@54: tomwalters@165: #echo "Splitting data files..." tomwalters@165: #cat $WORK/${TRAIN_LIST} $WORK/${TEST_LIST} > $WORK/${COMBINED_LIST} tomwalters@165: tomwalters@165: for TALKER in $(cat $FEATURES_DIR/$TALKERS); do tomwalters@54: cp $FEATURES_DIR/${HCOPY_CONFIG} $FEATURES_DIR/${HCOPY_CONFIG}_$TALKER tomwalters@165: scale=`echo $speaker | sed 's/.*p//' | sed 's/s.*//'` tomwalters@54: warpfactor=0`echo "scale=4; 100.0/$scale" | bc` tomwalters@165: echo "WARPFREQ = $warpfactor" >> $WORK/${HCOPY_CONFIG}_$TALKER tomwalters@165: ${HTK_PREFIX}HCopy -T 1 -C $FEATURES_DIR/${HCOPY_CONFIG}_$TALKER -S $FEATURES_DIR/${TRAIN_LIST}_$TALKER & tomwalters@54: done tomwalters@54: tomwalters@165: echo "Waiting for tasks to complete..." tomwalters@165: wait tomwalters@165: echo "Done!" tomwalters@54: tomwalters@54: rm $FEATURES_DIR/$SYLLIST.tmp tomwalters@54: rm $FEATURES_DIR/${TALKERS}.tmp tomwalters@54: touch $FEATURES_DIR/.features_script_success tomwalters@165: fi