#!/bin/sh
#####################################################-*-mode:shell-script-*-
##                                                                       ##
##                   Carnegie Mellon University and                      ##
##                   Alan W Black and Kevin A. Lenzo                     ##
##                      Copyright (c) 1998-2000                          ##
##                        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.                                                       ##
##                                                                       ##
###########################################################################
##                                                                       ##
##  Find power normalization factor for each waveform file               ##
##      Finds power for each labelled vowel                              ##
##      Finds mean power for each vowel                                  ##
##      Finds power factor for each file (used by make_lpc)              ##
##                                                                       ##
##                                                                       ##
##  Naively assumes that vowels in phoneset start with (upper or lower   ##
##  letter vowels)                                                       ##
##                                                                       ##
##  usage:  bin/find_powerfactors lab/*.lab                              ##
##                                                                       ##
###########################################################################

if [ $# = 0 ]
then
   echo "Find power normalization factor for each file"
   echo "Usage:  bin/find_powerfactors lab/*.lab"
   echo "Will create etc/powfacts used by bin/make_lpc"
   exit 1
fi

# Modification by Milan Zamazal <pdm@freebsoft.org>: Ensure locales don't break awk operation.
unset LC_ALL
export LC_NUMERIC=C

for i in $*
do
   fname=`basename $i .lab`
   echo $fname >/dev/tty
   cat $i |
   awk 'BEGIN {fname="'$fname'"; }
        {if (($3 ~ /^[AaEeIiOoUu].*/) &&
             ($3 != "using"))
         {
	   printf("echo START %s %s\n",fname,$3);
           printf("ch_wave -start %f -end %f wav/%s.wav -otype raw -ostype ascii\n",ltime,$1,fname);
         }
         if ($3 != "DB")
            ltime=$1}' | sh |
         awk 'BEGIN {fname="start";}
              {if ($1 == "START")
              {
                  if (fname != "start")
		       print fname,ph,t,sqrt(t/l)
                  fname = $2;
                  ph=$3;
                  l=1;
                  t=0;
              }
              else
              {
                 t += $1*$1;
                 l++;                 
              }}
              END { print fname,ph,t,sqrt(t/l) }'
done >etc/all_vpower

# Find the mean power for each vowel
cat etc/all_vpower |
awk '{vp[$2] += $4;
      vn[$2] += 1;}
     END {for (i in vp)
            printf("vp[\"%s\"] =  %f;\n",i,vp[i]/vn[i]); }' >etc/mean_vpow

# find the power modficiation factor for each file
# Modification by Milan Zamazal <pdm@freebsoft.org>: Do not store the output to
# etc/powfacts directly, to force hard link breakage when using Arch revision
# libraries.
cat etc/all_vpower |
awk 'BEGIN {'"`cat etc/mean_vpow`"' lfile = ""; t = 0; nt = 0;
}
   {if (($1 != lfile) && (lfile != ""))
    {
       printf("%s %f\n",lfile,nt/t);
       nt = 0;
       t = 0; 
   }
    if (vp[$2] != 0)
    {
       t += $4;
       nt += vp[$2];
    }
    lfile = $1;
   }
   END {
      printf("%s %f\n",lfile,nt/t);
   }' >etc/powfacts.new
mv etc/powfacts.new etc/powfacts
