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

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