view trunk/experiments/scripts/cnbh-syllables/feature_generation/run_mfcc_vtln_conversion.sh @ 351:a7a6dba4a932

- AWS
author tomwalters
date Wed, 11 Aug 2010 11:36:48 +0000
parents 54f37df74ef1
children 26c7ad278d3c
line wrap: on
line source
#!/bin/bash
# 

HCOPY=`which HCopy`
if [ $HCOPY -eq "" ]; then
  echo "Please build HTK and make the binaries available in the path"
fi

set -e
set -u

FEATURES_DIR=$1
SOUND_SOURCE=$2

FULL_LIST=feature_generation_script

# Temporary file names
SYLLIST=syllable_list
TALKERS=talker_list

# The vowels and consonants that make up the CNBH database
VOWELS="a e i o u"
CONSONANTS="b d f g h k l m n p r s t v w x y z"

if [ ! -e $FEATURES_DIR/.features_script_success ]; then
mkdir -p $FEATURES_DIR

# Make the sets of VC, CV, and vowel only labels, plus silence and use them to
# generate the grammar, dictionary and list of syllables
if [ -a $FEATURES_DIR/$SYLLIST.tmp.tmp ] 
then
  rm $FEATURES_DIR/$SYLLIST.tmp.tmp
fi

for v in $VOWELS; do
  for c in $CONSONANTS; do
    echo $v$c >> $FEATURES_DIR/$SYLLIST.tmp.tmp
    echo $c$v >> $FEATURES_DIR/$SYLLIST.tmp.tmp
  done
done

# Sort the syllable list and delete the 
# temporary, unsorted version
sort $FEATURES_DIR/$SYLLIST.tmp.tmp > $FEATURES_DIR/$SYLLIST.tmp
rm $FEATURES_DIR/$SYLLIST.tmp.tmp

cat <<"EOF" > $FEATURES_DIR/${TALKERS}.tmp
170.9p112.2s
171.0p112.8s	
171.3p111.7s	
171.5p113.1s	
171.9p111.5s	
172.1p113.0s	
172.4p111.9s	
172.5p112.5s
171.7p112.3s	
137.0p104.3s	
141.3p135.4s	
145.5p106.3s	
148.8p128.8s	
151.6p83.9s	
153.0p108.1s	
155.5p123.5s	
156.7p90.6s	
159.5p109.6s	
161.1p119.4s	
161.1p96.8s	
163.4p157.6s	
164.7p110.8s	
164.9p102.1s	
165.6p144.0s	
165.7p116.2s	
167.4p133.5s	
167.8p106.5s	
168.6p111.6s	
168.9p125.4s	
169.0p114.0s	
170.0p109.7s	
170.1p119.5s	
171.0p115.5s	
172.4p109.3s	
173.3p105.6s	
173.5p115.0s	
174.5p100.6s	
174.5p110.6s	
174.9p113.0s	
175.7p118.5s	
176.1p94.5s	
178.0p108.5s	
178.1p87.6s	
178.8p123.6s	
179.0p113.9s	
180.4p80.1s	
183.0p105.7s	
183.0p130.4s	
184.8p115.1s	
188.1p139.2s	
189.6p102.1s	
192.7p116.7s	
194.5p150.4s	
198.1p97.9s	
202.7p118.6s	
208.6p93.2s	
215.2p121.0s
EOF

echo "Generating script..."
exec 3> $FEATURES_DIR/$FULL_LIST
for syllable in $(cat $FEATURES_DIR/${SYLLIST}.tmp); do
  for speaker in $(cat $FEATURES_DIR/${TALKERS}.tmp); do
    SOURCE_FILENAME=$SOUND_SOURCE/$syllable/${syllable}${speaker}.wav
    DEST_FILENAME=$FEATURES_DIR/$syllable/${syllable}${speaker}.htk
    echo "$SOURCE_FILENAME  ${DEST_FILENAME}" >&3
  done
done
exec 3>&-

# Make the necessary directories for the computed features
echo "Making directory structure..."
for syllable in $(cat $FEATURES_DIR/${SYLLIST}.tmp); do
  mkdir -p $FEATURES_DIR/$syllable
done


echo "Creating HCopy config file..."
cat <<"EOF" > $FEATURES_DIR/${HCOPY_CONFIG}
# Coding parameters
SOURCEFORMAT= WAV
TARGETKIND = MFCC_0_D_A
TARGETRATE = 100000.0
SAVECOMPRESSED = T
SAVEWITHCRC = T
WINDOWSIZE = 250000.0
USEHAMMING = T
PREEMCOEF = 0.97
NUMCHANS = 200
CEPLIFTER = 22
NUMCEPS = 12
ENORMALISE = F
# Parameters a bit like Welling and Ney (2002)
# Can't do zero, it seems.
WARPLCUTOFF = 10 
# Upper frequency is the Nyquist freq. (24000Hz) 
# so choose the break freq. close to that
WARPUCUTOFF = 23000
EOF

#echo "Splitting data files..."
#cat $WORK/${TRAIN_LIST} $WORK/${TEST_LIST} > $WORK/${COMBINED_LIST}

for TALKER in $(cat $FEATURES_DIR/$TALKERS); do
  cp $FEATURES_DIR/${HCOPY_CONFIG} $FEATURES_DIR/${HCOPY_CONFIG}_$TALKER
  scale=`echo $speaker | sed 's/.*p//' | sed 's/s.*//'`
  warpfactor=0`echo "scale=4; 100.0/$scale" | bc`
  echo "WARPFREQ = $warpfactor" >> $WORK/${HCOPY_CONFIG}_$TALKER
  ${HTK_PREFIX}HCopy -T 1 -C $FEATURES_DIR/${HCOPY_CONFIG}_$TALKER -S $FEATURES_DIR/${TRAIN_LIST}_$TALKER &
done

echo "Waiting for tasks to complete..."
wait
echo "Done!"

rm $FEATURES_DIR/$SYLLIST.tmp
rm $FEATURES_DIR/${TALKERS}.tmp
touch $FEATURES_DIR/.features_script_success
fi