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

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