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

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