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

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