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

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