From ad4950c203e9999c501a40a4c0807bee8df3316b Mon Sep 17 00:00:00 2001 From: jonsd Date: Mon, 11 Jun 2007 12:52:34 +0000 Subject: [PATCH] [1.26.02] SelectVoice(), make voice_variants[] static. lang=de many translation improvements. TranslateWord(), check that a prefix rule is still allowed after a suffix has been removed. git-svn-id: https://espeak.svn.sourceforge.net/svnroot/espeak/trunk@43 d46cf337-b52f-0410-862d-fd96e6ae7743 --- dictsource/de_list | 69 +++-- dictsource/de_rules | 402 +++++++++++++++++++++++------ dictsource/dict_phonemes | 14 +- dictsource/hr_rules | 5 +- phsource/compile_report | 4 +- phsource/ph_german | 17 +- src/compiledict.cpp | 6 +- src/dictionary.cpp | 22 +- src/extras.cpp | 31 ++- src/synthdata.cpp | 2 +- src/translate.cpp | 40 ++- src/translate.h | 2 + src/voices.cpp | 2 +- windows/windows_sapi/ttsengobj.cpp | 2 +- 14 files changed, 501 insertions(+), 117 deletions(-) diff --git a/dictsource/de_list b/dictsource/de_list index fc51bfdc..dea4360d 100644 --- a/dictsource/de_list +++ b/dictsource/de_list @@ -91,7 +91,7 @@ die %di: das %das den %de:n dem %de:m -des %dEz +des %dEs derselb $2 desselb dEss'Elb @@ -120,9 +120,10 @@ deren ,dE*@n $brk ab ap $u+ $brk an an $u+ $brk am am $u+ $brk -auf aUf $u+ $brk +auf aUf $u+ $pause aus ,aUs $brk $strend bei baI $u+ $pause $only +beim baIm $u+ $brk bis bIs $u+ $pause da $u+ durch $u+ $pause @@ -145,8 +146,8 @@ von fOn $u+ $brk vom fOm $u+ $brk vor ,fO* $strend zu tsu: $u+ $brk -zum tsUm $u+ $brk -zur tsu:* $u+ $brk +zum tsUm $u+ $pause +zur tsu:* $u+ $pause über ,yb3 $pause $strend unter ,Unt3 $pause $strend um Um $u+ $brk @@ -161,7 +162,7 @@ noch $pause (noch nicht) n'Ox||n,ICt $brk (nicht mehr) n'ICt||,me:* (nicht mehr) n,ICt||m'e:* $atend -(nicht nur) nICt||nu:* $pause +(nicht nur) n'ICt||n'u:* $pause (gar nicht) g,A:*n'ICt // should these be in the Rules because they can be a prefix in a @@ -261,10 +262,6 @@ ist %Ist sind %zInt seit %zaIt $only -gehen ge:@n $only -geht ge:t $only -gehe ge:@ $only - habe %hA:b@ $only habst %habst $only hast %hast $only @@ -326,6 +323,7 @@ browser _^_EN byte _^_EN camcorder _^_EN chart _^_EN +chat _^_EN coach _^_EN coke _^_EN computer _^_EN @@ -370,6 +368,7 @@ pidgin _^_EN plot _^_EN poster _^_EN receiver _^_EN +research _^_EN remake _^_EN roadie _^_EN roastbeef _^_EN @@ -407,21 +406,33 @@ word _^_EN // Main exceptions list //===================== abort ab'O*t +absentier apzEnt'i:* +abstinent $3 +achsig 'aksIC2 +akazie $alt allein $2 andre and@-*@ // andere anomalie $2 -akazie $alt +antik ant'i:k +archaik a*k'A:Ik arie $alt arterie $alt +asphalt $2 außerdem aUs3de:m +aventurin avEntu:*'i:n +avenue av@n'y: +balkan $1 +balkon $2 beben be:b@n beere be:*@ bestie bEstI@ best bEst beten be:t@n +bizarr $2 bronchie $alt +changier SaNZ'i:* ciao tSaU coup ku: @@ -434,18 +445,26 @@ duett du:'Et direkt $2 dritte d@-*It@ +extravagant $1 einander aIn'and3 +einerlei aIn@*laI einig aInIC $only einige aInIg@ $u+ einiges aInIg@s $u+ endivie $alt -erde E*d@ -erst E*st +endlich EntlIC +episkopal e:pIsko:p'A:l +erde e:*d@ +erst e:*st +ersten e:*st@n +erstmal e:*stma:l +extrem Ekstr'e:m +feuerrot $3 furie $alt geben ge:b@n -geber ge:b3 +gebt ge:bt gegenüber ge:g@n'y:b3 gemein g@maIn genial ge:nI'al @@ -464,6 +483,11 @@ hm h@m hostie $alt immobilie $alt +indem Ind'e:m +inden Ind'e:n +inder Ind3 +indes Ind'Es +indessen Ind'Es@n injurie $alt insbesondere $3 interess Int@*'Es @@ -473,7 +497,7 @@ januar janu:A:* kamelie $alt kastanie $alt kid kId -kommend kOm'End +kommend kOm'@nd komödie $alt konkret k%ONk@-*e:t kurie $alt @@ -488,18 +512,26 @@ machen max@n marginalie $alt materie $alt menuette mEnu:'Et +minut $2 mikrofiche maIk@-*o:fIS miteinander $1 mitte mIt@ +modell mo:d'El mumie $alt +nebulos $3 + oberen o:b@*@n oboe o:bo:@ orgie $alt ok o:k'e: +passage pas'aZ@ petersilie $alt pinie $alt +planet plan'Et +pochier pOS'i:* +pochs pOxs präsident $3 prämie $alt problem p@-*Obl'e:m @@ -516,11 +548,14 @@ sofort $2 sogar $2 soweit $2 sowohl $2 +spinozaisch spi:n'o:tsaIS +stalagmit stalagm'It system z%IstEm tag tA:g the D@ // English theater te:'A:t3 +train t@-*e:n tuerei tu:*aI unten Unt@n @@ -528,8 +563,12 @@ unten Unt@n woher vo:h'e:r verein fE*'aIn +vielbesprochen $3 vielleicht $2 -vorbei fO*b'aI +vorbei fo:*b'aI +vorher fo:*h'e:* +vorherig fo:*h'e:*IC +vorig fo:*IC //wahrscheinlich $2 warum vA:*'Um diff --git a/dictsource/de_rules b/dictsource/de_rules index 98048a25..7069b1ba 100644 --- a/dictsource/de_rules +++ b/dictsource/de_rules @@ -2,7 +2,7 @@ .group a _) a (_ A: - a A: + a A aa A: ah (+ A: ael A:El @@ -18,37 +18,78 @@ ay aI au aU + ab (t_ A:p + ag (t_ A:k + _) ab (C@P2 _!'ap _) ab (arP2 _!'ap + _) ab (nor %ap + _) ab (or ap_| + _) ab (sor %ap + _) ab (str %ap + _) ab (sur %ap _) abb (a %ab _) abb (rev ab + _) abd (+ apd _) abend A:b@nt + _) aberr ab_|E* _) ab (er@P2 'ap - _) abge (@ 'abg@ - _) ab (i ab - _) abzu 'abtsu: + _) ab (i ap + _) ab (j ap + _) ab (se ap + _) ab (so %ap + _) ab (sz ap + _) abzu 'aptsu: + _) ac (et ats + _) ad (ju at _) an (@P2 _!'an - _) an (aly %an + _) an (a %an + _) a (natioP1 'A: + _) anath anat _) an (der an _) anti (@P4 ,antI _) an (tw an _) auf (@P3 _!'aUf _) aus (@P3 _!'aUs + a (_ A: + a (C_ A: + s) a (g A: + @l) a (g A: + scl) a (g A: + s) a (m_ A: + s) a (mkeit A: + a (isier a + _) achs (@P4 'aks + _) achs (el 'aks _) air _^_EN + ai (sch A:I + tr) ain En akqu %akv - @A) al (_ 'al - @) an (_ 'an + @A) al (_ 'A:l + k) al (_ 'A:l + n) al (_ 'A:l + &kan) al (_ ,A:l + &sign) al (_ ,A:l + @) an (_ 'A:n + ein) an (der 'an @) ant (_ 'ant _) anthropo ,ant@-*o:p%o: _) anti (@P4 ,anti: - anier (_ 'A:ni:3 - arier (_ 'A:*i:3 - adier (_ 'A:di:3 + anier (_N 'A:ni:3 + _) appe (ll@ ,apE + _) archa (i %a*CA + arier (_N 'A:*i:3 + @l) ar (_ 'A:* + @t) ar (_ 'A:* + a (rch_ 'A: @) at (_ 'A:t @) atisch (_S6 'A:tIS @) atisieren (_S9 A:tIs'i:*@n a (tion a + _) au (Ceinand aU + _) aufent aUf@nt + _) authen aUtEn .group b _) b (_ be: @@ -61,12 +102,18 @@ _) be (@P2 b@ &Cen) be (C@ b@ + ungs) be (C@ b@ _) b (eHC b _) be (C% bE _) bei (P3 b'aI _) bei (de baI + _) bei (ne baI + _) bei (ß baI _) beo (b b,@o: + _) ba (lA b%a + _) ba (ll@ b%a + &) bar (_S3 bA:* _) b (ebC b _) b (ecC b _) b (eet b @@ -75,6 +122,7 @@ _) b (esen b _) b (ess b _) b (esten b + bestia bEsti:'A: _) b (eug b _) b (eul b _) b (eut b @@ -86,6 +134,7 @@ _) blue _^_EN board _^_EN _) boom _^_EN + bo (sh bo: .group c _) c (_ se: @@ -96,25 +145,25 @@ a) ch x o) ch x u) ch x + fu) ch (s k äu) ch C eu) ch C C) chen (_$4 C@n ä) chen (_$4 C@n e) chen (_$4 C@n - i) chen (_$4 C@n +// i) chen (_$4 C@n ü) chen (_$4 C@n _) chr k@-* - chs ks + chs ks (_ ck k _) c (el S _) cey tsaI - chat _^_EN chef SEf _) c (ent ts _) ch (il S - chip _^_EN + chip (_ _^_EN _) ch (ol k _) ch (or k @@ -134,11 +183,14 @@ d) d d (_N t d (h t - d (s_ t + ds (_ ts dt t ddt t _) deal _^_EN + _) deme de:mE + demo (g de:mo: + demo (k de:mo: design _^_EN dge (_ _^_EN _) dia d,i:a @@ -161,6 +213,9 @@ eu OI ey (_ e: + eb (t_ e:p + eg (t_ e:k + ell (_ 'El &) e (_S1 @ @t) e (_S1 @ @@ -168,11 +223,18 @@ e (gt_+ e: &) el (_ @l &) eln (_S1 n - &) em (_S2 @m + &) e (lt_ @ + &) em (_NS2 @m + &) em (_ 'e:m + _) end (C@P3 'Ent + _) endo (@ ,Endo: @) en (_S2 @n &) end (_N @nt &) end (_ @nd + ier) end (_NS3 @nt + ier) end (_ @nd @) ent (_ 'Ent + @) entlich @ntl%IC @m) ent (_ 'Ent @m) ente (_ 'Ent@ @) er (C 3 @@ -186,13 +248,17 @@ &) erer (_S4 @*3 &) eres (_S4 @*@s &) er (C_ @* - &) er (n_ @r + er (d_ e:* + &) er (n_ @* &) er (r_ E w) er (k_ E* + &) er (nd_ @* + @) erin (_ @rIn @) es (_S2 @s &) et (_ @t ig) et (_S2 @t &t) et (_S2 @t + ier) et (_S2 @t &) est (_S3 @st &) este (_S4 @st@ &) estem (_S5 @st@m @@ -203,29 +269,45 @@ &) en (@ E2n // [E2] can reduce to [@] // &) er (C@ E2* &) el (@ E2l + m) e (nt E @) ei (_ 'aI @@) erisch @*IS &) erung (_ =@*UN + _) eil (aP3 'aIl + _) eil (fP3 'aIl _) ein (@P3 _!'aIn ein (and _|%aIn + _) eine (r@ aIn@ _) einig aInIg + mod) e (l@ E + s) e (lig e: _) emp (@P3 _|%Emp + _) emph (@ %Emf + _) emp (ir %Emp + _) ene (rg %e:nE _) ent (@P3 _|%Ent _) enten Ent@n _) ent (er Ent + _) epi (@ ,e:pi: + _) epi (sk e:pI _) er (@P2 _|%E* + _) er (gie E* + _) er (beK E* _) er (HC E* // lC, mC, nC, rC _) ergeb (nis E*g'e:b _) er (stC E* _) er (ste E* _) er (ste@@P2 _|%E* + mod) er (n E* _) entert _^_EN er (dig e:* _) erob (er %E*o:b @) eur (_ 'Y:* + euse (_ 'Y:z@ + eusen (_ 'Y:z@n .group f @@ -233,10 +315,16 @@ f f f) f - _) fest (P4 f'Est + _) faks (i f%akz + _) farb (C@P4 f'a*p + _) farb (l@P4 f'a*b + _) fein (@P4 f'aIn + _) fest (@P4 f'Est _) flug fl'u:g + foto fo:to: _) free _^_EN - + _) feudal f%OIdA:l + _) feuer (@ fOI@* .group g _) g (_ ge: @@ -251,7 +339,9 @@ _) g (eHC g // hC, lC, mC, nC, rC _) ge (@P2 g@ - g (ei+ g + ungs) ge (C@ g@ + _) ge (beX ge: + g (ei+ g _) gn (A g@-n B) gn (A g@-n @@ -261,10 +351,16 @@ gegen (_ ge:g@n gegn ge:gn gehen ge:@n + _) geh (eX ge: general ge:nE*'al _) g (ener g _) g (eo+ g + _) ge (orP2 g@ + ge (rman gE + ge (rät g@ @) ght (_ _^_EN + graph g@-*A:f + graph (_ g@-*'A:f green _^_EN guide _^_EN @@ -275,34 +371,44 @@ h) h ch) h h - _) herauf (P6 hE*'aUf _) herab (P5 hE*'ab + _) heran (P5 hE*'an + _) herauf (P6 hE*'aUf _) heraus (P6 hE*'aUs _) herbei (P6 hE*'baI + _) herein (P6 hE*'aIn + _) herüber (P7 hE*'y:b3 _) herum (P5 hE*'Um + _) herunter (P8 hE*'Unt3 _) hervor (P6 hE*f'Or _) hier (@ h%i:* + _) hinab (P5 hIn'ab + _) hinan (P5 hIn'an _) hinauf (P6 hIn'aUf _) hinaus (P6 hIn'aUs _) hinein (P6 hIn'aIn + _) hinunter (P8 hIn'Unt3 _) hinweg (P6 hInv'e:g _) hinzu (P5 hInts'u: + _) hinge (@P5 h'Ing@ + _) hinter (@P6 h,Int3 _) haupt (@@P5 h'aUpt // @) heit (_S4 haIt + _) hero h%e:*o: _) high _^_EN _) hinter (@ h,Int3 + _) hoch (@P4 h'o:x + hoch ho:x _) hyper _^_EN .group i _) i ( i: i i: - ie i: ih (+ i: - ieh i: i (C% I i (CC I @@ -312,30 +418,19 @@ @) i (ng I &CC) i (_ =i: - @) i (at_ I - &) ie (ll_ i:,E - &) ier (_ 'i:3 - r) ien (@ IEn - &) ien (_S1 n - &n) ien (_ I@n - &) iens (_ =I;@ns - &) ient (_ =I;@nt - sch) ie (n i: - @) ieren 'i:*@n - @) iere (_ 'i:*@ - @) ieret (_ 'i:*@t - @) ierest (_ 'i:*@st - @) ierst (_ 'i:*st - @) iert (_ 'i:*t - ierungs 'i:*UNs - ierung 'i:*UN + ib (t_ i:p + @) i (at_ I + i (d_ 'i: + i (erin =i: ig (C IC ig (m Ig ig (n Ig ig (l Ig ig (r Ig + ig (ung Ig ig (end_ Ig + igh aI igtet Ikt@t igtest Ikt@st &) ig (_N IC @@ -346,12 +441,63 @@ @) igsten (_ ICst@n @) igster (_ ICst3 @) igstes (_ ICst@s + + i (i i:_! + @) ik (_ 'i:k @t) ik (_ =i:k polit) ik 'i:k @) ik (el_ 'i:k + + r) i (na_ 'i: + @) ing (_N _^_EN + _) inter Int@* + @) ion (_ j'o:n + @) io (n Io: + @) is (_ Is + &) isch (_ =IS + is (mus_ 'Is + @) ist (_ 'Ist + @) it (_N 'It + @) ite (_ 'i:t@ + @) ität (_S4 i:t'E:t + + @s) i (v_ 'i: + @t) i (v_ 'i: + + +.group ie + ie i: + ieh i: @) ie (_ 'i: + &) ie (ll_ i:,E + &) ie (r_ 'i: + &) ie (rlich 'i: + r) ien (@ IEn + &) ien (_ =I@n + &b) ien (_ =i:@n + g) ien (_ 'i:@n + m) ien (_ 'i:@n + ph) ien (_ 'i:@n + &n) ien (_ I@n + p) ien (_ 'i:@n + &r) ien (_ =i:@n + s) ien (_ 'i:@n + t) ien (_ 'i:@n + &) iens (_ =I;@ns + &) ient (_ =I;@nt + sch) ie (n i: +// @) ieren 'i:*@n + @) ie (reX 'i: +// @) iere (_ 'i:*@ +// @) ierer (_ 'i:*3 +// @) ieret (_ 'i:*@t +// @) ierest (_ 'i:*@st +// @) ierst (_ 'i:*st +// @) iert (_ 'i:*t + ierungs 'i:*UNs + ierung 'i:*UN bakter) ie =I@ famil) ie =I@ fer) ie (n =I@ @@ -359,16 +505,6 @@ formal) ie =I@ stud) ie (_ =I@ - igh aI - @) ing (_N _^_EN - @) ion (_ j'o:n - @) ional (_ jo:n,al - @) is (_ Is - &) isch (_ =IS - @) ist (_ 'Ist - @) it (_N 'It - @) ite (_ 'i:t@ - @) ität (_S4 i:t'E:t .group j _) j (_ jOt @@ -393,13 +529,37 @@ lin (_ l'i:n l) lin (_ 'i:n + lady _^_EN _) land (C@P4 l'ant _) landes (@P6 l'and@s _) lang (C@P4 l'aN + _) lang (t@ l'aN langsam l'aNzA:m + _) leb (C le:p + _) leb (C@@P3 'le:p + _) leben (dig le:b'En + _) lehr (CP4 l'e:* _) leit (@P4 l'aIt + _) lern (@@P4 l'E*n + _) lexi (@ lEksi: @) lich (_$4 lIC - lady _^_EN + @) liche (_$5 lIC@ + @) lichem (_$6 lIC@m + @) lichen (_$6 lIC@n + @) licher (_$6 lIC3 + @) liches (_$6 lIC@s + @) lichere (_$7 lIC@*@ + @) licherem (_$8 lIC@*@m + @) licheren (_$8 lIC@*@n + @) licherer (_$8 lIC@*@3 + @) licheres (_$8 lIC@*@s + @) lichste (_$7 lICst@ + @) lichstem (_$8 lICst@m + @) lichsten (_$8 lICst@n + @) lichster (_$8 lICst@r + @) lichstes (_$8 lICst@s + @) lichkeit (_$8 lICk%aIt + @) lichung (_$7 lIC%UN @) lo (gisch l'o: .group m @@ -436,6 +596,8 @@ nk (A nk nce (_ _^_EN + nebeneina (nd n,e:b@n_|aIn'a + &in) nen (_S3 @n &) ness _^_EN news _^_EN nieder ni:d3 @@ -454,11 +616,20 @@ o (x O &CC) o (_ =o: + ob (t_ o:p + og (t_ o:k + _) ober (@P4 _|,o:b3 _) ober (ste o:b3 - - @A) on (_ 'o:n + _) ob (jek %Op + _) obst (reP4 'o:pst + @) o (g_ 'o: + @) o (gin_ 'o: + o (m_ 'o: + @A) o (n_ 'o: @) oo (_ u: + r) oo (m u: + z) oo (m u: &t) or (_ =o:* @@ -470,13 +641,19 @@ pf pF ph f + passagie pasaZ'i: _) pay _^_EN + _) peri p,e:*i: + _) periphe p,e:*i:fe: + philie f'i:li: _) pro (@ %p@-*o: _) po (e p%o: _) poe (sc pY: + _) poly (@P4 p,o:ly: partei p%a*taI + _) perfe (k p%E*fE pool _^_EN power _^_EN _) preß (@P4 p@-*'Es @@ -538,10 +715,13 @@ &) schaft (_S6 Saft schein (lich S'aIn schwer Sve:* + _) sechs (P5 z'Eks _) selbst (@@P6 z'Elpst shop _^_EN _) sky _^_EN soldat z%OldA:t + so (rt_ s_|O + sound _^_EN speed _^_EN _) street _^_EN @@ -556,20 +736,42 @@ K) th t tz ts -// &B) te (_$2 t@ &t) te (_ @ -// &B) ten (_$3 t@n // &t) ten (_ @n -// &B) tet (_$3 t@t + + ier) t (_S1 t + ier) te (_S2 t@ + ier) tem (_S3 t@m + ier) ten (_S3 t@n + ier) ter (_S3 t3 + ier) tes (_S3 t@s + ier) tet (_S3 t@t + ier) tere (_S4 t@*@ + ier) terem (_S5 t@*@m + ier) teren (_S5 t@*@n + ier) terer (_S5 t@*3 + ier) teres (_S5 t@*@s + ier) tst (_S3 tst + ier) tste (_S4 tst@ + ier) tstem (_S5 tst@m + ier) tsten (_S5 tst@n + ier) tster (_S5 tst3 + ier) tstes (_S5 tst@s + ier) test (_S4 t@st + ier) teste (_S5 t@st@ + ier) testem (_S6 t@st@m + ier) testen (_S6 t@st@n + ier) tester (_S6 t@st3 + ier) testes (_S6 t@st@s tch tS _) teen _^_EN thrill _^_EN + _pa) th t @) tient (_ tsI'Ent + @) tion tsI,o:n @) tion (_ tsI'o:n - @) ti (v_ t'i: _) trail _^_EN - _) train _^_EN _) tranqu _^_EN _) tw _^_EN @@ -587,20 +789,42 @@ u (x U @) u (ng U + ub (t_ u:p + ug (t_ u:k + @) u (m_ U rt) u (m_ u: _) un Un - _) un (C@P2 'Un - _) unbe (@P4 _|,Unb@ - _) unge (@P4 _|,Ung@ - _) unver (@P5 _|,UnfE* - _) un (iv u:n + _) un (@P2 _|'Un + _) unab (@P4 _|,Un_|'ap + _) unan (@P4 _|,Un_|'an + _) unauf (@P5 _|,Un_|'aUf + _) unaus (@P5 _|,Un_|'aUs + _) unbe (@P4 _|'Unb@ + _) unein (@P5 _|,Un_|'aIn + _) unge (@P4 _|'Ung@ + _) unver (@P5 _|'UnfE* + _) un (i u:n + _) un (in@P2 _|'Un + _) unum (@P4 _|,Un_|'Um _) under _^_EN - _) unter (@P5 _|%Unt3 + _) unter (@P5 _|,Unt3 + + rep) u (bl u: + s) u (ch u: &) uela (_ u:,e:la @) uerisch (_ 'u:*IS + _) ultra (@P5 ,Ultra + um (_ Um + t) um (_ u:m + &) ungs (A %UNs_| // upto "ungs" is a prefix? + _) u (rk u: + _) u (rl u: + _) u (rv u: + us (_ Us _) user _^_EN + ol) u (t_ u: _) ueber (@P5 _|,y:b3 @@ -609,21 +833,43 @@ _) v (_ faU v v v) v + v (_N f _) v f _) vie fi: - _) vi (et v,i: _) vi (CC vI _) vi vi: + _) v v + _) v (ater f + _) v (ie f + _) v (iet v + _) v (iz f + _) v (oll f + _) v (olk f + _) v (on f + + _) vehe ve:he: _) ver (@P3 f%E* - _) vor (@P3 'fO* + _) ver (bal v%E* + _) viel (@P4 f'i:l + _) vier (g@P4 f'i:* + _) viet vIEt + _) voll (C@P4 f'Ol + _) voll (br f%Ol + _) voll (end f%Ol_| + _) voll (ko f%Ol + _) voll (stre f%Ol + _) voll (z f%Ol + _) vorder fO*d@* + -) vorha (nd fo:*h'a _) vor (ne 'fO* - _) vorbei (@P6 fO*'baI - - voraus fO*'aUs - vorüber fO*'yb3 + _) vor (@P3 'fo:* + _) voraus (@P6 fo:*'aUs + _) vorbei (@P6 fo:*'baI + _) vorher (@P6 fo:*h'e:* + _) vorüber (@P7 fo:*'yb3 .group w _) w (_ ve: @@ -632,6 +878,7 @@ @) wert (_ vE*t _) wh _^_EN &) ware (_ _^_EN + _) wasch (@P5 v'aS _) wo (hin v%o: _) wohl (@P4 v'o:l work _^_EN @@ -648,7 +895,8 @@ y y: y (CC y y (x y - y (A j + _) y (A j + A) y (A j @) y (_ I t) y (_ _^_EN @@ -660,16 +908,23 @@ _) zer (@ %tsE* _) zu (C@P2 ts%u: + _) zu (nC tsU + _) zurück (@P6 tsu:*'yk + _) zyklo (@P5 ,tsy:klo: + zylin ts%i:lIn .group ä ä E: äh (+ e: + äu OI ä (C% E ä (CC E ä (sch E - äu OI + äb (t_ E:p + äg (t_ E:k + t) ät (_ 'E:t .group ö ö Y: @@ -688,6 +943,9 @@ ü (sch y ü (x y + üb (t_ y:p + üg (t_ y:k + _) über (@P4 _|,y:b3 .group ß diff --git a/dictsource/dict_phonemes b/dictsource/dict_phonemes index 20a61735..515db926 100644 --- a/dictsource/dict_phonemes +++ b/dictsource/dict_phonemes @@ -41,14 +41,14 @@ x z Dictionary de_dict -3 @ @- a A: aI aU E -E2 E: e: I i: O o: OI -U u: W y y: Y: +3 @ @- a A A: aI aU +E E2 E: e: I i: O o: +OI U u: W y y: Y: -* ; b C d D f g -h j k l m n N p -pF r s S t tS ts v -x z +* : ; b C C2 d D +f g h j k l m n +N p pF r s S t tS +ts v x z Z Dictionary el_dict diff --git a/dictsource/hr_rules b/dictsource/hr_rules index 2f2f16ad..18767c62 100644 --- a/dictsource/hr_rules +++ b/dictsource/hr_rules @@ -30,8 +30,7 @@ e E j) e e e (j e - r) e e - ._) exe (%ekse // filetype + ._) exe %ekse // filetype .group f f f @@ -45,7 +44,7 @@ .group i i i - ._) ini (%ini // filetype + ._) ini %ini // filetype .group j j j diff --git a/phsource/compile_report b/phsource/compile_report index a8ddc501..1f176859 100644 --- a/phsource/compile_report +++ b/phsource/compile_report @@ -9,7 +9,7 @@ en_wm 30 144 af 37 127 cy 29 122 - de 29 120 + de 30 121 eo 13 108 fi 40 127 fr 32 118 @@ -208,7 +208,7 @@ 9 r/tr base en_sc pt_pt 30 r/trr base af de fi nl ru ro sv sw 11 r/xr base - 1 ufric/ch base + 2 ufric/ch base de 3 ufric/f base de ro 2 ufric/f_ base ro 4 ufric/h_ base fi hi diff --git a/phsource/ph_german b/phsource/ph_german index 96238463..1fcfd794 100755 --- a/phsource/ph_german +++ b/phsource/ph_german @@ -87,13 +87,13 @@ phoneme A: vowel starttype (a) endtype (a) length 240 formants vowel/aa_6 - reduceto a 4 // ?? endphoneme phoneme A vowel starttype (a) endtype (a) - length 200 + length 240 formants vowel/aa_6 + reduceto a 4 // ?? endphoneme @@ -145,7 +145,7 @@ endphoneme phoneme e: vowel starttype (e) endtype (e) - length 200 + length 190 formants vowel/e_2 before * DFT+40 endphoneme @@ -211,6 +211,17 @@ phoneme pF wave ufric/f // could replace this with a [pf] wav file endphoneme +phoneme C2 // for "ig" -> [IC] or [Ig] + vls pal frc palatal + beforevowel g + vowelin f1=0 f2=2700 400 600 f3=200 70 + vowelout f1=0 f2=2700 400 600 f3=200 70 rms=20 + length 100 + lengthmod 3 + wave ufric/ch +endphoneme + + phoneme l/ // used for [l] when not before a vowel liquid length 100 diff --git a/src/compiledict.cpp b/src/compiledict.cpp index 2ec35645..22d88059 100755 --- a/src/compiledict.cpp +++ b/src/compiledict.cpp @@ -689,7 +689,7 @@ void copy_rule_string(char *string, int &state) case '$': // obsolete, replaced by S case 'S': output[ix++] = RULE_ENDING; - value = 0x80; + value = 0; while(!isspace2(c = *p++) && (c != 0)) { switch(c) @@ -720,14 +720,14 @@ void copy_rule_string(char *string, int &state) break; default: if(isdigit(c)) - value = (c - '0') + 0x80; + value = (value*10) + (c - '0'); break; } } p--; output[ix++] = sxflags >> 16; output[ix++] = sxflags >> 8; - c = value; + c = value | 0x80; break; } } diff --git a/src/dictionary.cpp b/src/dictionary.cpp index 3104e1d0..bee1c018 100755 --- a/src/dictionary.cpp +++ b/src/dictionary.cpp @@ -2115,7 +2115,7 @@ void Translator::MatchRule(char *word[], const char *group, char *rule, MatchRec } #ifdef LOG_TRANSLATE - if((option_phonemes == 2) && (match.points > 0)) + if((option_phonemes == 2) && (match.points > 0) && ((word_flags & FLAG_NO_TRACE) == 0)) { // show each rule that matches, and it's points score int pts; @@ -2137,7 +2137,7 @@ void Translator::MatchRule(char *word[], const char *group, char *rule, MatchRec } #ifdef LOG_TRANSLATE - if(option_phonemes == 2) + if((option_phonemes == 2) && ((word_flags & FLAG_NO_TRACE)==0)) { if(group_length <= 1) fprintf(f_trans,"\n"); @@ -2188,7 +2188,7 @@ int Translator::TranslateRules(char *p, char *phonemes, int ph_size, char *end_p return(0); #ifdef LOG_TRANSLATE - if(option_phonemes == 2) + if((option_phonemes == 2) && ((word_flags & FLAG_NO_TRACE)==0)) { char wordbuf[120]; int ix; @@ -2345,8 +2345,20 @@ int Translator::TranslateRules(char *p, char *phonemes, int ph_size, char *end_p if((match1.end_type != 0) && (end_phonemes != NULL)) { /* a standard ending has been found, re-translate the word without it */ - strcpy(end_phonemes,match1.phonemes); - return(match1.end_type); + if((match1.end_type & SUFX_P) && (word_flags & FLAG_NO_PREFIX)) + { + // ignore the match on a prefix + } + else + { + if((match1.end_type & SUFX_P) && ((match1.end_type & 0x7f) == 0)) + { + // no prefix length specified + match1.end_type |= p - p_start; + } + strcpy(end_phonemes,match1.phonemes); + return(match1.end_type); + } } if(match1.del_fwd != NULL) *match1.del_fwd = REPLACED_E; diff --git a/src/extras.cpp b/src/extras.cpp index 31516ffa..ac1e3406 100644 --- a/src/extras.cpp +++ b/src/extras.cpp @@ -214,8 +214,8 @@ void DecodePhonemes2(const char *inptr, char *outptr) int start; static const char *stress_chars = "==,,'* "; - unsigned int replace_ph[] = {',',PH('@','-'),'W','3','y',PH('A',':'),'*',PH('_','!'),PH('_','|'),PH('O','I'),PH('Y',':'),PH('p','F'),PH('E','2'),0}; - const char *replace_ph2[] = {NULL,NULL, "9","@r","Y", "a:", "r", "?", "?", "OY", "2:", "pf" ,"E",NULL}; + unsigned int replace_ph[] = {',',PH('@','-'),'W','3','y','A',PH('A',':'),'*',PH('_','!'),PH('_','|'),PH('O','I'),PH('Y',':'),PH('p','F'),PH('E','2'),0}; + const char *replace_ph2[] = {NULL,NULL,"9","@r","Y","a:", "a:", "r", "?", "?", "OY", "2:", "pf" ,"E",NULL}; start = 1; @@ -289,11 +289,13 @@ void Lexicon_De() FILE *f_out; int ix; int c; + int c2; char *p; int stress; int count=0; int start; int matched=0; + int defer_stress = 0; char buf[120]; char word[80]; char word2[80]; @@ -367,7 +369,32 @@ void Lexicon_De() if((c == '?') && start) continue; // omit initial [?] + if(c == '<') + { + if((c2 = pronounce[ix+1]) == 'i') + { + defer_stress =1; +#ifdef deleted + if(stress == 4) + { + *p++ = 'i'; + c =':'; + } + else +#endif + { + c = 'I'; + } + ix++; + } + } + start =0; + if(defer_stress) + { + defer_stress = 0; + } + else if(stress && (strchr(vowels,c) != NULL)) { if(stress == 4) diff --git a/src/synthdata.cpp b/src/synthdata.cpp index 2cdc4689..2d683685 100755 --- a/src/synthdata.cpp +++ b/src/synthdata.cpp @@ -35,7 +35,7 @@ #include "translate.h" #include "wave.h" -const char *version_string = "1.26.01 09.Jun.07"; +const char *version_string = "1.26.02 11.Jun.07"; const int version_phdata = 0x012601; int option_device_number = -1; diff --git a/src/translate.cpp b/src/translate.cpp index 7335ad43..ad5d763c 100755 --- a/src/translate.cpp +++ b/src/translate.cpp @@ -606,6 +606,7 @@ int Translator::TranslateWord(char *word1, int next_pause, WORD_TAB *wtab) int unpron_length; int add_plural_suffix = 0; int prefix_flags = 0; + int confirm_prefix; int spell_word; int wflags = wtab->flags; int wmark = wtab->wmark; @@ -755,9 +756,42 @@ printf("TR3 length=%d\n",length); c_temp = word[-1]; found = 0; + confirm_prefix = 1; while(end_type & SUFX_P) { // Found a standard prefix, remove it and retranslate + + if(confirm_prefix) + { + int end2; + char phonemes2[N_WORD_PHONEMES]; + char end_phonemes2[N_WORD_PHONEMES]; + + // remove any standard suffix and confirm that the prefix is still recognised + end2 = TranslateRules(word, phonemes2, N_WORD_PHONEMES, end_phonemes2, wflags|FLAG_NO_PREFIX|FLAG_NO_TRACE, dictionary_flags); + if(end2) + { + RemoveEnding(word,end2,word_copy); + end_type = TranslateRules(word, phonemes, N_WORD_PHONEMES, end_phonemes, wflags|FLAG_NO_TRACE, dictionary_flags); + memcpy(word,word_copy,strlen(word_copy)); + if((end_type & SUFX_P) == 0) + { + // after removing the suffix, the prefix is no longer recognised. + // Keep the suffix, but don't use the prefix + end_type = end2; + strcpy(phonemes,phonemes2); + strcpy(end_phonemes,end_phonemes2); + if(option_phonemes == 2) + { + DecodePhonemes(end_phonemes,end_phonemes2); + fprintf(f_trans," suffix [%s]\n\n",end_phonemes2); + } + } + confirm_prefix = 0; + continue; + } + } + strcat(prefix_phonemes,end_phonemes); end_phonemes[0] = 0; prefix_type = end_type; @@ -775,6 +809,7 @@ printf("TR3 length=%d\n",length); } c_temp = word[-1]; word[-1] = ' '; + confirm_prefix = 1; end_type = 0; found = LookupDictList(word,phonemes,&dictionary_flags2,SUFX_P | (wflags << 16)); @@ -817,8 +852,9 @@ strcpy(phonemes2,phonemes); dictionary_flags = dictionary_flags2; if(found) prefix_phonemes[0] = 0; // matched whole word, don't need prefix now - if(found || (dictionary_flags2 != 0)) - prefix_flags = 1; + +// if(found || (dictionary_flags2 != 0)) +// prefix_flags = 1; // ?? this looks wrong } if(found == 0) { diff --git a/src/translate.h b/src/translate.h index 6683f717..e427bdf0 100755 --- a/src/translate.h +++ b/src/translate.h @@ -78,6 +78,8 @@ #define FLAG_DONT_SWITCH_TRANSLATOR 0x1000 #define FLAG_SUFFIX_REMOVED 0x2000 #define FLAG_HYPHEN_AFTER 0x4000 +#define FLAG_NO_PREFIX 0x8000 +#define FLAG_NO_TRACE 0x10000 // prefix/suffix flags (bits 8 to 14, bits 16 to 22) don't use 0x8000, 0x800000 #define SUFX_E 0x0100 // e may have been added diff --git a/src/voices.cpp b/src/voices.cpp index e52a7777..89801787 100755 --- a/src/voices.cpp +++ b/src/voices.cpp @@ -1156,7 +1156,7 @@ espeak_VOICE *SelectVoice(espeak_VOICE *voice_select, int *variant) espeak_VOICE *voices[N_VOICES_LIST]; // list of candidates espeak_VOICE *voices2[N_VOICES_LIST+N_VOICE_VARIANTS]; - espeak_VOICE voice_variants[N_VOICE_VARIANTS]; + static espeak_VOICE voice_variants[N_VOICE_VARIANTS]; if(n_voices_list == 0) espeak_ListVoices(NULL); // create the voices list diff --git a/windows/windows_sapi/ttsengobj.cpp b/windows/windows_sapi/ttsengobj.cpp index 1d1eb43d..262f9ccc 100755 --- a/windows/windows_sapi/ttsengobj.cpp +++ b/windows/windows_sapi/ttsengobj.cpp @@ -295,7 +295,7 @@ STDMETHODIMP CTTSEngObj::SetObjectToken(ISpObjectToken * pToken) gEmphasis = 0; gSayas = 0; - espeak_Initialize(AUDIO_OUTPUT_SYNCHRONOUS,100,path_install); + espeak_Initialize(AUDIO_OUTPUT_SYNCHRONOUS,100,path_install,0); espeak_SetVoiceByName(voice); espeak_SetSynthCallback(SynthCallback);