From 5a4cbf98ec375916d817b77bdc2f933c6aef60a9 Mon Sep 17 00:00:00 2001 From: jonsd Date: Fri, 25 Jun 2010 18:50:41 +0000 Subject: [PATCH 1/4] Add some missing files to SVN repository. git-svn-id: https://espeak.svn.sourceforge.net/svnroot/espeak/trunk@245 d46cf337-b52f-0410-862d-fd96e6ae7743 --- dictsource/da_list | 35 +- dictsource/da_rules | 491 ++++-- dictsource/dict_phonemes | 6 +- dictsource/en_list | 4 + dictsource/fr_list | 6 +- dictsource/fr_rules | 2917 +++++++++++++++++---------------- dictsource/ta_rules | 4 +- phsource/b/br | Bin 0 -> 2122 bytes phsource/b/xbr | Bin 0 -> 3172 bytes phsource/compile_report | 6 +- phsource/envelope/i_risefall | 11 + phsource/envelope/i_risefall2 | 6 + phsource/g/gr | Bin 0 -> 824 bytes phsource/g/xgr | Bin 0 -> 3173 bytes phsource/intonation | 124 ++ phsource/klatt/b | Bin 0 -> 3171 bytes phsource/klatt/bh | Bin 0 -> 5272 bytes phsource/klatt/dz_pzd | Bin 0 -> 1232 bytes phsource/klatt/dz_pzd_ | Bin 0 -> 3177 bytes phsource/klatt/m | Bin 0 -> 1605 bytes phsource/klatt/m-syl | Bin 0 -> 2446 bytes phsource/klatt/m_ | Bin 0 -> 1606 bytes phsource/klatt/n | Bin 0 -> 1605 bytes phsource/klatt/n-syl | Bin 0 -> 2010 bytes phsource/klatt/n^ | Bin 0 -> 2002 bytes phsource/klatt/n^@ | Bin 0 -> 2003 bytes phsource/klatt/nn | Bin 0 -> 1606 bytes phsource/klatt/nr | Bin 0 -> 1606 bytes phsource/klatt/qq | Bin 0 -> 5272 bytes phsource/klatt/qqh | Bin 0 -> 5273 bytes phsource/klatt/qqh_ | Bin 0 -> 5274 bytes phsource/klatt/tap2 | Bin 0 -> 3174 bytes phsource/klatt/v | Bin 0 -> 5271 bytes phsource/klatt/v_ | Bin 0 -> 5272 bytes phsource/klatt/x_tap | Bin 0 -> 3175 bytes phsource/klatt/zh | Bin 0 -> 6322 bytes phsource/klatt/zh_ | Bin 0 -> 5273 bytes phsource/ph_danish | 7 + phsource/ph_english | 4 +- phsource/ph_english_n | 4 +- phsource/ph_english_wm | 4 +- phsource/ph_french | 27 +- phsource/ph_nahuatl | 16 + phsource/ph_tamil | 5 +- phsource/phonemes | 7 +- phsource/r/@_ | Bin 0 -> 5632 bytes phsource/r/V_ | Bin 0 -> 5632 bytes phsource/r/V_2_ | Bin 0 -> 5634 bytes phsource/r/aa | Bin 0 -> 5632 bytes phsource/r3/r_ru.wav | Bin 0 -> 1574 bytes phsource/r3/r_ru2 | Bin 0 -> 5809 bytes phsource/ustop/t_short_.wav | Bin 0 -> 1340 bytes phsource/vdiph/aau_6 | Bin 0 -> 22465 bytes phsource/vwl_de/uu_@ | Bin 0 -> 9048 bytes phsource/vwl_en_us/aU@ | Bin 0 -> 2173 bytes phsource/vwl_fr/br | Bin 1678 -> 1678 bytes phsource/vwl_fr/e_2r | Bin 0 -> 2681 bytes phsource/vwl_fr/r | Bin 849 -> 849 bytes phsource/vwl_ru/ii- | Bin 0 -> 997 bytes src/Makefile | 2 + src/synthesize.cpp | 32 +- src/tr_english.cpp | 21 - src/tr_languages.cpp | 1 - src/wave.cpp | 150 +- 64 files changed, 2163 insertions(+), 1727 deletions(-) create mode 100755 phsource/b/br create mode 100644 phsource/b/xbr create mode 100644 phsource/envelope/i_risefall create mode 100644 phsource/envelope/i_risefall2 create mode 100755 phsource/g/gr create mode 100644 phsource/g/xgr create mode 100644 phsource/intonation create mode 100644 phsource/klatt/b create mode 100644 phsource/klatt/bh create mode 100644 phsource/klatt/dz_pzd create mode 100644 phsource/klatt/dz_pzd_ create mode 100644 phsource/klatt/m create mode 100644 phsource/klatt/m-syl create mode 100644 phsource/klatt/m_ create mode 100644 phsource/klatt/n create mode 100644 phsource/klatt/n-syl create mode 100644 phsource/klatt/n^ create mode 100644 phsource/klatt/n^@ create mode 100644 phsource/klatt/nn create mode 100644 phsource/klatt/nr create mode 100644 phsource/klatt/qq create mode 100644 phsource/klatt/qqh create mode 100644 phsource/klatt/qqh_ create mode 100644 phsource/klatt/tap2 create mode 100644 phsource/klatt/v create mode 100644 phsource/klatt/v_ create mode 100644 phsource/klatt/x_tap create mode 100644 phsource/klatt/zh create mode 100644 phsource/klatt/zh_ create mode 100644 phsource/ph_nahuatl create mode 100644 phsource/r/@_ create mode 100644 phsource/r/V_ create mode 100644 phsource/r/V_2_ create mode 100644 phsource/r/aa create mode 100644 phsource/r3/r_ru.wav create mode 100644 phsource/r3/r_ru2 create mode 100644 phsource/ustop/t_short_.wav create mode 100644 phsource/vdiph/aau_6 create mode 100644 phsource/vwl_de/uu_@ create mode 100644 phsource/vwl_en_us/aU@ create mode 100755 phsource/vwl_fr/e_2r create mode 100644 phsource/vwl_ru/ii- delete mode 100644 src/tr_english.cpp diff --git a/dictsource/da_list b/dictsource/da_list index 42a5a961..c7f5c752 100755 --- a/dictsource/da_list +++ b/dictsource/da_list @@ -1,4 +1,4 @@ -// PB = Peter Bjarkov - pbj1234@hotmail.com +// PB = Peter Bjarkov - pbj1234@hotmail.com // This file is UTF8 encoded // Spelling-to-phoneme words for Danish @@ -111,7 +111,7 @@ _19 n'ed@-n _2X t'y:w _3X tR'&#Dv@ //PB [tR'ADv@] changed to [tR'&#Dv@] _4X f'WRV //PB [f'W:*3] changed to [ f'WRV] -_5X hal't*es +_5X h&l't*es // PB [a] changed to [&] _6X t*'es _7X halfj'&rs _8X f'irs @@ -163,6 +163,7 @@ en e:n $u et ed $u her $u kun $u +vel $u+ // conjunctions og V $u+ $pause // and @@ -187,6 +188,7 @@ med $u+ // with af & // PB changed from [a?] to [&] - sound too short in a sentence // Also removed $u from 'af' and other words. They disappeared. ad &: // PB added 'ad' +ad &D $atend $sentence // PB "Det må ikke skille os ad." at &: $u // PB changed from [at] to [&:] hos // at - PB: removed [$u+] som sVm // which / that - PB: removed [$u+] @@ -202,7 +204,7 @@ dét de vi $u i _i $u+ mig maj $u // me -dig daj $u +dig daj_| $u dem $u ham $u hende $u @@ -335,13 +337,11 @@ password _^_EN penthouse _^_EN pickup _^_EN pidgin _^_EN -producer _^_EN ranger _^_EN receiver _^_EN research _^_EN remake _^_EN roadie _^_EN -roastbeef _^_EN run _^_EN scanner _^_EN science _^_EN @@ -356,7 +356,6 @@ small _^_EN snob _^_EN song _^_EN source _^_EN -spam _^_EN spirit _^_EN squaw _^_EN sweatshirt _^_EN @@ -2398,7 +2397,6 @@ lupin $alt magasin $alt mandarin $alt mandolin $alt -mannequin m&n@k'EN $alt margin $alt marin $alt marocain mAro'kEN $alt @@ -5046,6 +5044,7 @@ adstringer $alt adviser $alt advoker $alt afficer $alt +aflever $alt afmarcher $alt afrikaniser $alt agere $alt @@ -5188,7 +5187,7 @@ bronzere $alt brunere $alt brutaliser $alt bruyere bryj'E:r $alt -budgetter $alt +budgettere $alt bugser $alt bureaukratiser $alt cadmier $alt @@ -5274,7 +5273,7 @@ deputer $alt dereguler $alt deriver $alt desarmer $alt -deserter $alt +desertere $alt designere $alt desinficer $alt destiller $alt @@ -5434,7 +5433,7 @@ farser $alt fasciner $alt favoriser $alt feminiser $alt -ferier $alt +feriere $alt fermenter $alt ferniser $alt fertiliser $alt @@ -5890,7 +5889,6 @@ laminer $alt lancer $alt lasere $alt latiniser $alt -//lavere $alt lavpasteuriser $alt legaliser $alt leger $alt @@ -6119,7 +6117,7 @@ plakater $alt planere $alt plastificer $alt platiner $alt -pletter $alt +plettere $alt plisser $alt plomber $alt plæder $alt @@ -6153,7 +6151,7 @@ privileger $alt prober $alt problematiser $alt proceder $alt -producer $alt +producere $alt profaner $alt professionaliser $alt profeter $alt @@ -6218,7 +6216,7 @@ ramponer $alt ranger $alt rappeller $alt rapportere $alt -raser $alt +rasere $alt ratificer $alt ratihaber $alt rationaliser $alt @@ -6256,7 +6254,7 @@ reimporter $alt reinvester $alt rejicer $alt rekapituler $alt -reklamer $alt +reklamere $alt rekognoscer $alt rekommander $alt rekompenser $alt @@ -6418,7 +6416,7 @@ stabiliser $alt staffer $alt stagner $alt standardiser $alt -stationer $alt +stationere $alt statuere $alt stenciler $alt stenografer $alt @@ -6494,7 +6492,7 @@ teoretiser $alt termografer $alt terrasser $alt terroriser $alt -testamenter $alt +testamentere $alt testere $alt tiere $alt titrer $alt @@ -6565,7 +6563,7 @@ verbaliser $alt verificer $alt verser $alt versificer $alt -versioner $alt +versionere $alt vibrer $alt vidimer $alt vikarier $alt @@ -10439,6 +10437,7 @@ sig si $capital //PB Sig = si with capital S - Sig det med blom (vi steg) vi||st'e (de steg) di||st'e (alle steg) &l3||st'e +steg sdaj $atend $sentence steget ste@d // PB problem with noun "hav" = ocean and verb "hav(e)" = to have [hAu]/[h&v] (et hav) ed||h'Au // PB "et hav" = an ocean - not "hav en god dag" - have a nice day diff --git a/dictsource/da_rules b/dictsource/da_rules index b3bbb888..63cfc3bf 100755 --- a/dictsource/da_rules +++ b/dictsource/da_rules @@ -40,20 +40,24 @@ // PB general rule: [a] after r followed by sp/st/sk r) a (L08 a // PB rask // PB general rule: [&:] after m/n - L09) a & // mave + L09) a &: // mave torn) ad (o '&d // PB stressed kn) a (p A // PB manchetknap + sn) a (p a // PB snappe m) a (p a // PB mappe L09) a (j a // PB maj // PB general rule: [a] after n before vn n) a (vn a // navn // PB general rule: [a] after l before n l) a (n & // land + l) an (ce AN // PB lancere // PB words in da_list with final -ance &) ance ($p_alt 'ANs@ // balance, romance + &) ance (+ ANs@ // PB unstressed after a syllable - ferieromance // PB general rule: [a] after consonant before m C) a (m a // PB ham, gamle, lam C) a (mi & // PB vitamin + alab) a (m '& // PB Alabama // PB general rule: [&] after l before m + vowel l) a (mA & // PB ham, gamle, lam // PB general rule: [&] after before m/n @@ -61,8 +65,9 @@ // PB general rule: [&] after k k) a (+ & // PB kage, kaste sk) a (k A // PB skak -// PB general rule: [a] after k before pp +// PB general rule: [a] after k before p k) a (p+ a // PB kappe, kaptajn + k) a (pi+ & // PB [&] before i - kapitel // PB general rule: [a] after sk before f sk) a (f+ a // PB skaffe // PB general rule: [&] after sk before p/b @@ -78,6 +83,9 @@ k) a (me & // PB kamel, kamera // PB general rule: [&] after d d) a (+ & // PB dame, dag + d) a (g@ a // PB dagbog + _d) a (m_ a // PB dam + _d) a (mm a // PB dammen // PB general rule: [A] after d before mp d) a (mp A // PB damp // PB general rule: [A] after a followed by k/g plus t @@ -124,6 +132,9 @@ l) av (ed &v // PB lavede l) av (es &v // PB laves l) av (t &v // PB lavt + l) av (ni &v // PB madlavning + l) av (a_ &v // PB lava + l) av (ae &v // PB lavaen b) alaklav (a &l&kl'&:v // PB g) av (mi Au // PB gavmild // PB general rule: [Au] after t before s @@ -137,7 +148,9 @@ a (nklag+ & // PB anklage a (nko+ & // PB ankomme ang (re aN // PB angre - ang (er_ aN // PB anger + _) ang (eC aN // PB anger, angelsaksisk + + _) ang (ol ang // PB Angola ang (reb &ng // PB angreb a (gt A // agt l) a (gt+ A // PB lagt @@ -154,8 +167,11 @@ a (ppar a // PB apparat _okt) a (v '& // stressed _konk) a (v '& // stressed + _det) a (lje '& // PB stressed _pol) a (k 'a // PB stressed polak _kos) a (k 'a // PB stressed - kosak +_milli) a (r 'A // PB stressed - milliard +_trilli) a (r 'A // PB stressed - trilliard L08) av (C Au // stavn st) av (nin &v // PB stavning h) av (_ & // PB hav - problem with the noun "hav" [hAu] @@ -167,6 +183,7 @@ color) ado 'Ado // PB US state _) av (_ Au // PB av C) a (k a // PB makværk + m) a (ka & // PN makaber C) a (ck a // PB tackle s) a (x a // PB saxofon l) a (kA & // PB lakune @@ -193,6 +210,7 @@ intern) atio (nal &So // clash with "internat" // PB nouns with final -ade in da_list - stressed a &) ade ($p_alt '&:D@ // hystade + &r) ade ($p_alt 'A:D@ // parade &) adent ($p_alt &d'ent // don't spoil the -ent rule - dekad'ent // PB nouns with final -an in da_list - stressed a @@ -264,7 +282,9 @@ _vatik) a (n '& // PB Vatikanet lumb) a (go '& // PB stressed - lumbago _kapt) a (jn '& // PB kaptajn tilsk) a (de '& // PB tilskadekommne + al) a (sk '& // PB Alaska _radio) a (kti 'A // PB stressed - radioaktiv +_impres) a (rio 'A // PB stressed bl) a (d & // PB blad h) a (n & // PB han j) a & // PB ja @@ -276,12 +296,13 @@ _radio) a (kti 'A // PB stressed - radioaktiv l) ave (_ &v@ // PB lave l) aver (_ &vV // PB laver kl) aver (_ &v'er // PB klaver - l) a (bo a // PB laborastorium - g) a (v & // PB gav, opgave + l) a (bo a // PB laborastorium + g) a (v &: // PB gav, opgave g) a (vn A // PB gavn b) a (b+ A // PB babser + b) a (jer a // PB b) aby (+ eibi // PB baby - _) a (ndA a // PB anderledes + _) a (nder a // PB anderledes _) a (ndet & // PB andet _) a (nden & // PB anden t) a (bt a // PB tabte @@ -305,6 +326,8 @@ interf) a (ce ei // PB interface C) a (ft A // PB haft, saft sl) a (L06 a // PB slap ai (K aj + cockt) ail Ejl // PB + d) ay Ej // PB holyday, Holliday aise 'E:s@ // PB mayonnaise k) ai (n &|'i: // PB kokain ld) a (k & // PB baldakin @@ -322,6 +345,7 @@ interf) a (ce ei // PB interface s) a (m a // PB sammen _eks) a (m+ '& // PB stressed - eksamen, eksaminere &eks) a (m & // PB + sp) a (m &: // PB isl) a (m 'a: // PB islam, islamisk j) a (m+ a // PB fjams pl) a (m+ & // PB plamage CHECK THIS ONE @@ -368,6 +392,9 @@ restaur) ant 'AN // PB added stress akkordeon ak'V:deVn attention at'EnS@n athen &t'en // PB Athen + andrews &ndRu:z // PB + angeles &ndZ3lEs + abilene &bili:n // PB str) abads Ab'&s // PB stressed a, silent d disput) a (ts '& // PB stressed amsterd) a (m 'a // PB @@ -390,14 +417,16 @@ amsterd) a (m 'a // PB // PB (French) nouns with final -age and with $alt flag in da_list // stressed a, "age" pronounced [aS@] &) age ($p_alt+ '&:S@ // ravage, bagage + &) age (r$p_alt+ '&:S@ // reportager &r) age ($p_alt+ 'A:S@ // [A] after "r" - garage &) age (re$p_alt+ &S'e@ // not for the "age" words - gagere // "ag" words silent g d) ag (_ &j // PB dag d) ag (e+ &j // PB dage - d) ag (@+ Au // PB daglejer - @d) ag (++ & // PB dommedag + d) ag (l@+ Au // PB daglejer + @d) ag (_++ & // PB dommedag + sd) ag & // PB fødselsdagsgave d) ag (og+ ag // PB pædagog j) ag (e+ &: // PB jage j) ag (uar ag // PB @@ -426,11 +455,15 @@ amsterd) a (m 'a // PB b) ag (til & // PB bagtil b) ag (ud &_: // PB bagud p) age (++ &:S@ // PB page, pagehår + band) age &:S@ // PB gipsbandage sC) ag &j // PB slag, slaget, Skagen, smag + esl) ag (lA Au // PB beslaglægge sC) ag (t ag // PB universitetsvagt + sv) ag (t &j // PB svagt m) ag (t ag // PB verdensmagt - sl) ag (t ag // PB slagte + sl) ag (te ag // PB slagte sl) ag (smål Au // slagsmål + sl) ag (tilf Au // PB slagtilfælde sl) ag (side Au // PB slagside sp) ag (ett &g' // PB spagetti sp) ag (hett &g' // PB spaghetti @@ -509,7 +542,10 @@ _trienn) ale '&:l@ .group be // PB words beginning with "be" with stress on the second syllable (850) - _) be (@ b%E +// They have secondary stress on the second syllable with a preceeding syllable + _) be (@ b%E // PB besta'and +//&) be (@ bE, // PB hv'alrosbest,and + // PB exceptions to the "be" rule _) be (dste bE // bedstefar, bedstemor _) be (nmel bE @@ -520,6 +556,7 @@ _trienn) ale '&:l@ _) be (nchmark bE _) be (nedder bE _) be (nende bE + _) be (net be _) be (nfisk bE _) be (nfedt bE _) be (nfri bE @@ -561,7 +598,7 @@ _trienn) ale '&:l@ // PB nouns in da_list with final -ce - stress on previous syllable &) ce ($p_alt =s@ // ekspeditrice - &) cer ($p_alt =s'er // annoncere + &) cer ($p_alt =s''er // annoncere c (y s // PB s followed by y - cykel c (e s // PB race, procent @@ -593,21 +630,28 @@ _trienn) ale '&:l@ _) ciao (_ tjAw // PB claude klO:d // PB name churchill tSW:Sil // PB - cambridge kejmbRidZ // PB + cambridge kejmbRidZ // PB + connecticut kVn'etikVd // PB + carlisle kAlajl // PB + china tjajn& .group d d d - A) de (_ D3 // PB change to D? + A) de (_ D3 A) d D // PB way too broad? a) d D // PB ad, udenad - dangerously broad + a) de (Cr D3 // PB badedragt - not testet + y) de D3 // PB brydehold Coe) de @-D // PB boede - Co) d (A D // do we need this one? - u) d (elt d // PB udelt + @) d (elt d // PB udelt, tildelt l) d // PB omit d after l - hold, skjold + d (ør d // PB bildør + d (et d // PB metaldetektor l) d (rig d // PB aldrig l) d (ig d // PB skyldig + bal) de l3 // PB silent d - balde l) d (a d // PB keep d in "baldakin" hel) d (i d // PB keep d in "heldig" fær) d // silent d in færd, færdsel @@ -623,12 +667,15 @@ _trienn) ale '&:l@ hjor) d d // PB exception - pronounce d in 'hjord' stikor) d // PB exception - silent d in 'stikord' d' d //PB d'Aviano - e.g. French and Italian names + woo) d d // PB Hollywood ud) d (A d A) d (C D A) dd D // PB hedder - "er" removed by &) er (_NS2 [V] A) d (s@ // PB fødsel - deleted 30+ rules, this one does the work + me) d (+ D // PB medspiller A) ds (_ s // PB silent d - palads, trods ø) d (L08+ D // PB nødstop + dø) d (s D // PB dødscelle be) d (st // PB silent d - bedst A) dd (A D // PB redder si) d (s // PB silent d - sidst @@ -639,6 +686,8 @@ stikor) d // PB exception - silent d in 'stikord' hår) d // PB silend d - hård, hårdere stri) d (s D // PB but not silent d in e.g. 'stridsvogn' u) d (C+ D // udsætte + pu) d (s // PB silent d - pudse + smu) ds s // PB tilsmudse u) dt (+ t // PB brudt plu) dsel sl/2 // PB silentg d - pludselig [pl'usli] in) d (C @@ -717,7 +766,8 @@ stikor) d // PB exception - silent d in 'stikord' fjer) d (e // PB silent d - fjerde L09A) d (ta D // PB modtage, medtage, nedtage in) d (u d - pro) d (u d + pro) ducer (_ dj'usV // PB + pro) ducer (assistent dj'usV // PB in) d (uC d mo) d (ul 'd pen) d (ul 'd // PB pendul @@ -727,19 +777,26 @@ stikor) d // PB exception - silent d in 'stikord' detente det'A:Nt // PB doughnut downVd // PB _) doc (_ dVk // PB Doc - name + dodge dVdZ // PB city + daiquiri d&k@ri // PB drink .group é // added by PB - é 'e: // idé, entré + é 'e // idé, entré .group e e e // PB e: => e - +// PB stress on second syllable after initial "be" in .group be +// Secondary stress after a syllable + &b) e (@ E, // PB hv'alrosbest,and // PB general rules l) e e - ll) e (d // PB silent e - billede + perl) e @ // PB + _dil) e (mma 'E // PB + ll) e (de // PB silent e - billede midl) er V // PB midlertidig elleve elv@ // PB _koll) e (ga 'e // PB stressed + _koll) eg (e 'ej // PB stressed kolleger r) e E // PB general rule: [E] after r // dr) e (C@ @ // PP sladresøster - not tested r) e (vn &# // PB revne @@ -757,17 +814,19 @@ stikor) d // PB exception - silent d in 'stikord' r) e (ng aj //PB general rule: [&#] after r before ng - streng, dreng r) e (ngø E // PB rengøre r) e (t &# //PB general rule: [&#] after r before t - ret + _tr) e (t e // PB tretal fr) e (l &# // frelse yr) e (+ @ // PB myretue, dyrehold r) e (h @ // PB general rule: [@] after r before h - fårehyrde, varehus @n) e (d @ // PB general rule: [@] after @+n before d - måned + n) e (dgang e // PB m) e (di+ e // PB medicin - _ans) e (+ e // PB avoid [V] in "anser" and [@] in "anse" rn) e (d+ e // PB derned an) e (r @ // PB anerkende L09) e (de E // nede, nederlag L09) e (t e // metal L09) e (l E // mellem + _m) e (l_ e // PB ed) e (r @ // nederlag tr) e (ma E' // trema s) e (dd E // PB seddel @@ -777,7 +836,6 @@ stikor) d // PB exception - silent d in 'stikord' dec) e (mber 'e // PB sept) e (mber 'e // PB eus Wws // PB for Greek names - Zeus, Achilleus -// aml) e 3 // PB gamle tel) e 3 // PB tele afl) e (v 3 // PB aflevere ri) e 3 // PB ferie @@ -789,10 +847,13 @@ stikor) d // PB exception - silent d in 'stikord' Ar) e (s_ 3_: // PB gøres r) eau o // PB bureaukratiske ee 'e: // PB ideer, cafeer + fr) ee (lan i: // PB freelance b) ee (d ee // PB beedige en) e @ // PB ene, eneste + en) e (rgi E // PB br) e (L09 & // PB bremse sn) e (K e? // PB sne, snebold + sn) e (rp E // PB snerpet sn) ed (k e e // PB silent d - snedker _s) e (_ e? // PB se e (mball A // PB emballere, emballage @@ -826,7 +887,7 @@ provenc) e // PB Provence - skip the e prov) e (nce 'A: // PB Provence e (gsot &# // PB blegsot e (gfi &# // PB blegfis - r) e (st &# // PB resten, restaurant + r) e (ste &# // PB resten, restaurant e (gansigt &# // PB blegansigt _kongr) e (s '& // PB kongres - stressed but not after a syllable _regr) e (s '& // PB regres @@ -851,8 +912,10 @@ _myxød) e (m 'e _syst) e (m 'e _teor) e (m 'e _ød) e (m 'e - _el) e (ndig 'e // PB stressed e in elendig - _leb) e (ndig 'e // PB stressed e in lebendig + el) e (ndig E // PB møgelendig - steressed with $alt rule + leb) e (ndig 'E // PB steressed with $alt rule + _ball) e (t@ 'E // PB balletdanser +_en_ball) e (t 'E // PB lini) e @ // PB changed from [e] to [@] ft) e (r @ // PB oftere r) e (nd a // PB rend @@ -865,10 +928,12 @@ _myxød) e (m 'e entente ANt'ANt // PB prof) essionel 'eSonel // PB eisenhower ajs@nhAuV // PB + eiger ajgV // PB Eiger mountain sp) ee (d i: // PB speedbåd // PB Words ending with e - general rule @) e (_+ 3 // PB husleje + afs) e (_ e // PB afse _) e (_speak i // PB eSpeak - capital s makes the e one word _) e (_mail i // PB e-mail // PB Words ending with -te @@ -878,6 +943,8 @@ _myxød) e (m 'e // PB Words ending with -se or -ce s) e (_ @ c) e (_ @ + overs) e (_ e + _ans) e (+ e // PB avoid [V] in "anser" and [@] in "anse" // PB Words ending with -ske (and ste, spe) L08) e (_ @ // PB påske, forske @@ -960,6 +1027,7 @@ _sakram) e (nte 'e L08) e (g a // PB steg, spegepølse _st) eg (_ e // steg - verb, problem with noun = "roast" best) eg (_ 'e // PB besteg + best) eg (et_ 'e // PB besteget n) egl ajl // PB negl r) egel Ejl // PB regel r) egl Ejl // PB regler @@ -968,6 +1036,7 @@ _sakram) e (nte 'e _) eget (_ a:j@D // PB eget r) eg (er Eg // PB e=> E eg (n aj // PB regn, tegning, lege +underl) eg ej // PB underlegen str) eg aj // PB stregen p) eg aj // PB pegefinger _) ege (_ e:j@ // PB added _ - ege(træer) @@ -980,6 +1049,7 @@ _sakram) e (nte 'e r) ej (s aj en (gage aN // engagere en (tre aN + en (tré aN // PB c) en (t en c) en (tA en c) en (tC en @@ -988,15 +1058,16 @@ _sakram) e (nte 'e r) en (ce AN // reference r) edd ED // PB redder br) edd Ed // PB bredde - _tr) e (t a // tretten + _tr) e (tten a // tretten _tr) e (d E // tredje - ej (+ aj // PB changed from ai to aj - nej + ej (++ aj // PB changed from ai to aj - nej, arbejde v) ej (r 'e v) ejr (e_ ajR // PB vejre v) ejr (er_ ajR // PB vejrer _offic) e (_ // office (officepakke) fl) e (de+ e // PB aflede &) edet (_ @D3d // PB hovedet + r) edet (_ ED3d // PB helbredet st) edet (_ ED3d // PB værkstedet Ad) en (@ @-n // udenlandsk, udenad Ad) en (t en // PB identificere @@ -1023,15 +1094,20 @@ _terap) eut 'Wwd // PB stressed ress) en (timent aN // PB ressentiment m) edie 'edj3 // medie, kommedie inds) e e // PB indse + inds) e (r_ e // PB indser etagere et&S'E:R // PB espeak ispi:k // PB eindhoven ajnh'o:f@n // PB einstein ajnstajn eyeliner ajlajnV // PB + ey i // PB jockey eiffel ajf3l // PB Eiffeltårnet _) earl W:l/2 // PB Earl + _) earp W:b // PB name + _) east i:sd // PB Eastwood eu (rop Wu // PB Europa - _t) e (_ e // PB + _t) e (_ e // PB te + kin) e (s 'e // PB kineser // PB plural suffix -ene @) ene (_S3 @n@ // brødrene - the brothers @@ -1047,6 +1123,7 @@ _terap) eut 'Wwd // PB stressed @) el (s @l // fødselsdag, fødselstal @) el (A @l // fødselar @) el (t_ @l // ædelt + t) el (t_ el // PB ilttelt // PB exceptions to the -el rule // PB final -el i da_list - stressed e @@ -1054,7 +1131,9 @@ _terap) eut 'Wwd // PB stressed &) el (l$p_alt ''E - modellen - only one l _) el el // elkedel + el (sk+ el // PB naturelsker bestandd) el el // PB + d) el (t+ el // PB tildelt d) el (A+ el // PB dele, omdele edd) el l/2 // PB seddel medd) el del // PB meddel @@ -1064,11 +1143,12 @@ _offici) el (+ 'el // PB officiel _mod) el 'el // PB modelbureau u) el (+ 'el // aktuel, seksuel, visuel gennemsku) el (ig =el - ur) el (+ '&#l // konjunkturel + ur) el (_+ '&#l // konjunkturel and) el el // andel and) el (se @l // PB forbandelse hand) el @l // handel i) el (+ 'el // arteriel, artificiel + i) el (t+ 'el // arterielt, artificielt spani) el @l // PB cockerspaniel dani) el el // Daniel ford) el el // fordel @@ -1121,7 +1201,7 @@ mortad) el 'el nuv) el 'el ovend) el el parall) el 'el - c) el 'el // parcelhus + parc) el 'el // parcelhus past) el 'el ped) el 'el procentd) el el @@ -1145,6 +1225,8 @@ stikked) el el tab) el 'el tarant) el 'el univers) el 'el +_frikad) el (l 'El // PB stressed - frikadelle +frikad) el (l El // PB verdensd) el el // t) el (+ el @) el (øs el // PB mageløs @@ -1158,8 +1240,8 @@ verdensd) el el // exceptions - don't remove "en" aft) en @n // PB avoid [Au] when aft(en) is translated &g) en (+ @n // PB avoid [g] when læg(en) is translated - _ag) en (t 'en // PB agent - ag) en (t en // PB agent + _ag) en (t 'en // PB agent + ag) en (t en // PB agent &g) en (st en // PB genstand &g) en (kend en // PB genkende &g) enn (em en // ugennemskuelig @@ -1181,11 +1263,15 @@ _præsid) en (t 'en // præsidentfrue g) en (st en // PB genstand g) en (sk en // PB genskabe t) en (A @n // PB TEST - femtenårig + st) en (A en // PB stenograf eksist) en (s 'en // PB eksistens _resid) en (s 'en // PB residens resid) en (s en // PB residens _acetyl) en 'en // PB _influ) en (za 'En // PB + s) en (sib AN // PB sensibel + _rev) en (che 'An // PB stressed + rev) en (che 'An // PB not stressed after a syllable // PB $alt words with final -ent in da_list - stressed e &) ent ($p_alt+ 'end // student @@ -1223,12 +1309,17 @@ _influ) en (za 'En // PB g) er (_++ V // våger, læger [ l'Ejer] g) er (t+ er // PB Gerta @g) erne (++ Vn@ // lægerne + fing) erne (m Vne // PB fingernem @d) erne (++ Vn@ // let the nd rule kick in - inderne g) er (n++ Er // gerning reag) ere (_ er3 // overreagere _reag) ere (_ 'er3 // overreagere + vurd) ere (_ er3 // overvurdere ng) er (_++ V // unger - j) er (n+ Er // jern, stjerne +revolv) er V // PB + all) er V // PB allersidst + j) er (n+ Er // jern + j) er (ne++ Er // PB stjerne bunk) er V // PB not a -er suffix alexand) er =dV // PB Alexander report) er V // PN not a suffix @@ -1246,7 +1337,7 @@ _perif) er 'er // PB stressed up) er (C V // PB superfølsom @d) er (C V // PB hæderlig - TOO BROAD? mm) er (C V // PB sommerhilsen - &f) er (@ @ // PB konference + &nf) er (@ @ // PB konference // not a -erne suffix _mod) erne (+ 'ern@ @@ -1257,6 +1348,7 @@ _perif) er 'er // PB stressed &kas) erne (+ ern@ _lant) erne (+ 'ern@ &lant) erne (+ ern@ + plant) erne (++ Vn@ _luc) erne (+ 'ern@ &luc) erne (+ ern@ _saut) erne (+ 'ern @@ -1296,16 +1388,19 @@ reserv) ert 'ert alt) er (nativ 'ER // PB stressed LOOK FOR MORE C) er (At V // PB probably way too broad - offeret + c) er (e+ e // PB velkvalificeret bl) er (e er // PB genetablere desp) er (at 3R // PB desperat d) er (fra er // PB derfra + d) er (et er // PB vurderet v) er (C+ Er // PB vers, verden øv) er (st V // PB perv) er (s 'er // PB stressed e - pervers Cav) er (+ V // PB laver, saver lev) er (C+ V // levertran led) er (@ V // lederkursus - @st) er (@ V // PB kryst*er*agtig + yst) er (@ V // PB kryst*er*agtig + _myst) er (iu 'e // PB mysterium _hyst) er (i 'er // PB hysterisk hust) er (i er // PB not stressed after a syllable - overhysterisk @st) er (ie 'er // PB ministeriet @@ -1314,6 +1409,7 @@ reserv) ert 'ert _h) er (++ Er // PB her h) erre (+ ER@ // PB herre hv) er (+ er // PB hver + enhv) er 'er // PB stressed fork) er (t+ er // PB forkert Cik) er (+ V // PB epileptiker, optiker kk) er (+ V // PB rykker @@ -1325,12 +1421,16 @@ reserv) ert 'ert _inf) er (no 'Er // PB inferno st) er (et r // PB orkesteret t) er (C V // PB lattermild + t) er (m Er // PB terminal + t) er (p Er // PB terpentin, terpe + t) er (mo Er // PB termometer t) er (r E // PB terror _) er (C %er // PB er + consonant: stress on next syllable - er'hverv _) er (go er // PB not stress on next in "ergo..." ov) er (+ V // PB overbevisende, sover am) er (ika_ 'er // PB Amerika - v) er (i Vr' // PB røveri - stressed i + _røv) er (i Vr' // PB røveri - stressed i + røv) er (i Vr // PB togrøveri sv) er (ige Er // PB ærg) err Erg // PB ærgerrig offic) er 'er // PB officer - stressed e @@ -1339,6 +1439,7 @@ reserv) ert 'ert n) er (t Er // PB genert _L06) er (_ &r // PB per L06L06) er V // PB klipper + sk) er V // PB fisker nd) er V // PB under _) er (_ &r // PB er L09) er (ne_ V // PB kameraerne @@ -1385,7 +1486,7 @@ L06L06) er V // PB klipper .group et // PB verb suffix -et (har elsket - has loved) // not treated as a suffix any more - &) et (_+ @D // PB elsket + @) et (_+ @D // PB elsket // PB exceptions: not a 'et suffix _sk) et et // PB sket @@ -1394,6 +1495,14 @@ L06L06) er V // PB klipper _rak) et 'Et // PB raket _toil) et 'Et // PB toilet, toilette _kok) et 'Et // PB stressed - koketteri, koket +_kvint) et 'Et // PB +_kvart) et 'Et // PB + kvint) et Et // PB + kvart) et Et // PB +_tromp) et 'et // PB stressed + tromp) et et // PB +_klarin) et 'et // PB +klarin) et et // PB meg) et (+ et // PB not a suffix om) et (++ 'et // PB kilometer, kometer r) et (_++ &#t // ret @@ -1406,6 +1515,7 @@ L06L06) er V // PB klipper amul) et 'et // PB alfab) et 'et // pb _bill) et 'et // PB stressed + bill) et et // PB _bill) ett 'et // PB stressed - only one t _kask) et 'et // PB stressed _bajon) et 'Et // PB stressed @@ -1480,7 +1590,8 @@ _vinaigr) ette '&t@ a) ff (ære f // PB affære a) ff (age f // PB staffage a) ff (utage f // PB - + ra) ff (e f // PB straffe + a) ff (el f // PB vaffel, taffel a) f (ro f // PB afroasiat, afroamerikaner, afrohår etc. a) f (re f // PB blafre @) fobi fob'i // PB xenofobi, hydrofobi @@ -1493,11 +1604,12 @@ _vinaigr) ette '&t@ Ca) f (t f Ca) f (A f ga) f (fel f + va) f (l f // PB vafler + ga) f (l f // PB gafler gra) f f gra) f (A f gra) f (C f ra) f (ik f - ra) f (fe f fire fi:V // PB fire sa) f (ar f sta) f (e f @@ -1543,11 +1655,13 @@ _vinaigr) ette '&t@ æ) g (e j æl) g (e j // PB sælge vælge y) g (e j // syge, ryge, myge - l) g (_ j + l) g (_ j // valg + l) g (et_ j // PB valget l) g (C j // PB bælgmørkt, bælgplante ø) g j // PB deleted (_ g (le j // PB mægler, besegle g (lem g // PB glemt + g )led g // PB gled val) g (t // PB silent g - valgt sy) g // PB silent g -sygdom spur) gte t@ // PB silent g - spurgte @@ -1556,9 +1670,10 @@ _vinaigr) ette '&t@ to) g (a g // PB exception toga to) g (o g // PB exception Togo to) g (t g // PB exception togt + vo) g (te g // PB bevogte ro) g (an g // PB arrogance ro) g (es g // PB progesteron - o) g (r g // autograf + o) g (raf g // autograf o) g (n u // PB g => u - vogn, sogn r) g (_ w r) g (er_ u // PB herberger @@ -1568,6 +1683,7 @@ _vinaigr) ette '&t@ u) g (enL11 g // PB ugengældt, ugenkendelig u) g (l ? ø) ge (+ :j@ // PB bøgetræ, øge + mø) ge (len :je // PB møgelendig ø) g (n j g (iv+ g // avoid letter "g" pronounced with phoneme S dra) g (en w // PB dragen, uopdragen @@ -1606,6 +1722,7 @@ _vinaigr) ette '&t@ geronimo dZer'VnimO:u // PB // PB final -gi in da_list - stressed i &) gi ($p_alt g'i // pædagogi + &) gi (sk$p_alt =gi // pædagogisk _lo) gi (_ S'i // logi lo) g (a g @@ -1668,6 +1785,7 @@ _korte) ge =Se _a) ge (re g'e // PB agere ge (nial ge // PB ge (ni Se // PB + ge (nind ge // PB genindspille ger (ning gEr // PB bud) ge (t S'E @@ -1685,10 +1803,20 @@ _korte) ge =Se housecoat hAuskowd // PB hitech hajtek // PB homer hom'er // PB Homer - Greek + hawaii h&w'a:ji // PB .group i i i // PB i: => i - made a lot of rules redundant ig (_ i // dejlig, rig + r) i (gg e // PB rigge + _l) ig (_stille ek // PB problem: lig = "dead body" and lig = the verb "lie" + _l) ig (_pænt ek // PB + _l) ig (_ordentligt ek // PB + _l) ig (_godt ek // PB + _l) ig (_roligt ek // PB + færd) ig i // PB silent g + hurt) ig i // PB silent g + ig (hed i // PB vittighed _k) ig (_ ig // PB kig _t) ig (_ eg // PB tig t) igg eg // PB tigge @@ -1698,6 +1826,7 @@ _korte) ge =Se l) ig (i ig // PB religiøs pl) ig (t ek // PB pligt ig (s i // PB silent g -rigsret +samtid) ig i // PB silent g mussol) i (ni 'i // PB _præc) i (s 'i // PB stressed _av) i (s 'i // PB stressed @@ -1708,11 +1837,14 @@ _molev) i (t 'i // PB stressed - molevitten _marskand) i (s 'i // PB stressed - marskandiser _princ) i (p 'i // PB stressed _mess) i (as 'i // PB + _mart) i (ni 'i // PB cocktail + _alb) i (no 'i // PB stressed n) ij (megen aj // PB Nijmegen n) i (gg e // PB nigger n) i (ss e // PB nisse skr) i (pt 'e? // PB stressed - manuskript r) i (ft e // PB skrift, rift, drift + v) i (ft e // PB vifte kr) i (cket e // PB f) i (sk e // PB l) i (lla e // PB @@ -1730,12 +1862,13 @@ _princ) i (p 'i // PB stressed iger i:V // PB piger p) igen i:3n // PB pigen kr) igen i:3n // PB krigen + dil) igen (ce iS'AN // PB diligence kr) igs is d) ige (r ig'e // PB redigere rr) ige (r ig'e // PB korrigere nav) ige (r ig'e // PB navigere dir) ige (r ig'e // PB dirigere -intell) ige (nt ig'e // PB intelligent +intell) ige (n ig'e // PB intelligent fr) igea (r igi // PB frigear _) ige (n ig'E // PB igen rol) ige iE // PB rolige, beroligende @@ -1750,6 +1883,7 @@ intell) ige (nt ig'e // PB intelligent // v) i (ng e // PB vinge // s) i (nk e // PB sinke i (nL11 e //PB blinke, sinke, vinge, sving + v) i (nkæld i // PB vinkælder s) i (d e // PB sidde s) i (ds i // PB sidst t) i (n e // PB stinke @@ -1760,6 +1894,8 @@ intell) ige (nt ig'e // PB intelligent dr) i (l e // PB drille br) i (lle e // PB briller i (dt e // PB midt, lidt + b) i (dt i // PB bidt + sm) i (dt i // PB sk) i (dt i // PB skidt mask) i (n 'i // PB stressed - maskinskrive h) i (d i // PB hidtil @@ -1773,6 +1909,7 @@ intell) ige (nt ig'e // PB intelligent f) i (nt_ i // PB am) i (go 'i // PB amigo magas) i 'i // PB magasin + _kap) i (tel 'i // PB stressed asp) i (c 'i // PB aspic - only this word // PB words with final -id in da_list - stressed i @@ -1793,6 +1930,8 @@ intell) ige (nt ig'e // PB intelligent &r) ik ($p_alt ''ek // fabrik &) ik (k$p_alt ''i // antikke - only one k &r) ik (k$p_alt ''e // fabrikker - only one k + mim) ik (er ik // PB mimiker + kom) ik (er ik // PB not stressed // PB words with final -ti in da_list - stressed i &t) i ($p_alt 'i // politi @@ -1800,6 +1939,28 @@ intell) ige (nt ig'e // PB intelligent // PB words with final -inde in da_list - stressed i &) inde ($p_alt 'en@ // malerinde +// PB French words with final -ier + atel) ier j'e + bank) ier j'e +barbad) ier j'e + coll) ier j'e + croup) ier j'e + den) ier j'e + doss) ier j'e +elegant) ier j'e + espal) ier j'e +financ) ier j'e +finans) ier j'e +grenad) ier j'e +konferenc) ier j'e +kostum) ier j'e + lanc) ier j'e + met) ier j'e +particul) ier j'e + port) ier j'e + rent) ier j'e + spal) ier j'e + L10am) i (lla 'i // PB Camilla, Kamilla _alib) i 'i // PB alibi _fob) i 'i // PB fobi @@ -1807,14 +1968,20 @@ _konfl) i (kt 'i // PB stressed _pap) i (r 'i // PB stressed _tap) i (r 'i // PB stressed _vels) i (gn 'i // PB stressed + _just) i (ts 'i // PB + _kul) i (ss 'i // PB kulisse i (nn e i (mK e l) i (m i // PB lim gl) i (m e // PB glimt, glimrende i (kK e // PB ikke, pik + @t) i (k i // PB ferieromantik + sk) i (k i // PB skikkelse + _art) i (k 'i // PB stressed artikkel m) i (k i // PB mikroskop g) i (k+ i // PB begik i (x e // PB fixe + m) i (ks e // PB mikse mus) i (k i // PB musik it) i (k i // PB politik _g) i (k_ i // PB @@ -1842,11 +2009,12 @@ _konfl) i (kt 'i // PB stressed r) i (k e // PB drik, skiderik l) i (dt e // PB lidt L08) i (l_ e // PB spil, skil - _st) i (l_ i // PB stil + st) i (l_ i // PB stil L08) i (lt e // PB skilt, adskilt spl) i (n e // PB splint L08) i (ll e // PB spille - problem with the verb (ud)spile/(ud)spil[sbil] L08) i (ld i // PB spilde + sk) i (ldr e // PB skildring m) i (dda e // PB middag m) i (ste e // PB miste p) i (nd e // PB pind @@ -1880,6 +2048,21 @@ _polit) i 'i // PB politi, politik - stressed i all) igevel 'i@vEl // PB stressed i - alligevel _band) i (t 'i // PB bandit _vedl) i (ge 'i // PB vedligeholde +dispon) i (bel 'i // PB stressed + eksig) i (bel 'i // PB stressed + fleks) i (bel 'i // PB stressed + fung) i (bel 'i // PB stressed + horr) i (bel 'i // PB stressed +irrevers) i (bel 'i // PB stressed +kompat) i (bel 'i // PB stressed +konvert) i (bel 'i // PB stressed + pen) i (bel 'i // PB stressed +perfekt) i (bel 'i // PB stressed + plaus) i (bel 'i // PB stressed +revers) i (bel 'i // PB stressed + sens) i (bel 'i // PB stressed +suggest) i (bel 'i // PB stressed + vis) i (bel 'i // PB stressed _medl) i (denhed 'i // PB medlidenhed - stressed _omkr) i (ng 'e? // PB stressed e in 'omkring' kn) i (p e? // PB knippel @@ -1889,7 +2072,9 @@ _polit) i 'i // PB politi, politik - stressed i _re) i (ster 'i // PB register - stressed ii r) i (st e // PB brist, rist d) ie (sel i // PB dieselolie - k) io (sk jV // PB kiosk + k) io (sk jV // PB kiosk + tr) i (ck e // PB trick +_franc) i (sco 'i // PB // PB put stress on the syllable before final 'ium' - words in da_list &) ium ($p_alt =iOm // territorium @@ -1909,7 +2094,6 @@ _polit) i 'i // PB politi, politik - stressed i r) i (si e // PB risikere r) i (siko i // PB risiko -// r) i (sl e // risle p) i (ll e // PB pille lat) i (nis i // PB latinisme k) i (et 'i // PB Tyrkiet @@ -1980,6 +2164,7 @@ _terap) i 'i des) ign ain ingen) i (ør ant) igone 'igon@ // PB Antigone - Greek name + image imidZ .group in @@ -2031,13 +2216,18 @@ _sport) iv 'iw j j j (aw dZ - j (ack dZ + ja (ck dZ& + jerry dZeri // PB j (ob dZ j (ohn dZ + joe dZOu + jackie dZ&ki // PB + jo (ckey dZV // PB _) j (im_ dZ // PB _) j (eff dZ // PB j (azz dZ // PB je (t dZE // PB jetfly + ø) j (et j // PB øjet, overtøjet j (ungl dZ // PB jungle _) jersey (_ dZW:si // PB New Jersey _) jersey (s_ dZW:si // PB New Jerseys @@ -2048,6 +2238,7 @@ _sport) iv 'iw en) j (ambe S // PB enjambement ro) j (ekt S // projekt a) j (ou S // ajour + j (ongl S // PB jonglør j (ournal S // PB journal ma) j (or j' // PB major j (uice dZ //PB juice @@ -2070,7 +2261,12 @@ _sport) iv 'iw kumquat kVmkwVd // PB &) kvarter kvarter // PB kommandokvarter s) k g + _spe) k (takk ' // silent k, stresssed a - spektakkel + _spe) k (takl ' // silent k, stressed a - spektakler + spe) k (takk // silent k - spektakkel + spe) k (takl // silent k - spektakler &) k k // after stressed vowel + _) kate (_ kEjt // PB name // &) kk g .group l // PB l changed to l/3 in ph_danish @@ -2085,7 +2281,8 @@ _sport) iv 'iw &) log (i$p_alt log' // mytologi // PB nouns in da_list with final -let - stressed e - &) let ($p_alt l'et // amulet + &) let ($p_alt l'Et // amulet + &) let (t$p_alt l'E // avoid double t - toilettet s) l l/2 // PB add a bit more to l after s f) l l/2 // PB add a bit more to l after f @@ -2099,9 +2296,12 @@ _sport) iv 'iw leger lajV // PB leger legem lE@m // PB legemsdel lotion l3uSjn // PB håndlotion + lorraine loRE:n // PB name + he) lg (e lj // PB Helge, helgen levere lev'eV // PB -// lever lev'er // PB + _) lee (_ li: // PB the name Lee @) levere leveV // PB + ley li // PB volley .group m m m // PB m? -> m @@ -2109,6 +2309,8 @@ _sport) iv 'iw m (A m gour) mand %mAN // PB gourmand _gour) mand m''AN // PB gourment + _) mannequin m&n@k'EN // PB + mannequin m&n@kEN // PB _) mere (_ mer // PB mere matine m&tin'e // PB _) meget (_ ma:j@D // PB meget @@ -2127,6 +2329,7 @@ _sport) iv 'iw miguel _^_ES // PB madero _^_ES // PB money mVni // PB + makeup mEjk'Vb // PB .group me // PB General rule for words with -ment @@ -2194,7 +2397,7 @@ _posse) ment m'AN // PB possement _raffine) ment m'AN // PB raffinement _ressenti) ment m'AN // PB ressentiment _ræsonne) ment m'AN // PB ræsonnement -_signale) ment m'AN // PB signalement +_signale) ment m''AN // PB signalement _sorti) ment m'AN // PB sortiment _supple) ment m'AN // PB supplement _tempera) ment m'AN // PB temperament @@ -2238,8 +2441,11 @@ _bombarde) ment m'AN // PB bombardement // exceptions A) nd (el nd // PB andel, ejendel e) nd (elig n // PB endelig + ve) ndig ndi // PB udvendig ha) nd (el n // PB ke) nd (el nd // PB kendelse + nd (om nd // PB ejendom + nd (ød nd // PB stendød bi) nd (e n // PB forbindelse u) nde (l n // PB silent de - misundelig ble) nd (e nd // PB blender @@ -2248,6 +2454,8 @@ _bombarde) ment m'AN // PB bombardement mi) nde (li n // PB almindelig ele) nd (ig nd // PB nødve) nd (ig nd // PB + vi) nd (u nd // PB vindue + i) nd (oki nd // PB Indokina evi) nde (li n@ // PB evindelig y) nd (el n // PB begyndelse ba) nd (el n // PB forbandelse @@ -2259,6 +2467,7 @@ _bombarde) ment m'AN // PB bombardement u) nd (re nd // PB beundre va) nd (re nd // PB vandretur _i) nd (er+ nd // inder + i) nd (erst+ n // PB marska) nd nd // PB marskandiser _bagi) nd nd // PB Bagindien adde) nd nd @@ -2281,46 +2490,32 @@ subtrahe) nd nd sta) nd (ar nd // PB standard - keep the d i) nd (eks nd i) nd (i nd // PB Indien, individ, indianer + ti) nd (in n // PB tinding vi) nd (in n // PB udvinding i) nd (imellem n // exception i) nd (erl+ n // PB inderlig eku) nd nd .group ng - ng (_ N - A) ng (e_ N // mange, penge - A) ng (et_ N // ringet - A) ng (ede_ N // ringede - A) ng (ene_ N // PB pengene - A) ng (er_ N // PB hænger - A) ng (en_ N // PB ingen - A) ng (el N // PB engel - A) ng (ning_ N // PB hængning - ng (s N - - _a) ng (A ng + ng (_ N // general rule - ting, ring + A) ng (e N // general rule - mange, penge + allo) ng (e NS // PB + _ri) ng (o ng // PB Ringo - name + hæ) ng N // PB hængning + pi) ng N // PB pingvin + ng (s N // magengs + _a) ng (A ng // PB do we need this one? cha) ng (ement Nsj // PB changement ora) nge Nsj3 // PB orange ng (a ng - ng (i ng i) ng (s N - u) ng (e N - ba) ng (e N - fa) ng (e =N - fi) ng (er =N + fi) nger =NV _fi) ng (ere ng // PB fingeret + fi) ng (eren+ N // PB fi) ng (re =N - fu) ng (er Ng -// ga) ng (e N - la) ng (e N - li) ng (e N - læ) ng (e N - ru) ng (e N - se) ng (e N - ti) ng (e N + fu) ng (er Ng // fungere ti) ng (ent Ng - træ) ng (e N - arra) ng NS + arra) ng NS // arrangere .group o @@ -2350,11 +2545,14 @@ elektr) o (de 'o _biot) o (p 'o // PB stressed _isot) o (p 'o // PB stressed o (L06 V // PN op, opdrage, obstruere + vide) o o // PB videobånd gl) o o // PB global kn) o (b o // PB + br) o (ccoli V // PB helik) o (pt 'V // PB stressed - helikopter p) o (pu o // PB populær p) o (t V // PB potte + d) o (nald V // PB name p) o (tA o // PB potage o (per o // PB opera sk) o o // PB skopudser @@ -2370,16 +2568,20 @@ elektr) o (de 'o sj) o (f o // PB sjofel o (be o // PB oberst, koben r) o (L06 o // PB problem + pr) o (p V // PB blodprop kr) o (p V // PB gr) o (g V // PB groggy + hvalr) o (s V // PB _eur) o (pa 'o // PB stressed dr) o (p V // PB droppe r) o (nt V // PB front er) o (p V // PB herop + o (lm V // PB olm, holm _) obo ob'o // PB Ca) o (s V // PB kaos Laos r) o (ma o // PB romantik - or (g+ V: // PB sorg, morgen + org (+ V:w // PB sorg, morgen, Norge + o (rga+ V // PB organ r) or (g oR // PB rorgænger kont) o (r 'o // PB kontor - stressed korrid) o (r 'o // PB @@ -2406,16 +2608,19 @@ mening) oko (k ok'V // PB meningokokker h) o (ll V // PB Holland _horis) o (n 'V // PB horisont o (nt V // PB dont - n) o (n V // PB nonne, nonkombattant + n) o (n V // PB nonne, nonkombattant _kan) o (n 'o // PB stressed kan) o (n o // PB not stressed after a syllable o (dds V: // PB odds o (sse V // PB tosse, nosse j) o (b V // PB job mon) o (k 'V // PB monokel - stressed - ov (A+ Vu // PB over, oven + ov (e+ Vu // PB over, oven + k) ov (end ov // PB kovending + ov (ærn+ ov // autoværn h) ov (+ Vu // hov, sove - ov (_+ Vw // PB sjov, lov, skov + ov (+ Vw // PB sjov, lov, skov + sk) ov (tur Vw // PB l) ov (_mig_ ow // PB from the verb "at love" ov (s_+ Vw // PB sjovs, lovs, skovs ov (t_+ Vw // PB sjovt @@ -2424,8 +2629,11 @@ _horis) o (n 'V // PB horisont ov (p Vw // PB lovprise v) ov (e Ov // PB vove o (fC V // PB ofte - n) ov (+ ov // PB nova, november + n) ov (++ ov // PB nova, november _C) o (k 'V // PB beginning with 1 consonant followed by o and k: sok, nok, kok + p) o (ka o // PB pokal + p) o (ker o // PB + bet) on VN // PB betonen k) o (ke O // PB koket d) o (ku o // PB dokument ch) o (ko o // PN chokolade @@ -2442,6 +2650,7 @@ _horis) o (n 'V // PB horisont o (rk V // PB orke orkester g) o (dt V // PB godt, godte k) or (p V: // PB korps + k) or (pi or // PB korpige k) o (rre V // PB korrekt g) od (tr oD // PB godtroende g) od (tAg oD // PB godtage, godtog @@ -2456,11 +2665,13 @@ _horis) o (n 'V // PB horisont s) orer 'o:V // PB professorer L08) o (f V // PB stof l) o (ft V // loft + l) o (dr V // PB lodret _l) o (g_ V // PB log l) o (gg V // PB logge på + l) o (gbog Vg // PB o (lf V // PB golf, Adolf b) o (ll V // PB bolle - l) o (ve+ ou // PB love + l) ov (e+ ou // PB love l) ondon VndVn // PB London od_ VD // PB - od, vod, skod odd (A VD // PB - odder - only this word @@ -2473,9 +2684,11 @@ _horis) o (n 'V // PB horisont _pil) o (t 'o // PB stressed - pilot _idi) o (t 'o // PB stressed _matr) o (s 'o // PB stressed +_metad) o (n 'o PB stressed + ang) o (la 'o // PB stressed L09) o (va o // PB nova, renovation - r) o (vA+ ov // PB provokere - h) o (ved o: // PB hoved + pr) o (vA+ ov // PB provokere + h) oved o:@D // PB hoved tr) o o // PB tro kn) o (tt V // PB knotten kn) o (tn V // PB knotne @@ -2492,8 +2705,10 @@ _horis) o (n 'V // PB horisont t) or (e o // PB faktorer t) or (en V // PB faktoren, doktoren oy (+ 'Vj // PB destroyer, royal, loyal + _f) oyer O@j'e // PB + f) oyer O@je // PB st) o (r+ o // PB stor - p) o (r O // PB porno + p) o (r O // PB porno _m) o (C o // PB m + o + consonant: mor, mord, m) o (ms V // PB m) o (kk V // PB mokke, mokka @@ -2511,18 +2726,24 @@ _horis) o (n 'V // PB horisont t) oi o& // PB toilet d) o (k o // PB dokument l) o (kA o // PB lokal + bl) o (k V // PB blokere + br) o (d V // PB brod, brodne + br) o (de o // PB broder, brodere k) o (ka o // PB kokasse, kokain s) o (pr o // PB sopran oregonpine VregVn||pajn // PB + oklahoma okl&h'om& // PB c) ogn (ac VN // PB b) o (m o // PB bombe L11) o (m V // PB gommen, brudgom, kom, velkommen + k) o (mi o // PB komiker L11) o (ma o // PB koma, narkoman L11) o (mman o // PB kommando p) o (m V // PB pomp Xl) o (m V // PB lom, lomme, blomst pl) o (m o // PB exception from the rule above (Xl) o (m) - plombe o (m V // PB om, ensom VERY BROAD + f) o (m o // PB nymfoman fot) o o // PB r) o (mA o // PB romer b) o (mu V // PB bomuld @@ -2547,10 +2768,14 @@ _horis) o (n 'V // PB horisont o (se o: // PB rose, skose, pose h) o (spice V // PB hospice C) o (st V // PB post, moster + r) o (st o // PB rost + fr) o (st V // PB + f) oged o:@D // PB silent g k) o (sC V // PB kosmisk k) o (st o // PB kost (broom) Problem with kost = food k) o (ste V // PB verb - koste = brooms will be mispronounced frok) o (st V // PB + omk) o (st V // PB omkostninger pr) o (s o // PB prostitueret st) o (mi o // PB stomi h) o (st o // PB host @@ -2572,6 +2797,7 @@ _astron) out awd // PM oun aVn // PB discount kl) oge ow,@ nark) o (tik 'o // PB narkotika, narkotisk + _ansj) o (s 'o // PB stressed ul) o (v 'V // PB stressed o - ulovlig h) o (ng V // PB Hongkong k) o (mmu o // PB kommunisme @@ -2582,6 +2808,7 @@ _filos) o (fi_ o' // PB _filos) o (fisk 'o //PB mem) oire o'A: // PB memoire(r) aprop) o (s 'o // PB + r) oastbeef Ousdbif // PB roastbeef // PB final -ol words in da_list - stressed o &) ol ($p_alt+ 'ol // parabol @@ -2590,6 +2817,7 @@ _filos) o (fisk 'o //PB &h) ol (i$p_alt+ 'ol // alkoholisk &ok) ol ($p_alt+ 'Vl // protokol &t) ol ($p_alt+ 'Vl // chatol + &nt) ol ($p_alt+ 'ol // mentol &tr) ol ($p_alt 'Vl // kontrol &tr) ol (e$p_alt 'ol // petroleum &tr) ol (l$p_alt 'o // kontrollere @@ -2601,6 +2829,7 @@ _filos) o (fisk 'o //PB L11) o (ld V // PB kold, gold ravi) o (li 'o // PB stressed o j) o (l V // PB jolle, fjols, fjolle + p) o (llen V // PB pollen kj) o (l o // PB kjole kj) o (ld V // PB skjold L06) o (ld V // PB bold @@ -2616,11 +2845,12 @@ _filos) o (fisk 'o //PB h) o (lo o // PB hologram h) o (le // PB hole s) o (ld V // PB solde - s) o (lgt V // PB solgt - exception + s) olgt Vlt // PB solgt - exception tr) o (ld V // PB trold kn) o (ld V // PB knold sn) o (t V // PB snot or (l O: // PB orlov + oscar VskA // PB .group on @@ -2650,14 +2880,18 @@ dødvægtt) on Vn kol) onn 'Vn // kolonne - only one n, stressed kompagn) on VN orl) on Vn - maked) on 'on // PB makedoner +_maked) on 'on // PB makedoner perl) on Vn @sal) on VN @tal) on VN + _sæs) on 'VN tefl) on Vn t) on (_ Vn // ton, kiloton + t) on (ic Vn // PB t) on (s_ Vn // PB tons + t) on (sv Vn // PB tonsvis alf) on (s 'VN // PB alfons + f) ond Vnd // PB ball) on 'VN on (du Vn // ondulere @@ -2708,7 +2942,7 @@ _kondens) or =V _process) or =V _profess) or =V _provis) or =V -_revsi) or =V +_revis) or =V _success) or =V // PB when "ord" means 'word', the d isn't pronunced @@ -2717,6 +2951,7 @@ _success) or =V k) ord (el Vrd // PB kordel hv) ord (an Vrd // PB hvordan m) ord (A ord // PB morder + m) ord (et oR // PB mordet f) ord (æ Vd' // PB fordærve f) ord (ø Vd' // PB fordømme ord (en+ Vrd // PB orden, ordensmagt @@ -2742,7 +2977,10 @@ _success) or =V &t) orium ($p_alt 'oiOm // don't spoil the -ium rule - laboratorium // PB no stress on initial 'for' - 1.550 words. - _f) or (@+ %V +// Secondary stress on the next syllable after a syllable. + _f) or (@+ %V // PB fork'ølet + f) or (@ V, // PB s'ommerfork,ølet + // exceptions to initial 'for' below - 'for' means "front/fore" _f) or (a_ 'V // PB fora (plur. of 'forum') _f) or (an_ 'V // PB foran @@ -2772,6 +3010,7 @@ _success) or =V _f) or (dæk_ 'V // PB fordæk _f) or (dæks 'V // PB fordæks _f) or (dækkene 'V // PB fordækkene + _f) or (dør 'OR // PB _f) ore (+ '0:@ // PB foreberinge, foregribe _f) ore (n V'e: // PB forene, forening _f) or (el_ or // PB forel @@ -3006,12 +3245,14 @@ _success) or =V .group r r R + rr R rickshaw rekSV: // PB rickshaw rickshawer rekSV:V // PB rickshawer recut rikVd // PB reggae REgEj rioja ri'Vk& ramirez _^_ES + reece ri:s // PB name r (K r // not followed by a vowel hve) r r // PB hver b) r r // bror @@ -3021,9 +3262,11 @@ _success) or =V he) r (_ r // PB her e) re (s 3 // PB jeres, deres @) re (_ V // PB "re" ending a word - være, sejre + _ent) re (_ R'e // PB entre bu) rd (eK rd A) r (er_N // silent r - skærer - &) re (_N V // silent r - skære + A) re (_N V // silent r - skære + g) re (_ rV // PB yngre sa) rd (el rd // PB sardel ga) rd (e rd // PB garde ve) rd (eKK rd @@ -3048,6 +3291,7 @@ transpo) r (t //PB transport s s ss s sc s // PB scene + sco (t skV // PB Scotland Yard // PB/JD s suffix - $alt words in da_list // 2-3.000 words end with s, so this cannot be a general suffix. // There would be too many exceptions. @@ -3095,7 +3339,9 @@ franci) sc (o sk // PB Francisco si (on S // PB changed from "s (ion S" - division s (j s sch S // PB changed from [s(ch] - gullasch + sh (erif S // PB schweiz svajts + sioux su: // PB red indian al) s (ace 's // PB Alsace (French region) _) sion si:Vn // PB Sion, Sions kirke shine sjajn@ // PB @@ -3129,6 +3375,7 @@ franci) sc (o sk // PB Francisco _) sig (_selv saj // PB noget for sig selv for_) sig (_ saj // PB se noget for sig fra_) sig (_ saj // PB slå fra sig + stå_) sig (_ saj // PB stå sig godt med _) sig (_alene saj // PB klare sig alene vende_) sig (_ saj // PB erklære_) sig (_ saj // PB @@ -3136,6 +3383,7 @@ erklære_) sig (_ saj // PB hygge_) sig (_ saj // PB skød_) sig (_ saj // PB tog_) sig (_ saj // PB + ør_) sig (_ saj // PB klør sig, gør sig _) sig (_ud_ saj // PB rode sig ud i _) sig (_af_ saj // PB tage sig af ak_) sig (_ saj // PB drak sig fuld @@ -3171,7 +3419,8 @@ kompromi) s ' // PB stress added tt t _) t (_ te: // the letter T _) t (_shirt t'i:% // PB T-shirt - e) tt (@ t|t // PB ettiden, ettal + e) tt (id t|t // PB ettiden + e) tt (al t|t // PB ettal le) tt (e t // PB slette p) t t // PB toptitel s) t d // PB stor @@ -3181,9 +3430,11 @@ kompromi) s ' // PB stress added ve) t (er t // PB veteran vi) t (er t // PB inviter teress (ant tr@s // PB interessant - in) teresse t@r'&s@ // PB interesse + in) teresse t@r'as@ // PB interesse + in) teresser t@r'asV // PB interesse in) teresseret tr3s'er@D // PB interesseret in) teresserer tr3s'erV // PB interesserer + in) teressere tr3s'erV // PB interessere // er) t d // PB kuffert r) t (e t // PB abortering re) t (+ t // ret @@ -3210,6 +3461,9 @@ glemen) t (al t tennessee tEn@si // PB teenage ti:nEdZ // PB teenager ti:nEdZV // PB + tracy trEjsi // PB + tombstone tu:msdoun // PB + town tAwn // PB // PB final -tek - stressed e _apo) tek t'ek _biblio) tek t'ek @@ -3281,6 +3535,7 @@ meningi) ti (s =ti ti (on+ S // bastion, station ti (øs+ S // tendentiøs pa) ti (ent S // PB patient + kvo) ti (en S // PB kvotient r) til tel // PP hertil, dertil _poli) ti (k t'i // PB politik @@ -3296,10 +3551,12 @@ meningi) ti (s =ti u (gle+ u // ugle u (hyre+ u u (enig+ u' + u (denfor+ u // PB u (dgrundelig+ u // PB + u (imodståelig u // PB u (ni++ u // uniform, universitet u (den u // udenfor - u (ng+ 0 + u (ng++ 0 u (ge++ u // ugerne u (r++ u // ur, urrem, uret _) u (retfæ++P1 u // uretfærdig - prefix @@ -3338,6 +3595,7 @@ meningi) ti (s =ti // PB final -ut in da_list - stressed u &) ut ($p_alt 'ut // rekrut + &) ut (t$p_alt 'u // rekrutter - avoid double t // PB most of the words with ud-: [uD] - udpege _) ud (@@+P2 ''uD @@ -3351,10 +3609,12 @@ meningi) ti (s =ti _) ud (øbt+P2 ud _) ud (ød+P2 ud // udødelig _) ud (åd+P2 ud - + _) ud (en+ uD u (nK u u (nL08 O // PB kunst br) unch VnS // PB + st) u (nt V // PB stuntman + b) urg (er Wg // PB u (ng O // PB ung u (mK O _) usa (_ u:|es|'& // PB @@ -3362,9 +3622,11 @@ meningi) ti (s =ti s) ur (fe 3: // PB surfe, surfer s) ur (fb 3: // PB surfbræt u (nd O // PB underligt, undtage + p) u (nd u // PB pund _sek) u (nd 'O // PB stressed _glas) u (r 'u // PB stressed _abs) u (rd 'u // PB stressed + _fig) u (r 'u // PB stressed l) u (f 0 // PB luft l) u (n_ u // PB lun l) u (ne u // PB lune @@ -3403,6 +3665,7 @@ centrif) u (g 'u // PB stressed k) u (l O // PB kulmine hovedk) u (ls u // PB k) u (ld u // PB kulde + omk) u (ld 'u // PB k) u (le u // PB kule sk) u (ll+ u // PB skulle k) u (lt u // PB kultur @@ -3446,6 +3709,7 @@ hovedk) u (ls u // PB val) u (ta 'u // PB stressed _der) u (d 'u // PB stressed - derud r) u u + r) u (p O // PB korrupt r) u (m O s) u (cc y b) u (dget y @@ -3454,7 +3718,9 @@ hovedk) u (ls u // PB parf) u (me 'y // PB proced) u (re y proven) u y - nat) u (rel y // PB naturel + nat) u (rel_ y // PB naturel + _kost) u (me 'y // PB + kost) u (me y // PB s) u (rrel Y // PB surreel s) u (rrea y // PB surrrealistisk t) u (berkul y // PB tuberkulose @@ -3470,7 +3736,7 @@ proven) u y .group v v v vv v - o) v (A // PB love - handled by group o +// o) v (A // PB love - handled by group o L09o) v (A v // OV nova renovation pro) v (ence v // PB Provence in France i) v (l u // PB tvivl @@ -3510,6 +3776,10 @@ proven) u y w (assermannprøve v // PB wassermannprøve wien vin // PB wienerbrød weekend wi:gEnd // PB + wisconsin wesk'Vnsen + wright _^_EN // PB + willie wili // PB + _) wild wAjld .group x @@ -3523,7 +3793,8 @@ proven) u y y y - r) yg (_ @k // PB ryg + r) yg (_ @k // PB ryg (noun "back") - problem with "ryg" (verb) = "smoke" + r) yg (_en y // PB "ryg en cigar" r) yg (C '@k, // PB rygrad r) y (s W // PB ryste fr) y (s y // PB fryse @@ -3538,9 +3809,9 @@ proven) u y sm) y (k W // PB smykke lib) y i // // PB Libyen l) y (st @ // PB problem with lyst = blond, light coloured + _l) y (ste_ y // PB &l) y (st y // PB åbenlyst - fl) y y (+ // PB flystøtte -// till) y (kke 'W // tillykke - stressed y + fl) y y // PB flystøtte L08) y (t W // PB spyt, skyts sk) y (ti y // PB Skytien, skytisk sk) y (ter y // PB skyter @@ -3557,7 +3828,8 @@ _molek) y (le 'y // PB stressed n) y (t Y // PB nyt n) y (tt W // PB nytte, benytte n) y (k W: // PB nyk - kn) y (t W: // PB tilknytte + kn) y (tt W: // PB tilknytte + kn) y (t y // PB knyt k) y (s W // PB kys k) yss Ws // PB kysse k) y (se y: // PB kyse @@ -3569,6 +3841,7 @@ _molek) y (le 'y // PB stressed s) y (nkroc W // PB synkrocyklotron y (ng+ W // PB syng, yngre l) y (n y // PB lyn + kl) y (nk W // PB klynke pl) y (n W // PB plyndre fl) y (t_ W // PB flyt fl) y (tt W // PB flytte @@ -3582,6 +3855,7 @@ _molek) y (le 'y // PB stressed yacht jagd // PB lystyacht york JV:k // PB yankee j&nki // PB + luc) y i // PB ken) y (a j // PB d) y (_ i b) y (A y @@ -3600,8 +3874,9 @@ _molek) y (le 'y // PB stressed // PB nouns ending with -ær in da_list - stressed last syllable &) ær ($p_alt 'Er // elementær - æ (CK E +// æ (CK E r) æ (d a // PB forræder + pr) ædi ED // PB prædiken æ (bK E // PB dræb, slæb æ (bt &# // PB dræbt sl) æ (L06 E // PB slæbt @@ -3612,23 +3887,27 @@ _molek) y (le 'y // PB stressed kr) æ (m &# // PB skræmme, kræmmer r) æ (n &# // PB changed from [Aj] - rænke r) æ (k &# // PB række + r) æ (t &# // PB åndedræt pr) æ (k E // PB præke bl) ære EV // PB blærerøv gr) æ (ken E // Grækenland skr) æ (dd a // PB skrædder br) æ (dd a // PB brædder br) æ (t &# // PB bræt + dr) æ (gtig &# // PB nederdrægtig pr) æ (st & // PB præst tr) æ (t & // PB træt tr) æ (f &# // PB træffe gr) æ (n & // PB grænse - gr) æ (s & // PB græs + gr) æ (s &# // PB græs gr) æ (d &# // PB græde f) æ (re 'E: // PB affære, atmosfære, sfære gev) æ (r 'E // PB gevær besv) æ (r 'E // PB besvær afh) æ (ngig 'E: // PB stressed e _pal) æ 'E // PB stressed +_porcel) æ (n 'E // PB stressed + _pygm) æ 'E // PB stressed t) æge E:j@ // PB tæge t) æe (r E // PB tæer pr) æ (ge E: @@ -3636,6 +3915,7 @@ _molek) y (le 'y // PB stressed ærger E:ruV // PB sværger ævl Eul // PB majest) æ (t 'E // PB stressed æ + ærinde ERn@ // PB .group ø // røveren [V] faldt på røven [W#] og skød [W] en møgkælling [Vj] @@ -3645,6 +3925,8 @@ majest) æ (t 'E // PB stressed æ ff) ø (r 'W // PB stressed in 'chauffør' _milj) ø 'W // PB stressed - miljø obsk) ø (n 'W: // PB stressed + _nev) ø 'W // PB stressed + _am) ø (be 'W // PB stressed g) ø (r '@: h) ø (j V ø (je W# // PB øje @@ -3703,8 +3985,12 @@ majest) æ (t 'E // PB stressed æ s) å (_snart V // PB s) å (_få V // PB s) å (kald V // PB såkaldt + s) å (mænd V // PB + jas) å (_ 'V // PB jaså alts) å V // PN altså hvorn) år 'O? // PB hvornår - stressed +uimodst) å (elig 'O // PB stressed + forh) åbentlig 'ObEntli // PB stressed h) år V:? // PB hår, hård bl) å (@ V // PB blåbær, blågrå å (nd V // PB hånd, ånd, bånd @@ -3718,10 +4004,11 @@ majest) æ (t 'E // PB stressed æ L08r) å (t V // PB skråt m) å (t V // PB måtte _p) å V // PB påmontere + t) å (lmo V // PB tålmodig _p) åse Vse // PB påse r) å (t V // PB gråt r) å (bt V // PB råbte - år V:? // PB år, står + år V: // PB år, står åre V3 // PB tåre .group diff --git a/dictsource/dict_phonemes b/dictsource/dict_phonemes index 39abe29f..88e5f1e2 100644 --- a/dictsource/dict_phonemes +++ b/dictsource/dict_phonemes @@ -56,13 +56,13 @@ x z Dictionary da_dict & &# 0 3 @ @- a A -e E i o O u V W -W# y Y +aI e E i o O u V +W W# y Y * - : ? b B d D dZ f g h j J k l l/2 l/3 m n N p r R -s S t T tS v w +s S t T tS v w z Dictionary hu_dict diff --git a/dictsource/en_list b/dictsource/en_list index 5607dfa3..8a2ca729 100644 --- a/dictsource/en_list +++ b/dictsource/en_list @@ -1003,6 +1003,7 @@ dose doUs dosage doUsI2dZ dramatic dr@matIk drawer drO@ +dreamt drEmpt drier draI3 driest draI|@st duet dju:'Et @@ -1221,6 +1222,7 @@ havoc hav@k hasty heIstI hatred heItrI2d hazardous haz3d@s +headfirst $2 heh hEh hehe hi:h'i: heifer hEf@ @@ -1759,6 +1761,7 @@ preset pri:sEt prestige prEst'i:Z ?3 pretense pri:tEns pretext pri:tEkst +pretrial pri:tr'aI|@L pretty prItI privation praIv'eIS@n privilege prIvI2lI2dZ @@ -3096,6 +3099,7 @@ thy ,DaI thine ,DaIn me ,mi: $only +me mi: $atstart $atend him ,hIm $only us ,Vz $only us $abbrev $allcaps diff --git a/dictsource/fr_list b/dictsource/fr_list index f6827ba2..a017f035 100755 --- a/dictsource/fr_list +++ b/dictsource/fr_list @@ -24,7 +24,7 @@ // 2006-11-18 Gilles Casse // -// Updated 2010-06-11 Michel Such +// Updated 2010-06-15 Michel Such // // * Numbers, a few abbreviations and exceptions. // @@ -778,7 +778,7 @@ zut zyt exocet E2gzosEt fret fr'Et budget bydZE2 -hamlet hamlEt +hamlet _|amlEt knesset knesEt lazaret lazarE2 margaret margarEt @@ -884,7 +884,7 @@ contentions kO~tA~tjO~z2 dations datjO~z2 désertions dezErtjO~z2 $verb exploitions EksplwatjO~z2 -heurtions hYrtjO~z2 +heurtions _|WrtjO~z2 partions partjO~z2 rations ratjO~z2 $verb tentions tA~tjO~z2 diff --git a/dictsource/fr_rules b/dictsource/fr_rules index 621cb397..ee26f30c 100755 --- a/dictsource/fr_rules +++ b/dictsource/fr_rules @@ -1,1457 +1,1460 @@ -// French translation rules for Espeak - -// *************************************************************************** -// * Copyright (C) 2005 to 2010 by Jonathan Duddington * -// * email: jonsd@users.sourceforge.net * -// * * -// * This program is free software; you can redistribute it and/or modify * -// * it under the terms of the GNU General Public License as published by * -// * the Free Software Foundation; either version 3 of the License, or * -// * (at your option) any later version. * -// * * -// * This program is distributed in the hope that it will be useful, * -// * but WITHOUT ANY WARRANTY; without even the implied warranty of * -// * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * -// * GNU General Public License for more details. * -// * * -// * You should have received a copy of the GNU General Public License * -// * along with this program; if not, see: * -// * . * -// ***************************************************************************/ - -// This file is UTF-8 encoded - -// 2006-11-18 Gilles Casse -// -// Updated: 2010-06-12 Michel Such -// - -// Letter classes: -// A all vowels: a e i o u y â ä é ê è î ï ô ö ù û -// C all consonants -// Y front vowels: e i y é ê è î -// K not a vowel (i.e. consonant, space, ) - -.replace -œ oe -î i -à a - - -.L01 d e l n r t u -.L02 b c d f g h k p t v -.L03 d l m n s t v -.L04 c d f g l m n v -.L05 g h k l m v w -.L06 l r s - - -.group a - ae (_ e // reggae vitae - aen A~ // caen (diff Cicero: aA~) - ae aE // maestro - aim (K E~ // faim - ain (K E~ // pain - Ct) ain (_ E~n2 // certain ami - ch) ain (_ E~n2 // prochain arret - ai (_ e // dirai ferai... - _ess) ai (_ E2 // essai - _vr) ai (_ E2 // vrai - ai (b E // faible - ais (_ E2z2 // dirais ferais... - ait (_ E2t2 // dirait ferait... - aient (_ E2t2 // diraient feraient... - f) ai (sA @ // faisons faisan - a (ilK a - aie (me E2 // paiement - ai E // aile - ai (L06 E // aile - ai (CAX E // aile - am (b A~ // jambon - am (p A~ // camp - am (m a // programmation - _) am (n am // amnistie - am (n a // condamner - - _L04) an (_ an - an (n_ a - _h) an (_ an - _) anti (@@P4 A~ti - _) arché (@P5 arke // archéologue - _) archéo (@P6 arkeo // archéologue - _) arch (aP4 ark // archange - _) arch (oP4 ark // archonte - _) anarcho (@P7 anarko // anarchosyndicalisme - - a (nnA a // manne - an (K A~ // ancien, élan - an (h an - @@m) an (_ an // tennisman - zm) an (_ an // jazzman - L02m) an (_ an - lism) an (_ A~ // talisman - ulm) an (_ A~ // musulman - _caïm) an (_ A~ // caïman - _C) aon (_ A~ // faon, paon, taon - s) aoul (_ u // saoul - s) aou (le u // saoule - août ut // août - août (i aus // aoûtien - aut (_ ot2 - a (ô // saune - au o2 // au, aux - aud (_ o // chaud -_C) aud (_ o2d // Maud - au (l_ o // Paul - au (re_ o // dinosaure - _) audio (@P5 o2dio - _) auto (@P4 o2to - _) autom (n otO - bb) aye (X ei // abbaye - ay (C E // aymé - ay Ej // paye - ay (_ E2 // display - Xl) ayer (X E2jWr // player, layer - w) an (_ an - a a // bateau - -// group a: English section - sm) all _^_en // small, smaller - a (wC _^_en - - -.group b - bb b // abbé - om) b (_ // plomb applomb - b b // aube - -// group b: English section - back _^_en - bbl _^_en - bird _^_en // bird - board _^_en // board, keyboard - box (_ _^_en // box, inbox, outbox - bugg _^_en // debugger - _) by _^_en // by, bye, bypass - - -.group c - _) c' (P2v s // s - cch k // bacchanale - cc (Y ks // accéder - cc k // occuper - _) c (d se - _) ch (arism k // charisme, charismatique - _) ch (irop k // chiroptère - a) ch (_ k // almanach - ar) c (ti // arctique - e) ch (_ k // varech - ni) ch (_ k - _A) ch (o_ k // écho - mani) ch (é k // manichéisme - wi) ch tS // sandwich - mito) ch (o k // mitochondrie - _eu) ch (ari k // eucharistie - or) ch (esC k // orchestre - or) ch (iC k // orchidée - _) ch (ao k // chaos, chaotique - _) ch (orA k // chorale - _) ch (oriz S - _) ch (oro S - ch (r k // chrétien - _) chrono (@P6 krono - ch (l k - ch (n k - ch (s k - ch (to k - ch S // chien - ck k // nickel - cqu k // grecque - cq k // pecq - s) c (Y - x) c (Y - c (Y s // cède - _) cyber (P5 sibEr - Can) c (_ // banc - Con) c (_ // tronc, jonc - _don) c (_ k // donc - cler) c (_ // leclerc - tchou) c (_ - taba) c (_ - toma) c (_ - se) c (ond g // seconde secondaire - c k // recoin donc - - cient (_ sit2 // ils appr�ient, remercient. - effi) cient sjA~ // coefficient - défi) cient sjA~ // déficient - cast (_S4 kast // podcast - casts (_S5 kast // podcasts - _) clown klun - -// group c: English section - n) ch (_ _^_en // french - ch (ment _^_en // attachment - cut (_ _^_en // cut, shortcut - - -.group ç - - ç s // rançon - _) ç' (P2v s - - -.group d - dd d // addition - _) d' (P2 d - _ban) d (_ d - _lan) d (_ d // land - _stan) d (_ d // stand - an) d (_ - _san) d (_ d - - _gran) d (_ t2 // grand ami, grand marchand - Cen) d (_ t2 - Con) d (_ - con) d (_ t2 - quen) d (_ t2 - r) d (_ - _har) d (_ d - lor) d (_ d - oi) d (_ - ou) d (_ - - dt (_ t // Schmidt - _ni) d (_ // nid - d d // don bled - _expé) dien (t_ djA~ // expédient -V_expé) dien (t_ di // expédient -_ingré) dien (t_ djA~ // ingrédient - dien (t_ di // étudient (verbe) - _) dendro (@P6 dE~dro - -// group d: English section - day (_ _^_en - _) devic _^_en - dle (X _^_en // bundle, handle - - -.group e - -// Define use of the final 'e' in french - e (_ - _C) e (_ @ // je te - -c) e (_ - -j) e (_ - C) e (- - - e (Ce_ E - eau o // bateau - g) ea (s_ a // mangeas - cap) e (la_ e - gh) e (tAX e // spagheti - j) e (a // Jean Jeanne - p) ect (_ E2 // suspect - ect (_ Ekt // direct - pi) ed (_ e // pied - _art) e (++ e // arte, artefact - _cl) ef (_ e // clef - _cr) e (at e - _) ein (K En // Einstein - ein (K E~ // peindre - pl) ein (_ E~n2 // plein emploi - e (il E // vieille - ei E // neige - eoi wa // asseoir - ell El // selle - el (K El // celsius, caramel - _f) em (me a // femme - i) e (mA // remerciement, d�ploiement - A) e (rA // remerciera - tch) e (rX Y - @) em (me a // patiemment - em (b A~ // décembre - em (mACC A~ // emmancher - em (mACAC A~ // emmagasiner - em (ma E2 // emmanuel - em (mai A~ // emmailloter - l) em (n a // solemnel - il) emn Em // dilemne - em (p A~ - en (_ A~n2 // en - en (hA A~n // enharmonique - _C) en (j E~ // benjamin - _flam) en (c E~ // flamenco - _) en (A A~n // enivrer - - C) en (d_ A~ // comprend dépend - od) en (dr E~ // rhododendron - qu) en (d_ A~ - - pati) en A~ // patient patience - en (nu A~ // ennui - en (nA E // penne ennemi - - é) en (_ E~ // européen - - Ci) en (nA E // mienne - - éC) en (t_ A~ // récent différent élément - équ) en (t_ A~ // fréquent, conséquent - étic) en (t_ A~ // réticent - - _C) en (t_ A~ // cent vent lent dent - cc) en (t_ A~ // accent - Asc) en (t_ A~ // luminescent - _dol) en (t_ A~ // dolent - ol) en (t_ A~ // somnolent, violent - Vol) en (t_ // somnolent, violent - Xol) ent (_ t2 // volent - eul) ent (_ t2 // veulent - ul) en (t_ A~ // turbulent - Ccul) ent (_ t2 - Vul) ent (_ t2 - imCoC) en (t_ A~ // impotent - inCoC) en (t_ A~ // innocent, indolent - -XACcid) en (t_ A~ // accident, occident - - _ag) en (t_ A~ // agent - _ard) en (t_ A~ // ardent - _arg) en (t_ A~ // argent - _urg) en (t_ A~ // urgent - V_urg) ent (_ t2 // urgent (verbe) - - _émin) en (t_ A~ // éminent - immin) en (t_ A~ // imminent - oémin) en (t_ A~ // proéminent - jac) en (t_ A~ // sous-jacent, adjacent - _lat) en (t_ A~ // latent - - ig) ent (_ t2 - ilig) ent (_ A~t2 - llig) ent (_ A~t2 - ndig) ent (_ A~t2 - tang) ent (_ A~t2 // tangent - @@ing) en (t_ A~ // astreingent, contingentindigent - - man) en (t_ A~ // permanent - _pat) en (t_ A~ // patent - rmam) en (t_ A~ // firmament - verg) en (t_ A~ // convergent, divergent - Vverg) ent (_ t2 // convergent, divergent (verbe) - - _serg) en (t_ A~ // sergent -CACCim) en (t_ A~ // condiment, gentiment - dim) en (t_ A~ // rudiment - Agim) en (t_ A~ // régiment - Alim) en (t_ A~ // poliment - inim) en (t_ A~ // infiniment - manim) en (t_ A~ // maniment - onim) en (t_ A~ // boniment - plim) en (t_ A~ // compliment - Atim) en (t_ A~ // bâtiment - _cim) en (t_ A~ // ciment - _pim) en (t_ A~ // piment - gm) en (t_ A~ // fragment - Asim) en (t_ A~ // quasiment - - ertin) en (t_ A~ // pertinent, impertinent - ontin) en (t_ A~ // continent, incontinent - _sArm) en (t_ A~ // sarment, serment - erm) en (t_ A~ // ferment - Vferm) ent (_ t2 // ferment, referment (verbe) - XArp) en (t_ A~ // arpent, serpent - CArr) en (t_ A~ // conncurrent, torrent - Cerr) ent (_ t2 // ils serrent -_appar) en (t_ A~ // apparent - spar) en (t_ A~ // transparent - _par) en (t_ A~ // parent - V_par) ent (_ t2 // parent (verbe) - _var) en (t_ A~ // varent - mitt) en (t_ A~ // intermittent - énit) en (t_ A~ // pénitent - tourm) en (t_ A~ // tourment - Cflu) en (t_ A~ // affluent, confluent - VCflu) ent (_ t2 // refluent, influent (verbe) - - _tal) en (t_ A~ // talent - ival) en (t_ A~ // équivalent - Vival) ent (_ t2 // équivalent (verbe) - xcell) en (t_ A~ // excellent -Vxcell) ent (_ t2 // excellent - - iCam) en (t_ A~ - mm) en (t_ A~ - em) en (t_ A~ // lentement - mom) en (t_ A~ // moment - Aaim) en (t_ A~ - Caim) en (t_ A~ - dum) en (t_ A~ - gum) en (t_ A~ - jum) en (t_ A~ - oCum) en (t_ A~ - rum) en (t_ A~ - - éCid) en (t_ A~ - VéCid) ent (_ t2 - Xtrid) en (t_ A~ - _flor) en (t_ A~ - _laur) en (t_ A~ -_mécont) en (t_ A~ - _cont) en (t_ A~ -_Vcont) ent (_ t2 - éC) en (t_ A~ // compétent - _souv) en (t_ A~ // souvent - Cud) en (t_ A~ - - _couv) en (tS3f A~ // le couvent -V_couv) en (t_ // elles couvent -s_couv) en (t_ // elles couvent - - ent (_ t2 // étaient mangent - A) ent (_ t2 // étaient mangent - - Ci) en (K E~ // rien, lien - Ci) en (c A~ // science - - AA) en (_ E~ - C) en (_ En // amen, abdomen, golden - C) en (to_ En // memento - nc) ens (_ A~ // encens - xam) en (_ E~ // examen - - en (s_ A~ - en (CA A~ // pentathlon - en (CC A~ // entre - sp) ens (_ Ens // suspens - éC) ens (_ A~z2 // dépens démens - - _C) er (_ Er // fer - _Ch) er (_ Er // cher - _env) er (_ Er - _hi) er (_ Er // hier - _fi) er (_ Er // fier - _hiv) er (X Er // hiver - Cst) er (X Er // hamster - _cart) er (X Er // carter - _cutt) er (X Er // cutter - tain) er (X Er // container - _ti) er (_ Er - ack) er (K Yr - ock) er (K Er - rock) er (K Yr - - er (_ e // parler léger - er (s_ e - - i) e (rt_ E // requiert - - d) e (ssus_ @ // dessus - - _d) es (bA e - _d) es (jA e // Desjardins - _d) es (nA e - _d) es (qA e // desquels - - _l) es (qA e // lesquels - - _m) es (dA e // mesdames - _m) es (nA e - Am) es (dA e - Am) es (nA e // Dumesnil - - d) esh (A ez // Deshormeaux - - _r) e (ss @ // ressembler - _r) e (ssu e // ressusciter - _r) e (stra @ - _r) e (stro @ - _r) e (stru @ // restructurer - -) est (_ Est // -est - - dg) et (_ Et // Bridget, gadget - k) et (_ Et - tick) et (_ E2 - m) et (_ Et2 - - eu Y // eu - _) eu (ss y // eu - - _) eut (_ yt2 - eut (_ Yt2 - _) extra (uP5 E2kstra - _) extra (CP5 E2kstra - _) eû y // eût - eû Y: // jeûne - - ey (_ E2 // dahomey - ey (C E2 // ceylan - ey Ej // asseye - - ez (_ ez2 // nez mangez chez - - g) e (A // mangeons - g) eu Y // vengeur - g) eu (re y // gageure - - _d) e (ch @ - _r) e (ch @ // recherche - e (Cl @ - - _l) e (xA E2 - _m) e (xA E2 - _l) e (CA @ - _l) e (ChA @ - _l) e (ClA @ // Leclerc - tr) e (CA @ - tr) e (ChA @ - - e (CC E // infect pelle mettre - e (Cr @ - _) e (C% e // effet, effectuer - e (C_ E - e (t_ E2 - e (rC E - es (_ z2 - - %C) e (xA E2 - - @gu) e (CA - @gu) er (A r - @qu) e (CA - @qu) er (A r - _qu) e (CA @ -@L06gu) e (CA @ -@L06qu) e (CA @ - @C) e (CA - @C) e (li @ - @ch) e (li @ - @C) er (A r - @C) e (rion++ @ - @C) e (riez++ @ - @ch) e (CA - @ch) er (A r - L06ch) e (CA @ - @L06C) e (CA @ - @CL06) e (CA @ - @bC) e (CA @ - @ct) e (CA @ - %C) e (CA++ - %C) er (A++ r - @C) e (xA++ E2 - @c) e (v++ @ - @d) e (v++ @ - - @C) e (CrA - @ch) e (CrA -@L06ch) e (CrA @ - @L06C) e (CrA @ - @L06C) e (rrA E - @CL06) e (CrA @ - %C) e (CrA++ - e (rr+++ E - - e @ // menue - _) e (CA e - _) e (xC++ E2 - Cr) eam Im - Cr) eamer ImWr - Cl) eaner InWr - vert) e (rX W - eï (K 'Ej - _y) en (_ En - iew) er (X er2 - _m) e (ga e - - -// group e: English section - eac _^_en - C) ead _^_en // read, head - eak _^_en // break, speak - eal _^_en // deal - ear _^_en // ear, search - eas _^_en // please - eave _^_en // leave - ed (_ _^_en - ee _^_en // meeting - efore (_ _^_en // before - eing (_ _^_en // being, boeing - eive _^_en // receive - eld (_ _^_en // field - _) enter (_ _^_en // enter - _) enhan _^_en - qu) est (_ _^_en // request - qu) este (X_ _^_en // requested, requester - _) even (X _^_en // forever, however - _) ever _^_en // forever, however - oC) ever _^_en // forever, however - _) eye _^_en - - -.group è - - Z) ème iEm - è E - ès (_ E - Ar) ès (_ Es - m) ès (_ Es - n) ès (_ Es - p) ès (_ Es - - -.group ë - u) ë // ambiguë - ë E // citroën noël - - -.group f - f f - f (f - _ner) f (X - _neu) f (_ans v // liaison: neuf ans - _neu) f (_heures v - -// group f: English section - _) fire _^_en - fly _^_en - _) frame _^_en - fter (_ _^_en - - -.group g - g g - g (Y Z - - su) gg (Y gZ // suggérer suggestif - gg g // agglomérer - ai) gni n^ // craignions châtaignier - gn nj // agneau -_wa) gner (_ gnEr - gni n^i // signifier - gn (e_ n^ - gn (_ n^ - gn (eCA nj@- - gn (ie n // compagnie - dia) g (no g - _a) g (no g -_quatrevin) gts (_ z2 - - vin) gt (_A t // liaison: vingt ans - - vin) gt (_un - vin) gt (_deux t - vin) gt (_trois t //liaison: vingt-trois - vin) gt (_quatr t - vin) gt (_cinq t - vin) gt (_six t - vin) gt (_sept t - vin) gt (_huit t - vin) gt (_neuf t - vin) gt (_neuvi t - - gt (_ // vingt doigts - An) gt (A t // vingtaine doigté - - gu (i g // anguille - ai) gui (l gyi // aiguillage - in) gui (s gyi // linguiste - g (C g - - _ran) g (_ // rang - _san) g (_ // sang - étan) g (_ // étang - _lon) g (_ // long - bour) g (_ // Strasbourg - - g (_ g // grog gag goulag - -// group g: English section - _) game (X _^_en - girl _^_en // girl - gy (_ _^_en - - -.group h - _) h _| - _) h (abi // habit, habilleur - _) h (allo // hallogène - _) h (ame // hameçon - _) h (andr // handroïde - _) h (arm // harmonie - _) h (el // hellène - _) h (ect // hectare - _) h (erb // herbe - _) h (é - _) h (éris _| - _) h (éro _| - _) h (eure // heure - _) h (iber // hibernation - _) hi (A _|j // hier - _) h (ippo // hippodrome - _) h (iro // hirondelle - _) h (ist // histoire - _) h (iv // hiver - _) h (omm // homme - _) h (onn // honneur - _) h (ô // hôpital - _) h (os // hostile - _) h (ora // horaire - _) h (orip // horipeau - _) h (oriz // horizon - _) h (oro // horoscope - _) h (orlo // horloge - _) h (orr // horreur - _) h (uil // huile - _) h (uiss // huissier - _) h (uitr // huître - _) h (umA // humain - _) h (umC // humble - _) hy (A j - haus (_ o2s //blockhaus - heim (_ ajm - _) h (y // hypermarché - _) hyper (@P5 ipEr - _) hyper (_ ipEr - _) hypra (@P5 ipra - h // ahuri - -// group h: English section - _) half _^_en - here (_ _^_en // here - - -.group i - i i // cri - - C) i (erA i - C) ien (t_ i - dév) ien (t_ i - t) ien (K_ jE~ // tient - v) ien (K_ jE~ // vient - at) ien (t_ jA~ // patient - cip) ien (C jA~ // récipient - cl) ien (C iA~ // client - mol) ien (C jA~ // émolient - vén) ien (C jA~ // inconvénient - or) ien (t iA~ // orient, orienter - ot) ien (t_ jA~ // quotient - - i (e_ i - _) i (ce@ aj // iceberg - _) ill il // illégal - ill (_ il // Bill - _C) ill (y_ il // Billy - aigu) ill ij // aiguille - anqu) ill il // tranquille - c) ill (i il - dist) ill il // distiller - _L05) ill il // Lille, mille, ville, william - osc) ill il // osciller - gu) ill ij // guillaume - qu) ill ij // quille - A) ill j // caillou - C) ill ij // famille - a) il (_ j // bail - e) il (_ j - gt) i (m aj - u) il (_ j // deuil - L01_f) ils (_ is // fils (enfant) - - imm imm // immaculé - im (_ im // karim - im (C E~ // timbre - w) in in // winrar - inct (_ E~ // distinct - in (h in // inhumain - in (kX iN // link - in (n i // innombrable - in (C E~ // vingt - in (_ E~ // vin - ing (_ iN - ing (s iN - ing (to iN - _) infra (sP5 E~fra - _) inter (@@P5 E~tEr - _) interr (A E~tEr - _) inter (_ E~t'Er - _) inter (ne_ E~t'Er - _) intra (neP5 E~tra - _) intra (uP5 E~tra - C) is (_ i - Kir) is (_ is - bor) is (_ is - dor) is (_ is - tor) is (_ is - fl) irt Wrt - otl) i (neX aj - onl) i (ne_ aj - offl) i (ne_ aj - dr) i (ve aj - pr) int (_ int - -// group i: English section - ibuter (X _^_en - iev _^_en - ife (_ _^_en - igh _^_en - iven (_ _^_en - ind (X _^_en // find, mind - _C) ind (erX _^_en // finder - AC) ind (erX _^_en // reminder - ize (X _^_en // realize - _bAl) i (ze i - ram_f) i (le _^_en - -.group ï - ï i // naïf - A) ï (_ j - A) ïe (_ j - A) ï (lA j - - - ïn (K E~ // coïncidence - ma) ïs (_ is // maïs - - - -.group j - j Z // adjoint joujoux - _) j' (P2v Z - _) jazz dZaz - _) j (obK dZ - _) j (ohK dZ - _) jusqu' (P6 Zysk - - -.group k - k k // kafka - - -// group k: English section - ke (_ _^_en // make, take - ke (s_ _^_en // makes, takes - ke (rX _^_en // maker - ke (nX _^_en // taken - -.group l - l l // lit - ll l // aller - _) l' (P2 l - au) lt // hérault - uCi) l (_ // outil, fusil - nti) l (_ // gentil - nti) lh j // gentilhomme - ui) ll j // juillet - _) lorsqu' (P7 lorsk - -// group l: English section - less (_ _^_en // noiseless - _) live _^_en - @) loud (_ _^_en - ll (X _^_en - - -.group m - m m // film - mm m // pomme - _) m' (P2v m - _) mc (@P2 mak - _) ms (P2 EmEs - master (_S6 mastYr - -// group m: English section - _) mail (_ _^_en // mailer - mov (ieX _^_en // move, movy - - -.group n - n n // une - nn n - ng (_ N - - _) n' (P2v n - _wAC) ner (_ nEr - - _) n (_° nymero - _) neuro (@@P5 nYro - _) nvda (P4 Envedea - - -.group o - br) oc (_ o // broc - cr) oc (_ o // escroc - on (n o - ls) on (_ on - Cst) on (_ on - _) os (_ os - _v) os (gY o2 - s_) os (_ o - x_) os (_ o - o (t_ o - - oe (ll wa // moelleux - oe (i Y // oeil - _) oe (C Y // oesophage - _ph) oe (C e // phoetus - _ph) oe (n_ Y // phoen - oeu Y // voeu - oeud Y // noeud - oeufs (_ Y // oeufs boeufs - oeu (x Yz2 // voeux coeur - o (eC o // coefficient - _) oi (gnon o // oignons - oin (C wE~ - oin (_ wE~ // coin - oi wa // poil - oê (l wa // poêle - om (C O~ // bombe - om (m o // nommer - om (ni om // omnibus - n) om (X O~ // nom - om (_ om // www.web.com - s) om (n om - - on (K O~ // mon - on (t_ O~t2 // mont vont sont - _m) ont (pAC O~ // Montpellier - _m) ont (m O~ - _m) ont (rAal O~ // Montreal - onsh (A O~z // bonshommes - onh (A on // bonhomme - _) on (z _|O~ // onze, onzi�me - - _c) on (_ O~ // no comment - gt) on (_ On // Washington - Cst) on (_ On - ps) on (_ On - _C) on (_ O~n2 // mon appui, mon histoire, mon havre - - alc) oo (l o // alcool - z) oo o // zoo - z) oo (C oo // zoologue - z) oo (m u // zoom - _gal) op (_ o // galop - - _sir) op (_ o // sirop - - v) ost (_ o // Prévost - _C) oup (_ u // coup, loup - - - ou u // hibou brouillard - ou (in w // pingouin - oue (mA u // dvvouement - _) ou (at _|u // ouate - où u // où - oû u // coûter - oy (A waj // noyer voyelles - _b) oy (co oj // boycott - _c) oy (o oi // coyote - _y) o (y o - oy wa - o (_ o // zorro allégro - o (z_ o // berlioz - o o - _sC) ot ot - - -// group o: English section - oa (X _^_en // approach, load - oa (_ oa - oa (s_ oa - oa (CerX _^_en - oach _^_en - old (er_ _^_en // folder, older - C) oing (_ _^_en // going - oo (Ce _^_en // boomer - oo (k _^_en // book, cook - oo (st _^_en // booster - oo (X _^_en // pool - C) oot _^_en // bootable football - _) one _^_en - oun (C _^_en // bounce, found - _) over _^_en // over - ow (e _^_en // flower, power - ow (X _^_en - oy (X _^_en // boy, toy - - -.group ô - ôt (_ o2 // rôt - ô o2 // cône - - -.group p - p p // pas - _) para (pCP4 para - _) photo (@P5 foto - _) poly (@P4 poli - _) post (KP4 post - _) post (ACCP4 post - _) pseudo (@P6 psYdo - p (p // appliquer - pays pE2iz2 // pays, paysage - ph f // phrase - - m) ps (_ // temps champs - r) ps (_ // corps - - cham) p (_ // champ - - cam) p (_ // camp - - dra) p (_ // drap - _) psych (@P5 psik - _) psych (iCP5 psiS - _) psych (AA_P5 psiS - - ba) p (t // baptiser - com) p (t // compte - - C) pt (_ // prompt exempt - - se) pt (_ t // sept - se) pt (iè t // septième - scul) p (t // sculpture - _) puisqu' (P7 pyisk - -// group p: English section - pad (_ _^_en - plug _^_en // plug - printer (_ _^_en // printer - - -.group q - q k // coq - _) qu' (AP3 k - _) qua (d kwa // quadrature - _) qua (tA kwa // quaternaire - _) quan (tA kwA~ // quantique - _) qua (drill ka // quadriller - _a) qua kwa // aquarium - _a) qu (if ku // aquifère - _A) qui (dist kyi // équidistant - _A) qui (lat kyi // équilatéral - _C) qua kwa // squale square - _A) qua kwa // équateur - dé) qua kwa // adequate - _) qua (rtz kwa // quartz - qu k // quatre - _) que (_ k@ // que - n) q (_ k // cinq cent - -// group q: English section - quick _^_en // quick, quickly - - -.group r - - _su) rr rr // surréaliste - cou) rr rr // courrai - mou) rr rr // mourrai - cou) rr (i r // courrier - cou) rr (o r // courroie - r r // rien - rr r - _) radio (@P5 radio - -// group r: English section - _) real _^_en - resen _^_en - rst (_ _^_en - _) rule _^_en - - -.group s - s s // verser sien - - s (_S1 z2 - stein (_ Stajn - - _) s' (P2v s // s'amène - _) s' (esXP2v s // s'amène - sç s // immisça - sch (ie sk // schierzo - sch (iz sk // schizophrène - sch (ol sk - sch (oo sk - schu Su - - sch S // schéma - dé) sh (A z // déshabiller - sh S // shérif - ss s // assez - - ai) s (em s // vraisemblable - aCè) s (_ s - nè) s (_ s - kansa) s (_ s // Kansas, Arkansas - ub) s (is z // subsister - tran) s (A z // transition - tran) s (e s // transe - tran) s (ub s // transubstantiation - A) s (A z // baiser - A) s (oft s // microsoft - A) s (ol_ s // tournesol - _) socio (@P5 sosio - _) super (@@P5 sypEr - _) super (_ sypEr - _) supra (@P5 sypra - batro) s (_ s - océro) s (_ s - scien (t siA~ // conscient scientifique - sql (_S3 EskyEl - - _u) s (_ s - Cu) s (_ - Abu) s (_ s - _Abu) s (_ - mbu) s (_ s -_cACpu) s (_ s - Acu) s (_ s - docu) s (_ - écu) s (_ - asu) s (_ s - odu) s (_ s - gu) s (_ s - igu) s (_ // aigus - iu) s (_ s // radius - ïu) s (_ s // laïus - Culu) s (_ s // cumulus - plu) s (_ z2 // plus, surplus - ylu) s (_ s // stylus - mu) s (_ s - _mu) s (_ - ému) s (_ - opu) s (_ s // opus, octopus - Aru) s (_ s // virus - aru) s (_ // disparus - ouru) s (_ // courus - Anu) s (_ s // bonus, tonus - enu) s (_ // menus, venus - psu) s (_ s // lapsus - cessu) s (_ s // processus - - atu) s (_ s // stratus motus - ctu) s (_ s // cactus - etu) s (_ s - aitu) s (_ - itu) s (_ s - ltu) s (_ s // altus - otu) s (_ s // motus - Cutu) s (_ s - - _tou) s (_ s - - s (b z // sbire - s (d z - s (g z - s (j z - s (v z - _tou) s (_Ces_ - _tou) s (_des_ s - _tou) s (_Cos_ - _tou) s (_leurs_ - -// group s: English section - CA) sh (_ _^_en // punish - sh (_ _^_en - sh (Ap _^_en // shop, ship - sh (At _^_en // shut, shot - _) sky _^_en - _) smil _^_en // smile, smiley - spy _^_en - - -.group t - t t // bataille - _) t (_ te - -) t (- t2 - _) t' (P2v t - Vn) t (_ t2 - A) t (- t2 - VCi) t (_ t2 - t (_ - peti) t (_ t2 - _) th t // thon - ts (_S1 z2 // silent at end of word unless next word starts with a vowel - C) t (_ t // compost watt soft script malttact abrupt - ki) t (_ t // kit - n) t (_ - r) t (_ - - aul) t (_ // Renault - grani) t (_ t - - _) télé (@P4 tele - _) tele tele - _) thermo (@P6 tErmo - - tt t // attitude - - s) th (m // asthme - th t // théorie - hui) t (_ t3 // huit - - _) t t // tien tiers - an) t (ia t // Santiago - C) t (ieu s // contentieux - - t (io_ s // ratio - - Ama) t (ieX s // diplomatie - a) t (ia s // spatial - en) t (ia s // confidentialit� - lbu) t (iA s // balbutiait - r) t (ia s // impartial - ini) t (iA s // initier - p) t (ia s // nuptial - an) t (iat s // transsubstantiation - - t (ion s // programmation - V) t (ion t // verbes - ache) t (ion t // achetions, rachetions - ai) t (ion t // souhaitions, traitions - oi) t (ion t // boitions - si) t (ion s // position - chan) t (ion t // chantions, d�chantions - Cisi) t (ion t // visitions - ci) t (ions t // citions - comp) t (ions t // comptions, escomptions - CAnc) t (ion s // fonctionner, ponctionner - Ce) t (ions t // jetions, rejetions - Vec) t (ion t // respections - Vep) t (ion t // respections - éCi) t (ions t // hésitions, héritions - éti) t (ion s // pétition - Vé) t (ion t // répétions - habi) t (ions t // habitions - imi) t (ions t // imitions, limitions - VAu) t (ion t // ajoutions - lu) t (ion s // févolution - Apor) t (ion t // emportions, exportions - opor) t (ion s // proportion - Cpor) t (ion t // emportions, exportions - sor) t (ion t // sortions - rê) t (ion t // arrêtions, apprêtions - - s) t (ion t // gestion - _ta) t (ion t // tation - sen) t (ion_ t // sentions, ressentions - t) t (ion t // combattions - - t (iel s // partiel - t (ieu s // ambitieux - t (iAm s // patiemment - - mar) t (ien s // martien vénitienne - a) t (ien s - i) t (ien s - o) t (ien s - - ipé) t (ieX s - amé) t (ieX s - nu) t (ieX s // minutie - ni) tien (t_ si - bu) tien (t_ si - - cra) t (ieX s // démocratie - - ner) t (ie s // inertie - - _ce) t (_ t -_transA) t (_ t - -// group t: English section - C) th (_ _^_en // month - _) th (eX _^_en // the, then - _) th (aX _^_en // than, that - _) time _^_en - tle (_ _^_en - too _^_en - ttl _^_en - try (_ _^_en // try, country - sCar) t (_ _^_en // smart, start - sCar) t (er_ _^_en // starter - _) tun (AX _^_en - - -.group u - u y // cruel nuage brut - ui yi // nuit, fuite - uin (K yE~ // juin - _s) u (rfX Y - _bl) u (ff Y - _s) u (rfeX Y - uy (A yij - - C) ucci utSi // capuccino - c) ueill Yj // cueillir - c) ueil (_ Yj // recueil - _g) ua wa - ag) ua (X wa - Ctig) ua (_ wa - _c) ul (_ y - _) ultra (P5 yltra - g) u (ay u - g) ueill Yj // orgueilleux - haïk) u (X u - - C) u (bX Y // hub, club - C) u (gX Y // bug, mug - _n) u (rse Y // nurse - r) u (nX W // run, autorun - pr) unt (_ W~ // emprunt - um (_ Om // album - f) um (_ W~ // parfum - um (b W~ // humble - um (p W~ - un (C W~ // emprunt lundi - un (n y // tunnel - CC) un (_ W~ // brun - uc) un (_ W~n2 // aucun - un (_ W~n2 // un avion - _h) un (_ W~ // hun - - fl) ux (_ y // flux, reflux - g) u (A // fatigue - g) u (ï y // ambiguïté - g) u (ë y // ambiguë - uz (z Y - -// group u: English section - _b) usi _^_en // business, businessman - C) ui (ce _^_en // produice, juice - umber (_ _^_en - ump (_ _^_en - unch _^_en - under _^_en // under, understand, thunder - _C) un (_ _^_en - _C) un (ny _^_en - _) up (C _^_en // upper, update - up (_ _^_en // setup - urn (X _^_en // burn, turn - ust (_ _^_en // just, trust - - -.group ü - ü y - üs (_ ys - üm (_ om - ül (_ yll - - -.group v - v v - vers (_ vErz2 - dri) ver (X vYr - view (X vju - _) view (A vjuv - -// group v: English section - voice (X _^_en - void (_ _^_en - vy (_ _^_en - - -.group w - w w - _) w (A _|w - w (ag v // wagon - wa (ve_ wE:j // wave - wa (re_ wE: // hardware software - -// group w: English section - e) w (K _^_en - _) wan _^_en - wr _^_en // write - way _^_en // way, away - _) wir _^_en // wire - winn _^_en // winner - wise _^_en - with _^_en - wor _^_en - - -.group x - x ks - xx ks - _) x (A gz // xylophone - _) x (CP1 iks // xylophone - xml (_S3 _|iksEmEl - e) x (A gz // exagérer exemple - L03e) x (A ks // annexe, vexer - _ine) x (A gz - _e) x (h gz // exhumer - - ai) x (_ // voix paix prix - oi) x (_ - ri) x (_ - - _soi) x (A s // soixante - - Au) x (_ z2 // faux feux choux - - _au) x (quel // auxquels - - _di) x (_neuf z // liaison: dix-neuf - _di) x (_ z3 - _si) x (_neu s // liaison: six-neuf - _si) x (_ z3 - - di) x (iè z // dixième - si) x (iè z // sixième - deu) x (iè z // deuxième - - -.group y - y i // cryogénique myope - _) y (A _|j // yak - _) y (eu j // yeux - _) yacht _^_en // yacht, yachtman - - _) yahoo (P5 ja'u - ym (K E~ // tympan - y (nn i - y (nA i - X) ys (_ is - yx (_ iks - - yn E~ // laryngite - - -.group z - z z - t) z s // tzigane - t) zer (_ zEr - C) zer (_ zWr - - -.group -// accented characters, these could have their own groups if they need more rules - â a: - ñ n^ - - é e // été - ê E // fête - - ö o // angström - û y: // fûtes - ü y // bülcher - - -// symbols that are normally spoken when reading text - , (D pilk:u - $ dolar - ° d@gre - _n_) ° // n° - - - - - - - - - +// French translation rules for Espeak + +// *************************************************************************** +// * Copyright (C) 2005 to 2010 by Jonathan Duddington * +// * email: jonsd@users.sourceforge.net * +// * * +// * This program is free software; you can redistribute it and/or modify * +// * it under the terms of the GNU General Public License as published by * +// * the Free Software Foundation; either version 3 of the License, or * +// * (at your option) any later version. * +// * * +// * This program is distributed in the hope that it will be useful, * +// * but WITHOUT ANY WARRANTY; without even the implied warranty of * +// * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * +// * GNU General Public License for more details. * +// * * +// * You should have received a copy of the GNU General Public License * +// * along with this program; if not, see: * +// * . * +// ***************************************************************************/ + +// This file is UTF-8 encoded + +// 2006-11-18 Gilles Casse +// +// Updated: 2010-06-18 Michel Such +// + +// Letter classes: +// A all vowels: a e i o u y â ä é ê è î ï ô ö ù û +// C all consonants +// Y front vowels: e i y é ê è î +// K not a vowel (i.e. consonant, space, ) + +.replace +œ oe +î i +à a + + +.L01 d e l n r t u +.L02 b c d f g h k p t v +.L03 d l m n s t v +.L04 c d f g l m n v +.L05 g h k l m v w +.L06 l r s + + +.group a + ae (_ e // reggae vitae + aen A~ // caen (diff Cicero: aA~) + ae aE // maestro + aim (K E~ // faim + ain (K E~ // pain + Ct) ain (_ E~n2 // certain ami + ch) ain (_ E~n2 // prochain arret + ai (_ e // dirai ferai... + _ess) ai (_ E2 // essai + _vr) ai (_ E2 // vrai + ai (b E // faible + ais (_ E2z2 // dirais ferais... + ait (_ E2t2 // dirait ferait... + aient (_ E2t2 // diraient feraient... + f) ai (sA @ // faisons faisan + a (ilK a + aie (me E2 // paiement + ai E // aile + ai (L06 E // aile + ai (CAX E // aile + am (b A~ // jambon + am (p A~ // camp + am (m a // programmation + _) am (n am // amnistie + am (n a // condamner + + _L04) an (_ an + an (n_ a + _h) an (_ an + _) anti (@@P4 A~ti + _) arché (@P5 arke // archéologue + _) archéo (@P6 arkeo // archéologue + _) arch (aP4 ark // archange + _) arch (oP4 ark // archonte + _) anarcho (@P7 anarko // anarchosyndicalisme + + a (nnA a // manne + an (K A~ // ancien, élan + an (h an + @@m) an (_ an // tennisman + zm) an (_ an // jazzman + L02m) an (_ an + lism) an (_ A~ // talisman + ulm) an (_ A~ // musulman + _caïm) an (_ A~ // caïman + _C) aon (_ A~ // faon, paon, taon + s) aoul (_ u // saoul + s) aou (le u // saoule + août ut // août + août (i aus // aoûtien + aut (_ ot2 + a (ô // saune + au o2 // au, aux + aud (_ o // chaud +_C) aud (_ o2d // Maud + au (l_ o // Paul + au (re_ o // dinosaure + _) audio (@P5 o2dio + _) auto (@P4 o2to + _) autom (n otO + bb) aye (X ei // abbaye + ay (C E // aymé + ay Ej // paye + ay (_ E2 // display + Xl) ayer (X E2jWr // player, layer + h) am (_S2 am + w) an (_ an + a a // bateau + +// group a: English section + sm) all _^_en // small, smaller + a (wC _^_en + + +.group b + bb b // abbé + om) b (_ // plomb applomb + b b // aube + +// group b: English section + back _^_en + bbl _^_en + bird _^_en // bird + board _^_en // board, keyboard + box (_ _^_en // box, inbox, outbox + bugg _^_en // debugger + _) by _^_en // by, bye, bypass + + +.group c + _) c' (P2v s // s + cch k // bacchanale + cc (Y ks // accéder + cc k // occuper + _) c (d se + _) ch (arism k // charisme, charismatique + _) ch (irop k // chiroptère + a) ch (_ k // almanach + ar) c (ti // arctique + e) ch (_ k // varech + ni) ch (_ k + _A) ch (o_ k // écho + mani) ch (é k // manichéisme + wi) ch tS // sandwich + mito) ch (o k // mitochondrie + _eu) ch (ari k // eucharistie + or) ch (esC k // orchestre + or) ch (iC k // orchidée + _) ch (ao k // chaos, chaotique + _) ch (orA k // chorale + _) ch (oriz S + _) ch (oro S + ch (r k // chrétien + _) chrono (@P6 krono + ch (l k + ch (n k + ch (s k + ch (to k + ch S // chien + ck k // nickel + cqu k // grecque + cq k // pecq + s) c (Y + x) c (Y + c (Y s // cède + _) cyber (P5 sibEr + Can) c (_ // banc + Con) c (_ // tronc, jonc + _don) c (_ k // donc + cler) c (_ // leclerc + tchou) c (_ + taba) c (_ + toma) c (_ + se) c (ond g // seconde secondaire + c k // recoin donc + + cient (_ sit2 // ils appr�ient, remercient. + effi) cient sjA~ // coefficient + défi) cient sjA~ // déficient + cast (_S4 kast // podcast + casts (_S5 kast // podcasts + _) clown klun + +// group c: English section + n) ch (_ _^_en // french + ch (ment _^_en // attachment + cut (_ _^_en // cut, shortcut + + +.group ç + + ç s // rançon + _) ç' (P2v s + + +.group d + dd d // addition + _) d' (P2 d + _ban) d (_ d + _lan) d (_ d // land + _stan) d (_ d // stand + an) d (_ + _san) d (_ d + + _gran) d (_ t2 // grand ami, grand marchand + Cen) d (_ t2 + Con) d (_ + con) d (_ t2 + quen) d (_ t2 + r) d (_ + _har) d (_ d + lor) d (_ d + oi) d (_ + ou) d (_ + + dt (_ t // Schmidt + _ni) d (_ // nid + d d // don bled + _expé) dien (t_ djA~ // expédient +V_expé) dien (t_ di // expédient +_ingré) dien (t_ djA~ // ingrédient + dien (t_ di // étudient (verbe) + _) dendro (@P6 dE~dro + +// group d: English section + day (_ _^_en + _) devic _^_en + dle (X _^_en // bundle, handle + + +.group e + +// Define use of the final 'e' in french + e (_ + _C) e (_ @ // je te + -c) e (_ + -j) e (_ + C) e (- + + e (Ce_ E + eau o // bateau + g) ea (s_ a // mangeas + cap) e (la_ e + gh) e (tAX e // spagheti + j) e (a // Jean Jeanne + p) ect (_ E2 // suspect + ect (_ Ekt // direct + pi) ed (_ e // pied + _art) e (++ e // arte, artefact + _cl) ef (_ e // clef + _cr) e (at e + _) ein (K En // Einstein + ein (K E~ // peindre + pl) ein (_ E~n2 // plein emploi + e (il E // vieille + ei E // neige + eoi wa // asseoir + ell El // selle + el (K El // celsius, caramel + _f) em (me a // femme + i) e (mA // remerciement, d�ploiement + A) e (rA // remerciera + tch) e (rX Y + @) em (me a // patiemment + em (b A~ // décembre + em (mACC A~ // emmancher + em (mACAC A~ // emmagasiner + em (ma E2 // emmanuel + em (mai A~ // emmailloter + l) em (n a // solemnel + il) emn Em // dilemne + em (p A~ + en (_ A~n2 // en + en (hA A~n // enharmonique + _C) en (j E~ // benjamin + _flam) en (c E~ // flamenco + _) en (A A~n // enivrer + + C) en (d_ A~ // comprend dépend + od) en (dr E~ // rhododendron + qu) en (d_ A~ + + pati) en A~ // patient patience + en (nu A~ // ennui + en (nA E // penne ennemi + + é) en (_ E~ // européen + + Ci) en (nA E // mienne + + éC) en (t_ A~ // récent différent élément + équ) en (t_ A~ // fréquent, conséquent + étic) en (t_ A~ // réticent + + _C) en (t_ A~ // cent vent lent dent + cc) en (t_ A~ // accent + Asc) en (t_ A~ // luminescent + _dol) en (t_ A~ // dolent + ol) en (t_ A~ // somnolent, violent + Vol) en (t_ // somnolent, violent + Xol) ent (_ t2 // volent + eul) ent (_ t2 // veulent + ul) en (t_ A~ // turbulent + Ccul) ent (_ t2 + Vul) ent (_ t2 + imCoC) en (t_ A~ // impotent + inCoC) en (t_ A~ // innocent, indolent + +XACcid) en (t_ A~ // accident, occident + + _ag) en (t_ A~ // agent + _ard) en (t_ A~ // ardent + _arg) en (t_ A~ // argent + _urg) en (t_ A~ // urgent + V_urg) ent (_ t2 // urgent (verbe) + + _émin) en (t_ A~ // éminent + immin) en (t_ A~ // imminent + oémin) en (t_ A~ // proéminent + jac) en (t_ A~ // sous-jacent, adjacent + _lat) en (t_ A~ // latent + + ig) ent (_ t2 + ilig) ent (_ A~t2 + llig) ent (_ A~t2 + ndig) ent (_ A~t2 + tang) ent (_ A~t2 // tangent + @@ing) en (t_ A~ // astreingent, contingentindigent + + man) en (t_ A~ // permanent + _pat) en (t_ A~ // patent + rmam) en (t_ A~ // firmament + verg) en (t_ A~ // convergent, divergent + Vverg) ent (_ t2 // convergent, divergent (verbe) + + _serg) en (t_ A~ // sergent +CACCim) en (t_ A~ // condiment, gentiment + dim) en (t_ A~ // rudiment + Agim) en (t_ A~ // régiment + Alim) en (t_ A~ // poliment + inim) en (t_ A~ // infiniment + manim) en (t_ A~ // maniment + onim) en (t_ A~ // boniment + plim) en (t_ A~ // compliment + Atim) en (t_ A~ // bâtiment + _cim) en (t_ A~ // ciment + _pim) en (t_ A~ // piment + gm) en (t_ A~ // fragment + Asim) en (t_ A~ // quasiment + + ertin) en (t_ A~ // pertinent, impertinent + ontin) en (t_ A~ // continent, incontinent + _sArm) en (t_ A~ // sarment, serment + erm) en (t_ A~ // ferment + Vferm) ent (_ t2 // ferment, referment (verbe) + XArp) en (t_ A~ // arpent, serpent + CArr) en (t_ A~ // conncurrent, torrent + Cerr) ent (_ t2 // ils serrent +_appar) en (t_ A~ // apparent + spar) en (t_ A~ // transparent + _par) en (t_ A~ // parent + V_par) ent (_ t2 // parent (verbe) + _var) en (t_ A~ // varent + mitt) en (t_ A~ // intermittent + énit) en (t_ A~ // pénitent + tourm) en (t_ A~ // tourment + Cflu) en (t_ A~ // affluent, confluent + VCflu) ent (_ t2 // refluent, influent (verbe) + + _tal) en (t_ A~ // talent + ival) en (t_ A~ // équivalent + Vival) ent (_ t2 // équivalent (verbe) + xcell) en (t_ A~ // excellent +Vxcell) ent (_ t2 // excellent + + iCam) en (t_ A~ + mm) en (t_ A~ + em) en (t_ A~ // lentement + mom) en (t_ A~ // moment + Aaim) en (t_ A~ + Caim) en (t_ A~ + dum) en (t_ A~ + gum) en (t_ A~ + jum) en (t_ A~ + oCum) en (t_ A~ + rum) en (t_ A~ + + éCid) en (t_ A~ + VéCid) ent (_ t2 + Xtrid) en (t_ A~ + _flor) en (t_ A~ + _laur) en (t_ A~ +_mécont) en (t_ A~ + _cont) en (t_ A~ +_Vcont) ent (_ t2 + éC) en (t_ A~ // compétent + _souv) en (t_ A~ // souvent + Cud) en (t_ A~ + + _couv) en (tS3f A~ // le couvent +V_couv) en (t_ // elles couvent +s_couv) en (t_ // elles couvent + + ent (_ t2 // étaient mangent + A) ent (_ t2 // étaient mangent + + Ci) en (K E~ // rien, lien + Ci) en (c A~ // science + + AA) en (_ E~ + C) en (_ En // amen, abdomen, golden + C) en (to_ En // memento + nc) ens (_ A~ // encens + xam) en (_ E~ // examen + + en (s_ A~ + en (CA A~ // pentathlon + en (CC A~ // entre + sp) ens (_ Ens // suspens + éC) ens (_ A~z2 // dépens démens + + _C) er (_ Er // fer + _Ch) er (_ Er // cher + _env) er (_ Er + _hi) er (_ Er // hier + _fi) er (_ Er // fier + _hiv) er (X Er // hiver + Cst) er (X Er // hamster + _cart) er (X Er // carter + _cutt) er (X Er // cutter + tain) er (X Er // container + _ti) er (_ Er + ack) er (K Yr + ock) er (K Er + rock) er (K Yr + + er (_ e // parler léger + er (s_ e + + i) e (rt_ E // requiert + + d) e (ssus_ @ // dessus + + _d) es (bA e + _d) es (jA e // Desjardins + _d) es (nA e + _d) es (qA e // desquels + + _l) es (qA e // lesquels + + _m) es (dA e // mesdames + _m) es (nA e + Am) es (dA e + Am) es (nA e // Dumesnil + + d) esh (A ez // Deshormeaux + + _r) e (ss @ // ressembler + _r) e (ssu e // ressusciter + _r) e (stra @ + _r) e (stro @ + _r) e (stru @ // restructurer + -) est (_ Est // -est + + dg) et (_ Et // Bridget, gadget + k) et (_ Et + tick) et (_ E2 + m) et (_ Et2 + + eu Y // eu + _) eu (ss y // eu + + _) eut (_ yt2 + eut (_ Yt2 + _) extra (uP5 E2kstra + _) extra (CP5 E2kstra + _) eû y // eût + eû Y: // jeûne + + ey (_ E2 // dahomey + ey (C E2 // ceylan + ey Ej // asseye + + ez (_ ez2 // nez mangez chez + + g) e (A // mangeons + g) eu Y // vengeur + g) eu (re y // gageure + + _d) e (ch @ + _r) e (ch @ // recherche + e (Cl @ + + _l) e (xA E2 + _m) e (xA E2 + _l) e (CA @ + _l) e (ChA @ + _l) e (ClA @ // Leclerc + tr) e (CA @ + tr) e (ChA @ + + e (CC E // infect pelle mettre + e (Cr @ + _) e (C% e // effet, effectuer + e (C_ E + e (t_ E2 + e (rC E + es (_ z2 + + %C) e (xA E2 + + @gu) e (CA + @gu) er (A r + @qu) e (CA + @qu) er (A r + _qu) e (CA @ +@L06gu) e (CA @ +@L06qu) e (CA @ + @C) e (CA + @C) e (li @ + @ch) e (li @ + @C) er (A r + @C) e (rion++ @ + @C) e (riez++ @ + @ch) e (CA + @ch) er (A r + L06ch) e (CA @ + @L06C) e (CA @ + @CL06) e (CA @ + @bC) e (CA @ + @ct) e (CA @ + %C) e (CA++ + %C) er (A++ r + @C) e (xA++ E2 + @c) e (v++ @ + @d) e (v++ @ + + @C) e (CrA + @ch) e (CrA +@L06ch) e (CrA @ + @L06C) e (CrA @ + @L06C) e (rrA E + @CL06) e (CrA @ + %C) e (CrA++ + e (rr+++ E + + e @ // menue + _) e (CA e + _) e (xC++ E2 + Cr) eam Im + Cr) eamer ImWr + Cl) eaner InWr + vert) e (rX W + eï (K 'Ej + _y) en (_ En + iew) er (X er2 + _m) e (ga e + + +// group e: English section + eac _^_en + C) ead _^_en // read, head + eak _^_en // break, speak + eal _^_en // deal + ear _^_en // ear, search + eas _^_en // please + eave _^_en // leave + ed (_ _^_en + ee _^_en // meeting + efore (_ _^_en // before + eing (_ _^_en // being, boeing + eive _^_en // receive + eld (_ _^_en // field + _) enter (_ _^_en // enter + _) enhan _^_en + qu) est (_ _^_en // request + qu) este (X_ _^_en // requested, requester + _) even (X _^_en // forever, however + _) ever _^_en // forever, however + oC) ever _^_en // forever, however + _) eye _^_en + + +.group è + + Z) ème iEm + è E + ès (_ E + Ar) ès (_ Es + m) ès (_ Es + n) ès (_ Es + p) ès (_ Es + + +.group ë + u) ë // ambiguë + ë E // citroën noël + + +.group f + f f + f (f + _ner) f (X + _neu) f (_ans v // liaison: neuf ans + _neu) f (_heures v + +// group f: English section + _) fire _^_en + fly _^_en + _) frame _^_en + fter (_ _^_en + + +.group g + g g + g (Y Z + + su) gg (Y gZ // suggérer suggestif + gg g // agglomérer + ai) gni n^ // craignions châtaignier + gn nj // agneau +_wa) gner (_ gnEr + gni n^i // signifier + gn (e_ n^ + gn (_ n^ + gn (eCA nj@- + gn (ie n // compagnie + dia) g (no g + _a) g (no g +_quatrevin) gts (_ z2 + + vin) gt (_A t // liaison: vingt ans + + vin) gt (_un + vin) gt (_deux t + vin) gt (_trois t //liaison: vingt-trois + vin) gt (_quatr t + vin) gt (_cinq t + vin) gt (_six t + vin) gt (_sept t + vin) gt (_huit t + vin) gt (_neuf t + vin) gt (_neuvi t + + gt (_ // vingt doigts + An) gt (A t // vingtaine doigté + + gu (i g // anguille + ai) gui (l gyi // aiguillage + in) gui (s gyi // linguiste + g (C g + + _ran) g (_ // rang + _san) g (_ // sang + étan) g (_ // étang + _lon) g (_ // long + bour) g (_ // Strasbourg + + g (_ g // grog gag goulag + +// group g: English section + _) game (X _^_en + girl _^_en // girl + gy (_ _^_en + + +.group h + _) h _| + _) h (abi // habit, habilleur + _) h (allo // hallogène + _) h (ame // hameçon + _) h (andr // handroïde + _) h (arm // harmonie + _) h (el // hellène + _) h (ect // hectare + _) h (erb // herbe + _) h (é + _) h (éris _| + _) h (éro _| + _) h (eure // heure + _) h (iber // hibernation + _) hi (A _|j // hier + _) h (ippo // hippodrome + _) h (iro // hirondelle + _) h (ist // histoire + _) h (iv // hiver + _) h (omm // homme + _) h (onn // honneur + _) h (ô // hôpital + _) h (os // hostile + _) h (ora // horaire + _) h (orip // horipeau + _) h (oriz // horizon + _) h (oro // horoscope + _) h (orlo // horloge + _) h (orr // horreur + _) h (uil // huile + _) h (uiss // huissier + _) h (uitr // huître + _) h (umA // humain + _) h (umC // humble + _) hy (A j + haus (_ o2s //blockhaus + heim (_ ajm + _) h (y // hypermarché + _) hyper (@P5 ipEr + _) hyper (_ ipEr + _) hypra (@P5 ipra + h // ahuri + +// group h: English section + _) half _^_en + here (_ _^_en // here + + +.group i + i i // cri + + C) i (erA i + C) ien (t_ i + dév) ien (t_ i + t) ien (K_ jE~ // tient + v) ien (K_ jE~ // vient + at) ien (t_ jA~ // patient + cip) ien (C jA~ // récipient + cl) ien (C iA~ // client + mol) ien (C jA~ // émolient + vén) ien (C jA~ // inconvénient + or) ien (t iA~ // orient, orienter + ot) ien (t_ jA~ // quotient + + i (e_ i + _) i (ce@ aj // iceberg + _) ill il // illégal + ill (_ il // Bill + _C) ill (y_ il // Billy + aigu) ill ij // aiguille + anqu) ill il // tranquille + c) ill (i il + dist) ill il // distiller + _L05) ill il // Lille, mille, ville, william + osc) ill il // osciller + gu) ill ij // guillaume + qu) ill ij // quille + A) ill j // caillou + C) ill ij // famille + a) il (_ j // bail + e) il (_ j + gt) i (m aj + u) il (_ j // deuil + L01_f) ils (_ is // fils (enfant) + + imm imm // immaculé + im (_ im // karim + im (C E~ // timbre + w) in in // winrar + inct (_ E~ // distinct + in (h in // inhumain + in (kX iN // link + in (n i // innombrable + in (C E~ // vingt + in (_ E~ // vin + ing (_ iN + ing (h ing + ing (s iN + ing (to iN + _) infra (sP5 E~fra + _) inter (@@P5 E~tEr + _) interr (A E~tEr + _) inter (_ E~t'Er + _) inter (ne_ E~t'Er + _) intra (neP5 E~tra + _) intra (uP5 E~tra + C) is (_ i + Kir) is (_ is + bor) is (_ is + dor) is (_ is + tor) is (_ is + fl) irt Wrt + otl) i (neX aj + onl) i (ne_ aj + offl) i (ne_ aj + dr) i (ve aj + pr) int (_ int + +// group i: English section + ibuter (X _^_en + iev _^_en + ife (_ _^_en + igh _^_en + iven (_ _^_en + ind (X _^_en // find, mind + _C) ind (erX _^_en // finder + AC) ind (erX _^_en // reminder + ize (X _^_en // realize + _bAl) i (ze i + ram_f) i (le _^_en + +.group ï + ï i // naïf + A) ï (_ j + A) ïe (_ j + A) ï (lA j + + + ïn (K E~ // coïncidence + ma) ïs (_ is // maïs + + + +.group j + j Z // adjoint joujoux + _) j' (P2v Z + _) jazz dZaz + _) j (obK dZ + _) j (ohK dZ + _) jusqu' (P6 Zysk + + +.group k + k k // kafka + + +// group k: English section + ke (_ _^_en // make, take + ke (s_ _^_en // makes, takes + ke (rX _^_en // maker + ke (nX _^_en // taken + +.group l + l l // lit + ll l // aller + _) l' (P2 l + au) lt // hérault + uCi) l (_ // outil, fusil + nti) l (_ // gentil + nti) lh j // gentilhomme + ui) ll j // juillet + _) lorsqu' (P7 lorsk + +// group l: English section + less (_ _^_en // noiseless + _) live _^_en + @) loud (_ _^_en + ll (X _^_en + + +.group m + m m // film + mm m // pomme + _) m' (P2v m + _) mc (@P2 mak + _) ms (P2 EmEs + master (_S6 mastYr + +// group m: English section + _) mail (_ _^_en // mailer + mov (ieX _^_en // move, movy + + +.group n + n n // une + nn n + ng (_ N + ngh ng + + _) n' (P2v n + _wAC) ner (_ nEr + + _) n (_° nymero + _) neuro (@@P5 nYro + _) nvda (P4 Envedea + + +.group o + br) oc (_ o // broc + cr) oc (_ o // escroc + on (n o + ls) on (_ on + Cst) on (_ on + _) os (_ os + _v) os (gY o2 + s_) os (_ o + x_) os (_ o + o (t_ o + + oe (ll wa // moelleux + oe (i Y // oeil + _) oe (C Y // oesophage + _ph) oe (C e // phoetus + _ph) oe (n_ Y // phoen + oeu Y // voeu + oeud Y // noeud + oeufs (_ Y // oeufs boeufs + oeu (x Yz2 // voeux coeur + o (eC o // coefficient + _) oi (gnon o // oignons + oin (C wE~ + oin (_ wE~ // coin + oi wa // poil + oê (l wa // poêle + om (C O~ // bombe + om (m o // nommer + om (ni om // omnibus + n) om (X O~ // nom + om (_ om // www.web.com + s) om (n om + + on (K O~ // mon + on (t_ O~t2 // mont vont sont + _m) ont (pAC O~ // Montpellier + _m) ont (m O~ + _m) ont (rAal O~ // Montreal + onsh (A O~z // bonshommes + onh (A on // bonhomme + _) on (z _|O~ // onze, onzi�me + + _c) on (_ O~ // no comment + gt) on (_ On // Washington + Cst) on (_ On + ps) on (_ On + _C) on (_ O~n2 // mon appui, mon histoire, mon havre + + alc) oo (l o // alcool + z) oo o // zoo + z) oo (C oo // zoologue + z) oo (m u // zoom + _gal) op (_ o // galop + + _sir) op (_ o // sirop + + v) ost (_ o // Prévost + _C) oup (_ u // coup, loup + + + ou u // hibou brouillard + ou (in w // pingouin + oue (mA u // dvvouement + _) ou (at _|u // ouate + où u // où + oû u // coûter + oy (A waj // noyer voyelles + _b) oy (co oj // boycott + _c) oy (o oi // coyote + _y) o (y o + oy wa + o (_ o // zorro allégro + o (z_ o // berlioz + o o + _sC) ot ot + + +// group o: English section + oa (X _^_en // approach, load + oa (_ oa + oa (s_ oa + oa (CerX _^_en + oach _^_en + old (er_ _^_en // folder, older + C) oing (_ _^_en // going + oo (Ce _^_en // boomer + oo (k _^_en // book, cook + oo (st _^_en // booster + oo (X _^_en // pool + C) oot _^_en // bootable football + _) one _^_en + oun (C _^_en // bounce, found + _) over _^_en // over + ow (e _^_en // flower, power + ow (X _^_en + oy (X _^_en // boy, toy + + +.group ô + ôt (_ o2 // rôt + ô o2 // cône + + +.group p + p p // pas + _) para (pCP4 para + _) photo (@P5 foto + _) poly (@P4 poli + _) post (KP4 post + _) post (ACCP4 post + _) pseudo (@P6 psYdo + p (p // appliquer + pays pE2iz2 // pays, paysage + ph f // phrase + + m) ps (_ // temps champs + r) ps (_ // corps + + cham) p (_ // champ + + cam) p (_ // camp + + dra) p (_ // drap + _) psych (@P5 psik + _) psych (iCP5 psiS + _) psych (AA_P5 psiS + + ba) p (t // baptiser + com) p (t // compte + + C) pt (_ // prompt exempt + + se) pt (_ t // sept + se) pt (iè t // septième + scul) p (t // sculpture + _) puisqu' (P7 pyisk + +// group p: English section + pad (_ _^_en + plug _^_en // plug + printer (_ _^_en // printer + + +.group q + q k // coq + _) qu' (AP3 k + _) qua (d kwa // quadrature + _) qua (tA kwa // quaternaire + _) quan (tA kwA~ // quantique + _) qua (drill ka // quadriller + _a) qua kwa // aquarium + _a) qu (if ku // aquifère + _A) qui (dist kyi // équidistant + _A) qui (lat kyi // équilatéral + _C) qua kwa // squale square + _A) qua kwa // équateur + dé) qua kwa // adequate + _) qua (rtz kwa // quartz + qu k // quatre + _) que (_ k@ // que + n) q (_ k // cinq cent + +// group q: English section + quick _^_en // quick, quickly + + +.group r + + _su) rr rr // surréaliste + cou) rr rr // courrai + mou) rr rr // mourrai + cou) rr (i r // courrier + cou) rr (o r // courroie + r r // rien + rr r + _) radio (@P5 radio + +// group r: English section + _) real _^_en + resen _^_en + rst (_ _^_en + _) rule _^_en + + +.group s + s s // verser sien + + s (_S1 z2 + stein (_ Stajn + + _) s' (P2v s // s'amène + _) s' (esXP2v s // s'amène + sç s // immisça + sch (ie sk // schierzo + sch (iz sk // schizophrène + sch (ol sk + sch (oo sk + schu Su + + sch S // schéma + dé) sh (A z // déshabiller + sh S // shérif + ss s // assez + + ai) s (em s // vraisemblable + aCè) s (_ s + nè) s (_ s + kansa) s (_ s // Kansas, Arkansas + ub) s (is z // subsister + tran) s (A z // transition + tran) s (e s // transe + tran) s (ub s // transubstantiation + A) s (A z // baiser + A) s (oft s // microsoft + A) s (ol_ s // tournesol + _) socio (@P5 sosio + _) super (@@P5 sypEr + _) super (_ sypEr + _) supra (@P5 sypra + batro) s (_ s + océro) s (_ s + scien (t siA~ // conscient scientifique + sql (_S3 EskyEl + + _u) s (_ s + Cu) s (_ + Abu) s (_ s + _Abu) s (_ + mbu) s (_ s +_cACpu) s (_ s + Acu) s (_ s + docu) s (_ + écu) s (_ + asu) s (_ s + odu) s (_ s + gu) s (_ s + igu) s (_ // aigus + iu) s (_ s // radius + ïu) s (_ s // laïus + Culu) s (_ s // cumulus + plu) s (_ z2 // plus, surplus + ylu) s (_ s // stylus + mu) s (_ s + _mu) s (_ + ému) s (_ + opu) s (_ s // opus, octopus + Aru) s (_ s // virus + aru) s (_ // disparus + ouru) s (_ // courus + Anu) s (_ s // bonus, tonus + enu) s (_ // menus, venus + psu) s (_ s // lapsus + cessu) s (_ s // processus + + atu) s (_ s // stratus motus + ctu) s (_ s // cactus + etu) s (_ s + aitu) s (_ + itu) s (_ s + ltu) s (_ s // altus + otu) s (_ s // motus + Cutu) s (_ s + + _tou) s (_ s + + s (b z // sbire + s (d z + s (g z + s (j z + s (v z + _tou) s (_Ces_ + _tou) s (_des_ s + _tou) s (_Cos_ + _tou) s (_leurs_ + +// group s: English section + CA) sh (_ _^_en // punish + sh (_ _^_en + sh (Ap _^_en // shop, ship + sh (At _^_en // shut, shot + _) sky _^_en + _) smil _^_en // smile, smiley + spy _^_en + + +.group t + t t // bataille + _) t (_ te + -) t (- t2 + _) t' (P2v t + Vn) t (_ t2 + A) t (- t2 + VCi) t (_ t2 + t (_ + peti) t (_ t2 + _) th t // thon + ts (_S1 z2 // silent at end of word unless next word starts with a vowel + C) t (_ t // compost watt soft script malttact abrupt + ki) t (_ t // kit + n) t (_ + r) t (_ + + aul) t (_ // Renault + grani) t (_ t + + _) télé (@P4 tele + _) tele tele + _) thermo (@P6 tErmo + + tt t // attitude + + s) th (m // asthme + th t // théorie + hui) t (_ t3 // huit + + _) t t // tien tiers + an) t (ia t // Santiago + C) t (ieu s // contentieux + + t (io_ s // ratio + + Ama) t (ieX s // diplomatie + a) t (ia s // spatial + en) t (ia s // confidentialit� + lbu) t (iA s // balbutiait + r) t (ia s // impartial + ini) t (iA s // initier + p) t (ia s // nuptial + an) t (iat s // transsubstantiation + + t (ion s // programmation + V) t (ion t // verbes + ache) t (ion t // achetions, rachetions + ai) t (ion t // souhaitions, traitions + oi) t (ion t // boitions + si) t (ion s // position + chan) t (ion t // chantions, d�chantions + Cisi) t (ion t // visitions + ci) t (ions t // citions + comp) t (ions t // comptions, escomptions + CAnc) t (ion s // fonctionner, ponctionner + Ce) t (ions t // jetions, rejetions + Vec) t (ion t // respections + Vep) t (ion t // respections + éCi) t (ions t // hésitions, héritions + éti) t (ion s // pétition + Vé) t (ion t // répétions + habi) t (ions t // habitions + imi) t (ions t // imitions, limitions + VAu) t (ion t // ajoutions + lu) t (ion s // févolution + Apor) t (ion t // emportions, exportions + opor) t (ion s // proportion + Cpor) t (ion t // emportions, exportions + sor) t (ion t // sortions + rê) t (ion t // arrêtions, apprêtions + + s) t (ion t // gestion + _ta) t (ion t // tation + sen) t (ion_ t // sentions, ressentions + t) t (ion t // combattions + + t (iel s // partiel + t (ieu s // ambitieux + t (iAm s // patiemment + + mar) t (ien s // martien vénitienne + a) t (ien s + i) t (ien s + o) t (ien s + + ipé) t (ieX s + amé) t (ieX s + nu) t (ieX s // minutie + ni) tien (t_ si + bu) tien (t_ si + + cra) t (ieX s // démocratie + + ner) t (ie s // inertie + + _ce) t (_ t +_transA) t (_ t + +// group t: English section + C) th (_ _^_en // month + _) th (eX _^_en // the, then + _) th (aX _^_en // than, that + _) time _^_en + tle (_ _^_en + too _^_en + ttl _^_en + try (_ _^_en // try, country + sCar) t (_ _^_en // smart, start + sCar) t (er_ _^_en // starter + _) tun (AX _^_en + + +.group u + u y // cruel nuage brut + ui yi // nuit, fuite + uin (K yE~ // juin + _s) u (rfX Y + _bl) u (ff Y + _s) u (rfeX Y + uy (A yij + + C) ucci utSi // capuccino + c) ueill Yj // cueillir + c) ueil (_ Yj // recueil + _g) ua wa + ag) ua (X wa + Ctig) ua (_ wa + _c) ul (_ y + _) ultra (P5 yltra + g) u (ay u + g) ueill Yj // orgueilleux + haïk) u (X u + + C) u (bX Y // hub, club + C) u (gX Y // bug, mug + _n) u (rse Y // nurse + r) u (nX W // run, autorun + pr) unt (_ W~ // emprunt + um (_ Om // album + f) um (_ W~ // parfum + um (b W~ // humble + um (p W~ + un (C W~ // emprunt lundi + un (n y // tunnel + CC) un (_ W~ // brun + uc) un (_ W~n2 // aucun + un (_ W~n2 // un avion + _h) un (_ W~ // hun + + fl) ux (_ y // flux, reflux + g) u (A // fatigue + g) u (ï y // ambiguïté + g) u (ë y // ambiguë + uz (z Y + +// group u: English section + _b) usi _^_en // business, businessman + C) ui (ce _^_en // produice, juice + umber (_ _^_en + ump (_ _^_en + unch _^_en + under _^_en // under, understand, thunder + _C) un (_ _^_en + _C) un (ny _^_en + _) up (C _^_en // upper, update + up (_ _^_en // setup + urn (X _^_en // burn, turn + ust (_ _^_en // just, trust + + +.group ü + ü y + üs (_ ys + üm (_ om + ül (_ yll + + +.group v + v v + vers (_ vErz2 + dri) ver (X vYr + view (X vju + _) view (A vjuv + +// group v: English section + voice (X _^_en + void (_ _^_en + vy (_ _^_en + + +.group w + w w + _) w (A _|w + w (ag v // wagon + wa (ve_ wE:j // wave + wa (re_ wE: // hardware software + +// group w: English section + e) w (K _^_en + _) wan _^_en + wr _^_en // write + way _^_en // way, away + _) wir _^_en // wire + winn _^_en // winner + wise _^_en + with _^_en + wor _^_en + + +.group x + x ks + xx ks + _) x (A gz // xylophone + _) x (CP1 iks // xylophone + xml (_S3 _|iksEmEl + e) x (A gz // exagérer exemple + L03e) x (A ks // annexe, vexer + _ine) x (A gz + _e) x (h gz // exhumer + + ai) x (_ // voix paix prix + oi) x (_ + ri) x (_ + + _soi) x (A s // soixante + + Au) x (_ z2 // faux feux choux + + _au) x (quel // auxquels + + _di) x (_neuf z // liaison: dix-neuf + _di) x (_ z3 + _si) x (_neu s // liaison: six-neuf + _si) x (_ z3 + + di) x (iè z // dixième + si) x (iè z // sixième + deu) x (iè z // deuxième + + +.group y + y i // cryogénique myope + _) y (A _|j // yak + _) y (eu j // yeux + _) yacht _^_en // yacht, yachtman + + _) yahoo (P5 ja'u + ym (K E~ // tympan + y (nn i + y (nA i + X) ys (_ is + yx (_ iks + + yn E~ // laryngite + + +.group z + z z + t) z s // tzigane + t) zer (_ zEr + C) zer (_ zWr + + +.group +// accented characters, these could have their own groups if they need more rules + â a: + ñ n^ + + é e // été + ê E // fête + + ö o // angström + û y: // fûtes + ü y // bülcher + + +// symbols that are normally spoken when reading text + , (D pilk:u + $ dolar + ° d@gre + _n_) ° // n° + + + + + + + + + diff --git a/dictsource/ta_rules b/dictsource/ta_rules index 0c1e49d6..9e1459a7 100644 --- a/dictsource/ta_rules +++ b/dictsource/ta_rules @@ -393,7 +393,7 @@ _) ட (வல t.V _) ட (வர t.V _) ட (ேப t. - _) ட (ாக்ஸி t. + _) டாக (்ஸி t.a:k .group ண ண n.V @@ -597,6 +597,7 @@ _) த (ொம் d _) த (ோசை d _) த (ோஷ d + _) த (ுபாய d //endsort //sort @@ -671,6 +672,7 @@ _பார்வ) த (ி t ச) த (்ரு t த) த (்ரூப t பா) த (்ரூம t + _ப) த (ஞ்சலி tV //endsort diff --git a/phsource/b/br b/phsource/b/br new file mode 100755 index 0000000000000000000000000000000000000000..2a1b998181bbdf760dd3f12eeba032e751e2534e GIT binary patch literal 2122 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] la @@ -923,6 +926,7 @@ vdiph/ai [aI] base2 [a:I] vi [aI] id [aI] hy + [aI] da vdiph/ai_2 [aI] en [aI] cy [aY] cy diff --git a/phsource/envelope/i_risefall b/phsource/envelope/i_risefall new file mode 100644 index 00000000..f8a7771d --- /dev/null +++ b/phsource/envelope/i_risefall @@ -0,0 +1,11 @@ +ENVELOPE +0 60 +5 63 +22 92 +31 100 +41 95 +85 12 +90 5 +100 0 + + diff --git a/phsource/envelope/i_risefall2 b/phsource/envelope/i_risefall2 new file mode 100644 index 00000000..159d53ad --- /dev/null +++ b/phsource/envelope/i_risefall2 @@ -0,0 +1,6 @@ +ENVELOPE +0 0 +45 95 +100 0 + + diff --git a/phsource/g/gr b/phsource/g/gr new file mode 100755 index 0000000000000000000000000000000000000000..3222a12777f614bf97adacd725e9717b0f2c174e GIT binary patch literal 824 zcmb7ByG{Z@6g@kS-338VV?+u=w4t(~AQmQ)s4=lo7ERE`#`pyk7XE;V1(hG+H&7D` zV`*h+VMS$SgZIp^3uxt%`#9&`nGEN2P7n9bI_-u6aFi%qOP&2%_H6=N<{|Ae?gR!` z6ZU@G18hI&2N%LHfM;R4s;hRTzjVwng5a)t6y)#QTtGmk5&%X5_$+#ch%p{l%JU3x zw+al@Kz+%a0o-o(PCNxjNcsD)@2&$%PQa1p)LG7o^ z|J`V2@BHgV8^>s1McgQf8nI};BsniZHK-<4WTw_$FDe)~{ivI9zObqZCt^5`m>n~x YT2ApSb=QvP#BZcG`EBdAc{A_$0S`Ds?f?J) literal 0 HcmV?d00001 diff --git a/phsource/g/xgr b/phsource/g/xgr new file mode 100644 index 0000000000000000000000000000000000000000..1d6ab49be8ae6e03a1ca3fae3b1f39f7d966b285 GIT binary patch literal 3173 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 literal 0 HcmV?d00001 diff --git a/phsource/klatt/bh b/phsource/klatt/bh new file mode 100644 index 0000000000000000000000000000000000000000..a2f93d9ab7d3767dfdfb0ffec4916f965145490f GIT binary patch literal 5272 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 Kj+yfGHvKP{l*eTN literal 0 HcmV?d00001 diff --git a/phsource/klatt/dz_pzd b/phsource/klatt/dz_pzd new file mode 100644 index 0000000000000000000000000000000000000000..7d4ae9b90d533a84dbf8cae4b8b8034afcb93f9e GIT binary patch literal 1232 zcmeHEJxc>Y6r8);%bn2}KMEDW#>P5|mEeI2Vq;>o&_;_OmKGM0e<1iHEG+#27AaC# ziim}^KOu#cO`Lg~OCq)k7Vh%i&YSmkS!U|ht&RP9tx^EcXda(88xb1B!z+tldu8Ts za@6N`;c(DnueuM&irdj`a7ac0bkKGkoCRydN5(uS2;R7>tgel@AN9<505}G4S878u zsubPsOZh7UoXo>!-q}|GmkU5EY=r}6X>piY){w1A4*KUQF0hGJ%wi5@jAIHj%o8Xf zMv*%~0V7C>#_UX)6V@prc2esrYbNC#&4=JQJ}}?X2&yrq@3n zTk;6V;-~(fb1>lcNDch^EjNIlaAPI^KEAtA!w%VLx>2SYDK(#DE;6Ks)RcUVBjeTa6ZuPiI<{%OtT+BW`Foyx0>77jI{*Lx literal 0 HcmV?d00001 diff --git a/phsource/klatt/dz_pzd_ b/phsource/klatt/dz_pzd_ new file mode 100644 index 0000000000000000000000000000000000000000..107fd8295ff29aa56800154745b1f09f7be79e68 GIT binary patch literal 3177 zcmeH}dsGzH9mfZDX6|EN`Kt|H2wSP4EGv|2kxo5uf zz29^1%suD#Id}NbpJWyc9~KJ;f+(pdo>Ea#tRqUam-|~fJ$KL4UL&1a{GW+*-L5KU zuYM(jBuekb4-n}%N4GAdP;&~2k3*t~4x*9lAbuW_qB&0x40x3I5D+1sX?>{XEGFEz zf_R7d#^FNWR%(xzu=ZVg-Nc-%f)eP8*pqEq@PuPFv~g1S(hqI%T^ zC0RLO8)XBwJ=SSfn{}%kkZUBJG}~geoDn||8^yiie(|z6%d$nPvkp=-osYW@;wyAYCXzeH4x#aB(-{vDDuJ|f^o5HKTiJqOV z$gtIpB)dUPQT}9m-BxeAZp&A;DXdzkR;%mO73xT}Q+Y<&WxHU#CSR1AENjIIbFrz| z_>!SjKVC2B4+}2}X~H#rJzvDz_*QNkH(B0Q#U20!TvvI$&RztU3Ll7h?DY_z*OJTCf~cftjEL>pH}PS77N5s|#f^9g z&c(OUTJ#9I2$#VO*a^0S@xTfW(dBd!ZJ`x9i(X8hq%9y3Bmf5NqsP)B-AxUo57A@5 zKR_}pglX^!m;-Lmlj+;kMyiY|rhZE0P)U@V3Z+hwZ;%tn2=a4Xoo>FaLbph_MR!8i zt#gyilQ7;7kPxNBhQe}QzPjV5UQPz5e-MbKt(7H-GV#d zH0?}i*a{AUx4;@u4az~<&7Ptuy>*jL^{jaAZUucK?k9r=mAkY5O$I8|_W&6%82SJi zRQ%ZkWEjQmdVmb^Lg0VM@XO5qPlhDoyOUw8{h)((H-|qJSr)t<-4(MsR*65Hpidl} zyf|&uBf{Xh`AZ7gM+`5T^W=cyIZx&meKKNPL3;k`LF+T0N#**#9kV?uFZ@uL-(FzL zmKCkS;-$k^(KOpQ$>7tk;&-y+a5PF{m_m9Hgj5rp#Dq!xD8$F_Le9XR>qcOplebLK;`y%K2M9&uIOtr?EA}tbM zG9M4f)2-n4S zvRBzl>{+&jZDtR#2iYd}n5Iv$r`Z$i5%yhnEjyomnjOf7v7ziG<`d>9)65)a&NA&x zH-lM&)-l_|TxBk3-rty3<|5O<++@CD{>|KA{>7YUK4t#QG%zcf@r;l83!a3#(96h= zPQc&67c|DqgEjDvy>wxa9Yvrh6x8Z71C2tJXtPGcFOd%G@OAVldJnBb%TYCY6>UU~ z=oD&4-3VZS349fuK_6)8U!z%QG|EM3C>{kgGCGkBiAawaM57SY2|M69*a8n|`>lg3 z;UaDSS#Tm835RHWOo5NW>F_Ps1M|^J)P&A!lskzUv^6KA$I$m7!xKLcGTgf<+*99v Q`a?22B*Q~8d>1l&4b`+%djJ3c literal 0 HcmV?d00001 diff --git a/phsource/klatt/m b/phsource/klatt/m new file mode 100644 index 0000000000000000000000000000000000000000..043eb7c4d20ea184ce85252ca2e2f09d1b31244c GIT binary patch literal 1605 zcmeH{u};G<5QcxJPU6ypGO>WVWT_aD*g!-=-B1OT1!e{o_KtY~HeR3-jEsyODkdHQ zwmbkr3@mK?cSdqRtYwO=yYqd%vn-$O$M1W^gb>FcW4LLqna%dOvrMWXt^sbehxT;f|T8Wii;68^E@jRLJeM}(O zKqOfoj1d8*17IG_qdX(h5jzf`=h=9An&Uo literal 0 HcmV?d00001 diff --git a/phsource/klatt/m-syl b/phsource/klatt/m-syl new file mode 100644 index 0000000000000000000000000000000000000000..93c59a27b742e44e729030629a0c7666af0473c9 GIT binary patch literal 2446 zcmeH|yH8VL7{;H|p3|PvmKMcwwWbykQIJ#wA|i)N6~Q1_qNocRHE6^^9bho2CI$zM z|AAp()Y+wpjWLFS!4bDEPC77{m>7*d?{`kG4o=-TU%uP(U2^*T&ighslN_5%%_ckm zmbxCS+~w#7$EA;Dd~v3hdo4dIXp>YIhG2v`7D1<%W1j>NCh&1Y?;EFYvC*3v(S>(MfuJXQi0_tcyFoF5pOS1`ec)O zI`V@;KY<0l-wQlJ3X3?)I)__W#UqSk3FhLCu#PmnPSE!RI?)3Q zSIOxVx%9FQac!LRt~sMg?unw6em2qHeRSD&Ry?g$B}k8jg^=+nGA5Y>$)JH}Vl4Y{ z0CBbvQVo$~kgbrD^TWShramePmhr}Na1^?tcAeU3NAEVt#Zws@*+6A%WJ8s)ku}S| z`%C~8kw7lq@;!_VcX=fIFE$c|_y0FG4q=kt*8tAoHkNRV(J@K_BW$M_<&SY6gCx^U z*W+c_I0y%EMp4-PX*h9#S_hRv{6M(BmEUdHPGQ<8|I1-^1~n< zlf@t{i6Sr8{c1JHU17#hgtdv>8p&L4^Yb1*?+d6RylQx|l-cL3{bMbC+xgX&k=LgA z1~(lw_Vydn!JM|Na+#gawzRZw8?7#J$^zUI7nQ4<#Vf1@21Rbuh`Y4d6Y3kL+dQWn@@p}y$q#l>GYAs`U| literal 0 HcmV?d00001 diff --git a/phsource/klatt/m_ b/phsource/klatt/m_ new file mode 100644 index 0000000000000000000000000000000000000000..f65b8d9662c41c55553cc9eb31731f5c5dbeb9ae GIT binary patch literal 1606 zcmeH`p-uxq5QhKV?%i$a9j(GZYR)tm2*DDL5FBX=#el&eF!;)Q030vS1SAq!(V%z) zaQ6U&ATT)onIpMtf&`Khb~7_O-_C3{`)7xPz1^eX!G;BJaq4i!SRYyNG%fSY-FRurJmlC#AqOZun-ZaWppGFE#S&=Kcac10XrP?Q1_&>JV$Ef6gk0Z+WVWT_An5*vs}6>9}53(O2m%pLOpY`j1v7#SHmRJ;We zLmr?)3@mJXcSdqx2bS2nJNtKcj^(p6JvknqO;7g>fNP6Ons%$)^U}{N`}pMuY=U;i z3U$$#8O|9e0yL)1-mo2wIKEKw;+F2p+?!o~??%Zgt9y-UlvvpX9ttRtnJ4psj|l`@ zh$QQsF(SZh2rQyS6v(J-lYKmC9B?4v-`Ws|*g=U+RHRbReKV6x-DlUi+;{Ig@4lCpbKb2il}pvi zav=&}b>jKjvr8r(GY@}``NN+&dLziX*gTPIKDx8F2`8~0$?ErrhyxwXNe@L_?LKpH z;HQbqZ_U*&fdGhR&0OG%^VCtesPC5P_ye=ioexE#zsGc zkSQrr-&l}z;~XCHey_2P3RZA~Ud0n^;00z;!WCS_G|IS*CB`XS;5flp=DftUTPWfz zj$#-ma1MFc$RL3s9AZqtLL4#9V@T3dNOL8P!#IK*>usE-jHT%U>q0W z-~n~IPF*JHGhCacdXM~Uo;5Z`$mcQgdy*`B%nGN2$}Dm$T8J_UrA(ZfSkz#cd-AkX zID=7+S*n_*juuBzPWBgf-&8&;6&&+h%ag+~I$d1?Y!ODcoAU45s9Ua9Q+?s}hO5;R z9gIZeHF~}A-E5gF+Lm^n@7e2(cA~D!D;LD;jkgvQ5_HRCypi^50))rqz&;3fLd^!6 zk!B>^8)4)!KB^w-b+i9>7;N%7PByY+AW2V=19`#1W}IV^qwwjOymUdL3XO9Vj#JQK zDlAIgV|=kuvSTtcX$DPauCrE9lRFH~qiRiddgsWBoFXR}Di(LQKRs1f4QtWxFW5O??4uTcUmoB1PYYiNhOidFdj}5sqCb7{54gPV4gdfE literal 0 HcmV?d00001 diff --git a/phsource/klatt/n^ b/phsource/klatt/n^ new file mode 100644 index 0000000000000000000000000000000000000000..42c956254d94300c5819151a66f5025bff95161e GIT binary patch literal 2002 zcmeH|ze~eF6vw|gFUe`rrjrybU9uE$szVol6vS1Ox+vo0;N;xF!9T#we?ZVd(6K{@ zf*lz@Ozg?l6KHy5fu~ey}Qr7JC3}(`!?2BS2i0PRRQ2&*Tx=w`l;J@ z-Dq5wt#~3~YmliGJs>EF7Pc6t8*ppEe?&=C*xxo}N5S5=&aF8MI5wo{!RcFlLnJA1 zm4nnok0Np!3=+&72_5sq7~Ozo8R&?PNJu42lXIv1wDrB4!a{8a_NWA9)lI zAV;rgJ=!VS=yfq^h-0XtRU|$pU_&zpE?+?}NnAFYJ;`~OO&Mx)h2+>Vb9!a8kB-&5 z=pCf-%g<*g59YARcdyHv`1lF?o?L`#9J#3ep}U-sRFjUBro?`$}E>=VIhL>eIPERxhXxX}xIjCeP{xbAha09C|>1P%jL5 g*9&t;Wr(heXjP&PAL&I6MWZV~E%~kD-cQzxH}f9B+yDRo literal 0 HcmV?d00001 diff --git a/phsource/klatt/n^@ b/phsource/klatt/n^@ new file mode 100644 index 0000000000000000000000000000000000000000..d5ca44325b917378b9cc9a6b53887f1488db3840 GIT binary patch literal 2003 zcmeH{uTR536vw~qu0L42b&8N|nWZ1d!KuEz1-`!osIRitj-%fTK8*{9_^ z-X?KN-KP_VwV^UA20&D^ud&TMZNP(t@C7xy!SRle4 zQijq*M+rHNz7kZAY@PGU9Bn|i4)pE5ZAc@|k_GgvqE5u3_^hjA3A2bXjSvAXL>U!C zD6#kH1NtI;(mYHFafSNyK1qlI9BAgkW3$;S5|8F^q&V-6OVoI#=(a zcTm!=yq%pq%VEvE-#lHU$2aVEY7zUBTIj1c_nsCa$J&gHlBf%6AghZmzu0fOKwcMz z0Wi$z;;NL8kuIbbk~1QFQ8mdiD)>nkP27oofK@KfKVz+n_rc||9CuQSKmSMl%UaB& Nx@hJ_!DyUy@d4GO>WVWT_Yt5(|h*6>9}53(O2mojc|M7?5~@N-#1qcIX4} z0&JO4g&0`a_+bB|{ZW+5WpZ{px|p2rYXH-!!8L7j4ejeP+=u4*#}U~W z&5RYQqE<6pGR_O|rmE}%yL!O$m5>9sv^VNe-6`N!$SSKkwW@^}QsAk85Pu6~-U~62 zUi$|gC)i^Ks(KK$3};~0A=v5g#EN{&rzp@)LjQFo~~sKZW? z2}y)HYDbcz0}Ia*q}-a;kfapLlc7JQIH8sqhWA8#J~PzuvA&A0V8ot$J>0*`)5iC{ kzFw4W-u8msh`op(QeWVWT{Xm7A8axVy!@Bfti7cfvIC2fB}g|fJf-qq2evr z@&E{RU_oNwKRc3Bc3_FEyYqd%vn-#^)3ei)i|P5k25@_4a827DW&FDIere{-Mqm@P zGu}}3Yc<0q<3xa3RlOB<^@!^$N5;uAzERI=tblt*zHAlMs&>SX0uLD+5zmwPz{doF z9can=V2lVb8v+Zx(1DDKHaWnHivx}&d~FPIh&>e8MvjbBGA>g;-+~dZCkkt1r4*{OpUa7XR}{eFKl1sZ;;} literal 0 HcmV?d00001 diff --git a/phsource/klatt/qq b/phsource/klatt/qq new file mode 100644 index 0000000000000000000000000000000000000000..f85b29da9c1a76f47bc170a61581b561f95f785c GIT binary patch literal 5272 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 Ka0obA6#NG$kl*S6 literal 0 HcmV?d00001 diff --git a/phsource/klatt/qqh b/phsource/klatt/qqh new file mode 100644 index 0000000000000000000000000000000000000000..ed4cf1fb5ae9257dd1c506e6bc0f96094db06e56 GIT binary patch literal 5273 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 PeEAd`*HBq`+*f@>AI#3e0X*@?Ip5A)`R|g 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 literal 0 HcmV?d00001 diff --git a/phsource/klatt/v_ b/phsource/klatt/v_ new file mode 100644 index 0000000000000000000000000000000000000000..fe8b309e00e2cc22a5979cab56bca64b225eba25 GIT binary patch literal 5272 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 literal 0 HcmV?d00001 diff --git a/phsource/klatt/x_tap b/phsource/klatt/x_tap new file mode 100644 index 0000000000000000000000000000000000000000..b2e00e6426f675c2b648293ad738b7b7e0912ea7 GIT binary patch literal 3175 zcmeH{Yfuzd7RMW=r|<21Z})W1Oh2Z(XP6mgV0ef|kf5L-h@d=!3d>5?HDT54=HV+* zP!mgos}PORWDO=(${00~^#w7mWn73xBT{SDsHiDR*QklEfdva+6_st=twi~pkDgn% z>h%Afx_!>6dw%1Jv$MvJdup(iqNur(W>21Op^8oSVas3^?wj#I$e=&{|3QXjZ%xDl z|D7tuCxGGR#pND@Q{y)VGq~=Q$)u;5BF@4)C zz|&s|MLw(y>I-^cec3!}jCfp#5jQ#xD5b_v-d({DV)qZkLrR7{lir)vm2+?Gt^6+v ziVB+Y)G;mDw@1Pe-eJYbZw+owh=`jPjRQBlrJfX{PK$HhP`;LTNb8(i9M|o&_A2`} zJMWn9xa>%GE_1dzfiyDDIYV;bcCn92)cbu=npA&gM za#~w0Yb9E#SF^Qn z9BHP#DuL_(E;^>>v%R|kfg`w8ybx~|E6zTH?Bc{0R#&G?-)~@}e#p~nssrqC+ zQ)l(hw6WSjSG;S9dR7^s{9T?dPmwpt1C?&2U2Svi)#~+f++C>U17;?sTqp&T6R6?d9I%W^$uA2X~R| zCU23Mq?}}vMB*bHxrx8Ud+{1P1Lt4^{|7arIy4@+&^dM^JDV+Fli4TO4E9;Jo;}AV zpvCAk3gPK^JHCt^B#l&(I?_l^lRHG*51O5`9#ogFKMB*kvGJqtJRFXyVNtyYlS)_)% zM?NLT$aNxf!?{YXj@!nyap$=!+$FQhM(%Ykk3-xcvc$~5N5aTed=l?BGkF`&!KF9} z+wpbOZdTZU)}mT852fGgsBd{NJin0Pmsxt43>5X^&j*i^;Y3(MKQdsD-;WG_RNapZ zNnBGuGE~^yVg1RVz+aaPSHwc;do9*`A>fSpCO&@9ki_00>r;|aj}Kp&QJIx8`daR! zyq62;qLW3Ni!uxUoL7~TnK>wJ^AO)aU(BGuHt$MLnR|h8P#>mS^Z|OkE*j4nwZ?QK zVC>dY^)I!jHK6Tt&2(w5ZEBo3K^A3!?2^w(holy%Svny7D9w?#Dh;kNMpi_be|*px zs*Zg={^Wp731<>sPFOl1D!wvyLdY7mIP#)*tfyOdYrSf%I$QmdnxY<2o;2sUSze~N zU4!*G?i~@keRCs!49HQvQQM;jh8Bf3gla<0P-^tGpg+*zn-Ou%XwaZ5S#_(=t8MCi z^#`>^?J_6&l)PDPlM|IA$|7~5>-X9^U2y-^Q{iR&t0Mm$xD(tFMMrl>RYz?Jt_Y+= z?(xNVKky87i$EmWC>ISv z61u})WKXgu*bD3}){f%P2vZ-6a!{t}4L5f>%0Ou-5d{#3y4Zi1lRA$rVuNfiJP!}T zop3!|4Hv_g;BVjv7zOPRKnB{N2M&a(rjiT;5Wx=cPp}(o0INX_cm-5~LhvN;0Rce3 z0S`z8&w!QS0JsfeVJWOO@7n;kz-_PzHpAoaI@H)P>;krly~=t}F?tPsj9Sro^gTL@ zTF{%Q0NrIjWJj@A;3}92?|_|PDsX|rOcgVfkr|yC&Ah>!Vq}m4h5!t{VE({J%zf)f z<}foETmq@E9Hzr=@G7{;yu{qKeqx<#on$Ss=30kZ{nl{n8G0lA934$xwlr8?w^Uo| zEL$z@mirbzok5q=FVc(Xcj=wapIV+vo=R9Q~SgB9jKf&HmWgaqJ)2 r3O13w4R^trW=|M+0el4-!FsR)RDnJ+G(RT8V=_D@!(%c$LWchW3O*d# literal 0 HcmV?d00001 diff --git a/phsource/klatt/zh b/phsource/klatt/zh new file mode 100644 index 0000000000000000000000000000000000000000..bb19e53d65d58fe4dea98d4858202c76e036abf6 GIT binary patch literal 6322 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 literal 0 HcmV?d00001 diff --git a/phsource/ph_danish b/phsource/ph_danish index 3c2796c1..7f7e54d3 100644 --- a/phsource/ph_danish +++ b/phsource/ph_danish @@ -114,6 +114,13 @@ phoneme W# FMT(vowel/V) endphoneme +phoneme aI + vowel starttype #a endtype #i + length 250 + FMT(vdiph/ai) +endphoneme + + // CONSONANTS // PB added l/3 diff --git a/phsource/ph_english b/phsource/ph_english index 79b02eb5..03fd06e3 100644 --- a/phsource/ph_english +++ b/phsource/ph_english @@ -383,7 +383,7 @@ endphoneme phoneme aI@ vowel starttype #a endtype #@ - length 270 + length 280 IfNextVowelAppend(r-) FMT(vwl_en/aI@) endphoneme @@ -391,7 +391,7 @@ endphoneme phoneme aU@ vowel starttype #a endtype #@ - length 270 + length 280 IfNextVowelAppend(r-) FMT(vwl_en/aU@) endphoneme diff --git a/phsource/ph_english_n b/phsource/ph_english_n index b5c495f4..6bd8c21c 100644 --- a/phsource/ph_english_n +++ b/phsource/ph_english_n @@ -239,7 +239,7 @@ endphoneme phoneme aI@ vowel starttype #a endtype #@ - length 270 + length 280 IfNextVowelAppend(r-) FMT(vwl_en/aI@) endphoneme @@ -247,7 +247,7 @@ endphoneme phoneme aU@ vowel starttype #a endtype #@ - length 270 + length 280 IfNextVowelAppend(r-) FMT(vwl_en/aU@) endphoneme diff --git a/phsource/ph_english_wm b/phsource/ph_english_wm index 64c8d4f2..68bfd4a0 100644 --- a/phsource/ph_english_wm +++ b/phsource/ph_english_wm @@ -222,7 +222,7 @@ endphoneme phoneme aI@ vowel starttype #a endtype #@ - length 270 + length 280 IfNextVowelAppend(r-) FMT(vwl_en/ooi@) endphoneme @@ -230,7 +230,7 @@ endphoneme phoneme aU@ vowel starttype #a endtype #@ - length 270 + length 280 IfNextVowelAppend(r-) FMT(vwl_en/aU@) endphoneme diff --git a/phsource/ph_french b/phsource/ph_french index 72de3c7b..83088f52 100644 --- a/phsource/ph_french +++ b/phsource/ph_french @@ -1,7 +1,7 @@ //==================================================== // French //==================================================== -// Updated 2010-06-12 Michel Such +// Updated 2010-06-16 Michel Such phoneme #l virtual // Used for l and l/ @@ -80,8 +80,7 @@ phoneme r vcd uvl frc nopause rhotic starttype #r endtype #r - Vowelin f1=1 f2=1600 -500 500 f3=-200 100 len=65 - Vowelout f1=1 f2=1200 -400 800 f3=200 100 len=60 + Vowelin f1=0 f2=1500 -400 400 f3=-400 80 lengthmod 7 IF nextPh(isNotVowel) THEN @@ -148,7 +147,7 @@ endphoneme phoneme r/2 liquid rhotic uvl nopause starttype #r endtype #r - Vowelin f1=1 f2=1600 -500 500 f3=-200 100 len=65 amp=8 + Vowelin f1=0 f2=1500 -400 400 f3=-400 80 CALL post_r IF prevPhW(f) OR prevPhW(k) OR prevPhW(p) OR prevPhW(s) OR prevPhW(t) OR prevPhW(S) THEN @@ -163,7 +162,7 @@ endphoneme phoneme l - liquid nopause + liquid starttype #l endtype #l lengthmod 7 @@ -639,7 +638,11 @@ phoneme b ENDIF IF PreVoicing THEN - FMT(b/xb) + IF nextPhW(#r) THEN + FMT(b/xbr) + ELSE + FMT(b/xb) + ENDIF ENDIF IF nextPh(isPause2) OR nextPh(l) THEN @@ -663,7 +666,11 @@ phoneme d Vowelout f1=2 f2=1700 -300 300 f3=-100 80 IF PreVoicing THEN - FMT(d/xd) + IF nextPhW(#r) THEN + FMT(d/xdr) + ELSE + FMT(d/xd) + ENDIF ENDIF IF nextPh(isPause2) THEN @@ -699,7 +706,11 @@ phoneme g Vowelout f1=1 f2=2300 250 300 f3=-300 80 brk IF PreVoicing THEN - FMT(g/xg) + IF nextPhW(#r) THEN + FMT(g/xgr) + ELSE + FMT(g/xg) + ENDIF ENDIF IF nextPh(isPause2) THEN diff --git a/phsource/ph_nahuatl b/phsource/ph_nahuatl new file mode 100644 index 00000000..cb78c70a --- /dev/null +++ b/phsource/ph_nahuatl @@ -0,0 +1,16 @@ + +//==================================================== +// Nahuatl (classical) +//==================================================== + +phoneme : // lengthens the previous vowel by 'length' + virtual + length 300 +endphoneme + +phoneme e + vowel starttype #e endtype #e + length 170 + FMT(vowel/e_mid2) +endphoneme + diff --git a/phsource/ph_tamil b/phsource/ph_tamil index 67e85187..fc527e51 100644 --- a/phsource/ph_tamil +++ b/phsource/ph_tamil @@ -80,7 +80,10 @@ endphoneme phoneme u vowel starttype #u endtype #u length 110 - ChangeIfNotStressed(U) + IF prevPhW(isVel) THEN + ELSE + ChangeIfNotStressed(U) + ENDIF FMT(vowel/u_6) endphoneme diff --git a/phsource/phonemes b/phsource/phonemes index 47d17e42..f02832a9 100644 --- a/phsource/phonemes +++ b/phsource/phonemes @@ -1720,6 +1720,12 @@ phonemetable da base include ph_danish + + +// The following lines are experimental, for future additions. +// These langauges are not in a usable state. +// These lines can be deleted. + phonemetable rw base2 include ph_kinyarwanda @@ -1738,7 +1744,6 @@ include ph_nepali //phonemetable mr hi //include ph_marathi - //phonemetable eu base2 //include ph_basque diff --git a/phsource/r/@_ b/phsource/r/@_ new file mode 100644 index 0000000000000000000000000000000000000000..a9d5c9f122e931a0e794f6dec8773478c4ebb209 GIT binary patch literal 5632 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 V$p3?5VUNtn_oZK?d(uzR{{nh-y8QqE literal 0 HcmV?d00001 diff --git a/phsource/r/aa b/phsource/r/aa new file mode 100644 index 0000000000000000000000000000000000000000..b183fbfa5c2ffc49205f21d691e557959e03d100 GIT binary patch literal 5632 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

u#u@^ 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 literal 0 HcmV?d00001 diff --git a/phsource/r3/r_ru2 b/phsource/r3/r_ru2 new file mode 100644 index 0000000000000000000000000000000000000000..69c5c1d824689d2a7f6f2bfc6b1f35ce43f2cadb GIT binary patch literal 5809 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 E4Jt^qx&QzG literal 0 HcmV?d00001 diff --git a/phsource/ustop/t_short_.wav b/phsource/ustop/t_short_.wav new file mode 100644 index 0000000000000000000000000000000000000000..c00831e680e18a121a448026aa54d49db1089580 GIT binary patch literal 1340 zcmWNRdrX&g6vm%(zTa0g6qz$DFB9>S*9=r#Dm3pHp$o;r8A>406z`E{iW+Ls$l)#V zGOsC;=4FCSR8%Co zf{IL(>1B#_gZaZer{*S@9oxdB*$(C+bu$sRiq=w!If4w{#M%6w=28-k#VvUUvvjZy zq&Lt~hfrUP$5>pYnOH>2crV)US<{27Z88t0Gu(+2Ig(s|?>t)2A~Txq@?CXkH~&Hd zDV~DqPt?$C8c74BBQ2wudY|TMJQ|VCQ}78DV~1>}@ifVk-W2jKOA<@+H962r#&T{ON?dB3Zxn_N4tCxoE^c?Fj zL!;=dG?O_dfe$qfz&Q21G4!+g@H^I1j@Ht<6tCep$oF`Zd~T+5w&wCd`jWoERDHz; zYa3onDR`zqRLX^3me%R3T0@8Z>h4G~Ju*MgTxrf#RL*5cWzTwg8H4Q$Niv}}R_k$v zVkv`e`E|GF;hb(iMuB$@x#l)5Xo9(C0;C^j+fXi%FuiA%m}=>SmgWmw=1gkmZ7^GS zhYXd&aLsA=H7#<6$zfgTZ1)26IX~1$lxR91lcrQ=kBVZCmYF49n)j1^BGKL<`;^Lk zqj`Yz>_hW^HR zUGLQL@`hd%?Ob%%qS2Wky|m6|(^7q(HrkWYQu=dup5gAIPi>_46g$lU$kHN(`o&a$bjRx*rRe5h7Qx6~ib{Bj_O)&~5j=^s_mp z2>IHI!c24A#2I=ZQ+bJbprxA1`{}flyYtL&TkW>NU;4zi%ATi34QF(d(*Qd6Bl%bk)@tQzyA@2cC{9>Bz*-Q03ndjR-SVD>2!bZKj|zI?;DLk#EQl8yIlP zOu#6<;dlB4enVHAXkMoyI+;#k1ww2l?RS4f5ar8sY0JhOq$*RuEhty#V-_kUgR^Oa zM%(tzbyua)h9SM7&?`VW`tl$@@l69tD8*f@_5P$weBXL2%u3Gk){qUj$-TWM(vK22 X&TZ}cP(#gIbVeu8Ds7G&o#*`z{I(zh literal 0 HcmV?d00001 diff --git a/phsource/vdiph/aau_6 b/phsource/vdiph/aau_6 new file mode 100644 index 0000000000000000000000000000000000000000..899d3cc3ae10f397b6550a87d2f1848b3ea83f9e GIT binary patch literal 22465 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

J(w}C$&Lp$GWL!v_ky1AyE_y_0%j&LG9(q1 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 Gwf_&!3pMxv literal 0 HcmV?d00001 diff --git a/phsource/vwl_de/uu_@ b/phsource/vwl_de/uu_@ new file mode 100644 index 0000000000000000000000000000000000000000..221ccb3f83145cd535c4ebea7aee676d4d4a904c GIT binary patch literal 9048 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 F{|gFsgY*CZ literal 0 HcmV?d00001 diff --git a/phsource/vwl_en_us/aU@ b/phsource/vwl_en_us/aU@ new file mode 100644 index 0000000000000000000000000000000000000000..63ee0e09691f420b81a493ccd5ac7c56a2fd621f GIT binary patch literal 2173 zcmdUw-D@0G7{;HS&2(qKKeE~EW@pnRyBW7OO=6-JYH<(RhDuYgO$t@e(pn*wM)BjK z7ou~eUZ~&)g5X6is;DRhDT+nP)W4vYrJpfUDN@ACTDCn=&IWnWd@vFbZzZmh@V8QGs!f#Lfo%B zZ+&QqZriBtFnW6m`PJBJOyc)vmC;kqO5RU~@!#sOLw$T0)}Lm6ySYp2ZCv4De1~`N z9KOaEP`D2x7{(xqD4~oh>To$8#Vq!4&Vx9Ly%=X3W7I_p9{T|dA} zmP6?L@%~((NhtfWuLYtW3uEH3t}9m&q}Pncezj0p(!PqLYzKpLq2E$LF7(gMOsJ=v zxAV$)Y|6QGhsSR9JT_;E?%)7kz>j#1G)|G(BFT8V8gY!&nK5a4UII}hQEk3R=Lz(YEh+Ud} z#Spu=8WLOS3VJMz?O|lQj(!iMzcIv=r3PjUrTIR;vd`!nNk1DBb2G?-Vra<*&5_BOJYknNNR`i5UU(w z)pgRHX0>I`OwuPVc@*{T6Mv=k{wrx$Ib@aK4zl$-5KoTr*(RIxE!{V@n`_MK^6K3B zU}0LbQ1*pD3%YEjE66O2tus3TmHf&ub1c>G8BVa(z%ip!$)Lx~i!eK%3!IRjs;j=A z3@2gsOOM%Rtskammhl5#=P7jppJHA!7-Ria)?TE8O5|3h1GZori5{^f6CQJ1H ziUSpZMIG*8h^{Vyfs`-G9a-Hp*{U2fFbDdZ*cr2(wReNUg=zVv@+K T`|+P6%tGC6dY0(_F0;P?sL&h> literal 0 HcmV?d00001 diff --git a/phsource/vwl_fr/br b/phsource/vwl_fr/br index 8c79113de69ccff0bcc25e3e8890742682d03ba4..4e22dced3d95afccce6da5ac6d09dc9a88263842 100755 GIT binary patch delta 34 pcmeC*~q(>k@*Az!$f`A&94}jumAv?6bX3% diff --git a/phsource/vwl_fr/e_2r b/phsource/vwl_fr/e_2r new file mode 100755 index 0000000000000000000000000000000000000000..e58e63b77e559c56514b57bbca093fbf503855e6 GIT binary patch literal 2681 zcmeHI`)^cL5S}wL=ia@$+ij&SkFssI7D@}6Kugo|XnRvEEYI>NkCLc_P=i4*7*Z;) zu0b9e5~~R)SR;r=ff|XVQly$fQb5Bi802BVl2#%Vg$RNOf^)ZJw~c>*zi?0H+?nsp z+%sn;=eyG;my9Z#HYJ+?pd$Mff_b8JeQbSjYlm&)^@sPvY80CZ3?n<;FFdprcutZZ z%LQ=+Ac%HC9G=A4qB{cMH$#ala29S5-4S`*P4O+NMX>^K1YmxQ9orp=jkP`9krsaw zImj)Ea0H+##m4SPX8O1;$Oy+N{A4~-BJX~X52K*~{NRFkNPtA>1*wn@0nvMa58`A_ zkl~hf6D$#D7@+0+hG1^-@yOdHYc4^Y*%{9Iqd`DnT?^U~iGZT9*pD#Bw!)YZ)}r6h z;;Us(CxfDU2Ul$j=WZM87p&>f_(tbxY^p0*9M<=#elWQc1-JnrH%Gd&1Ck7JLGMNbZ4hG33qryRurk~aY!}zz>Ff!hI9NOoFui6cBio~ zsP4$nwEkU?{79bv?M{mId@Lsp=~L!^FC{K;D9{{83YslSsb9A9j z)(^OikMp;@hwFHUNIf_6MSj5jbg5pYcS}r9BWS#8>@a>b9vErnaC3}&Kil+}$Bart z8_RSXSMj?%LVLvHEpv$LYgd+4Y1LY9TjQ+*u6FZ`aZj%{(DkO(>NdQ$z4b9;e4qQ; zeJb{r@361hm*(3OGcu;hTkJjPDe~02Q{7cogX@CXY8=(O_zGq537(fS2 zX(@d{*Ju#G$lLf7-{nM|p$F=89j9+fTrJPz48BaCN>s7<2PlKGseo)6CYGDp@GE=` z$73oc$y|$n;yBtw=P90x`2}9dYdORVWar-8LZ8rLDy7j>Mhj^jZKe;!b0y7?FW$vV zcpa0eoN8zv9j9ZoSF{S6NVCPWk$$Cza&6kFSt1tFbec&o(OP<+KB6sDO;hA7-(xk7 z!C^QBD{&L1=HLumjbGx=$do2^8BQZ8 zpK@j7iB>3e%A+i)^Iv#ca#|_3Aq)NZ6qex{saq?$qz}WSBI77XMG_w%58cFb*eI1; zE;ld-z1XJqs~X9nP(7)VREEk^C2E2Ss(i7o!FDKtM)(IZ1)Z+S)l_AxboDo!fJ1N% zdWrXV!AjLAHCUyno+?%4idCU1RY<+As?`!TSB+Hzl~(7W4r<_IXogF02TT>Oitc|i z-wxl%D8oc9D0F9-=pSRNaQSelNeBNs46_x%H5eOI2md<^vs>u!s+!x${|>`sx@{e0 z4~Jo{dVr&d!!UDv5N7-6Kcc0tts13TQHFs&0NoKgwJVYvIlyCvdCV}68Rq|Gn12C6 CU^0XN literal 0 HcmV?d00001 diff --git a/phsource/vwl_fr/r b/phsource/vwl_fr/r index 3e6e6ae47a618f53b0d1b7f5db5ddd6b197bd01c..78e9d068ea5553fdc7b62fb40d0e6dcf23aa9750 100755 GIT binary patch delta 13 Ucmcb}c9Cs@78BEfjXJ8#03rAUG5`Po delta 13 Ucmcb}c9Cs@787&BMjcgV03f~t^8f$< diff --git a/phsource/vwl_ru/ii- b/phsource/vwl_ru/ii- new file mode 100644 index 0000000000000000000000000000000000000000..42f2be533126f7c57c2c43e522dda8d29430597e GIT binary patch literal 997 zcmbV~y>C)c7>6Gy9~UmSK&>tKfl?H;+S;J8jcw(&lvrt^G!Q=*G{(rFLnlo%K^MCi z7iT927dJ;oV>&qaCot&W(8QS3-??yG*2wA)id6ch~p z-0<&y>V~%bXt!2V<)M6g=RHI^K`UrRIssA}ffoT2e~L2N4RpQuTZ~jW_`#d`m1w1V z_3fQfGGqHQt?XvVkDuj=K|elS=*6qFxXW8!)8H}JUx2qFTG%()+FfB`dR*eTCg8lv#hetQ#QqEkz2}ci@|lC^O26I zltie+Br~|&6VWRocu~Hn-ikQi??*MwRnwFaLel`0nv?!=K$gxZQ29_CU3geA*f$SRc^aacfU+ z3-Q*7ueV9Z*W3OGo}tEqh+L)36D~+`%VM>pb&Wf`VuN`xoYwmaQdCjdvN$hEcQc%o z_RfjioZ>ZERT`X^yE<`5Z_jv2%!q`c87D+UYf2r%(k3j9mMko;MwwCdZLjNSDkWWx Y$+IGy(bqAz*}BKpeF@JD*|<*r18i)5CjbBd literal 0 HcmV?d00001 diff --git a/src/Makefile b/src/Makefile index dfaaa6f9..13177231 100644 --- a/src/Makefile +++ b/src/Makefile @@ -1,3 +1,5 @@ +# Makefile for 'espeak', 'speak', and 'libespeak' + # remove -fno-exceptions if it causes problems with stdio library on some platforms (ARM) PREFIX=/usr diff --git a/src/synthesize.cpp b/src/synthesize.cpp index c37fbf09..ed05b3e7 100755 --- a/src/synthesize.cpp +++ b/src/synthesize.cpp @@ -253,9 +253,9 @@ static int DoSample2(int index, int which, int std_length, int control, int leng else { // increase consonant amplitude at high speeds, depending on the peak consonant amplitude - x = ((35 - wav_scale) * speed.loud_consonants); - if(x < 0) x = 0; - wav_scale = (wav_scale * (x+256))/256; +// x = ((35 - wav_scale) * speed.loud_consonants); +// if(x < 0) x = 0; +// wav_scale = (wav_scale * (x+256))/256; } if(std_length > 0) @@ -383,32 +383,6 @@ static int DoSample2(int index, int which, int std_length, int control, int leng } // end of DoSample2 -#ifdef deleted -int DoSample(PHONEME_TAB *ph1, PHONEME_TAB *ph2, int which, int length_mod, int amp) -{//====================== ========================================================== - int index; - int match_level; - int amp2; - int result; - - EndPitch(1); - index = LookupSound(ph1,ph2,which & 0xff,&match_level,0); - if((index & 0x800000) == 0) - return(0); // not wavefile data - - amp2 = wavefile_amp; - if(amp != 0) - amp2 = (amp * wavefile_amp)/20; - - if(amp == -1) - amp2 = amp; - - result = DoSample2(index,which,length_mod,0,amp2); - last_frame = NULL; - return(result); -} // end of DoSample -#endif - int DoSample3(PHONEME_DATA *phdata, int length_mod, int amp) {//========================================================= diff --git a/src/tr_english.cpp b/src/tr_english.cpp deleted file mode 100644 index 6367df31..00000000 --- a/src/tr_english.cpp +++ /dev/null @@ -1,21 +0,0 @@ -/*************************************************************************** - * Copyright (C) 2005 to 2007 by Jonathan Duddington * - * email: jonsd@users.sourceforge.net * - * * - * This program is free software; you can redistribute it and/or modify * - * it under the terms of the GNU General Public License as published by * - * the Free Software Foundation; either version 3 of the License, or * - * (at your option) any later version. * - * * - * This program is distributed in the hope that it will be useful, * - * but WITHOUT ANY WARRANTY; without even the implied warranty of * - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * - * GNU General Public License for more details. * - * * - * You should have received a copy of the GNU General Public License * - * along with this program; if not, write see: * - * . * - ***************************************************************************/ - -#include "StdAfx.h" - diff --git a/src/tr_languages.cpp b/src/tr_languages.cpp index bd43959d..cecdff88 100644 --- a/src/tr_languages.cpp +++ b/src/tr_languages.cpp @@ -881,7 +881,6 @@ SetLengthMods(tr,3); // all equal static const short stress_lengths_nl[8] = {160,135, 210,210, 0, 0, 260,280}; tr->langopts.stress_rule = STRESSPOSN_1L; - tr->langopts.vowel_pause = 1; tr->langopts.vowel_pause = 0x30; // ?? tr->langopts.param[LOPT_DIERESES] = 1; tr->langopts.param[LOPT_PREFIXES] = 1; diff --git a/src/wave.cpp b/src/wave.cpp index 364dcf57..0cef7467 100755 --- a/src/wave.cpp +++ b/src/wave.cpp @@ -168,89 +168,89 @@ static int pa_callback(void *inputBuffer, void *outputBuffer, PaStreamCallbackFlags flags, void *userData ) #endif { - int aResult=0; // paContinue - char* aWrite = myWrite; - size_t n = out_channels*sizeof(uint16_t)*framesPerBuffer; + int aResult=0; // paContinue + char* aWrite = myWrite; + size_t n = out_channels*sizeof(uint16_t)*framesPerBuffer; - myReadPosition += framesPerBuffer; - SHOW("pa_callback > myReadPosition=%u, framesPerBuffer=%lu (n=0x%x) \n",(int)myReadPosition, framesPerBuffer, n); + myReadPosition += framesPerBuffer; + SHOW("pa_callback > myReadPosition=%u, framesPerBuffer=%lu (n=0x%x) \n",(int)myReadPosition, framesPerBuffer, n); - if (aWrite >= myRead) - { - if((size_t)(aWrite - myRead) >= n) + if (aWrite >= myRead) { - memcpy(outputBuffer, myRead, n); - myRead += n; + if((size_t)(aWrite - myRead) >= n) + { + memcpy(outputBuffer, myRead, n); + myRead += n; + } + else + { + SHOW_TIME("pa_callback > underflow"); + aResult=1; // paComplete; + mInCallbackFinishedState = true; + size_t aUsedMem=0; + aUsedMem = (size_t)(aWrite - myRead); + if (aUsedMem) + { + memcpy(outputBuffer, myRead, aUsedMem); + } + char* p = (char*)outputBuffer + aUsedMem; + memset(p, 0, n - aUsedMem); + // myReadPosition += aUsedMem/(out_channels*sizeof(uint16_t)); + myRead = aWrite; + } } - else + else // myRead > aWrite { - SHOW_TIME("pa_callback > underflow"); - aResult=1; // paComplete; - mInCallbackFinishedState = true; - size_t aUsedMem=0; - aUsedMem = (size_t)(aWrite - myRead); - if (aUsedMem) - { - memcpy(outputBuffer, myRead, aUsedMem); - } - char* p = (char*)outputBuffer + aUsedMem; - memset(p, 0, n - aUsedMem); - // myReadPosition += aUsedMem/(out_channels*sizeof(uint16_t)); - myRead = aWrite; - } - } - else // myRead > aWrite - { - if ((size_t)(myBuffer + BUFFER_LENGTH - myRead) >= n) - { - memcpy(outputBuffer, myRead, n); - myRead += n; - } - else if ((size_t)(aWrite + BUFFER_LENGTH - myRead) >= n) - { - int aTopMem = myBuffer + BUFFER_LENGTH - myRead; - if (aTopMem) - { - SHOW("pa_callback > myRead=0x%x, aTopMem=0x%x\n",(int)myRead, (int)aTopMem); - memcpy(outputBuffer, myRead, aTopMem); - } - int aRest = n - aTopMem; - if (aRest) - { - SHOW("pa_callback > myRead=0x%x, aRest=0x%x\n",(int)myRead, (int)aRest); - char* p = (char*)outputBuffer + aTopMem; - memcpy(p, myBuffer, aRest); - } - myRead = myBuffer + aRest; - } - else - { - SHOW_TIME("pa_callback > underflow"); - aResult=1; // paComplete; + if ((size_t)(myBuffer + BUFFER_LENGTH - myRead) >= n) + { + memcpy(outputBuffer, myRead, n); + myRead += n; + } + else if ((size_t)(aWrite + BUFFER_LENGTH - myRead) >= n) + { + int aTopMem = myBuffer + BUFFER_LENGTH - myRead; + if (aTopMem) + { + SHOW("pa_callback > myRead=0x%x, aTopMem=0x%x\n",(int)myRead, (int)aTopMem); + memcpy(outputBuffer, myRead, aTopMem); + } + int aRest = n - aTopMem; + if (aRest) + { + SHOW("pa_callback > myRead=0x%x, aRest=0x%x\n",(int)myRead, (int)aRest); + char* p = (char*)outputBuffer + aTopMem; + memcpy(p, myBuffer, aRest); + } + myRead = myBuffer + aRest; + } + else + { + SHOW_TIME("pa_callback > underflow"); + aResult=1; // paComplete; - int aTopMem = myBuffer + BUFFER_LENGTH - myRead; - if (aTopMem) - { - SHOW("pa_callback > myRead=0x%x, aTopMem=0x%x\n",(int)myRead, (int)aTopMem); - memcpy(outputBuffer, myRead, aTopMem); - } - int aRest = aWrite - myBuffer; - if (aRest) - { - SHOW("pa_callback > myRead=0x%x, aRest=0x%x\n",(int)myRead, (int)aRest); - char* p = (char*)outputBuffer + aTopMem; - memcpy(p, myBuffer, aRest); - } + int aTopMem = myBuffer + BUFFER_LENGTH - myRead; + if (aTopMem) + { + SHOW("pa_callback > myRead=0x%x, aTopMem=0x%x\n",(int)myRead, (int)aTopMem); + memcpy(outputBuffer, myRead, aTopMem); + } + int aRest = aWrite - myBuffer; + if (aRest) + { + SHOW("pa_callback > myRead=0x%x, aRest=0x%x\n",(int)myRead, (int)aRest); + char* p = (char*)outputBuffer + aTopMem; + memcpy(p, myBuffer, aRest); + } - size_t aUsedMem = aTopMem + aRest; - char* p = (char*)outputBuffer + aUsedMem; - memset(p, 0, n - aUsedMem); - // myReadPosition += aUsedMem/(out_channels*sizeof(uint16_t)); - myRead = aWrite; + size_t aUsedMem = aTopMem + aRest; + char* p = (char*)outputBuffer + aUsedMem; + memset(p, 0, n - aUsedMem); + // myReadPosition += aUsedMem/(out_channels*sizeof(uint16_t)); + myRead = aWrite; + } } - } - SHOW("pa_callback > myRead=%x\n",(int)myRead); + SHOW("pa_callback > myRead=%x\n",(int)myRead); // #if USE_PORTAUDIO == 18 @@ -288,7 +288,7 @@ static int pa_callback(void *inputBuffer, void *outputBuffer, #endif - return(aResult); + return(aResult); //#endif } // end of WaveCallBack From 11ba954486cb9a43768e9bd28513cf24276382ed Mon Sep 17 00:00:00 2001 From: jonsd Date: Fri, 25 Jun 2010 19:14:09 +0000 Subject: [PATCH 2/4] Add some missing files to phsource. Remove executable attribute from program source files. git-svn-id: https://espeak.svn.sourceforge.net/svnroot/espeak/trunk@246 d46cf337-b52f-0410-862d-fd96e6ae7743 --- dictsource/dict_phonemes | 20 +++++++++----------- phsource/d/xdr | Bin 0 -> 3173 bytes phsource/l/l_front | Bin 0 -> 5207 bytes phsource/l/l_front_ | Bin 0 -> 6244 bytes phsource/phonemes | 2 +- phsource/ufric/l#.wav | Bin 10840 -> 5290 bytes src/compiledata.cpp | 0 src/compiledict.cpp | 0 src/dictionary.cpp | 0 src/espeakedit.cpp | 0 src/formantdlg.cpp | 0 src/intonation.cpp | 0 src/menus.cpp | 0 src/options.cpp | 0 src/options.h | 0 src/phoneme.h | 0 src/phonemelist.cpp | 0 src/portaudio.h | 0 src/portaudio18.h | 0 src/prosodydisplay.cpp | 0 src/prosodydisplay.h | 0 src/setlengths.cpp | 0 src/sintab.h | 0 src/speak.cpp | 0 src/spect.cpp | 0 src/spect.h | 0 src/spectdisplay.cpp | 0 src/spectseq.cpp | 0 src/speech.h | 0 src/synth_mbrola.cpp | 0 src/synthdata.cpp | 0 src/synthesize.cpp | 0 src/synthesize.h | 0 src/translate.cpp | 0 src/translate.h | 0 src/transldlg.cpp | 0 src/voicedlg.cpp | 0 src/voices.cpp | 0 src/wave.cpp | 0 src/wave_pulse.cpp | 0 src/wave_sada.cpp | 0 src/wavegen.cpp | 0 42 files changed, 10 insertions(+), 12 deletions(-) create mode 100644 phsource/d/xdr create mode 100644 phsource/l/l_front create mode 100644 phsource/l/l_front_ mode change 100755 => 100644 src/compiledata.cpp mode change 100755 => 100644 src/compiledict.cpp mode change 100755 => 100644 src/dictionary.cpp mode change 100755 => 100644 src/espeakedit.cpp mode change 100755 => 100644 src/formantdlg.cpp mode change 100755 => 100644 src/intonation.cpp mode change 100755 => 100644 src/menus.cpp mode change 100755 => 100644 src/options.cpp mode change 100755 => 100644 src/options.h mode change 100755 => 100644 src/phoneme.h mode change 100755 => 100644 src/phonemelist.cpp mode change 100755 => 100644 src/portaudio.h mode change 100755 => 100644 src/portaudio18.h mode change 100755 => 100644 src/prosodydisplay.cpp mode change 100755 => 100644 src/prosodydisplay.h mode change 100755 => 100644 src/setlengths.cpp mode change 100755 => 100644 src/sintab.h mode change 100755 => 100644 src/speak.cpp mode change 100755 => 100644 src/spect.cpp mode change 100755 => 100644 src/spect.h mode change 100755 => 100644 src/spectdisplay.cpp mode change 100755 => 100644 src/spectseq.cpp mode change 100755 => 100644 src/speech.h mode change 100755 => 100644 src/synth_mbrola.cpp mode change 100755 => 100644 src/synthdata.cpp mode change 100755 => 100644 src/synthesize.cpp mode change 100755 => 100644 src/synthesize.h mode change 100755 => 100644 src/translate.cpp mode change 100755 => 100644 src/translate.h mode change 100755 => 100644 src/transldlg.cpp mode change 100755 => 100644 src/voicedlg.cpp mode change 100755 => 100644 src/voices.cpp mode change 100755 => 100644 src/wave.cpp mode change 100755 => 100644 src/wave_pulse.cpp mode change 100755 => 100644 src/wave_sada.cpp mode change 100755 => 100644 src/wavegen.cpp diff --git a/dictsource/dict_phonemes b/dictsource/dict_phonemes index 88e5f1e2..973ae78f 100644 --- a/dictsource/dict_phonemes +++ b/dictsource/dict_phonemes @@ -56,8 +56,8 @@ x z Dictionary da_dict & &# 0 3 @ @- a A -aI e E i o O u V -W W# y Y +e E i o O u V W +W# y Y * - : ? b B d D dZ f g h j J k l @@ -535,7 +535,6 @@ Dictionary ml_dict a a: aI aU e E e: i I i: o o: r- u u: V -y : b bh c ch d d. dh dh. dZ f g gh h j J @@ -548,10 +547,9 @@ z z. Dictionary ne_dict @ @/ @2 @3 a aI aU a~ -e E eI eU e~ E~ i I -i~ l- o O o: oI oU O~ -o~ r- u uI u~ V VI VU -V~ +e E e~ E~ i I i~ l- +o O o: O~ o~ r- u U +u~ V V~ - : b bh c ch d d. dh f g gh h H j J @@ -577,7 +575,7 @@ z Dictionary prs_dict -@ A E eI i o u +@ e i o u : b d dZ f g h j k l m n p r R s @@ -612,9 +610,9 @@ Dictionary bg_dict @ a e i o u ; b C d d; dZ dz f -g j k l L l^ m n -n^ p r s S s; t t; -tS ts v x z Z z; +g j k l l^ m n n^ +p r s S s; t t; tS +ts v x z Z z; Dictionary nso_dict diff --git a/phsource/d/xdr b/phsource/d/xdr new file mode 100644 index 0000000000000000000000000000000000000000..87715dbfce6d5c526d6a72a2e3b1cd557d12a4a3 GIT binary patch literal 3173 zcmeH}e^3-h7RLv6cDkp#XLe?H=f}>>F8dP}L^Of~1qDGwMZx&Vw|jbCclG7O!aq=2!u>KO&y`ilXSTma&#JQ~4z&fZ^11hKjsyTK9imrzA9k3L`3l zp&5Fssn8KmaP8C;j*8G|jiw{Il@c2hsR~rYr;(pV{zow>Q>s#Io;h1-}9&v z4)j#|bx*q2x}$lxG2#g!R@~$`q)aq^^zIG4A9t`1?mu?mv*}$~Ejf2ac8vOLbpGf) zx$218?9L%@uy^2?hnj{~Svz4RD1hrXx+cie>>Q3vp$*)g#$icC~B(PZVb}TYfajZTD(49pQb;fXX>o} zi8fL@?230SRnIDemA}a|eMF zr0dS(&Rxzm&RNbpXVBU1sC6uNjB%)rZ_RUCV9&Gr?H%HmVwJdDd{LYrW{OE-yci>f zObduUQ5PK|6z>Qv!X=?e_(Iq%tQBSn*#ajVx2>?{*<7|({uE!&*YU^sM*a-{jrrEV zALVQKPxu}DNBjnUEnm);@J0M6K8bhph`-IXbJw}6+&{RlxoYlRu9zFjIk<~tA9<4$ zlLC@W5{Zv+ymeb~ZbjO=h29GuY?YO7?N$icB*9G>a@D?~=ce z2GT}kZV*?*RdCz6dhR@Tg}Y?#ayR!Hm&+mU2w7@I;3E;_Dn5x1nvuMP=irGr3EOcS zYBG0Nh1Q{RG!LbBG*{N%OP(HNi2UGwI`t$2)q@NR%|w1chQ^2ls*x(|K?V#)QGTYZ z2O0dRl&WIOdXOQB+e1x#hzx}`cf_M)P~gu?hAU#8^qm&xy%2Q9ejOj*w|`<+{|zZg zsV4@l$|%Z88Fp>>l-!p`)A=X!x8!H${UNs`Co{8e+Lr#lKEBw#!R_8vo=NTn#$kP+ zZqa+|mAYs=ZvH^}g>J;1-QE{h+o^+oRpk^7WlMF$#>8#-EJ0jLF6={YAZ6 z``*>AUQv$8A4;XpDUK=jW#R>4nqU*^Y)ftFwsw9qU&w3x1#Tx-X5Lel+fNEfr+GIA z;Ol5FT7inu(`Y#AizIZ5y~v(q8`%qN2Wv;Y&|p&^iE>b;=?yY_I?6z4C=mq_hg#Ub zo0&R~&1XYw7d#IS!(DI#Tmu)wm*6kpU>FVU5I_dnpa=GWsiu+)gAl=H@Dnrf5$pnX4||pM zpfTuG^bx8<=h1iQEUHCspwZ|y`yo4&y#iOmOn3|I0@HvC9A!$F0gTM(%rNG4<`g4? z6wn`F@EP+PMq=(-hcHK(XTT+p3JYL5Yy}I!P39%$w)JD{T0IS~`X+1-4 zqMxT@=*yNW%WIZWONC{drO9&F;-@p{0{Zv#BKjSA7k!+*PGhUj8fW!b@6h#h6@89= z)jF9;1Ci$W*x7OHZ`ndNk?n+gVX=8847>oo0K35kuo9GjZZgz7LWcWTFdzSm49h6W z`Y;(zo63Wlp_>e6t(4_K&CpGT1eS_?P&0Is;S%XtGyGg+Nd9R9;h((!I*-Zlm<*4} I@c)qE-|D*`D*ylh literal 0 HcmV?d00001 diff --git a/phsource/l/l_front b/phsource/l/l_front new file mode 100644 index 0000000000000000000000000000000000000000..e2bd8a607629ddb997529bfcb245a233ed3f20cf GIT binary patch literal 5207 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 Ae*gdg literal 0 HcmV?d00001 diff --git a/phsource/l/l_front_ b/phsource/l/l_front_ new file mode 100644 index 0000000000000000000000000000000000000000..ee5a14c8e89bb48c7e3e5572b3be9c62a33e3e6a GIT binary patch literal 6244 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 a(GX}WjS-*!!D=;e{WHwsCSo=Swd{X&2+d0X diff --git a/src/compiledata.cpp b/src/compiledata.cpp old mode 100755 new mode 100644 diff --git a/src/compiledict.cpp b/src/compiledict.cpp old mode 100755 new mode 100644 diff --git a/src/dictionary.cpp b/src/dictionary.cpp old mode 100755 new mode 100644 diff --git a/src/espeakedit.cpp b/src/espeakedit.cpp old mode 100755 new mode 100644 diff --git a/src/formantdlg.cpp b/src/formantdlg.cpp old mode 100755 new mode 100644 diff --git a/src/intonation.cpp b/src/intonation.cpp old mode 100755 new mode 100644 diff --git a/src/menus.cpp b/src/menus.cpp old mode 100755 new mode 100644 diff --git a/src/options.cpp b/src/options.cpp old mode 100755 new mode 100644 diff --git a/src/options.h b/src/options.h old mode 100755 new mode 100644 diff --git a/src/phoneme.h b/src/phoneme.h old mode 100755 new mode 100644 diff --git a/src/phonemelist.cpp b/src/phonemelist.cpp old mode 100755 new mode 100644 diff --git a/src/portaudio.h b/src/portaudio.h old mode 100755 new mode 100644 diff --git a/src/portaudio18.h b/src/portaudio18.h old mode 100755 new mode 100644 diff --git a/src/prosodydisplay.cpp b/src/prosodydisplay.cpp old mode 100755 new mode 100644 diff --git a/src/prosodydisplay.h b/src/prosodydisplay.h old mode 100755 new mode 100644 diff --git a/src/setlengths.cpp b/src/setlengths.cpp old mode 100755 new mode 100644 diff --git a/src/sintab.h b/src/sintab.h old mode 100755 new mode 100644 diff --git a/src/speak.cpp b/src/speak.cpp old mode 100755 new mode 100644 diff --git a/src/spect.cpp b/src/spect.cpp old mode 100755 new mode 100644 diff --git a/src/spect.h b/src/spect.h old mode 100755 new mode 100644 diff --git a/src/spectdisplay.cpp b/src/spectdisplay.cpp old mode 100755 new mode 100644 diff --git a/src/spectseq.cpp b/src/spectseq.cpp old mode 100755 new mode 100644 diff --git a/src/speech.h b/src/speech.h old mode 100755 new mode 100644 diff --git a/src/synth_mbrola.cpp b/src/synth_mbrola.cpp old mode 100755 new mode 100644 diff --git a/src/synthdata.cpp b/src/synthdata.cpp old mode 100755 new mode 100644 diff --git a/src/synthesize.cpp b/src/synthesize.cpp old mode 100755 new mode 100644 diff --git a/src/synthesize.h b/src/synthesize.h old mode 100755 new mode 100644 diff --git a/src/translate.cpp b/src/translate.cpp old mode 100755 new mode 100644 diff --git a/src/translate.h b/src/translate.h old mode 100755 new mode 100644 diff --git a/src/transldlg.cpp b/src/transldlg.cpp old mode 100755 new mode 100644 diff --git a/src/voicedlg.cpp b/src/voicedlg.cpp old mode 100755 new mode 100644 diff --git a/src/voices.cpp b/src/voices.cpp old mode 100755 new mode 100644 diff --git a/src/wave.cpp b/src/wave.cpp old mode 100755 new mode 100644 diff --git a/src/wave_pulse.cpp b/src/wave_pulse.cpp old mode 100755 new mode 100644 diff --git a/src/wave_sada.cpp b/src/wave_sada.cpp old mode 100755 new mode 100644 diff --git a/src/wavegen.cpp b/src/wavegen.cpp old mode 100755 new mode 100644 From fb9338ad14fa9162cae9bcb23784ac0c6e9227d2 Mon Sep 17 00:00:00 2001 From: jonsd Date: Fri, 25 Jun 2010 20:38:54 +0000 Subject: [PATCH 3/4] Add makefile.espeakedit git-svn-id: https://espeak.svn.sourceforge.net/svnroot/espeak/trunk@247 d46cf337-b52f-0410-862d-fd96e6ae7743 --- dictsource/dict_phonemes | 417 --------------------------------------- src/Makefile.espeakedit | 39 ++++ 2 files changed, 39 insertions(+), 417 deletions(-) create mode 100644 src/Makefile.espeakedit diff --git a/dictsource/dict_phonemes b/dictsource/dict_phonemes index 973ae78f..9bc2b941 100644 --- a/dictsource/dict_phonemes +++ b/dictsource/dict_phonemes @@ -3,624 +3,207 @@ Phonemes which are used in the *_rules and *_list files Dictionary af_dict -& &: 3: @ @- @L @U a -A: aI AI aU A~ E e: e@ -eI e~ i I iu O O: o@ -OI oI o~ u uI W y Y@ -Yy - -- : ; ? b c d dZ -f g h j k l l# m -n N n^ p r s S t -T tS v w x x2 z Z Dictionary ca_dict -@ a a# aI e E E2 i -o O u U - -* ** : ; b B d D -dZ; f g j J J^ k l -l^ m n N n^ p Q R -R2 s S; t T ts tS; v -v# w z Z Z; Dictionary cs_dict -@- a a: aU e e: eI eU -i i: l- o o: oU r- u -u: - -* ; b c d dZ dz f -g h j J k l l^ m -n N n^ p r R R^ R^/ -s S t tS ts v x z -Z Dictionary cy_dict -@ @- @I @Y a A: aI aU -AY aY E e: eU I i: Iu -O o: OI OY U u: uY V -Y y: Yu - -: b C d D dZ f g -h j k l l# m n N -p r s S t T v w -x z Dictionary da_dict -& &# 0 3 @ @- a A -e E i o O u V W -W# y Y - -* - : ? b B d D -dZ f g h j J k l -l/2 l/3 m n N p r R -s S t T tS v w z Dictionary hu_dict -A a: E e: i i: o o: -u u: Y y y: Y: - -- : b c d dZ dz f -g h j J k l m n -n^ p r R R2 s S s2 -t tS ts v z Z Dictionary de_dict -3 3: @ @- a A A: aI -aU E E2 E: e: EI I i2 -i: n- O o: OY U u: W -y y: Y: - -* : ; b C d D dZ -f g g# h j k l m -n N p pF r s S t -tS ts v w x z Z Dictionary el_dict -@ @- a aI e i o oI -u - -* ; b c C d D f -g j k l l^ m n N -n^ p Q r R s s; t -T ts v x z z; Dictionary en_dict -0 3 3: @ @- @2 @5 @L -a a# A: A@ aa aI aI@ aU -aU@ A~ E e: e@ eI i I -I2 i: i@ i@3 IR O O: o: -O@ o@ OI oU O~ U u: U@ -V VR - -: ; ? b C d D dZ -f g g- h j k l l# -m n N n^ p Q r r- -s S t T t2 tS v w -x z Z Dictionary eo_dict -@- a aI aU e eI eU i -o oI u uI - -* - b d dZ f g h -j k l m n p r R -s S t T tS ts v w -x z Z Dictionary es_dict -a aI aU e E eI eU i -o O oI u - -* ** : b B d D f -g j J J^ k l m n -N n^ p Q R R2 s t -T tS v v# w x z Dictionary fi_dict -& &i &y a a2 ai au e -ei eu ey i I ie iu iy -o oi ou u ui uo Y y -Yi yi Yy yY - -: b d f g h j k -l m n N p r s S -s2 t v w Z Dictionary fr_dict -@ @- a A~ e E E2 E: -E~ i I o O o2 o3 O~ -u u: w W W~ y Y - -- : b d dZ f g h -j k l m n N n2 n^ -p p2 r r2 s S t t2 -t3 tS v z Z z2 z3 Dictionary grc_dict -a aI aU e E EI eU EU -i o O oI OI OU u y -yI - -: b d f g h j k -l m n N p R s t -T v x z Dictionary hbs_dict -& @ @2 a A a: aI aU -e E e: i I i: l- o -O o: oU r* r- u U u: - -* ; b d dZ dz dZ; f -g h j k l l^ m n -N n^ p r R R2 s S -t tS ts tS; v x z Z Dictionary hi_dict -@ @- @2 @3 a a: aI aU -e E e: E: E~ i I i: -l- o O o: O: O~ o~ r- -U u: u~ V - -- : b bh c ch d d. -dh dh. f g gh h H j -J Jh k kh l l. m n -N n. n^ p ph Q q r -r. s S s. t T t. th -th. v w x z Dictionary ta_dict -a a: aI aU e E e: i -I i: o o: u U u: U: -V V# - -: ; b C d d. dZ f -g h H j k l l. m -n N n. n^ p Q r R -s S s. t T t. th tS -v w z z. Dictionary hy_dict -@ a aI e eI i i@ o -u W y - -** b c d dZ dz f g -h j k k# l m n p -p# r R r" s S t t# -tS ts ts# v X z Z Dictionary id_dict -@ a aI aU e E E2 i -o O u - -: ? b d dZ f g h -j k l m n N n^ p -r R R2 s S t tS v -w x z Dictionary is_dict -@- a a: aI aI: aU aU: E -E: eI eI: i I i: I: O -O: OI oU oU: u u: W W: -y y: yI Yy Yy: - -* ** : ; b c C d -D f g h j J k l -l# m m# n N n# N# n^ -n^# p Q r R r# R2 s -S s2 t T tl# v x z Dictionary it_dict -@- a a/ aI aU e E eI -i I o O u - -* : ; b d dZ f g -h j k l l^ m n N -n^ p r R s S t tS -ts v w w2 z Dictionary jbo_dict -@ a aI aU e eI i l- -n- o oI r- u - -b d dZ f g h j k -l m n N p R s S -t tS v w x z Z Dictionary ku_dict -8 a e E E# eI eU i -I o u U y - -* : b c d dZ f g -h j J k l m n p -q r R s S t tS v -w x z Z Dictionary la_dict -@- a a: aI aU E e: EU -I i: O o: OI U u: y -y: - -* : ; ? b d f -g h j k l m n N -p r R s t w z Dictionary lv_dict -a a: ai au e e: ei i -i: ie iu o o: u u: ui -uo - -: b c d dZ f g h -j J k l l^ m n N -n^ p r R R2 s S t -tS ts v z Z Dictionary mk_dict -& @ @- @2 a A a: e -E e: i I i: l- o o: -oU r- u u: - -* b d dZ dz dZ; f g -h j k k^ l l^ m n -N n^ p r R s S t -tS ts tS; v x z Z Dictionary nci_dict -a e i o O - -: ? b c d f g j -k l m n p R s S -t tS v w x Dictionary nl_dict -8 @ @- A a: A~ E e: -EI eU i I O O: o: u -VU Wy y Y: yU - -* : ; b d f g h -j k l m n N n^ p -Q r s S t tS v v# -w x z Dictionary no_dict -@ @2 a A a: A: AI aI -aU E E: e: I i: O o: -OI U u- u-: u-I u: W y -y: Y: Yy - -: ; b d f g h j -k l m n N p r R -s S s; t v w x z Dictionary pap_dict -a a/ aI e E eI i o -O u y Y - -: ? b d dZ f g h -j k l m n N n^ p -R s S t tS v w x -z Z Dictionary pl_dict -a E E# E~ i O O~ u -y - -: ; b c C d d; dZ -dz f g h j k l m -n N n^ p r R s S -s; S; t t; tS ts tS; v -w x z Z Z; Dictionary pt_dict -& &/ &U~ &~ @ @- a A -aI aU e E eI EI eU EU -i I i/ iU o O oI OI -o~ u U uI u~ y - -* : ; b C d dZ f -g h j k l l^ m n -N n^ p Q r R r- s -S s# s; t T tS ts v -w x z Z Dictionary ro_dict -@ @- @I @U a aI aU e -ea eI eo eU i i/ I^ iI -iU o O Oa oI oU u uI -y Y yI yU - -* *; b b; c C d d; -dZ f f; g h j k l -l; m m; n N n; p p; -r s S S; t t; tS ts -ts; v v; w w2 x z Z -z; Z; Dictionary ru_dict -8 @- a A e E E# E2 -E3 i I I# I2 I3 I^ ja -ju o O u u" u# V V# -y Y - -* ; b d d; dZ; f g -j k l l^ m m; n n^ -p r R s S s; S; t -t; ts tS; v x z Z z; -Z; Dictionary sk_dict -& @- a a: e e: i i: -l- l: o o: oU r- r: u -u: - -* ; b d d; dZ dz f -g h j k l l^ m n -N n^ p r R R^ R^/ s -S t t; tS ts v x z -Z Dictionary sq_dict -@ @/ a A a/ aI e E -eI i I I# O OI u V -y yE - -** : ; b c d D dZ -dz dZ; f g h j k l -L ll m n n^ p r R -R2 s S t T tS ts v -w z Z Dictionary sv_dict -8 @ a A: E E- e: E: -I i: O o: U u- u: W -y y: Y: - -: ; b d f g h j -k l m n N p R s -S s. S; sx t v w z Dictionary sw_dict -@- a a/ e i m- n- N- -o u - -* : b d D f g h -j J k l m n N n^ -p Q R s S t T tS -v w x z Dictionary sl_dict -& @ a e E i o O -u y - -: b d dZ dz f g h -j k l l^ m n N n^ -p R R^ s S t tS ts -v w x z Z Dictionary tr_dict -@ a e E i I o O -u U W y Y - -* : b c d dZ f g -G h j J k l m n -p Q r R s S t tS -v w z Z Dictionary vi_dict -@ @: @:I @:U @I @U a a: -a:I a:U aI aU e E eU EU -i i@ iU o O OI oI u -u@ uI y y@ yI - -b c d D f g h j -J k kh l m n N n^ -p Q r s s. t t[ tS; -v w x z Z z. Dictionary zh_dict -@ @r a A ai Au E ei -i i. i[ iA iE io iou N- -o o- ong ou u u@ ua uai -uei uo y y& y@ yE yi yu - -; C f h j k kh l -l# m n N p ph Q q -Q" Q^ r R r" R2 R3 s -s. S; t th ts ts. ts. tS; -tS; tsh v w x X z. Dictionary zhy_dict -a aa aai aan aau ai au e -ei eo eoi eu i iu o oe -oi ong ou u ui yu - -b c d f g h j k -l m n N p r s t -tS v w z Dictionary am_dict -@ a e i o u y - -b d h l m q R s -S t tS Dictionary ml_dict -a a: aI aU e E e: i -I i: o o: r- u u: V - -: b bh c ch d d. dh -dh. dZ f g gh h j J -Jh k kh l l. m n N -n. n^ p ph R R2 s s. -S; t t. th th. tS v w -z z. Dictionary ne_dict -@ @/ @2 @3 a aI aU a~ -e E e~ E~ i I i~ l- -o O o: O~ o~ r- u U -u~ V V~ - -- : b bh c ch d d. -dh f g gh h H j J -Jh k kh l l. m n N -n. n^ p ph Q q r r. -s S s. t T t. th v -w x z z. Dictionary pa_dict -@ a a~ e E e~ E~ i -I i~ I~ o O O~ o~ r- -u U U~ u~ V V~ - -: ; b bh c ch d d. -dh dh. f g gh h H j -J Jh k kh l l. m n -N n. n^ p ph Q R R2 -s S t t. th th. v x -z Dictionary prs_dict -@ e i o u - -: b d dZ f g h j -k l m n p r R s -S t tS v w X z Z Dictionary rw_dict -a e i o u - -* : b B c d dZ f -g h j J k l m n -N n^ p q R s S S; -t tS v w x z Dictionary ur_dict -@ a a: aI aU E e: i -I i: O o: U u: - -: b bh c ch d D d. -dh dh. dZ f g gh H j -J Jh k kh l m n N -p ph Q q R r. s S -s. t T t. th th. v x -z Z z. Dictionary bg_dict -@ a e i o u - -; b C d d; dZ dz f -g j k l l^ m n n^ -p r s S s; t t; tS -ts v x z Z z; Dictionary nso_dict -@ a e i m- n- N- o -u - -- : b d D dZ f g -h j J k l l# m n -N n^ p Q r R R3 s -S t T tS v w x z diff --git a/src/Makefile.espeakedit b/src/Makefile.espeakedit new file mode 100644 index 00000000..ca60e3c4 --- /dev/null +++ b/src/Makefile.espeakedit @@ -0,0 +1,39 @@ +# Makefile for 'espeakedit' program + +SRCS= compiledata.cpp compiledict.cpp debug.cpp dictionary.cpp espeak_command.cpp \ + espeakedit.cpp event.cpp extras.cpp fifo.cpp formantdlg.cpp intonation.cpp \ + klatt.cpp menus.cpp numbers.cpp options.cpp phonemelist.cpp prosodydisplay.cpp \ + readclause.cpp setlengths.cpp speak_lib.cpp spect.cpp spectdisplay.cpp \ + spectseq.cpp synthdata.cpp synthesize.cpp synth_mbrola.cpp translate.cpp \ + transldlg.cpp tr_languages.cpp voicedlg.cpp voices.cpp vowelchart.cpp \ + wave.cpp wavegen.cpp + +OBJS=$(patsubst %.cpp,%.o,$(SRCS)) + +WX_LIBS = -pthread -lwx_gtk2u_xrc-2.6 -lwx_gtk2u_qa-2.6 -lwx_gtk2u_html-2.6 \ + -lwx_gtk2u_adv-2.6 -lwx_gtk2u_core-2.6 -lwx_baseu_xml-2.6 -lwx_baseu_net-2.6 -lwx_baseu-2.6 + +LIBS=-lstdc++ -lportaudio + +CPPFLAGS = -Wall -g -fexceptions -I/usr/lib/wx/include/gtk2-unicode-release-2.6 + -I/usr/include/wx-2.6 \ + -DGTK_NO_CHECK_CASTS -D__WXGTK__ -D_FILE_OFFSET_BITS=64 -D_LARGE_FILES + -D_LARGEFILE_SOURCE=1 -DNO_GCC_PRAGMA -D_ESPEAKEDIT + +CXXFLAGS = -O2 -g0 -Wall -g -fexceptions -I/usr/lib/wx/include/gtk2-unicode-release-2.6 -I/usr/include/wx-2.6 \ + -DGTK_NO_CHECK_CASTS -D__WXGTK__ -D_FILE_OFFSET_BITS=64 -D_LARGE_FILES -D_LARGEFILE_SOURCE=1 -DNO_GCC_PRAGMA -D_ESPEAKEDIT + +all: espeakedit + +.cpp.o: + $(CXX) $(CXXFLAGS) -I. -c -fno-exceptions $< + +espeakedit: $(OBJS) + $(CXX) -o $@ $(OBJS) $(LIBS) $(WX_LIBS) + +clean: + rm -f *.o *~ + +distclean: clean + rm -f espeakedit + From a9fedd94db9f60ecffb95acaf015b4223f9fc999 Mon Sep 17 00:00:00 2001 From: jonsd Date: Mon, 28 Jun 2010 15:50:12 +0000 Subject: [PATCH 4/4] [1.43.48] Add mbrowrap.cpp to emulate the mbrola library which is available in Windows, but not on Linux. mbrola voices in command-line espeak and libespeak now call mbrola directly rather than generating phoneme information as text. Mbrola phonemes as text is still available with the new --pho command-line option. git-svn-id: https://espeak.svn.sourceforge.net/svnroot/espeak/trunk@248 d46cf337-b52f-0410-862d-fd96e6ae7743 --- dictsource/da_list | 41 +-- dictsource/da_rules | 296 +++++++++++++++----- dictsource/dict_phonemes | 419 ++++++++++++++++++++++++++++ dictsource/en_list | 2 + dictsource/pt_rules | 4 +- dictsource/ta_rules | 2 - phsource/compile_report | 66 ++--- phsource/l/L2_oL | Bin 4931 -> 4931 bytes src/Makefile | 6 +- src/Makefile.espeakedit | 8 +- src/compiledata.cpp | 8 +- src/espeak.cpp | 77 ++++-- src/espeakedit.cpp | 2 - src/mbrolib.h | 205 -------------- src/mbrowrap.cpp | 578 +++++++++++++++++++++++++++++++++++++++ src/mbrowrap.h | 108 ++++++++ src/setlengths.cpp | 41 --- src/speak.cpp | 15 +- src/speak_lib.cpp | 59 +++- src/speak_lib.h | 13 +- src/speech.h | 1 - src/synth_mbrola.cpp | 333 +++++++--------------- src/synthdata.cpp | 2 +- src/synthesize.cpp | 40 +-- src/synthesize.h | 9 +- src/translate.h | 1 + src/voice.h | 3 + src/voices.cpp | 2 + src/wave.cpp | 34 +-- src/wave.h | 2 +- src/wave_pulse.cpp | 9 +- src/wave_sada.cpp | 8 +- src/wavegen.cpp | 13 +- 33 files changed, 1693 insertions(+), 714 deletions(-) delete mode 100644 src/mbrolib.h create mode 100644 src/mbrowrap.cpp create mode 100644 src/mbrowrap.h diff --git a/dictsource/da_list b/dictsource/da_list index c7f5c752..eca6df58 100755 --- a/dictsource/da_list +++ b/dictsource/da_list @@ -1,4 +1,4 @@ -// PB = Peter Bjarkov - pbj1234@hotmail.com +// PB = Peter Bjarkov - pbj1234@hotmail.com // This file is UTF8 encoded // Spelling-to-phoneme words for Danish @@ -113,7 +113,7 @@ _3X tR'&#Dv@ //PB [tR'ADv@] changed to [tR'&#Dv@] _4X f'WRV //PB [f'W:*3] changed to [ f'WRV] _5X h&l't*es // PB [a] changed to [&] _6X t*'es -_7X halfj'&rs +_7X h&lfj'&rs // PV a changed to & _8X f'irs _9X h&lf'Ems // PB a changed to & _0C h'un*@:D @@ -164,6 +164,7 @@ et ed $u her $u kun $u vel $u+ +da $u // conjunctions og V $u+ $pause // and @@ -204,7 +205,7 @@ dét de vi $u i _i $u+ mig maj $u // me -dig daj_| $u +dig daj $u dem $u ham $u hende $u @@ -259,7 +260,7 @@ f Ef g ge: h hO: _i i: -j joD +j jVD // PB changed from [o] k kO: l El m Em @@ -318,7 +319,6 @@ interface _^_EN image _^_EN joke _^_EN joystick _^_EN -junkie _^_EN laptop _^_EN level _^_EN login _^_EN @@ -2343,7 +2343,7 @@ dessin des'EN $alt dioxin $alt disciplin $alt doktrin $alt -(drive-in) drajv'in $alt +//(drive-in) drajv'in $alt dusin $alt endokrin $alt endorfin $alt @@ -5153,7 +5153,7 @@ banaliser $alt bandagere $alt banderolere $alt barbariser $alt -barber $alt +barbere $alt barder $alt barrier $alt barrikader $alt @@ -5178,7 +5178,7 @@ bonbonniere bVNbVNj'E:r $alt boniter $alt botaniser $alt braiser $alt -briketter $alt +brikettere $alt brillere $alt brochere $alt brodere $alt @@ -5549,7 +5549,7 @@ halver $alt harceler $alt harmoner $alt harmoniser $alt -harpuner $alt +harpunere $alt havarer $alt hektografer $alt herbariser $alt @@ -5668,7 +5668,7 @@ intriger $alt introducer $alt intuber $alt invader $alt -invalider $alt +invalidere $alt inventer $alt inverter $alt invester $alt @@ -6188,7 +6188,7 @@ præferer $alt præjudicer $alt prækvalificer $alt præluder $alt -præmier $alt +præmiere $alt prænumerer $alt præparer $alt præsenter $alt @@ -6490,7 +6490,7 @@ temperer $alt tender $alt teoretiser $alt termografer $alt -terrasser $alt +terrassere $alt terroriser $alt testamentere $alt testere $alt @@ -10298,23 +10298,24 @@ også Vs@ // also idet id'e // in so far as bleg blaj blegrød blajrWD +blegrøde blajrWD@ //blege blaj@ blegemiddel bl&#j@mid@l //blegansigt bl&#jansegt slags sl'ags // sort, type tre tr'e // the number 3 -barber bab'er // PB barber -barbere bab'eV // PB barbere -barberer bab'eV // PB barberer +//barber bAb'er // PB barber +//barbere bab'eV // PB barbere +//barberer bab'eV // PB barberer //barberes bab'eVs // PB barberes -barbererne bab'eVn@ // PB barberene -barberenes bab'eVn@s // PB barberenes +//barbererne bab'eVn@ // PB barberene +//barberenes bab'eVn@s // PB barberenes rejicere rejis'eV // PB should not be pronounced [raje] rejicerer rejis'eV // PB rejiceres rejis'eVs // PB rejicering rejis'eRiN // PB gele sjel'e // PB gele -géle sjel'e // PB géle +gelé sjel'e // PB gelé geleen sjel'e@-n // PB geleen geleer sjel'e3 // PB geleer geleens sjel'e@-ns // PB geleens @@ -10359,6 +10360,7 @@ shampu Sjambo // PB Danish pronunciation - oo has been replaced b (tour de force) tu:@d@||'fV:s // PB (al qaeda) al||k'ajda // PB (force majeure) fVrs||,ma'sjW:r // PB +(diner transportable) din'e|trANspVt'abl@ // PB (quiche lorraine) kiS||lor'E:n: (fait accompli) fEtakVmpl'i // PB wien v'i:n // PB Wien - the town of Vienna @@ -10404,6 +10406,8 @@ dna $abbrev sos $abbrev // PB the SOS signal pharm fA:rm? $hasdot // PB fx cand. pharm. phil fil/3 $hasdot // PB fx cand. phil. +bh $abbrev +(bh'er) b,e:h'O:V // Try to catch errors @@ -10471,6 +10475,7 @@ legenderne leg'EndVn3s (så længe) sV||l'EN3 (så må) sV||m'O (så har) sV||har +så sV $sentence $atstart (virkede så) v'irkeD@||sV (kom så) kVm||sV (koste med) kosd@||mED diff --git a/dictsource/da_rules b/dictsource/da_rules index 63cfc3bf..ee77a918 100755 --- a/dictsource/da_rules +++ b/dictsource/da_rules @@ -37,10 +37,12 @@ efter) a (b & // PB efterabe for) a (n & // foran for) a (nd A // PB forandre + for) a (nk A // PB forankre // PB general rule: [a] after r followed by sp/st/sk r) a (L08 a // PB rask // PB general rule: [&:] after m/n L09) a &: // mave + gn) av (pot Aw // PB gnavpotte torn) ad (o '&d // PB stressed kn) a (p A // PB manchetknap sn) a (p a // PB snappe @@ -51,9 +53,11 @@ // PB general rule: [a] after l before n l) a (n & // land l) an (ce AN // PB lancere + pl) an (ch AN // PB planche // PB words in da_list with final -ance &) ance ($p_alt 'ANs@ // balance, romance &) ance (+ ANs@ // PB unstressed after a syllable - ferieromance + &) ance (re$p_alt ANs'e // PB avancere // PB general rule: [a] after consonant before m C) a (m a // PB ham, gamle, lam C) a (mi & // PB vitamin @@ -160,6 +164,7 @@ C) a (vn A // favn, savn // PB general rule: [a] after kl before consonant kl) a (L06 a // PB klap + a (k a // akrobat a (ngC A // PB angst b) a (L06 A // PB baptist a (mp %A // PB ampul @@ -168,10 +173,12 @@ _okt) a (v '& // stressed _konk) a (v '& // stressed _det) a (lje '& // PB stressed + nev) a (da '& // PB _pol) a (k 'a // PB stressed polak _kos) a (k 'a // PB stressed - kosak _milli) a (r 'A // PB stressed - milliard _trilli) a (r 'A // PB stressed - trilliard + _sejl) a (ds '& // PB stressed L08) av (C Au // stavn st) av (nin &v // PB stavning h) av (_ & // PB hav - problem with the noun "hav" [hAu] @@ -179,15 +186,20 @@ _trilli) a (r 'A // PB stressed - trilliard h) av (C Au // PB havbund h) av (over Au // PB havoverfladen h) a (vn A // PB havn + h) ag (l Au // PB hav) a (nna '& // PB Havanna + h) a (ck & // PB hacke color) ado 'Ado // PB US state _) av (_ Au // PB av C) a (k a // PB makværk + C) a (x a // PB fax + st) a (ki & // PB stakit m) a (ka & // PN makaber C) a (ck a // PB tackle s) a (x a // PB saxofon l) a (kA & // PB lakune @l) a (g &j // PB nederlag + gr) ape Eb // PB grapefrugt // PB stressed a in final -al in $alt words in da_list &) al ($p_alt+ ''&l // the double '' enforces primary stress - fatal, monumental @@ -285,6 +297,8 @@ _vatik) a (n '& // PB Vatikanet al) a (sk '& // PB Alaska _radio) a (kti 'A // PB stressed - radioaktiv _impres) a (rio 'A // PB stressed + _rab) a (rber 'A // PB stressed + _ar) a (ber 'A // PB stressed bl) a (d & // PB blad h) a (n & // PB han j) a & // PB ja @@ -326,7 +340,9 @@ interf) a (ce ei // PB interface C) a (ft A // PB haft, saft sl) a (L06 a // PB slap ai (K aj + mount) ai (n e // PB mountain cockt) ail Ejl // PB + cont) ai (n 'Ej // PB container d) ay Ej // PB holyday, Holliday aise 'E:s@ // PB mayonnaise k) ai (n &|'i: // PB kokain @@ -339,7 +355,8 @@ interf) a (ce ei // PB interface p) a (pi & // PB papir L09) a (l &: // PB male L09) a (ld & // PB knald - _) a (ld a // PB aldrig, alder + _) a (ldr a // PB aldrig + a (ld & // PB alder b) a (lkan &: // PB Balkan over) a (lt '& // PB stressed a in 'overalt' s) a (m a // PB sammen @@ -366,6 +383,7 @@ interf) a (ce ei // PB interface an (cien aN L06) a (nd & // PB pande a (ndre A // PB andre + a (p a // PB apotek L06) a (nk a // PB banke @g) a (ng 'a // PB stressed a in words ending with -gang - engang, enegang h) a (nk a // PB hank @@ -375,9 +393,7 @@ restaur) ant 'AN // PB added stress t) a (nk A // PB tankstation t) a (x a // PB taxa kålr) a (bi 'A // PB kålrabi - stressed a - au (+ aw // PB auto, autoritet - e) au 'o // PB bureau, niveau - nive) au o + au (++ aw // PB auto, autoritet _biss) au 'a:w // PB Guinea-Bissau s) au (ce O: // PB sauce, bearnaisesauce ch) au (f o @@ -467,8 +483,10 @@ amsterd) a (m 'a // PB sl) ag (side Au // PB slagside sp) ag (ett &g' // PB spagetti sp) ag (hett &g' // PB spaghetti + sp) ag (num Au // PB r) ag (e+ Au // PB drage, rage C) age (+ &:j@ // PB tage, bage, kage + fl) ager (mus AuV // PB C) ager (_+ &:jV // PB tager, bager, kager l) agd (e &:j // PB lagde g) ager (e+ &S'e // PB gagere @@ -518,6 +536,7 @@ _trienn) ale '&:l@ b b bb b + ko) bb (er w // PB b (il 'b beagle bi:g@l //PB beagle - dog bloody blVdi // PB @@ -633,7 +652,7 @@ _trienn) ale '&:l@ cambridge kejmbRidZ // PB connecticut kVn'etikVd // PB carlisle kAlajl // PB - china tjajn& + china tjajn& // PB .group d @@ -641,14 +660,17 @@ _trienn) ale '&:l@ A) de (_ D3 A) d D // PB way too broad? + d (uk d // PB produkt a) d D // PB ad, udenad - dangerously broad a) de (Cr D3 // PB badedragt - not testet y) de D3 // PB brydehold Coe) de @-D // PB boede @) d (elt d // PB udelt, tildelt l) d // PB omit d after l - hold, skjold + l) d (et // PB spjældet d (ør d // PB bildør d (et d // PB metaldetektor + d (ing d // PB holdingfirma l) d (rig d // PB aldrig l) d (ig d // PB skyldig bal) de l3 // PB silent d - balde @@ -672,6 +694,7 @@ stikor) d // PB exception - silent d in 'stikord' A) d (C D A) dd D // PB hedder - "er" removed by &) er (_NS2 [V] A) d (s@ // PB fødsel - deleted 30+ rules, this one does the work + ræ) d (sel D // PB me) d (+ D // PB medspiller A) ds (_ s // PB silent d - palads, trods ø) d (L08+ D // PB nødstop @@ -707,7 +730,7 @@ stikor) d // PB exception - silent d in 'stikord' kla) dd (e D mi) dd (el D mu) dder DV - rø) dd (er D + rø) dder DV kry) dd (er D dd (et D bu) dd (ing D @@ -730,7 +753,7 @@ stikor) d // PB exception - silent d in 'stikord' gui) de (n de ver) d (en d vi) d (er D - gui) de (r de + gui) der dV lu) d (ere d A) d (es D ær) d (es d @@ -779,6 +802,8 @@ stikor) d // PB exception - silent d in 'stikord' _) doc (_ dVk // PB Doc - name dodge dVdZ // PB city daiquiri d&k@ri // PB drink + _) duke dZu:k // PB Duke - name + _) drive dRAjv // PB drive-in .group é // added by PB é 'e // idé, entré @@ -798,6 +823,8 @@ stikor) d // PB exception - silent d in 'stikord' _koll) e (ga 'e // PB stressed _koll) eg (e 'ej // PB stressed kolleger r) e E // PB general rule: [E] after r + klatr) e V // PB + gr) e (s & // PB kongres // dr) e (C@ @ // PP sladresøster - not tested r) e (vn &# // PB revne r) e (kto &# // PB rektor @@ -824,6 +851,7 @@ stikor) d // PB exception - silent d in 'stikord' rn) e (d+ e // PB derned an) e (r @ // PB anerkende L09) e (de E // nede, nederlag + mån) e (d @ // PB L09) e (t e // metal L09) e (l E // mellem _m) e (l_ e // PB @@ -841,6 +869,7 @@ stikor) d // PB exception - silent d in 'stikord' ri) e 3 // PB ferie _a) e (_ 3 // PB ae ød) e 3 // PB øde + god) e @ // PB pl) e (men 3 // PB supplement øbl) e (m 3 // PB møblement hvab) e (har_ 3 // PB hvabehar @@ -852,7 +881,7 @@ stikor) d // PB exception - silent d in 'stikord' en) e @ // PB ene, eneste en) e (rgi E // PB br) e (L09 & // PB bremse - sn) e (K e? // PB sne, snebold + sn) e (K e // PB sne, snebold sn) e (rp E // PB snerpet sn) ed (k e e // PB silent d - snedker _s) e (_ e? // PB se @@ -894,6 +923,7 @@ _kongr) e (s '& // PB kongres - stressed but not after a syllable _rødb) e (de 'e // PB stressed e in 'rødbede' _aller) e (de_ E // PB allerede - otherwise the E is changed by another rule _im) e (ns+ 'e // PB stressed + _magn) e (t 'e // PB stressed lar) e (do 'e // PB // PB final -em - stressed e @@ -912,13 +942,14 @@ _myxød) e (m 'e _syst) e (m 'e _teor) e (m 'e _ød) e (m 'e + el) e (ndig E // PB møgelendig - steressed with $alt rule leb) e (ndig 'E // PB steressed with $alt rule _ball) e (t@ 'E // PB balletdanser _en_ball) e (t 'E // PB lini) e @ // PB changed from [e] to [@] ft) e (r @ // PB oftere - r) e (nd a // PB rend + _r) e (nd+ a // PB rend @st) e (n+ e: // øjesten, skorstene h) e (n_+ e // hen carst) e (n @ @@ -986,7 +1017,8 @@ _intell) e (kt 'E _proj) e (kt 'E _prosp) e (kt 'E _præf) e (kt 'E - resp) e (kt 'E + _resp) e (kt 'E + resp) e (ktabel E _sociol) e (kt 'E _subj) e (kt 'E _susp) e (kt 'E @@ -1022,6 +1054,8 @@ _sakram) e (nte 'e k) ende (_ E-n@ // genkende, kende, anerkende sv) ende (_ E-n@ // PB not a -ende suffix - svende henv) ende (_ E-n@ // PB + anv) ende (_ E-n@ // PB + røvr) ende (_ a-n@ // PB røvrende L08) e (gt e // PB stegt L08) e (g a // PB steg, spegepølse @@ -1037,7 +1071,7 @@ _sakram) e (nte 'e r) eg (er Eg // PB e=> E eg (n aj // PB regn, tegning, lege underl) eg ej // PB underlegen - str) eg aj // PB stregen + str) eg (+ aj // PB stregen p) eg aj // PB pegefinger _) ege (_ e:j@ // PB added _ - ege(træer) _) ege (træ e:j@ // PB added _ - egetræe @@ -1072,6 +1106,7 @@ _offic) e (_ // office (officepakke) Ad) en (@ @-n // udenlandsk, udenad Ad) en (t en // PB identificere &) ene (_ @-n@ + gr) ene En@ // PB grene ucc) es 'e nog) et (_ D // PB noget ir) e (n 'e @@ -1083,6 +1118,8 @@ _offic) e (_ // office (officepakke) forur) e (ne 'e // PB stressed - forurene _terap) eut 'Wwd // PB stressed _torp) e (do 'e // PB stressed + _cel) e (ber 'e // PB stressed + // PB a few words with final -es - stressed e abc) e (s 'e cypr) e (s '& @@ -1093,6 +1130,7 @@ _terap) eut 'Wwd // PB stressed ompet) en (ce aN ress) en (timent aN // PB ressentiment m) edie 'edj3 // medie, kommedie + m) edier 'edjV // medier, kommedier inds) e e // PB indse inds) e (r_ e // PB indser etagere et&S'E:R // PB @@ -1102,10 +1140,12 @@ _terap) eut 'Wwd // PB stressed eyeliner ajlajnV // PB ey i // PB jockey eiffel ajf3l // PB Eiffeltårnet + ef) eu Vj // PB plant _) earl W:l/2 // PB Earl _) earp W:b // PB name _) east i:sd // PB Eastwood eu (rop Wu // PB Europa + eau 'o // PB bureau, niveau _t) e (_ e // PB te kin) e (s 'e // PB kineser @@ -1131,9 +1171,13 @@ _terap) eut 'Wwd // PB stressed &) el (l$p_alt ''E - modellen - only one l _) el el // elkedel +muskat) el ''El // PB el (sk+ el // PB naturelsker +intellektu) el el // // PB bestandd) el el // PB + halvd) el el // PB d) el (t+ el // PB tildelt + lob) el (ia 'el // PB d) el (A+ el // PB dele, omdele edd) el l/2 // PB seddel medd) el del // PB meddel @@ -1218,17 +1262,18 @@ reserved) el el sard) el 'el s) el (e el // sikkerhedssele sigtem) el el - skalp) el 'el +_skalp) el 'el sport) el 'el stikked) el el såv) el 'el - tab) el 'el + _tab) el 'el + tab) el el +respektab) el @l // PB tarant) el 'el univers) el 'el _frikad) el (l 'El // PB stressed - frikadelle frikad) el (l El // PB verdensd) el el -// t) el (+ el @) el (øs el // PB mageløs el (eg+ el // PB juleleg @@ -1245,6 +1290,7 @@ verdensd) el el &g) en (st en // PB genstand &g) en (kend en // PB genkende &g) enn (em en // ugennemskuelig +kuglep) en En // PB ord) en @n anci) enn EN // anciennitet retskaff) en @n @@ -1269,16 +1315,18 @@ _resid) en (s 'en // PB residens resid) en (s en // PB residens _acetyl) en 'en // PB _influ) en (za 'En // PB +skizofr) en 'En // PB + s) en (sib AN // PB sensibel _rev) en (che 'An // PB stressed rev) en (che 'An // PB not stressed after a syllable // PB $alt words with final -ent in da_list - stressed e - &) ent ($p_alt+ 'end // student - &) ent (&$p_alt+ 'end // student - &r) ent ($p_alt+ '&#nd // omtrent - &) ent (ur$p_alt+ end' // agentur - stressed u - &) ent (alsk$p_alt+ end' // + "alsk" - stressed a - orientalsk + &) ent ($p_alt+ 'ent // student + &) ent (&$p_alt+ 'ent // student + &r) ent ($p_alt+ '&#nt // omtrent + &) ent (ur$p_alt+ ent' // agentur - stressed u + &) ent (alsk$p_alt+ ent' // + "alsk" - stressed a - orientalsk // exceptions acc) ent (+ AN // PB ev) ent (A+ ent // PB eventyr, eventuel @@ -1289,6 +1337,7 @@ _influ) en (za 'En // PB // common affix -ender &) ender (_ EnV // anliggender, foretagender + &r) ender (_ anV // røvrender .group er // PB noun suffix -er (perler - pearls), -ers (perlers - pearls') -erne (perlerne - the pearls), -ernes (perlernes - the pearls') @@ -1299,9 +1348,9 @@ _influ) en (za 'En // PB &) ere (_ 3V // elskere &) eren (_ @r3n // elskeren &) erens (_ @r3ns // elskerens - &) ers (_S3 Vs // elskers + &) ers (_ Vs // elskers &) erne (_ Vn@ // elskerne - &) ernes (_S5 Vn@s // elskernes + &) ernes (_ Vn@s // elskernes &) erste (_ Vst@ //midterste &) ert (_ Vt // lummert @@ -1317,7 +1366,9 @@ _influ) en (za 'En // PB vurd) ere (_ er3 // overvurdere ng) er (_++ V // unger revolv) er V // PB + skid) er Vr // PB all) er V // PB allersidst + all) er (g er // PB allergisk j) er (n+ Er // jern j) er (ne++ Er // PB stjerne bunk) er V // PB not a -er suffix @@ -1362,6 +1413,8 @@ _perif) er 'er // PB stressed &) er ($p_alt++ ''er // PB stressed - repeter // exceptions fing) er (en VR // fingeren - clsashes with 'fing'ere' + _barb) er 'er // PB + lev) er (eg+ @r // PB leveregel // PB stressed e in words with -ering (1.100) in da_ list - likvidering &) ering ($p_alt ''ereN @@ -1389,6 +1442,8 @@ reserv) ert 'ert C) er (At V // PB probably way too broad - offeret c) er (e+ e // PB velkvalificeret + v) er (et er // PB kultiverret + t) er (et er // PB citeret bl) er (e er // PB genetablere desp) er (at 3R // PB desperat d) er (fra er // PB derfra @@ -1421,7 +1476,8 @@ reserv) ert 'ert _inf) er (no 'Er // PB inferno st) er (et r // PB orkesteret t) er (C V // PB lattermild - t) er (m Er // PB terminal + int) er (n+ 'Er // PB + t) er (min Er // PB terminal t) er (p Er // PB terpentin, terpe t) er (mo Er // PB termometer t) er (r E // PB terror @@ -1448,15 +1504,18 @@ L06L06) er V // PB klipper _l) er (_++ er // PB ler v) er (r_ er // PB levere th) er_ V // Luther + gt) er V // PB agter hj) er Er // PB hjerne stj) er+ Er // PB stjerne + øl) er V // PB brøler t) erræn &r'&#N // PB terræn _g) er (ne_+ Er // PB gerne j) er (g Er // PB bjerg @m) er (sk V // PB romersk ob) er (st V // PB + rooms) ervice Wvis // PB + d) erby A:bi // PB _all) erede (_ @reD@ -// &) eren (s_ 3r3n .group ed // PB verb suffix - ede (elskede - lovede) @@ -1473,6 +1532,7 @@ L06L06) er V // PB klipper _fr) ede (_+ ED@ // PB frede vr) ede (_+ ED@ // PB vrede ler) ede (_+ ED@ // PB fuglerede + b) ede (_+ eD@ // PB embede hindr) ede (_ 3D@ // PB forhindrede år) ede (_+ 3D@ // PB sårede odr) ede (_+ 3D@ // PB fodrede @@ -1490,9 +1550,13 @@ L06L06) er V // PB klipper // PB exceptions: not a 'et suffix _sk) et et // PB sket + el) et (+ et // PB pærelet + geb) et (+ 'et // PB s) et (_+ et // PB set it) et (_+ 'et // aktivitet _rak) et 'Et // PB raket + _brik) et 'Et // PB + brik) et Et // PB _toil) et 'Et // PB toilet, toilette _kok) et 'Et // PB stressed - koketteri, koket _kvint) et 'Et // PB @@ -1502,7 +1566,10 @@ _kvart) et 'Et // PB _tromp) et 'et // PB stressed tromp) et et // PB _klarin) et 'et // PB +_servi) et 'et // PB + servi) et et // PB klarin) et et // PB + _plan) et 'et // PB meg) et (+ et // PB not a suffix om) et (++ 'et // PB kilometer, kometer r) et (_++ &#t // ret @@ -1519,6 +1586,7 @@ klarin) et et // PB _bill) ett 'et // PB stressed - only one t _kask) et 'et // PB stressed _bajon) et 'Et // PB stressed +_tabur) et (+ '&#t // PB bajon) et Et // PB udsl) et et // PB udslet intern) et Et // PB @@ -1622,6 +1690,7 @@ _vinaigr) ette '&t@ g g gg (e g // lægge ru) g // PB rug, rugmel + fru) g (t g // PB æ) g (ernA j // PB lægerne o) g (ernA // PB nekrologerne sti) gmata gm'&:t& // PB stressed @@ -1639,6 +1708,7 @@ _vinaigr) ette '&t@ al) geriet Sj3r'i@d // PB Algeriet al) gerier Sj'iV // PB Algeriet al) gerisk Sj'i:rsg + guinea gin'e& // PB ødi) g (t_ // nødigt i) g (i g g (entl j // PB egentlig @@ -1667,6 +1737,8 @@ _vinaigr) ette '&t@ spur) gte t@ // PB silent g - spurgte n) gæ gE Co) g w // PB sprog, tog, toge + vo) g (t g // PB bevogtning + surro) g (at g // PB to) g (a g // PB exception toga to) g (o g // PB exception Togo to) g (t g // PB exception togt @@ -1676,6 +1748,7 @@ _vinaigr) ette '&t@ o) g (raf g // autograf o) g (n u // PB g => u - vogn, sogn r) g (_ w + ær) g w // PB bjærge r) g (er_ u // PB herberger u) g (e : u) g (ene S // PB ugenert @@ -1737,6 +1810,7 @@ _vinaigr) ette '&t@ å) g u // PB åg, åge ni) gger gV // PB nigger ne) g (_ j // PB neg, juleneg + ve) g (en j // PB undvegen ne) ger (++ V // PB neger te) g (ori g // kategori gear gir // PB gear, bakgear @@ -1751,6 +1825,7 @@ _vinaigr) ette '&t@ geneve Sen'E:v // PB genève Sen'E:v // PB _) gudskelov (_ gusg@lVu // PB + georgia dZV:dZj& .group ge @@ -1804,6 +1879,7 @@ _korte) ge =Se hitech hajtek // PB homer hom'er // PB Homer - Greek hawaii h&w'a:ji // PB + heather hEDV // PB .group i i i // PB i: => i - made a lot of rules redundant @@ -1841,12 +1917,17 @@ _princ) i (p 'i // PB stressed _alb) i (no 'i // PB stressed n) ij (megen aj // PB Nijmegen n) i (gg e // PB nigger + n) i (p e // PB nip, nippe n) i (ss e // PB nisse skr) i (pt 'e? // PB stressed - manuskript r) i (ft e // PB skrift, rift, drift v) i (ft e // PB vifte + d) i (sk e // PB købmandsdisk + d) i (skett i // PB diskette + d) i (sku i // PB diskutere kr) i (cket e // PB f) i (sk e // PB + gr) i (m e // PB l) i (lla e // PB kv) i (st e // PB @@ -1856,7 +1937,7 @@ _princ) i (p 'i // PB stressed // therefore u- is removed in group u before the word is translated // since the u+list words keep the stress. // Any other syllable before the word reverts to normal stress - &) ig ($p_alt+ =i // velærværdig, gudvelbehagelig + &) ig ($p_alt++ =i // velærværdig, gudvelbehagelig ige i:@ // PB deleted [(_] - pige, pigen, stige, sige iger i:V // PB piger @@ -1864,7 +1945,7 @@ _princ) i (p 'i // PB stressed kr) igen i:3n // PB krigen dil) igen (ce iS'AN // PB diligence kr) igs is - d) ige (r ig'e // PB redigere + ed) ige (r ig'e // PB redigere rr) ige (r ig'e // PB korrigere nav) ige (r ig'e // PB navigere dir) ige (r ig'e // PB dirigere @@ -1872,16 +1953,11 @@ intell) ige (n ig'e // PB intelligent fr) igea (r igi // PB frigear _) ige (n ig'E // PB igen rol) ige iE // PB rolige, beroligende + værd) ig i // PB silent g idel i:D@l // PB idel israel isrA:l // PB Israel vend) ige i:3 // PB nødvendige iew j'u -// i (nK i -// i (ng e // PB Inge, ingen -// sv) i (ng e // PB sving -// v) i (nk e // PB vinkel -// v) i (ng e // PB vinge -// s) i (nk e // PB sinke i (nL11 e //PB blinke, sinke, vinge, sving v) i (nkæld i // PB vinkælder s) i (d e // PB sidde @@ -1894,19 +1970,25 @@ intell) ige (n ig'e // PB intelligent dr) i (l e // PB drille br) i (lle e // PB briller i (dt e // PB midt, lidt + _sol) i (d 'i // PB solid b) i (dt i // PB bidt + b) i (tter e // PB sm) i (dt i // PB sk) i (dt i // PB skidt + sk) i (mm e // PB skimmel mask) i (n 'i // PB stressed - maskinskrive h) i (d i // PB hidtil b) i (lled e / PB billede kr) i (dt i // PB skridt, kridt v) i (dt i // PB vidt + v) i (sse e // PB visse, forvisse forv) i (s i // PB forvise l) i (st e // PB liste i (nd e // PB ind i (nt e // PB intakt f) i (nt_ i // PB + v) i (mp e // PB vimpel + h) i (m e // PB himmel am) i (go 'i // PB amigo magas) i 'i // PB magasin _kap) i (tel 'i // PB stressed @@ -1927,6 +2009,7 @@ intell) ige (n ig'e // PB intelligent // PB words with final -ik in da_list - stressed i &) ik ($p_alt ''ik // romantik + &) ik (er$p_alt =ik // romantiker &r) ik ($p_alt ''ek // fabrik &) ik (k$p_alt ''i // antikke - only one k &r) ik (k$p_alt ''e // fabrikker - only one k @@ -1971,14 +2054,16 @@ _konfl) i (kt 'i // PB stressed _just) i (ts 'i // PB _kul) i (ss 'i // PB kulisse i (nn e - i (mK e +// i (mK e l) i (m i // PB lim gl) i (m e // PB glimt, glimrende i (kK e // PB ikke, pik + lin) i (k i // PB klinik @t) i (k i // PB ferieromantik sk) i (k i // PB skikkelse _art) i (k 'i // PB stressed artikkel m) i (k i // PB mikroskop +gudhjælpem) ig aj // PB g) i (k+ i // PB begik i (x e // PB fixe m) i (ks e // PB mikse @@ -1987,10 +2072,11 @@ _konfl) i (kt 'i // PB stressed _g) i (k_ i // PB i (k@ i // PB antikvar v) i (k i // PB kvik - v) i (kl e // OB vikle + v) i (kl e // PB vikle k) i (kC+ i // PB kiks, kikkert l) i (kv i // PB likvid fl) i (C i // PB flid + fl) ig i // PB høflig r) ikk (+ ek // PB skiderikker t) i (me i: // PB time s) i (dA+ i: // PB siden @@ -2004,16 +2090,21 @@ _konfl) i (kt 'i // PB stressed st) i (k e // PB stik spl) i (t e // PB splitte d) i (gt e // PB heltedigt + sned) i (g i // PB ld) ig i // PB heldig l) i (p e // PB slippe r) i (k e // PB drik, skiderik - l) i (dt e // PB lidt + br) i (ke i // PB briket + _l) i (dt e // PB lidt + bl) i (dt i // PB L08) i (l_ e // PB spil, skil st) i (l_ i // PB stil + best) i (l e // PB L08) i (lt e // PB skilt, adskilt spl) i (n e // PB splint L08) i (ll e // PB spille - problem with the verb (ud)spile/(ud)spil[sbil] L08) i (ld i // PB spilde + L08) i (ls e // PB skilsmisse sk) i (ldr e // PB skildring m) i (dda e // PB middag m) i (ste e // PB miste @@ -2022,8 +2113,7 @@ _konfl) i (kt 'i // PB stressed L08) i (L06 i // PB skib tv) i (v i // PB tvivl v) i (gt e // PB vigtig - ev) i (g i // PB evigt, evindelig - værd) ig i // PB silent g + ev) ig i // PB evigt, evindelig v) i (l_+ e // PB vil hv) i (l+ i // PB hvil hv) i (lk+ e // PB hvilken @@ -2064,7 +2154,7 @@ revers) i (bel 'i // PB stressed suggest) i (bel 'i // PB stressed vis) i (bel 'i // PB stressed _medl) i (denhed 'i // PB medlidenhed - stressed - _omkr) i (ng 'e? // PB stressed e in 'omkring' + _omkr) i (ng 'e // PB stressed e in 'omkring' kn) i (p e? // PB knippel kn) i (v i // PB kniv _min) i (ster_ 'i // PB minister - stressed i @@ -2074,6 +2164,7 @@ suggest) i (bel 'i // PB stressed d) ie (sel i // PB dieselolie k) io (sk jV // PB kiosk tr) i (ck e // PB trick + r) i (bs e // PB _franc) i (sco 'i // PB // PB put stress on the syllable before final 'ium' - words in da_list @@ -2088,6 +2179,7 @@ _franc) i (sco 'i // PB // PB stressed i in words with final -mi in da_list &m) i ($p_alt ''i // økonomi + &m) i (sk$p_alt =i // stress on the previous syllable - økonomisk // PB stressed i in words with final -il in da_list &) il ($p_alt 'il // pædofil @@ -2107,6 +2199,7 @@ _rapsod) i 'i // PB rapsodi _abbed) i 'i // PB _ortopæd) i 'i // PB ortopædi swah) i (li 'i // PB stressed i +_hæmor) i (d 'i // PB hæmorider // stressed final i _akromegal) i 'i _anomal) i 'i @@ -2151,6 +2244,7 @@ _terap) i 'i &s) i ($p_alt 'i // fantasi, afasi v) i (sk e // PB viskelæder + v) i (sne e // PB l) i (e j r) i (gt e // PB rigtigt l) ig (g+ e // PB ligge - only one g @@ -2178,6 +2272,7 @@ _terap) i 'i .group is // PB words ending with -ist in da_list with $alt - stressed i &) ist ($p_alt ''ist // bassist + &) ist (ik$p_altS4 ist''ik // journalistik .group it // PB words with final -it - stressed i @@ -2222,8 +2317,10 @@ _sport) iv 'iw j (ohn dZ joe dZOu jackie dZ&ki // PB + junkie dZVnki // PB jo (ckey dZV // PB _) j (im_ dZ // PB + jimmy dZemi // PB _) j (eff dZ // PB j (azz dZ // PB je (t dZE // PB jetfly @@ -2259,6 +2356,7 @@ _sport) iv 'iw kk k kanterel kant@r'&#l // PB kumquat kVmkwVd // PB + kakerlak kak@l'ak // PB &) kvarter kvarter // PB kommandokvarter s) k g _spe) k (takk ' // silent k, stresssed a - spektakkel @@ -2288,6 +2386,7 @@ _sport) iv 'iw f) l l/2 // PB add a bit more to l after f b) l l/2 // PB add a bit more to l after b &) ld (er l // PB silent d - anmelder + sø) lv l // PB silent v se) lv l // PB selv, selvfølgelig, selvhjælp se) lv (e lv // PB selve, selvet bo) ld ld @@ -2298,7 +2397,7 @@ _sport) iv 'iw lotion l3uSjn // PB håndlotion lorraine loRE:n // PB name he) lg (e lj // PB Helge, helgen - levere lev'eV // PB +// levere lev'eV // PB _) lee (_ li: // PB the name Lee @) levere leveV // PB ley li // PB volley @@ -2314,6 +2413,7 @@ _sport) iv 'iw _) mere (_ mer // PB mere matine m&tin'e // PB _) meget (_ ma:j@D // PB meget + _) megen (_ ma:j@n // PB megen _) medea med'E:& // PB Medea montgomery mVndg'Vmri // PB mareridt mA:@rit // PB @@ -2330,6 +2430,7 @@ _sport) iv 'iw madero _^_ES // PB money mVni // PB makeup mEjk'Vb // PB + madagaskar m&d&g'&sk& // PB .group me // PB General rule for words with -ment @@ -2411,6 +2512,7 @@ _bombarde) ment m'AN // PB bombardement // PB words with final -ni in da_list - stressed i &) ni ($p_alt+ 'ni // ironi &) ni (sk$p_alt+ =ni // ironisk - stress on pervious syllable before sk +_harmo) nika =nik& // PB stressed o // PB nouns with final -ner ("er" has been removed) in da_list // stressed previous syllable @@ -2433,6 +2535,7 @@ _bombarde) ment m'AN // PB bombardement _) naiv n&'iv // PB naiv @) naiv n&iv // PB bundnaiv _) new (_ %nju // PB + newzealand njus'el&n // PB .group nd // PB general rule: nd = [n] after a vowel @@ -2442,11 +2545,16 @@ _bombarde) ment m'AN // PB bombardement A) nd (el nd // PB andel, ejendel e) nd (elig n // PB endelig ve) ndig ndi // PB udvendig + å) nd (eli n // PB åndelig ha) nd (el n // PB + y) ndig ndi // PB ke) nd (el nd // PB kendelse + spe) nd (er nd // PB spendere + svi) nd (el n // PB nd (om nd // PB ejendom nd (ød nd // PB stendød bi) nd (e n // PB forbindelse + mi) nd (e n // PB mindelund u) nde (l n // PB silent de - misundelig ble) nd (e nd // PB blender ba) nd (it nd // PB bandit @@ -2541,19 +2649,24 @@ elektr) o (de 'o peri) o (de 'o oo u: //PB English words like 'pool' + h) ood u:d // PB Robin Hood + r) o (bin V // PB k) oor (d oV:? // PB koordinat _biot) o (p 'o // PB stressed _isot) o (p 'o // PB stressed o (L06 V // PN op, opdrage, obstruere + o (pi o // PB opium + _t) o (bak o' // PB tobak vide) o o // PB videobånd gl) o o // PB global - kn) o (b o // PB - br) o (ccoli V // PB + kn) o (L06 o // PB knob, knop + h) o (lding Ou // PB holdingselskab + br) occ (oli Vk // PB helik) o (pt 'V // PB stressed - helikopter p) o (pu o // PB populær p) o (t V // PB potte d) o (nald V // PB name - p) o (tA o // PB potage + p) o (tag o // PB potage o (per o // PB opera sk) o o // PB skopudser _sk) o (d V // PB skod @@ -2570,7 +2683,9 @@ elektr) o (de 'o r) o (L06 o // PB problem pr) o (p V // PB blodprop kr) o (p V // PB - gr) o (g V // PB groggy + gr) ogg Vg // PB groggy + gr) og Vg // PB grog + k) og (t Vg // PB hvalr) o (s V // PB _eur) o (pa 'o // PB stressed dr) o (p V // PB droppe @@ -2581,6 +2696,7 @@ elektr) o (de 'o Ca) o (s V // PB kaos Laos r) o (ma o // PB romantik org (+ V:w // PB sorg, morgen, Norge + ge) org (ine og // PB o (rga+ V // PB organ r) or (g oR // PB rorgænger kont) o (r 'o // PB kontor - stressed @@ -2588,6 +2704,7 @@ korrid) o (r 'o // PB labrad) o (r 'V // PB mete) o (r 'o // PB matad) o (r 'o // PN + sam) o (a 'o // PB katastr) o (fe 'o: // PB katastrofe lit) o (te 'o: // PB stressed en) o (rm 'V // PB stressed @@ -2613,13 +2730,17 @@ _horis) o (n 'V // PB horisont kan) o (n o // PB not stressed after a syllable o (dds V: // PB odds o (sse V // PB tosse, nosse + m) o (sset o // PB j) o (b V // PB job mon) o (k 'V // PB monokel - stressed ov (e+ Vu // PB over, oven + t) ov (er ov // PB tatovere k) ov (end ov // PB kovending ov (ærn+ ov // autoværn h) ov (+ Vu // hov, sove ov (+ Vw // PB sjov, lov, skov + o (vi+ o // PB pseudovidenskabelig + tr) o (v o // PB troværdig sk) ov (tur Vw // PB l) ov (_mig_ ow // PB from the verb "at love" ov (s_+ Vw // PB sjovs, lovs, skovs @@ -2629,8 +2750,10 @@ _horis) o (n 'V // PB horisont ov (p Vw // PB lovprise v) ov (e Ov // PB vove o (fC V // PB ofte + skiz) o (fren o // PB n) ov (++ ov // PB nova, november _C) o (k 'V // PB beginning with 1 consonant followed by o and k: sok, nok, kok + k) o (kos o // PB p) o (ka o // PB pokal p) o (ker o // PB bet) on VN // PB betonen @@ -2641,6 +2764,8 @@ _horis) o (n 'V // PB horisont o (mf V // PB omformulere _m) o (rt V // PB mortadel o (k V // PB okker, lok + kr) o (k o // PB krokus + v) o (ke o // PB provokere r) o (ke o // PB neurokemi o (ktob %o // PB stressed next syllable - oktober fr) o o // PB frokost @@ -2648,6 +2773,7 @@ _horis) o (n 'V // PB horisont f) o (kA o // PB fokus, fokal o (ka o // PB lokal, polal o (rk V // PB orke orkester + f) o (s V // PB fosfat g) o (dt V // PB godt, godte k) or (p V: // PB korps k) or (pi or // PB korpige @@ -2678,6 +2804,7 @@ _horis) o (n 'V // PB horisont k) ors V:s // PB kors, korsage c) o (rs V // PB corsage k) o (lL06 V // PB kolbe + k) o (gl V // PB kogle bistr) o 'o // PB stressed o in 'bistro' er) o (b 'o // PB erobre - stressed o _er) o (t 'o // PB erot - stressed o @@ -2687,7 +2814,7 @@ _horis) o (n 'V // PB horisont _metad) o (n 'o PB stressed ang) o (la 'o // PB stressed L09) o (va o // PB nova, renovation - pr) o (vA+ ov // PB provokere + pr) o (vA+ o // PB provokere h) oved o:@D // PB hoved tr) o o // PB tro kn) o (tt V // PB knotten @@ -2699,9 +2826,12 @@ _metad) o (n 'o PB stressed p) olish VliS // PB møbelpolish tr) o (kl V // PB trokle tr) o (p V // PB trop + tr) o (po o // PB antropolog tr) o (pi o // PB tropisk tr) o (pe o // PB troperne t) or V // PB faktor + t) or (n or // PB + t) or (ny V // PB tornyster t) or (e o // PB faktorer t) or (en V // PB faktoren, doktoren oy (+ 'Vj // PB destroyer, royal, loyal @@ -2710,6 +2840,7 @@ _metad) o (n 'o PB stressed st) o (r+ o // PB stor p) o (r O // PB porno _m) o (C o // PB m + o + consonant: mor, mord, + m) ontana Vnt'&n& // PB m) o (ms V // PB m) o (kk V // PB mokke, mokka m) o (nitor V // PB @@ -2743,6 +2874,8 @@ _metad) o (n 'o PB stressed Xl) o (m V // PB lom, lomme, blomst pl) o (m o // PB exception from the rule above (Xl) o (m) - plombe o (m V // PB om, ensom VERY BROAD + kr) o (m o // PB krom + o (mi o // PB sodomi f) o (m o // PB nymfoman fot) o o // PB r) o (mA o // PB romer @@ -2768,15 +2901,20 @@ _metad) o (n 'o PB stressed o (se o: // PB rose, skose, pose h) o (spice V // PB hospice C) o (st V // PB post, moster + komp) o (st 'V // PB stressed r) o (st o // PB rost + pr) o (sta V // PB prostata fr) o (st V // PB - f) oged o:@D // PB silent g + f) oged o:@D // PB silent g k) o (sC V // PB kosmisk + kok) o (s o // PB kokosnød k) o (st o // PB kost (broom) Problem with kost = food k) o (ste V // PB verb - koste = brooms will be mispronounced + k) o (stbar V // PB + bek) o (st V // OB bekostning frok) o (st V // PB omk) o (st V // PB omkostninger - pr) o (s o // PB prostitueret + pr) o (sti o // PB prostitueret st) o (mi o // PB stomi h) o (st o // PB host Cl) o (t V // PB flot @@ -2849,6 +2987,8 @@ _filos) o (fisk 'o //PB tr) o (ld V // PB trold kn) o (ld V // PB knold sn) o (t V // PB snot + h) otdog VtdVg // PB + _h) o (t_ V // PB or (l O: // PB orlov oscar VskA // PB @@ -2903,7 +3043,7 @@ _maked) on 'on // PB makedoner enf) or 'V // PB k) or (t V:? // PB kort m) orge V:3 // PB morgen - dek) or 'V:r // PB dekor + dek) or (_ 'V:r // PB dekor rapp) or (t 'V: // PB rapport f) or (t V:? // PB fort m) or (f V: // PB morfar @@ -2914,7 +3054,7 @@ _maked) on 'on // PB makedoner _) or V // PB orientere orm orm // PB n) or (m O // PB - st) or (m O:? // PB + st) or (m O: // PB b) or (t Vr // PB bortforklare or (al oR // PB oral _esk) or (te 'V: // PB eskorte @@ -2955,6 +3095,7 @@ _success) or =V f) ord (æ Vd' // PB fordærve f) ord (ø Vd' // PB fordømme ord (en+ Vrd // PB orden, ordensmagt + t) ord (en ord // PB j) ord (en oV // PB fjorden jorden ord (entlig+ 'Vrd // PB overordentlig - stressed ord (ne+ Vrd // PB ordne @@ -3085,7 +3226,7 @@ _success) or =V _f) or (mand 'V // PB formand, formandsskifte _f) or (mbar 'V // PB formbar _f) or (mbrød 'V // PB formbrød - _f) or (me 'V // PB forme + _f) or (me+ 'V // PB forme _f) or (melig 'V // PB formelig _f) ormer (_ 'VrmV // PB former - problem with "formér" _f) or (mfast 'Vr // PB formfast @@ -3221,6 +3362,7 @@ _success) or =V _) på (ske p'O // PB not a prefix - påske &) p (_ p // PB hjælp p (syk // psykolog [s,ykol'o] + sym) p (tom // PB silent p pipeline pajplajn // PB pitchpine peTSpa:jn // pb praline pRAlin'e // PB @@ -3230,6 +3372,7 @@ _success) or =V protegé prod@S'e // PB protegé _) passager p&s&sj'er // PB passager peanut pi:nVd // PB + pseu sWw // PB pseudo .group ph @@ -3248,10 +3391,12 @@ _success) or =V rr R rickshaw rekSV: // PB rickshaw rickshawer rekSV:V // PB rickshawer + _) reservoir resErvo'a: // PB + reservoir resErvoa: // PB recut rikVd // PB - reggae REgEj - rioja ri'Vk& - ramirez _^_ES + reggae REgEj // PB + rioja ri'Vk& // PB wine + ramirez _^_ES // PB name reece ri:s // PB name r (K r // not followed by a vowel hve) r r // PB hver @@ -3291,6 +3436,7 @@ transpo) r (t //PB transport s s ss s sc s // PB scene + me) sc (al sk // PB sco (t skV // PB Scotland Yard // PB/JD s suffix - $alt words in da_list // 2-3.000 words end with s, so this cannot be a general suffix. @@ -3376,6 +3522,8 @@ franci) sc (o sk // PB Francisco for_) sig (_ saj // PB se noget for sig fra_) sig (_ saj // PB slå fra sig stå_) sig (_ saj // PB stå sig godt med + slå_) sig (_ saj // PB + slår_) sig (_ saj // PB _) sig (_alene saj // PB klare sig alene vende_) sig (_ saj // PB erklære_) sig (_ saj // PB @@ -3387,6 +3535,7 @@ hygge_) sig (_ saj // PB _) sig (_ud_ saj // PB rode sig ud i _) sig (_af_ saj // PB tage sig af ak_) sig (_ saj // PB drak sig fuld + gik_) sig (_ saj // PB gik sig en tur s) s // PB use [sV] instead pf [sO] @@ -3613,6 +3762,8 @@ meningi) ti (s =ti u (nK u u (nL08 O // PB kunst br) unch VnS // PB + ketch) u (p V // PB + s) ui (te wi // PB st) u (nt V // PB stuntman b) urg (er Wg // PB u (ng O // PB ung @@ -3627,13 +3778,21 @@ meningi) ti (s =ti _glas) u (r 'u // PB stressed _abs) u (rd 'u // PB stressed _fig) u (r 'u // PB stressed + _harp) u (n 'u // PB stressed l) u (f 0 // PB luft +// l) u (gt 0 // PB +// b) u (gt 0 // PB +// fr) u (gt 0 // PB +// f) u (gt 0 // PB fugt + m) u (L11 0 // PB mug + C) u (gt 0 // frugt, fugt, lugt + sl) u (gt u // PB + b) u (gta u // PB bugtasler l) u (n_ u // PB lun l) u (ne u // PB lune l) u (nte 0 // PB lunte l) u (ka u // Lukas h) u (nd u // PB hund - u (gt 0 // PB fugt r) u (s u r) u (st O // PB udrustning ue (_ u: // PB due, vindue, statue @@ -3666,6 +3825,7 @@ centrif) u (g 'u // PB stressed hovedk) u (ls u // PB k) u (ld u // PB kulde omk) u (ld 'u // PB + imp) u (ls 'u // PB stressed k) u (le u // PB kule sk) u (ll+ u // PB skulle k) u (lt u // PB kultur @@ -3680,6 +3840,7 @@ hovedk) u (ls u // PB sn) u (L06 0 // PB snup s) u (L06 0 // PB suppe u (nk 0 // PB sunket + h) u (n u // PB hunkøn s) u (per u // PB s) u (k 0 // PB suk, sukker sk) u (f 0 // PB skuffe @@ -3694,6 +3855,7 @@ hovedk) u (ls u // PB d) u (ft 0 // PB duft f) u (n+ 0 // PB funktion, karpunkel p) u (k 0 // PB pukle + p) u (lv 0 // PB pulver _r) u (b_ O // PB rub n) u (l 0 // PB nul _r) u (bbe O // PB rubbe, rubbet @@ -3710,6 +3872,7 @@ hovedk) u (ls u // PB _der) u (d 'u // PB stressed - derud r) u u r) u (p O // PB korrupt + gr) u (p u // PB gruppe r) u (m O s) u (cc y b) u (dget y @@ -3809,6 +3972,7 @@ proven) u y sm) y (k W // PB smykke lib) y i // // PB Libyen l) y (st @ // PB problem with lyst = blond, light coloured + l) y (stre Y // PB lystre _l) y (ste_ y // PB &l) y (st y // PB åbenlyst fl) y y // PB flystøtte @@ -3834,7 +3998,7 @@ _molek) y (le 'y // PB stressed k) yss Ws // PB kysse k) y (se y: // PB kyse y (nK W // PB changed from Y to W - synge, ynde - s) y (nsk y // PB + s) y (ns y // PB s) y (nl y // PB synlig s) y (nkr y // PB synkron s) y (nt y // PB syntes @@ -3855,8 +4019,12 @@ _molek) y (le 'y // PB stressed yacht jagd // PB lystyacht york JV:k // PB yankee j&nki // PB + bill) y i // PB luc) y i // PB ken) y (a j // PB + kan) y (le 'Y // PB stressed + _kab) y (s 'Y // PB stressed + _kah) y (t 'Y // PB stressed d) y (_ i b) y (A y n) y (A y @@ -3875,7 +4043,7 @@ _molek) y (le 'y // PB stressed &) ær ($p_alt 'Er // elementær // æ (CK E - r) æ (d a // PB forræder + r) æ (dd a // PB forræder pr) ædi ED // PB prædiken æ (bK E // PB dræb, slæb æ (bt &# // PB dræbt @@ -3883,11 +4051,13 @@ _molek) y (le 'y // PB stressed tr) æ (d+ E // PB træde tr) æ (n &# // PB trænge tr) æ (ne E // PB træne - kr) æ (f &# // PB kræfter - kr) æ (m &# // PB skræmme, kræmmer - r) æ (n &# // PB changed from [Aj] - rænke - r) æ (k &# // PB række - r) æ (t &# // PB åndedræt + dr) æ (n E // PB dræne +// kr) æ (f &# // PB kræfter +// kr) æ (m &# // PB skræmme, kræmmer +// r) æ (n &# // PB changed from [Aj] - rænke +// r) æ (k &# // PB række +// r) æ (t &# // PB åndedræt + r) æ (C &# // PB rædsel pr) æ (k E // PB præke bl) ære EV // PB blærerøv gr) æ (ken E // Grækenland @@ -3934,6 +4104,7 @@ majest) æ (t 'E // PB stressed æ øjer W#jV // PB bøjer ø (jn W# // PB øjne l) øg 'Vj // løgn, løg + g) øg (l Vj // PB gøgler l) ø (s W C) ø (j W# // PB søjle, bøjle L09) ø (g V // PB m => L09 (m + n) - møg @@ -3954,7 +4125,7 @@ majest) æ (t 'E // PB stressed æ ø (re_ W: // PB køre r) ø (ver W# // PB røver r) ø (v W# // PB røv - k) ø (d W // PB skød, kød + k) ød WD // PB skød, kød _) øg (_ Wj // PB 'øg' noun and verb d) øg (n Vj øj+ V:j // PB changet from [Oj] @@ -3974,7 +4145,7 @@ majest) æ (t 'E // PB stressed æ ovenp) å (_ 'O // PB stressed r) å (d+ O: // PB råd r) å (dn+ V // PB rådne - r) å (dd V // PB rådden + r) å (dd+ V // PB rådden tr) å (dt V // PB overtrådt r) å (dg+ V // PB rådgive ård O:? // PB gårdmand, bondegård - silent d @@ -3993,6 +4164,7 @@ uimodst) å (elig 'O // PB stressed forh) åbentlig 'ObEntli // PB stressed h) år V:? // PB hår, hård bl) å (@ V // PB blåbær, blågrå + bl) å (t V // PB å (nd V // PB hånd, ånd, bånd l) å (r V p) å (s V // PB påstand @@ -4010,6 +4182,7 @@ uimodst) å (elig 'O // PB stressed r) å (bt V // PB råbte år V: // PB år, står åre V3 // PB tåre + å (lti V // PB måltid .group $ dVlV // PB changed from [dVlar] @@ -4017,4 +4190,5 @@ uimodst) å (elig 'O // PB stressed ï i: // PB Thaïs 'er (_ %V // PB 60'er 'erne (_ %Vn@ // PB 60'erne + 'ernes (_ %Vn@s // PB 60'ernes 'en (_S3 %@n // PB EMP'en - doesn't work diff --git a/dictsource/dict_phonemes b/dictsource/dict_phonemes index 9bc2b941..e4ed037f 100644 --- a/dictsource/dict_phonemes +++ b/dictsource/dict_phonemes @@ -3,207 +3,626 @@ Phonemes which are used in the *_rules and *_list files Dictionary af_dict +& &: 3: @ @- @L @U a +A: aI AI aU A~ E e: e@ +eI e~ i I iu O O: o@ +OI oI o~ u uI W y Y@ +Yy + +- : ; ? b c d dZ +f g h j k l l# m +n N n^ p r s S t +T tS v w x x2 z Z Dictionary ca_dict +@ a a# aI e E E2 i +o O u U + +* ** : ; b B d D +dZ; f g j J J^ k l +l^ m n N n^ p Q R +R2 s S; t T ts tS; v +v# w z Z Z; Dictionary cs_dict +@- a a: aU e e: eI eU +i i: l- o o: oU r- u +u: + +* ; b c d dZ dz f +g h j J k l l^ m +n N n^ p r R R^ R^/ +s S t tS ts v x z +Z Dictionary cy_dict +@ @- @I @Y a A: aI aU +AY aY E e: eU I i: Iu +O o: OI OY U u: uY V +Y y: Yu + +: b C d D dZ f g +h j k l l# m n N +p r s S t T v w +x z Dictionary da_dict +& &# 0 3 @ @- a A +e E i o O u V W +W# y Y + +* - : ? b B d D +dZ f g h j J k l +l/2 l/3 m n N p r R +s S t T tS v w z Dictionary hu_dict +A a: E e: i i: o o: +u u: Y y y: Y: + +- : b c d dZ dz f +g h j J k l m n +n^ p r R R2 s S s2 +t tS ts v z Z Dictionary de_dict +3 3: @ @- a A A: aI +aU E E2 E: e: EI I i2 +i: n- O o: OY U u: W +y y: Y: + +* : ; b C d D dZ +f g g# h j k l m +n N p pF r s S t +tS ts v w x z Z Dictionary el_dict +@ @- a aI e i o oI +u + +* ; b c C d D f +g j k l l^ m n N +n^ p Q r R s s; t +T ts v x z z; Dictionary en_dict +0 3 3: @ @- @2 @5 @L +a a# A: A@ aa aI aI@ aU +aU@ A~ E e: e@ eI i I +I2 i: i@ i@3 IR O O: o: +O@ o@ OI oU O~ U u: U@ +V VR + +: ; ? b C d D dZ +f g g- h j k l l# +m n N n^ p Q r r- +s S t T t2 tS v w +x z Z Dictionary eo_dict +@- a aI aU e eI eU i +o oI u uI + +* - b d dZ f g h +j k l m n p r R +s S t T tS ts v w +x z Z Dictionary es_dict +a aI aU e E eI eU i +o O oI u + +* ** : b B d D f +g j J J^ k l m n +N n^ p Q R R2 s t +T tS v v# w x z Dictionary fi_dict +& &i &y a a2 ai au e +ei eu ey i I ie iu iy +o oi ou u ui uo Y y +Yi yi Yy yY + +: b d f g h j k +l m n N p r s S +s2 t v w Z Dictionary fr_dict +@ @- a A~ e E E2 E: +E~ i I o O o2 o3 O~ +u u: w W W~ y Y + +- : b d dZ f g h +j k l m n N n2 n^ +p p2 r r2 s S t t2 +t3 tS v z Z z2 z3 Dictionary grc_dict +a aI aU e E EI eU EU +i o O oI OI OU u y +yI + +: b d f g h j k +l m n N p R s t +T v x z Dictionary hbs_dict +& @ @2 a A a: aI aU +e E e: i I i: l- o +O o: oU r* r- u U u: + +* ; b d dZ dz dZ; f +g h j k l l^ m n +N n^ p r R R2 s S +t tS ts tS; v x z Z Dictionary hi_dict +@ @- @2 @3 a a: aI aU +e E e: E: E~ i I i: +l- o O o: O: O~ o~ r- +U u: u~ V + +- : b bh c ch d d. +dh dh. f g gh h H j +J Jh k kh l l. m n +N n. n^ p ph Q q r +r. s S s. t T t. th +th. v w x z Dictionary ta_dict +a a: aI aU e E e: i +I i: o o: u U u: U: +V V# + +: ; b C d d. dZ f +g h H j k l l. m +n N n. n^ p Q r R +s S s. t T t. th tS +v w z z. Dictionary hy_dict +@ a aI e eI i i@ o +u W y + +** b c d dZ dz f g +h j k k# l m n p +p# r R r" s S t t# +tS ts ts# v X z Z Dictionary id_dict +@ a aI aU e E E2 i +o O u + +: ? b d dZ f g h +j k l m n N n^ p +r R R2 s S t tS v +w x z Dictionary is_dict +@- a a: aI aI: aU aU: E +E: eI eI: i I i: I: O +O: OI oU oU: u u: W W: +y y: yI Yy Yy: + +* ** : ; b c C d +D f g h j J k l +l# m m# n N n# N# n^ +n^# p Q r R r# R2 s +S s2 t T tl# v x z Dictionary it_dict +@- a a/ aI aU e E eI +i I o O u + +* : ; b d dZ f g +h j k l l^ m n N +n^ p r R s S t tS +ts v w w2 z Dictionary jbo_dict +@ a aI aU e eI i l- +n- o oI r- u + +b d dZ f g h j k +l m n N p R s S +t tS v w x z Z Dictionary ku_dict +8 a e E E# eI eU i +I o u U y + +* : b c d dZ f g +h j J k l m n p +q r R s S t tS v +w x z Z Dictionary la_dict +@- a a: aI aU E e: EU +I i: O o: OI U u: y +y: + +* : ; ? b d f +g h j k l m n N +p r R s t w z Dictionary lv_dict +a a: ai au e e: ei i +i: ie iu o o: u u: ui +uo + +: b c d dZ f g h +j J k l l^ m n N +n^ p r R R2 s S t +tS ts v z Z Dictionary mk_dict +& @ @- @2 a A a: e +E e: i I i: l- o o: +oU r- u u: + +* b d dZ dz dZ; f g +h j k k^ l l^ m n +N n^ p r R s S t +tS ts tS; v x z Z Dictionary nci_dict +a e i o O + +: ? b c d f g j +k l m n p R s S +t tS v w x Dictionary nl_dict +8 @ @- A a: A~ E e: +EI eU i I O O: o: u +VU Wy y Y: yU + +* : ; b d f g h +j k l m n N n^ p +Q r s S t tS v v# +w x z Dictionary no_dict +@ @2 a A a: A: AI aI +aU E E: e: I i: O o: +OI U u- u-: u-I u: W y +y: Y: Yy + +: ; b d f g h j +k l m n N p r R +s S s; t v w x z Dictionary pap_dict +a a/ aI e E eI i o +O u y Y + +: ? b d dZ f g h +j k l m n N n^ p +R s S t tS v w x +z Z Dictionary pl_dict +a E E# E~ i O O~ u +y + +: ; b c C d d; dZ +dz f g h j k l m +n N n^ p r R s S +s; S; t t; tS ts tS; v +w x z Z Z; Dictionary pt_dict +& &/ &U~ &~ @ @- a A +aI aU e E eI EI eU EU +i I i/ iU o O oI OI +o~ u U uI u~ y + +* : ; b C d dZ f +g h j k l l^ m n +N n^ p Q r R r- s +S s# s; t T tS ts v +w x z Z Dictionary ro_dict +@ @- @I @U a aI aU e +ea eI eo eU i i/ I^ iI +iU o O Oa oI oU u uI +y Y yI yU + +* *; b b; c C d d; +dZ f f; g h j k l +l; m m; n N n; p p; +r s S S; t t; tS ts +ts; v v; w w2 x z Z +z; Z; Dictionary ru_dict +8 @- a A e E E# E2 +E3 i I I# I2 I3 I^ ja +ju o O u u" u# V V# +y Y + +* ; b d d; dZ; f g +j k l l^ m m; n n^ +p r R s S s; S; t +t; ts tS; v x z Z z; +Z; Dictionary sk_dict +& @- a a: e e: i i: +l- l: o o: oU r- r: u +u: + +* ; b d d; dZ dz f +g h j k l l^ m n +N n^ p r R R^ R^/ s +S t t; tS ts v x z +Z Dictionary sq_dict +@ @/ a A a/ aI e E +eI i I I# O OI u V +y yE + +** : ; b c d D dZ +dz dZ; f g h j k l +L ll m n n^ p r R +R2 s S t T tS ts v +w z Z Dictionary sv_dict +8 @ a A: E E- e: E: +I i: O o: U u- u: W +y y: Y: + +: ; b d f g h j +k l m n N p R s +S s. S; sx t v w z Dictionary sw_dict +@- a a/ e i m- n- N- +o u + +* : b d D f g h +j J k l m n N n^ +p Q R s S t T tS +v w x z Dictionary sl_dict +& @ a e E i o O +u y + +: b d dZ dz f g h +j k l l^ m n N n^ +p R R^ s S t tS ts +v w x z Z Dictionary tr_dict +@ a e E i I o O +u U W y Y + +* : b c d dZ f g +G h j J k l m n +p Q r R s S t tS +v w z Z Dictionary vi_dict +@ @: @:I @:U @I @U a a: +a:I a:U aI aU e E eU EU +i i@ iU o O OI oI u +u@ uI y y@ yI + +b c d D f g h j +J k kh l m n N n^ +p Q r s s. t t[ tS; +v w x z Z z. Dictionary zh_dict +@ @r a A ai Au E ei +i i. i[ iA iE io iou N- +o o- ong ou u u@ ua uai +uei uo y y& y@ yE yi yu + +; C f h j k kh l +l# m n N p ph Q q +Q" Q^ r R r" R2 R3 s +s. S; t th ts ts. ts. tS; +tS; tsh v w x X z. Dictionary zhy_dict +a aa aai aan aau ai au e +ei eo eoi eu i iu o oe +oi ong ou u ui yu + +b c d f g h j k +l m n N p r s t +tS v w z Dictionary am_dict +@ a e i o u y + +b d h l m q R s +S t tS Dictionary ml_dict +a a: aI aU e E e: i +I i: o o: r- u u: V +y + +: b bh c ch d d. dh +dh. dZ f g gh h j J +Jh k kh l l. m n N +n. n^ p ph R R2 s s. +S; t t. th th. tS v w +z z. Dictionary ne_dict +@ @/ @2 @3 a aI aU a~ +e E eI eU e~ E~ i I +i~ l- o O o: oI oU O~ +o~ r- u uI u~ V VI VU +V~ + +- : b bh c ch d d. +dh f g gh h H j J +Jh k kh l l. m n N +n. n^ p ph Q q r r. +s S s. t T t. th v +w x z z. Dictionary pa_dict +@ a a~ e E e~ E~ i +I i~ I~ o O O~ o~ r- +u U U~ u~ V V~ + +: ; b bh c ch d d. +dh dh. f g gh h H j +J Jh k kh l l. m n +N n. n^ p ph Q R R2 +s S t t. th th. v x +z Dictionary prs_dict +@ A E eI i o u + +: b d dZ f g h j +k l m n p r R s +S t tS v w X z Z Dictionary rw_dict +a e i o u + +* : b B c d dZ f +g h j J k l m n +N n^ p q R s S S; +t tS v w x z Dictionary ur_dict +@ a a: aI aU E e: i +I i: O o: U u: + +: b bh c ch d D d. +dh dh. dZ f g gh H j +J Jh k kh l m n N +p ph Q q R r. s S +s. t T t. th th. v x +z Z z. Dictionary bg_dict +@ a e i o u + +; b C d d; dZ dz f +g j k l L l^ m n +n^ p r s S s; t t; +tS ts v x z Z z; Dictionary nso_dict +@ a e i m- n- N- o +u + +- : b d D dZ f g +h j J k l l# m n +N n^ p Q r R R3 s +S t T tS v w x z diff --git a/dictsource/en_list b/dictsource/en_list index 8a2ca729..cf40be9e 100644 --- a/dictsource/en_list +++ b/dictsource/en_list @@ -792,6 +792,7 @@ chloroplast $1 chocolate tS0kl@t cholera k0l@r@ cholesterol k@lEst@r0l +chorizo tSOr'i:zoU chromosome kroUm@soUm ciao tSaU cigar sI2gA@ @@ -1494,6 +1495,7 @@ metaphor mEt@fO@ metallic mEt'alIk miaou mi:'aU miaow mi:'aU +mic maIk mica maIk@ microorganism maIkroU'O@g@nIz@m midday m,Idd'eI diff --git a/dictsource/pt_rules b/dictsource/pt_rules index 742387dd..cdb2f7a3 100755 --- a/dictsource/pt_rules +++ b/dictsource/pt_rules @@ -746,9 +746,7 @@ r) u (_A u u (A_ 'u - ui 'uI - ui (_ uI - ui (s 'uI + ui uI u (iu w u (iCK u uy uI diff --git a/dictsource/ta_rules b/dictsource/ta_rules index 9e1459a7..b0ddd3fc 100644 --- a/dictsource/ta_rules +++ b/dictsource/ta_rules @@ -991,13 +991,11 @@ _முகத்தின்_) ப (ாவ b சிறு) ப (ிள்ளை p ஆண்) ப (ிள்ளை p பெண்) ப (ிள்ளை p - பூம்) ப (ுகார p ம்) ப (ுரா b இன்) ப (ுற b _துன்) ப (ுற b ப (ுறK p மண்) ப (ுழு p - பூம்) ப (ுஹார p ம்) ப (ூர b ராம்) ப (ூர p அ) ப (ூர்வ b diff --git a/phsource/compile_report b/phsource/compile_report index 907ed558..71bfc9d3 100644 --- a/phsource/compile_report +++ b/phsource/compile_report @@ -341,7 +341,7 @@ l/l_ [l/] base l/l_@ [l/3] base [l/] fr l/l@ [l#] base - [ߵ ] base + [߸ ] base [l] fr [l/2] fr l/L1_aL [l/] base @@ -367,13 +367,13 @@ l/L2_uL [l/2] base l/l_3 [l/] de l/l_4 [ll] sq l/la [l#] base - [ߵ ] base + [߸ ] base [l] fr [l/2] fr l/l_a [l/3] base [l/] fr l/le [l#] base - [ߵ ] base + [߸ ] base [l] fr [l/2] fr l/l_e [l/3] base @@ -383,7 +383,7 @@ l/L_eL_af [&] af l/l_front [L] sq l/l_front_ [l/4] sq l/li [l#] base - [ߵ ] base + [߸ ] base [l] fr [l/2] fr [l] zh @@ -395,14 +395,14 @@ ll/_ll [L] bg l/l_long [l] base [l] fr l/lo [l#] base - [ߵ ] base + [߸ ] base [l] fr [l/2] fr l/l_o [l/3] base [l/] fr l^/l_rfx [l.] base l/lu [l#] base - [ߵ ] base + [߸ ] base [l] fr [l/2] fr l/l_u [l/3] base @@ -620,8 +620,8 @@ ufric/f [f] base ufric/f_ [f] base [f] fr [f] pl -ufric/l# [l#] is -ufric/ll [l#] base +ufric/l# [l#] base + [l#] is ufric/s [s] base [s] fr [z2] fr @@ -1943,51 +1943,51 @@ vwl_en_us/oor [0] en-us vwl_en_us/or [o@] en-us [O:] en-sc vwl_en_us/ur [U@] en-us -vwl_fr/@2r [ߵ ] fr -vwl_fr/a2r [ߵ ] fr -vwl_fr/aa2r [ߵ ] fr +vwl_fr/@2r [߸ ] fr +vwl_fr/a2r [߸ ] fr +vwl_fr/aa2r [߸ ] fr vwl_fr/br [r/2] fr -vwl_fr/e2r [ߵ ] fr -vwl_fr/e_2r [ߵ ] fr -vwl_fr/ee2r [ߵ ] fr -vwl_fr/i2r [ߵ ] fr +vwl_fr/e2r [߸ ] fr +vwl_fr/e_2r [߸ ] fr +vwl_fr/ee2r [߸ ] fr +vwl_fr/i2r [߸ ] fr vwl_fr/j [j/] fr -vwl_fr/o2r [ߵ ] fr -vwl_fr/oo2r [ߵ ] fr +vwl_fr/o2r [߸ ] fr +vwl_fr/oo2r [߸ ] fr vwl_fr/r [r] fr [r/2] fr vwl_fr/r_ [r/] fr vwl_fr/r_@ [r/] fr -vwl_fr/r@ [ߵ ] fr +vwl_fr/r@ [߸ ] fr vwl_fr/@R [x] pt-pt -vwl_fr/r@2 [ߵ ] fr +vwl_fr/r@2 [߸ ] fr vwl_fr/@R2 [R] fr-ca -vwl_fr/ra [ߵ ] fr +vwl_fr/ra [߸ ] fr vwl_fr/r_a [r/] fr -vwl_fr/raa [ߵ ] fr -vwl_fr/re [ߵ ] fr +vwl_fr/raa [߸ ] fr +vwl_fr/re [߸ ] fr vwl_fr/r_e [r/] fr -vwl_fr/re2 [ߵ ] fr -vwl_fr/ree [ߵ ] fr -vwl_fr/ri [ߵ ] fr +vwl_fr/re2 [߸ ] fr +vwl_fr/ree [߸ ] fr +vwl_fr/ri [߸ ] fr vwl_fr/r_i [r/] fr -vwl_fr/rj [ߵ ] fr +vwl_fr/rj [߸ ] fr vwl_fr/r_n [r/] fr -vwl_fr/ro [ߵ ] fr +vwl_fr/ro [߸ ] fr vwl_fr/r_o [r/] fr -vwl_fr/roo [ߵ ] fr +vwl_fr/roo [߸ ] fr vwl_fr/rr [r/] fr -vwl_fr/ru [ߵ ] fr +vwl_fr/ru [߸ ] fr vwl_fr/r_u [r/] fr -vwl_fr/rw [ߵ ] fr -vwl_fr/ry [ߵ ] fr +vwl_fr/rw [߸ ] fr +vwl_fr/ry [߸ ] fr vwl_fr/r_y [r/] fr vwl_fr/tr [r/2] fr vwl_fr/trr [r/] fr -vwl_fr/u2r [ߵ ] fr +vwl_fr/u2r [߸ ] fr vwl_fr/wa [w] fr [w/] fr -vwl_fr/y2r [ߵ ] fr +vwl_fr/y2r [߸ ] fr vwl_hi/l-voc [l-] base [l-] sk [l:] sk diff --git a/phsource/l/L2_oL b/phsource/l/L2_oL index 583e413311c7e6f7c26015ff464b98587f69c086..1f66489e472dc5bddaf327f28af1558e1df1b0d3 100644 GIT binary patch delta 140 zcmX@Cc35r0dck@R1_rhWrX`G#3=9k)%)l^}k%4Ck;{(PhARB}k7+jbcSRXLTF!cc0 zAk4t9fUAM&0Z0b>u4 z4Z;izI@};#4;Wb(85lsAfkA;+g9TM&8DADNsz`#22op%;3s46LGcZ(a))NwC1ORM` B8@B)e diff --git a/src/Makefile b/src/Makefile index 13177231..d760954f 100644 --- a/src/Makefile +++ b/src/Makefile @@ -1,5 +1,3 @@ -# Makefile for 'espeak', 'speak', and 'libespeak' - # remove -fno-exceptions if it causes problems with stdio library on some platforms (ARM) PREFIX=/usr @@ -51,12 +49,12 @@ endif speak_SOURCES = speak.cpp compiledict.cpp dictionary.cpp intonation.cpp \ readclause.cpp setlengths.cpp numbers.cpp synth_mbrola.cpp \ - synthdata.cpp synthesize.cpp translate.cpp \ + synthdata.cpp synthesize.cpp translate.cpp mbrowrap.cpp \ tr_languages.cpp voices.cpp wavegen.cpp phonemelist.cpp klatt.cpp libespeak_SOURCES = speak_lib.cpp compiledict.cpp dictionary.cpp intonation.cpp \ readclause.cpp setlengths.cpp numbers.cpp synth_mbrola.cpp \ - synthdata.cpp synthesize.cpp translate.cpp \ + synthdata.cpp synthesize.cpp translate.cpp mbrowrap.cpp \ tr_languages.cpp voices.cpp wavegen.cpp phonemelist.cpp \ espeak_command.cpp event.cpp fifo.cpp $(WAVE) debug.cpp klatt.cpp diff --git a/src/Makefile.espeakedit b/src/Makefile.espeakedit index ca60e3c4..861676bd 100644 --- a/src/Makefile.espeakedit +++ b/src/Makefile.espeakedit @@ -2,10 +2,10 @@ SRCS= compiledata.cpp compiledict.cpp debug.cpp dictionary.cpp espeak_command.cpp \ espeakedit.cpp event.cpp extras.cpp fifo.cpp formantdlg.cpp intonation.cpp \ - klatt.cpp menus.cpp numbers.cpp options.cpp phonemelist.cpp prosodydisplay.cpp \ - readclause.cpp setlengths.cpp speak_lib.cpp spect.cpp spectdisplay.cpp \ - spectseq.cpp synthdata.cpp synthesize.cpp synth_mbrola.cpp translate.cpp \ - transldlg.cpp tr_languages.cpp voicedlg.cpp voices.cpp vowelchart.cpp \ + klatt.cpp mbrowrap.cpp menus.cpp numbers.cpp options.cpp phonemelist.cpp \ + prosodydisplay.cpp readclause.cpp setlengths.cpp speak_lib.cpp spect.cpp \ + spectdisplay.cpp spectseq.cpp synthdata.cpp synthesize.cpp synth_mbrola.cpp \ + translate.cpp transldlg.cpp tr_languages.cpp voicedlg.cpp voices.cpp vowelchart.cpp \ wave.cpp wavegen.cpp OBJS=$(patsubst %.cpp,%.o,$(SRCS)) diff --git a/src/compiledata.cpp b/src/compiledata.cpp index d05bff6b..09d462c2 100644 --- a/src/compiledata.cpp +++ b/src/compiledata.cpp @@ -1744,12 +1744,12 @@ static int LoadWavefile(FILE *f, const char *fname) sr2 = Read4Bytes(f); fseek(f,40,SEEK_SET); - if((sr1 != samplerate) || (sr2 != sr1*2)) + if((sr1 != samplerate_native) || (sr2 != sr1*2)) { #ifdef PLATFORM_WINDOWS - if(sr1 != samplerate) + if(sr1 != samplerate_native) { - fprintf(f_errors,"Wrong samplerate %d, wants %d\n",sr1,samplerate); + fprintf(f_errors,"Wrong samplerate %d, wants %d\n",sr1,samplerate_native); error("Wrong samplerate: %s",fname); } if(sr2 != sr1*2) @@ -1764,7 +1764,7 @@ static int LoadWavefile(FILE *f, const char *fname) if((fd_temp = mkstemp(fname_temp)) >= 0) { close(fd_temp); - sprintf(command,"sox \"%s%s.wav\" -r %d -c 1 -w %s polyphase\n",path_source,fname,samplerate,fname_temp); + sprintf(command,"sox \"%s%s.wav\" -r %d -c 1 -w %s polyphase\n",path_source,fname,samplerate_native,fname_temp); if(system(command) < 0) { error("Failed to resample: %s",command); diff --git a/src/espeak.cpp b/src/espeak.cpp index 205a25d5..37e601a3 100644 --- a/src/espeak.cpp +++ b/src/espeak.cpp @@ -66,8 +66,10 @@ static const char *help_text = "\t directory. specifies the language\n" "--path=\"\"\n" "\t Specifies the directory containing the espeak-data directory\n" +"--pho\n" +"\t Write mbrola phoneme data (.pho) to stdout, or to the file in --phonout\n" "--phonout=\"\"\n" -"\t Write output from -x -X commands, and mbrola phoneme data, to this file\n" +"\t Write phoneme output from -x -X and --pho to this file\n" "--punct=\"\"\n" "\t Speak the names of punctuation characters during speaking. If\n" "\t = is omitted, all punctuation is spoken.\n" @@ -87,6 +89,7 @@ int samplerate; int quiet = 0; unsigned int samples_total = 0; unsigned int samples_split = 0; +unsigned int samples_split_seconds = 0; unsigned int wavefile_count = 0; FILE *f_wavfile = NULL; @@ -218,15 +221,18 @@ int OpenWavFile(char *path, int rate) else f_wavfile = fopen(path,"wb"); - if(f_wavfile != NULL) + if(f_wavfile == NULL) { - fwrite(wave_hdr,1,24,f_wavfile); - Write4Bytes(f_wavfile,rate); - Write4Bytes(f_wavfile,rate * 2); - fwrite(&wave_hdr[32],1,12,f_wavfile); - return(0); + fprintf(stderr,"Can't write to: '%s'\n",path); + return(1); } - return(1); + + + fwrite(wave_hdr,1,24,f_wavfile); + Write4Bytes(f_wavfile,rate); + Write4Bytes(f_wavfile,rate * 2); + fwrite(&wave_hdr[32],1,12,f_wavfile); + return(0); } // end of OpenWavFile @@ -266,25 +272,40 @@ static int SynthCallback(short *wav, int numsamples, espeak_EVENT *events) return(0); } - if(samples_split > 0) + while(events->type != 0) { - // start a new WAV file when this limit is reached, at the next sentence boundary - while(events->type != 0) + if(events->type == espeakEVENT_SAMPLERATE) { - if((events->type == espeakEVENT_SENTENCE) && (samples_total > samples_split)) + samplerate = events->id.number; + samples_split = samples_split_seconds * samplerate; + } + else + if(events->type == espeakEVENT_SENTENCE) + { + // start a new WAV file when the limit is reached, at this sentence boundary + if((samples_split > 0) && (samples_total > samples_split)) { CloseWavFile(); samples_total = 0; + wavefile_count++; } - events++; } + events++; } if(f_wavfile == NULL) { - sprintf(fname,"%s_%.2d%s",wavefile,++wavefile_count,filetype); - if(OpenWavFile(fname, samplerate) != 0) - return(1); + if(samples_split > 0) + { + sprintf(fname,"%s_%.2d%s",wavefile,wavefile_count+1,filetype); + if(OpenWavFile(fname, samplerate) != 0) + return(1); + } + else + { + if(OpenWavFile(wavefile, samplerate) != 0) + return(1); + } } if(numsamples > 0) @@ -332,7 +353,8 @@ int main (int argc, char **argv) {"stdout", no_argument, 0, 0x105}, {"split", optional_argument, 0, 0x106}, {"path", required_argument, 0, 0x107}, - {"phonout", required_argument, 0, 0x108}, + {"phonout", required_argument, 0, 0x108}, + {"pho", no_argument, 0, 0x109}, {0, 0, 0, 0} }; @@ -360,7 +382,8 @@ int main (int argc, char **argv) int wordgap = -1; int option_capitals = -1; int option_punctuation = -1; - int option_phonemes = -1; + int option_phonemes = 0; + int option_mbrola_phonemes = 0; int option_linelength = 0; int option_waveout = 0; @@ -550,9 +573,9 @@ int main (int argc, char **argv) case 0x106: // -- split if(optarg2 == NULL) - samples_split = 30; // default 30 minutes + samples_split = 30 * 60; // default 30 minutes else - samples_split = atoi(optarg2); + samples_split = atoi(optarg2) * 60; break; case 0x107: // --path @@ -566,6 +589,10 @@ int main (int argc, char **argv) } break; + case 0x109: // --pho + option_mbrola_phonemes = 8; + break; + default: exit(0); } @@ -576,7 +603,7 @@ int main (int argc, char **argv) { // writing to a file (or no output), we can use synchronous mode samplerate = espeak_Initialize(AUDIO_OUTPUT_SYNCHRONOUS,0,data_path,0); - samples_split = (samplerate * samples_split) * 60; + samples_split = samplerate * samples_split_seconds; espeak_SetSynthCallback(SynthCallback); if(samples_split) @@ -589,12 +616,6 @@ int main (int argc, char **argv) *extn = 0; } } - else - if(option_waveout) - { - if(OpenWavFile(wavefile,samplerate) != 0) - exit(4); - } } else { @@ -641,7 +662,7 @@ int main (int argc, char **argv) espeak_SetParameter(espeakLINELENGTH,option_linelength,0); if(option_punctuation == 2) espeak_SetPunctuationList(option_punctlist); - espeak_SetPhonemeTrace(option_phonemes,f_phonemes_out); + espeak_SetPhonemeTrace(option_phonemes | option_mbrola_phonemes,f_phonemes_out); if(filename[0]==0) { diff --git a/src/espeakedit.cpp b/src/espeakedit.cpp index b84d0b1b..788927a2 100644 --- a/src/espeakedit.cpp +++ b/src/espeakedit.cpp @@ -129,8 +129,6 @@ char param[80]; if(argc > 1) { -extern void VoiceReset(int control); - p = argv[1]; j = 0; while((param[j] = p[j]) != 0) j++; diff --git a/src/mbrolib.h b/src/mbrolib.h deleted file mode 100644 index 0616b464..00000000 --- a/src/mbrolib.h +++ /dev/null @@ -1,205 +0,0 @@ -#ifndef MBROLIB_H -#define MBROLIB_H - -/* - * mbrolib: mbrola wrapper. - * - * Copyright (C) 2007 Gilles Casse - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 3 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - * -*/ - -#ifdef __cplusplus -extern "C" { -#endif - -/* < types */ - -/** Parameters */ - -typedef struct { - int ignore_error; /* 1=Ignore any fatal error or unknown diphone */ - char comment_char; /* Comment character */ - float volume_ratio; /* Volume ratio */ - float frequency_ratio; /* Applied to pitch points */ - float time_ratio; /* Applied to phone durations */ -} mbrolib_parameter; - - -/** Returned errors */ - -typedef enum { - MBROLIB_OK=0, - MBROLIB_DATABASE_NOT_INSTALLED, - MBROLIB_INVAL, - MBROLIB_OUT_OF_MEMORY, - MBROLIB_OUT_OF_RANGE, - MBROLIB_READ_ERROR, - MBROLIB_WRITE_ERROR -} MBROLIB_ERROR; - - - -/** Gender */ - -typedef enum { - MBROLIB_FEMALE, - MBROLIB_MALE -} MBROLIB_GENDER; - - - -/** Voice descriptor */ - -typedef struct { - char *name; /* name (for example: "en1") */ - char *filename; /* database pathname (for example: "/usr/share/mbrola/voices/en1) */ - int rate; /* database sample rate */ - MBROLIB_GENDER gender; - const char *language; /* Language and optional dialect qualifier in ascii (e.g. en, fr_ca). */ -} mbrolib_voice; - -/* > */ - - -/** Initialization, returns a new handle. - First function. - - @param the_sample_rate: output rate in Hz (for example 22050). If 0, keep the original database rate. - - @return handle (or NULL if error). -*/ -void* mbrolib_init( int sample_rate); -typedef void* (t_mbrolib_init)(int); - - -/** Returns the list of the installed mbrola databases. - The databases are searched according to the MBROLA_PATH environment variable if set, - or under a default path otherwise (see MBROLA_PATH in mbrolib.c). - - An array of voices is returned. The last item is set to NULL. - The caller must not free the returned items or the array. - - @param the_handle previously given by mbrolib_init. - - @return An array of voices. -*/ -const mbrolib_voice ** mbrolib_list_voices( void* the_handle); -typedef const mbrolib_voice ** (t_mbrolib_list_voices)(void*); - - - -/** Set voice - - @param the_handle. - - @param the_database (for example, "en1"). - - @return error code (MBROLIB_OK, MBROLIB_DATABASE_NOT_INSTALLED, MBROLIB_INVAL). - -*/ -MBROLIB_ERROR mbrolib_set_voice( void* the_handle, const char* the_name); -typedef MBROLIB_ERROR (t_mbrolib_set_voice)( void*, const char*); - - - -/** Get the current database parameters. - The caller supplies a pointer to an already allocated structure. - - @param the_handle previously given by mbrolib_init. - - @param the_parameters: pointer to the structure. - - @return error code (MBROLIB_OK, MBROLIB_INVAL). -*/ -MBROLIB_ERROR mbrolib_get_parameter(void* the_handle, mbrolib_parameter* the_parameter); -typedef MBROLIB_ERROR (t_mbrolib_get_parameter)(void*, mbrolib_parameter*); - - - -/** Set the database parameters using the supplied data. - - @param the_handle previously given by mbrolib_init. - - @param the_parameters: pointer to the wished parameters. - - @return error code (MBROLIB_OK, MBROLIB_INVAL). -*/ -MBROLIB_ERROR mbrolib_set_parameter(void* the_handle, const mbrolib_parameter* the_parameter); -typedef MBROLIB_ERROR (t_mbrolib_set_parameter)(void*, const mbrolib_parameter*); - - - -/** Write the mbrola phonemes in the internal buffer. - - @param the_handle. - - @param the_mbrola_phonemes. - - @param the_size in bytes. - - @return error code (MBROLIB_OK, MBROLIB_INVAL, MBROLIB_WRITE_ERROR, MBROLIB_READ_ERROR). -*/ -MBROLIB_ERROR mbrolib_write(void* the_handle, const char* the_mbrola_phonemes, size_t the_size); -typedef MBROLIB_ERROR (t_mbrolib_write)(void*, const char*, size_t); - - - -/** Read n bytes of the output samples. - - @param the_handle. - - @param the_samples (raw audio data, 16bits, mono). - - @param the_size max number of int16 to read. - - @param the_size number of int16 read. - - @return error code (MBROLIB_OK, MBROLIB_INVAL, MBROLIB_READ_ERROR). - -*/ -MBROLIB_ERROR mbrolib_read(void* the_handle, short* the_samples, int the_max_size, int* the_read_size); -typedef MBROLIB_ERROR (t_mbrolib_read)(void*, short*, int, int*); - - - -/** Flush - - @param the_handle. - -*/ -void mbrolib_flush(void* the_handle); -typedef void (t_mbrolib_flush)(void*); - - - -/** Release the handle - - @param the_handle. - - @return error code (MBROLIB_OK, MBROLIB_INVAL). - -*/ -MBROLIB_ERROR mbrolib_terminate(void* the_handle); -typedef MBROLIB_ERROR (t_mbrolib_terminate)(void*); - - - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/src/mbrowrap.cpp b/src/mbrowrap.cpp new file mode 100644 index 00000000..e7673127 --- /dev/null +++ b/src/mbrowrap.cpp @@ -0,0 +1,578 @@ +/* + * mbrowrap -- A wrapper library around the mbrola binary + * providing a subset of the API from the Windows mbrola DLL. + * + * Copyright (C) 2010 by Nicolas Pitre + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "mbrowrap.h" + + +/* + * mbrola instance parameters + */ + +enum mbr_state { + MBR_INACTIVE = 0, + MBR_IDLE, + MBR_NEWDATA, + MBR_AUDIO, + MBR_WEDGED +}; + +static enum mbr_state mbr_state; + +static char *mbr_voice_path; +static int mbr_cmd_fd, mbr_audio_fd, mbr_error_fd, mbr_proc_stat; +static pid_t mbr_pid; +static int mbr_samplerate; +static float mbr_volume = 1.0; +static char mbr_errorbuf[160]; + +struct datablock { + struct datablock *next; + int done; + int size; + char buffer[1]; /* 1 or more, dynamically allocated */ +}; + +static struct datablock *mbr_pending_data_head, *mbr_pending_data_tail; + +/* + * Private support code. + */ + +static void log(const char *msg, ...) +{ + va_list params; + + va_start(params, msg); + vfprintf(stderr, msg, params); + fputc('\n', stderr); + va_end(params); +} + +static void err(const char *err, ...) +{ + va_list params; + + va_start(params, err); + vsnprintf(mbr_errorbuf, sizeof(mbr_errorbuf), err, params); + va_end(params); + log("mbrola error: \"%s\"", mbr_errorbuf); +} + +static int create_pipes(int p1[2], int p2[2], int p3[2]) +{ + int error=0; + + if (pipe(p1) != -1) { + if (pipe(p2) != -1) { + if (pipe(p3) != -1) { + return 0; + } else + error = errno; + close(p2[0]); + close(p2[1]); + } else + error = errno; + close(p1[0]); + close(p1[1]); + } + + err("pipe(): %s", strerror(error)); + return -1; +} + +static void close_pipes(int p1[2], int p2[2], int p3[2]) +{ + close(p1[0]); + close(p1[1]); + close(p2[0]); + close(p2[1]); + close(p3[0]); + close(p3[1]); +} + +static int start_mbrola(const char *voice_path) +{ + int error, p_stdin[2], p_stdout[2], p_stderr[2]; + char charbuf[20]; + + if (mbr_state != MBR_INACTIVE) { + err("mbrola init request when already initialized"); + return -1; + } + + error = create_pipes(p_stdin, p_stdout, p_stderr); + if (error) + return -1; + + mbr_pid = fork(); + + if (mbr_pid == -1) { + error = errno; + close_pipes(p_stdin, p_stdout, p_stderr); + err("fork(): %s", strerror(error)); + return -1; + } + + if (mbr_pid == 0) { + int i; + + if (dup2(p_stdin[0], 0) == -1 || + dup2(p_stdout[1], 1) == -1 || + dup2(p_stderr[1], 2) == -1) { + snprintf(mbr_errorbuf, sizeof(mbr_errorbuf), + "dup2(): %s\n", strerror(errno)); + write(p_stderr[1], mbr_errorbuf, strlen(mbr_errorbuf)); + _exit(1); + } + + for (i = p_stderr[1]; i > 2; i--) + close(i); + signal(SIGHUP, SIG_IGN); + signal(SIGINT, SIG_IGN); + signal(SIGQUIT, SIG_IGN); + signal(SIGTERM, SIG_IGN); + + snprintf(charbuf, sizeof(charbuf), "%g", mbr_volume); + execlp("mbrola", "mbrola", "-e", "-v", charbuf, + voice_path, "-", "-.wav", (char *)NULL); + /* if execution reaches this point then the exec() failed */ + snprintf(mbr_errorbuf, sizeof(mbr_errorbuf), + "mbrola: %s\n", strerror(errno)); + write(2, mbr_errorbuf, strlen(mbr_errorbuf)); + _exit(1); + } + + snprintf(charbuf, sizeof(charbuf), "/proc/%d/stat", mbr_pid); + mbr_proc_stat = open(charbuf, O_RDONLY); + if (mbr_proc_stat == -1) { + error = errno; + close_pipes(p_stdin, p_stdout, p_stderr); + waitpid(mbr_pid, NULL, 0); + mbr_pid = 0; + err("/proc is unaccessible: %s", strerror(error)); + return -1; + } + + signal(SIGPIPE, SIG_IGN); + + if (fcntl(p_stdin[1], F_SETFL, O_NONBLOCK) == -1 || + fcntl(p_stdout[0], F_SETFL, O_NONBLOCK) == -1 || + fcntl(p_stderr[0], F_SETFL, O_NONBLOCK) == -1) { + error = errno; + close_pipes(p_stdin, p_stdout, p_stderr); + waitpid(mbr_pid, NULL, 0); + mbr_pid = 0; + err("fcntl(): %s", strerror(error)); + return -1; + } + + mbr_cmd_fd = p_stdin[1]; + mbr_audio_fd = p_stdout[0]; + mbr_error_fd = p_stderr[0]; + close(p_stdin[0]); + close(p_stdout[1]); + close(p_stderr[1]); + + mbr_state = MBR_IDLE; + return 0; +} + +static void stop_mbrola(void) +{ + if (mbr_state == MBR_INACTIVE) + return; + close(mbr_proc_stat); + close(mbr_cmd_fd); + close(mbr_audio_fd); + close(mbr_error_fd); + if (mbr_pid) { + kill(mbr_pid, SIGTERM); + waitpid(mbr_pid, NULL, 0); + mbr_pid = 0; + } + mbr_state = MBR_INACTIVE; +} + +static void free_pending_data(void) +{ + struct datablock *p, *head = mbr_pending_data_head; + while (head) { + p = head; + head = head->next; + free(p); + } + mbr_pending_data_head = NULL; + mbr_pending_data_tail = NULL; +} + +static int mbrola_has_errors(void) +{ + int result, error; + + result = read(mbr_error_fd, mbr_errorbuf, sizeof(mbr_errorbuf)-1); + + if (result == -1) { + if (errno == EAGAIN) + return 0; + err("read(error): %s", strerror(errno)); + return -1; + } + + if (result != 0) { + mbr_errorbuf[result] = 0; + if (mbr_errorbuf[result - 1] == '\n') + mbr_errorbuf[result - 1] = 0; + /* inhibit the reset signal message */ + if (strncmp(mbr_errorbuf, "Got a reset signal", 18) == 0) { + mbr_errorbuf[0] = 0; + return 0; + } + /* don't consider this fatal at this point */ + error = 0; + } else { + /* EOF on stderr, assume mbrola died. */ + pid_t pid; + int status, len; + const char *msg; + char msgbuf[80]; + + pid = waitpid(mbr_pid, &status, WNOHANG); + if (!pid) { + msg = "mbrola closed stderr and did not exit"; + } else { + mbr_pid = 0; + if (WIFSIGNALED(status)) { + int sig = WTERMSIG(status); + snprintf(msgbuf, sizeof(msgbuf), + "mbrola died by signal %d", sig); + msg = msgbuf; + } else if (WIFEXITED(status)) { + int exst = WEXITSTATUS(status); + snprintf(msgbuf, sizeof(msgbuf), + "mbrola exited with status %d", exst); + msg = msgbuf; + } else { + msg = "mbrola died and wait status is weird"; + } + } + len = strlen(mbr_errorbuf); + if (!len) + snprintf(mbr_errorbuf, sizeof(mbr_errorbuf), "%s", msg); + else + snprintf(mbr_errorbuf+len, sizeof(mbr_errorbuf)-len, + ", (%s)", msg); + error = -1; + } + + log("mbrola error: \"%s\"", mbr_errorbuf); + return error; +} + +static int send_to_mbrola(const char *cmd) +{ + ssize_t result; + int len; + + if (!mbr_pid) + return -1; + + len = strlen(cmd); + result = write(mbr_cmd_fd, cmd, len); + + if (result == -1) { + int error = errno; + if (error == EPIPE && mbrola_has_errors()) { + return -1; + } else if (error == EAGAIN) { + result = 0; + } else { + err("write(): %s", strerror(error)); + return -1; + } + } + + if (result != len) { + struct datablock *data; + data = (struct datablock *)malloc(sizeof(*data) + len - result); + if (data) { + data->next = NULL; + data->done = 0; + data->size = len - result; + memcpy(data->buffer, cmd + result, len - result); + result = len; + if (!mbr_pending_data_head) + mbr_pending_data_head = data; + else + mbr_pending_data_tail->next = data; + mbr_pending_data_tail = data; + } + } + + return result; +} + +static int mbrola_is_idle(void) +{ + char *p; + char buffer[20]; /* looking for "12345 (mbrola) S" so 20 is plenty*/ + + /* look in /proc to determine if mbrola is still running or sleeping */ + if (lseek(mbr_proc_stat, 0, SEEK_SET) != 0) + return 0; + if (read(mbr_proc_stat, buffer, sizeof(buffer)) != sizeof(buffer)) + return 0; + p = (char *)memchr(buffer, ')', sizeof(buffer)); + if (!p || (unsigned)(p - buffer) >= sizeof(buffer) - 2) + return 0; + return (p[1] == ' ' && p[2] == 'S'); +} + +static ssize_t receive_from_mbrola(void *buffer, size_t bufsize) +{ + int result, wait = 1; + size_t cursize = 0; + + if (!mbr_pid) + return -1; + + do { + struct pollfd pollfd[3]; + nfds_t nfds = 0; + int idle; + + pollfd[0].fd = mbr_audio_fd; + pollfd[0].events = POLLIN; + nfds++; + + pollfd[1].fd = mbr_error_fd; + pollfd[1].events = POLLIN; + nfds++; + + if (mbr_pending_data_head) { + pollfd[2].fd = mbr_cmd_fd; + pollfd[2].events = POLLOUT; + nfds++; + } + + idle = mbrola_is_idle(); + result = poll(pollfd, nfds, idle ? 0 : wait); + if (result == -1) { + err("poll(): %s", strerror(errno)); + return -1; + } + if (result == 0) { + if (idle) { + mbr_state = MBR_IDLE; + break; + } else { + if (wait >= 5000 * (4-1)/4) { + mbr_state = MBR_WEDGED; + err("mbrola process is stalled"); + break; + } else { + wait *= 4; + continue; + } + } + } + wait = 1; + + if (pollfd[1].revents && mbrola_has_errors()) + return -1; + + if (mbr_pending_data_head && pollfd[2].revents) { + struct datablock *head = mbr_pending_data_head; + char *data = head->buffer + head->done; + int left = head->size - head->done; + result = write(mbr_cmd_fd, data, left); + if (result == -1) { + int error = errno; + if (error == EPIPE && mbrola_has_errors()) + return -1; + err("write(): %s", strerror(error)); + return -1; + } + if (result != left) { + head->done += result; + } else { + mbr_pending_data_head = head->next; + free(head); + if (!mbr_pending_data_head) + mbr_pending_data_tail = NULL; + else + continue; + } + } + + if (pollfd[0].revents) { + char *curpos = (char *)buffer + cursize; + size_t space = bufsize - cursize; + ssize_t obtained = read(mbr_audio_fd, curpos, space); + if (obtained == -1) { + err("read(): %s", strerror(errno)); + return -1; + } + cursize += obtained; + mbr_state = MBR_AUDIO; + } + } while (cursize < bufsize); + + return cursize; +} + +/* + * API functions. + */ + +int init_MBR(const char *voice_path) +{ + int error, result; + unsigned char wavhdr[45]; + + error = start_mbrola(voice_path); + if (error) + return -1; + + result = send_to_mbrola("#\n"); + if (result != 2) { + stop_mbrola(); + return -1; + } + + /* we should actually be getting only 44 bytes */ + result = receive_from_mbrola(wavhdr, 45); + if (result != 44) { + err("unable to get .wav header from mbrola"); + stop_mbrola(); + return -1; + } + + /* parse wavhdr to get mbrola voice samplerate */ + if (memcmp(wavhdr, "RIFF", 4) != 0 || + memcmp(wavhdr+8, "WAVEfmt ", 8) != 0) { + err("mbrola did not return a .wav header"); + stop_mbrola(); + return -1; + } + mbr_samplerate = wavhdr[24] + (wavhdr[25]<<8) + + (wavhdr[26]<<16) + (wavhdr[27]<<24); + //log("mbrola: voice samplerate = %d", mbr_samplerate); + + /* remember the voice path for setVolumeRatio_MBR() */ + if (mbr_voice_path != voice_path) { + free(mbr_voice_path); + mbr_voice_path = strdup(voice_path); + } + + return 0; +} + +void close_MBR(void) +{ + stop_mbrola(); + free_pending_data(); + free(mbr_voice_path); + mbr_voice_path = NULL; + mbr_volume = 1.0; +} + +int reset_MBR() +{ + int result, success = 1; + char dummybuf[4096]; + + if (mbr_state == MBR_IDLE) + return 1; + if (!mbr_pid) + return 0; + if (kill(mbr_pid, SIGUSR1) == -1) + success = 0; + free_pending_data(); + result = write(mbr_cmd_fd, "\n#\n", 3); + if (result != 3) + success = 0; + do { + result = read(mbr_audio_fd, dummybuf, sizeof(dummybuf)); + } while (result > 0); + if (result != -1 || errno != EAGAIN) + success = 0; + if (!mbrola_has_errors() && success) + mbr_state = MBR_IDLE; + return success; +} + +int read_MBR(void *buffer, int nb_samples) +{ + int result = receive_from_mbrola(buffer, nb_samples * 2); + if (result > 0) + result /= 2; + return result; +} + +int write_MBR(const char *data) +{ + mbr_state = MBR_NEWDATA; + return send_to_mbrola(data); +} + +int flush_MBR(void) +{ + return send_to_mbrola("\n#\n") == 3; +} + +int getFreq_MBR(void) +{ + return mbr_samplerate; +} + +void setVolumeRatio_MBR(float value) +{ + if (value == mbr_volume) + return; + mbr_volume = value; + if (mbr_state != MBR_IDLE) + return; + /* + * We have no choice but to kill and restart mbrola with + * the new argument here. + */ + stop_mbrola(); + init_MBR(mbr_voice_path); +} + +int lastErrorStr_MBR(char *buffer, int bufsize) +{ + int result = snprintf(buffer, bufsize, "%s", mbr_errorbuf); + return result >= bufsize ? (bufsize - 1) : result; +} + +void resetError_MBR(void) +{ + mbr_errorbuf[0] = 0; +} diff --git a/src/mbrowrap.h b/src/mbrowrap.h new file mode 100644 index 00000000..0409507c --- /dev/null +++ b/src/mbrowrap.h @@ -0,0 +1,108 @@ +/* + * mbrowrap -- A wrapper library around the mbrola binary + * providing a subset of the API from the Windows mbrola DLL. + * + * Copyright (C) 2010 by Nicolas Pitre + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + */ + +#ifndef MBROWRAP_H +#define MBROWRAP_H + +#ifdef __cplusplus +extern "C" +{ +#endif + +/* + * Initialize mbrola. The 'voice_path' argument must contain the + * path and file name to the mbrola voice database to be used. Returned + * value is 0 on success, or an error code otherwise (currently only -1 + * is returned. If not successful, lastErrorStr_MBR() will provide the + * error reason. If this is successful, then close_MBR() must be called + * before init_MBR() can be called again. + */ +int init_MBR(const char *voice_path); + +/* + * Stop mbrola and release any resources. It is necessary to call + * this after a successful call to init_MBR() before init_MBR() can be + * called again. + */ +void close_MBR(void); + +/* + * Stop any ongoing processing and flush all buffers. After this call + * any synthesis request will start afresh. A non-zero value is returned + * on success, or 0 on failure. If not successful, lastErrorStr_MBR() will + * provide the error reason. + */ +int reset_MBR(); + +/* + * Return at most 'nb_samples' audio samples into 'buffer'. The returned + * value is the actual number of samples returned, or -1 on error. + * If not successful, lastErrorStr_MBR() will provide the error reason. + * Samples are always 16-bit little endian. + */ +int read_MBR(void *buffer, int nb_samples); + +/* + * Write a NULL terminated string of phoneme in the input buffer. + * Return the number of chars actually written, or -1 on error. + * If not successful, lastErrorStr_MBR() will provide the error reason. + */ +int write_MBR(const char *data); + +/* + * Send a flush command to the mbrola input stream. + * This is currently similar to write_MBR("#\n"). Return 1 on success + * or 0 on failure. If not successful, lastErrorStr_MBR() will provide + * the error reason. + */ +int flush_MBR(void); + +/* + * Return the audio sample frequency of the used voice database. + */ +int getFreq_MBR(void); + +/* + * Overall volume. + */ +void setVolumeRatio_MBR(float value); + +/* + * Copy into 'buffer' at most 'bufsize' bytes from the latest error + * message. This may also contain non-fatal errors from mbrola. The + * returned value is the actual number of bytes copied. When no error + * message is pending then an empty string is returned. Consecutive + * calls to lastErrorStr_MBR() will return the same message unless it + * is explicitly cleared with resetError_MBR(). + */ +int lastErrorStr_MBR(char *buffer, int bufsize); + +/* + * Clear any pending error message. + */ +void resetError_MBR(void); + +/* + * Tolerance to missing diphones (always active so this is ignored) + */ +static inline void setNoError_MBR(int no_error) { } + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/src/setlengths.cpp b/src/setlengths.cpp index 8261813b..43bd3c7c 100644 --- a/src/setlengths.cpp +++ b/src/setlengths.cpp @@ -140,7 +140,6 @@ void SetSpeed(int control) int s1; int wpm; int wpm2; - int test=0; speed.loud_consonants = 0; speed.min_sample_len = 450; @@ -172,43 +171,6 @@ void SetSpeed(int control) speed.loud_consonants = (wpm - 360) / 8; } -#ifdef deleted - if(wpm >= 450) - { - // TEST - speed1 = 6; - speed2 = speed3 = 5; - speed.pause_factor = 12; - speed.clause_pause_factor = 15; - speed.wav_factor = 70; - speed.lenmod_factor = 53; - speed.min_sample_len = 400; - return; - } - if(wpm > 390) - { - // TEST - speed1 = 6; - speed2 = speed3 = 5; - speed.pause_factor = 13; - speed.clause_pause_factor = 15; - - if(wpm >= 440) - { - speed.wav_factor = 72 - (wpm - 440)/4; - speed.lenmod_factor = 60 - (wpm - 440)/2; - speed.min_sample_len = 420 - (wpm - 440); - } - else - { - speed.wav_factor = 74; - speed.lenmod_factor = 65 - (wpm - 400)/10; - speed.min_sample_len = 450 - (wpm - 400)/2; - } - return; - } -#endif - wpm2 = wpm; if(wpm > 359) wpm2 = 359; if(wpm < 80) wpm2 = 80; @@ -269,9 +231,6 @@ void SetSpeed(int control) speed.min_sample_len = 420 - (wpm - 440); } - if(test > 0) - speed.wav_factor = test; - speed.pause_factor = (256 * s1)/115; // full speed adjustment, used for pause length speed.clause_pause_factor = 0; diff --git a/src/speak.cpp b/src/speak.cpp index 7f100867..144aeb5f 100644 --- a/src/speak.cpp +++ b/src/speak.cpp @@ -98,8 +98,10 @@ static const char *help_text = "\t directory. specifies the language\n" "--path=\"\"\n" "\t Specifies the directory containing the espeak-data directory\n" +"--pho\n" +"\t Write mbrola phoneme data (.pho) to stdout, or to the file in --phonout\n" "--phonout=\"\"\n" -"\t Write output from -x -X commands, and mbrola phoneme data, to this file\n" +"\t Write phoneme output from -x -X and --pho to this file\n" "--punct=\"\"\n" "\t Speak the names of punctuation characters during speaking. If\n" "\t = is omitted, all punctuation is spoken.\n" @@ -214,7 +216,9 @@ void DisplayVoices(FILE *f_out, char *language) } // end of DisplayVoices - +void WVoiceChanged(voice_t *wvoice) +{ +} static int OpenWaveFile(const char *path, int rate) //================================================= @@ -472,7 +476,8 @@ int main (int argc, char **argv) {"stdout", no_argument, 0, 0x105}, {"split", optional_argument, 0, 0x106}, {"path", required_argument, 0, 0x107}, - {"phonout", required_argument, 0, 0x108}, + {"phonout", required_argument, 0, 0x108}, + {"pho", no_argument, 0, 0x109}, {0, 0, 0, 0} }; @@ -702,6 +707,10 @@ int main (int argc, char **argv) } break; + case 0x109: // --pho + option_mbrola_phonemes = 8; + break; + default: exit(0); } diff --git a/src/speak_lib.cpp b/src/speak_lib.cpp index 77428ad6..9683f3f1 100644 --- a/src/speak_lib.cpp +++ b/src/speak_lib.cpp @@ -59,6 +59,9 @@ static unsigned int my_unique_identifier=0; static void* my_user_data=NULL; static espeak_AUDIO_OUTPUT my_mode=AUDIO_OUTPUT_SYNCHRONOUS; static int synchronous_mode = 1; +static int out_samplerate = 0; +static int voice_samplerate = 22050; + t_espeak_callback* synth_callback = NULL; int (* uri_callback)(int, const char *, const char *) = NULL; int (* phoneme_callback)(const char *) = NULL; @@ -66,6 +69,13 @@ int (* phoneme_callback)(const char *) = NULL; char path_home[N_PATH_HOME]; // this is the espeak-data directory +void WVoiceChanged(voice_t *wvoice) +{//================================= +// Voice change in wavegen + voice_samplerate = wvoice->samplerate; +} + + #ifdef USE_ASYNC static int dispatch_audio(short* outbuf, int length, espeak_EVENT* event) @@ -85,6 +95,34 @@ static int dispatch_audio(short* outbuf, int length, espeak_EVENT* event) { case AUDIO_OUTPUT_PLAYBACK: { + int event_type=0; + int event_data=0; + if(event) + { + event_type = event->type; + event_data = event->id.number; + } + + if(event_type == espeakEVENT_SAMPLERATE) + { + voice_samplerate = event->id.number; + + if(out_samplerate != voice_samplerate) + { + if(out_samplerate != 0) + { + // sound was previously open with a different sample rate + wave_close(my_audio); + sleep(1); + } + out_samplerate = voice_samplerate; + wave_init(voice_samplerate); + wave_set_callback_is_output_enabled( fifo_is_command_enabled); + my_audio = wave_open("alsa"); + event_init(); + } + } + if (outbuf && length && a_wave_can_be_played) { wave_write (my_audio, (char*)outbuf, 2*length); @@ -220,17 +258,13 @@ static void select_output(espeak_AUDIO_OUTPUT output_type) my_audio = NULL; synchronous_mode = 1; option_waveout = 1; // inhibit portaudio callback from wavegen.cpp + out_samplerate = 0; switch(my_mode) { case AUDIO_OUTPUT_PLAYBACK: + // wave_init() is now called just before the first wave_write() synchronous_mode = 0; -#ifdef USE_ASYNC - wave_init(); - wave_set_callback_is_output_enabled( fifo_is_command_enabled); - my_audio = wave_open("alsa"); - event_init(); -#endif break; case AUDIO_OUTPUT_RETRIEVAL: @@ -734,19 +768,21 @@ ENTER("espeak_Initialize"); return(EE_INTERNAL_ERROR); option_phonemes = 0; + option_mbrola_phonemes = 0; option_phoneme_events = (options & 1); - SetVoiceByName("default"); + VoiceReset(0); +// SetVoiceByName("default"); for(param=0; param @@ -64,7 +60,7 @@ PROCVV reset_MBR; PROCIV lastError_MBR; PROCVCI lastErrorStr_MBR; PROCVI setNoError_MBR; -PROCVI setFreq_MBR; +PROCIV getFreq_MBR; PROCVF setVolumeRatio_MBR; @@ -103,13 +99,11 @@ void unload_MBR() } #endif // windows -#endif // USE_MBROLA_LIB static MBROLA_TAB *mbrola_tab = NULL; static int mbrola_control = 0; - - +int option_mbrola_phonemes; espeak_ERROR LoadMbrolaTable(const char *mbrola_voice, const char *phtrans, int srate) @@ -133,37 +127,35 @@ espeak_ERROR LoadMbrolaTable(const char *mbrola_voice, const char *phtrans, int } sprintf(path,"%s/mbrola/%s",path_home,mbrola_voice); -#ifdef USE_MBROLA_LIB +#ifdef PLATFORM_POSIX + if(GetFileLength(path) <= 0) + { + // mbrola voice file not found, look in /usr/share + sprintf(path,"/usr/share/mbrola/%s",mbrola_voice); + } +#endif #ifdef PLATFORM_WINDOWS if(load_MBR() == FALSE) // load mbrola.dll return(EE_INTERNAL_ERROR); +#endif if(init_MBR(path) != 0) // initialise the required mbrola voice return(EE_NOT_FOUND); setNoError_MBR(1); // don't stop on phoneme errors -#else - mb_handle = mbrolib_init(srate); - mbrolib_parameter m_parameters; - - if(mb_handle == NULL) - return(EE_INTERNAL_ERROR); - - MBROLIB_ERROR a_status = mbrolib_set_voice(mb_handle, mbrola_voice); - if(a_status != MBROLIB_OK) - return(EE_NOT_FOUND); -#endif // not windows -#endif // USE_MBROLA_LIB // read eSpeak's mbrola phoneme translation data, eg. en1_phtrans sprintf(path,"%s/mbrola_ph/%s",path_home,phtrans); size = GetFileLength(path); - if((f_in = fopen(path,"r")) == NULL) + if((f_in = fopen(path,"r")) == NULL) { + close_MBR(); return(EE_NOT_FOUND); + } if((mbrola_tab = (MBROLA_TAB *)realloc(mbrola_tab,size)) == NULL) { fclose(f_in); + close_MBR(); return(EE_INTERNAL_ERROR); } @@ -176,26 +168,16 @@ espeak_ERROR LoadMbrolaTable(const char *mbrola_voice, const char *phtrans, int fread(mbrola_tab,size,1,f_in); fclose(f_in); - -#ifdef USE_MBROLA_LIB -#ifdef PLATFORM_WINDOWS setVolumeRatio_MBR((float)(mbrola_control & 0xff) /16.0f); -#else - mbrolib_get_parameter(mb_handle,&m_parameters); - m_parameters.ignore_error = 1; - m_parameters.volume_ratio = (float)(mbrola_control & 0xff) /16.0; - mbrolib_set_parameter(mb_handle,&m_parameters); -#endif // not windows -#endif // USE_MBROLA_LIB - - option_quiet = 1; +// srate = getFreq_MBR(); samplerate = srate; if(srate == 22050) SetParameter(espeakVOICETYPE,0,0); else SetParameter(espeakVOICETYPE,1,0); strcpy(mbrola_name,mbrola_voice); - mbrola_delay = 3800; // improve synchronization of events +// mbrola_delay = 3800; // improve synchronization of events + mbrola_delay = 1000; // improve synchronization of events return(EE_OK); } // end of LoadMbrolaTable @@ -383,155 +365,10 @@ static char *WritePitch(int env, int pitch1, int pitch2, int split, int final) } // end of WritePitch -#ifdef USE_MBROLA_LIB - -static void MbrolaMarker(int type, int char_posn, int length, int value) -{//===================================================================== - - MarkerEvent(type,(char_posn & 0xffffff) | (length << 24),value,outbuf); - -} - - -static void MbrolaEmbedded(int &embix, int sourceix) -{//================================================= - // There were embedded commands in the text at this point - unsigned int word; // bit 7=last command for this word, bits 5,6 sign, bits 0-4 command - unsigned int value; - int command; - int sign=0; - - do { - word = embedded_list[embix++]; - value = word >> 8; - command = word & 0x1f; - - if((word & 0x60) == 0x60) - sign = -1; - else - if((word & 0x60) == 0x40) - sign = 1; - - if(command < N_EMBEDDED_VALUES) - { - if(sign == 0) - embedded_value[command] = value; - else - embedded_value[command] += (value * sign); - } - - switch(command & 0x1f) - { - case EMBED_M: // named marker - MbrolaMarker(espeakEVENT_MARK, (sourceix & 0x7ff) + clause_start_char, 0, value); - break; - } - } while ((word & 0x80) == 0); -} - - -#ifdef PLATFORM_WINDOWS -static int MbrolaSynth(char *p_mbrola) -{//=================================== -// p_mbrola is a string of mbrola pho lines - Windows - int len; - int finished; - int result=0; - - if(synth_callback == NULL) - return(1); - - if(p_mbrola == NULL) - flush_MBR(); - else - result = write_MBR(p_mbrola); - - - finished = 0; - while(!finished && ((len = read_MBR((short *)outbuf, outbuf_size/2)) > 0)) - { - out_ptr = outbuf + len*2; - - if(event_list) - { - event_list[event_list_ix].type = espeakEVENT_LIST_TERMINATED; // indicates end of event list - event_list[event_list_ix].user_data = 0; - } - count_samples += len; - finished = synth_callback((short *)outbuf, len, event_list); - event_list_ix=0; - } - - if(finished) - { - // cancelled by user, discard any unused mbrola speech - flush_MBR(); - while((len = read_MBR((short *)outbuf, outbuf_size/2)) > 0); - } - return(finished); -} // end of SynthMbrola -#else - -static int MbrolaSynth(char *p_mbrola) -{//=================================== -// p_mbrola is a string of mbrola pho lines - Linux - -// This is wrong -// It must be called from WavegenFill() - - int len; - int finished; - int result=0; - - if(synth_callback == NULL) - return(1); - - if(p_mbrola == NULL) - mbrolib_flush(mb_handle); - else - result = mbrolib_write(mb_handle,p_mbrola,strlen(p_mbrola)); - - - finished = 0; - while(!finished && (mbrolib_read(mb_handle, (short *)out_ptr, (out_end - out_ptr)/2, &len) == MBROLIB_OK)) - { - if(len == 0) - break; - - out_ptr += (len*2); - - if(event_list) - { - event_list[event_list_ix].type = espeakEVENT_LIST_TERMINATED; // indicates end of event list - event_list[event_list_ix].user_data = 0; - } - count_samples += len; - finished = synth_callback((short *)outbuf, len, event_list); - event_list_ix=0; - } - - if(finished) - { - // cancelled by user, discard any unused mbrola speech - mbrolib_flush(mb_handle); - while(mbrolib_read(mb_handle, (short *)outbuf, outbuf_size/2, &len) == MBROLIB_OK) - { - if(len == 0) - break; - } - } - return(finished); -} // end of SynthMbrola -#endif // not windows -#endif // USE_MBROLA_LIB - - - -void MbrolaTranslate(PHONEME_LIST *plist, int n_phonemes, FILE *f_mbrola) -{//====================================================================== +int MbrolaTranslate(PHONEME_LIST *plist, int n_phonemes, int resume, FILE *f_mbrola) +{//================================================================================= // Generate a mbrola pho file unsigned int name; - int phix; int len; int len1; PHONEME_TAB *ph; @@ -552,21 +389,21 @@ void MbrolaTranslate(PHONEME_LIST *plist, int n_phonemes, FILE *f_mbrola) char buf[80]; char mbr_buf[120]; -#ifdef USE_MBROLA_LIB - int embedded_ix=0; - int word_count=0; + static int phix; + static int embedded_ix; + static int word_count; - event_list_ix = 0; - out_ptr = outbuf; -#ifdef PLATFORM_WINDOWS - setNoError_MBR(1); // don't stop on phoneme errors -#endif -#else -// fprintf(f_mbrola,";; v=%.2f\n",(float)(mbrola_control & 0xff)/16.0); // ;; v= has no effect on mbrola -#endif + if (!resume) { + phix = 1; + embedded_ix = 0; + word_count = 0; + } - for(phix=1; phix < n_phonemes; phix++) + while (phix < n_phonemes) { + if (WcmdqFree() < MIN_WCMDQ) + return 1; + mbr_buf[0] = 0; p = &plist[phix]; @@ -576,24 +413,24 @@ void MbrolaTranslate(PHONEME_LIST *plist, int n_phonemes, FILE *f_mbrola) ph_prev = plist[phix-1].ph; ph_next = plist[phix+1].ph; -#ifdef USE_MBROLA_LIB if(p->synthflags & SFLAG_EMBEDDED) { - MbrolaEmbedded(embedded_ix, p->sourceix); + DoEmbedded(embedded_ix, p->sourceix); } - if(p->newword & 4) - MbrolaMarker(espeakEVENT_SENTENCE, (p->sourceix & 0x7ff) + clause_start_char, 0, count_sentences); + if(p->newword & 4) + DoMarker(espeakEVENT_SENTENCE, (p->sourceix & 0x7ff) + clause_start_char, 0, count_sentences); if(p->newword & 1) - MbrolaMarker(espeakEVENT_WORD, (p->sourceix & 0x7ff) + clause_start_char, p->sourceix >> 11, clause_start_word + word_count++); -#endif + DoMarker(espeakEVENT_WORD, (p->sourceix & 0x7ff) + clause_start_char, p->sourceix >> 11, clause_start_word + word_count++); name = GetMbrName(p,ph,ph_prev,ph_next,&name2,&len_percent,&control); if(control & 1) phix++; - if(name == 0) + if(name == 0) { + phix++; continue; // ignore this phoneme + } if((ph->type == phPAUSE) && (name == ph->mnemonic)) { @@ -607,9 +444,7 @@ void MbrolaTranslate(PHONEME_LIST *plist, int n_phonemes, FILE *f_mbrola) else len = (80 * speed.wav_factor)/256; -#ifdef USE_MBROLA_LIB - MbrolaMarker(espeakEVENT_PHONEME, (p->sourceix & 0x7ff) + clause_start_char, 0, ph->mnemonic); -#endif + DoMarker(espeakEVENT_PHONEME, (p->sourceix & 0x7ff) + clause_start_char, 0, ph->mnemonic); sprintf(buf,"%s\t",WordToString(name)); strcat(mbr_buf,buf); @@ -720,6 +555,7 @@ void MbrolaTranslate(PHONEME_LIST *plist, int n_phonemes, FILE *f_mbrola) if(pause) { + len += PauseLength(pause,0); sprintf(buf,"_ \t%d\n",PauseLength(pause,0)); strcat(mbr_buf,buf); pause = 0; @@ -731,39 +567,78 @@ void MbrolaTranslate(PHONEME_LIST *plist, int n_phonemes, FILE *f_mbrola) } else { -#ifdef USE_MBROLA_LIB - if(MbrolaSynth(mbr_buf) != 0) - return; -#endif + int res = write_MBR(mbr_buf); + if (res < 0) + return 0; /* don't get stuck on error */ + if (res == 0) + return 1; + wcmdq[wcmdq_tail][0] = WCMD_MBROLA_DATA; + wcmdq[wcmdq_tail][1] = len; + WcmdqInc(); } + + phix++; } -#ifdef USE_MBROLA_LIB - MbrolaSynth(NULL); -#endif + if(!f_mbrola) + { + flush_MBR(); + + // flush the mbrola output buffer + wcmdq[wcmdq_tail][0] = WCMD_MBROLA_DATA; + wcmdq[wcmdq_tail][1] = 500; + WcmdqInc(); + } + + return 0; } // end of MbrolaTranslate -#ifdef TEST_MBROLA - -static PHONEME_LIST mbrola_phlist; -static int mbrola_n_ph; -static int mbrola_phix; - - -int MbrolaFill(int fill_zeros) -{//=========================== -} - int MbrolaGenerate(PHONEME_LIST *phoneme_list, int *n_ph, int resume) {//================================================================== - if(resume == 0) + FILE *f_mbrola = NULL; + + if(*n_ph == 0) + return(0); + + if(option_mbrola_phonemes) { - mbrola_phlist = phoneme_list; - mbrola_n_ph = n_ph; - mbrola_phix = 0; + // send mbrola data to a file, not to the mbrola library + f_mbrola = f_trans; } - resume(0); // finished phoneme list + int again = MbrolaTranslate(phoneme_list, *n_ph, resume, f_mbrola); + if (!again) + *n_ph = 0; + return again; +} + + +int MbrolaFill(int length, int resume) +{//=================================== +// Read audio data from Mbrola (length is in milisecs) + + static int n_samples; + int req_samples, result; + + if (!resume) + n_samples = samplerate * length / 1000; + + req_samples = (out_end - out_ptr)/2; + if (req_samples > n_samples) + req_samples = n_samples; + result = read_MBR((short *)out_ptr, req_samples); + if (result <= 0) + return 0; + out_ptr += result*2; + n_samples -= result; + return n_samples ? 1 : 0; +} + + +void MbrolaReset(void) +{//=================== +// Reset the Mbrola engine and flush the pending audio + + reset_MBR(); } -#endif diff --git a/src/synthdata.cpp b/src/synthdata.cpp index da4f5b20..5334e5a9 100644 --- a/src/synthdata.cpp +++ b/src/synthdata.cpp @@ -35,7 +35,7 @@ #include "translate.h" #include "wave.h" -const char *version_string = "1.43.46 20.Jun.10"; +const char *version_string = "1.43.48 28.Jun.10"; const int version_phdata = 0x014342; int option_device_number = -1; diff --git a/src/synthesize.cpp b/src/synthesize.cpp index ed05b3e7..7f739401 100644 --- a/src/synthesize.cpp +++ b/src/synthesize.cpp @@ -135,7 +135,7 @@ static void EndPitch(int voice_break) syllable_centre = -1; memset(vowel_transition,0,sizeof(vowel_transition)); } -} // end of Synthesize::EndPitch +} // end of EndPitch @@ -152,7 +152,7 @@ static void DoAmplitude(int amp, unsigned char *amp_env) q[2] = (long)amp_env; q[3] = amp; WcmdqInc(); -} // end of Synthesize::DoAmplitude +} // end of DoAmplitude @@ -181,7 +181,7 @@ static void DoPitch(unsigned char *env, int pitch1, int pitch2) q[2] = (long)env; q[3] = (pitch1 << 16) + pitch2; WcmdqInc(); -} // end of Synthesize::DoPitch +} // end of DoPitch @@ -223,7 +223,7 @@ static void DoPause(int length, int control) wcmdq[wcmdq_tail][1] = len; WcmdqInc(); last_frame = NULL; -} // end of Synthesize::DoPause +} // end of DoPause extern int seq_len_adjust; // temporary fix to advance the start point for playing the wav sample @@ -1172,8 +1172,8 @@ if(which==1) -static void DoMarker(int type, int char_posn, int length, int value) -{//================================================================= +void DoMarker(int type, int char_posn, int length, int value) +{//========================================================== // This could be used to return an index to the word currently being spoken // Type 1=word, 2=sentence, 3=named marker, 4=play audio, 5=end wcmdq[wcmdq_tail][0] = WCMD_MARKER; @@ -1182,7 +1182,7 @@ static void DoMarker(int type, int char_posn, int length, int value) wcmdq[wcmdq_tail][3] = value; WcmdqInc(); -} // end of Synthesize::DoMarker +} // end of DoMarker void DoVoiceChange(voice_t *v) @@ -1198,8 +1198,8 @@ void DoVoiceChange(voice_t *v) } -static void DoEmbedded(int &embix, int sourceix) -{//============================================= +void DoEmbedded(int &embix, int sourceix) +{//====================================== // There were embedded commands in the text at this point unsigned int word; // bit 7=last command for this word, bits 5,6 sign, bits 0-4 command unsigned int value; @@ -1279,14 +1279,12 @@ int Generate(PHONEME_LIST *phoneme_list, int *n_ph, int resume) PHONEME_DATA phdata_tone; FMT_PARAMS fmtp; -#ifdef TEST_MBROLA - if(mbrola_name[0] != 0) - return(MbrolaGenerate(phoneme_list,n_ph,resume)); -#endif - if(option_quiet) return(0); + if(mbrola_name[0] != 0) + return(MbrolaGenerate(phoneme_list,n_ph,resume)); + if(resume == 0) { ix = 1; @@ -1873,20 +1871,6 @@ int SpeakNextClause(FILE *f_in, const void *text_in, int control) return(1); } - if(mbrola_name[0] != 0) - { -#ifdef USE_MBROLA_LIB - MbrolaTranslate(phoneme_list,n_phoneme_list,NULL); -#else - { - FILE *f_mbrola; - if((f_mbrola = f_trans) == stderr) - f_mbrola = stdout; - MbrolaTranslate(phoneme_list,n_phoneme_list,f_mbrola); - } -#endif - } - Generate(phoneme_list,&n_phoneme_list,0); WavegenOpenSound(); diff --git a/src/synthesize.h b/src/synthesize.h index e87178c2..29438122 100644 --- a/src/synthesize.h +++ b/src/synthesize.h @@ -462,6 +462,7 @@ extern unsigned char pitch_adjust_tab[MAX_PITCH_VALUE+1]; #define WCMD_MARKER 10 #define WCMD_VOICE 11 #define WCMD_EMBEDDED 12 +#define WCMD_MBROLA_DATA 13 #define N_WCMDQ 160 @@ -557,8 +558,12 @@ espeak_ERROR SetVoiceByName(const char *name); espeak_ERROR SetVoiceByProperties(espeak_VOICE *voice_selector); espeak_ERROR LoadMbrolaTable(const char *mbrola_voice, const char *phtrans, int srate); void SetParameter(int parameter, int value, int relative); -void MbrolaTranslate(PHONEME_LIST *plist, int n_phonemes, FILE *f_mbrola); -//int MbrolaSynth(char *p_mbrola); +int MbrolaTranslate(PHONEME_LIST *plist, int n_phonemes, int resume, FILE *f_mbrola); +int MbrolaGenerate(PHONEME_LIST *phoneme_list, int *n_ph, int resume); +int MbrolaFill(int length, int resume); +void MbrolaReset(void); +void DoEmbedded(int &embix, int sourceix); +void DoMarker(int type, int char_posn, int length, int value); //int DoSample(PHONEME_TAB *ph1, PHONEME_TAB *ph2, int which, int length_mod, int amp); int DoSample3(PHONEME_DATA *phdata, int length_mod, int amp); int DoSpect2(PHONEME_TAB *this_ph, int which, FMT_PARAMS *fmt_params, PHONEME_LIST *plist, int modulation); diff --git a/src/translate.h b/src/translate.h index b4f0b1d3..f3bbd0e9 100644 --- a/src/translate.h +++ b/src/translate.h @@ -545,6 +545,7 @@ extern int option_tone_flags; extern int option_waveout; extern int option_quiet; extern int option_phonemes; +extern int option_mbrola_phonemes; extern int option_phoneme_events; extern int option_linelength; // treat lines shorter than this as end-of-clause extern int option_multibyte; diff --git a/src/voice.h b/src/voice.h index 3f842c38..75c9337a 100644 --- a/src/voice.h +++ b/src/voice.h @@ -41,6 +41,7 @@ typedef struct { int formant_factor; // adjust nominal formant frequencies by this because of the voice's pitch (256ths) int consonant_amp; // amplitude of unvoiced consonants int consonant_ampv; // amplitude of the noise component of voiced consonants + int samplerate; int klattv[8]; // parameters used by Wavegen @@ -77,6 +78,8 @@ espeak_VOICE *SelectVoiceByName(espeak_VOICE **voices, const char *name); voice_t *LoadVoice(const char *voice_name, int control); voice_t *LoadVoiceVariant(const char *voice_name, int variant); void DoVoiceChange(voice_t *v); +void WVoiceChanged(voice_t *wvoice); void WavegenSetVoice(voice_t *v); void ReadTonePoints(char *string, int *tone_pts); +void VoiceReset(int control); diff --git a/src/voices.cpp b/src/voices.cpp index 5e519f15..40200de2 100644 --- a/src/voices.cpp +++ b/src/voices.cpp @@ -408,6 +408,7 @@ void VoiceReset(int tone_only) voice->voicing = 64; voice->consonant_amp = 100; voice->consonant_ampv = 100; + voice->samplerate = 22050; memset(voice->klattv,0,sizeof(voice->klattv)); memset(speed.fast_settings,0,sizeof(speed.fast_settings)); @@ -921,6 +922,7 @@ voice_t *LoadVoice(const char *vname, int control) phtrans[0] = 0; sscanf(p,"%s %s %d",name,phtrans,&srate); LoadMbrolaTable(name,phtrans,srate); + voice->samplerate = srate; } break; diff --git a/src/wave.cpp b/src/wave.cpp index 0cef7467..56602be3 100644 --- a/src/wave.cpp +++ b/src/wave.cpp @@ -56,15 +56,16 @@ enum {ONE_BILLION=1000000000}; static t_wave_callback* my_callback_is_output_enabled=NULL; #define N_WAV_BUF 10 -#define SAMPLE_RATE 22050 +#define MAX_SAMPLE_RATE 22050 #define FRAMES_PER_BUFFER 512 -#define BUFFER_LENGTH (SAMPLE_RATE*2*sizeof(uint16_t)) -#define THRESHOLD (BUFFER_LENGTH/5) +#define BUFFER_LENGTH (MAX_SAMPLE_RATE*2*sizeof(uint16_t)) +//#define THRESHOLD (BUFFER_LENGTH/5) static char myBuffer[BUFFER_LENGTH]; static char* myRead=NULL; static char* myWrite=NULL; static int out_channels=1; static int my_stream_could_start=0; +static int wave_samplerate; static int mInCallbackFinishedState = false; #if (USE_PORTAUDIO == 18) @@ -335,7 +336,7 @@ static int wave_open_sound() out_channels = 1; #if USE_PORTAUDIO == 18 - // err = Pa_OpenDefaultStream(&pa_stream,0,1,paInt16,SAMPLE_RATE,FRAMES_PER_BUFFER,N_WAV_BUF,pa_callback,(void *)userdata); + // err = Pa_OpenDefaultStream(&pa_stream,0,1,paInt16,wave_samplerate,FRAMES_PER_BUFFER,N_WAV_BUF,pa_callback,(void *)userdata); PaDeviceID playbackDevice = Pa_GetDefaultOutputDeviceID(); @@ -351,7 +352,7 @@ static int wave_open_sound() paInt16, NULL, /* general parameters */ - SAMPLE_RATE, FRAMES_PER_BUFFER, 0, + wave_samplerate, FRAMES_PER_BUFFER, 0, //paClipOff | paDitherOff, paNoFlag, pa_callback, (void *)userdata); @@ -376,12 +377,12 @@ static int wave_open_sound() paInt16, NULL, /* general parameters */ - SAMPLE_RATE, FRAMES_PER_BUFFER, 0, + wave_samplerate, FRAMES_PER_BUFFER, 0, //paClipOff | paDitherOff, paNoFlag, pa_callback, (void *)userdata); // err = Pa_OpenDefaultStream(&pa_stream,0,2,paInt16, -// SAMPLE_RATE, +// wave_samplerate, // FRAMES_PER_BUFFER, // N_WAV_BUF,pa_callback,(void *)userdata); SHOW("wave_open_sound > Pa_OpenDefaultStream(2): err=%d (%s)\n",err, Pa_GetErrorText(err)); @@ -395,7 +396,7 @@ static int wave_open_sound() &pa_stream, NULL, /* no input */ &myOutputParameters, - SAMPLE_RATE, + wave_samplerate, framesPerBuffer, paNoFlag, // paClipOff | paDitherOff, @@ -410,7 +411,7 @@ static int wave_open_sound() &pa_stream, NULL, /* no input */ &myOutputParameters, - SAMPLE_RATE, + wave_samplerate, framesPerBuffer, paNoFlag, // paClipOff | paDitherOff, @@ -427,14 +428,14 @@ static int wave_open_sound() &pa_stream, NULL, /* no input */ &myOutputParameters, - SAMPLE_RATE, + wave_samplerate, framesPerBuffer, paNoFlag, // paClipOff | paDitherOff, pa_callback, (void *)userdata); - // err = Pa_OpenDefaultStream(&pa_stream,0,2,paInt16,(double)SAMPLE_RATE,FRAMES_PER_BUFFER,pa_callback,(void *)userdata); + // err = Pa_OpenDefaultStream(&pa_stream,0,2,paInt16,(double)wave_samplerate,FRAMES_PER_BUFFER,pa_callback,(void *)userdata); } mInCallbackFinishedState = false; #endif @@ -526,7 +527,7 @@ static void select_device(const char* the_api) defaultAlsaIndex = hostInfo->defaultOutputDevice; const PaDeviceInfo *deviceInfo = Pa_GetDeviceInfo( defaultAlsaIndex ); update_output_parameters(defaultAlsaIndex, deviceInfo); - if (Pa_IsFormatSupported(NULL, &myOutputParameters, SAMPLE_RATE) == 0) + if (Pa_IsFormatSupported(NULL, &myOutputParameters, wave_samplerate) == 0) { SHOW( "select_device > ALSA (default), name=%s (#%d)\n", deviceInfo->name, defaultAlsaIndex); selectedIndex = defaultAlsaIndex; @@ -541,7 +542,7 @@ static void select_device(const char* the_api) update_output_parameters(i, deviceInfo); - if (Pa_IsFormatSupported(NULL, &myOutputParameters, SAMPLE_RATE) == 0) + if (Pa_IsFormatSupported(NULL, &myOutputParameters, wave_samplerate) == 0) { SHOW( "select_device > ALSA, name=%s (#%d)\n", deviceInfo->name, i); @@ -613,12 +614,13 @@ void wave_set_callback_is_output_enabled(t_wave_callback* cb) // //samplerate,out_ptr); +// WVoiceChanged(wvoice); } @@ -1797,11 +1801,6 @@ int WavegenFill(int fill_zeros) static int resume=0; static int echo_complete=0; -#ifdef TEST_MBROLA - if(mbrola_name[0] != 0) - return(MbrolaFill(fill_zeros)); -#endif - while(out_ptr < out_end) { if(WcmdqUsed() <= 0) @@ -1904,6 +1903,10 @@ int WavegenFill(int fill_zeros) case WCMD_EMBEDDED: SetEmbedded(q[1],q[2]); break; + + case WCMD_MBROLA_DATA: + result = MbrolaFill(length, resume); + break; } if(result==0)