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

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