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 7.8KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402
  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. length 300
  190. FMT(vnasal/V_n, 100)
  191. endphoneme
  192. phoneme V~`
  193. vwl lng starttype #@ endtype #@
  194. length 100
  195. FMT(vnasal/V_n)
  196. endphoneme
  197. phoneme h
  198. vls glt apr
  199. ipa h
  200. IF prevPhW(isVowel) AND nextPhW(isNotVowel) THEN
  201. length 25
  202. lengthmod 1
  203. ENDIF
  204. IF nextPhW(#@) THEN
  205. length 50
  206. WAV(h/h@, 70)
  207. ELIF nextPhW(#a) THEN
  208. WAV(h/ha)
  209. ELIF nextPhW(#e) THEN
  210. length 60
  211. WAV(h/he, 75)
  212. ELIF nextPhW(#i) THEN
  213. length 75
  214. WAV(h/hi)
  215. ELIF nextPhW(#o) THEN
  216. length 75
  217. WAV(h/ho)
  218. ELIF nextPhW(#u) THEN
  219. length 80
  220. WAV(h/hu)
  221. ELSE
  222. length 60
  223. WAV(h/h_) // no vowel following
  224. ENDIF
  225. endphoneme
  226. phoneme h`
  227. vls glt apr
  228. ipa h
  229. length 10
  230. WAV(h/h_) // no vowel following
  231. endphoneme
  232. phoneme s
  233. vls alv frc sib
  234. voicingswitch z
  235. lengthmod 3
  236. Vowelin f1=0 f2=1700 -300 300 f3=-100 80
  237. Vowelout f1=0 f2=1700 -300 250 f3=-100 80 rms=20
  238. IF nextPh(isPause) THEN
  239. WAV(ufric/s_)
  240. ELIF nextPh(p) OR nextPh(t) OR nextPh(k) THEN
  241. WAV(ufric/s!)
  242. ENDIF
  243. WAV(ufric/s)
  244. endphoneme
  245. phoneme g
  246. vcd vel stp
  247. voicingswitch k
  248. lengthmod 5
  249. Vowelin f1=2 f2=2300 200 300 f3=-300 80
  250. Vowelout f1=2 f2=2300 250 300 f3=-300 80 brk
  251. // IF PreVoicing THEN
  252. //FMT(g/xg)
  253. //ENDIF
  254. IF nextPh(isPause2) THEN
  255. //addWav(ustop/k_)
  256. FMT(g/g_) addWav(ustop/k_)
  257. //addWav(x/g_)
  258. ELSE
  259. //addWav(ustop/k_asp)
  260. FMT(g/g) addWav(ustop/k_asp)
  261. //addWav(x/g)
  262. ENDIF
  263. endphoneme
  264. phoneme t
  265. vls alv stp
  266. voicingswitch d
  267. lengthmod 2
  268. Vowelin f1=0 f2=1700 -300 300 f3=-100 80
  269. Vowelout f1=0 f2=1700 -300 250 f3=-100 80 rms=20
  270. IF nextPh(isPause2) THEN
  271. WAV(ustop/t_)
  272. ELIF nextPh(@-) THEN
  273. WAV(ustop/t_dnt, 50)
  274. ELSE
  275. WAV(ustop/t_dnt, 100)
  276. ENDIF
  277. endphoneme
  278. phoneme dZ // **j**udge
  279. ipa dZ
  280. vcd pla afr sib
  281. voicingswitch tS
  282. lengthmod 5
  283. Vowelin f1=2 f2=2300 200 400 f3=100 80
  284. Vowelout f1=2 f2=2300 250 300 f3=100 80 brk
  285. IF PreVoicing THEN
  286. FMT(dzh/xdz_pzd, 250)
  287. ENDIF
  288. IF nextPh(isPause2) THEN
  289. FMT(dzh/dz_pzd_, 250) addWav(x/dz_pzd_, 250)
  290. ENDIF
  291. FMT(dzh/dz_pzd, 250) addWav(x/dz_pzd, 250)
  292. endphoneme
  293. phoneme n
  294. vcd alv nas
  295. Vowelout f1=2 f2=1500 -300 250 f3=-100 80 rms=20 brk
  296. Vowelin rate
  297. lengthmod 4
  298. IF KlattSynth THEN
  299. Vowelin f1=0 f2=1500 -200 200 f3=0 80
  300. FMT(klatt/n)
  301. ENDIF
  302. NextVowelStarts
  303. VowelStart(n/n@)
  304. VowelStart(n/na)
  305. VowelStart(n/ne)
  306. VowelStart(n/ni)
  307. VowelStart(n/no)
  308. VowelStart(n/nu)
  309. EndSwitch
  310. IF prevPh(isNotVowel) AND nextPhW(isLiquid) THEN
  311. FMT(n/nj)
  312. ELIF prevPh(isPause) OR prevPh(n) THEN
  313. FMT(n/_n)
  314. ELIF nextPh(isNotVowel) THEN
  315. FMT(n/n_)
  316. ENDIF
  317. endphoneme
  318. phoneme m
  319. vcd blb nas
  320. Vowelout f1=2 f2=1000 -500 -350 f3=-200 80 brk
  321. lengthmod 4
  322. IF KlattSynth THEN
  323. Vowelin f1=0 f2=1000 -50 -200 f3=-200 80
  324. IF nextPh(isPause2) THEN
  325. FMT(klatt/m_)
  326. ENDIF
  327. FMT(klatt/m)
  328. ENDIF
  329. NextVowelStarts
  330. VowelStart(m/m@)
  331. VowelStart(m/ma)
  332. VowelStart(m/me)
  333. VowelStart(m/mi)
  334. VowelStart(m/mo)
  335. VowelStart(m/mu)
  336. EndSwitch
  337. IF prevPh(isNotVowel) AND nextPhW(isLiquid) THEN
  338. FMT(m/mj)
  339. ELIF prevPh(isPause) THEN
  340. FMT(m/_m)
  341. ELIF nextPh(isNotVowel) THEN
  342. FMT(m/m_)
  343. ENDIF
  344. endphoneme