| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473 | //*******************************************************************
// TONES
//*******************************************************************
//*******************************************************************
// REFERENCE MATERIALS
//*******************************************************************
// Collaborative Documentation and Revitalization of Cherokee Tone
// https://scholarspace.manoa.hawaii.edu/bitstream/handle/10125/24630/herrick.pdf
// Tones fall within a range of 80–140 H (pg 21, footnote)
// the mid tone (2) starts at 104 Hz (P1) and falls approximately 2 Hz at of the next four points ending at 96 Hz at P5.
//
// Building Tone Resources for Second Language Learners from Phonetic Documentation
// https://scholarspace.manoa.hawaii.edu/bitstream/10125/24737/hirata-edds_herrick.pdf
//
// Pitch contours taken from Praat chart, pg 295 
//
// (¹) low fall: 106, 102, 97, 92, 88
// (²) low/mid: 104, 100, 98, 97, 96
// (³) high: 108, 109, 110, 111, 112
// (⁴) super high: 109, 113, 118, 122, 127
// (²³) rising: 97, 98, 101, 104, 109
// (³²) falling: 122, 120, 115, 106, 97
// A REFERENCE GRAMMAR OF OKLAHOMA CHEROKEE (2008)
// Short vowels preceding /h/ are devoiced, pg 45 (how to do this espeak-ng?)
// Word final vowels are nasalized
// Vowels are nasalized after a nasal consonant
// Vowels are either long or short; a long vowel takes
// approximately twice as long to pronounce as its
// short counterpart., pg 46
//int pitch1 = 0;
//int pitch2 = 0;
//int pitch_env = 0;
//int amp_env = 0;
//IF (pitch1 >= pitch2) the pitch values get swapped (???)
phoneme 1 // low fall (¹), long vowels only
  stress
  ipa ˨˩
	Tone(28, 7, envelope/chr_fall21, NULL) //need a pitch contour of 106-88 for a
endphoneme
phoneme 2 // low (²)
  stress
  ipa ˨
  Tone(27, 16, envelope/chr_level2, NULL) //need a pitch contour of 104-96 for a
endphoneme
phoneme 23 // rising (²³)
  stress
  ipa ˨˧
  Tone(16, 30, envelope/chr_rise23, NULL) //need a pitch contour of 97-109 for a
endphoneme
phoneme 32 // falling (³²)
  stress
  ipa ˧˨
  Tone(45, 15, envelope/chr_fall32, NULL) //need a pitch contour of 122-97 for a
endphoneme
phoneme 3 // high (³) 
  stress
  ipa ˧
  //Tone(109, 116, envelope/p_rise, NULL) //need a pitch contour of 108-112 for a
  Tone(29, 35, envelope/chr_level3, NULL) //need a pitch contour of 108-112 for a
endphoneme
phoneme 4 // extra high rise (⁴)
  stress
  ipa ˧˦
  Tone(29, 52, envelope/chr_rise4, NULL) //need a pitch contour of 109-127 for a
endphoneme
phoneme 43 // extra high fall (⁴³) - end of word tone
  stress
  ipa ˦˧
  //need a pitch contour of 122-75 for a~
  Tone(44, 0, envelope/chr_fall43, NULL)
endphoneme
//from phonemes
phoneme : //  lengthen previous vowel by "length"
  virtual
  length 300
endphoneme
phoneme 0
  vwl  starttype #o   endtype #o
  length 300
  FMT(vowel/0_3)
endphoneme
phoneme 0`
  vwl  starttype #o   endtype #o
  length 100
  FMT(vowel/0_3)
endphoneme
phoneme 0~
  vwl  starttype #o   endtype #o
  length 300
  FMT(vnasal/aa_n4)
endphoneme
phoneme 0~`
  vwl  starttype #o   endtype #o
  length 100
  FMT(vnasal/aa_n4)
endphoneme
phoneme e
  vwl starttype #e endtype #e
  length 300
  FMT(vowel/e_mid)
endphoneme
phoneme e`
  vwl starttype #e endtype #e
  length 100
  FMT(vowel/e_mid)
endphoneme
phoneme e~
  vwl starttype #e endtype #e
  length 300
  FMT(vnasal/ee_n2)
endphoneme
phoneme e~`
  vwl starttype #e endtype #e
  length 100
  FMT(vnasal/ee_n2)
endphoneme
phoneme i
  vwl starttype #i endtype #i
  length 300
  //IfNextVowelAppend(;)
  FMT(vowel/i)
endphoneme
phoneme i`
  vwl starttype #i endtype #i
  length 100
  //IfNextVowelAppend(;)
  FMT(vowel/i)
endphoneme
phoneme i~
  vwl starttype #i endtype #i
  length 300
  //IfNextVowelAppend(;)
  FMT(vnasal/i_n)
endphoneme
phoneme i~`
  vwl starttype #i endtype #i
  length 100
  //IfNextVowelAppend(;)
  FMT(vnasal/i_n)
endphoneme
// o, ọ
phoneme o
  vwl starttype #o  endtype #o
  length 300
  FMT(vowel/o)
endphoneme
phoneme o`
  vwl starttype #o  endtype #o
  length 100
  FMT(vowel/o)
endphoneme
// o, ọ, final word vowel
phoneme o~
  vwl starttype #o  endtype #o
  length 300
  FMT(vnasal/o_n)
endphoneme
phoneme o~`
  vwl starttype #o  endtype #o
  
  length 100
  FMT(vnasal/o_n)
endphoneme
// u, ụ
//from ph_base2
phoneme u
  vwl starttype #u  endtype #u
  length 300
  FMT(vowel/u_bck)
endphoneme
phoneme u`
  vwl starttype #u  endtype #u
  length 100
  FMT(vowel/u_bck)
endphoneme
// u, ụ, final word vowel
phoneme u~
  vwl starttype #u  endtype #u
  length 300
  FMT(vnasal/u_n)
endphoneme
phoneme u~`
  vwl starttype #u  endtype #u
  length 100
  FMT(vnasal/u_n)
endphoneme
//ṿ, v
phoneme V~
	vwl lng starttype #@ endtype #@
//  vwl lng starttype #@ endtype #@
//  length 300
//  FMT(vnasal/V_n, 100)
	ChangePhoneme(&~)
endphoneme
phoneme &~
  vwl  starttype #@ endtype #@
  ipa ɐU+0303
  length 180
  IF thisPh(isFinalVowel) THEN
    FMT(vnasal/a#_n2)
  ELSE
    FMT(vnasal/a#_n)
  ENDIF
endphoneme
phoneme V~`
  vwl lng starttype #@ endtype #@
  length 100
  FMT(vnasal/V_n)
endphoneme
phoneme h
  vls glt apr
  ipa h
  
  IF prevPhW(isVowel) AND nextPhW(isNotVowel) THEN
  	length 25
  	lengthmod 1
  ENDIF
   
  IF nextPhW(#@) THEN
    length 50
    WAV(h/h@, 70)
  ELIF nextPhW(#a) THEN
    WAV(h/ha)
  ELIF nextPhW(#e) THEN
    length 60
    WAV(h/he, 75)
  ELIF nextPhW(#i) THEN
    length 75
    WAV(h/hi)
  ELIF nextPhW(#o) THEN
    length 75
    WAV(h/ho)
  ELIF nextPhW(#u) THEN
  	length 80
    WAV(h/hu)
  ELSE
    length 60
    WAV(h/h_)  // no vowel following
  ENDIF
endphoneme
phoneme h`
  vls glt apr
  ipa h
  length 10
  WAV(h/h_)  // no vowel following
endphoneme
phoneme s
  vls alv frc sib
  voicingswitch z
  lengthmod 3
  Vowelin  f1=0  f2=1700 -300 300  f3=-100 80
  Vowelout f1=0  f2=1700 -300 250  f3=-100 80  rms=20
  IF nextPh(isPause) THEN
    WAV(ufric/s_)
  ELIF nextPh(p) OR nextPh(t) OR nextPh(k) THEN
    WAV(ufric/s!)
  ENDIF
  WAV(ufric/s)
endphoneme
phoneme g
  vcd vel stp
  voicingswitch k
  lengthmod 5
  Vowelin f1=2  f2=2300 200 300  f3=-300 80
  Vowelout f1=2  f2=2300 250 300  f3=-300 80 brk
 // IF PreVoicing THEN
    //FMT(g/xg)
  //ENDIF
  IF nextPh(isPause2) THEN
  	//addWav(ustop/k_)
    FMT(g/g_) addWav(ustop/k_)
    //addWav(x/g_)
  ELSE
  	//addWav(ustop/k_asp)
  	FMT(g/g) addWav(ustop/k_asp)
  	//addWav(x/g)
  ENDIF
  
endphoneme
phoneme t
  vls alv stp
  voicingswitch d
  lengthmod 2
  Vowelin f1=0  f2=1700 -300 300  f3=-100 80
  Vowelout f1=0 f2=1700 -300 250  f3=-100 80  rms=20
  IF nextPh(isPause2) THEN
    WAV(ustop/t_)
  ELIF nextPh(r) OR nextPh(R) OR nextPh(R2) THEN
    WAV(ustop/tr)
  ELIF nextPh(@-) THEN
    WAV(ustop/t_dnt, 50)
  ENDIF
  WAV(ustop/t, 90)
endphoneme
phoneme d
  vcd alv stp
  voicingswitch t
  lengthmod 5
  Vowelin f1=1  f2=1700 -300 300  f3=-100 80
  Vowelout f1=2 f2=1700 -300 300  f3=-100 80 brk
  IF PreVoicing THEN
    FMT(d/xd)
  ENDIF
  IF nextPh(isPause2) THEN
    FMT(d/d_)  addWav(x/d_)
//  ELIF nextPh(r) THEN
//    FMT(d/dr) addWav(x/d)
  ENDIF
  FMT(d/d) addWav(x/d)
endphoneme
phoneme dZ // **j**udge
  ipa dZ
  vcd pla afr sib
  voicingswitch tS
  lengthmod 5
  Vowelin f1=2  f2=2300 200 400  f3=100 80
  Vowelout f1=2  f2=2300 250 300  f3=100 80 brk
  IF PreVoicing THEN
    FMT(dzh/xdz_pzd, 250)
  ENDIF
  IF nextPh(isPause2) THEN
    FMT(dzh/dz_pzd_, 250) addWav(x/dz_pzd_, 250)
  ENDIF
  FMT(dzh/dz_pzd, 250) addWav(x/dz_pzd, 250)
endphoneme
phoneme n
  vcd alv nas
  Vowelout f1=2 f2=1500 -300 250  f3=-100 80  rms=20 brk
  Vowelin rate
  lengthmod 4
  
  IF KlattSynth THEN
    Vowelin f1=0 f2=1500 -200 200 f3=0 80
    FMT(klatt/n)
  ENDIF
  NextVowelStarts
    VowelStart(n/n@)
    VowelStart(n/na)
    VowelStart(n/ne)
    VowelStart(n/ni)
    VowelStart(n/no)
    VowelStart(n/nu)
  EndSwitch
  IF prevPh(isNotVowel) AND nextPhW(isLiquid) THEN
    FMT(n/nj)
  ELIF prevPh(isPause) OR prevPh(n) THEN
    FMT(n/_n)
  ELIF nextPh(isNotVowel) THEN
    FMT(n/n_)
  ENDIF
  
endphoneme
phoneme m
  vcd blb nas
  Vowelout f1=2  f2=1000 -500 -350  f3=-200 80 brk
  lengthmod 4
  IF KlattSynth THEN
    Vowelin  f1=0  f2=1000 -50 -200  f3=-200 80
    IF nextPh(isPause2) THEN
      FMT(klatt/m_)
    ENDIF
    FMT(klatt/m)
  ENDIF
  NextVowelStarts
    VowelStart(m/m@)
    VowelStart(m/ma)
    VowelStart(m/me)
    VowelStart(m/mi)
    VowelStart(m/mo)
    VowelStart(m/mu)
  EndSwitch
  IF prevPh(isNotVowel) AND nextPhW(isLiquid) THEN
    FMT(m/mj)
  ELIF prevPh(isPause) THEN
    FMT(m/_m)
  ELIF nextPh(isNotVowel) THEN
    FMT(m/m_)
  ENDIF
endphoneme
phoneme w
  liquid
  lengthmod 7
  starttype #u
  
  IF nextPh(isVowel) THEN
  
    NextVowelStarts
      VowelStart(w/w2)
      VowelStart(w/wa)
      VowelStart(w/we)
      VowelStart(w/wi)
      VowelStart(w/wo)
      VowelStart(w/wu)
    EndSwitch
    VowelEnding(w/xw, -30)
    IF prevPhW(isNasal) THEN
      FMT(w/w2)
    ELSEIF prevPhW(h) THEN
      // none,  [hw]
    ELSE
    	FMT(w/w2)
      //FMT(w/_w)
    ENDIF
  ELSE
    // no vowel follows
    Vowelout len=50
    IF prevPh(#i) THEN
      FMT(w/iw_)
    ENDIF
    FMT(w/w_)
  ENDIF
endphoneme
 |