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

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