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_vietnam 14KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752
  1. //====================================================
  2. // Vietnamese Phonemes
  3. //====================================================
  4. phoneme 1 // ngang tone: level
  5. stress
  6. Tone(30, 28, envelope/p_level, NULL) // 28 29
  7. endphoneme
  8. phoneme 2 // huyền tone: low falling
  9. stress
  10. Tone(20, 8, envelope/p_fall, NULL) //20 8
  11. endphoneme
  12. phoneme 3 // sắc Tone(rising
  13. stress
  14. Tone(30, 55, envelope/p_rise, NULL) // 30 60
  15. endphoneme
  16. phoneme 4 // hỏi Tone(curve (dipping rising)
  17. stress
  18. Tone(10, 31, envelope/p_fallrise, NULL) //33 31
  19. endphoneme
  20. phoneme 5 // ngã tone: broken (creaking rising)
  21. stress
  22. Tone(34, 60,envelope/p_214, envelope/vi_5amp) // 28,58 20 80
  23. endphoneme
  24. phoneme 6 // nặng Tone(drop (constricted)
  25. stress
  26. //length 150 // ignore because it make too short sound 75 // reduce the length of the vowel
  27. Tone(34, 10, envelope/p_512, envelope/vi_6amp) //40 20
  28. endphoneme
  29. phoneme 7 // Tone(1 (ngang) at end of clause
  30. stress
  31. Tone(30, 28, envelope/p_fall, NULL) //40 20
  32. endphoneme
  33. // Vowels
  34. //=======
  35. phoneme a
  36. vwl starttype #@ endtype #@
  37. IF thisPh(isFirstVowel) AND thisPh(isFinalVowel) AND thisPh(isWordEnd) THEN
  38. length 240
  39. ELSE
  40. length 180
  41. ENDIF
  42. IF nextPh(N) OR nextPh(c) THEN
  43. FMT(vnasal/a_n)
  44. ELSE
  45. FMT(vietnam/a, 60) //a_4)
  46. ENDIF
  47. endphoneme
  48. phoneme a:
  49. vwl starttype #a endtype #a
  50. IF nextPhW(p) THEN
  51. length 142
  52. ELIF nextPhW(t[) THEN
  53. length 126
  54. ELIF nextPhW(c) THEN
  55. length 136
  56. ELIF nextPhW(m) THEN
  57. length 155
  58. ELIF nextPhW(n) THEN
  59. length 185
  60. ELIF nextPhW(N) THEN
  61. length 173
  62. ELIF thisPh(isFirstVowel) AND thisPh(isFinalVowel) AND thisPh(isWordEnd) THEN
  63. length 240
  64. ELIF thisPh(isFirstVowel) AND thisPh(isFinalVowel) AND thisPh(isWordStart) THEN
  65. length 240
  66. ELSE
  67. length 180
  68. ENDIF
  69. FMT(vowel/a_8)
  70. //FMT(vietnam/a_2)
  71. endphoneme
  72. phoneme E
  73. vwl starttype #e endtype #e
  74. IF nextPhW(p) THEN
  75. length 143
  76. ELIF nextPhW(t[) THEN
  77. length 107
  78. ELIF nextPhW(c) THEN
  79. length 141
  80. ELIF nextPhW(m) THEN
  81. length 128
  82. ELIF nextPhW(n) THEN
  83. length 160
  84. ELIF nextPhW(N) THEN
  85. length 187
  86. ELIF thisPh(isFirstVowel) AND thisPh(isFinalVowel) AND thisPh(isWordEnd) THEN
  87. length 240
  88. ELIF thisPh(isFirstVowel) AND thisPh(isFinalVowel) AND thisPh(isWordStart) THEN
  89. length 240
  90. ELSE
  91. length 180
  92. ENDIF
  93. FMT(vowel/e_e) //ee_3)
  94. endphoneme
  95. phoneme e
  96. vwl starttype #e endtype #e
  97. IF nextPhW(p) THEN
  98. length 114
  99. ELIF nextPhW(t[) THEN
  100. length 126
  101. ELIF nextPhW(c) THEN
  102. length 140
  103. ELIF nextPhW(n^) THEN
  104. length 120
  105. ELIF nextPhW(m) THEN
  106. length 148
  107. ELIF nextPhW(n) THEN
  108. length 163
  109. ELIF nextPhW(N) THEN
  110. length 115
  111. ELIF thisPh(isFirstVowel) AND thisPh(isFinalVowel) AND thisPh(isWordEnd) THEN
  112. length 240
  113. ELIF thisPh(isFirstVowel) AND thisPh(isFinalVowel) AND thisPh(isWordStart) THEN
  114. length 240
  115. ELSE
  116. length 180
  117. ENDIF
  118. IF nextPh(n^) THEN
  119. FMT(vowel/e)
  120. ELSE
  121. FMT(vietnam/e)
  122. ENDIF
  123. endphoneme
  124. phoneme e-
  125. vwl starttype #e endtype #a
  126. IF nextPhW(c) THEN
  127. length 70
  128. ELIF nextPhW(n^) THEN
  129. length 100
  130. ENDIF
  131. FMT(vietnam/e_short_2)
  132. endphoneme
  133. phoneme i
  134. vwl starttype #i endtype #i
  135. IfNextVowelAppend(;)
  136. IF prevPhW(w) THEN
  137. VowelStart(w/wi)
  138. ENDIF
  139. IF nextPhW(p) THEN
  140. length 131
  141. ELIF nextPhW(t[) THEN
  142. length 113
  143. ELIF nextPhW(c) OR nextPhW(n^) THEN
  144. length 72
  145. ELIF nextPhW(m) THEN
  146. length 120
  147. ELIF nextPhW(n) THEN
  148. length 128
  149. ELIF nextPhW(N) THEN
  150. length 97
  151. ELIF thisPh(isFirstVowel) AND thisPh(isFinalVowel) AND thisPh(isWordEnd) THEN
  152. length 240
  153. ELIF thisPh(isFirstVowel) AND thisPh(isFinalVowel) AND thisPh(isWordStart) THEN
  154. length 240
  155. ELSE
  156. length 180
  157. ENDIF
  158. IF nextPh(n^) OR nextPh(c) THEN
  159. FMT(vnasal/ii_n)
  160. ELSE
  161. FMT(vowel/i_4)
  162. ENDIF
  163. endphoneme
  164. phoneme O
  165. vwl starttype #o endtype #o
  166. IF nextPh(kh) OR nextPh(N) THEN
  167. length 80
  168. ELIF thisPh(isFirstVowel) AND thisPh(isFinalVowel) AND thisPh(isWordEnd) THEN
  169. length 240
  170. ELSE
  171. length 180
  172. ENDIF
  173. FMT(vdiph2/o_oo) //vowel/oo)
  174. endphoneme
  175. phoneme O+
  176. vwl starttype #o endtype #o
  177. IF nextPh(kh) OR nextPh(N) THEN
  178. length 80
  179. ELIF thisPh(isFirstVowel) AND thisPh(isFinalVowel) AND thisPh(isWordEnd) THEN
  180. length 240
  181. ELSE
  182. length 180
  183. ENDIF
  184. FMT(vowel/o) //vowel/oo)
  185. endphoneme
  186. phoneme o
  187. vwl starttype #o endtype #o
  188. IF nextPh(kh) OR nextPh(N) THEN
  189. length 110
  190. ELIF thisPh(isFirstVowel) AND thisPh(isFinalVowel) AND thisPh(isWordEnd) THEN
  191. length 240
  192. ELSE
  193. length 180
  194. ENDIF
  195. FMT(vowel/o) // o_2)
  196. endphoneme
  197. phoneme u
  198. vwl starttype #u endtype #u
  199. IF nextPhW(N) OR nextPhW(c) OR nextPhW(t[) THEN
  200. length 80
  201. ELIF nextPhW(m) THEN
  202. length 177
  203. ELIF nextPhW(n) THEN
  204. length 141
  205. ELIF thisPh(isFirstVowel) AND thisPh(isFinalVowel) AND thisPh(isWordEnd) THEN
  206. length 240
  207. ELIF thisPh(isFirstVowel) AND thisPh(isFinalVowel) AND thisPh(isWordStart) AND NOT nextPhW(N) AND NOT nextPhW(c) AND NOT nextPhW(t[) THEN
  208. length 240
  209. ELSE
  210. length 120
  211. ENDIF
  212. FMT(vnasal/u_n) //vowel/u_5)
  213. endphoneme
  214. phoneme y
  215. vwl starttype #u endtype #u
  216. IF nextPhW(p) THEN
  217. length 102
  218. ELIF nextPhW(t[) THEN
  219. length 76
  220. ELIF nextPhW(c) THEN
  221. length 70
  222. ELIF nextPhW(m) THEN
  223. length 143
  224. ELIF nextPhW(n) THEN
  225. length 136
  226. ELIF nextPhW(N) THEN
  227. length 101
  228. ELIF thisPh(isFirstVowel) AND thisPh(isFinalVowel) AND thisPh(isWordEnd) THEN
  229. length 240
  230. ELIF thisPh(isFirstVowel) AND thisPh(isFinalVowel) AND thisPh(isWordStart) THEN
  231. length 240
  232. ELSE
  233. length 180
  234. ENDIF
  235. FMT(vowel/u#_5)
  236. endphoneme
  237. phoneme @
  238. vwl starttype #@ endtype #a
  239. IF nextPh(kh) OR nextPh(N) OR nextPh(n^) OR nextPh(c) THEN
  240. length 120
  241. ELIF thisPh(isFirstVowel) AND thisPh(isFinalVowel) AND thisPh(isWordEnd) THEN
  242. length 240
  243. ELSE
  244. length 180
  245. ENDIF
  246. // FMT(vowel/V) //vowel/@_2)
  247. FMT(vietnam/V)
  248. endphoneme
  249. phoneme @:
  250. vwl starttype #@ endtype #@
  251. IF nextPhW(p) THEN
  252. length 123
  253. ELIF nextPhW(t[) THEN
  254. length 123
  255. ELIF nextPhW(c) THEN
  256. length 139
  257. ELIF nextPhW(m) THEN
  258. length 127
  259. ELIF nextPhW(n) THEN
  260. length 160
  261. ELIF nextPhW(N) THEN
  262. length 156
  263. ELIF thisPh(isFirstVowel) AND thisPh(isFinalVowel) AND thisPh(isWordEnd) THEN
  264. length 240
  265. ELIF thisPh(isFirstVowel) AND thisPh(isFinalVowel) AND thisPh(isWordStart) THEN
  266. length 240
  267. ELSE
  268. length 180
  269. ENDIF
  270. FMT(vowel/@_2)
  271. endphoneme
  272. // Diphthongs
  273. //===========
  274. phoneme aI
  275. vwl starttype #a endtype #i
  276. IF thisPh(isFirstVowel) AND thisPh(isFinalVowel) AND thisPh(isWordEnd) THEN
  277. length 240
  278. ELSE
  279. length 200
  280. ENDIF
  281. FMT(vdiph/&i_2)
  282. endphoneme
  283. phoneme a:I
  284. vwl starttype #a endtype #i
  285. length 240 //250
  286. FMT(vdiph/ai)
  287. endphoneme
  288. phoneme @I
  289. vwl starttype #@ endtype #i
  290. length 240 //250
  291. FMT(vdiph/@i)
  292. endphoneme
  293. phoneme @:I
  294. vwl starttype #@ endtype #i
  295. length 240 //250
  296. FMT(vdiph/y#i)
  297. endphoneme
  298. phoneme eI
  299. vwl starttype #e endtype #i
  300. IF thisPh(isFirstVowel) AND thisPh(isFinalVowel) AND thisPh(isWordEnd) THEN
  301. length 240
  302. ELSE
  303. length 200
  304. ENDIF
  305. FMT(vdiph/ei)
  306. endphoneme
  307. phoneme EI
  308. vwl starttype #e endtype #i
  309. IF thisPh(isFirstVowel) AND thisPh(isFinalVowel) AND thisPh(isWordEnd) THEN
  310. length 240
  311. ELSE
  312. length 200
  313. ENDIF
  314. FMT(vdiph/eei)
  315. endphoneme
  316. phoneme OI
  317. vwl starttype #o endtype #i
  318. length 240
  319. FMT(vdiph/ooi_4)
  320. endphoneme
  321. phoneme oI
  322. vwl starttype #o endtype #i
  323. length 240
  324. FMT(vdiph/oi)
  325. endphoneme
  326. phoneme uI
  327. vwl starttype #u endtype #i
  328. length 240
  329. FMT(vdiph/ui)
  330. endphoneme
  331. phoneme yI
  332. vwl starttype #u endtype #i
  333. length 240
  334. FMT(vdiph/u-i)
  335. endphoneme
  336. phoneme aU
  337. vwl starttype #a endtype #u
  338. IF thisPh(isFirstVowel) AND thisPh(isFinalVowel) AND thisPh(isWordEnd) THEN
  339. length 240
  340. ELSE
  341. length 200
  342. ENDIF
  343. FMT(vdiph/aau_4)
  344. endphoneme
  345. phoneme a:U
  346. vwl starttype #a endtype #u
  347. IF thisPh(isFirstVowel) AND thisPh(isFinalVowel) AND thisPh(isWordEnd) THEN
  348. length 240
  349. ELSE
  350. length 200
  351. ENDIF
  352. FMT(vdiph/au)
  353. endphoneme
  354. phoneme eU
  355. vwl starttype #e endtype #u
  356. IF thisPh(isFirstVowel) AND thisPh(isFinalVowel) AND thisPh(isWordEnd) THEN
  357. length 240
  358. ELSE
  359. length 200
  360. ENDIF
  361. FMT(vdiph/eu)
  362. endphoneme
  363. phoneme EU
  364. vwl starttype #e endtype #u
  365. IF thisPh(isFirstVowel) AND thisPh(isFinalVowel) AND thisPh(isWordEnd) THEN
  366. length 240
  367. ELSE
  368. length 200
  369. ENDIF
  370. FMT(vdiph/eeu)
  371. endphoneme
  372. phoneme iU
  373. vwl starttype #i endtype #u
  374. IF thisPh(isFirstVowel) AND thisPh(isFinalVowel) AND thisPh(isWordEnd) THEN
  375. length 240
  376. ELSE
  377. length 200
  378. ENDIF
  379. FMT(vdiph2/iu)
  380. endphoneme
  381. phoneme @U
  382. vwl starttype #@ endtype #u
  383. IF thisPh(isFirstVowel) AND thisPh(isFinalVowel) AND thisPh(isWordEnd) THEN
  384. length 240
  385. ELSE
  386. length 200
  387. ENDIF
  388. FMT(vdiph/@u_3)
  389. endphoneme
  390. phoneme @:U
  391. vwl starttype #@ endtype #u
  392. IF thisPh(isFirstVowel) AND thisPh(isFinalVowel) AND thisPh(isWordEnd) THEN
  393. length 240
  394. ELSE
  395. length 200
  396. ENDIF
  397. FMT(vdiph/@u)
  398. endphoneme
  399. phoneme i@
  400. vwl starttype #i endtype #@
  401. IF thisPh(isFirstVowel) AND thisPh(isFinalVowel) AND thisPh(isWordEnd) THEN
  402. length 240
  403. ELSE
  404. length 200
  405. ENDIF
  406. FMT(vdiph2/ii@_3)
  407. endphoneme
  408. phoneme y@
  409. vwl starttype #i endtype #@
  410. IF thisPh(isFirstVowel) AND thisPh(isFinalVowel) AND thisPh(isWordEnd) THEN
  411. length 240
  412. ELSE
  413. length 200
  414. ENDIF
  415. FMT(vdiph2/y-y#)
  416. endphoneme
  417. phoneme u@
  418. vwl starttype #u endtype #@
  419. IF thisPh(isFirstVowel) AND thisPh(isFinalVowel) AND thisPh(isWordEnd) THEN
  420. length 240
  421. ELSE
  422. length 200
  423. ENDIF
  424. FMT(vdiph2/uu@)
  425. endphoneme
  426. // Addition Dipthongs
  427. phoneme o# // ông
  428. vwl starttype #o endtype #o
  429. IF thisPh(isFirstVowel) AND thisPh(isFinalVowel) AND thisPh(isWordEnd) THEN
  430. length 240
  431. ELSE
  432. length 200
  433. ENDIF
  434. FMT(vnasal/a#u_n)
  435. endphoneme
  436. phoneme O# // ong
  437. vwl starttype #o endtype #o
  438. IF thisPh(isFirstVowel) AND thisPh(isFinalVowel) AND thisPh(isWordEnd) THEN
  439. length 240
  440. ELIF nextPh(k) THEN
  441. length 140
  442. ELSE
  443. length 200
  444. ENDIF
  445. FMT(vnasal/&u_n)
  446. endphoneme
  447. phoneme o@
  448. vwl starttype #o endtype #a
  449. IF thisPh(isFirstVowel) AND thisPh(isFinalVowel) AND thisPh(isWordEnd) THEN
  450. length 240
  451. ELSE
  452. length 200
  453. ENDIF
  454. FMT(vdiph2/oa)
  455. endphoneme
  456. phoneme o&
  457. vwl starttype #o endtype #o
  458. IF thisPh(isFirstVowel) AND thisPh(isFinalVowel) AND thisPh(isWordEnd) THEN
  459. length 240
  460. ELSE
  461. length 200
  462. ENDIF
  463. FMT(vietnam/oe)
  464. endphoneme
  465. phoneme iE // iê : viết, giệc
  466. vwl starttype #i endtype #e
  467. IF thisPh(isFirstVowel) AND thisPh(isFinalVowel) AND thisPh(isWordEnd) THEN
  468. length 240
  469. ELSE
  470. length 200
  471. ENDIF
  472. FMT(vietnam/ie_2)
  473. endphoneme
  474. phoneme Oi // oai sound
  475. vwl starttype #o endtype #i
  476. IF thisPh(isFirstVowel) AND thisPh(isFinalVowel) AND thisPh(isWordEnd) THEN
  477. length 240
  478. ELSE
  479. length 200
  480. ENDIF
  481. FMT(vdiph/ooi_3)
  482. endphoneme
  483. // Vowel and Dipthong for south dialect
  484. phoneme O- // ôi southern sound
  485. vwl starttype #o endtype #i
  486. IF thisPh(isFirstVowel) AND thisPh(isFinalVowel) AND thisPh(isWordEnd) THEN
  487. length 240
  488. ELSE
  489. length 180
  490. ENDIF
  491. FMT(vnasal/oi_n)
  492. endphoneme
  493. phoneme @- // ơi southern sound
  494. vwl starttype #o endtype #i
  495. IF thisPh(isFirstVowel) AND thisPh(isFinalVowel) AND thisPh(isWordEnd) THEN
  496. length 240
  497. ELSE
  498. length 180
  499. ENDIF
  500. FMT(vdiph/@i_3)
  501. endphoneme
  502. phoneme u- // u southern sound
  503. vwl starttype #u endtype #u
  504. IF thisPh(isFirstVowel) AND thisPh(isFinalVowel) AND thisPh(isWordEnd) THEN
  505. length 240
  506. ELSE
  507. length 180
  508. ENDIF
  509. FMT(vowel/u_3,70)
  510. endphoneme
  511. phoneme kh
  512. vls vel frc
  513. lengthmod 3
  514. Vowelin f1=0 f2=2300 200 400 f3=200 80 len=30
  515. Vowelout f1=0 f2=2300 300 400 f3=200 80 rms=20
  516. WAV(ustop/k_unasp) //ufric/x, 50)
  517. endphoneme
  518. phoneme k
  519. vls vel frc
  520. lengthmod 3
  521. Vowelin f1=0 f2=2300 200 400 f3=200 80 len=30
  522. Vowelout f1=0 f2=2300 300 400 f3=200 80 rms=20
  523. WAV(ustop/c)
  524. endphoneme
  525. phoneme N // si**ng**
  526. vcd lbv nas
  527. Vowelout f1=3 f2=2300 300 400 f3=-200 80 len=40 rms=20 brk
  528. lengthmod 12 // longer than 'n'
  529. FMT(n/nm)
  530. endphoneme
  531. phoneme l
  532. liquid
  533. Vowelin f1=0 f2=1700 -300 300 f3=-100 80 len=15
  534. //lengthmod 7
  535. //IF nextPh(isNotVowel) THEN
  536. // ChangePhoneme(l/2)
  537. //ENDIF
  538. //CALL vowelstart_l
  539. FMT(l/l_vi)
  540. endphoneme
  541. phoneme t
  542. vls alv stp
  543. //voicingswitch d
  544. lengthmod 2
  545. Vowelin f1=0 f2=1700 -300 300 f3=-100 80 len=15
  546. Vowelout f1=0 f2=1700 -300 250 f3=-100 80 rms=20
  547. WAV(vietnam/th, 50)
  548. endphoneme
  549. phoneme cr
  550. vls pla afr sib
  551. //voicingswitch dZ
  552. lengthmod 2
  553. Vowelin f1=0 f2=2300 200 400 f3=-100 80 len=15
  554. WAV(vietnam/tr,10)
  555. endphoneme
  556. phoneme d_
  557. vcd alv stp
  558. // lengthmod 5
  559. ipa ɗ
  560. length 50
  561. Vowelin f1=1 f2=1700 -300 300 f3=-100 80 len=15
  562. Vowelout f1=2 f2=1700 -300 300 f3=-100 80 brk len=30
  563. WAV(vietnam/dd)
  564. endphoneme
  565. phoneme c
  566. vls pal stp pzd
  567. //voicingswitch J
  568. lengthmod 2
  569. length 50
  570. Vowelin f1=0 f2=2700 400 600 f3=300 80 len=15 brk
  571. Vowelout f1=1 f2=2700 400 600 f3=200 70 len=15 colr=1
  572. WAV(vietnam/ch,5)
  573. endphoneme
  574. phoneme p
  575. vls blb stp
  576. lengthmod 2
  577. Vowelin f1=0 f2=1000 -50 -100 f3=-200 80 amp=11
  578. Vowelout f1=0 f2=1000 -500 -350 f3=-300 80 rms=22
  579. WAV(ustop/p_unasp_,10)
  580. endphoneme
  581. phoneme t[ // dental variant of /t/
  582. IF thisPh(isWordEnd) THEN
  583. vls alv stp
  584. voicingswitch d
  585. lengthmod 2
  586. length 5
  587. Vowelin f1=1 f2=1500 -250 250 f3=-100 80 amp=16 len=15
  588. Vowelout f1=0 f2=1500 -300 250 f3=-100 80 rms=20 len=15
  589. WAV(ustop/t, 50)
  590. ELSE
  591. vls dnt stp
  592. voicingswitch d[
  593. lengthmod 2
  594. length 5
  595. Vowelin f1=1 f2=1500 -250 250 f3=-100 80 amp=16 len=15
  596. Vowelout f1=0 f2=1500 -300 250 f3=-100 80 rms=20 len=15
  597. IF nextPh(isPause2) THEN
  598. WAV(ustop/t_unasp2, 5)
  599. ENDIF
  600. WAV(ustop/t_hi, 70)
  601. ENDIF
  602. endphoneme
  603. phoneme w
  604. liquid
  605. lengthmod 7
  606. starttype #u
  607. IF nextPh(isVowel) THEN
  608. NextVowelStarts
  609. VowelStart(w/w@)
  610. VowelStart(w/wa)
  611. VowelStart(w/we)
  612. VowelStart(w/wi)
  613. VowelStart(w/wo)
  614. VowelStart(w/wu)
  615. EndSwitch
  616. VowelEnding(w/xw, -30)
  617. IF nextPh(isVowel) AND prevPhW(t[) THEN
  618. FMT(vnasal/u_n, 60)
  619. ENDIF
  620. IF prevPhW(isNasal) THEN
  621. FMT(w/w)
  622. ELSEIF prevPhW(h) THEN
  623. // none, [hw]
  624. ELSE
  625. FMT(w/_w)
  626. ENDIF
  627. ELSE
  628. // no vowel follows
  629. Vowelout len=50
  630. IF prevPh(#i) THEN
  631. FMT(w/iw_)
  632. ENDIF
  633. FMT(w/w_)
  634. ENDIF
  635. endphoneme