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

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992
  1. //====================================================
  2. // French
  3. //====================================================
  4. // Updated 2010-07-25 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) 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) 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 a# // For english words
  235. import_phoneme en/a#
  236. endphoneme
  237. phoneme e
  238. vowel starttype #e endtype #e
  239. IF nextPh(l/) THEN
  240. VowelEnding(l/xl, -20)
  241. ELIF nextPh(isVowel) THEN
  242. length 200
  243. ELSE
  244. length 170
  245. ENDIF
  246. FMT(vowel/e_8)
  247. endphoneme
  248. phoneme E
  249. vowel starttype #e endtype #e
  250. IF nextPhW(j) THEN
  251. length 190
  252. ELSE
  253. length 170
  254. ENDIF
  255. FMT(vowel/e_mid)
  256. endphoneme
  257. phoneme i
  258. vowel starttype #i endtype #i
  259. palatal
  260. IF prevPhW(r/2) OR prevPhW(l/2) THEN
  261. IF nextPhW(isVowel) THEN
  262. length 240
  263. ENDIF
  264. ELIF prevPhW(#r) AND nextPhW(isVowel) THEN
  265. IF nextPhW(#i) THEN
  266. length 220
  267. IfNextVowelAppend(;)
  268. ELSE
  269. ChangePhoneme(j/)
  270. ENDIF
  271. ELIF nextPhW(isVowel) THEN
  272. ChangePhoneme(j)
  273. ELSE
  274. length 160
  275. IfNextVowelAppend(;)
  276. ENDIF
  277. FMT(vowel/i_8)
  278. endphoneme
  279. phoneme I // For english words
  280. import_phoneme en/I
  281. endphoneme
  282. phoneme I2 // For english words
  283. import_phoneme en/I2
  284. endphoneme
  285. phoneme j/ // Short "i" between "r" and a vowel
  286. vowel starttype #i endtype #i
  287. length 100
  288. // unstressed
  289. NextVowelStarts
  290. VowelStart(j/j@)
  291. VowelStart(j/ja)
  292. VowelStart(j/je)
  293. VowelStart(j/ji)
  294. VowelStart(j/jo)
  295. VowelStart(j/ju)
  296. EndSwitch
  297. FMT(vwl_fr/j)
  298. endphoneme
  299. phoneme o
  300. vowel starttype #o endtype #o
  301. IF nextPh(isVowel) THEN
  302. length 220
  303. ELSE
  304. length 170
  305. ENDIF
  306. IF thisPh(isFinalVowel) THEN
  307. FMT(vowel/o_8)
  308. ELSE
  309. FMT(vowel/o)
  310. ENDIF
  311. endphoneme
  312. phoneme O
  313. vowel starttype #o endtype #o
  314. length 170
  315. IF thisPh(isFinalVowel) THEN
  316. FMT(vowel/o_mid2)
  317. ENDIF
  318. IF nextPhW(#l) AND next2Ph(isNotVowel) THEN
  319. FMT(vowel/o_mid2)
  320. ENDIF
  321. IF nextPhW(#r) AND next2Ph(isNotVowel) THEN
  322. FMT(vowel/o_mid2)
  323. ENDIF
  324. FMT(vowel/o_mid)
  325. endphoneme
  326. phoneme oU
  327. import_phoneme en/oU
  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 W2 // For english words
  358. vowel starttype #@ endtype #@
  359. length 100
  360. unstressed
  361. FMT(vowel/@_6)
  362. endphoneme
  363. phoneme Y
  364. vowel starttype #@ endtype #@
  365. length 170
  366. FMT(vowel/y#)
  367. endphoneme
  368. phoneme w
  369. vowel starttype #u endtype #u
  370. IF prevPh(#r) OR prevPhW(#l) THEN
  371. NextVowelStarts
  372. VowelStart(w/w@)
  373. VowelStart(vwl_fr/wa)
  374. VowelStart(w/we)
  375. VowelStart(w/wi)
  376. VowelStart(w/wo)
  377. VowelStart(w/wu)
  378. EndSwitch
  379. ELSE
  380. ChangePhoneme(w/)
  381. ENDIF
  382. endphoneme
  383. phoneme w/
  384. liquid
  385. lengthmod 7
  386. IF nextPh(isVowel) THEN
  387. NextVowelStarts
  388. VowelStart(w/w@)
  389. VowelStart(vwl_fr/wa)
  390. VowelStart(w/we)
  391. VowelStart(w/wi)
  392. VowelStart(w/wo)
  393. VowelStart(w/wu)
  394. EndSwitch
  395. VowelEnding(w/xw, -30)
  396. IF prevPh(isPause) THEN
  397. FMT(w/_w)
  398. ELSE
  399. FMT(w/_w)
  400. ENDIF
  401. ELSE
  402. // no vowel follows
  403. Vowelout len=50
  404. IF prevPh(#i) THEN
  405. FMT(w/iw_)
  406. ENDIF
  407. FMT(w/w_)
  408. ENDIF
  409. endphoneme
  410. phoneme A~
  411. vowel starttype #a endtype #a
  412. length 190
  413. FMT(vnasal/aa_n4)
  414. endphoneme
  415. phoneme E~ // same as W~ for fr-fr
  416. vowel starttype #e endtype #e
  417. length 190
  418. IF nextPh(n2) THEN
  419. FMT(vowel/e_mid)
  420. ENDIF
  421. FMT(vnasal/W_n)
  422. endphoneme
  423. phoneme O~
  424. vowel starttype #o endtype #o
  425. length 190
  426. FMT(vnasal/o_n2)
  427. endphoneme
  428. phoneme W~
  429. vowel starttype #@ endtype #@
  430. length 190
  431. FMT(vnasal/W_n)
  432. endphoneme
  433. // These vowels map to others in fr-fr, but are distinct in fr-ca
  434. phoneme U // same as [u]
  435. import_phoneme fr/u
  436. endphoneme
  437. phoneme y" // same as [y]
  438. import_phoneme fr/y
  439. endphoneme
  440. phoneme E: // slightly longer than [E]
  441. import_phoneme E
  442. endphoneme
  443. phoneme A // same as [a]
  444. import_phoneme a
  445. endphoneme
  446. // CONSONANTS
  447. //===========
  448. // uses the consonants in file "phonemes", unless overridden here
  449. phoneme b
  450. vcd blb stop
  451. starttype #cFR endtype #cFR
  452. voicingswitch p
  453. lengthmod 6
  454. Vowelin f1=2 f2=1000 -300 -200 f3=-100 100
  455. Vowelout f1=2 f2=1000 -500 -300 f3=-300 80 brk
  456. IF KlattSynth THEN
  457. Vowelin f1=1 f2=1000 -500 -300 f3=-300 80
  458. IF nextPh(isPause2) THEN
  459. FMT(klatt/b) addWav(x/b_)
  460. ENDIF
  461. FMT(klatt/b) addWav(x/b)
  462. ENDIF
  463. IF PreVoicing THEN
  464. IF nextPhW(#r) THEN
  465. FMT(b/xbr)
  466. ELSE
  467. FMT(b/xb)
  468. ENDIF
  469. ENDIF
  470. IF nextPh(isPause2) OR nextPh(l) THEN
  471. FMT(b/b_) addWav(x/b_)
  472. ELIF nextPh(l/) THEN
  473. FMT(b/b)
  474. ELIF nextPh(#r) THEN
  475. FMT(b/br) addWav(x/b, 50)
  476. ENDIF
  477. FMT(b/b) addWav(x/b, 70)
  478. endphoneme
  479. phoneme d
  480. vcd alv stop
  481. starttype #cFR endtype #cFR
  482. voicingswitch t
  483. lengthmod 5
  484. Vowelin f1=1 f2=1700 -300 300 f3=-100 80 amp=20
  485. Vowelout f1=2 f2=1700 -300 300 f3=-100 80
  486. IF PreVoicing THEN
  487. IF nextPhW(#r) THEN
  488. FMT(d/xdr)
  489. ELSE
  490. FMT(d/xd)
  491. ENDIF
  492. ENDIF
  493. IF nextPh(isPause2) THEN
  494. FMT(d/d_) addWav(x/d_, 50)
  495. ELIF nextPhW(#r) THEN
  496. FMT(d/dr) addWav(x/d_, 50)
  497. ENDIF
  498. FMT(d/d) addWav(x/d, 40)
  499. endphoneme
  500. phoneme f
  501. vls lbd frc
  502. starttype #cFR endtype #cFR
  503. voicingswitch v
  504. lengthmod 3
  505. Vowelout f1=0 f2=1000 -500 -350 f3=-200 100
  506. IF nextPh(isPause) THEN
  507. WAV(ufric/f_)
  508. ENDIF
  509. WAV(ufric/f, 80)
  510. endphoneme
  511. phoneme g
  512. vcd vel stop
  513. starttype #cFR endtype #cFR
  514. voicingswitch k
  515. lengthmod 5
  516. Vowelin f1=2 f2=2300 200 300 f3=-300 80
  517. Vowelout f1=1 f2=2300 250 300 f3=-300 80 brk
  518. IF PreVoicing THEN
  519. IF nextPhW(#r) THEN
  520. FMT(g/xgr)
  521. ELSE
  522. FMT(g/xg)
  523. ENDIF
  524. ENDIF
  525. IF nextPh(isPause2) THEN
  526. FMT(g/g_) addWav(x/g_)
  527. ELIF nextPhW(#r) THEN
  528. FMT(g/gr) addWav(x/g, 20)
  529. ENDIF
  530. FMT(g/g) addWav(x/g, 20)
  531. endphoneme
  532. phoneme k
  533. vls vel stop
  534. starttype #cFR endtype #cFR
  535. voicingswitch g
  536. length 50
  537. lengthmod 2
  538. Vowelin f1=0 f2=2300 200 400 f3=-100 80
  539. Vowelout f1=0 f2=2300 300 400 f3=-100 80 rms=20
  540. IF nextPh(isPause2) THEN
  541. WAV(ustop/k_)
  542. ELIF nextPh(#i) OR nextPh(;) THEN
  543. WAV(ustop/ki, 45)
  544. ELIF nextPh(#l) THEN
  545. WAV(ustop/kl, 40)
  546. ELIF nextPh(#r) THEN
  547. length 45
  548. WAV(ustop/k, 50)
  549. ENDIF
  550. WAV(ustop/k, 40)
  551. endphoneme
  552. phoneme n2
  553. vcd alv nasal
  554. IF nextPh(w) OR nextPh(isVowel) THEN
  555. ChangePhoneme(n)
  556. ELSE
  557. ChangePhoneme(NULL)
  558. ENDIF
  559. endphoneme
  560. phoneme p
  561. vls blb stop
  562. starttype #cFR endtype #cFR
  563. voicingswitch b
  564. lengthmod 2
  565. Vowelin f1=0 f2=1000 -50 -100 f3=-200 80 amp=11
  566. Vowelout f1=0 f2=1000 -500 -350 f3=-300 80 rms=22
  567. IF nextPh(isPause2) THEN
  568. WAV(ustop/p_, 80)
  569. ELIF nextPh(@-) THEN
  570. WAV(ustop/p_unasp, 70)
  571. ELIF nextPh(#l) THEN
  572. WAV(ustop/pl, 40)
  573. ELIF nextPh(#r) THEN
  574. length 40
  575. WAV(ustop/p_, 70)
  576. ENDIF
  577. WAV(ustop/p_unasp_, 90)
  578. endphoneme
  579. phoneme p2 // silent unless followed by vowel
  580. vls blb stop
  581. lengthmod 2
  582. Vowelin f1=0 f2=1000 -50 -100 f3=-200 80 amp=11
  583. Vowelout f1=0 f2=1000 -500 -350 f3=-300 80 rms=22
  584. IF nextPh(isNotVowel) THEN
  585. ChangePhoneme(NULL)
  586. ENDIF
  587. WAV(ustop/p, 45)
  588. endphoneme
  589. phoneme s
  590. vls alv frc sibilant
  591. voicingswitch z
  592. lengthmod 3
  593. Vowelin f1=0 f2=1700 -300 300 f3=-100 80
  594. Vowelout f1=0 f2=1700 -300 250 f3=-100 80 rms=20
  595. IF nextPh(isPause) THEN
  596. WAV(ufric/s_, 45)
  597. ELIF nextPh(p) OR nextPh(t) OR nextPh(k) THEN
  598. WAV(ufric/s!, 45)
  599. ENDIF
  600. WAV(ufric/s, 45)
  601. endphoneme
  602. phoneme S
  603. vls pla frc sibilant
  604. starttype #cFR endtype #cFR
  605. voicingswitch Z
  606. lengthmod 3
  607. Vowelin f1=0 f2=1900 100 300 f3=-100 80
  608. Vowelout f1=0 f2=1900 100 300 f3=-100 80
  609. IF prevPhW(t) THEN
  610. length 60
  611. ENDIF
  612. IF nextPh(isPause) THEN
  613. WAV(ufric/sh_, 45)
  614. ENDIF
  615. WAV(ufric/sh, 45)
  616. endphoneme
  617. phoneme t
  618. vls alv stop
  619. starttype #cFR endtype #cFR
  620. voicingswitch d
  621. lengthmod 2
  622. Vowelin f1=0 f2=1700 -300 300 f3=-100 80
  623. Vowelout f1=0 f2=1700 -300 250 f3=-100 80 rms=20
  624. IF nextPh(isPause2) THEN
  625. WAV(ustop/t_, 40)
  626. ELIF nextPh(#r) THEN
  627. length 40
  628. WAV(ustop/t_short_, 40)
  629. ENDIF
  630. WAV(ustop/t_short, 40)
  631. endphoneme
  632. phoneme t2 // silent unless followed by vowel
  633. vls alv stop
  634. Vowelin f1=0 f2=1600 -300 300 f3=-100 80
  635. Vowelout f1=0 f2=1600 -300 250 f3=-100 80 rms=20
  636. lengthmod 2
  637. IF nextPh(isVowel) OR nextPh(w) OR nextPh(j) THEN
  638. WAV(ustop/t_short, 30)
  639. ELSE
  640. ChangePhoneme(NULL)
  641. ENDIF
  642. endphoneme
  643. phoneme t3 // silent unless followed by vowel or pause
  644. vls alv stop
  645. lengthmod 2
  646. IF nextPh(isPause) THEN
  647. ChangePhoneme(t)
  648. ELIF nextPh(isNotVowel) THEN
  649. ChangePhoneme(NULL)
  650. ELSE
  651. ChangePhoneme(t2)
  652. ENDIF
  653. endphoneme
  654. phoneme v
  655. vcd lbd frc
  656. starttype #cFR endtype #cFR
  657. voicingswitch f
  658. lengthmod 6
  659. length 90
  660. Vowelin f1=0 f2=1000 -300 -200 f3=-300 100
  661. Vowelout f1=0 f2=1000 -500 -300 f3=-300 100
  662. IF KlattSynth THEN
  663. CALL base/v
  664. RETURN
  665. ENDIF
  666. IF nextPh(isPause2) THEN
  667. FMT(voc/v_) addWav(vocw/v)
  668. ENDIF
  669. IF thisPh(isWordStart) AND nextPhW(isLiquid) THEN
  670. Length 70
  671. ELIF nextPhW(w/) OR nextPhW(#r) THEN
  672. Length 60
  673. ENDIF
  674. FMT(voc/v) addWav(vocw/v, 60)
  675. endphoneme
  676. phoneme V // For english words
  677. vowel starttype #a endtype #@
  678. length 140
  679. ChangeIfDiminished(@)
  680. FMT(vowel/V_2)
  681. endphoneme
  682. phoneme z
  683. vcd alv frc sibilant
  684. voicingswitch s
  685. lengthmod 6
  686. Vowelout f1=0 f2=1700 -300 300 f3=-100 60 len=50
  687. IF nextPhW(z) THEN
  688. FMT(d/xd)
  689. ENDIF
  690. IF nextPh(isPause2) OR nextPh(isPause) THEN
  691. FMT(voc/z_) addWav(ufric/s_, 45)
  692. ENDIF
  693. IF prevPhW(t) THEN
  694. length 60
  695. ENDIF
  696. FMT(voc/z) addWav(ufric/s_, 45)
  697. endphoneme
  698. phoneme z2 // silent unless followed by vowel
  699. vcd alv frc sibilant
  700. IF nextPh(isVowel) OR nextPh(w/) OR nextPh(j) THEN
  701. Length 70
  702. FMT(voc/z) addWav(ufric/s, 40)
  703. ELSE
  704. ChangePhoneme(NULL)
  705. ENDIF
  706. endphoneme
  707. phoneme z3 // "six" and "dix". [s] before pause, [z] before vowel, else []
  708. vcd alv frc sibilant
  709. IF nextPh(isPause) THEN
  710. ChangePhoneme(s)
  711. ELIF nextPh(isVowel) OR nextPh(w/) THEN
  712. ChangePhoneme(z)
  713. ELSE
  714. ChangePhoneme(NULL)
  715. ENDIF
  716. endphoneme
  717. // translate from English to French phonemes
  718. equivalents en
  719. remove_stress
  720. 0 O
  721. 3 W r
  722. 3: W : r
  723. @ W
  724. @- W
  725. @2 W
  726. @5 W
  727. @L W l
  728. a a
  729. a# a#
  730. A: a :
  731. A@ a r
  732. aa a :
  733. aI a j
  734. aI@ a j W2 r
  735. aU a w
  736. aU@ a w @
  737. A~ A~
  738. E E
  739. e: e
  740. e@ E : r
  741. eI E : j/
  742. i i
  743. I I
  744. I2 I2
  745. i: i :
  746. i@ i r
  747. i@3 i : r
  748. O O
  749. O: O :
  750. o: o
  751. O@ O r
  752. o@ O r
  753. OI O j
  754. oU oU
  755. O~ O~
  756. U u
  757. u: u:
  758. U@ u r
  759. V V
  760. IR i r
  761. VR W r
  762. b b
  763. C C
  764. d d
  765. D D
  766. dZ dZ
  767. f f
  768. g g
  769. h h
  770. j j
  771. k k
  772. l l
  773. l# l#
  774. m m
  775. n n
  776. N N
  777. n^ n^
  778. p p
  779. Q Q
  780. r r
  781. r- r
  782. s s
  783. S S
  784. t t
  785. T T
  786. t2 t
  787. tS tS
  788. v v
  789. w w/
  790. x x
  791. z z
  792. Z Z
  793. endphoneme