1#!/bin/sh
2#####################################################-*-mode:shell-script-*-
3##                                                                       ##
4##                   Carnegie Mellon University and                      ##
5##                   Alan W Black and Kevin A. Lenzo                     ##
6##                      Copyright (c) 1998-2000                          ##
7##                        All Rights Reserved.                           ##
8##                                                                       ##
9##  Permission is hereby granted, free of charge, to use and distribute  ##
10##  this software and its documentation without restriction, including   ##
11##  without limitation the rights to use, copy, modify, merge, publish,  ##
12##  distribute, sublicense, and/or sell copies of this work, and to      ##
13##  permit persons to whom this work is furnished to do so, subject to   ##
14##  the following conditions:                                            ##
15##   1. The code must retain the above copyright notice, this list of    ##
16##      conditions and the following disclaimer.                         ##
17##   2. Any modifications must be clearly marked as such.                ##
18##   3. Original authors' names are not deleted.                         ##
19##   4. The authors' names are not used to endorse or promote products   ##
20##      derived from this software without specific prior written        ##
21##      permission.                                                      ##
22##                                                                       ##
23##  CARNEGIE MELLON UNIVERSITY AND THE CONTRIBUTORS TO THIS WORK         ##
24##  DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING      ##
25##  ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT   ##
26##  SHALL CARNEGIE MELLON UNIVERSITY NOR THE CONTRIBUTORS BE LIABLE      ##
27##  FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES    ##
28##  WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN   ##
29##  AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,          ##
30##  ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF       ##
31##  THIS SOFTWARE.                                                       ##
32##                                                                       ##
33###########################################################################
34###                                                                       ##
35###  Generate LPC coefficients and residual for diphones (or otherwise)   ##
36###                                                                       ##
37############################################################################
38
39if [ $# = 0 ]
40then
41   echo "Extract lpc coefficients and residuals"
42   echo "Usage:  bin/make_lpc wav/*.wav"
43   echo "Expects pm/*.pm to exist, and creates lpc/*.lpc and lpc/*.res"
44   echo "If etc/powfacts exists, waveform will be power normalized"
45   echo "for LPC and residual extraction, wav/*.wav will be unchanged though."
46   exit 1
47fi
48
49if [ ! "$ESTDIR" ]
50then
51   echo "environment variable ESTDIR is unset"
52   echo "set it to your local speech tools directory e.g."
53   echo '   bash$ export ESTDIR=/home/awb/projects/speech_tools/'
54   echo or
55   echo '   csh% setenv ESTDIR /home/awb/projects/speech_tools/'
56   exit 1
57fi
58
59for i in $*
60do
61   fname=`basename $i .wav`
62   echo $i LPC
63
64   # Potentially normalise the power (if powfact is there)
65   if [ -f etc/powfacts ]
66   then
67       powfact=`awk '{if ($1 == "'$fname'") print $2}' etc/powfacts`
68       if [ ! "$powfact" ]
69       then
70           powfact=1.0
71       fi
72       $ESTDIR/bin/ch_wave -scale $powfact $i -o /tmp/tmp$$.wav
73   else
74       cat $i >/tmp/tmp$$.wav
75   fi
76   # Change the overall volume too, of the normalised file
77   # $ESTDIR/bin/ch_wave -scaleN 0.65 -o /tmp/tmp$$.wav /tmp/tmp$$.wav
78
79   # and if you want to resample, now is the time (can be combine with above)
80   #$ESTDIR/bin/ch_wave -F 11025 -o /tmp/tmp$$.wav /tmp/tmp$$.wav
81
82   # Extract the LPC coefficients
83  $ESTDIR/bin/sig2fv /tmp/tmp$$.wav -o lpc/$fname.lpc -otype est_binary -lpc_order 16 -coefs "lpc" -pm pm/$fname.pm -preemph 0.95 -factor 3 -window_type hamming
84   # Extract the residual
85   $ESTDIR/bin/sigfilter /tmp/tmp$$.wav -o lpc/$fname.res -otype nist -lpcfilter lpc/$fname.lpc -inv_filter
86
87   rm /tmp/tmp$$.wav
88done
89