#!/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 contour for each waveform file              ##
##      Finds power for each labelled vowel                              ##
##      Finds mean power for each vowel                                  ##
##      Construct power contour interpolating between vowels to break    ##
##        points                                                         ##
##                                                                       ##
##  Naively assumes that vowels in phoneset start with (upper or lower   ##
##  letter vowels)                                                       ##
##                                                                       ##
##  usage:  bin/find_powercontours lab/*.lab                             ##
##                                                                       ##
###########################################################################

if [ $# = 0 ]
then
   echo "Find power normalization contour for each file"
   echo "Usage:  bin/find_powercontours lab/*.lab"
   exit 1
fi

for i in $*
do
   fname=`basename $i .lab`
   echo $fname >/dev/tty
   cat $i | sed 's/h#/pau/' | 
   awk 'BEGIN {fname="'$fname'"; }
        {if ((($3 ~ /^[AaEeIiOoUu].*/) || 
	      ($3 ~ "SIL") ||
	      ($3 ~ "pau")) &&
             ($3 != "using"))
         {
	   printf("echo START %s %s %f\n",fname,$3,(ltime+$1)/2);
           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,point,t,sqrt(t/l)
                  fname = $2;
                  ph=$3;
                  point=$4;
                  l=1;
                  t=0;
              }
              else
              {
                 t += $1*$1;
                 l++;                 
              }}
              END { # dont care about final pau
                    # print fname,ph,point,t,sqrt(t/l)
                  }'
done >etc/all_vpower

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

if [ ! -d pow ]
then
   mkdir pow
fi

# find the power modficiation contour for each file
cat etc/all_vpower |
awk 'BEGIN {'"`cat etc/mean_vpow`"' lfile = ""; t = 0; nt = 0;
}
   {if ($1 != lfile)
    {
       if (lfile != "")
          printf("EOF\n");
       printf("cat >pow/%s.lab <<EOF\n",$1);
       printf("#\n");
   }
    if (vp[$2] != 0)
    {
       if ($5 > 0)
          printf("%f 123 %f\n",$3,vp[$2]/$5);
    }
    lfile = $1;
   }
   END {
      printf("EOF\n");
   }' | sh




    