tomwalters@335: #!/bin/bash tomwalters@335: # Copyright 2009-2010 Thomas Walters tomwalters@335: # tomwalters@335: # Generate a list of source and destination filenames from the syllables spoke tomwalters@335: # pattern. This list can be used as a script for HTK's HCopy and AIM-C's tomwalters@335: # AIMCopy binaries for generating features. tomwalters@335: # tomwalters@335: # The first argument is the path to the root directory for the features to be tomwalters@335: # generated in. The second argument is the path to the sounds database. tomwalters@335: # tomwalters@335: # Generated files: tomwalters@335: # feature_generation_script - The AIMCopy / HCopy script tomwalters@335: tomwalters@335: FEATURES_DIR=$1 tomwalters@335: SOUND_SOURCE=$2 tomwalters@359: SUFFIX=$3 tomwalters@335: tomwalters@335: FULL_LIST=feature_generation_script tomwalters@335: tomwalters@335: # Temporary file names tomwalters@335: SYLLIST=syllable_list tomwalters@335: TALKERS=talker_list tomwalters@335: tomwalters@335: # The vowels and consonants that make up the CNBH database tomwalters@335: VOWELS="a e i o u" tomwalters@335: CONSONANTS="b d f g h k l m n p r s t v w x y z" tomwalters@335: tomwalters@335: if [ ! -e $FEATURES_DIR/.features_script_success ]; then tomwalters@335: mkdir -p $FEATURES_DIR tomwalters@335: tomwalters@335: # Make the sets of VC, CV, and vowel only labels, plus silence and use them to tomwalters@335: # generate the grammar, dictionary and list of syllables tomwalters@335: if [ -a $FEATURES_DIR/$SYLLIST.tmp.tmp ] tomwalters@335: then tomwalters@335: rm $FEATURES_DIR/$SYLLIST.tmp.tmp tomwalters@335: fi tomwalters@335: tomwalters@335: for v in $VOWELS; do tomwalters@367: echo $v$v >> $FEATURES_DIR/$SYLLIST.tmp.tmp tomwalters@335: for c in $CONSONANTS; do tomwalters@335: echo $v$c >> $FEATURES_DIR/$SYLLIST.tmp.tmp tomwalters@335: echo $c$v >> $FEATURES_DIR/$SYLLIST.tmp.tmp tomwalters@335: done tomwalters@335: done tomwalters@335: tomwalters@335: # Sort the syllable list and delete the tomwalters@335: # temporary, unsorted version tomwalters@335: sort $FEATURES_DIR/$SYLLIST.tmp.tmp > $FEATURES_DIR/$SYLLIST.tmp tomwalters@335: rm $FEATURES_DIR/$SYLLIST.tmp.tmp tomwalters@335: tomwalters@335: cat <<"EOF" > $FEATURES_DIR/${TALKERS}.tmp tomwalters@335: 170.9p112.2s tomwalters@335: 171.0p112.8s tomwalters@335: 171.3p111.7s tomwalters@335: 171.5p113.1s tomwalters@335: 171.9p111.5s tomwalters@335: 172.1p113.0s tomwalters@335: 172.4p111.9s tomwalters@335: 172.5p112.5s tomwalters@335: 171.7p112.3s tomwalters@335: 137.0p104.3s tomwalters@335: 141.3p135.4s tomwalters@335: 145.5p106.3s tomwalters@335: 148.8p128.8s tomwalters@335: 151.6p83.9s tomwalters@335: 153.0p108.1s tomwalters@335: 155.5p123.5s tomwalters@335: 156.7p90.6s tomwalters@335: 159.5p109.6s tomwalters@335: 161.1p119.4s tomwalters@335: 161.1p96.8s tomwalters@335: 163.4p157.6s tomwalters@335: 164.7p110.8s tomwalters@335: 164.9p102.1s tomwalters@335: 165.6p144.0s tomwalters@335: 165.7p116.2s tomwalters@335: 167.4p133.5s tomwalters@335: 167.8p106.5s tomwalters@335: 168.6p111.6s tomwalters@335: 168.9p125.4s tomwalters@335: 169.0p114.0s tomwalters@335: 170.0p109.7s tomwalters@335: 170.1p119.5s tomwalters@335: 171.0p115.5s tomwalters@335: 172.4p109.3s tomwalters@335: 173.3p105.6s tomwalters@335: 173.5p115.0s tomwalters@335: 174.5p100.6s tomwalters@335: 174.5p110.6s tomwalters@335: 174.9p113.0s tomwalters@335: 175.7p118.5s tomwalters@335: 176.1p94.5s tomwalters@335: 178.0p108.5s tomwalters@335: 178.1p87.6s tomwalters@335: 178.8p123.6s tomwalters@335: 179.0p113.9s tomwalters@335: 180.4p80.1s tomwalters@335: 183.0p105.7s tomwalters@335: 183.0p130.4s tomwalters@335: 184.8p115.1s tomwalters@335: 188.1p139.2s tomwalters@335: 189.6p102.1s tomwalters@335: 192.7p116.7s tomwalters@335: 194.5p150.4s tomwalters@335: 198.1p97.9s tomwalters@335: 202.7p118.6s tomwalters@335: 208.6p93.2s tomwalters@335: 215.2p121.0s tomwalters@335: EOF tomwalters@335: tomwalters@335: echo "Generating script..." tomwalters@335: exec 3> $FEATURES_DIR/$FULL_LIST tomwalters@335: for syllable in $(cat $FEATURES_DIR/${SYLLIST}.tmp); do tomwalters@335: for speaker in $(cat $FEATURES_DIR/${TALKERS}.tmp); do tomwalters@335: SOURCE_FILENAME=$SOUND_SOURCE/$syllable/${syllable}${speaker}.wav tomwalters@359: DEST_FILENAME=$FEATURES_DIR/$syllable/${syllable}${speaker}.$SUFFIX tomwalters@335: echo "$SOURCE_FILENAME ${DEST_FILENAME}" >&3 tomwalters@335: done tomwalters@335: done tomwalters@335: exec 3>&- tomwalters@335: tomwalters@335: # Make the necessary directories for the computed features tomwalters@335: echo "Making directory structure..." tomwalters@335: for syllable in $(cat $FEATURES_DIR/${SYLLIST}.tmp); do tomwalters@335: mkdir -p $FEATURES_DIR/$syllable tomwalters@335: done tomwalters@335: tomwalters@335: rm $FEATURES_DIR/$SYLLIST.tmp tomwalters@335: rm $FEATURES_DIR/${TALKERS}.tmp tomwalters@335: touch $FEATURES_DIR/.features_script_success tomwalters@335: fi