int ndim = 39;
float eps = 0.2;
string SOURCEKIND = USER;

# "Silence" is defined as a cough, a breath, a lip smack, or quiet.
# This chunk is at least 50ms long (the "+" signs mean that the states
# loop back to themselves, and can therefore be as long as desired).
# Of course, there is nothing that enforces that the states labelled "cough"
# are actually coughs.   It's really just four different kinds of silence.
macro s1 = 3* smack:+:v=quiet3:m=$s$i | 3* quiet:+:v=vquiet3:m=mquiet ;
macro s2 = 4* breath:+:v=quiet4:m=$s$i | 4* quiet:+:v=vquiet4:m=mquiet ;
macro silence = s1 s2 s1 ;
# All the "v=", "m=", and "s=" stuff involves sharing of variances,
# means, or entire state definitions.     For instance, all the "cough"
# states share a comon variance.    All the "cough0" states share a
# common mean, so they will be the same whether the "silence" macro
# is an initial silence or a silence within an IWS.

# So, a "S" phoneme can include multiple coughs, breaths, quiet, etc.
# We require two silences so that the total duration is >100ms,
# which is what differentiates an audible pause from a stop.
phone zsil = silence:+ ;
phones zshortsil = s1 | s2;

macro sonorant = 4* semiclosure:+:v=C4 ;
macro stop = 4* stop_sequence:+:v=C4 ;
macro voiced_fricative = 3* v_frication:+:v=C ;
macro unvoiced_fricative = 3* unv_frication:+:v=C ;
macro c_short = 2* unv_frication:+:v=C2 ;
phone zqc = stop | voiced_fricative | unvoiced_fricative | sonorant | c_short ;

macro liquid = 3* liq_state1:+:v=M ;
macro approximant = 4* liq_state2:+:v=M4 ;
macro m3 = 3* liq_state3:+:v=M ;
macro m4 = 4* liq_state4:+:v=M4 ;
macro m_short = 2* liq_state4:+:v=M2 ;
phone zqm = liquid | approximant | m3 | m4 | m_short ;


# Here we have 5 vowels, all sharing the same variance, but each with
# their own mean acoustic properties. 
macro v = 2* v1:+:v=V2:m=$s$i | 3* v2:+:v=V:m=$s$i | 3* v3:+:v=V:m=$s$i | 3* v4:+:v=V:m=$s$i |
		3* v5:+:v=V:m=$s$i | 3* v6:+:v=V:m=$s$i ;
macro thong1 = 2* v1:+:v=V:m=$s$i | 2* v2:+:v=V:m=$s$i | 2* v3:+:v=V:m=$s$i | 2* v4:+:v=V:m=$s$i |
		2* v5:+:v=V:m=$s$i | 2* v6:+:v=V:m=$s$i ;
macro thong2 = 2* v1:+:v=V:m=$s$I | 2* v2:+:v=V:m=$s$I | 2* v3:+:v=V:m=$s$I | 2* v4:+:v=V:m=$s$I |
		2* v5:+:v=V:m=$s$I | 2* v6:+:v=V:m=$s$I ;
phone zqv = v | thong1 thong2 ;

macro junk = junks:+ ;
phones zjunk = junk;
