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_danish 15KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711
  1. // PB General rules for vowels:
  2. // Short vowels
  3. // ACC: Short "pille" [p?el@-]
  4. // AC[V]: Short "piler" [p?ilV]
  5. // A[N]: Short "bange" [b?AN@-]
  6. // Long vowels
  7. // A + group #@ OR group #e: Long "ae" "aer" [&:@-]
  8. // AC + group #@ OR group #e: Long "pile" [pi:l@-]
  9. // AC[i]: Long "smidig" [smi:Di]
  10. phoneme @
  11. vowel starttype #@ endtype #@
  12. unstressed
  13. length 60
  14. FMT(vowel/@_3)
  15. endphoneme
  16. phoneme @- // very short schwa
  17. vowel starttype #@ endtype #@
  18. unstressed nonsyllabic
  19. ipa ə
  20. IF nextPhW(*) OR nextPhW(r) THEN
  21. ipa NULL // @-* is used to make 'r'
  22. ENDIF
  23. length 40
  24. FMT(vowel/@-)
  25. endphoneme
  26. // ToDo: change [@] to [a#] if adjacent to [r] or [R]
  27. phoneme 3
  28. vowel starttype #a endtype #a
  29. unstressed
  30. length 40
  31. FMT(vowel/a#_3)
  32. endphoneme
  33. // PB sort of schwa [ɐ] (0250+032F)
  34. // "spurgt" [sp'o3-d] – ipa [spˈoɐ̯d]
  35. phoneme 3- // used for 'r' after a vowel (to create a diphthong)
  36. liquid
  37. lengthmod 7
  38. ipa ɐ̯
  39. FMT(r/a_)
  40. endphoneme
  41. phoneme i
  42. vowel starttype #i endtype #i
  43. length 90 //150
  44. // PB long vowel followed by consonant and certain vowels "gide"
  45. IF nextPhW(isNotVowel) AND next2PhW(#@) OR next2PhW(#e) THEN
  46. length 150
  47. ENDIF
  48. // "gider" TEST
  49. IF nextPhW(D) AND next2PhW(V) OR next2PhW(?V) THEN
  50. length 90
  51. ENDIF
  52. // PB long vowel followed by certain vowels - "pigen" [p'i@-n]
  53. IF nextPhW(#@) OR nextPhW(#e) THEN
  54. length 150
  55. ENDIF
  56. // Only this vowel (in this case [i])
  57. IF thisPh(isFinalVowel) AND thisPh(isWordEnd) AND thisPh(isWordStart) OR prevPhW(_) THEN
  58. length 150
  59. ENDIF
  60. // This vowel is word end - longer because it sounds too short
  61. // "sig", "si"
  62. IF thisPh(isWordEnd) THEN
  63. length 120
  64. ENDIF
  65. // "vilje" - short followed by 2 consonants
  66. IF nextPhW(isNotVowel) AND next2PhW(isNotVowel) THEN
  67. length 90
  68. ENDIF
  69. // PB "tie", "stige", "krige" vowel + vowel: extra length
  70. // What is causing this very short [i] in words with final [@-]?
  71. // NOT "galleriet" [g,?&lVR'i@-D] NOT "krigen" [kR'i@-n]
  72. IF nextPhW(3) OR nextPhW(V) OR nextPhW(@) OR nextPhW(@-) AND NOT next2PhW(D) AND NOT next2PhW(n) THEN
  73. length 240
  74. ENDIF
  75. FMT(vowel/i_4)
  76. endphoneme
  77. // PB short i
  78. // sviret vs. svirret
  79. phoneme ?i
  80. vowel starttype #i endtype #i
  81. length 90
  82. IfNextVowelAppend(;)
  83. FMT(vowel/i_4)
  84. endphoneme
  85. // PB English i - Tim
  86. phoneme I
  87. vowel starttype #i endtype #i
  88. length 130
  89. IfNextVowelAppend(;)
  90. FMT(vowel/ii_2)
  91. endphoneme
  92. phoneme e
  93. vowel starttype #e endtype #e
  94. length 90 //150
  95. // "delte", "mente"
  96. IF nextPhW(#e) OR nextPhW(#@) OR next2PhW(#e) OR next2PhW(#@) THEN
  97. length 150
  98. ENDIF
  99. // PB "ring", "ringe"
  100. IF nextPhW(N) THEN
  101. length 90
  102. ENDIF
  103. // PB "enig", "enige", "evig"
  104. IF nextPhW(isNotVowel) AND next2PhW(i) THEN
  105. length 150
  106. ENDIF
  107. // Only "e"
  108. IF thisPh(isWordEnd) AND thisPh(isWordStart) THEN
  109. length 150
  110. ENDIF
  111. // "nedladende" [n'eDl&D@-n@-] - before 2 consonants: short
  112. IF nextPhW(isNotVowel) AND next2PhW(isNotVowel) THEN
  113. length 90
  114. ENDIF
  115. FMT(vowel/e)
  116. endphoneme
  117. // PB short e
  118. // "skille" vs. "skele", "pille" vs. "pile"
  119. phoneme ?e
  120. vowel starttype #e endtype #e
  121. length 90
  122. FMT(vowel/e)
  123. endphoneme
  124. phoneme E
  125. vowel starttype #e endtype #e
  126. length 90 //150
  127. // "værelse", "breve"
  128. IF nextVowel(3) OR nextVowel(V) OR nextVowel(@) OR nextVowel(@-) THEN
  129. // length 150
  130. ENDIF
  131. // "ræve"
  132. IF nextVowel(#@) OR nextVowel(#e) THEN
  133. length 150
  134. ENDIF
  135. // "ære", "kærester", "ærefrygt" - longer E
  136. IF nextPhW(V) THEN
  137. length 180
  138. ENDIF
  139. // Only the letter "æ" - long
  140. IF thisPh(isWordEnd) AND thisPh(isWordStart) THEN
  141. length 150
  142. ENDIF
  143. // "stædig" [st'EDi] long
  144. IF nextPhW(isNotVowel) AND next2PhW(i) THEN
  145. length 150
  146. ENDIF
  147. // "længe" - short - 2 consonants => 1 consonant
  148. IF nextPhW(N) THEN
  149. length 90
  150. ENDIF
  151. // "værelse" [v'E3-Vls@_!]
  152. IF nextPhW(3-) AND next2PhW(V) THEN
  153. length 90
  154. ENDIF
  155. // "mælkebøtte" - short followed by 2 consonants
  156. IF nextPhW(isNotVowel) AND next2PhW(isNotVowel) THEN
  157. length 90
  158. ENDIF
  159. FMT(vowel/e_mid2)
  160. endphoneme
  161. // PB short E
  162. // "læsse" vs. "læse"
  163. phoneme ?E
  164. vowel starttype #e endtype #e
  165. length 90
  166. // PB "færre" [f'?EV] - a bit longer because og the missing [ɐ] [ˈfæɐ̯ʌ]
  167. // Changed now [f'?E3-V] but it won't do any harm
  168. IF nextPhW(V) THEN
  169. length 120
  170. ENDIF
  171. FMT(vowel/e_mid2)
  172. endphoneme
  173. phoneme &
  174. vowel starttype #e endtype #e
  175. ipa a
  176. length 90 //150
  177. // "same", "sale", "bade" - consonant + gooup #e or group #@: long
  178. IF next2PhW(#@) OR next2PhW(#e) THEN
  179. length 150
  180. ENDIF
  181. // ThisPh + gooup #e or group #@
  182. // "ae", "aer" vowel + vowel: extra length
  183. IF nextPhW(#@) OR nextPhW(#e) THEN
  184. length 240
  185. ENDIF
  186. // This vowel is word end - longer because it sounds too short
  187. // "ja", "Omaha"
  188. IF thisPh(isWordEnd) THEN
  189. length 120
  190. ENDIF
  191. // Only this vowel (in this case [&])
  192. IF thisPh(isFinalVowel) AND thisPh(isWordEnd) AND thisPh(isWordStart) OR prevPhW(_) THEN
  193. length 150
  194. ENDIF
  195. // "stadig" [st&Di], "stadigt" [st&Dit]
  196. IF nextPhW(isNotVowel) AND next2PhW(i) THEN
  197. length 180
  198. ENDIF
  199. // "Alfie", "alfer" - short before 2 consonants
  200. IF nextPhW(isNotVowel) AND next2PhW(isNotVowel) THEN
  201. length 90
  202. ENDIF
  203. FMT(vowel/ee_2)
  204. endphoneme
  205. // PB Short &
  206. // e.g. the last a in "staldkarl"
  207. // "sale" vs. "sal"
  208. phoneme ?&
  209. ipa a
  210. vowel starttype #e endtype #e
  211. length 90
  212. FMT(vowel/ee_2)
  213. endphoneme
  214. // PB added for the æ in "dræbt"
  215. phoneme &#
  216. vowel starttype #e endtype #e
  217. length 120
  218. IF NOT next2Ph(3) AND NOT next2Ph(V) AND NOT next2PhW(@-) AND nextPhW(isNotVowel) THEN
  219. glstop
  220. length 90
  221. ENDIF
  222. IF nextPhW(3) OR nextPhW(V) OR nextPhW(@) THEN
  223. length 150
  224. ENDIF
  225. FMT(vowel/&)
  226. endphoneme
  227. // PB short &#
  228. // "revl" vs. "tremme"
  229. phoneme ?&#
  230. vowel starttype #e endtype #e
  231. length 90
  232. FMT(vowel/&)
  233. endphoneme
  234. //phoneme a
  235. // vowel starttype #a endtype #a
  236. // length 90 //150
  237. //IF nextPhW(#@) OR nextPhW(#e) THEN
  238. // length 150
  239. //ENDIF
  240. // FMT(vowel/a_2)
  241. //endphoneme
  242. // PB short (glottal) a
  243. // "bragt"
  244. //phoneme ?a
  245. // vowel starttype #a endtype #a
  246. // length 90
  247. // FMT(vowel/a_2)
  248. //endphoneme
  249. phoneme A // PB changed to a_8
  250. vowel starttype #a endtype #a
  251. length 90 //150
  252. // PB long vowel followed by consonant and certain vowels - "drabelig"
  253. IF nextPhW(isNotVowel) AND next2PhW(#@) OR next2PhW(#e) THEN
  254. length 150
  255. ENDIF
  256. // "far", "bastard" - a bit longer followed by [r]
  257. IF nextPhW(r) AND nextPhW(isWordEnd) THEN
  258. length 120
  259. ENDIF
  260. // "bange" [bAN@-] - [N] = 2 consonants (ng) => short
  261. IF nextPhW(N) THEN
  262. length 90
  263. ENDIF
  264. FMT(vowel/a_8)
  265. endphoneme
  266. // PB short A
  267. // "drab" vs. "drabelig"
  268. phoneme ?A
  269. vowel starttype #a endtype #a
  270. length 90
  271. // "straffeattest", "straffe", "rapid" - a bit longer after R
  272. IF prevPhW(R) AND nextPhW(isNotVowel) AND next2PhW(isVowel) THEN
  273. length 110
  274. ENDIF
  275. FMT(vowel/a_8)
  276. endphoneme
  277. phoneme u
  278. vowel starttype #u endtype #u
  279. length 90 //150
  280. // Short vowel followed by consonant and NOT consonant + 3 or V or @
  281. // "blus" vs. "bluse" and "bluser"
  282. IF NOT next2PhW(3) AND NOT next2PhW(V) AND NOT next2PhW(@) AND NOT next2PhW(@-) AND nextPhW(isNotVowel) THEN
  283. // glstop
  284. // length 90
  285. ENDIF
  286. // "suge", "uge", bluse
  287. IF nextPhW(#e) OR nextPhW(#@) OR next2PhW(#e) OR next2PhW(#@)THEN
  288. length 150
  289. ENDIF
  290. // extra length followed by 3 or V or @
  291. IF nextPhW(3) OR nextPhW(V) OR nextPhW(@) OR nextPhW(@-) THEN
  292. // length 240
  293. ENDIF
  294. // "umulig"
  295. IF nextVowel(i) AND nextVowel(isFinalVowel) AND nextVowel(isWordEnd) THEN
  296. length 180
  297. ENDIF
  298. // Only "u"
  299. IF thisPh(isWordEnd) AND thisPh(isWordStart) THEN
  300. length 150
  301. ENDIF
  302. FMT(vowel/u_bck)
  303. endphoneme
  304. // PB glottal u
  305. // "tude" vs. "tuden" - [tuD3] [t?uD@n]
  306. phoneme ?u
  307. vowel starttype #u endtype #u
  308. length 90
  309. FMT(vowel/u_bck)
  310. endphoneme
  311. phoneme o
  312. vowel starttype #o endtype #o
  313. length 150
  314. IF NOT next2PhW(3) AND NOT next2PhW(V) AND NOT next2PhW(@) AND NOT next2PhW(@-) AND nextPhW(isNotVowel) THEN
  315. glstop
  316. length 90
  317. ENDIF
  318. // "tro"
  319. IF thisPh(isFinalVowel) AND thisPh(isWordEnd) THEN
  320. length 90
  321. ENDIF
  322. IF nextPhW(3) OR nextPhW(V) OR nextPhW(@) THEN
  323. length 150
  324. ENDIF
  325. // "modig" - long vowel after consonant + [i]
  326. IF nextVowel(3) OR nextVowel(V) OR nextVowel(@) OR nextVowel(i) THEN
  327. length 150
  328. ENDIF
  329. FMT(vowel/o_2)
  330. endphoneme
  331. // PB Short o
  332. // "patron" vs. "kone"
  333. phoneme ?o
  334. vowel starttype #o endtype #o
  335. length 95
  336. FMT(vowel/o_2)
  337. endphoneme
  338. phoneme O
  339. vowel starttype #o endtype #o
  340. length 90 // 150
  341. // PB "sove", "sover" - consonant + #e or #@: long
  342. IF next2PhW(#@) OR next2PhW(#e) THEN
  343. length 150
  344. ENDIF
  345. // PB "gået" - ThisPh + #e or #@
  346. IF nextPhW(#e) OR nextPhW(#@) THEN
  347. length 150
  348. ENDIF
  349. // "rådig"
  350. IF nextVowel(i) AND nextVowel(isFinalVowel) THEN
  351. length 180
  352. ENDIF
  353. FMT(vowel/o_5)
  354. endphoneme
  355. // PB Experimental glottal O
  356. // "toget" vs. "tåget"
  357. phoneme ?O
  358. vowel starttype #o endtype #o
  359. length 90
  360. FMT(vowel/o_5)
  361. endphoneme
  362. phoneme V
  363. vowel starttype #@ endtype #@
  364. length 150
  365. // "sport" [spV:t]
  366. IF NOT next2PhW(3) AND NOT next2PhW(V) AND NOT next2PhW(@) AND NOT next2PhW(@-) AND nextPhW(isNotVowel) THEN
  367. glstop
  368. length 90
  369. ENDIF
  370. IF nextPh(3) OR nextPh(V) OR nextPh(@) THEN
  371. length 150
  372. ENDIF
  373. // PB short V in "holder", "solder"
  374. IF nextPhW(isNotVowel) AND next2Ph(V) THEN
  375. length 90
  376. ENDIF
  377. // PB "snorke", "snorker", årlig
  378. IF next2PhW(3) OR next2PhW(V) OR next2PhW(@) OR next2PhW(i) THEN
  379. length 180
  380. ENDIF
  381. // "sove" [sVw3] - longer followed by w + 3
  382. IF nextPhW(w) AND next2PhW(3) THEN
  383. length 220
  384. ENDIF
  385. FMT(vowel/V_4)
  386. endphoneme
  387. // PB Short å
  388. // "forstår" vs. "kåre"
  389. phoneme ?V
  390. vowel starttype #@ endtype #@
  391. length 100
  392. FMT(vowel/V_4)
  393. endphoneme
  394. phoneme 0
  395. vowel starttype #o endtype #o
  396. length 150
  397. IF NOT next2PhW(3) AND NOT next2PhW(V) AND NOT next2PhW(@-) AND nextPhW(isNotVowel) THEN
  398. glstop
  399. length 90
  400. ENDIF
  401. IF nextPhW(3) OR nextPhW(V) OR nextPhW(@) THEN
  402. length 150
  403. ENDIF
  404. FMT(vowel/oo_2)
  405. endphoneme
  406. // ?B short 0 "sukker"
  407. phoneme ?0
  408. vowel starttype #o endtype #o
  409. length 90
  410. FMT(vowel/oo_2)
  411. endphoneme
  412. phoneme y
  413. vowel starttype #i endtype #i
  414. // Length changed to short since most vowels are short.
  415. // It's probably easier only to make rules for long vowels.
  416. length 90 //150
  417. // PB long vowel followed by consonant and certain vowels
  418. // "lyde", "lyder"
  419. IF nextPhW(isNotVowel) AND next2PhW(#@) OR next2PhW(#e) THEN
  420. length 150
  421. ENDIF
  422. // Only this vowel (in this case [y])
  423. IF thisPh(isFinalVowel) AND thisPh(isWordEnd) AND thisPh(isWordStart) THEN
  424. length 150
  425. ENDIF
  426. // "dydig" [dyDi]
  427. IF nextPhW(isNotVowel) AND next2PhW(i) THEN
  428. length 150
  429. ENDIF
  430. // "syge" [sy3] vowel + vowel: extra length, but NOT "fyret" [fyVD]
  431. IF nextPhW(#e) OR nextPhW(#@) AND NOT next2PhW(D) THEN
  432. length 200
  433. ENDIF
  434. // "tyve"
  435. IF nextPhW(?u) AND next2PhW(@-) THEN
  436. length 150
  437. ENDIF
  438. FMT(vowel/y)
  439. endphoneme
  440. // PB Short y
  441. // "kylling" vs. "kyle", "krybbe" vs. "krybe"
  442. phoneme ?y
  443. vowel starttype #i endtype #i
  444. length 90
  445. FMT(vowel/y)
  446. endphoneme
  447. phoneme Y
  448. vowel starttype #i endtype #i
  449. length 150
  450. IF NOT next2Ph(3) AND NOT next2Ph(V) AND NOT next2PhW(@-) AND nextPhW(isNotVowel) THEN
  451. glstop
  452. length 90
  453. ENDIF
  454. IF nextPhW(3) OR nextPhW(V) OR nextPhW(@) THEN
  455. length 150
  456. ENDIF
  457. FMT(vowel/yy)
  458. endphoneme
  459. phoneme W
  460. vowel starttype #@ endtype #@
  461. length 99 //160
  462. // "kløe" vowel + vowel: extra length
  463. IF nextPhW(#@) OR nextPhW(#e) THEN
  464. length 220
  465. ENDIF
  466. // røde" W + 1 consonant + 3 or W or @
  467. IF next2PhW(#@) OR next2PhW(#e) THEN
  468. length 160
  469. ENDIF
  470. // "røveri" TEST
  471. IF next2PhW(V) OR next2PhW(?V) THEN
  472. length 90
  473. ENDIF
  474. // PB "nødig", "nødigt", "kølige"
  475. IF nextVowel(i) THEN
  476. length 160
  477. ENDIF
  478. // "møve" [mWw@-]
  479. IF nextPhW(w) AND nextVowel(@-) THEN
  480. length 160
  481. ENDIF
  482. // "børnebog"
  483. IF nextPhW(r) AND next2PhW(n) AND nextVowel(@-) THEN
  484. length 150
  485. ENDIF
  486. FMT(vowel/oe)
  487. endphoneme
  488. // PB short W
  489. // "prøv" vs. "prøve"
  490. phoneme ?W
  491. vowel starttype #@ endtype #@
  492. length 95
  493. FMT(vowel/oe)
  494. endphoneme
  495. // PB added for the ø in "røv", "røg", "øje" instead of [V3]
  496. phoneme W#
  497. vowel starttype #@ endtype #@
  498. length 90 //150
  499. IF NOT next2Ph(3) AND NOT next2Ph(V) AND NOT next2PhW(@-) AND nextPhW(isNotVowel) THEN
  500. glstop
  501. // length 90
  502. ENDIF
  503. // PB long vowel followed by consonant and certain vowels
  504. IF nextPhW(isNotVowel) AND next2PhW(@-) OR next2PhW(@) OR next2PhW(3) OR next2PhW(V) OR next2PhW(?V) THEN
  505. length 150
  506. ENDIF
  507. FMT(vowel/V)
  508. endphoneme
  509. // PB short W#
  510. // "rømme"
  511. phoneme ?W#
  512. vowel starttype #@ endtype #@
  513. length 90
  514. FMT(vowel/V)
  515. endphoneme
  516. phoneme aI
  517. vowel starttype #a endtype #i
  518. length 300
  519. IF NOT next2Ph(3) AND NOT next2Ph(V) AND NOT next2Ph(@-) AND nextPhW(isNotVowel) THEN
  520. glstop
  521. length 150
  522. ENDIF
  523. // "dreje" [dR'aI@-_!]
  524. IF nextPhW(3) OR nextPhW(V) OR nextPhW(@) OR nextPhW(@-) THEN
  525. length 280
  526. ENDIF
  527. // PB "drej" vs. "dreje"
  528. IF thisPh(isWordEnd) THEN
  529. length 140
  530. ENDIF
  531. // "lejde" [l'aId@-_!], "lejder" [l'aIdV_!]
  532. IF nextPhW(isNotVowel) AND next2PhW(@-) OR next2PhW(V) THEN
  533. length 190
  534. ENDIF
  535. FMT(vdiph/ai)
  536. endphoneme
  537. // CONSONANTS
  538. // PB added l/3
  539. phoneme l
  540. liquid
  541. lengthmod 7
  542. ChangePhoneme(l/3)
  543. // CALL base/l
  544. endphoneme
  545. phoneme l/3 // Replacement for [l/]
  546. liquid
  547. lengthmod 7
  548. IF nextPh(isVowel) THEN
  549. // ChangePhoneme(l)
  550. ENDIF
  551. PrevVowelEndings
  552. VowelEnding(l/l_@)
  553. VowelEnding(l/l_a)
  554. VowelEnding(l/l_e, -40)
  555. VowelEnding(l/l_i, -70)
  556. VowelEnding(l/l_o)
  557. VowelEnding(l/l_u, -70)
  558. EndSwitch
  559. // IF nextPh(isLiquid) THEN
  560. // FMT(l/_l)
  561. // ENDIF
  562. FMT(l/l_)
  563. endphoneme
  564. phoneme v // approximant, not fricative
  565. import_phoneme base/v#
  566. voicingswitch f
  567. endphoneme
  568. // PB Actually a kind of schwa = [ɐ]? - "byder" [bˈyðɐʌ]
  569. phoneme r // used for 'r' after a vowel (to create a diphthong)
  570. liquid
  571. lengthmod 7
  572. ipa ɐ̯
  573. IF nextPhW(isVowel) AND NOT nextPhW(?V) AND NOT nextPhW(V) AND NOT nextPhW(@-) THEN
  574. ChangePhoneme(R)
  575. ENDIF
  576. FMT(r/a_)
  577. endphoneme
  578. phoneme R
  579. lengthmod 6
  580. liquid
  581. ipa ʁ
  582. FMT(r/aa)
  583. endphoneme
  584. // don't weaken consonants at end of word or before a stop
  585. phoneme s
  586. vls alv frc sibilant
  587. voicingswitch z
  588. lengthmod 3
  589. Vowelin f1=0 f2=1700 -300 300 f3=-100 80
  590. Vowelout f1=0 f2=1700 -300 250 f3=-100 80 rms=20
  591. IF nextPh(p) OR nextPh(t) OR nextPh(k) THEN
  592. WAV(ufric/s!)
  593. ENDIF
  594. WAV(ufric/s)
  595. endphoneme
  596. phoneme p
  597. vls blb stop
  598. voicingswitch b
  599. lengthmod 7
  600. Vowelin f1=0 f2=1000 -50 -100 f3=-200 80 amp=11
  601. Vowelout f1=0 f2=1000 -500 -350 f3=-300 80 rms=22
  602. IF nextPh(isPause2) THEN
  603. WAV(ustop/p_unasp)
  604. ELIF nextPh(r) THEN
  605. WAV(ustop/pr, 70)
  606. ELIF nextPh(R) OR nextPh(R2) THEN
  607. WAV(ustop/pr)
  608. ELIF nextPh(@-) THEN
  609. WAV(ustop/p_unasp)
  610. ELIF nextPh(l) THEN
  611. WAV(ustop/pl)
  612. ENDIF
  613. WAV(ustop/p)
  614. endphoneme
  615. phoneme t
  616. vls alv stop
  617. voicingswitch d
  618. lengthmod 7
  619. Vowelin f1=0 f2=1700 -300 300 f3=-100 80
  620. Vowelout f1=0 f2=1700 -300 250 f3=-100 80 rms=20
  621. IF nextPh(r) OR nextPh(R) OR nextPh(R2) THEN
  622. WAV(ustop/tr)
  623. ENDIF
  624. // "respekt" [REsp'Egd]
  625. IF thisPh(isWordEnd) THEN
  626. // ChangePhoneme(d)
  627. ENDIF
  628. WAV(ustop/t, 90)
  629. endphoneme
  630. phoneme j
  631. liquid palatal
  632. lengthmod 7
  633. IF nextPhW(isVowel) THEN
  634. NextVowelStarts
  635. VowelStart(j/j@)
  636. VowelStart(j/ja)
  637. VowelStart(j/je,-35)
  638. VowelStart(j/ji)
  639. VowelStart(j/jo)
  640. VowelStart(j/ju)
  641. EndSwitch
  642. Vowelout len=70
  643. VowelEnding(j/xj, -30)
  644. IF prevPh(isPause) THEN
  645. FMT(j/_j)
  646. ENDIF
  647. ELSE
  648. // no vowel follows
  649. Vowelout len=70
  650. FMT(j/j_)
  651. ENDIF
  652. endphoneme