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_french 15KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870
  1. //====================================================
  2. // French
  3. //====================================================
  4. // Updated 2010-05-19 Michel Such <[email protected]>
  5. phoneme #l virtual
  6. // Used for l and l/
  7. endphoneme
  8. phoneme #r virtual
  9. // Used for r, r2 and r/
  10. endphoneme
  11. phoneme : // Lengthen previous vowel by "length"
  12. virtual
  13. length 40 // shorter than for fr-ca
  14. endphoneme
  15. procedure pre_post_r
  16. IF prevPh(y) THEN
  17. VowelEnding(vwl_fr/y2r)
  18. ELIF prevPh(A~) THEN
  19. VowelEnding(vwl_fr/aa2r)
  20. ELIF prevPh(E~) OR prevPh(W~) THEN
  21. VowelEnding(vwl_fr/ee2r)
  22. ELIF prevPh(O~) OR prevPh(W~) THEN
  23. VowelEnding(vwl_fr/oo2r)
  24. ELIF prevPh(isVowel) THEN
  25. PrevVowelEndings
  26. VowelEnding(vwl_fr/@2r)
  27. VowelEnding(vwl_fr/a2r)
  28. VowelEnding(vwl_fr/e2r)
  29. VowelEnding(vwl_fr/i2r)
  30. VowelEnding(vwl_fr/o2r)
  31. VowelEnding(vwl_fr/u2r)
  32. EndSwitch
  33. ENDIF
  34. IF nextPh(A~) THEN
  35. VowelStart(vwl_fr/raa)
  36. ELIF nextPh(E~) OR nextPh(W~) THEN
  37. VowelStart(vwl_fr/ree)
  38. ELIF nextPh(y) THEN
  39. VowelStart(vwl_fr/ry)
  40. ELIF nextPh(O~) THEN
  41. VowelStart(vwl_fr/roo)
  42. ELIF nextPh(j/) THEN
  43. VowelStart(vwl_fr/rj)
  44. ELIF nextPh(isVowel) THEN
  45. NextVowelStarts
  46. VowelStart(vwl_fr/r@)
  47. VowelStart(vwl_fr/ra)
  48. VowelStart(vwl_fr/re)
  49. VowelStart(vwl_fr/ri)
  50. VowelStart(vwl_fr/ro)
  51. VowelStart(vwl_fr/ru)
  52. EndSwitch
  53. ENDIF
  54. endprocedure
  55. phoneme r
  56. liquid rhotic vel nopause
  57. starttype #r endtype #r
  58. Vowelin f1=0 f2=1200 -500 500 f3=-200 100 len=65
  59. Vowelout f1=0 f2=1200 -500 500 f3=200 100 len=50
  60. lengthmod 2
  61. IF nextPh(isNotVowel) THEN
  62. ChangePhoneme(r/)
  63. ENDIF
  64. CALL pre_post_r
  65. IF thisPh(isWordStart) THEN
  66. length 80
  67. FMT(vwl_fr/r) addWav(r3/rx, 25)
  68. ELIF prevPhW(p) OR prevPhW(k) OR prevPhW(t) OR prevPhW(S) THEN
  69. ChangePhoneme(r/2)
  70. ELIF prevPhW(b) OR prevPhW(d) OR prevPhW(g) THEN
  71. ChangePhoneme(r/2)
  72. ELIF prevPhW(f) OR prevPhW(v) THEN
  73. ChangePhoneme(r/2)
  74. ENDIF
  75. FMT(vwl_fr/r)
  76. endphoneme
  77. phoneme r2 // silent unless followed by vowel
  78. liquid rhotic vel
  79. starttype #r endtype #r
  80. Vowelin f1=0 f2=1200 -500 500 f3=-200 100 len=65
  81. Vowelout f1=0 f2=1200 -500 500 f3=200 100 len=50
  82. lengthmod 2
  83. IF nextPh(isNotVowel) THEN
  84. ChangePhoneme(NULL)
  85. ENDIF
  86. CALL pre_post_r
  87. FMT(vwl_fr/r)
  88. endphoneme
  89. phoneme r/ // variant of [r] when not preceding a vowel
  90. liquid rhotic vel
  91. starttype #r endtype #r
  92. Vowelout f1=0 f2=1150 -500 500 f3=200 100 len=30
  93. lengthmod 2
  94. IF thisPh(isWordEnd) THEN
  95. IF prevPhW(t) OR prevPhW(p) OR prevPhW(k) THEN
  96. FMT(vwl_fr/trr) addWav(r3/rx, 15)
  97. ELIF prevPh(isNotVowel) THEN
  98. FMT(vwl_fr/rr) addWav(r3/rx, 15)
  99. ENDIF
  100. ENDIF
  101. IF prevPh(isVowel) THEN
  102. PrevVowelEndings
  103. VowelEnding(vwl_fr/r_@)
  104. VowelEnding(vwl_fr/r_a)
  105. VowelEnding(vwl_fr/r_e)
  106. VowelEnding(vwl_fr/r_i)
  107. VowelEnding(vwl_fr/r_o)
  108. VowelEnding(vwl_fr/r_u)
  109. EndSwitch
  110. ENDIF
  111. IF nextPhW(n) OR nextPhW(n^) THEN
  112. FMT(vwl_fr/r_n) addWav(r3/rx, 25)
  113. ENDIF
  114. FMT(vwl_fr/r_) addWav(r3/rx, 30)
  115. endphoneme
  116. phoneme r/2
  117. liquid rhotic
  118. starttype #r endtype #r
  119. palatal
  120. Vowelin f1=0 f2=1200 -500 500 f3=-200 100 len=75
  121. CALL pre_post_r
  122. FMT(vwl_fr/tr) addWav(r3/rx, 25)
  123. endphoneme
  124. phoneme l
  125. liquid nopause
  126. starttype #l endtype #l
  127. lengthmod 7
  128. IF nextPh(isNotVowel) THEN
  129. ChangePhoneme(l/)
  130. ENDIF
  131. NextVowelStarts
  132. VowelStart(l/l@)
  133. VowelStart(l/la, -10)
  134. VowelStart(l/le, -15)
  135. VowelStart(l/li, -15)
  136. VowelStart(l/lo, -10)
  137. VowelStart(l/lu, -20)
  138. EndSwitch
  139. IF prevPh(#@) THEN
  140. VowelEnding(l/xl, -50)
  141. ELIF prevPh(isVowel) THEN
  142. VowelEnding(l/xl, -40)
  143. ENDIF
  144. IF prevPh(isPause) OR thisPh(isWordStart) THEN
  145. FMT(l/_l)
  146. ENDIF
  147. IF prevPh(isRhotic) THEN
  148. FMT(l/_l)
  149. ENDIF
  150. IF prevPh(t) THEN
  151. FMT(l/tl)
  152. ENDIF
  153. IF prevPh(l/) THEN
  154. FMT(l/l_long) // double l, make it longer
  155. ENDIF
  156. FMT(l/l)
  157. endphoneme
  158. phoneme l/ // used for [l] when not before a vowel
  159. liquid
  160. starttype #l endtype #l
  161. lengthmod 7
  162. IF nextPh(isVowel) THEN
  163. ChangePhoneme(l)
  164. ENDIF
  165. PrevVowelEndings
  166. VowelEnding(l/l_@)
  167. VowelEnding(l/l_a)
  168. VowelEnding(l/l_e)
  169. VowelEnding(l/l_i)
  170. VowelEnding(l/l_o)
  171. VowelEnding(l/l_u)
  172. EndSwitch
  173. IF prevPh(#r) THEN
  174. FMT(l/_l)
  175. ENDIF
  176. FMT(l/l_)
  177. endphoneme
  178. // Vowels
  179. //=======
  180. phoneme @
  181. vowel starttype #@ endtype #@
  182. length 170
  183. FMT(vowel/@_hgh)
  184. endphoneme
  185. phoneme a
  186. vowel starttype #a endtype #a
  187. IF nextPh(isVowel) THEN
  188. length 220
  189. ELSE
  190. length 170
  191. ENDIF
  192. FMT(vowel/a_7)
  193. endphoneme
  194. phoneme e
  195. vowel starttype #e endtype #e
  196. IF nextPh(isVowel) THEN
  197. length 220
  198. ELSE
  199. length 170
  200. ENDIF
  201. IF nextPh(l/) THEN
  202. VowelEnding(l/xl, -20)
  203. ENDIF
  204. IF nextPh(isVowel) THEN
  205. length 200
  206. ENDIF
  207. FMT(vowel/e_8)
  208. endphoneme
  209. phoneme E
  210. vowel starttype #e endtype #e
  211. length 170
  212. IF nextPhW(j) THEN
  213. length 190
  214. ENDIF
  215. FMT(vowel/e_mid)
  216. endphoneme
  217. phoneme E2 // Between e and E
  218. vowel starttype #e endtype #e
  219. length 170
  220. FMT(vowel/e_9)
  221. endphoneme
  222. phoneme i
  223. vowel starttype #i endtype #i
  224. IF prevPhW(#r) AND nextPhW(isVowel) THEN
  225. ChangePhoneme(j/)
  226. ELIF nextPhW(isVowel) THEN
  227. ChangePhoneme(j)
  228. ELSE
  229. length 160
  230. ENDIF
  231. IfNextVowelAppend(;)
  232. FMT(vowel/i_8)
  233. endphoneme
  234. phoneme i: // longer than i
  235. vowel starttype #i endtype #i
  236. length 240
  237. IfNextVowelAppend(;)
  238. FMT(vowel/i_3)
  239. endphoneme
  240. phoneme j/ // Short "i" between "r" and a vowel
  241. vowel starttype #i endtype #i
  242. palatal
  243. IF nextPh(isVowel) THEN
  244. NextVowelStarts
  245. VowelStart(j/j@)
  246. VowelStart(j/ja)
  247. VowelStart(j/je)
  248. VowelStart(j/ji)
  249. VowelStart(j/jo)
  250. VowelStart(j/ju)
  251. EndSwitch
  252. ELSE
  253. ChangePhoneme(NULL)
  254. ENDIF
  255. endphoneme
  256. phoneme o
  257. vowel starttype #o endtype #o
  258. IF nextPh(isVowel) THEN
  259. length 220
  260. ELSE
  261. length 170
  262. ENDIF
  263. IF thisPh(isFinalVowel) THEN
  264. IF thisPh(isWordEnd) THEN
  265. FMT(vowel/o_8)
  266. ELIF nextPh(p2) OR nextPh(t2) OR nextPh(z2) THEN
  267. FMT(vowel/o_8)
  268. ELIF nextPh(z) THEN
  269. FMT(vowel/o)
  270. ELSE
  271. ChangePhoneme(O)
  272. ENDIF
  273. ELSE
  274. IF nextPhW(isLiquid) AND next2Ph(isNotVowel) THEN
  275. ChangePhoneme(O)
  276. ELIF nextPhW(n) AND next2Ph(j) THEN
  277. FMT(vowel/o)
  278. ELIF nextPhW(isNasal) AND next2Ph(isLiquid) THEN
  279. ChangePhoneme(O)
  280. ELIF nextPhW(isNotVowel) AND next2Ph(isNasal) THEN
  281. ChangePhoneme(O)
  282. ELIF nextPhW(d) AND next2Ph(isNotVowel) THEN
  283. ChangePhoneme(O)
  284. ELIF nextPhW(t) AND next2Ph(isLiquid) AND nextVowel(isFinalVowel) THEN
  285. ChangePhoneme(O)
  286. ELSE
  287. FMT(vowel/o)
  288. ENDIF
  289. FMT(vowel/o)
  290. ENDIF
  291. endphoneme
  292. phoneme o2
  293. vowel starttype #o endtype #o
  294. IF nextPh(isVowel) THEN
  295. length 220
  296. ELSE
  297. length 170
  298. ENDIF
  299. IF thisPh(isFinalVowel) THEN
  300. FMT(vowel/o_8)
  301. ELSE
  302. FMT(vowel/o)
  303. ENDIF
  304. endphoneme
  305. phoneme O
  306. vowel starttype #o endtype #o
  307. IF nextPhW(#r) THEN
  308. length 200
  309. ELSE
  310. length 170
  311. ENDIF
  312. FMT(vowel/o_mid2)
  313. endphoneme
  314. phoneme o3 // almost like english oU
  315. vowel starttype #@ endtype #u
  316. length 220
  317. FMT(vdiph/@u_3)
  318. endphoneme
  319. phoneme u
  320. vowel starttype #u endtype #u
  321. IF nextPh(isVowel) OR nextPh(j) THEN
  322. length 220
  323. ELSE
  324. length 180
  325. ENDIF
  326. FMT(vowel/u_bck2)
  327. endphoneme
  328. phoneme u: // slitely longer than u
  329. vowel starttype #u endtype #u
  330. length 240
  331. FMT(vowel/u_bck2)
  332. endphoneme
  333. phoneme y
  334. vowel starttype #u endtype #u
  335. IF nextPh(isVowel) THEN
  336. length 200
  337. ELSE
  338. length 170
  339. ENDIF
  340. IF nextPh(l/) THEN
  341. VowelEnding(l/l_y)
  342. ELIF nextPhW(E~) THEN
  343. FMT(vowel/y, -30)
  344. ENDIF
  345. FMT(vowel/y)
  346. endphoneme
  347. phoneme W
  348. vowel starttype #@ endtype #@
  349. length 180
  350. IF prevPh(l) THEN
  351. VowelStart(l/l@, -20)
  352. ENDIF
  353. IF nextPh(l/) THEN
  354. VowelEnding(l/l_@, -20)
  355. ENDIF
  356. FMT(vowel/@)
  357. endphoneme
  358. phoneme Y
  359. vowel starttype #@ endtype #@
  360. length 170
  361. IF thisPh(isFinalVowel) THEN
  362. IF thisPh(isWordEnd) THEN
  363. FMT(vowel/y#)
  364. ELIF nextPh(z2) OR nextPh(t2) THEN
  365. FMT(vowel/y#)
  366. ELSE
  367. ChangePhoneme(W)
  368. ENDIF
  369. ELSE
  370. IF nextPhW(isNotVowel) AND next2Ph(isLiquid) THEN
  371. FMT(vowel/y#)
  372. ELIF nextPhW(isNotVowel) AND next2Ph(isNotVowel) THEN
  373. ChangePhoneme(W)
  374. ELSE
  375. FMT(vowel/y#)
  376. ENDIF
  377. ENDIF
  378. endphoneme
  379. phoneme w
  380. vowel starttype #u endtype #u
  381. IF prevPh(#r) OR prevPhW(#l) THEN
  382. NextVowelStarts
  383. VowelStart(w/w@)
  384. VowelStart(w/wa, -10)
  385. VowelStart(w/we)
  386. VowelStart(w/wi)
  387. VowelStart(w/wo)
  388. VowelStart(w/wu)
  389. EndSwitch
  390. ELSE
  391. ChangePhoneme(w/)
  392. ENDIF
  393. endphoneme
  394. phoneme w/
  395. import_phoneme base/w
  396. endphoneme
  397. phoneme w^a
  398. vowel starttype #o endtype #a
  399. length 200
  400. FMT(vdiph/oa_fr)
  401. endphoneme
  402. phoneme w^i
  403. vowel starttype #u endtype #i
  404. length 240
  405. IfNextVowelAppend(;)
  406. FMT(vdiph/yi_fr)
  407. endphoneme
  408. phoneme A~
  409. vowel starttype #a endtype #a
  410. length 190
  411. FMT(vnasal/aa_n4)
  412. endphoneme
  413. phoneme E~ // same as W~ for fr-fr
  414. vowel starttype #e endtype #e
  415. length 190
  416. IF nextPh(n2) THEN
  417. FMT(vowel/e_mid)
  418. ENDIF
  419. FMT(vnasal/W_n)
  420. endphoneme
  421. phoneme O~
  422. vowel starttype #o endtype #o
  423. length 190
  424. FMT(vnasal/o_n2)
  425. endphoneme
  426. phoneme W~
  427. vowel starttype #@ endtype #@
  428. length 190
  429. FMT(vnasal/W_n)
  430. endphoneme
  431. // These vowels map to others in fr-fr, but are distinct in fr-ca
  432. phoneme I // same as [i]
  433. import_phoneme fr/i
  434. endphoneme
  435. phoneme U // same as [u]
  436. import_phoneme fr/u
  437. endphoneme
  438. phoneme y" // same as [y]
  439. import_phoneme fr/y
  440. endphoneme
  441. phoneme E: // slightly longer than [E]
  442. import_phoneme E
  443. endphoneme
  444. phoneme A // same as [a]
  445. import_phoneme a
  446. endphoneme
  447. // CONSONANTS
  448. //===========
  449. // uses the consonants in file "phonemes", unless overridden here
  450. phoneme b
  451. vcd blb stop
  452. voicingswitch p
  453. lengthmod 5
  454. Vowelout f1=2 f2=1000 -500 -300 f3=-300 80 brk
  455. IF KlattSynth THEN
  456. Vowelin f1=1 f2=1000 -500 -300 f3=-300 80
  457. IF nextPh(isPause2) THEN
  458. FMT(klatt/b) addWav(x/b_)
  459. ENDIF
  460. FMT(klatt/b) addWav(x/b)
  461. ENDIF
  462. IF PreVoicing THEN
  463. FMT(b/xb)
  464. ENDIF
  465. IF nextPh(isPause2) OR nextPh(l) THEN
  466. FMT(b/b_) addWav(x/b_)
  467. ELIF nextPh(l/) THEN
  468. FMT(b/b)
  469. ELIF nextPh(#r) THEN
  470. length 40
  471. FMT(b/b) addWav(x/b, 50)
  472. ENDIF
  473. FMT(b/b) addWav(x/b, 70)
  474. endphoneme
  475. phoneme d
  476. vcd alv stop
  477. voicingswitch t
  478. lengthmod 5
  479. Vowelin f1=0 f2=1700 -300 300 f3=-100 80 amp=20
  480. Vowelout f1=0 f2=1700 -300 300 f3=-100 80
  481. IF PreVoicing THEN
  482. FMT(d/xd)
  483. ENDIF
  484. IF nextPh(isPause2) THEN
  485. FMT(d/d_) addWav(x/d_, 50)
  486. ENDIF
  487. FMT(d/d) addWav(x/d, 40)
  488. endphoneme
  489. phoneme g
  490. vcd vel stop
  491. voicingswitch k
  492. lengthmod 5
  493. Vowelin f1=2 f2=2300 200 300 f3=-300 80
  494. Vowelout f1=2 f2=2300 250 300 f3=-300 80 brk
  495. IF PreVoicing THEN
  496. FMT(g/xg)
  497. ENDIF
  498. IF nextPh(isPause2) THEN
  499. FMT(g/g_) addWav(x/g_)
  500. ELIF nextPhW(#r) THEN
  501. FMT(g2/g) addWav(x/g, 20)
  502. ENDIF
  503. FMT(g/g) addWav(x/g, 20)
  504. endphoneme
  505. phoneme k
  506. vls vel stop
  507. voicingswitch g
  508. length 50
  509. lengthmod 2
  510. Vowelin f1=0 f2=2300 200 400 f3=-100 80
  511. Vowelout f1=0 f2=2300 300 400 f3=-100 80 rms=20
  512. IF nextPh(isPause2) THEN
  513. WAV(ustop/k_)
  514. ELIF nextPh(#i) OR nextPh(;) THEN
  515. WAV(ustop/ki, 45)
  516. ELIF nextPh(#l) THEN
  517. WAV(ustop/kl, 40)
  518. ELIF nextPh(#r) THEN
  519. length 50
  520. WAV(ustop/k, 50)
  521. ENDIF
  522. WAV(ustop/k, 40)
  523. endphoneme
  524. phoneme n2
  525. vcd alv nasal
  526. IF nextPh(w) OR nextPh(isVowel) THEN
  527. ChangePhoneme(n)
  528. ELSE
  529. ChangePhoneme(NULL)
  530. ENDIF
  531. endphoneme
  532. phoneme p
  533. vls blb stop
  534. voicingswitch b
  535. lengthmod 2
  536. Vowelin f1=0 f2=1000 -50 -100 f3=-200 80 amp=11
  537. Vowelout f1=0 f2=1000 -500 -350 f3=-300 80 rms=22
  538. IF nextPh(isPause2) THEN
  539. WAV(ustop/p_, 70)
  540. ELIF nextPh(@-) THEN
  541. WAV(ustop/p_unasp, 60)
  542. ELIF nextPh(#l) THEN
  543. WAV(ustop/pl, 30)
  544. ELIF nextPh(#r) THEN
  545. length 40
  546. WAV(ustop/p_, 60)
  547. ENDIF
  548. WAV(ustop/p_unasp_, 90)
  549. endphoneme
  550. phoneme p2 // silent unless followed by vowel
  551. vls blb stop
  552. lengthmod 2
  553. Vowelin f1=0 f2=1000 -50 -100 f3=-200 80 amp=11
  554. Vowelout f1=0 f2=1000 -500 -350 f3=-300 80 rms=22
  555. IF nextPh(isNotVowel) THEN
  556. ChangePhoneme(NULL)
  557. ENDIF
  558. WAV(ustop/p, 45)
  559. endphoneme
  560. phoneme s
  561. vls alv frc sibilant
  562. voicingswitch z
  563. lengthmod 3
  564. Vowelin f1=0 f2=1700 -300 300 f3=-100 80
  565. Vowelout f1=0 f2=1700 -300 250 f3=-100 80 rms=20
  566. IF nextPh(isPause) THEN
  567. WAV(ufric/s_, 45)
  568. ELIF nextPh(p) OR nextPh(t) OR nextPh(k) THEN
  569. WAV(ufric/s!, 45)
  570. ENDIF
  571. WAV(ufric/s, 45)
  572. endphoneme
  573. phoneme S
  574. vls pla frc sibilant
  575. voicingswitch Z
  576. lengthmod 3
  577. Vowelin f1=0 f2=1900 100 300 f3=-100 80
  578. Vowelout f1=0 f2=1900 100 300 f3=-100 80
  579. IF prevPhW(t) THEN
  580. length 60
  581. ENDIF
  582. IF nextPh(isPause) THEN
  583. WAV(ufric/sh_, 45)
  584. ENDIF
  585. WAV(ufric/sh, 45)
  586. endphoneme
  587. phoneme t
  588. vls alv stop
  589. voicingswitch d
  590. lengthmod 2
  591. Vowelin f1=0 f2=1700 -300 300 f3=-100 80
  592. Vowelout f1=0 f2=1700 -300 250 f3=-100 80 rms=20
  593. IF nextPh(isPause2) THEN
  594. WAV(ustop/t_, 40)
  595. ELIF nextPh(#r) THEN
  596. length 40
  597. WAV(ustop/t_short_, 40)
  598. ENDIF
  599. WAV(ustop/t_short, 40)
  600. endphoneme
  601. phoneme t2 // silent unless followed by vowel
  602. vls alv stop
  603. Vowelin f1=0 f2=1600 -300 300 f3=-100 80
  604. Vowelout f1=0 f2=1600 -300 250 f3=-100 80 rms=20
  605. lengthmod 2
  606. IF nextPh(isVowel) OR nextPh(w) OR nextPh(j) THEN
  607. WAV(ustop/t_short, 30)
  608. ELSE
  609. ChangePhoneme(NULL)
  610. ENDIF
  611. endphoneme
  612. phoneme t3 // silent unless followed by vowel or pause
  613. vls alv stop
  614. lengthmod 2
  615. IF nextPh(isPause) THEN
  616. ChangePhoneme(t)
  617. ELIF nextPh(isNotVowel) THEN
  618. ChangePhoneme(NULL)
  619. ELSE
  620. ChangePhoneme(t2)
  621. ENDIF
  622. endphoneme
  623. phoneme v
  624. vcd lbd frc
  625. voicingswitch f
  626. lengthmod 6
  627. length 90
  628. Vowelin f1=0 f2=1000 -300 -200 f3=-300 100
  629. Vowelout f1=0 f2=1000 -500 -300 f3=-300 60 len=50
  630. IF KlattSynth THEN
  631. CALL base/v
  632. RETURN
  633. ENDIF
  634. IF nextPh(isPause2) THEN
  635. FMT(voc/v_) addWav(vocw/v)
  636. ENDIF
  637. IF thisPh(isWordStart) AND nextPhW(isLiquid) THEN
  638. Length 70
  639. ELIF nextPhW(w) OR nextPhW(#r) THEN
  640. Length 50
  641. ENDIF
  642. FMT(voc/v) addWav(vocw/v, 60)
  643. endphoneme
  644. phoneme z
  645. vcd alv frc sibilant
  646. voicingswitch s
  647. lengthmod 6
  648. Vowelout f1=0 f2=1700 -300 300 f3=-100 60 len=50
  649. IF nextPhW(z) THEN
  650. FMT(d/xd)
  651. ENDIF
  652. IF nextPh(isPause2) OR nextPh(isPause) THEN
  653. FMT(voc/z_) addWav(ufric/s_, 45)
  654. ENDIF
  655. IF prevPhW(t) THEN
  656. length 60
  657. ENDIF
  658. FMT(voc/z) addWav(ufric/s_, 45)
  659. endphoneme
  660. phoneme z2 // silent unless followed by vowel
  661. vcd alv frc sibilant
  662. IF nextPh(isVowel) OR nextPh(w/) OR nextPh(j) THEN
  663. FMT(voc/z, -20) addWav(ufric/s, 40)
  664. ELSE
  665. ChangePhoneme(NULL)
  666. ENDIF
  667. endphoneme
  668. phoneme z3 // "six" and "dix". [s] before pause, [z] before vowel, else []
  669. vcd alv frc sibilant
  670. IF nextPh(isPause) THEN
  671. ChangePhoneme(s)
  672. ELIF nextPh(isVowel) OR nextPh(w/) THEN
  673. ChangePhoneme(z)
  674. ELSE
  675. ChangePhoneme(NULL)
  676. ENDIF
  677. endphoneme