eSpeak NG is an open source speech synthesizer that supports more than hundred languages and accents.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

ph_cherokee 9.0KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473
  1. //*******************************************************************
  2. // TONES
  3. //*******************************************************************
  4. //*******************************************************************
  5. // REFERENCE MATERIALS
  6. //*******************************************************************
  7. // Collaborative Documentation and Revitalization of Cherokee Tone
  8. // https://scholarspace.manoa.hawaii.edu/bitstream/handle/10125/24630/herrick.pdf
  9. // Tones fall within a range of 80–140 H (pg 21, footnote)
  10. // 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.
  11. //
  12. // Building Tone Resources for Second Language Learners from Phonetic Documentation
  13. // https://scholarspace.manoa.hawaii.edu/bitstream/10125/24737/hirata-edds_herrick.pdf
  14. //
  15. // Pitch contours taken from Praat chart, pg 295
  16. //
  17. // (¹) low fall: 106, 102, 97, 92, 88
  18. // (²) low/mid: 104, 100, 98, 97, 96
  19. // (³) high: 108, 109, 110, 111, 112
  20. // (⁴) super high: 109, 113, 118, 122, 127
  21. // (²³) rising: 97, 98, 101, 104, 109
  22. // (³²) falling: 122, 120, 115, 106, 97
  23. // A REFERENCE GRAMMAR OF OKLAHOMA CHEROKEE (2008)
  24. // Short vowels preceding /h/ are devoiced, pg 45 (how to do this espeak-ng?)
  25. // Word final vowels are nasalized
  26. // Vowels are nasalized after a nasal consonant
  27. // Vowels are either long or short; a long vowel takes
  28. // approximately twice as long to pronounce as its
  29. // short counterpart., pg 46
  30. //int pitch1 = 0;
  31. //int pitch2 = 0;
  32. //int pitch_env = 0;
  33. //int amp_env = 0;
  34. //IF (pitch1 >= pitch2) the pitch values get swapped (???)
  35. phoneme 1 // low fall (¹), long vowels only
  36. stress
  37. ipa ˨˩
  38. Tone(28, 7, envelope/chr_fall21, NULL) //need a pitch contour of 106-88 for a
  39. endphoneme
  40. phoneme 2 // low (²)
  41. stress
  42. ipa ˨
  43. Tone(27, 16, envelope/chr_level2, NULL) //need a pitch contour of 104-96 for a
  44. endphoneme
  45. phoneme 23 // rising (²³)
  46. stress
  47. ipa ˨˧
  48. Tone(16, 30, envelope/chr_rise23, NULL) //need a pitch contour of 97-109 for a
  49. endphoneme
  50. phoneme 32 // falling (³²)
  51. stress
  52. ipa ˧˨
  53. Tone(45, 15, envelope/chr_fall32, NULL) //need a pitch contour of 122-97 for a
  54. endphoneme
  55. phoneme 3 // high (³)
  56. stress
  57. ipa ˧
  58. //Tone(109, 116, envelope/p_rise, NULL) //need a pitch contour of 108-112 for a
  59. Tone(29, 35, envelope/chr_level3, NULL) //need a pitch contour of 108-112 for a
  60. endphoneme
  61. phoneme 4 // extra high rise (⁴)
  62. stress
  63. ipa ˧˦
  64. Tone(29, 52, envelope/chr_rise4, NULL) //need a pitch contour of 109-127 for a
  65. endphoneme
  66. phoneme 43 // extra high fall (⁴³) - end of word tone
  67. stress
  68. ipa ˦˧
  69. //need a pitch contour of 122-75 for a~
  70. Tone(44, 0, envelope/chr_fall43, NULL)
  71. endphoneme
  72. //from phonemes
  73. phoneme : // lengthen previous vowel by "length"
  74. virtual
  75. length 300
  76. endphoneme
  77. phoneme 0
  78. vwl starttype #o endtype #o
  79. length 300
  80. FMT(vowel/0_3)
  81. endphoneme
  82. phoneme 0`
  83. vwl starttype #o endtype #o
  84. length 100
  85. FMT(vowel/0_3)
  86. endphoneme
  87. phoneme 0~
  88. vwl starttype #o endtype #o
  89. length 300
  90. FMT(vnasal/aa_n4)
  91. endphoneme
  92. phoneme 0~`
  93. vwl starttype #o endtype #o
  94. length 100
  95. FMT(vnasal/aa_n4)
  96. endphoneme
  97. phoneme e
  98. vwl starttype #e endtype #e
  99. length 300
  100. FMT(vowel/e_mid)
  101. endphoneme
  102. phoneme e`
  103. vwl starttype #e endtype #e
  104. length 100
  105. FMT(vowel/e_mid)
  106. endphoneme
  107. phoneme e~
  108. vwl starttype #e endtype #e
  109. length 300
  110. FMT(vnasal/ee_n2)
  111. endphoneme
  112. phoneme e~`
  113. vwl starttype #e endtype #e
  114. length 100
  115. FMT(vnasal/ee_n2)
  116. endphoneme
  117. phoneme i
  118. vwl starttype #i endtype #i
  119. length 300
  120. //IfNextVowelAppend(;)
  121. FMT(vowel/i)
  122. endphoneme
  123. phoneme i`
  124. vwl starttype #i endtype #i
  125. length 100
  126. //IfNextVowelAppend(;)
  127. FMT(vowel/i)
  128. endphoneme
  129. phoneme i~
  130. vwl starttype #i endtype #i
  131. length 300
  132. //IfNextVowelAppend(;)
  133. FMT(vnasal/i_n)
  134. endphoneme
  135. phoneme i~`
  136. vwl starttype #i endtype #i
  137. length 100
  138. //IfNextVowelAppend(;)
  139. FMT(vnasal/i_n)
  140. endphoneme
  141. // o, ọ
  142. phoneme o
  143. vwl starttype #o endtype #o
  144. length 300
  145. FMT(vowel/o)
  146. endphoneme
  147. phoneme o`
  148. vwl starttype #o endtype #o
  149. length 100
  150. FMT(vowel/o)
  151. endphoneme
  152. // o, ọ, final word vowel
  153. phoneme o~
  154. vwl starttype #o endtype #o
  155. length 300
  156. FMT(vnasal/o_n)
  157. endphoneme
  158. phoneme o~`
  159. vwl starttype #o endtype #o
  160. length 100
  161. FMT(vnasal/o_n)
  162. endphoneme
  163. // u, ụ
  164. //from ph_base2
  165. phoneme u
  166. vwl starttype #u endtype #u
  167. length 300
  168. FMT(vowel/u_bck)
  169. endphoneme
  170. phoneme u`
  171. vwl starttype #u endtype #u
  172. length 100
  173. FMT(vowel/u_bck)
  174. endphoneme
  175. // u, ụ, final word vowel
  176. phoneme u~
  177. vwl starttype #u endtype #u
  178. length 300
  179. FMT(vnasal/u_n)
  180. endphoneme
  181. phoneme u~`
  182. vwl starttype #u endtype #u
  183. length 100
  184. FMT(vnasal/u_n)
  185. endphoneme
  186. //ṿ, v
  187. phoneme V~
  188. vwl lng starttype #@ endtype #@
  189. // vwl lng starttype #@ endtype #@
  190. // length 300
  191. // FMT(vnasal/V_n, 100)
  192. ChangePhoneme(&~)
  193. endphoneme
  194. phoneme &~
  195. vwl starttype #@ endtype #@
  196. ipa ɐU+0303
  197. length 180
  198. IF thisPh(isFinalVowel) THEN
  199. FMT(vnasal/a#_n2)
  200. ELSE
  201. FMT(vnasal/a#_n)
  202. ENDIF
  203. endphoneme
  204. phoneme V~`
  205. vwl lng starttype #@ endtype #@
  206. length 100
  207. FMT(vnasal/V_n)
  208. endphoneme
  209. phoneme h
  210. vls glt apr
  211. ipa h
  212. IF prevPhW(isVowel) AND nextPhW(isNotVowel) THEN
  213. length 25
  214. lengthmod 1
  215. ENDIF
  216. IF nextPhW(#@) THEN
  217. length 50
  218. WAV(h/h@, 70)
  219. ELIF nextPhW(#a) THEN
  220. WAV(h/ha)
  221. ELIF nextPhW(#e) THEN
  222. length 60
  223. WAV(h/he, 75)
  224. ELIF nextPhW(#i) THEN
  225. length 75
  226. WAV(h/hi)
  227. ELIF nextPhW(#o) THEN
  228. length 75
  229. WAV(h/ho)
  230. ELIF nextPhW(#u) THEN
  231. length 80
  232. WAV(h/hu)
  233. ELSE
  234. length 60
  235. WAV(h/h_) // no vowel following
  236. ENDIF
  237. endphoneme
  238. phoneme h`
  239. vls glt apr
  240. ipa h
  241. length 10
  242. WAV(h/h_) // no vowel following
  243. endphoneme
  244. phoneme s
  245. vls alv frc sib
  246. voicingswitch z
  247. lengthmod 3
  248. Vowelin f1=0 f2=1700 -300 300 f3=-100 80
  249. Vowelout f1=0 f2=1700 -300 250 f3=-100 80 rms=20
  250. IF nextPh(isPause) THEN
  251. WAV(ufric/s_)
  252. ELIF nextPh(p) OR nextPh(t) OR nextPh(k) THEN
  253. WAV(ufric/s!)
  254. ENDIF
  255. WAV(ufric/s)
  256. endphoneme
  257. phoneme g
  258. vcd vel stp
  259. voicingswitch k
  260. lengthmod 5
  261. Vowelin f1=2 f2=2300 200 300 f3=-300 80
  262. Vowelout f1=2 f2=2300 250 300 f3=-300 80 brk
  263. // IF PreVoicing THEN
  264. //FMT(g/xg)
  265. //ENDIF
  266. IF nextPh(isPause2) THEN
  267. //addWav(ustop/k_)
  268. FMT(g/g_) addWav(ustop/k_)
  269. //addWav(x/g_)
  270. ELSE
  271. //addWav(ustop/k_asp)
  272. FMT(g/g) addWav(ustop/k_asp)
  273. //addWav(x/g)
  274. ENDIF
  275. endphoneme
  276. phoneme t
  277. vls alv stp
  278. voicingswitch d
  279. lengthmod 2
  280. Vowelin f1=0 f2=1700 -300 300 f3=-100 80
  281. Vowelout f1=0 f2=1700 -300 250 f3=-100 80 rms=20
  282. IF nextPh(isPause2) THEN
  283. WAV(ustop/t_)
  284. ELIF nextPh(r) OR nextPh(R) OR nextPh(R2) THEN
  285. WAV(ustop/tr)
  286. ELIF nextPh(@-) THEN
  287. WAV(ustop/t_dnt, 50)
  288. ENDIF
  289. WAV(ustop/t, 90)
  290. endphoneme
  291. phoneme d
  292. vcd alv stp
  293. voicingswitch t
  294. lengthmod 5
  295. Vowelin f1=1 f2=1700 -300 300 f3=-100 80
  296. Vowelout f1=2 f2=1700 -300 300 f3=-100 80 brk
  297. IF PreVoicing THEN
  298. FMT(d/xd)
  299. ENDIF
  300. IF nextPh(isPause2) THEN
  301. FMT(d/d_) addWav(x/d_)
  302. // ELIF nextPh(r) THEN
  303. // FMT(d/dr) addWav(x/d)
  304. ENDIF
  305. FMT(d/d) addWav(x/d)
  306. endphoneme
  307. phoneme dZ // **j**udge
  308. ipa dZ
  309. vcd pla afr sib
  310. voicingswitch tS
  311. lengthmod 5
  312. Vowelin f1=2 f2=2300 200 400 f3=100 80
  313. Vowelout f1=2 f2=2300 250 300 f3=100 80 brk
  314. IF PreVoicing THEN
  315. FMT(dzh/xdz_pzd, 250)
  316. ENDIF
  317. IF nextPh(isPause2) THEN
  318. FMT(dzh/dz_pzd_, 250) addWav(x/dz_pzd_, 250)
  319. ENDIF
  320. FMT(dzh/dz_pzd, 250) addWav(x/dz_pzd, 250)
  321. endphoneme
  322. phoneme n
  323. vcd alv nas
  324. Vowelout f1=2 f2=1500 -300 250 f3=-100 80 rms=20 brk
  325. Vowelin rate
  326. lengthmod 4
  327. IF KlattSynth THEN
  328. Vowelin f1=0 f2=1500 -200 200 f3=0 80
  329. FMT(klatt/n)
  330. ENDIF
  331. NextVowelStarts
  332. VowelStart(n/n@)
  333. VowelStart(n/na)
  334. VowelStart(n/ne)
  335. VowelStart(n/ni)
  336. VowelStart(n/no)
  337. VowelStart(n/nu)
  338. EndSwitch
  339. IF prevPh(isNotVowel) AND nextPhW(isLiquid) THEN
  340. FMT(n/nj)
  341. ELIF prevPh(isPause) OR prevPh(n) THEN
  342. FMT(n/_n)
  343. ELIF nextPh(isNotVowel) THEN
  344. FMT(n/n_)
  345. ENDIF
  346. endphoneme
  347. phoneme m
  348. vcd blb nas
  349. Vowelout f1=2 f2=1000 -500 -350 f3=-200 80 brk
  350. lengthmod 4
  351. IF KlattSynth THEN
  352. Vowelin f1=0 f2=1000 -50 -200 f3=-200 80
  353. IF nextPh(isPause2) THEN
  354. FMT(klatt/m_)
  355. ENDIF
  356. FMT(klatt/m)
  357. ENDIF
  358. NextVowelStarts
  359. VowelStart(m/m@)
  360. VowelStart(m/ma)
  361. VowelStart(m/me)
  362. VowelStart(m/mi)
  363. VowelStart(m/mo)
  364. VowelStart(m/mu)
  365. EndSwitch
  366. IF prevPh(isNotVowel) AND nextPhW(isLiquid) THEN
  367. FMT(m/mj)
  368. ELIF prevPh(isPause) THEN
  369. FMT(m/_m)
  370. ELIF nextPh(isNotVowel) THEN
  371. FMT(m/m_)
  372. ENDIF
  373. endphoneme
  374. phoneme w
  375. liquid
  376. lengthmod 7
  377. starttype #u
  378. IF nextPh(isVowel) THEN
  379. NextVowelStarts
  380. VowelStart(w/w2)
  381. VowelStart(w/wa)
  382. VowelStart(w/we)
  383. VowelStart(w/wi)
  384. VowelStart(w/wo)
  385. VowelStart(w/wu)
  386. EndSwitch
  387. VowelEnding(w/xw, -30)
  388. IF prevPhW(isNasal) THEN
  389. FMT(w/w2)
  390. ELSEIF prevPhW(h) THEN
  391. // none, [hw]
  392. ELSE
  393. FMT(w/w2)
  394. //FMT(w/_w)
  395. ENDIF
  396. ELSE
  397. // no vowel follows
  398. Vowelout len=50
  399. IF prevPh(#i) THEN
  400. FMT(w/iw_)
  401. ENDIF
  402. FMT(w/w_)
  403. ENDIF
  404. endphoneme