Alan W Blackfirst commite7e48689 years agoHistory
274 lines · 10.1 KB · Text
RawDownload
#!/bin/sh#############################################################################                                                                       ####                  Language Technologies Institute                      ####                     Carnegie Mellon University                        ####                         Copyright (c) 2017                            ####                        All Rights Reserved.                           ####                                                                       ####  Permission is hereby granted, free of charge, to use and distribute  ####  this software and its documentation without restriction, including   ####  without limitation the rights to use, copy, modify, merge, publish,  ####  distribute, sublicense, and/or sell copies of this work, and to      ####  permit persons to whom this work is furnished to do so, subject to   ####  the following conditions:                                            ####   1. The code must retain the above copyright notice, this list of    ####      conditions and the following disclaimer.                         ####   2. Any modifications must be clearly marked as such.                ####   3. Original authors' names are not deleted.                         ####   4. The authors' names are not used to endorse or promote products   ####      derived from this software without specific prior written        ####      permission.                                                      ####                                                                       ####  CARNEGIE MELLON UNIVERSITY AND THE CONTRIBUTORS TO THIS WORK         ####  DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING      ####  ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT   ####  SHALL CARNEGIE MELLON UNIVERSITY NOR THE CONTRIBUTORS BE LIABLE      ####  FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES    ####  WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN   ####  AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,          ####  ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF       ####  THIS SOFTWARE.                                                       ####                                                                       ###############################################################################             Author:  Alan W Black (awb@cs.cmu.edu)                    ####               Date:  June 2017                                        ###############################################################################  Quantize values in params file for smaller models in flite           ############################################################################# # Compress (and decompress) a params file. ./etc/voice.defs if [ "$1" = "find_segments_wagon" ]then    # Note used anymore, but was used to test to find the "best" partition    # of the range of values, i.e. minimize mean error.    if [ ! -d ch ]    then        mkdir ch    fi     for i in `seq 0 103`    do       $ESTDIR/bin/ch_track -c $i festival/trees/old_cmu_us_slt_mcep.params |           awk '{print $1,$1}' >ch/$i.out       # sss=`echo $i | awk '{if (($1 % 2) == 0) print 15; else print 250}'`       sss=250       $ESTDIR/bin/wagon -stop $sss -desc x.desc -data ch/$i.out -o x.tree       $ESTDIR/bin/wagon_test -desc x.desc -data ch/$i.out -tree x.tree -predict_val >ch/$i.outn    done     paste `seq 0 103 | awk '{for(i=1;i<=NF;i++) printf("ch/%d.outn ",$i)}'` |        $ESTDIR/bin/ch_track -itype ascii -otype est_binary -s 0.005 -o new.params        exit 0fi if [ "$1" = "find_segments_quant" ]then    if [ ! -d ch ]    then        mkdir ch    fi     basemodel=festival/trees/old_cmu_us_slt_mcep.params    if [ $# = 2 ]    then        basemodel=$2    fi    numquants=255#    numquants=16    numchannels=`$ESTDIR/bin/ch_track -info $basemodel | grep "Number of channels" | awk '{print $NF-1}'`     for i in `seq 0 $numchannels`    do       echo Quantizing q$numquants channel $i of $numchannels       $ESTDIR/bin/ch_track -c $i $basemodel |           awk '{print $1}' >ch/$i.out       ns=`cat ch/$i.out | awk 'END {print NR}'`       sort -g ch/$i.out |           awk 'BEGIN {numlines='$ns'; segsize=numlines/'$numquants'.0; q=0; seg=0;}                { #print NR,(segsize*(1+seg)),t,q,$1                  if (NR < (segsize*(1+seg)))                  {                     t+=$1;                     q+=1;                  }                  else                  {                     printf("seg[ %d ]= %f \n",seg,t/q);                     seg+=1;                     q=0;                     t=0;                  }}' >ch/$i.segs       echo "BEGIN {" >x.awk       cat ch/$i.segs >>x.awk       echo "}             { b=0; bs=(\$1-seg[0])*(\$1-seg[0]);               for (i=0; i<$numquants; i++)               {                  d=\$1-seg[i]                  if (d*d < bs)                  {                     bs=d*d; b=i;                  }                  else if (d*d > bs)                     i=$numquants               }               print b}" >>x.awk       awk -f x.awk ch/$i.out >ch/$i.outn    done     # Make the q_table for this params file    for i in `seq 0 $numchannels`    do        awk '{printf("%s ",$NF)} END {printf("\n")}' ch/$i.segs    done |        $ESTDIR/bin/ch_track -itype ascii -otype est_binary -s 0.005 -o new.q_table             paste `seq 0 $numchannels | awk '{for(i=1;i<=NF;i++) printf("ch/%d.outn ",$i)}'` |        awk '{ if (NF == 114)               {                   # This drops vector values that arent actually used to get                   # better reduction -- its very specific to current rf3 builds                   # no f0, statics, delta stddev, me means and voicing                   for (i=3; i<3+50; i+=2)                       printf("%d ",($i*256)+$(i+1)); # statics mean/stddev                   for (i=53; i<53+48; i+=4)                       printf("%d ",($(i+1)*256)+$(i+3));# deltas only stddev +1                   printf("%d ",($102*256)+$(103)); # last delta stdev + me[0]                   printf("%d ",($105*256)+$(107)); # me[1], me[2]                   printf("%d ",($109*256)+$(111)); # me[3], me[4]                   printf("%d ",($113*256)+$(114));  # voicing mean,stddev                   printf("\n");                 }                else                {                   # A more simple generic 8 bit compression                   for (i=1; i<=NF; i+=2)                     printf("%d ",($i*256)+$(i+1));                   printf("\n");               }}' |           $ESTDIR/bin/ch_track -itype ascii -otype est_binary -s 0.005 -o new.params     mv new.params $basemodel.q_params    mv new.q_table $basemodel.q_table        exit 0 fi if [ "$1" = "find_segments2" ]then    # This is used for debugging the params in festival space    # it quantizes the values, rather than gives you the index to the values    # so you can test the quality of quantization    if [ ! -d ch ]    then        mkdir ch    fi     basemodel=festival/trees/old_cmu_us_slt_mcep.params    if [ $# = 2 ]    then        basemodel=$2    fi    numquants=255    numquants=16    numchannels=`$ESTDIR/bin/ch_track -info $basemodel | grep "Number of channels" | awk '{print $NF-1}'`     for i in `seq 0 $numchannels`    do       $ESTDIR/bin/ch_track -c $i $basemodel |           awk '{print $1}' >ch/$i.out       ns=`cat ch/$i.out | awk 'END {print NR}'`       sort -g ch/$i.out |           awk 'BEGIN {numlines='$ns'; segsize=numlines/'$numquants'.0; q=0; seg=0;}                { #print NR,(segsize*(1+seg)),t,q,$1                  if (NR < (segsize*(1+seg)))                  {                     t+=$1;                     q+=1;                  }                  else                  {                     printf("seg[ %d ]= %f \n",seg,t/q);                     seg+=1;                     q=0;                     t=0;                  }}' >ch/$i.segs       echo "BEGIN {" >x.awk       cat ch/$i.segs >>x.awk       echo "}             { b=0; bs=(\$1-seg[0])*(\$1-seg[0]);               for (i=0; i<$numquants; i++)               {                  d=\$1-seg[i]                  if (d*d < bs)                  {                     bs=d*d; b=i;                  }               }               print seg[b]}" >>x.awk       awk -f x.awk ch/$i.out >ch/$i.outn    done     paste `seq 0 $numchannels | awk '{for(i=1;i<=NF;i++) printf("ch/%d.outn ",$i)}'` |        $ESTDIR/bin/ch_track -itype ascii -otype est_binary -s 0.005 -o new.params        exit 0fi if [ "$1" = "quantize_rf_models" ]then    for i in `cat rf_models/mlist`    do        echo Quantizing model $i        $0 find_segments_quant rf_models/trees_$i/${FV_VOICENAME}_mcep.params    done     exitfi if [ "$1" = "find_segments3" ]then    # Split into equal ranges, ignoring distribution of the ranges (i.e. bad)    if [ ! -d ch ]    then        mkdir ch    fi     for i in `seq 0 103`    do       $ESTDIR/bin/ch_track -c $i festival/trees/old_cmu_us_slt_mcep.params |           awk '{print $1,$1}' >ch/$i.out       nmax=`cat ch/$i.out | awk '{if (NR == 1) t=$1; if ($1 > t) t=$1} END {print t}'`       nmin=`cat ch/$i.out | awk '{if (NR == 1) t=$1; if ($1 < t) t=$1} END {print t}'`       echo $nmin $nmax |           awk '{ segsize = ($2-$1)/254.0;                  for (i=0; i<254; i++)                  {                     printf("seg[%d]=%f\n",i,(0.5+i)*segsize);                  }}' >ch/$i.segs       echo "BEGIN {" >x.awk       cat ch/$i.segs >>x.awk       echo "}             { b=0; bs=(\$1-seg[0])*(\$1-seg[0]);               for (i=0; i<254; i++)               {                  d=\$1-seg[i]                  if (d*d < bs)                  {                     bs=d*d; b=i;                  }               }               print seg[b]}" >>x.awk       awk -f x.awk ch/$i.out >ch/$i.outn    done     paste `seq 0 103 | awk '{for(i=1;i<=NF;i++) printf("ch/%d.outn ",$i)}'` |        $ESTDIR/bin/ch_track -itype ascii -otype est_binary -s 0.005 -o new.params        exit 0fi

Keyboard shortcuts

General

Show keyboard shortcuts
?
Focus the current search
/

Issues and pull requests

Open filters
f

Issues, pull requests and Inbox

Select next item
j↓
Select previous item
k↑
Open selected item
Enter
Dismiss filters or clear selection
Esc

Repository code

Go to file
t