Main Page   Compound List   File List   Compound Members   File Members   Related Pages  

phon Class Reference

phone is the basic entity of emoSyn. More...

#include <phon.h>

Collaboration diagram for phon:

Collaboration graph

[legend]
List of all members.

Public Methods

 phon (string newname, uint newdur, globalsT glob)
 A constructor. More...

 phon ()
 the empty Constructor.

void setName (string newName)
 Set/change name of phon, defines type, manner and place of articulation of phone. More...

void setPhonFeatures (PHON_FEATURES newPhonFeatures)
 Set/change phone features. More...

void setSteadyStart (uint newSteadyStart)
 Set/change start of steady-state in framenumbers. More...

void setSteadyEnd (uint newSteadyEnd)
 Set/change end of steady-state in framenumbers. More...

void setBurstStart (uint newBurstStart)
 Set/change start of burst in framenumbers (stops only). More...

void setAspStart (uint newAspStart)
 Set/change start of Aspiration in framenumbers (stops only). More...

void setF0ValVec (vector<uint>& newF0ValVec)
 set/change f0 vals. More...

void setF0TimeVec (vector<uint>& newF0TimeVec)
 set/change location of f0 vals. More...

void setF0Vec (vector<uint>& newF0Vec, globalsT &kg)
 set/change f0-vals. More...

void setAmpVec (vector<uint> newVec, globalsT &kg)
 set/change Amp-vals, changes bool ampDyn to true. More...

void setF1Vec (vector<uint> newVec, globalsT &kg)
 set/change F1-vals, changes bool f1Dyn to true. More...

void setF2Vec (vector<uint> newVec, globalsT &kg)
 set/change f2-vals, changes bool f2Dyn to true. More...

void setF3Vec (vector<uint> newVec, globalsT &kg)
 set/change f3-vals, changes bool f3Dyn to true. More...

void setF4Vec (vector<uint> newVec, globalsT &kg)
 set/change f4-vals, changes bool f4Dyn to true. More...

void setF5Vec (vector<uint> newVec, globalsT &kg)
 set/change f5-vals, changes bool f5Dyn to true. More...

void setF6Vec (vector<uint> newVec, globalsT &kg)
 set/change f6-vals, changes bool f6Dyn to true. More...

void setB1Vec (vector<uint> newVec, globalsT &kg)
 set/change b1-vals, changes bool b1Dyn to true. More...

void setB2Vec (vector<uint> newVec, globalsT &kg)
 set/change b2-vals, changes bool b2Dyn to true. More...

void setB3Vec (vector<uint> newVec, globalsT &kg)
 set/change b3-vals, changes bool b3Dyn to true. More...

void setB4Vec (vector<uint> newVec, globalsT &kg)
 set/change b4-vals, changes bool b4Dyn to true. More...

void setB5Vec (vector<uint> newVec, globalsT &kg)
 set/change b5-vals, changes bool b5Dyn to true. More...

void setB6Vec (vector<uint> newVec, globalsT &kg)
 set/change b6-vals, changes bool b6Dyn to true. More...

void setA1Vec (vector<uint> newVec, globalsT &kg)
 set/change a1-vals, (iles&simmons-version only). More...

void setA2Vec (vector<uint> newVec, globalsT &kg)
 set/change a2-vals, (iles&simmons-version only). More...

void setA3Vec (vector<uint> newVec, globalsT &kg)
 set/change a3-vals, (iles&simmons-version only). More...

void setA4Vec (vector<uint> newVec, globalsT &kg)
 set/change a4-vals, (iles&simmons-version only). More...

void setA5Vec (vector<uint> newVec, globalsT &kg)
 set/change a5-vals, (iles&simmons-version only). More...

void setA6Vec (vector<uint> newVec, globalsT &kg)
 set/change a6-vals, (iles&simmons-version only). More...

void setB1pVec (vector<uint> newVec, globalsT &kg)
 set/change b1p-vals,. More...

void setB2pVec (vector<uint> newVec, globalsT &kg)
 set/change b2p-vals, changes bool Dyn to true. More...

void setB3pVec (vector<uint> newVec, globalsT &kg)
 set/change b3p-vals, changes bool Dyn to true. More...

void setB4pVec (vector<uint> newVec, globalsT &kg)
 set/change b4p-vals, changes bool Dyn to true. More...

void setB5pVec (vector<uint> newVec, globalsT &kg)
 set/change b5p-vals, changes bool Dyn to true. More...

void setB6pVec (vector<uint> newVec, globalsT &kg)
 set/change b6p-vals, changes bool Dyn to true. More...

uint MeanF0 ()
 returns mean of f0 vals. More...

string Name ()
 returns name of phon (in Sampa). More...

PHON_TYPE Type ()
 returns type of phon (vowel or consonant). More...

PHON_MANNER Manner ()
 returns manner of phon (manner of articulation). More...

PHON_PLACE Place ()
 returns place of phon (place of articulation). More...

bool Voiced ()
 returns true if phone is fundamentally voiced. More...

bool Diphtong ()
 returns true if phone is diphtong. More...

void initMannerPlaceType (string name)
 sets manner, place, type, formantQuadrant and voiced according to name. More...

uint Dur ()
 returns duration of phon in msec. More...

uint FrameNum ()
 returns number of frames of phon (klattSynth). More...

uint DataFrameNum ()
 returns original number of f0 vals (from mbrola-file). More...

PHON_FEATURES PhonFeatures ()
 returns struct PhonFeatures for the phone. More...

vector<uintF0ValVec ()
 returns original f0 vals (from mbrola-file). More...

vector<uintF0TimeVec ()
 returns original locations of f0 vals (from mbrola-file). More...

vector<uintAmpVec ()
 returns parameter vector (length==frameNum). More...

vector<uintF0Vec ()
 returns parameter vector (length==frameNum). More...

vector<uintF1Vec ()
 returns parameter vector (length==frameNum). More...

vector<uintF2Vec ()
 returns parameter vector (length==frameNum). More...

vector<uintF3Vec ()
 returns parameter vector (length==frameNum). More...

vector<uintF4Vec ()
 returns parameter vector (length==frameNum). More...

vector<uintF5Vec ()
 returns parameter vector (length==frameNum). More...

vector<uintF6Vec ()
 returns parameter vector (length==frameNum). More...

vector<uintB1Vec ()
 returns parameter vector (length==frameNum). More...

vector<uintB2Vec ()
 returns parameter vector (length==frameNum). More...

vector<uintB3Vec ()
 returns parameter vector (length==frameNum). More...

vector<uintB4Vec ()
 returns parameter vector (length==frameNum). More...

vector<uintB5Vec ()
 returns parameter vector (length==frameNum). More...

vector<uintB6Vec ()
 returns parameter vector (length==frameNum). More...

vector<uintA1Vec ()
 returns parameter vector (length==frameNum). More...

vector<uintA2Vec ()
 returns parameter vector (length==frameNum). More...

vector<uintA3Vec ()
 returns parameter vector (length==frameNum). More...

vector<uintA4Vec ()
 returns parameter vector (length==frameNum). More...

vector<uintA5Vec ()
 returns parameter vector (length==frameNum). More...

vector<uintA6Vec ()
 returns parameter vector (length==frameNum). More...

vector<uintB1PVec ()
 returns parameter vector (length==frameNum). More...

vector<uintB2PVec ()
 returns parameter vector (length==frameNum). More...

vector<uintB3PVec ()
 returns parameter vector (length==frameNum). More...

vector<uintB4PVec ()
 returns parameter vector (length==frameNum). More...

vector<uintB5PVec ()
 returns parameter vector (length==frameNum). More...

vector<uintB6PVec ()
 returns parameter vector (length==frameNum). More...

vector<uintAvVec ()
 returns parameter vector (length==frameNum). More...

vector<uintAhVec ()
 returns parameter vector (length==frameNum). More...

vector<uintOqVec ()
 returns parameter vector (length==frameNum). More...

vector<uintAturbVec ()
 returns parameter vector (length==frameNum). More...

vector<uintAfVec ()
 returns parameter vector (length==frameNum). More...

vector<uintAbVec ()
 returns parameter vector (length==frameNum). More...

vector<uintAvpVec ()
 returns parameter vector (length==frameNum). More...

vector<uintTlVec ()
 returns parameter vector (length==frameNum). More...

vector<uintFlVec ()
 returns parameter vector (length==frameNum). More...

vector<uintGainVec ()
 returns parameter vector (length==frameNum). More...

vector<uintAnvVec ()
 returns parameter vector (length==frameNum). More...

vector<uintFnzVec ()
 returns parameter vector (length==frameNum). More...

vector<uintBnzVec ()
 returns parameter vector (length==frameNum). More...

vector<uintFnpVec ()
 returns parameter vector (length==frameNum). More...

vector<uintBnpVec ()
 returns parameter vector (length==frameNum). More...

vector<uintSqVec ()
 returns parameter vector (length==frameNum). More...

vector<uintDiVec ()
 returns parameter vector (length==frameNum). More...

vector<uintDf1Vec ()
 returns parameter vector (length==frameNum). More...

vector<uintDb1Vec ()
 returns parameter vector (length==frameNum). More...

vector<uintFtpVec ()
 returns parameter vector (length==frameNum). More...

vector<uintBtpVec ()
 returns parameter vector (length==frameNum). More...

vector<uintFtzVec ()
 returns parameter vector (length==frameNum). More...

vector<uintBtzVec ()
 returns parameter vector (length==frameNum). More...

vector<uintA2fVec ()
 returns parameter vector (length==frameNum). More...

vector<uintA3fVec ()
 returns parameter vector (length==frameNum). More...

vector<uintA4fVec ()
 returns parameter vector (length==frameNum). More...

vector<uintA5fVec ()
 returns parameter vector (length==frameNum). More...

vector<uintA6fVec ()
 returns parameter vector (length==frameNum). More...

vector<uintA1vVec ()
 returns parameter vector (length==frameNum). More...

vector<uintA2vVec ()
 returns parameter vector (length==frameNum). More...

vector<uintA3vVec ()
 returns parameter vector (length==frameNum). More...

vector<uintA4vVec ()
 returns parameter vector (length==frameNum). More...

vector<uintAtvVec ()
 returns parameter vector (length==frameNum). More...

uint SteadyStart ()
 returns start of steady-state in framenumbers. More...

uint SteadyEnd ()
 returns end of steady-state in framenumbers. More...

uint BurstStart ()
 returns start of burst in framenumbers (stops only). More...

uint AspStart ()
 returns start of Aspiration in framenumbers (stops only). More...

void printName (ostream &outFile)
 prints name of phon to outFile (debugging). More...

void printSenSynFrames (uint start, ostream &outFile, globalsT glob)
 prints all parameters (frames) of the phone in sensyn-format. More...

void printKlattFrames (ostream &outFile)
 prints KlattFrames of phone in simmons&iles format to outFile. More...

void setSoundSource (globalsT &glob)
 models voice-source parameters. More...

void setArticulationTractFilter (globalsT &glob)
 models ArticulationTractFilter parameters. More...

void modelFeatures (uint sylMeanF0, globalsT &glob, phon *prevpP, phon *nextpP)
 models phone-features changing voice-source and/or ArticulationTractFilter parameters. More...

void modelIntonation (globalsT &kg)
 models Intonation by filling the gaps in f0ValVec. More...

void changeDur (uint newDur, globalsT glob)
 set/change duration of phon in msek. More...

void changeAvrInt (int dBVal)
 add/subtract <dbVal> from ampVal. More...

void changeMeanF0 (uint rate)
 change f0Vals by rate (100=no change). More...

void smootheF0 (uint winsize)
 smoothing function: all f0Vals get centerFiltered around winsize. More...

void changeF0Range (uint rate, uint meanF0)
 change Range of f0Contour compressing/expanding at <rate> in relation to <meanF0>. More...

void interpolateF0Vec (uint start, uint end)
 interpolate f0Contour linear from start to end. More...


Private Attributes

string name
 The name of the phone in Sampa. Possible phone-names are language dependend.

uint dur
 duration of phon in msec.

uint frameNum
 number of frames, should be dur/framesize.

uint meanF0
 The mean f0-Value.

PHON_TYPE type
 vowel/consonant.

PHON_MANNER manner
 long_vowel, short_vowel, nasal, stop, ...

PHON_PLACE place
 bilabial, labial, labiodental, ...

PHON_FEATURES phonFeatures
 spread, nasalized, laryngealized, ...

bool voiced
 true if phone is normally voiced.

bool diphtong
 true if phone is diphtong.

FORMANT_QUADRANT formantQuadrant
 the quadrant for vowels in the vowel-chart. currently not used.

uint origValNum
 the originale frameNumber from diphone-inventory.

uint steadyStart
 time of start of steady state (in frameNums).

uint steadyEnd
 time of end of steady state (in frameNums).

uint burstStart
 stops: time of start of burst (in frameNums).

uint aspStart
 stops: time of start of aspiration (in frameNums).

vector<uintf0ValVec
 intonation description.

vector<uintf0TimeVec
 intonation description, comes from mbrola-format.

vector<uintf0Vec
 each frame one f0-val.

vector<uintampVec
 each frame one amplitude-val in dB, normalized to 60 dB.

vector<uintf1Vec
 cascade formant-parameters.

vector<uintf2Vec
 cascade formant-parameters.

vector<uintf3Vec
 cascade formant-parameters.

vector<uintf4Vec
 cascade formant-parameters.

vector<uintf5Vec
 cascade formant-parameters.

vector<uintf6Vec
 cascade formant-parameters.

vector<uintb1Vec
 cascade formant-parameters.

vector<uintb2Vec
 cascade formant-parameters.

vector<uintb3Vec
 cascade formant-parameters.

vector<uintb4Vec
 cascade formant-parameters.

vector<uintb5Vec
 cascade formant-parameters.

vector<uintb6Vec
 cascade formant-parameters.

vector<uinta1Vec
 parallel formant-parameters, amplitudes of formants.

vector<uinta2Vec
 parallel formant-parameters, amplitudes of formants.

vector<uinta3Vec
 parallel formant-parameters, amplitudes of formants.

vector<uinta4Vec
 parallel formant-parameters, amplitudes of formants.

vector<uinta5Vec
 parallel formant-parameters, amplitudes of formants.

vector<uinta6Vec
 parallel formant-parameters, amplitudes of formants.

vector<uintb1pVec
 parallel formant-parameters, bandwidths for parallel branch.

vector<uintb2pVec
 parallel formant-parameters, bandwidths for parallel branch.

vector<uintb3pVec
 parallel formant-parameters, bandwidths for parallel branch.

vector<uintb4pVec
 parallel formant-parameters, bandwidths for parallel branch.

vector<uintb5pVec
 parallel formant-parameters, bandwidths for parallel branch.

vector<uintb6pVec
 parallel formant-parameters, bandwidths for parallel branch.

vector<uintavVec
 voice-source parameters voiced amplitude of cascade branch (0-70).

vector<uintahVec
 amp. of aspiration (0-70).

vector<uintaturbVec
 amp. of turbulence(0-80).

vector<uintoqVec
 open perc in glottal period.

vector<uintafVec
 amp. of frication, par. branch(0-80).

vector<uintabVec
 amp. of bypass frication, par. branch(0-80).

vector<uintavpVec
 amp. of voicing, par. branch(0-70).

vector<uinttlVec
 spectral tl in dB(0-24).

vector<uintflVec
 spectral skew(0-40).

vector<uintgainVec
 overall gain(0-80).

vector<uintanvVec
 nasal parameters amp. of nasal formant, parallel branch.

vector<uintfnzVec
 freq of nasal zero.

vector<uintbnzVec
 bw of nasal zero.

vector<uintfnpVec
 freq of nasal pole.

vector<uintbnpVec
 bw of nasal pole.

vector<uintsqVec
 speed quotient, glottal source parameter.

vector<uintdiVec
 diplophonic double pulsing.

vector<uintdf1Vec
 delta f1, for pharyngeal interactions.

vector<uintdb1Vec
 delta b1, for pharyngeal interactions.

vector<uintftpVec
 freq of tracheal pole.

vector<uintbtpVec
 bw of tracheal pole.

vector<uintftzVec
 freq of tracheal zero.

vector<uintbtzVec
 bw of tracheal zero.

vector<uinta2fVec
 amplitude of 2. formant (parallel branch).

vector<uinta3fVec
 amplitude of 3. formant (parallel branch).

vector<uinta4fVec
 amplitude of 4. formant (parallel branch).

vector<uinta5fVec
 amplitude of 5. formant (parallel branch).

vector<uinta6fVec
 amplitude of 6. formant (parallel branch).

vector<uinta1vVec
 amplitude of 1. formant (parallel branch, voicing), not used.

vector<uinta2vVec
 amplitude of 2. formant (parallel branch, voicing), not used.

vector<uinta3vVec
 amplitude of 3. formant (parallel branch, voicing), not used.

vector<uinta4vVec
 amplitude of 4. formant (parallel branch, voicing), not used.

vector<uintatvVec
 amplitude of tracheal formant (parallel branch, voicing), not used.


Detailed Description

phone is the basic entity of emoSyn.


Constructor & Destructor Documentation

phon::phon ( string newname,
uint newdur,
globalsT glob )
 

A constructor.

creates a phon with name newname, duration newdur and all klattparameter-frames are initialized to klatt_global-defaults side-effects: frameNum, type, manner and place are defined

00352                                                               {
00353   name = newname;
00354   initMannerPlaceType(name);
00355   dur = newdur;
00356   frameNum = (uint) dur/klatt_globals.ui;
00357 
00358   steadyStart = 0;
00359   steadyEnd = frameNum;
00360   burstStart = frameNum;
00361   aspStart = frameNum;
00362   
00363   for (uint i=0; i<frameNum; i++){
00364     ampVec.push_back(60);
00365     f0Vec.push_back(klatt_globals.f0);
00366     f1Vec.push_back(klatt_globals.f1);
00367     f2Vec.push_back(klatt_globals.f2);
00368     f3Vec.push_back(klatt_globals.f3);
00369     f4Vec.push_back(klatt_globals.f4);
00370     f5Vec.push_back(klatt_globals.f5);
00371     f6Vec.push_back(klatt_globals.f6);
00372     b1Vec.push_back(klatt_globals.b1);
00373     b2Vec.push_back(klatt_globals.b2);
00374     b3Vec.push_back(klatt_globals.b3);
00375     b4Vec.push_back(klatt_globals.b4);
00376     b5Vec.push_back(klatt_globals.b5);
00377     b6Vec.push_back(klatt_globals.b6);
00378     a1Vec.push_back(klatt_globals.a1);
00379     a2Vec.push_back(klatt_globals.a2);
00380     a3Vec.push_back(klatt_globals.a3);
00381     a4Vec.push_back(klatt_globals.a4);
00382     a5Vec.push_back(klatt_globals.a5);
00383     a6Vec.push_back(klatt_globals.a6);
00384     b1pVec.push_back(klatt_globals.b1p);
00385     b2pVec.push_back(klatt_globals.b2p);
00386     b3pVec.push_back(klatt_globals.b3p);
00387     b4pVec.push_back(klatt_globals.b4p);
00388     b5pVec.push_back(klatt_globals.b5p);
00389     b6pVec.push_back(klatt_globals.b6p);
00390     avVec.push_back(klatt_globals.av);
00391     ahVec.push_back(klatt_globals.ah);
00392     oqVec.push_back(klatt_globals.oq);
00393     aturbVec.push_back(klatt_globals.aturb);
00394     afVec.push_back(klatt_globals.af);
00395     abVec.push_back(klatt_globals.ab);
00396     avpVec.push_back(klatt_globals.avp);
00397     tlVec.push_back(klatt_globals.tl);
00398     flVec.push_back(klatt_globals.fl);
00399     gainVec.push_back(klatt_globals.gain);
00400     anvVec.push_back(klatt_globals.anv);
00401     fnzVec.push_back(klatt_globals.fnz);
00402     bnzVec.push_back(klatt_globals.bnz);
00403     fnpVec.push_back(klatt_globals.fnp);
00404     bnpVec.push_back(klatt_globals.bnp);
00405     sqVec.push_back(klatt_globals.sq);
00406     diVec.push_back(klatt_globals.di);
00407     df1Vec.push_back(klatt_globals.df1);
00408     db1Vec.push_back(klatt_globals.db1);
00409     ftpVec.push_back(klatt_globals.ftp);
00410     btpVec.push_back(klatt_globals.btp);
00411     ftzVec.push_back(klatt_globals.ftz);
00412     btzVec.push_back(klatt_globals.btz);
00413     a2fVec.push_back(klatt_globals.a2f);
00414     a3fVec.push_back(klatt_globals.a3f);
00415     a4fVec.push_back(klatt_globals.a4f);
00416     a5fVec.push_back(klatt_globals.a5f);
00417     a6fVec.push_back(klatt_globals.a6f);
00418     a1vVec.push_back(klatt_globals.a1v);
00419     a2vVec.push_back(klatt_globals.a2v);
00420     a3vVec.push_back(klatt_globals.a3v);
00421     a4vVec.push_back(klatt_globals.a4v);
00422     atvVec.push_back(klatt_globals.atv);
00423   }
00424 }

phon::phon ( )
 

the empty Constructor.

00348            {
00349 
00350 }


Member Function Documentation

vector< uint > phon::A1Vec ( )
 

returns parameter vector (length==frameNum).

Returns:
vector <uint>
00111                           {return a1Vec;}

vector< uint > phon::A1vVec ( )
 

returns parameter vector (length==frameNum).

Returns:
vector <uint>
00151                            {return a1vVec;}

vector< uint > phon::A2Vec ( )
 

returns parameter vector (length==frameNum).

Returns:
vector <uint>
00112                           {return a2Vec;}

vector< uint > phon::A2fVec ( )
 

returns parameter vector (length==frameNum).

Returns:
vector <uint>
00146                            {return a2fVec;}

vector< uint > phon::A2vVec ( )
 

returns parameter vector (length==frameNum).

Returns:
vector <uint>
00152                            {return a2vVec;}

vector< uint > phon::A3Vec ( )
 

returns parameter vector (length==frameNum).

Returns:
vector <uint>
00113                           {return a3Vec;}

vector< uint > phon::A3fVec ( )
 

returns parameter vector (length==frameNum).

Returns:
vector <uint>
00147                            {return a3fVec;}

vector< uint > phon::A3vVec ( )
 

returns parameter vector (length==frameNum).

Returns:
vector <uint>
00153                            {return a3vVec;}

vector< uint > phon::A4Vec ( )
 

returns parameter vector (length==frameNum).

Returns:
vector <uint>
00114                           {return a4Vec;}

vector< uint > phon::A4fVec ( )
 

returns parameter vector (length==frameNum).

Returns:
vector <uint>
00148                            {return a4fVec;}

vector< uint > phon::A4vVec ( )
 

returns parameter vector (length==frameNum).

Returns:
vector <uint>
00154                            {return a4vVec;}

vector< uint > phon::A5Vec ( )
 

returns parameter vector (length==frameNum).

Returns:
vector <uint>
00115                           {return a5Vec;}

vector< uint > phon::A5fVec ( )
 

returns parameter vector (length==frameNum).

Returns:
vector <uint>
00149                            {return a5fVec;}

vector< uint > phon::A6Vec ( )
 

returns parameter vector (length==frameNum).

Returns:
vector <uint>
00116                           {return a6Vec;}

vector< uint > phon::A6fVec ( )
 

returns parameter vector (length==frameNum).

Returns:
vector <uint>
00150                            {return a6fVec;}

vector< uint > phon::AbVec ( )
 

returns parameter vector (length==frameNum).

Returns:
vector <uint>
00128                           {return abVec;}

vector< uint > phon::AfVec ( )
 

returns parameter vector (length==frameNum).

Returns:
vector <uint>
00127                           {return afVec;}

vector< uint > phon::AhVec ( )
 

returns parameter vector (length==frameNum).

Returns:
vector <uint>
00124                           {return ahVec;}

vector< uint > phon::AmpVec ( )
 

returns parameter vector (length==frameNum).

Returns:
vector <uint>
00097                            {return ampVec;}

vector< uint > phon::AnvVec ( )
 

returns parameter vector (length==frameNum).

Returns:
vector <uint>
00133                            {return anvVec;}

uint phon::AspStart ( )
 

returns start of Aspiration in framenumbers (stops only).

Returns:
uint
00176                      {
00177   return aspStart;
00178 }

vector< uint > phon::AturbVec ( )
 

returns parameter vector (length==frameNum).

Returns:
vector <uint>
00126                              {return aturbVec;}

vector< uint > phon::AtvVec ( )
 

returns parameter vector (length==frameNum).

Returns:
vector <uint>
00155                            {return atvVec;}

vector< uint > phon::AvVec ( )
 

returns parameter vector (length==frameNum).

Returns:
vector <uint>
00123                           {return avVec;}

vector< uint > phon::AvpVec ( )
 

returns parameter vector (length==frameNum).

Returns:
vector <uint>
00129                            {return avpVec;}

vector< uint > phon::B1PVec ( )
 

returns parameter vector (length==frameNum).

Returns:
vector <uint>
00117                            {return b1pVec;}

vector< uint > phon::B1Vec ( )
 

returns parameter vector (length==frameNum).

Returns:
vector <uint>
00105                           {return b1Vec;}

vector< uint > phon::B2PVec ( )
 

returns parameter vector (length==frameNum).

Returns:
vector <uint>
00118                            {return b2pVec;}

vector< uint > phon::B2Vec ( )
 

returns parameter vector (length==frameNum).

Returns:
vector <uint>
00106                           {return b2Vec;}

vector< uint > phon::B3PVec ( )
 

returns parameter vector (length==frameNum).

Returns:
vector <uint>
00119                            {return b3pVec;}

vector< uint > phon::B3Vec ( )
 

returns parameter vector (length==frameNum).

Returns:
vector <uint>
00107                           {return b3Vec;}

vector< uint > phon::B4PVec ( )
 

returns parameter vector (length==frameNum).

Returns:
vector <uint>
00120                            {return b4pVec;}

vector< uint > phon::B4Vec ( )
 

returns parameter vector (length==frameNum).

Returns:
vector <uint>
00108                           {return b4Vec;}

vector< uint > phon::B5PVec ( )
 

returns parameter vector (length==frameNum).

Returns:
vector <uint>
00121                            {return b5pVec;}

vector< uint > phon::B5Vec ( )
 

returns parameter vector (length==frameNum).

Returns:
vector <uint>
00109                           {return b5Vec;}

vector< uint > phon::B6PVec ( )
 

returns parameter vector (length==frameNum).

Returns:
vector <uint>
00122                            {return b6pVec;}

vector< uint > phon::B6Vec ( )
 

returns parameter vector (length==frameNum).

Returns:
vector <uint>
00110                           {return b6Vec;}

vector< uint > phon::BnpVec ( )
 

returns parameter vector (length==frameNum).

Returns:
vector <uint>
00137                            {return bnpVec;}

vector< uint > phon::BnzVec ( )
 

returns parameter vector (length==frameNum).

Returns:
vector <uint>
00135                            {return bnzVec;}

vector< uint > phon::BtpVec ( )
 

returns parameter vector (length==frameNum).

Returns:
vector <uint>
00143                            {return btpVec;}

vector< uint > phon::BtzVec ( )
 

returns parameter vector (length==frameNum).

Returns:
vector <uint>
00145                            {return btzVec;}

uint phon::BurstStart ( )
 

returns start of burst in framenumbers (stops only).

Returns:
uint
00172                       {
00173   return burstStart;
00174 }

uint phon::DataFrameNum ( )
 

returns original number of f0 vals (from mbrola-file).

Returns:
uint

vector< uint > phon::Db1Vec ( )
 

returns parameter vector (length==frameNum).

Returns:
vector <uint>
00141                            {return db1Vec;}

vector< uint > phon::Df1Vec ( )
 

returns parameter vector (length==frameNum).

Returns:
vector <uint>
00140                            {return df1Vec;}

vector< uint > phon::DiVec ( )
 

returns parameter vector (length==frameNum).

Returns:
vector <uint>
00139                           {return diVec;}

bool phon::Diphtong ( )
 

returns true if phone is diphtong.

Returns:
bool
00083                     {
00084   return diphtong;
00085 }

uint phon::Dur ( )
 

returns duration of phon in msec.

Returns:
uint
00068                {
00069   return dur;
00070 }

vector< uint > phon::F0TimeVec ( )
 

returns original locations of f0 vals (from mbrola-file).

Returns:
vector <uint>
00159                               {
00160   return f0TimeVec;
00161 }

vector< uint > phon::F0ValVec ( )
 

returns original f0 vals (from mbrola-file).

Returns:
vector <uint>
00094                              {
00095   return f0ValVec;
00096 }

vector< uint > phon::F0Vec ( )
 

returns parameter vector (length==frameNum).

Returns:
vector <uint>
00098                           {return f0Vec;}

vector< uint > phon::F1Vec ( )
 

returns parameter vector (length==frameNum).

Returns:
vector <uint>
00099                           {return f1Vec;}

vector< uint > phon::F2Vec ( )
 

returns parameter vector (length==frameNum).

Returns:
vector <uint>
00100                           {return f2Vec;}

vector< uint > phon::F3Vec ( )
 

returns parameter vector (length==frameNum).

Returns:
vector <uint>
00101                           {return f3Vec;}

vector< uint > phon::F4Vec ( )
 

returns parameter vector (length==frameNum).

Returns:
vector <uint>
00102                           {return f4Vec;}

vector< uint > phon::F5Vec ( )
 

returns parameter vector (length==frameNum).

Returns:
vector <uint>
00103                           {return f5Vec;}

vector< uint > phon::F6Vec ( )
 

returns parameter vector (length==frameNum).

Returns:
vector <uint>
00104                           {return f6Vec;}

vector< uint > phon::FlVec ( )
 

returns parameter vector (length==frameNum).

Returns:
vector <uint>
00131                           {return flVec;}

vector< uint > phon::FnpVec ( )
 

returns parameter vector (length==frameNum).

Returns:
vector <uint>
00136                            {return fnpVec;}

vector< uint > phon::FnzVec ( )
 

returns parameter vector (length==frameNum).

Returns:
vector <uint>
00134                            {return fnzVec;}

uint phon::FrameNum ( )
 

returns number of frames of phon (klattSynth).

uses ui (update interval) from globalsT

See also:
globalsT
Returns:
uint
00086                     {
00087   return frameNum;
00088 }

vector< uint > phon::FtpVec ( )
 

returns parameter vector (length==frameNum).

Returns:
vector <uint>
00142                            {return ftpVec;}

vector< uint > phon::FtzVec ( )
 

returns parameter vector (length==frameNum).

Returns:
vector <uint>
00144                            {return ftzVec;}

vector< uint > phon::GainVec ( )
 

returns parameter vector (length==frameNum).

Returns:
vector <uint>
00132                             {return gainVec;}

PHON_MANNER phon::Manner ( )
 

returns manner of phon (manner of articulation).

Returns:
PHON_MANNER
00074                          {
00075   return manner;
00076 }

uint phon::MeanF0 ( )
 

returns mean of f0 vals.

Returns:
uint MeanF0
00059                   {
00060   return meanF0;
00061 }

string phon::Name ( )
 

returns name of phon (in Sampa).

Returns:
string name
00064                   {
00065   return name;
00066 }

vector< uint > phon::OqVec ( )
 

returns parameter vector (length==frameNum).

Returns:
vector <uint>
00125                           {return oqVec;}

PHON_FEATURES phon::PhonFeatures ( )
 

returns struct PhonFeatures for the phone.

Returns:
PHON_FEATURES
00090                                  {
00091   return phonFeatures;
00092 }

PHON_PLACE phon::Place ( )
 

returns place of phon (place of articulation).

Returns:
PHON_PLACE
00077                        {
00078   return place;
00079 }

vector< uint > phon::SqVec ( )
 

returns parameter vector (length==frameNum).

Returns:
vector <uint>
00138                           {return sqVec;}

uint phon::SteadyEnd ( )
 

returns end of steady-state in framenumbers.

Returns:
uint
00168                       {
00169   return steadyEnd;
00170 }

uint phon::SteadyStart ( )
 

returns start of steady-state in framenumbers.

Returns:
uint
00164                         {
00165   return steadyStart;
00166 }

vector< uint > phon::TlVec ( )
 

returns parameter vector (length==frameNum).

Returns:
vector <uint>
00130                           {return tlVec;}

PHON_TYPE phon::Type ( )
 

returns type of phon (vowel or consonant).

Returns:
PHON_TYPE
00071                      {
00072   return type;
00073 }

bool phon::Voiced ( )
 

returns true if phone is fundamentally voiced.

Returns:
bool
00080                   {
00081   return voiced;
00082 }

void phon::changeAvrInt ( int dBVal )
 

add/subtract <dbVal> from ampVal.

See also:
syllable::changeAvrInt()
Parameters:
int   dBVal
00596                                  {
00597   if (dBVal<0) {
00598     for (uint i=0; i<frameNum; i++) {
00599       if (ampVec[i]-dBVal>0)
00600         ampVec[i] -= dBVal;
00601       else
00602         ampVec[i] = 0;
00603     }
00604   } else if  (dBVal>0) {
00605     for (uint i=0; i<frameNum; i++) {
00606       if (ampVec[i]+dBVal<MAX_DBVAL)
00607         ampVec[i] += dBVal;
00608       else
00609         ampVec[i] = MAX_DBVAL;
00610     }
00611   }
00612 }

void phon::changeDur ( uint newDur,
globalsT glob )
 

set/change duration of phon in msek.

Set/change frameNumber of phon.

shortens or lengthens all valVecs, algorithm depends on glob.changeDurMethod. if glob.changeDurMethod==STEADY_STATE_CUT -> frames in the steady state get repeated/deleted. if glob.changeDurMethod==TIME_ALIGNED -> the contour gets expnaded/compressed. Expects valVecs, steadyStart, steadyEnd and burstStart to be set.

See also:
globalsT , steadyStart , steadyEnd , burstStart , aspStart
Parameters:
uint   newDur
globalsT   glob
00642                                                {
00643   uint leftBorder, rightBorder;
00644   uint oldFrameNum = frameNum;
00645   uint newFrameNum;
00646   
00647   newFrameNum = msec2frames(newDur, glob);
00648 
00649   if (manner == stop_voiced || manner == stop_voiceless) {
00650     leftBorder = 0; 
00651     rightBorder = burstStart;
00652   } else {
00653     leftBorder = steadyStart;
00654     rightBorder = steadyEnd; 
00655   }
00656   //  if (name=="_")
00657   //    cout << name<<": "<<oldFrameNum<<" "<<newFrameNum<<" "<<rightBorder<<" "<<leftBorder<<"\n";
00658 
00659   if (oldFrameNum-newFrameNum <= rightBorder-leftBorder || newFrameNum>oldFrameNum) {
00660     // cout <<"change\n";
00661     dur = newDur;
00662     vector<uint> tmpTimeVec;
00663     for (uint i=0; i<frameNum; i++) {
00664       tmpTimeVec.push_back(i*(100/frameNum));
00665     }
00666     frameNum = newFrameNum;
00667     
00668     f0Vec = modelTrack(name, frameNum, f0Vec, tmpTimeVec);
00669     
00670     
00671     if (glob.changeDurMethod == TIME_ALIGNED && (manner!=stop_voiced || manner!=stop_voiceless)) {
00672       ampVec = modelTrack(name, frameNum, ampVec, tmpTimeVec);
00673       f1Vec = modelTrack(name, frameNum, f1Vec, tmpTimeVec);
00674       f2Vec = modelTrack(name, frameNum, f2Vec, tmpTimeVec);
00675       f3Vec = modelTrack(name, frameNum, f3Vec, tmpTimeVec);
00676       if (glob.use4Freq)
00677         f4Vec = modelTrack(name, frameNum, f4Vec, tmpTimeVec);
00678       if (glob.use5Freq) {
00679         f5Vec = modelTrack(name, frameNum, f5Vec, tmpTimeVec);
00680       }
00681     } else if (glob.changeDurMethod == STEADY_STATE_CUT || (manner==stop_voiced || manner==stop_voiceless)) {
00682       ampVec = change_valNum(name, frameNum, leftBorder, rightBorder, ampVec);  
00683       f1Vec = change_valNum(name, frameNum, leftBorder, rightBorder, f1Vec);
00684       f2Vec = change_valNum(name, frameNum, leftBorder, rightBorder, f2Vec);
00685       f3Vec = change_valNum(name, frameNum, leftBorder, rightBorder, f3Vec);
00686       if (glob.use4Freq)
00687         f4Vec = change_valNum(name, frameNum, leftBorder, rightBorder, f4Vec);
00688       if (glob.use5Freq) {
00689         f5Vec = change_valNum(name, frameNum, leftBorder, rightBorder, f5Vec);
00690       }
00691     } else {
00692       error("phon::changeDur(): durChangeMethod not defined", -3);
00693     }
00694 
00695     if (manner == stop_voiced || manner == stop_voiceless) {
00696       leftBorder = 0; 
00697       rightBorder = burstStart;
00698     } else {
00699       leftBorder = 0;
00700       rightBorder = frameNum; 
00701     }
00702     
00703     if (!glob.use4Freq)
00704       f4Vec = change_valNum(name, frameNum, leftBorder, rightBorder, f4Vec);
00705     if (!glob.use5Freq) {
00706       f5Vec = change_valNum(name, frameNum, leftBorder, rightBorder, f5Vec);
00707     }
00708 
00709     b1Vec = change_valNum(name, frameNum, leftBorder, rightBorder, b1Vec);
00710     b2Vec = change_valNum(name, frameNum, leftBorder, rightBorder, b2Vec);
00711     b3Vec = change_valNum(name, frameNum, leftBorder, rightBorder, b3Vec);
00712     b4Vec = change_valNum(name, frameNum, leftBorder, rightBorder, b4Vec);
00713     b5Vec = change_valNum(name, frameNum, leftBorder, rightBorder, b5Vec);
00714     f6Vec = change_valNum(name, frameNum, leftBorder, rightBorder, f6Vec);
00715     b6Vec = change_valNum(name, frameNum, leftBorder, rightBorder, b6Vec);
00716     a1Vec = change_valNum(name, frameNum, leftBorder, rightBorder, a1Vec); 
00717     a2Vec = change_valNum(name, frameNum, leftBorder, rightBorder, a2Vec);
00718     a3Vec = change_valNum(name, frameNum, leftBorder, rightBorder, a3Vec);
00719     a4Vec = change_valNum(name, frameNum, leftBorder, rightBorder, a4Vec);
00720     a5Vec = change_valNum(name, frameNum, leftBorder, rightBorder, a5Vec);
00721     a6Vec = change_valNum(name, frameNum, leftBorder, rightBorder, a6Vec);
00722     b1pVec = change_valNum(name, frameNum, leftBorder, rightBorder, b1pVec);
00723     b2pVec = change_valNum(name, frameNum, leftBorder, rightBorder, b2pVec);
00724     b3pVec = change_valNum(name, frameNum, leftBorder, rightBorder, b3pVec);
00725     b4pVec = change_valNum(name, frameNum, leftBorder, rightBorder, b4pVec);
00726     b5pVec = change_valNum(name, frameNum, leftBorder, rightBorder, b5pVec);
00727     b6pVec = change_valNum(name, frameNum, leftBorder, rightBorder, b6pVec);
00728     oqVec = change_valNum(name, frameNum, leftBorder, rightBorder, oqVec);  
00729     avVec = change_valNum(name, frameNum, leftBorder, rightBorder, avVec);
00730     ahVec = change_valNum(name, frameNum, leftBorder, rightBorder, ahVec); 
00731     aturbVec = change_valNum(name, frameNum, leftBorder, rightBorder, aturbVec); 
00732     afVec = change_valNum(name, frameNum, leftBorder, rightBorder, afVec); 
00733     abVec = change_valNum(name, frameNum, leftBorder, rightBorder, abVec); 
00734     avpVec = change_valNum(name, frameNum, leftBorder, rightBorder, avpVec); 
00735     tlVec = change_valNum(name, frameNum, leftBorder, rightBorder, tlVec); 
00736     flVec = change_valNum(name, frameNum, leftBorder, rightBorder, flVec); 
00737     gainVec = change_valNum(name, frameNum, leftBorder, rightBorder, gainVec); 
00738     anvVec = change_valNum(name, frameNum, leftBorder, rightBorder, anvVec); 
00739     fnzVec = change_valNum(name, frameNum, leftBorder, rightBorder, fnzVec); 
00740     bnzVec = change_valNum(name, frameNum, leftBorder, rightBorder, bnzVec); 
00741     fnpVec = change_valNum(name, frameNum, leftBorder, rightBorder, fnpVec); 
00742     bnpVec = change_valNum(name, frameNum, leftBorder, rightBorder, bnpVec);  
00743     sqVec = change_valNum(name, frameNum, leftBorder, rightBorder, sqVec);
00744     diVec = change_valNum(name, frameNum, leftBorder, rightBorder, diVec); 
00745     df1Vec = change_valNum(name, frameNum, leftBorder, rightBorder, df1Vec); 
00746     db1Vec = change_valNum(name, frameNum, leftBorder, rightBorder, db1Vec);
00747     ftpVec = change_valNum(name, frameNum, leftBorder, rightBorder, ftpVec); 
00748     btpVec = change_valNum(name, frameNum, leftBorder, rightBorder, btpVec); 
00749     ftzVec = change_valNum(name, frameNum, leftBorder, rightBorder, ftzVec); 
00750     btzVec = change_valNum(name, frameNum, leftBorder, rightBorder, btzVec); 
00751     a2fVec = change_valNum(name, frameNum, leftBorder, rightBorder, a2fVec); 
00752     a3fVec = change_valNum(name, frameNum, leftBorder, rightBorder, a3fVec); 
00753     a4fVec = change_valNum(name, frameNum, leftBorder, rightBorder, a4fVec); 
00754     a5fVec = change_valNum(name, frameNum, leftBorder, rightBorder, a5fVec); 
00755     a6fVec = change_valNum(name, frameNum, leftBorder, rightBorder, a6fVec); 
00756     a1vVec = change_valNum(name, frameNum, leftBorder, rightBorder, a1vVec); 
00757     a2vVec = change_valNum(name, frameNum, leftBorder, rightBorder, a2vVec); 
00758     a3vVec = change_valNum(name, frameNum, leftBorder, rightBorder, a3vVec); 
00759     a4vVec = change_valNum(name, frameNum, leftBorder, rightBorder, a4vVec); 
00760     atvVec = change_valNum(name, frameNum, leftBorder, rightBorder, atvVec); 
00761     
00762     if (manner == stop_voiced || manner == stop_voiceless) { 
00763       burstStart = burstStart - (oldFrameNum-frameNum);
00764       aspStart = aspStart - (oldFrameNum-frameNum);
00765     }
00766   }
00767 }

void phon::changeF0Range ( uint rate,
uint meanF0 )
 

change Range of f0Contour compressing/expanding at <rate> in relation to <meanF0>.

See also:
phrase::changeF0Range() , syllable::changeF0Range()
Parameters:
uint   rate
uint   meanF0
00627                                                {
00628   changeContrast(f0Vec, rate, meanF0);
00629 }

void phon::changeMeanF0 ( uint rate )
 

change f0Vals by rate (100=no change).

See also:
syllable::changeMeanF0() , phrase::changeMeanF0()
Parameters:
uint   rate
00583                                  {
00584   changeMean(f0Vec, rate); // change all
00585 }

void phon::initMannerPlaceType ( string name )
 

sets manner, place, type, formantQuadrant and voiced according to name.

This is done by the consturctor.

See also:
phon(string newname, uint newdur, globalsT glob)
Parameters:
string  
00180                                           {
00181   char *c_tmp;
00182   c_tmp = (char *) malloc(100);
00183   strcpy(c_tmp, name.c_str());
00184   manner = classify_german(c_tmp); 
00185   switch(manner) {
00186   case long_vowel: 
00187     type = vowel;
00188     voiced = true;
00189     break;
00190   case short_vowel:
00191     type = vowel;
00192     voiced = true;
00193     break;
00194   case liquide: 
00195     type = consonant;
00196     voiced = true;
00197     break;
00198   case nasal: 
00199     type = consonant;
00200     voiced = true;
00201     break;
00202   case fricative_voiced: 
00203     type = consonant;
00204     voiced = true;
00205     break;
00206   case fricative_voiceless: 
00207     type = consonant;
00208     voiced = false;
00209     break;
00210   case stop_voiced: 
00211     type = consonant;
00212     voiced = true;
00213     break;
00214   case stop_voiceless: 
00215     type = consonant;
00216     voiced = false;
00217     break;
00218   case silence:
00219     type = consonant;
00220     voiced = false;
00221     break;
00222   default :
00223     error("phon::initMannerPlaceType: undefined phon-type/n", -3);
00224   }
00225   if (type == consonant) {
00226     if (name == "t") { 
00227       place = alveolar;
00228     }
00229     else if (name == "d") {
00230       place = alveolar;
00231     }
00232     else if (name == "p") { 
00233       place = bilabial;
00234     }
00235     else if (name == "b") { 
00236       place = bilabial;
00237     }
00238     else if (name == "k") {
00239       place = velar;
00240     }
00241     else if (name == "g") { 
00242       place = velar;
00243     }
00244     else if (name == "f") {
00245       place = labial;
00246     }
00247     else if (name == "v") { 
00248       place = labial;
00249     }
00250     else if (name == "s") {
00251       place = alveolar;
00252     }
00253     else if (name == "z") { 
00254       place = alveolar;
00255     }
00256     else if (name == "S") { 
00257       place = postalveolar;
00258     }
00259     else if (name == "j") {
00260       place = palatal;
00261     }
00262     else if (name == "C") {
00263       place = palatal;
00264     }
00265     else if (name == "x") {
00266       place = velar;
00267     }
00268     else if (name == "h") { 
00269       place = glottal;
00270     }
00271     else if (name == "?") { 
00272       place = glottal;
00273     }
00274     else if (name == "l") { 
00275       place = alveolar;
00276     }
00277     else if (name == "R") { 
00278       place = uvular;
00279       }
00280     else if (name == "m") {
00281       place = bilabial;
00282     }
00283     else if (name == "n") {
00284       place = alveolar;
00285     }
00286     else if (name == "N") { 
00287       place = velar;
00288     }
00289   } else {
00290     place = noPlace;
00291   }
00292   if (type == vowel) {
00293     if (name == "6") 
00294       formantQuadrant = bottomRight;
00295     else if (name == "@") 
00296       formantQuadrant = topLeft;
00297     else if (name == "I") 
00298       formantQuadrant = topLeft;
00299     else if (name == "Y") 
00300       formantQuadrant = topLeft;
00301     else if (name == "E") 
00302       formantQuadrant = bottomLeft;
00303     else if (name == "9") 
00304       formantQuadrant = topRight;
00305     else if (name == "U") 
00306       formantQuadrant = topRight;
00307     else if (name == "O") 
00308       formantQuadrant = bottomRight;
00309     else if (name == "a") 
00310       formantQuadrant = bottomLeft;
00311     else if (name == "i:") 
00312       formantQuadrant = topLeft;
00313     else if (name == "y:") 
00314       formantQuadrant = topLeft;
00315     else if (name == "e:") 
00316       formantQuadrant = topLeft;
00317     else if (name == "E:") 
00318       formantQuadrant = bottomLeft;
00319     else if (name == "2:") 
00320       formantQuadrant = bottomLeft;
00321     else if (name == "u:") 
00322       formantQuadrant = topRight;
00323     else if (name == "o:") 
00324       formantQuadrant = topRight;
00325     else if (name == "a:") 
00326       formantQuadrant = bottomLeft;
00327     else
00328       formantQuadrant = noQuadrant;
00329   } else {
00330     formantQuadrant = noQuadrant;
00331   }  
00332   if (type == vowel) {
00333     if (name == "aI" || name == "OY" || name == "aU" || name == "I6") 
00334       diphtong = true;
00335     else
00336       diphtong = false;
00337   } else {
00338     diphtong = false;
00339   }
00340 }

void phon::interpolateF0Vec ( uint start,
uint end )
 

interpolate f0Contour linear from start to end.

See also:
phrase::changePitchContourStressed() , phrase::changeLastSylContour()
Parameters:
uint   end
uint   start
00638                                                 {
00639   interpolateLinear(f0Vec, start, end);
00640 }

void phon::modelFeatures ( uint sylMeanF0,
globalsT & glob,
phon * prevpP,
phon * nextpP )
 

models phone-features changing voice-source and/or ArticulationTractFilter parameters.

For voiceless phones which should become voiced, sylMeanF0 is used. For coarticulation prev- and nextManner are used.
I didn't find much information in the literature about modeling phonetic settings with a formant-synthesizer, so most of it I thought up theoretically from acoustic source-filter theory and did some experiments. Here's some of the literature I used:

the one for acoustic theory:
author = {Fant, G. },
title = {Acoustic Theory of Speech Production},
publisher = {Mouton, 's-Gravenhage},
year = {1960}

this one was (I think) never published, but it's very valuable, they ship it with the sensyn synthesizer
author = {Klatt, D. H. },
title ={KLATTALK, The Conversion of English Text to Speech},
chapter = {3: Description of the Cascade/Parallel Formant Synthesizer},
publisher = {unpublished},
year = {1990},

and, of course:
author = {Klatt, D. H. and Klatt, L. C. },
title = {Analysis, Synthesis and Perception of Voice Qualtity Variations among Female and Male Talkers},
journal = JASA,
year = {1990},
volume = {87},
number = {2},
pages = {820-856},

See also:
phrase::modelFeatures()
Todo:
model the features more adequately.

model more features.

Parameters:
uint   sylMeanF0
globalsT   globals
phon   *prevManner
phon   *nextManner
01052                                                                                    {
01054   //  cout << name <<": act:"<<manner<<", prev:"<<prevManner <<", next:"<<nextManner<<"\n";
01055   if (phonFeatures.undershoot) { 
01056     uint rate = phonFeatures.undershootRate;
01057     for (uint i=0; i<frameNum; i++) {
01058       int f1Diff = (int)(f1Vec[i] - center_F1)* (int)rate/100;
01059       int f2Diff = (int)(f2Vec[i] - center_F2)* (int)rate/100;
01060       f1Vec[i] = checkMinF1(checkMaxF1(f1Vec[i]-f1Diff));
01061       f2Vec[i] = checkMinF2(checkMaxF2(f2Vec[i]-f2Diff));
01062     }
01063   }
01064   if (phonFeatures.overshoot) { 
01065     uint rate = phonFeatures.overshootRate;
01066     for (uint i=0; i<frameNum; i++) {
01067       int f1Diff = (int)(f1Vec[i] - center_F1)* (int)rate/100;
01068       int f2Diff = (int)(f2Vec[i] - center_F2)* (int)rate/100;
01069       f1Vec[i] = checkMinF1(checkMaxF1(f1Vec[i]+f1Diff)); 
01070       f2Vec[i] = checkMinF2(checkMaxF2(f2Vec[i]+f2Diff)); 
01071    }
01072   }
01073   if (phonFeatures.spread) { 
01074     uint rate = phonFeatures.spreadRate;
01075     for (uint i=0; i<frameNum; i++) {
01076       int f1Diff = (int)(f1Vec[i])* (int)rate/100;
01077       int f2Diff = (int)(f2Vec[i])* (int)rate/100;
01078       f1Vec[i] = checkMinF1(checkMaxF1(f1Vec[i]+f1Diff));
01079       f2Vec[i] = checkMinF2(checkMaxF2(f2Vec[i]+f2Diff));
01080     }
01081   }
01082   if (phonFeatures.rounded) { 
01083     uint rate = phonFeatures.roundedRate;
01084     for (uint i=0; i<frameNum; i++) {
01085       int f1Diff = (int)(f1Vec[i])* (int)rate/100;
01086       int f2Diff = (int)(f2Vec[i])* (int)rate/100;
01087       int f3Diff = (int)(f3Vec[i])* (int)rate/100;
01088       int f4Diff = (int)(f4Vec[i])* (int)rate/100;
01089       int f5Diff = (int)(f5Vec[i])* (int)rate/100;
01090       
01091       f1Vec[i] = checkMinF1(checkMaxF1(f1Vec[i]-f1Diff/2));
01092       f2Vec[i] = checkMinF2(checkMaxF2(f2Vec[i]-f2Diff/2));
01093       f3Vec[i] = checkMinF3(checkMaxF3(f3Vec[i]-f3Diff));
01094       //f4Vec[i] = checkMinF4(checkMaxF4(f4Vec[i]-f4Diff));
01095       //f5Vec[i] = checkMinF5(checkMaxF5(f5Vec[i]-f5Diff));
01096     }
01097   }
01098   if (phonFeatures.headSize) { 
01099     uint rate = phonFeatures.headSizeRate;
01100     changeMean(f0Vec, rate);
01101     changeMean(f1Vec, rate);
01102     changeMean(f2Vec, rate);
01103     changeMean(f3Vec, rate);
01104     changeMean(f4Vec, rate);
01105     changeMean(f5Vec, rate);
01106   }
01107   if (phonFeatures.coarticulation) { 
01108     uint rate = phonFeatures.coarticulationRate;
01109     PHON_MANNER pManner, nManner;
01110     PHON_PLACE pPlace, nPlace;
01111     bool first=false, last=false;
01112     uint coFrames = frameNum/2 * rate/100;
01113     if (prevpP != NULL) {
01114       pManner=(*prevpP).Manner();
01115       pPlace=(*prevpP).Place();
01116     } else
01117       first = true;
01118     if (nextpP != NULL) {
01119       nManner=(*nextpP).Manner();
01120       nPlace=(*nextpP).Place();      
01121    } else
01122       last = true;
01123     CO_TYPE coType = phonFeatures.coarticulationType;
01124 
01125     if (!first && (coType==progressive || coType==both)) {
01126       if (manner==fricative_voiceless && (pManner==long_vowel||pManner==short_vowel) ) {
01127         glob.b1Dyn = true;
01128         glob.avDyn = true;
01129         for (uint i=0; i<coFrames; i++) {         
01130           b1Vec[i] = 300;
01131           avVec[i] = ampVec[i];
01132           f0Vec[i] = (*prevpP).F0Vec()[(*prevpP).FrameNum()-1];
01133         }
01134       }
01135       if ((manner==long_vowel||manner==short_vowel)) {
01136         if (pManner==fricative_voiceless||pManner==fricative_voiced) {
01137           if (pPlace==alveolar)
01138             for (uint i=0; i<coFrames; i++) {
01139               afVec[i] = ampVec[i]>6 ? ampVec[i]-6 : 0;
01140               f5Vec[i] = 3500; f6Vec[i] = 4500;
01141               b5pVec[i] = 500; b6pVec[i] = 500;
01142               a5fVec[i]= 50; a6fVec[i]= 60;
01143             }
01144           if (pPlace==postalveolar)
01145             for (uint i=0; i<coFrames; i++) {
01146               afVec[i] = ampVec[i]>6 ? ampVec[i]-6 : 0;
01147               f4Vec[i] = 2000; f5Vec[i] = 3500; f6Vec[i] = 4500;
01148               b4pVec[i] = 320; b5pVec[i] = 500; b6pVec[i] = 1500;
01149               a4fVec[i]= 60; a5fVec[i]= 60; a6fVec[i]= 60;
01150             }
01151         }
01152         if (pManner==nasal) {
01153           uint lastFnp =  (*prevpP).FnpVec()[(*prevpP).FrameNum()-1];
01154           uint lastFnz =  (*prevpP).FnzVec()[(*prevpP).FrameNum()-1];
01155           uint lastBnp =  (*prevpP).BnpVec()[(*prevpP).FrameNum()-1];
01156           uint lastBnz =  (*prevpP).BnzVec()[(*prevpP).FrameNum()-1];
01157           for (uint i=0; i<coFrames; i++) {
01158             fnpVec[i] = lastFnp;
01159             bnpVec[i] = lastBnp;
01160             fnzVec[i] = lastFnz;
01161             bnzVec[i] = lastBnz;
01162           }
01163         }
01164       }
01165     }
01166     if (!last && (coType==regressive || coType==both)) {
01167       if (manner==fricative_voiceless && (nManner==long_vowel||pManner==short_vowel) ) {
01168         // cout <<name<<" "<<frameNum-coFrames<<"\n";
01169         glob.b1Dyn = true;
01170         glob.avDyn = true;
01171         for (uint i=frameNum-coFrames; i<frameNum; i++) {
01172           avVec[i] = ampVec[i];
01173           f0Vec[i] = (*nextpP).F0Vec()[0];
01174           b1Vec[i] = 300;
01175         }
01176       }
01177       if ((manner==long_vowel||manner==short_vowel)) {
01178         if  (nManner==fricative_voiceless||nManner==fricative_voiced) {
01179         //      glob.b4pDyn = true;
01180           glob.b5pDyn = true;
01181           glob.b6pDyn = true;
01182           glob.a4fDyn = true;
01183           glob.a5fDyn = true;
01184           glob.a6fDyn = true;
01185           for (uint i=frameNum-coFrames; i<frameNum; i++) {
01186             afVec[i] = ampVec[i]>6 ? ampVec[i]-6 : 0;
01187             f4Vec[i] = 2000; f5Vec[i] = 3500; f6Vec[i] = 4500;
01188             b4pVec[i] = 320; b5pVec[i] = 500; b6pVec[i] = 1500;
01189             a4fVec[i]= 60; a5fVec[i]= 60; a6fVec[i]= 60;
01190           }
01191         }
01192         if  (nManner==nasal) {
01193           uint nextFnp =  (*nextpP).FnpVec()[0];
01194           uint nextFnz =  (*nextpP).FnzVec()[0];
01195           uint nextBnp =  (*nextpP).BnpVec()[0];
01196           uint nextBnz =  (*nextpP).BnzVec()[0];
01197           for (uint i=0; i<frameNum-coFrames; i++) {
01198             fnpVec[i] = nextFnp;
01199             bnpVec[i] = nextBnp;
01200             fnzVec[i] = nextFnz;
01201             bnzVec[i] = nextBnz;
01202           }
01203 
01204         }
01205       }
01206     }
01207   }
01208   if (phonFeatures.jitter) {
01209     if (phonFeatures.jitterMethod==USE_FLUTTER) {
01210       glob.flDyn = true;
01211       for (uint i=0; i<frameNum; i++) {
01212         if (f0Vec[i]>0)
01213           flVec[i] = phonFeatures.jitterRate;
01214       }
01215     } else if (phonFeatures.jitterMethod==USE_F0_ALTERNATING) {
01216       addJitterVec(f0Vec, phonFeatures.jitterRate);
01217     } else {
01218       error ("modelPhonFeatures: no jitter-method defined\n", -5);
01219     }
01220   }
01221   if (phonFeatures.voiced && voiced) { 
01222     uint voiceLessStart = phonFeatures.vocStop;
01223     uint voiceLessEnd = phonFeatures.vocStart==0 ? 
01224       frameNum : phonFeatures.vocStart;
01225     for (uint i=voiceLessStart; i<voiceLessEnd; i++) {
01226       if (type == vowel) {
01227         avVec[i] = 0;
01228         aturbVec[i] = 60; 
01229       } else if (type == consonant) {
01230         avpVec[i] = 0; 
01231       }
01232     }
01233   }
01234   if (phonFeatures.voiced && !voiced) {
01235      cout <<"here\n";
01236    
01237     uint voiceStart = phonFeatures.vocStart;
01238     uint voiceEnd = phonFeatures.vocStop>frameNum ? frameNum : phonFeatures.vocStop;
01239     glob.avDyn = true;
01240     if (glob.senSyn) {
01241       for (uint i=voiceStart; i<voiceEnd; i++) {
01242         avVec[i] = ampVec[i]-6; 
01243         f0Vec[i] = sylMeanF0;
01244         //      f0Vec[i] = (*nextpP).F0Vec()[0];
01245         //      f0Vec[i] = (*prevpP).F0Vec()[(*prevpP).FrameNum()-1];
01246       }
01247     } else {
01248       for (uint i=voiceStart; i<voiceEnd; i++) {
01249         avpVec[i] = ampVec[i]>6 ? ampVec[i]-6 : 0; 
01250         a1Vec[i] = 50; a2Vec[i] = 50; a3Vec[i] = 50; 
01251       }
01252     }
01253   }
01254   
01255   if (phonFeatures.breathy) {
01256     uint brtStart = phonFeatures.brtStart;
01257     uint brtEnd = phonFeatures.brtStop>frameNum ? 
01258       frameNum : phonFeatures.brtStop;
01259     uint rate = phonFeatures.brtRate;
01260 
01261     if ((*nextpP).Manner()==stop_voiced && brtEnd==frameNum)
01262       brtEnd /= 2;
01263     
01264     glob.btpDyn = true;
01265     glob.ahDyn=true;
01266     glob.oqDyn=true;
01267     glob.tlDyn=true;
01268 
01269     glob.btpDyn = true;
01270     glob.fnpDyn = true;
01271     glob.fnzDyn = true;
01272     glob.bnpDyn = true;
01273 
01274     uint oqAdd = (100-glob.oq)*rate/100;
01275     uint tlAdd = (24-glob.tl)*rate/100;
01276     uint b1Add = (200-glob.ah)*rate/100;
01277     uint avSub = 6*rate/100; 
01278     uint ahAdd;
01279 
01280     uint btpSub = (glob.btp-minBtp)*rate/100;
01281     uint bnpSub = (glob.bnp-minBnp)*rate/100;
01282 
01283     // cout << tlAdd<<" "<<oqAdd<<"\n";
01284     for (uint i=brtStart; i<brtEnd; i++) {
01286       b1Vec[i] += b1Add;
01287       oqVec[i] += oqAdd; 
01288       ahAdd = ampVec[i]>3 ? (ampVec[i]-3)*rate/100 : 0;
01289       ahVec[i] += ahAdd; 
01290       tlVec[i] += tlAdd;   
01291       avVec[i] = avVec[i]>avSub ? avVec[i]-avSub : 0;
01292 
01295       fnpVec[i] = 550;
01296       fnzVec[i] = 550;
01297       btpVec[i] -= btpSub;
01298       bnpVec[i] -= bnpSub;
01299       if (!glob.senSyn)
01300         aturbVec[i] = ampVec[i]+6; 
01301     }
01302   } 
01303 
01304   if (phonFeatures.nasalized) {
01305     uint nasStart = phonFeatures.nasStart;
01306     uint nasEnd = phonFeatures.nasStop>frameNum ? 
01307       frameNum : phonFeatures.nasStop;
01308     for (uint i=nasStart; i<nasEnd; i++) {
01309       //     fnzVec[i] = f2Vec[i] - f1Vec[i];
01310     }         
01311   }
01312 
01313   if (phonFeatures.laryngealized) {
01314     glob.diDyn=true;
01315     uint larStart = phonFeatures.larStart;
01316     uint larEnd = phonFeatures.larStop>frameNum ? 
01317       frameNum : phonFeatures.larStop;
01318  
01319     if (glob.senSyn) { 
01320      uint rate = phonFeatures.larRate;
01321       glob.diDyn = true;
01322       glob.b1Dyn = true;
01323       glob.oqDyn = true;
01324       uint b1Add = 250*rate/100; 
01325       uint oqAdd = (100-glob.oq)*rate/100;
01326     for (uint i=larStart; i<larEnd; i++) { 
01327         diVec[i]= rate;
01328         oqVec[i] += oqAdd;
01329         b1Vec[i] += b1Add;
01330       }
01331     } else {  
01332       cout << "phon::modelFeatures: generating output for i&s version, not tested\n";
01333       for (uint i=larStart; i<larEnd; i++) {
01335         f0Vec[i] = checkMinF0((uint) f0Vec[i]/2);
01337         avVec[i] = avVec[i] - 3;
01338       }
01339     }         
01340   }  
01341   if (phonFeatures.creaky) {
01342     glob.diDyn=true;
01343     uint creakyStart = phonFeatures.creakyStart;
01344     uint creakyEnd = phonFeatures.creakyStop>frameNum ? 
01345       frameNum : phonFeatures.creakyStop;
01346  
01347     if (glob.senSyn) {
01348       uint rate = phonFeatures.creakyRate;
01349       glob.diDyn = true;
01350       glob.b1Dyn = true;
01351       glob.oqDyn = true;
01352       uint b1Add = 250*rate/100; 
01353       uint oqAdd = (100-glob.oq)*rate/200;
01354       uint avSub = 6*rate/100; 
01355     for (uint i=creakyStart; i<creakyEnd; i++) { 
01356         diVec[i]= rate;
01357         oqVec[i] += oqAdd;
01358         avVec[i] = avVec[i]>avSub ? avVec[i]-avSub : 0;
01359         b1Vec[i] += b1Add;
01360       }
01361     } else {  
01362       cout << "phon::modelFeatures: generating output for i&s version, not tested\n";
01363       for (uint i=creakyStart; i<creakyEnd; i++) {
01365         f0Vec[i] = checkMinF0((uint) f0Vec[i]/2);
01367         avVec[i] = avVec[i] - 3;
01368       }
01369     }         
01370   }  
01371   if (phonFeatures.tense) { 
01372     glob.oqDyn=true;
01373     glob.tlDyn=true;
01374     glob.b1Dyn=true;
01375     glob.b2Dyn=true;
01376     glob.b3Dyn=true;
01377     glob.b4Dyn=true;
01378     glob.b5Dyn=true;
01379     glob.b6Dyn=true;
01380     uint rate = phonFeatures.tenseRate;
01381     uint avAdd = 6*rate/100; 
01382     uint oqSub = (glob.oq-minOq)*rate/100;
01383     uint tlSub = glob.tl*rate/100;
01384     uint b1Sub = (glob.b1-minB1)*rate/100;
01385     uint b2Sub = (glob.b2-minB2)*rate/100;
01386     uint b3Sub = (glob.b3-minB3)*rate/100;
01387     uint b4Sub = (glob.b4-minB4)*rate/100;
01388     uint b5Sub = (glob.b5-minB5)*rate/100;
01389     uint b6Sub = (glob.b6-minB6)*rate/100;
01390     // cout << tlSub<<" "<<oqSub<<"\n";
01391     // cout << b1Sub<<" "<<oqSub<<"\n";
01392 
01393     for (uint i=0; i<frameNum; i++) {
01394       avVec[i] += avAdd; 
01395       oqVec[i] = oqVec[i] > oqSub ? oqVec[i]-oqSub : 0; 
01396       tlVec[i] = tlVec[i] > tlSub ? tlVec[i]-tlSub : 0;   
01397       b1Vec[i] -= b1Sub;
01398       b2Vec[i] -= b2Sub;
01399       b3Vec[i] -= b3Sub;
01400       b4Vec[i] -= b4Sub;
01401       b5Vec[i] -= b5Sub;
01402       b6Vec[i] -= b6Sub;
01403     }
01404   } 
01405   if (phonFeatures.falsett) { 
01406     glob.oqDyn=true;
01407     glob.tlDyn=true;
01408     glob.b1Dyn=true;
01409     glob.b2Dyn=true;
01410     glob.b3Dyn=true;
01411     glob.b4Dyn=true;
01412     glob.b5Dyn=true;
01413     glob.b6Dyn=true;
01414     glob.flDyn=true;
01415     uint rate = phonFeatures.falsettRate;
01416       uint oqAdd = (100-glob.oq)*phonFeatures.brtRate/100;
01417       uint tlAdd = (24-glob.tl)*phonFeatures.brtRate/100;
01418       // cout << tlAdd<<" "<<oqAdd<<"\n";
01419     for (uint i=0; i<frameNum; i++) {
01420       f0Vec[i] += (uint)((double)f0Vec[i] * (double)rate/100.0);
01421       oqVec[i] += oqAdd; 
01422       tlVec[i] += tlAdd;   
01423       // flVec[i] += rate;
01424       
01425       b1Vec[i] = 200;
01426       b2Vec[i] = 200;
01427       b3Vec[i] = 200;
01428       b4Vec[i] = 200;
01429       b5Vec[i] = 200;
01430       b6Vec[i] = 1000;
01431     }
01432   } 
01433   if (phonFeatures.whisper) { 
01434     glob.oqDyn=true;
01435     glob.tlDyn=true;
01436     glob.b1Dyn=true;
01437     glob.b2Dyn=true;
01438     glob.b3Dyn=true;
01439     glob.b4Dyn=true;
01440     glob.b5Dyn=true;
01441     glob.b6Dyn=true;
01442     uint rate = phonFeatures.whisperRate;
01443     uint oqAdd = (100-glob.oq)*rate/100;
01444     uint tlAdd = (24-glob.tl)*rate/100;
01445     // cout << tlAdd<<" "<<oqAdd<<"\n";
01446     for (uint i=0; i<frameNum; i++) {
01447       //   ahVec[i] += avVec[i]*rate/100;
01448       avVec[i] = avVec[i]>avVec[i]*rate/100?avVec[i]-avVec[i]*rate/100:0;
01449 
01450       oqVec[i] += oqAdd; 
01451       tlVec[i] += tlAdd;   
01452       b1Vec[i] = 200;
01453       b2Vec[i] = 200;
01454       b3Vec[i] = 200;
01455       b4Vec[i] = 200;
01456       b5Vec[i] = 200;
01457       b6Vec[i] = 1000;
01458     }
01459     /*
01460       if (type==vowel&&(*prevpP).Manner()==stop_voiced) {
01461         cout<<"here\n";
01462         for (uint i=0; i<frameNum; i++) {
01463           // avVec[i] = 0;
01464           // f0Vec[i] = 0;
01465           ahVec[i] = 0;
01466         }       
01467       }
01468     */
01469   } 
01470   //  printVec(avVec);  
01471 }

void phon::modelIntonation ( globalsT & kg )
 

models Intonation by filling the gaps in f0ValVec.

f0Vec gets set/changed. f0Dyn is true.

See also:
f0ValVec , f0TimeVec
Parameters:
globalsT   globals
00342                                          {
00343   f0Vec = modelTrack(name, frameNum, f0ValVec, f0TimeVec);
00344   glob.f0Dyn=true;
00345 }

void phon::printKlattFrames ( ostream & outFile )
 

prints KlattFrames of phone in simmons&iles format to outFile.

See also:
phrase::printKlattFile()
Parameters:
ostream   &outFile
00430                                             {
00431   for (uint i=0; i<frameNum;i++) {
00432     if(f0Vec[i] > maxF0) cerr << "WARNING: phon:"+name+", f0Val="<<f0Vec[i]<<" > maxF0\n";
00433     if(f0Vec[i] < minF0 && f0Vec[i]!=0) cerr << "WARNING: phon:"+name+", f0Val="<<f0Vec[i]<<" < minF0\n";
00434     if(f1Vec[i] > maxF1) cerr << "WARNING: phon:"+name+", f1Val="<<f1Vec[i]<<" > maxF1\n";
00435     if(f2Vec[i] > maxF2) cerr << "WARNING: phon:"+name+", f2Val="<<f2Vec[i]<<" > maxF2\n";
00436     if(f3Vec[i] > maxF3) cerr << "WARNING: phon:"+name+", f3Val="<<f3Vec[i]<<" > maxF3\n";
00437     
00438     if (ampVec[i]>maxVal) warn ("unplausibel value for param: amp at phon: "+name+"\n");
00439     if (f0Vec[i]>maxVal) warn ("unplausibel value for param: f0 at phon: "+name+"\n");
00440     if (f1Vec[i]>maxVal) warn ("unplausibel value for param: f1 at phon: "+name+"\n");
00441     if (f2Vec[i]>maxVal) warn ("unplausibel value for param: f2 at phon: "+name+"\n");
00442     if (f3Vec[i]>maxVal) warn ("unplausibel value for param: f3 at phon: "+name+"\n");
00443     if (f4Vec[i]>maxVal) warn ("unplausibel value for param: f4 at phon: "+name+"\n");
00444     if (f5Vec[i]>maxVal) warn ("unplausibel value for param: f5 at phon: "+name+"\n");
00445     if (f6Vec[i]>maxVal) warn ("unplausibel value for param: f6 at phon: "+name+"\n");
00446     if (b1Vec[i]>maxVal) warn ("unplausibel value for param: b1 at phon: "+name+"\n");
00447     if (b2Vec[i]>maxVal) warn ("unplausibel value for param: b2 at phon: "+name+"\n");
00448     if (b3Vec[i]>maxVal) warn ("unplausibel value for param: b3 at phon: "+name+"\n");
00449     if (b4Vec[i]>maxVal) warn ("unplausibel value for param: b4 at phon: "+name+"\n");
00450     if (b5Vec[i]>maxVal) warn ("unplausibel value for param: b5 at phon: "+name+"\n");
00451     if (b6Vec[i]>maxVal) warn ("unplausibel value for param: b6 at phon: "+name+"\n");
00452     if (a1Vec[i]>maxVal) warn ("unplausibel value for param: a1 at phon: "+name+"\n");
00453     if (a2Vec[i]>maxVal) warn ("unplausibel value for param: a2 at phon: "+name+"\n");
00454     if (a3Vec[i]>maxVal) warn ("unplausibel value for param: a3 at phon: "+name+"\n");
00455     if (a4Vec[i]>maxVal) warn ("unplausibel value for param: a4 at phon: "+name+"\n");
00456     if (a5Vec[i]>maxVal) warn ("unplausibel value for param: a5 at phon: "+name+"\n");
00457     if (a6Vec[i]>maxVal) warn ("unplausibel value for param: a6 at phon: "+name+"\n");
00458     if (b1pVec[i]>maxVal) warn ("unplausibel value for param: b1p at phon: "+name+"\n");
00459     if (b2pVec[i]>maxVal) warn ("unplausibel value for param: b2p at phon: "+name+"\n");
00460     if (b3pVec[i]>maxVal) warn ("unplausibel value for param: b3p at phon: "+name+"\n");
00461     if (b4pVec[i]>maxVal) warn ("unplausibel value for param: b4p at phon: "+name+"\n");
00462     if (b5pVec[i]>maxVal) warn ("unplausibel value for param: b5p at phon: "+name+"\n");
00463     if (b6pVec[i]>maxVal) warn ("unplausibel value for param: b6p at phon: "+name+"\n");
00464     if (avVec[i]>maxVal) warn ("unplausibel value for param: av at phon: "+name+"\n");
00465     if (ahVec[i]>maxVal) warn ("unplausibel value for param: ah at phon: "+name+"\n");
00466     if (oqVec[i]>maxVal) warn ("unplausibel value for param: oq at phon: "+name+"\n");
00467     if (aturbVec[i]>maxVal) warn ("unplausibel value for param: aturb at phon: "+name+"\n");
00468     if (afVec[i]>maxVal) warn ("unplausibel value for param: af at phon: "+name+"\n");
00469     if (abVec[i]>maxVal) warn ("unplausibel value for param: ab at phon: "+name+"\n");
00470     if (avpVec[i]>maxVal) warn ("unplausibel value for param: avp at phon: "+name+"\n");
00471     if (tlVec[i]>maxVal) warn ("unplausibel value for param: tl at phon: "+name+"\n");
00472     if (flVec[i]>maxVal) warn ("unplausibel value for param: fl at phon: "+name+"\n");
00473     if (gainVec[i]>maxVal) warn ("unplausibel value for param: gain at phon: "+name+"\n");
00474     if (anvVec[i]>maxVal) warn ("unplausibel value for param: anv at phon: "+name+"\n");
00475     if (fnzVec[i]>maxVal) warn ("unplausibel value for param: fnz at phon: "+name+"\n");
00476     if (bnzVec[i]>maxVal) warn ("unplausibel value for param: bnz at phon: "+name+"\n");
00477     if (fnpVec[i]>maxVal) warn ("unplausibel value for param: fnp at phon: "+name+"\n");
00478     if (bnpVec[i]>maxVal) warn ("unplausibel value for param: bnp at phon: "+name+"\n");
00479     if (sqVec[i]>maxVal) warn ("unplausibel value for param: sq at phon: "+name+"\n");
00480     if (diVec[i]>maxVal) warn ("unplausibel value for param: di at phon: "+name+"\n");
00481     if (df1Vec[i]>maxVal) warn ("unplausibel value for param: df1 at phon: "+name+"\n");
00482     if (db1Vec[i]>maxVal) warn ("unplausibel value for param: db1 at phon: "+name+"\n");
00483     if (ftpVec[i]>maxVal) warn ("unplausibel value for param: ftp at phon: "+name+"\n");
00484     if (btpVec[i]>maxVal) warn ("unplausibel value for param: btp at phon: "+name+"\n");
00485     if (ftzVec[i]>maxVal) warn ("unplausibel value for param: ftz at phon: "+name+"\n");
00486     if (btzVec[i]>maxVal) warn ("unplausibel value for param: btz at phon: "+name+"\n");
00487     if (a2fVec[i]>maxVal) warn ("unplausibel value for param: a2f at phon: "+name+"\n");
00488     if (a3fVec[i]>maxVal) warn ("unplausibel value for param: a3f at phon: "+name+"\n");
00489     if (a4fVec[i]>maxVal) warn ("unplausibel value for param: a4f at phon: "+name+"\n");
00490     if (a5fVec[i]>maxVal) warn ("unplausibel value for param: a5f at phon: "+name+"\n");
00491     if (a6fVec[i]>maxVal) warn ("unplausibel value for param: a6f at phon: "+name+"\n");
00492     if (a1vVec[i]>maxVal) warn ("unplausibel value for param: a1v at phon: "+name+"\n");
00493     if (a2vVec[i]>maxVal) warn ("unplausibel value for param: a2v at phon: "+name+"\n");
00494     if (a3vVec[i]>maxVal) warn ("unplausibel value for param: a3v at phon: "+name+"\n");
00495     if (a4vVec[i]>maxVal) warn ("unplausibel value for param: a4v at phon: "+name+"\n");
00496     if (atvVec[i]>maxVal) warn ("unplausibel value for param: atv at phon: "+name+"\n");
00497     
00498     
00499     outFile <<f0Vec[i]<<" "<<avVec[i]
00500             <<" "<<f1Vec[i]<<" "<<b1Vec[i]<<" "<<f2Vec[i]<<" "<<b2Vec[i]<<" "
00501             <<f3Vec[i]<<" "<<b3Vec[i]<<" "<<f4Vec[i]<<" "<<b4Vec[i]<<" "<<f5Vec[i]<<" "
00502             <<b5Vec[i]<<" "<<f6Vec[i]<<" "<<b6Vec[i]<<" "<<fnzVec[i]<<" "<<bnzVec[i]<<" "
00503             <<fnpVec[i]<<" "<<bnpVec[i]<<" "<<ahVec[i]<<" "<<oqVec[i]<<" "
00504             <<aturbVec[i]<<" "<<tlVec[i]<<" "<<afVec[i]<<" "<<flVec[i]<<" "
00505             <<a1Vec[i]<<" "<<b1pVec[i]<<" "<<a2Vec[i]<<" "<<b2pVec[i]<<" "<<a3Vec[i]<<" "
00506             <<b3pVec[i]<<" "<<a4Vec[i]<<" "<<b4pVec[i]<<" "<<a5Vec[i]<<" "<<b5pVec[i]<<" "
00507             <<a6Vec[i]<<" "<<b6pVec[i]<<" "<<anvVec[i]<<" "<<abVec[i]<<" "<<avpVec[i]<<" "
00508             <<gainVec[i]<<"\n"; 
00509   }
00510 }

void phon::printName ( ostream & outFile )
 

prints name of phon to outFile (debugging).

Parameters:
ostream   &outFile
00426                                      {
00427   outFile << name;
00428 }

void phon::printSenSynFrames ( uint start,
ostream & outFile,
globalsT glob )
 

prints all parameters (frames) of the phone in sensyn-format.

the paramter start gives the start time of the phone. Used by printSenSynFile().

See also:
phrase::printSenSynFile()
Parameters:
uint   start
ostream   &outFile
globalsT   glob
00512                                                                         {
00513   uint time = start;
00514   for (uint i=0; i<frameNum;i++) {
00515     //    if(f0Vec[i] > maxF0) cerr << "WARNING: f0Val="<<f0Vec[i]<<" > maxF0\n";
00516     //    if(f0Vec[i] < minF0 && f0Vec[i]!=0) cerr << "WARNING: f0Val="<<f0Vec[i]<<" < minF0\n";
00517     if(f1Vec[i] > maxF1) cerr << "WARNING: f1Val="<<f1Vec[i]<<" > maxF1\n";
00518     if(f2Vec[i] > maxF2) cerr << "WARNING: f2Val="<<f2Vec[i]<<" > maxF2\n";
00519     if(f3Vec[i] > maxF3) cerr << "WARNING: f3Val="<<f3Vec[i]<<" > maxF3\n";
00520     //    fprintf((FILE *)outFile, "%5d", "time");
00521     outFile.width(4);
00522     outFile << time ;
00523     if (glob.f0Dyn) {outFile.width(5); outFile << f0Vec[i];}
00524     if (glob.avDyn) {outFile.width(5); outFile << avVec[i];}
00525     if (glob.oqDyn) {outFile.width(5); outFile << oqVec[i];}
00526     if (glob.sqDyn) {outFile.width(5); outFile << sqVec[i];}
00527     if (glob.tlDyn) {outFile.width(5); outFile << tlVec[i];}
00528     if (glob.flDyn) {outFile.width(5); outFile << flVec[i];}
00529     if (glob.diDyn) {outFile.width(5); outFile << diVec[i];}
00530     if (glob.ahDyn) {outFile.width(5); outFile << ahVec[i];}
00531     if (glob.afDyn) {outFile.width(5); outFile << afVec[i];}
00532     if (glob.f1Dyn) {outFile.width(5); outFile << f1Vec[i];}
00533     if (glob.b1Dyn) {outFile.width(5); outFile << b1Vec[i];}
00534     if (glob.df1Dyn) {outFile.width(5); outFile << df1Vec[i];}
00535     if (glob.db1Dyn) {outFile.width(5); outFile << db1Vec[i];}
00536     if (glob.f2Dyn) {outFile.width(5); outFile << f2Vec[i];}
00537     if (glob.b2Dyn) {outFile.width(5); outFile << b2Vec[i];}
00538     if (glob.f3Dyn) {outFile.width(5); outFile << f3Vec[i];}
00539     if (glob.b3Dyn) {outFile.width(5); outFile << b3Vec[i];}
00540     if (glob.f4Dyn) {outFile.width(5); outFile << f4Vec[i];}
00541     if (glob.b4Dyn) {outFile.width(5); outFile << b4Vec[i];}
00542     if (glob.f5Dyn) {outFile.width(5); outFile << f5Vec[i];}
00543     if (glob.b5Dyn) {outFile.width(5); outFile << b5Vec[i];}
00544     if (glob.f6Dyn) {outFile.width(5); outFile << f6Vec[i];}
00545     if (glob.b6Dyn) {outFile.width(5); outFile << b6Vec[i];}
00546     if (glob.fnpDyn) {outFile.width(5); outFile << fnpVec[i];}
00547     if (glob.bnpDyn) {outFile.width(5); outFile << bnpVec[i];}
00548     if (glob.fnzDyn) {outFile.width(5); outFile << fnzVec[i];}
00549     if (glob.bnzDyn) {outFile.width(5); outFile << bnzVec[i];}
00550     if (glob.ftpDyn) {outFile.width(5); outFile << ftpVec[i];}
00551     if (glob.btpDyn) {outFile.width(5); outFile << btpVec[i];}
00552     if (glob.ftzDyn) {outFile.width(5); outFile << ftzVec[i];}
00553     if (glob.btzDyn) {outFile.width(5); outFile << btzVec[i];}
00554     if (glob.a2fDyn) {outFile.width(5); outFile << a2fVec[i];}
00555     if (glob.a3fDyn) {outFile.width(5); outFile << a3fVec[i];}
00556     if (glob.a4fDyn) {outFile.width(5); outFile << a4fVec[i];}
00557     if (glob.a5fDyn) {outFile.width(5); outFile << a5fVec[i];}
00558     if (glob.a6fDyn) {outFile.width(5); outFile << a6fVec[i];}
00559     if (glob.abDyn) {outFile.width(5); outFile << abVec[i];}
00560     if (glob.b2pDyn) {outFile.width(5); outFile << b2pVec[i];}
00561     if (glob.b3pDyn) {outFile.width(5); outFile << b3pVec[i];}
00562     if (glob.b4pDyn) {outFile.width(5); outFile << b4pVec[i];}
00563     if (glob.b5pDyn) {outFile.width(5); outFile << b5pVec[i];}
00564     if (glob.b6pDyn) {outFile.width(5); outFile << b6pVec[i];}
00565     if (glob.anvDyn) {outFile.width(5); outFile << anvVec[i];}
00566     if (glob.a1vDyn) {outFile.width(5); outFile << a1vVec[i];}
00567     if (glob.a2vDyn) {outFile.width(5); outFile << a2vVec[i];}
00568     if (glob.a3vDyn) {outFile.width(5); outFile << a3vVec[i];}
00569     if (glob.a4vDyn) {outFile.width(5); outFile << a4vVec[i];}
00570     if (glob.atvDyn) {outFile.width(5); outFile << atvVec[i];}
00571     outFile << "\n"; 
00572     time += glob.ui;
00573   }
00574 }

void phon::setA1Vec ( vector< uint > newVec,
globalsT & kg ) [inline]
 

set/change a1-vals, (iles&simmons-version only).

Parameters:
vector   <uint>& newVec
globalsT   &kg
00564                                                    {a1Vec = newVec;}

void phon::setA2Vec ( vector< uint > newVec,
globalsT & kg ) [inline]
 

set/change a2-vals, (iles&simmons-version only).

Parameters:
vector   <uint>& newVec
globalsT   &kg
00570                                                    {a2Vec = newVec;}

void phon::setA3Vec ( vector< uint > newVec,
globalsT & kg ) [inline]
 

set/change a3-vals, (iles&simmons-version only).

Parameters:
vector   <uint>& newVec
globalsT   &kg
00576                                                    {a3Vec = newVec;}

void phon::setA4Vec ( vector< uint > newVec,
globalsT & kg ) [inline]
 

set/change a4-vals, (iles&simmons-version only).

Parameters:
vector   <uint>& newVec
globalsT   &kg
00582                                                    {a4Vec = newVec;}

void phon::setA5Vec ( vector< uint > newVec,
globalsT & kg ) [inline]
 

set/change a5-vals, (iles&simmons-version only).

Parameters:
vector   <uint>& newVec
globalsT   &kg
00588                                                    {a5Vec = newVec;}

void phon::setA6Vec ( vector< uint > newVec,
globalsT & kg ) [inline]
 

set/change a6-vals, (iles&simmons-version only).

Parameters:
vector   <uint>& newVec
globalsT   &kg
00594                                                    {a6Vec = newVec;}

void phon::setAmpVec ( vector< uint > newVec,
globalsT & kg ) [inline]
 

set/change Amp-vals, changes bool ampDyn to true.

Parameters:
vector   <uint>& newVec
globalsT   &kg
00474                                                     {ampVec = newVec;}

void phon::setArticulationTractFilter ( globalsT & glob )
 

models ArticulationTractFilter parameters.

Parameters (val-vectors are filled) are set according to place and manner of articulation.

Some of the modeling depends on the actual klatt-synthesizer that's used. I did all the testing with the sensyn synthesizer, so there's still work to do for the Simmons&Iles synthesizer.

It's not easy to get data for this in the literature, I did lot's of experiments and I only cared about the parameters for phones that occured in my testsentence. However, you get some information from
author = {Klatt, D. H. },
title = {Software for a Cascade/Parallel Formant Synthesizer},
journal = JASA,
year = {1980},
volume = {67},
number = {3},
pages = {971-959},

or (in German and difficult to get)
author = {Simpson, A. },
booktitle = {Phonetische Datenbanken des Deutschen in der Empirischen Sprachforschung und der Phonologischen Theoriebildung},
title = {Wissensbasierte Gewinnung von Steuerparametern f"ur die Formantsynthese},
publisher = {Institut f"ur Phonetik und digitale Sprachverarbeitung der Universit"at Kiel},
year = {1998},
editor = {Kohler, K. J. },
series = {Arbeitsberichte 33},

or even
author = {Kent, R.D. and Read, C.},
title = {The Acoustic Analysis of Speech},
year = {1992},
publisher = {Singular Publishing Group, San Diego},

See also:
phrase::modelKlattParameters(globalsT &globals) , setSoundSource()
Todo:
model more phones, this is language-specific.

do some testing with the simmons & Iles synthesizer.

Parameters:
globalsT   globals
00876                                                     {
00877   
00878   switch(type) {
00879   case vowel:
00880     // modeling is done by the cascade tract
00881     break;
00882   case consonant:
00883     switch (manner) {
00884     case liquide: 
00885       break;
00886     case nasal: 
00887       
00888       glob.fnzDyn = true;
00889       glob.fnpDyn = true;     
00890       glob.bnpDyn = true;
00891       glob.bnzDyn = true;
00892 
00893       glob.ftpDyn = true;
00894       glob.ftzDyn = true;
00895       glob.btpDyn = true;
00896       glob.btzDyn = true;
00897 
00898       glob.tlDyn=true;
00899 
00900       for (uint i=0; i<frameNum; i++) {
00901         // fnzVec[i] = 1800;    
00902         fnzVec[i] = f1Vec[i] + (int) ((double)(f2Vec[i]-f1Vec[i])*0.75);
00903         // fnpVec[i] = 900;
00904         fnpVec[i] = f1Vec[i] + (int) (f2Vec[i]-f1Vec[i])/2; 
00905         bnpVec[i] = 500; bnzVec[i] = 30;
00906          
00907         ftpVec[i] = 2700;
00908         ftzVec[i] = 3200;
00909         // btpVec[i] = 50;
00910         // btzVec[i] = 500;
00911 
00912         a1Vec[i]=50; a2Vec[i]=50; a3Vec[i]=50; // for i&s
00913         switch (place) {
00914         case bilabial:
00915           break;
00916         case alveolar:
00917           break;
00918         case velar:
00919           break;
00920         default:
00921           error ("phon::setArticulationTractFilter: nasal with unknown place\n", -3);
00922         }
00923       }
00924       
00925       break;
00926 
00927     case silence:
00928       
00929       break;
00930     default : // fricativss and stops
00931       switch (place) {
00932       case bilabial:
00933         for (uint i=0; i<frameNum; i++) 
00934           abVec[i] = 60; glob.abDyn=true;
00935         break;
00936       case labial:
00937         for (uint i=0; i<frameNum; i++) {
00938           if (voiced) {
00939             a1Vec[i] = 50; a2Vec[i] = 45; a3Vec[i] = 45; // for i&s
00940             a2fVec[i] = 45; glob.a2fDyn=true; 
00941             a3fVec[i] = 45; glob.a3fDyn=true;
00942             b2pVec[i] = 100; glob.b2pDyn=true; 
00943             b3pVec[i] = 200; glob.b3pDyn=true;      
00944           } else 
00945             abVec[i] = 60; glob.abDyn=true;
00946         }
00947         break;
00948       case alveolar:
00949         if (manner == fricative_voiced || manner == fricative_voiceless) {
00950           glob.a5fDyn=true; glob.a6fDyn=true; glob.f5Dyn=true; glob.f6Dyn=true; glob.b5pDyn=true; glob.b6pDyn=true;
00951           for (uint i=0; i<frameNum; i++) {
00952             a5Vec[i] = 60; a6Vec[i] = 60; // for i&s
00953             if (glob.sr==16000) {
00954               a5fVec[i] = 60; a6fVec[i] = 60;
00955               f5Vec[i] = 5000; f6Vec[i] = 6500;
00956               b5pVec[i] = 500; b6pVec[i] = 1000;  
00957             }  else { // sr is 10 kHz
00958               f5Vec[i] = 3500; f6Vec[i] = 4500;
00959               b5pVec[i] = 500; b6pVec[i] = 500;  
00960               a5fVec[i] = 50; a6fVec[i] = 60;
00961             } 
00962           }
00963           if (voiced) {
00964             for (uint i=0; i<frameNum; i++) {
00965               a1Vec[i] = 40; a2Vec[i] = 35; a3Vec[i] = 40; // for i&s
00966             }
00967           }
00968         } else { // stop
00969           if (burstStart>frameNum || aspStart>frameNum) 
00970             error("phon::setArticulationTractFilter: wrong burst/asp-start",-5);
00971           for (uint i=burstStart; i<aspStart; i++) {
00972             // abVec[i] = 60;
00973                
00974             f1Vec[i] = 500;
00975             f2Vec[i] = 1500;
00976             f3Vec[i] = 2500;
00977             a1Vec[i] = 50;a2Vec[i] = 50;a3Vec[i] = 50;a4Vec[i] = 40;a5Vec[i] = 40;a6Vec[i] = 40; // for i&s
00978             a2fVec[i] = 50; glob.a2fDyn=true;
00979             a3fVec[i] = 50; glob.a3fDyn=true;
00980             a4fVec[i] = 40; glob.a4fDyn=true;
00981             a5fVec[i] = 40; glob.a5fDyn=true;
00982             a6fVec[i] = 40; glob.a6fDyn=true;
00983             b2pVec[i] = 110; glob.b2pDyn=true; 
00984             b3pVec[i] = 250; glob.b3pDyn=true; 
00985             b4pVec[i] = 300; glob.b4pDyn=true; 
00986             b5pVec[i] = 300; glob.b5pDyn=true; 
00987             b6pVec[i] = 300; glob.b6pDyn=true; 
00988                   }
00989         }
00990         break;
00991       case postalveolar:
00992         glob.f4Dyn=true; glob.f5Dyn=true; glob.f6Dyn=true;
00993         glob.a3fDyn=true;glob.a4fDyn=true;glob.a5fDyn=true;
00994         glob.b3pDyn=true; glob.b4pDyn=true; glob.b5pDyn=true; glob.b6pDyn=true;
00995         for (uint i=0; i<frameNum; i++) {
00996           a3Vec[i]=50; a4Vec[i]=50; a5Vec[i]=60; a6Vec[i]=60; // for i&s
00997           if (glob.sr==16000) {   
00998             b3pVec[i] = 200; b4pVec[i] = 200; b5pVec[i] = 600; b6pVec[i] = 600;
00999           } else {
01000             a3fVec[i] = 0; a4fVec[i] = 60; a5fVec[i] = 60; a6fVec[i] = 60;
01001             b4pVec[i] = 320; b5pVec[i] = 500; b6pVec[i] = 1500;
01002             f4Vec[i] = 2000; f5Vec[i] = 3500; f6Vec[i] = 4500;
01003           }
01004         }
01005         break;
01006       case palatal:
01007         for (uint i=0; i<frameNum; i++) {
01008           a4Vec[i] = 60;a5Vec[i] = 50;a6Vec[i] = 30; // for i&s
01009 
01010           a4fVec[i] = 60; glob.a4fDyn=true;
01011           a5fVec[i] = 50; glob.a5fDyn=true;
01012           a6fVec[i] = 30; glob.a6fDyn=true;
01013           //      f4Vec[i] = 3000;
01014           f5Vec[i] = 4000; glob.f5Dyn=true;
01015           f6Vec[i] = 5500; glob.f6Dyn=true;
01016           b4pVec[i] = 1000; glob.b4pDyn=true;
01017           b5pVec[i] = 1000; glob.b5pDyn=true;
01018           b6pVec[i] = 1000; glob.b6pDyn=true;
01019         }
01020         break;
01021       case velar:
01022         for (uint i=0; i<frameNum; i++) {
01023           a2Vec[i] = 50;// for i&s
01024           // ahVec[i] = ampVec[i];
01025           a2fVec[i] = 50; glob.a2fDyn=true;
01026           f2Vec[i] = 1200; glob.f2Dyn=true;
01027           b2pVec[i] = 200; glob.b2pDyn=true;
01028           a5fVec[i] = 40; glob.a5fDyn=true;
01029           f5Vec[i] = 4000; glob.f5Dyn=true;
01030           b5pVec[i] = 200; glob.b5pDyn=true;
01031         }
01032         break;
01033       case uvular:
01034         break;
01035       case glottal:
01036         for (uint i=0; i<frameNum; i++) {
01037           a1Vec[i] = 30;a2Vec[i] = 30;a3Vec[i] = 30; // for i&s
01038           /*
01039             a2fVec[i] = 30; glob.a2fDyn=true;
01040             a3fVec[i] = 30; glob.a3fDyn=true;
01041             b2pVec[i] = 200; glob.b2pDyn=true;
01042             b3pVec[i] = 200; glob.b3pDyn=true;
01043           */
01044         }
01045         break;
01046       default :
01047         error("phon::setArticulationTractFilter: wrong place of articulation\n", -3);
01048       } // switch place
01049     } // switch manner
01050   } // switch type
01051 }

void phon::setAspStart ( uint newAspStart )
 

Set/change start of Aspiration in framenumbers (stops only).

Parameters:
uint   newAspStart
00046                                        {
00047   aspStart = newAspStart;
00048 }

void phon::setB1Vec ( vector< uint > newVec,
globalsT & kg ) [inline]
 

set/change b1-vals, changes bool b1Dyn to true.

Parameters:
vector   <uint>& newVec
globalsT   &kg
00523                                                    {b1Vec = newVec; kg.b1Dyn=true;}

void phon::setB1pVec ( vector< uint > newVec,
globalsT & kg ) [inline]
 

set/change b1p-vals,.

Parameters:
vector   <uint>& newVec
globalsT   &kg
00600                                                     {b1pVec = newVec;}

void phon::setB2Vec ( vector< uint > newVec,
globalsT & kg ) [inline]
 

set/change b2-vals, changes bool b2Dyn to true.

Parameters:
vector   <uint>& newVec
globalsT   &kg
00530                                                    {b2Vec = newVec; kg.b2Dyn=true;}

void phon::setB2pVec ( vector< uint > newVec,
globalsT & kg ) [inline]
 

set/change b2p-vals, changes bool Dyn to true.

Parameters:
vector   <uint>& newVec
globalsT   &kg
00607                                                     {b2pVec = newVec; kg.b2pDyn=true;}

void phon::setB3Vec ( vector< uint > newVec,
globalsT & kg ) [inline]
 

set/change b3-vals, changes bool b3Dyn to true.

Parameters:
vector   <uint>& newVec
globalsT   &kg
00537                                                    {b3Vec = newVec; kg.b3Dyn=true;}

void phon::setB3pVec ( vector< uint > newVec,
globalsT & kg ) [inline]
 

set/change b3p-vals, changes bool Dyn to true.

Parameters:
vector   <uint>& newVec
globalsT   &kg
00614                                                     {b3pVec = newVec; kg.b3pDyn=true;}

void phon::setB4Vec ( vector< uint > newVec,
globalsT & kg ) [inline]
 

set/change b4-vals, changes bool b4Dyn to true.

Parameters:
vector   <uint>& newVec
globalsT   &kg
00544                                                    {b4Vec = newVec; kg.b4Dyn=true;}

void phon::setB4pVec ( vector< uint > newVec,
globalsT & kg ) [inline]
 

set/change b4p-vals, changes bool Dyn to true.

Parameters:
vector   <uint>& newVec
globalsT   &kg
00621                                                     {b4pVec = newVec; kg.b4pDyn=true;}

void phon::setB5Vec ( vector< uint > newVec,
globalsT & kg ) [inline]
 

set/change b5-vals, changes bool b5Dyn to true.

Parameters:
vector   <uint>& newVec
globalsT   &kg
00551                                                    {b5Vec = newVec; kg.b5Dyn=true;}

void phon::setB5pVec ( vector< uint > newVec,
globalsT & kg ) [inline]
 

set/change b5p-vals, changes bool Dyn to true.

Parameters:
vector   <uint>& newVec
globalsT   &kg
00628                                                     {b5pVec = newVec; kg.b5pDyn=true;}

void phon::setB6Vec ( vector< uint > newVec,
globalsT & kg ) [inline]
 

set/change b6-vals, changes bool b6Dyn to true.

Parameters:
vector   <uint>& newVec
globalsT   &kg
00558                                                    {b6Vec = newVec; kg.b6Dyn=true;}

void phon::setB6pVec ( vector< uint > newVec,
globalsT & kg ) [inline]
 

set/change b6p-vals, changes bool Dyn to true.

Parameters:
vector   <uint>& newVec
globalsT   &kg
00635                                                     {b6pVec = newVec; kg.b6pDyn=true;}

void phon::setBurstStart ( uint newBurstStart )
 

Set/change start of burst in framenumbers (stops only).

Parameters:
uint   newBurstStart
00043                                            {
00044   burstStart = newBurstStart;
00045 }

void phon::setF0TimeVec ( vector< uint >& newF0TimeVec )
 

set/change location of f0 vals.

(together with f0ValVec: intonation description)

See also:
setF0ValVec()
Parameters:
vector   <uint>& newF0TimeVec
00055                                                   {
00056   f0TimeVec = newF0TimeVec;
00057 }

void phon::setF0ValVec ( vector< uint >& newF0ValVec )
 

set/change f0 vals.

(together with f0TimeVec: intonation description) this is the original f0-vector that comes from the mbrola-file, it's filled up with values (each frame one f0-value) after reading and stored in f0Vec. defines mean-val of f0-vals

See also:
setF0TimeVec() , setF0Vec()
Parameters:
vector   <uint>& newF0ValVec
00051                                                 {
00052   f0ValVec = newF0ValVec;
00053   meanF0 = (uint) mean(f0ValVec);
00054 }

void phon::setF0Vec ( vector< uint >& newF0Vec,
globalsT & kg ) [inline]
 

set/change f0-vals.

defines mean-val of f0-vals changes bool f0Dyn in globals to true

Parameters:
vector   <uint>& newF0ValVec
globalsT   &kg
00461                                                       {
00462     f0Vec = newF0Vec;
00463     meanF0 = (uint) mean(f0Vec);
00464     kg.f0Dyn=true;
00465     if (kg.copyDB)
00466       dur = newF0Vec.size()*kg.ui;
00467   }

void phon::setF1Vec ( vector< uint > newVec,
globalsT & kg ) [inline]
 

set/change F1-vals, changes bool f1Dyn to true.

Parameters:
vector   <uint>& newVec
globalsT   &kg
00481                                                    {f1Vec = newVec; kg.f1Dyn=true;}

void phon::setF2Vec ( vector< uint > newVec,
globalsT & kg ) [inline]
 

set/change f2-vals, changes bool f2Dyn to true.

Parameters:
vector   <uint>& newVec
globalsT   &kg
00488                                                    {f2Vec = newVec; kg.f2Dyn=true;}

void phon::setF3Vec ( vector< uint > newVec,
globalsT & kg ) [inline]
 

set/change f3-vals, changes bool f3Dyn to true.

Parameters:
vector   <uint>& newVec
globalsT   &kg
00495                                                    {f3Vec = newVec; kg.f3Dyn=true;}

void phon::setF4Vec ( vector< uint > newVec,
globalsT & kg ) [inline]
 

set/change f4-vals, changes bool f4Dyn to true.

Parameters:
vector   <uint>& newVec
globalsT   &kg
00502                                                    {f4Vec = newVec; kg.f4Dyn=true;}

void phon::setF5Vec ( vector< uint > newVec,
globalsT & kg ) [inline]
 

set/change f5-vals, changes bool f5Dyn to true.

Parameters:
vector   <uint>& newVec
globalsT   &kg
00509                                                    {f5Vec = newVec; kg.f5Dyn=true;}

void phon::setF6Vec ( vector< uint > newVec,
globalsT & kg ) [inline]
 

set/change f6-vals, changes bool f6Dyn to true.

Parameters:
vector   <uint>& newVec
globalsT   &kg
00516                                                    {f6Vec = newVec; kg.f6Dyn=true;}

void phon::setName ( string newName )
 

Set/change name of phon, defines type, manner and place of articulation of phone.

Parameters:
string   newName, new name of phon
00026                                  {
00027   name = newName;
00028   initMannerPlaceType(name);
00029 }

void phon::setPhonFeatures ( PHON_FEATURES newPhonFeatures )
 

Set/change phone features.

Parameters:
string   newPhonFeatures
00032                                                         {
00033   phonFeatures = newPhonFeatures;
00034 }

void phon::setSoundSource ( globalsT & glob )
 

models voice-source parameters.

Parameters (val-vectors are filled) are set according to place and manner of articulation.

Some of the modeling depends on the actual klatt-synthesizer that's used. I did all the testing with the sensyn synthesizer, so there's still work to do for the Simmons&Iles synthesizer.

It's not easy to get data for this in the literature, I did lot's of experiments and I only cared about the parameters for phones that occured in my testsentence. However, you get some information from
author = {Klatt, D. H. },
title = {Software for a Cascade/Parallel Formant Synthesizer},
journal = JASA,
year = {1980},
volume = {67},
number = {3},
pages = {971-959},

or (in German and difficult to get)
author = {Simpson, A. },
booktitle = {Phonetische Datenbanken des Deutschen in der Empirischen Sprachforschung und der Phonologischen Theoriebildung},
title = {Wissensbasierte Gewinnung von Steuerparametern f"ur die Formantsynthese},
publisher = {Institut f"ur Phonetik und digitale Sprachverarbeitung der Universit"at Kiel},
year = {1998},
editor = {Kohler, K. J. },
series = {Arbeitsberichte 33},

or even
author = {Kent, R.D. and Read, C.},
title = {The Acoustic Analysis of Speech},
year = {1992},
publisher = {Singular Publishing Group, San Diego},

See also:
phrase::modelKlattParameters(globalsT &globals) , setArticulationTractFilter()
Todo:
model more phones, this is language-specific.

do some testing with the Simmons & Iles synthesizer.

Parameters:
globalsT   globals
00768                                         {
00769   // cout << name <<"\n";
00770   switch(type) {
00771   case vowel:
00772     // set amplitude of voicing 
00773     avVec = ampVec;  glob.avDyn = true; 
00774 
00775     // model noise in higher freqs
00776     glob.b4pDyn = true;
00777     glob.b5pDyn = true;
00778     glob.b6pDyn = true;
00779     glob.a4fDyn = true;
00780     glob.a5fDyn = true;
00781     glob.a6fDyn = true;
00782     for (uint i=0; i<frameNum; i++) {
00783       afVec[i] = ampVec[i]>22 ? ampVec[i]-22 : 0;
00784       if (afVec[i] > maxVal) cout <<"phon::setSoundSource: afVec[i] > maxVal\n";
00785       b4pVec[i] = 70;
00786       b5pVec[i] = 70;
00787       b6pVec[i] = 100;
00788       a4fVec[i]= 35;
00789       a5fVec[i]= 35;
00790       a6fVec[i]= 35;
00791     }
00792 
00793     // model phraryngeal interaction
00794     // following klattalk, chpt. 3, p. 27
00795     glob.df1Dyn = true;
00796     glob.db1Dyn=true;
00797     for (uint i=0; i<frameNum; i++) {
00798       df1Vec[i] = f1Vec[i]/10;
00799       db1Vec[i] = b1Vec[i]*6;
00800     }
00801 
00802     // model dependence of BW1 from F1 
00803     // following fujimura&lindqvist
00804     glob.b1Dyn=true;
00805     for (uint i=0; i<frameNum; i++) {
00806       b1Vec[i] = F12BW(f1Vec[i]);
00807     }    
00808     break;
00809   case consonant:
00810     switch (manner) {
00811     case liquide: 
00812       avVec = ampVec; glob.avDyn = true;
00813       break;
00814     case nasal: 
00815       avVec = ampVec; glob.avDyn = true;
00816       break;
00817     case fricative_voiced:
00818       if (name=="h") {
00819         // phonFeatures.breathy=true;
00820         glob.avDyn = true;
00821         glob.ahDyn = true;
00822         for (uint i=0; i<frameNum; i++) { 
00823           avVec[i] = ampVec[i]>18 ? ampVec[i]-18 : 0; 
00824           ahVec[i] = ampVec[i]>12 ? ampVec[i]-12 : 0;
00825         }
00826         glob.ahDyn = true;
00827       } else {
00828         afVec = ampVec; glob.afDyn = true;
00829         for (uint i=0; i<frameNum; i++) 
00830           avVec[i] = ampVec[i]-6; 
00831         glob.avDyn = true;
00832         avpVec = ampVec; // for i&s
00833       }
00834       break;
00835     case fricative_voiceless: 
00836       afVec = ampVec; glob.afDyn = true;
00837       break;
00838     case stop_voiced: 
00839       if (burstStart>frameNum || aspStart>frameNum) {
00840         error("phon::setSoundSource: wrong burst/asp-start at phon: "+name+"\n",-5);
00841       } 
00842       glob.afDyn = true;
00843       for (uint i=burstStart; i<aspStart; i++) {
00844         afVec[i] = ampVec[i]>6 ? ampVec[i]-6 : 0;
00845       }
00846       glob.ahDyn = true; glob.avDyn = true;
00847       for (uint i=aspStart; i<frameNum; i++) {
00848         ahVec[i] = ampVec[i];
00849         avVec[i] = ampVec[i]>6 ? ampVec[i]-6 : 0;       
00850         avpVec[i] = ampVec[i]; // for i&s 
00851       } 
00852       break;
00853     case stop_voiceless: 
00854       // cout <<name<<" l:"<<frameNum<<":, bS:"<<burstStart<<", aS:"<<aspStart<<"\n";
00855       if (burstStart>frameNum || aspStart>frameNum) 
00856         error("phon::setSoundSource: wrong burst/asp-start at phon: "+name+"\n",-5);
00857       for (uint i=burstStart; i<aspStart; i++) {
00858         afVec[i] = ampVec[i]; glob.afDyn = true; 
00859       }
00860       for (uint i=aspStart; i<frameNum; i++) {
00861         ahVec[i] = ampVec[i]; 
00862       }  
00863       break;
00864     case silence:
00865       for (uint i=0; i<frameNum; i++) {
00866         f0Vec[i] = 0;
00867         avVec[i] = 0;
00868       }
00869       break;
00870     default :
00871       error("phon::setSoundSource: undefined phon-type/n", -3);
00872     }
00873   }
00874 }

void phon::setSteadyEnd ( uint newSteadyEnd )
 

Set/change end of steady-state in framenumbers.

Parameters:
uint   newSteadyEnd
00040                                          {
00041   steadyEnd = newSteadyEnd;
00042 }

void phon::setSteadyStart ( uint newSteadyStart )
 

Set/change start of steady-state in framenumbers.

Parameters:
uint   newSteadyStart
00037                                              {
00038   steadyStart = newSteadyStart;
00039 }

void phon::smootheF0 ( uint winsize )
 

smoothing function: all f0Vals get centerFiltered around winsize.

See also:
phrase::smootheF0()
Parameters:
uint   winsize
00614                                  {
00615   smoothe(f0Vec, winsize);
00616 }


Member Data Documentation

vector< uint > phon::a1Vec [private]
 

parallel formant-parameters, amplitudes of formants.

vector< uint > phon::a1vVec [private]
 

amplitude of 1. formant (parallel branch, voicing), not used.

vector< uint > phon::a2Vec [private]
 

parallel formant-parameters, amplitudes of formants.

vector< uint > phon::a2fVec [private]
 

amplitude of 2. formant (parallel branch).

vector< uint > phon::a2vVec [private]
 

amplitude of 2. formant (parallel branch, voicing), not used.

vector< uint > phon::a3Vec [private]
 

parallel formant-parameters, amplitudes of formants.

vector< uint > phon::a3fVec [private]
 

amplitude of 3. formant (parallel branch).

vector< uint > phon::a3vVec [private]
 

amplitude of 3. formant (parallel branch, voicing), not used.

vector< uint > phon::a4Vec [private]
 

parallel formant-parameters, amplitudes of formants.

vector< uint > phon::a4fVec [private]
 

amplitude of 4. formant (parallel branch).

vector< uint > phon::a4vVec [private]
 

amplitude of 4. formant (parallel branch, voicing), not used.

vector< uint > phon::a5Vec [private]
 

parallel formant-parameters, amplitudes of formants.

vector< uint > phon::a5fVec [private]
 

amplitude of 5. formant (parallel branch).

vector< uint > phon::a6Vec [private]
 

parallel formant-parameters, amplitudes of formants.

vector< uint > phon::a6fVec [private]
 

amplitude of 6. formant (parallel branch).

vector< uint > phon::abVec [private]
 

amp. of bypass frication, par. branch(0-80).

vector< uint > phon::afVec [private]
 

amp. of frication, par. branch(0-80).

vector< uint > phon::ahVec [private]
 

amp. of aspiration (0-70).

vector< uint > phon::ampVec [private]
 

each frame one amplitude-val in dB, normalized to 60 dB.

vector< uint > phon::anvVec [private]
 

nasal parameters amp. of nasal formant, parallel branch.

uint phon::aspStart [private]
 

stops: time of start of aspiration (in frameNums).

vector< uint > phon::aturbVec [private]
 

amp. of turbulence(0-80).

vector< uint > phon::atvVec [private]
 

amplitude of tracheal formant (parallel branch, voicing), not used.

vector< uint > phon::avVec [private]
 

voice-source parameters voiced amplitude of cascade branch (0-70).

vector< uint > phon::avpVec [private]
 

amp. of voicing, par. branch(0-70).

vector< uint > phon::b1Vec [private]
 

cascade formant-parameters.

vector< uint > phon::b1pVec [private]
 

parallel formant-parameters, bandwidths for parallel branch.

vector< uint > phon::b2Vec [private]
 

cascade formant-parameters.

vector< uint > phon::b2pVec [private]
 

parallel formant-parameters, bandwidths for parallel branch.

vector< uint > phon::b3Vec [private]
 

cascade formant-parameters.

vector< uint > phon::b3pVec [private]
 

parallel formant-parameters, bandwidths for parallel branch.

vector< uint > phon::b4Vec [private]
 

cascade formant-parameters.

vector< uint > phon::b4pVec [private]
 

parallel formant-parameters, bandwidths for parallel branch.

vector< uint > phon::b5Vec [private]
 

cascade formant-parameters.

vector< uint > phon::b5pVec [private]
 

parallel formant-parameters, bandwidths for parallel branch.

vector< uint > phon::b6Vec [private]
 

cascade formant-parameters.

vector< uint > phon::b6pVec [private]
 

parallel formant-parameters, bandwidths for parallel branch.

vector< uint > phon::bnpVec [private]
 

bw of nasal pole.

vector< uint > phon::bnzVec [private]
 

bw of nasal zero.

vector< uint > phon::btpVec [private]
 

bw of tracheal pole.

vector< uint > phon::btzVec [private]
 

bw of tracheal zero.

uint phon::burstStart [private]
 

stops: time of start of burst (in frameNums).

vector< uint > phon::db1Vec [private]
 

delta b1, for pharyngeal interactions.

vector< uint > phon::df1Vec [private]
 

delta f1, for pharyngeal interactions.

vector< uint > phon::diVec [private]
 

diplophonic double pulsing.

bool phon::diphtong [private]
 

true if phone is diphtong.

uint phon::dur [private]
 

duration of phon in msec.

vector< uint > phon::f0TimeVec [private]
 

intonation description, comes from mbrola-format.

vector< uint > phon::f0ValVec [private]
 

intonation description.

vector< uint > phon::f0Vec [private]
 

each frame one f0-val.

vector< uint > phon::f1Vec [private]
 

cascade formant-parameters.

vector< uint > phon::f2Vec [private]
 

cascade formant-parameters.

vector< uint > phon::f3Vec [private]
 

cascade formant-parameters.

vector< uint > phon::f4Vec [private]
 

cascade formant-parameters.

vector< uint > phon::f5Vec [private]
 

cascade formant-parameters.

vector< uint > phon::f6Vec [private]
 

cascade formant-parameters.

vector< uint > phon::flVec [private]
 

spectral skew(0-40).

vector< uint > phon::fnpVec [private]
 

freq of nasal pole.

vector< uint > phon::fnzVec [private]
 

freq of nasal zero.

FORMANT_QUADRANT phon::formantQuadrant [private]
 

the quadrant for vowels in the vowel-chart. currently not used.

uint phon::frameNum [private]
 

number of frames, should be dur/framesize.

vector< uint > phon::ftpVec [private]
 

freq of tracheal pole.

vector< uint > phon::ftzVec [private]
 

freq of tracheal zero.

vector< uint > phon::gainVec [private]
 

overall gain(0-80).

PHON_MANNER phon::manner [private]
 

long_vowel, short_vowel, nasal, stop, ...

uint phon::meanF0 [private]
 

The mean f0-Value.

string phon::name [private]
 

The name of the phone in Sampa. Possible phone-names are language dependend.

vector< uint > phon::oqVec [private]
 

open perc in glottal period.

uint phon::origValNum [private]
 

the originale frameNumber from diphone-inventory.

PHON_FEATURES phon::phonFeatures [private]
 

spread, nasalized, laryngealized, ...

PHON_PLACE phon::place [private]
 

bilabial, labial, labiodental, ...

vector< uint > phon::sqVec [private]
 

speed quotient, glottal source parameter.

uint phon::steadyEnd [private]
 

time of end of steady state (in frameNums).

uint phon::steadyStart [private]
 

time of start of steady state (in frameNums).

vector< uint > phon::tlVec [private]
 

spectral tl in dB(0-24).

PHON_TYPE phon::type [private]
 

vowel/consonant.

bool phon::voiced [private]
 

true if phone is normally voiced.


The documentation for this class was generated from the following files: generated by doxygen