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

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