| @@ -290,11 +290,9 @@ skinheads _^_EN | |||
| street _^_EN | |||
| boy _^_EN | |||
| square _^_EN | |||
| appeal _^_EN | |||
| apple _^_EN | |||
| beachbuggy _^_EN | |||
| beachvolley _^_EN | |||
| browser _^_EN | |||
| chart _^_EN | |||
| coach _^_EN | |||
| coke _^_EN | |||
| @@ -307,7 +305,6 @@ event _^_EN | |||
| firewall _^_EN | |||
| freak _^_EN | |||
| friendly _^_EN | |||
| groupie _^_EN | |||
| homepage _^_EN | |||
| hooligan _^_EN | |||
| interface _^_EN | |||
| @@ -371,7 +368,6 @@ bbc _^_EN $alt | |||
| boston _^_EN $alt | |||
| bronx _^_EN $alt | |||
| boyle _^_EN $alt | |||
| clarence _^_EN $alt | |||
| cyrus _^_EN | |||
| cia _^_EN $alt | |||
| fox _^_EN | |||
| @@ -383,7 +379,7 @@ montreal _^_EN $alt | |||
| oregon _^_EN $alt | |||
| piccadilly _^_EN | |||
| reynolds _^_EN $alt | |||
| purvis _^_EN | |||
| //purvis _^_EN | |||
| white _^_EN $alt | |||
| // PB French words | |||
| @@ -1496,6 +1492,7 @@ rentrice $alt | |||
| renæssance $alt | |||
| ressource $alt | |||
| restance $alt | |||
| revanche $alt | |||
| romance $alt | |||
| seance $alt | |||
| service $alt | |||
| @@ -2001,6 +1998,7 @@ spartan $alt | |||
| srilankan $alt | |||
| sudan $alt | |||
| taiwan $alt | |||
| texan $alt | |||
| tibetan $alt | |||
| tongan $alt | |||
| trojan $alt | |||
| @@ -2161,7 +2159,7 @@ etik $alt | |||
| eugenik $alt | |||
| excentrik $alt | |||
| fabrik $alt | |||
| falkeblik $alt | |||
| //falkeblik $alt | |||
| folkloristik $alt | |||
| fonetik $alt | |||
| fysik $alt | |||
| @@ -2183,6 +2181,7 @@ heuristik $alt | |||
| homiletik $alt | |||
| hydraulik $alt | |||
| informatik $alt | |||
| journalistik $alt | |||
| kamik $alt | |||
| karakteristik $alt | |||
| kasuistik $alt | |||
| @@ -2794,6 +2793,7 @@ homofoni $alt | |||
| ironi $alt | |||
| kakofoni $alt | |||
| kapellani $alt | |||
| katatoni $alt | |||
| kleptomani $alt | |||
| koloni $alt | |||
| kompagni $alt | |||
| @@ -2801,7 +2801,6 @@ kosmogoni $alt | |||
| kvadrofoni $alt | |||
| litani $alt | |||
| ludomani $alt | |||
| makaroni m&k@r'Vni $alt | |||
| mani $alt | |||
| misogyni $alt | |||
| monomani $alt | |||
| @@ -6561,16 +6560,16 @@ kontingenter $alt | |||
| kontinuer $alt | |||
| kontraher $alt | |||
| kontrasigner $alt | |||
| kontraster $alt | |||
| kontrastere $alt | |||
| kontribuer $alt | |||
| kontroller $alt | |||
| kontrollere $alt | |||
| konturere $alt | |||
| konvener $alt | |||
| konverger $alt | |||
| konverser $alt | |||
| konverter $alt | |||
| konvojere $alt | |||
| konvoluter $alt | |||
| konvolutere $alt | |||
| kooperer $alt | |||
| koordiner $alt | |||
| kopiere $alt | |||
| @@ -6628,7 +6627,7 @@ lakser $alt | |||
| lamenter $alt | |||
| laminer $alt | |||
| lancer $alt | |||
| lasere $alt | |||
| //lasere $alt | |||
| latiniser $alt | |||
| lavpasteuriser $alt | |||
| legaliser $alt | |||
| @@ -6825,6 +6824,7 @@ patentere $alt | |||
| patiner $alt | |||
| patroniser $alt | |||
| patruljere $alt | |||
| afpatruljer $alt | |||
| pausere $alt | |||
| pelleter $alt | |||
| pendulere $alt | |||
| @@ -7175,7 +7175,7 @@ stoltser $alt | |||
| strabadsere $alt | |||
| stranguler $alt | |||
| stratificer $alt | |||
| strukturer $alt | |||
| strukturere $alt | |||
| omstrukturer $alt | |||
| studere $alt | |||
| indstudere $alt | |||
| @@ -7218,7 +7218,7 @@ taktere $alt | |||
| taktreguler $alt | |||
| taljere $alt | |||
| tamburer $alt | |||
| tamponer $alt | |||
| tamponere $alt | |||
| tangere $alt | |||
| tapetser $alt | |||
| tarer $alt | |||
| @@ -9623,6 +9623,7 @@ interferon $alt | |||
| futon $alt | |||
| føljeton fWljet'Vn $alt | |||
| facon $alt | |||
| kamæleon $alt | |||
| lazaron $alt | |||
| makron $alt | |||
| melon $alt | |||
| @@ -10232,6 +10233,7 @@ palæontolog $alt | |||
| patolog $alt | |||
| politolog $alt | |||
| prolog $alt | |||
| proktolog $alt | |||
| psykolog $alt | |||
| radiolog $alt | |||
| runolog $alt | |||
| @@ -10399,6 +10401,7 @@ zoologi $alt | |||
| økologi $alt | |||
| // final -ose - stressed o | |||
| acidose $alt | |||
| antibiose $alt | |||
| apoteose $alt | |||
| asbestose $alt | |||
| @@ -10717,6 +10720,7 @@ processor $alt | |||
| professor $alt | |||
| provisor $alt | |||
| revisor $alt | |||
| sektor $alt | |||
| sensor $alt | |||
| sponsor $alt | |||
| successor $alt | |||
| @@ -11209,6 +11213,7 @@ fx fVegsemp@l // PB "fx" is short for 'for eksempel' | |||
| emp $abbrev | |||
| hbo $abbrev // TV station | |||
| usa $abbrev | |||
| kfum $abbrev | |||
| who $abbrev $allcaps // PB World Health Organization | |||
| ussr $abbrev $allcaps // Sovjet Union | |||
| vsop $abbrev | |||
| @@ -11234,6 +11239,8 @@ bh $abbrev | |||
| (bh'er) b,e:h'O:V | |||
| (l'chaim) l&kr'ajm | |||
| scsi skVsi // PB | |||
| ike ajk // PB name | |||
| ikes ajks // PB | |||
| // Try to catch errors | |||
| @@ -53,7 +53,7 @@ p r s S t T v w | |||
| x z | |||
| Dictionary da_dict 2011-05-05 | |||
| Dictionary da_dict 2011-07-21 | |||
| & &# 0 3 @ @- a A | |||
| aI e E i o O u V | |||
| @@ -62,11 +62,11 @@ 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 x | |||
| z Z | |||
| R3 s S t T tS v w | |||
| x z Z | |||
| Dictionary hu_dict 2011-06-25 | |||
| Dictionary hu_dict 2011-08-19 | |||
| a A a: E e: i i: o | |||
| o: u u: Y y y: Y: | |||
| @@ -101,7 +101,7 @@ p Q r R s s; t T | |||
| ts v x z | |||
| Dictionary en_dict 2011-06-21 | |||
| Dictionary en_dict 2011-08-17 | |||
| 0 3 3: @ @- @2 @5 @L | |||
| a a# A: A@ aa aI aI@ aU | |||
| @@ -151,7 +151,7 @@ l m n N p r s S | |||
| s2 t v w Z | |||
| Dictionary fr_dict 2011-05-21 | |||
| Dictionary fr_dict 2011-08-14 | |||
| @ @- a A~ e E E: E~ | |||
| i I o O O~ u u: w | |||
| @@ -201,17 +201,17 @@ q r r. s S s. t T | |||
| t. th th. v w x z | |||
| Dictionary ta_dict 2011-06-25 | |||
| Dictionary ta_dict 2011-08-21 | |||
| a a: aI aU e E e: i | |||
| I i: o o: u U u2 u: | |||
| U: V V# | |||
| #X1 #X2 : ; 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. | |||
| # #X1 #X2 : ; 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 2008-12-22 | |||
| @@ -326,7 +326,7 @@ k l m n p R s S | |||
| t tS v w x | |||
| Dictionary nl_dict 2011-06-08 | |||
| Dictionary nl_dict 2011-07-23 | |||
| 8 @ @- a A a: A~ e | |||
| E e# E2 e: EI eU i I | |||
| @@ -388,7 +388,7 @@ S s# s; t T tS ts v | |||
| w x z Z | |||
| Dictionary ro_dict 2011-03-10 | |||
| Dictionary ro_dict 2011-07-21 | |||
| @ @- @I @U a aI aU e | |||
| ea eI eo eU i i/ I^ iI | |||
| @@ -416,7 +416,7 @@ t; ts tS; v x z Z z; | |||
| Z; | |||
| Dictionary sk_dict 2010-03-12 | |||
| Dictionary sk_dict 2011-08-08 | |||
| & @- a a: e e: i i: | |||
| l- l: o o: oU r- r: u | |||
| @@ -425,8 +425,8 @@ 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 | |||
| S t t; tS ts v w x | |||
| z Z | |||
| Dictionary sq_dict 2008-12-22 | |||
| @@ -524,14 +524,14 @@ l m n N p r s t | |||
| tS v w z | |||
| Dictionary am_dict 2010-10-02 | |||
| Dictionary am_dict 2011-08-23 | |||
| @ a e i o u y | |||
| ? b d dZ f g h j | |||
| k l m n N n^ p R | |||
| s S t tS ts v w x | |||
| z Z | |||
| : ? b d dZ f g h | |||
| j k k` l m n N n^ | |||
| p p` r R s S t t` | |||
| tS tS` v w x z Z | |||
| Dictionary ml_dict 2011-04-25 | |||
| @@ -748,3 +748,28 @@ b d d. dZ f g h j | |||
| k l l. m m# n N n# | |||
| N# n. n.# n^ n^# p r s | |||
| S t t. th tS v w z | |||
| Dictionary et_dict 2011-07-01 | |||
| & &: &i 8 8: 8u a A1 | |||
| a: e E1 e: i I I1 i1 | |||
| i: o O1 o: u U1 u: Y | |||
| y Y: y: Yi yi | |||
| : b d d^ dZ f g h | |||
| j k l l^ m n N n^ | |||
| p r R s S s2 s^ t | |||
| t^ v w z Z | |||
| Dictionary mt_dict 2011-07-29 | |||
| @ a ai au e ei eu i | |||
| I ie iu l- o u U ui | |||
| y yi yY | |||
| * : b c C d dZ f | |||
| g h j k l m n p | |||
| q r s S t tS v w | |||
| x z Z | |||
| @@ -46,7 +46,6 @@ u ju: | |||
| v vi: | |||
| w d'Vb@Lju: | |||
| x Eks | |||
| y waI | |||
| z zEd | |||
| ?3 z zi: | |||
| @@ -151,7 +150,8 @@ _´ a#kju:taksEnt | |||
| _· mId@Ld0t | |||
| _¸ sEd'Il@ | |||
| _¹ su:p@skrIptw'0n | |||
| _º maskjUlIn'O@dI2n@L | |||
| //_º maskjUlIn'O@dI2n@L | |||
| _º dI2gr'i:z | |||
| _» raIt'gIl@mEt | |||
| _¿ %Inv,3:tI2dkw'EstS@n | |||
| @@ -391,6 +391,7 @@ ufo $abbrev | |||
| ui $abbrev | |||
| uk $abbrev | |||
| un $abbrev $allcaps | |||
| unhcr $abbrev | |||
| url $abbrev | |||
| usa $abbrev | |||
| usb $abbrev | |||
| @@ -570,7 +571,6 @@ anniversary anIv'3:s@ri | |||
| anon a#n0n | |||
| anonymous $2 | |||
| another a#nVD3 | |||
| answer aans3 | |||
| ante anti | |||
| antecedent antIs'i:d@nt | |||
| antibody $1 | |||
| @@ -950,6 +950,7 @@ customer k'Vst@m3 | |||
| cutaway kVt@weI | |||
| cutoff kVt0f | |||
| cutout kVtaUt | |||
| cwm kUm | |||
| cyan saI'an | |||
| cymru kVmri | |||
| @@ -957,6 +958,7 @@ dahlia deIli:@ | |||
| dais deIIs | |||
| damaged d'amI2dZd | |||
| dandelion dandI2laI@n | |||
| ddu DI // Welsh | |||
| de d@ $only | |||
| debacle deIb'A:k@L | |||
| debrief di:br'i:f | |||
| @@ -1056,6 +1058,7 @@ dugout dVgaUt | |||
| dungaree dVNga#r'i: | |||
| duvet du:veI | |||
| d'ye dj@ | |||
| dynamo $1 | |||
| ebook i:bUk | |||
| eweek i:wi:k | |||
| @@ -1187,6 +1190,7 @@ flexible flEksIb@L | |||
| flier flaI3 | |||
| flourish flVrI2S | |||
| ?3 flourish fl3:I2S | |||
| flyby flaIbaI | |||
| focus foUk@s // ed,ing | |||
| foothold fUthoUld | |||
| forage f0rI2dZ | |||
| @@ -1436,6 +1440,7 @@ labor leIb3 | |||
| labored leIb@d | |||
| laborer leIb@r3 | |||
| lager lA:g3 | |||
| laity leI@ti | |||
| landowner l'and,oUn3 | |||
| las ,las | |||
| ?3 las ,lA:s | |||
| @@ -1476,8 +1481,8 @@ liter li:t3 | |||
| literature lItrI2tS3 | |||
| live laIv $onlys | |||
| live lIv $verb | |||
| lived lIvd | |||
| livecd l'aIvsi:d'i: | |||
| livestock l'aIvst,0k | |||
| lively laIvlI | |||
| llama lA:m@ | |||
| locale loUk'aal | |||
| @@ -1528,7 +1533,6 @@ margarine mA@dZ@ri:n | |||
| marijuana marI2w'A:n@ | |||
| marshall mA@S@L | |||
| martinet $3 | |||
| massacre mas@k3 | |||
| massage masA:Z | |||
| mausoleum mO:s@li:@m | |||
| mayhem meIhEm | |||
| @@ -1565,6 +1569,7 @@ million mIli@n | |||
| minibus mInIbVs | |||
| mining maInIN // not mini | |||
| minuet mInju:'Et | |||
| minus maIn@s | |||
| minute mInIt $onlys | |||
| mirage mIrA:Z | |||
| misery mIz@rI | |||
| @@ -1934,6 +1939,7 @@ record rEkO@d $onlys | |||
| record $verb | |||
| redcross $2 | |||
| redeye r'Ed,aI | |||
| redial ri:daI@l | |||
| redo ri:du: | |||
| redone ri:d'Vn | |||
| reference rEfr@ns | |||
| @@ -2049,7 +2055,6 @@ sceptre sEpt3 | |||
| sclera skli@r | |||
| scourge sk3:dZ | |||
| scrotum skroUt@m | |||
| scythe saID | |||
| seabed si:bEd | |||
| sealion si:laI@n | |||
| seance seI0ns | |||
| @@ -2087,6 +2092,7 @@ sex sEks // sexism | |||
| several sEvr@L | |||
| shallow SaloU | |||
| shampoo $2 | |||
| shepherd SEp@d | |||
| sheriff S'ErI2f | |||
| shew SoU | |||
| shia Si:@ | |||
| @@ -2458,6 +2464,7 @@ Dumfries dVmfr'i:s | |||
| Dyfed d'VvId | |||
| Edinburgh EdInb%Vr@ | |||
| Ely i:li | |||
| Enfield $1 | |||
| Exeter EksIt3 | |||
| Exmoor EksmU@ | |||
| Fylde faIld | |||
| @@ -3002,6 +3009,7 @@ Carnegie kA@nEgi | |||
| Cohen koU@n | |||
| Cthulhu k@-Tu:l#u: | |||
| Chrysler kraIzl3 | |||
| Dante danteI | |||
| Disney dIzni | |||
| Dolce d0ltSeI | |||
| Dvorak d@-vo@Zak | |||
| @@ -52,6 +52,7 @@ | |||
| sw) a (B 0 | |||
| a (Be# eI | |||
| w) a (Be# eI | |||
| a (Cee+ a | |||
| a (BeCo_ a | |||
| a (BerA a | |||
| a (BerC a | |||
| @@ -86,7 +87,7 @@ | |||
| w) a (d 0 | |||
| ow) a (d @ | |||
| ae i: | |||
| aea i@ | |||
| aea 'i@ | |||
| @) aed (_S2 d | |||
| ae (l eI | |||
| h) ae (m i: | |||
| @@ -164,6 +165,7 @@ | |||
| @) awi (_ 'A:wI | |||
| _) aw (k O: | |||
| _) aw (ok a#w | |||
| awr (_ aU@ | |||
| C) a (x+ a | |||
| _) a (x+ a | |||
| ay eI | |||
| @@ -306,6 +308,7 @@ | |||
| acou (st a#ku: | |||
| ac (quie ,a | |||
| _) acre eIk@ | |||
| mass) acre @k3 | |||
| _) ac (ri ak | |||
| ac (ro ak | |||
| m) acro (@ akr@ | |||
| @@ -456,6 +459,7 @@ | |||
| ai (_ aI | |||
| aic (_ 'eIIk | |||
| aic (al 'eIIk | |||
| aie eI@ | |||
| ai (i aI | |||
| @) ai (Ca_ 'eI | |||
| aig (n 'eI | |||
| @@ -640,7 +644,7 @@ | |||
| @erd) am (_ am | |||
| ?!3 &h) am (_N @m | |||
| &s) am (_ @m | |||
| @r) am (a 'A:m | |||
| @r) am (a_ 'A:m | |||
| _) am (al a#m | |||
| amateur am@t3 | |||
| amaz a#meIz | |||
| @@ -777,6 +781,7 @@ | |||
| tr) an (si an | |||
| tr) ansis anz'Is | |||
| tr) an (som an | |||
| answ (er aans | |||
| ante (nn ant'E | |||
| _) anti (@P4 ,antI // prefix | |||
| ant (iq ant | |||
| @@ -868,11 +873,13 @@ | |||
| &h) ar (d_ 3 | |||
| &ch) ar (d 3 | |||
| &k) ar (d_ 3 | |||
| &p) ar (d_ 3 | |||
| &st) ar (d_ 3 | |||
| &w) ar (d_ 3 | |||
| aw) ar (d O@ | |||
| eot) ar (d_ A@ | |||
| &z) ar (d_ 3 | |||
| ar (dry 3 | |||
| h) ar (ass @r | |||
| &m) aran @ran | |||
| sep) ar (at 3r | |||
| @@ -1456,7 +1463,7 @@ | |||
| co (mpou k0 | |||
| co (mprehen k0 | |||
| co (mprom k0 | |||
| co (mpt k0 | |||
| _) comp (tr k%0m | |||
| co (mputa k,0 | |||
| _) co (mr k0 | |||
| _) con (@ k%0n | |||
| @@ -2206,7 +2213,6 @@ | |||
| &) en (ce_ @n | |||
| ?8 &) en (ce_ En | |||
| f) en (ce_ En | |||
| g) ener (al En@r | |||
| _) en (ough I2n | |||
| .group eo | |||
| @@ -2246,6 +2252,7 @@ | |||
| %C) ers (_S4 3z | |||
| ?8 %C) ers (_S4 a#z | |||
| ss) er (_S2 3 | |||
| ss) ers (_S3 3z | |||
| all) er (_ 3 | |||
| mb) er (_ 3 | |||
| lin) er (_S1 3 | |||
| @@ -2255,8 +2262,10 @@ | |||
| _) er (A I2r | |||
| _) er 3: | |||
| _) err (A Er | |||
| @) eral (ity @r'al | |||
| &) eram (ent r@m | |||
| X) era (_ i@r@ | |||
| cam) era @-r@ | |||
| XC) err Er | |||
| erre 'e@ | |||
| erred (_ '3:d | |||
| @@ -2717,6 +2726,7 @@ | |||
| &) ico (_ =I2koU | |||
| i (cus_ =I | |||
| _) i (d aI | |||
| up) i (de I | |||
| ir) i (d I | |||
| acc) i (d I | |||
| c) i (dal 'aI | |||
| @@ -3096,7 +3106,7 @@ | |||
| inte (llec Int@ | |||
| _) inter (@P5 ,Int3 // prefix | |||
| _) inter (AP5 ,Int@r | |||
| inter (est Int@r | |||
| inter (est Intr | |||
| interfer Int@f'i@3 | |||
| _) int (erio+ %Int | |||
| _) inter (n_ %Int3: | |||
| @@ -3183,7 +3193,6 @@ | |||
| inism (_ InIz@m | |||
| infor (matio Inf3 | |||
| ino (_ 'i:noU | |||
| _m) in (us aIn | |||
| _m) inu (te aIn'ju: | |||
| _m) inute (m InIt | |||
| _) intra Intr@ | |||
| @@ -3203,7 +3212,7 @@ | |||
| n) ion =i@n | |||
| v) io (l aI@ | |||
| ione (_ 'aI@ni | |||
| g) io (n @ | |||
| g) io (n+ @ | |||
| m) io (n I20 | |||
| sh) io (n @ | |||
| _) io (n aI0 | |||
| @@ -3230,6 +3239,7 @@ | |||
| ir (at %aIr | |||
| ir (ate =i@r | |||
| ire aI@ | |||
| ir (ee aI@ | |||
| ?8 ire aIa# | |||
| s) ir (en aI@ | |||
| c) ire (n aIr@ | |||
| @@ -3307,7 +3317,6 @@ | |||
| .group it | |||
| _) it' %It | |||
| _m) it (o aIt | |||
| it (a_N 'i:t | |||
| it (o_ 'i:t | |||
| @@ -3363,7 +3372,7 @@ | |||
| @) iv (e Iv | |||
| iv (e# aIv | |||
| h) iv (e_ aIv | |||
| l) ive (l aIv | |||
| _l) ive (B aIv | |||
| l) iv (en aIv | |||
| r) ival aIv@L | |||
| ct) iv (al 'aIv | |||
| @@ -3456,6 +3465,7 @@ | |||
| Al) l (_ | |||
| &) lim (ent lIm | |||
| &B) ling (_ lIN | |||
| &B) lings (_ lINz | |||
| ng) ling (_ @-lIN | |||
| &t) ling (_ _lIN | |||
| &l) ling (_S4vd IN | |||
| @@ -3679,6 +3689,7 @@ | |||
| X) o (By_ oU | |||
| _) o (Cy+ 0 | |||
| o (Be# oU | |||
| oi (ce# OI | |||
| o (BeCo_ 0 | |||
| o (BenC oU | |||
| o (Beon 'oU | |||
| @@ -3891,7 +3902,6 @@ | |||
| @@) ol (ar 'oUl | |||
| h) ol (ar 0l | |||
| m) ole (st @lE | |||
| b) ol (t oUl | |||
| c) ol (our Vl | |||
| @@) ol (us 'oUl | |||
| contr) ol oUl | |||
| @@ -3924,7 +3934,7 @@ | |||
| olm (_ oUm | |||
| olo (gi '0l@ | |||
| olo (gic @l'0 | |||
| v) olt oUlt | |||
| olt oUlt | |||
| w) olv Ulv | |||
| N_p) oly ,0lI | |||
| @@ -4173,7 +4183,7 @@ | |||
| os (al_ 'oUz | |||
| _l) os (e u:z | |||
| ose (_ oUz | |||
| purp) ose (_ @s | |||
| purp) ose @s | |||
| _r) os (e# oUz | |||
| c) os (ec oUs | |||
| c) os (ine_ oUs | |||
| @@ -4329,6 +4339,7 @@ | |||
| y) ou (t_ aU | |||
| ou (v u: | |||
| oux (_ u: | |||
| ou (z u: | |||
| .group ov | |||
| @) ov (al u:v | |||
| @@ -4439,6 +4450,7 @@ | |||
| _) pt (Y t | |||
| ph f | |||
| ph (am_ p | |||
| phenome (n fI2n0mI | |||
| phenyl f,i:naIl | |||
| p (haza p | |||
| @@ -4651,12 +4663,10 @@ | |||
| &ant) ry (_S2 r%I | |||
| .group re | |||
| // _) re (@P2 %ri: | |||
| _) re (C@ rI2 | |||
| // _) re (A rI2 | |||
| &Ct) red (_ @d | |||
| &B) red (_ r@d | |||
| noeuv) re @ | |||
| uv) re @ | |||
| rer (_ r@ | |||
| re (_ 3 | |||
| A) re (_ r@ | |||
| @@ -4792,7 +4802,7 @@ | |||
| _) scar (A ske@ | |||
| _) scar (a skar | |||
| scarc ske@s | |||
| sc (i s | |||
| sc (L02 s | |||
| sci (b s@ | |||
| sci (_ =skaI | |||
| scis (_ =skIs | |||
| @@ -5154,14 +5164,15 @@ | |||
| @) u (late =jU | |||
| u (le_ ju: | |||
| s) u (le_ ju: | |||
| f) ul (fil %Vl | |||
| f) ul (fil %Ul | |||
| j) u (li u: | |||
| @) uli (_ =jUlaI | |||
| b) ull Ul | |||
| f) ull Ul | |||
| p) ull Ul | |||
| b) ully UlI | |||
| _f) ully UlI | |||
| _f) u (lC U | |||
| f) u (lcr V | |||
| &f) ully (_ @l%I | |||
| ?8 &f) ully (_ Vl%I | |||
| &) u (lous_ =jU | |||
| @@ -5291,7 +5302,7 @@ | |||
| p) un (ish Vn | |||
| r) un (i u:n | |||
| un (A Vn | |||
| un (er ju:n | |||
| C) un (er ju:n | |||
| _) un (reC@P2 ,Vn | |||
| un (regi %Vn | |||
| @@ -5381,6 +5392,7 @@ | |||
| _) wr (Y r | |||
| C) w (_ w@ | |||
| C) w (X U // Welsh names | |||
| wh w | |||
| wr r | |||
| C) we (_ =wI | |||
| @@ -5424,6 +5436,8 @@ | |||
| xure (_ kS%U@ | |||
| .group y | |||
| _) y (_ waI | |||
| -) y (- @ // Welsh names | |||
| y j | |||
| _) y' (CP2 j@ | |||
| y (C_ I | |||
| @@ -5644,6 +5658,7 @@ | |||
| Ette (_ 'Et | |||
| E (tic_ E | |||
| Eus (_ I2@s | |||
| Ew (_ u: | |||
| ob) Ey (_ eI | |||
| @@ -1,7 +1,7 @@ | |||
| // French translation rules for Espeak | |||
| // *************************************************************************** | |||
| // * Copyright (C) 2005 to 2011 by Jonathan Duddington * | |||
| // * Copyright (C) 2005 to 2010 by Jonathan Duddington * | |||
| // * email: [email protected] * | |||
| // * * | |||
| // * This program is free software; you can redistribute it and/or modify * | |||
| @@ -27,7 +27,7 @@ | |||
| // http://www.fluxnic.net/cicero | |||
| // | |||
| // Rules are now maintained by Michel Such <[email protected]> | |||
| // Last update: 2011-05-20 Michel Such <[email protected]> | |||
| // Last update: 2011-08-13 Michel Such <[email protected]> | |||
| // | |||
| // Letter classes: | |||
| @@ -63,7 +63,7 @@ | |||
| // When these diphtonges are after a consonant folllowing e, e is not mute | |||
| .L10 ia ie io ua ue ui uo | |||
| .L11 b p | |||
| .L12 é è aï al ib ie l om on ré | |||
| .L12 é è aï al ib ie iq l om on ym ré | |||
| // Words ending "son" pust sound english if preceded by L13 | |||
| .L13 d g k l p er hn | |||
| @@ -1486,6 +1486,7 @@ A) wn _^_en | |||
| _) yahoo (P5 ja'u | |||
| ym (L11 E~ // tympan | |||
| ym (_ E~ // thym | |||
| X) ys (_ is | |||
| yn (K E~ // laryngite | |||
| @@ -447,7 +447,8 @@ WC ve:tse: $allcaps | |||
| LST ElESte: $allcaps | |||
| BAR bAR2 $allcaps | |||
| //SS EsEs $allcaps | |||
| ALT Alt $allcaps | |||
| TAB tAb $allcaps | |||
| (a . m .) An^n^i||m'int $hasdot | |||
| ún u:JnEvEzEt: $hasdot | |||
| dr doktoR2 $hasdot | |||
| @@ -1773,6 +1774,84 @@ fajták $unstressend | |||
| körülményei $unstressend | |||
| bízva $unstressend | |||
| száma $unstressend | |||
| képes $unstressend | |||
| számoltak $unstressend | |||
| fakadó $unstressend | |||
| firtatta $unstressend | |||
| ítélték $unstressend | |||
| itélték $unstressend | |||
| fogják $unstressend | |||
| bennem $unstressend | |||
| állhat $unstressend | |||
| lényege $unstressend | |||
| derített $unstressend | |||
| gyártotta $unstressend | |||
| beszélni $unstressend | |||
| számítógéppel $unstressend | |||
| változást $unstressend | |||
| lettek $unstressend | |||
| tapasztalattal $unstressend | |||
| súlyát $unstressend | |||
| hatnak $unstressend | |||
| rugalmas $unstressend | |||
| anyagok $unstressend | |||
| tárgyak $unstressend | |||
| váltak $unstressend | |||
| szűrő $unstressend | |||
| szűrők $unstressend | |||
| vitát $unstressend | |||
| tevő $unstressend | |||
| lévő $unstressend | |||
| ajánlat $unstressend | |||
| jelentkezhetnek $unstressend | |||
| léphessen $unstressend | |||
| építeni $unstressend | |||
| darabra $unstressend | |||
| figyelmesek $unstressend | |||
| láttuk $unstressend | |||
| hullott $unstressend | |||
| szóltak $unstressend | |||
| hallatszott $unstressend | |||
| keresték $unstressend | |||
| gépeket $unstressend | |||
| követte $unstressend | |||
| keresik $unstressend | |||
| éreztem $unstressend | |||
| vitatta $unstressend | |||
| vitatja $unstressend | |||
| útját $unstressend | |||
| nehézségeket $unstressend | |||
| város $unstressend | |||
| polgármester $unstressend | |||
| elkezdődött $unstressend | |||
| vezető $unstressend | |||
| feladatokat $unstressend | |||
| jelzem $unstressend | |||
| valósul $unstressend | |||
| készül $unstressend | |||
| megbízatást $unstressend | |||
| polgármestert $unstressend | |||
| nyertek $unstressend | |||
| került $unstressend | |||
| jelezte $unstressend | |||
| végezni $unstressend | |||
| tartunk $unstressend | |||
| személy $unstressend | |||
| fizetni $unstressend | |||
| Éva $unstressend | |||
| bánik $unstressend | |||
| kiszolgáló $unstressend | |||
| alapul $unstressend | |||
| jelezni $unstressend | |||
| fogadta $unstressend | |||
| kapcsolat $unstressend | |||
| tervet $unstressend | |||
| szolgáltatását $unstressend | |||
| segíti $unstressend | |||
| felkerültek $unstressend | |||
| mutatni $unstressend | |||
| korlátozott $unstressend | |||
| // word pairs | |||
| (hogy a) h,oJ,A | |||
| @@ -44,7 +44,7 @@ | |||
| bb (L01 b // only speak one b if followed by a consonant | |||
| bbr bR2 //special exception with always need executing | |||
| bbj bj //special exception with always need executing | |||
| .group c | |||
| c ts | |||
| @@ -109,7 +109,17 @@ fegyen) c (csoport ts | |||
| cs (-sz tS|s //need spokening single ts and single s phoneme | |||
| ccs (-sz tS|s //need spokening single ts and single s phoneme | |||
| licen) c (sértés ts | |||
| _fil) c (csík ts | |||
| _pia) c (csarnok ts | |||
| _pol) c (csat ts | |||
| _mala) c (sivít ts | |||
| _kilen) c (csöv ts | |||
| _kilen) c (csomó ts | |||
| szanité) c (cs ts | |||
| pokró) c (cs ts | |||
| kul) cs (zörg tS | |||
| kartá) cs (zápo tS | |||
| ínyen) c (ség ts | |||
| .group ch | |||
| anar) ch (i h | |||
| @@ -285,6 +295,10 @@ standar) d (jegy d | |||
| harma) d (szint d | |||
| kó) d (jel d | |||
| harma) d (sor d | |||
| beszé) d (javít d | |||
| rekor) d (sugár d | |||
| máso) d (szaká d //For example másodszakács, másodszakáccsá words need spokening single d phoneme before s phoneme | |||
| _ná) d (söv d //for example nádsövénnyé word | |||
| .group dz | |||
| fogó) dz (kod ts | |||
| @@ -332,6 +346,7 @@ smarag) dz (öld d|z | |||
| kapáló) dz z | |||
| _ó) dz (ko ts | |||
| gyűrű) dz (ik z | |||
| burkoló) dz z | |||
| .group e | |||
| e E | |||
| @@ -374,7 +389,9 @@ kapáló) dz z | |||
| ggb gb //special exception with always need executing | |||
| ggr gR2 //special exception with always need executing | |||
| ?1 _) goeth gY:tE | |||
| _me) ggy (en_ J: //Single meggyen word need spokening longer J: phoneme | |||
| me) g (gy g | |||
| ggy (L01 J | |||
| ggyb Jb //special exception with always need executing | |||
| ggyr JR2 //special exception with always need executing | |||
| @@ -423,6 +440,17 @@ arcüre) g (gyulladás g | |||
| szöve) g (gyűjt g | |||
| ta) g (gyűl g | |||
| gu) gg (ol g | |||
| orszá) g (gyarapod g | |||
| anya) g (gyár g | |||
| anya) g (gyűjt g | |||
| végi) g (gya g | |||
| me) ggy (mag J | |||
| me) ggy (íz J: | |||
| bádo) g (gy g | |||
| szö) g (gyár g | |||
| han) g (gyakor g | |||
| ele) ggy (é J: | |||
| _jé) g (gyár g | |||
| .group gy | |||
| gy J | |||
| @@ -530,6 +558,8 @@ harmince) gy (edik J: | |||
| e) gy (összeg J: | |||
| e) gys (ík J|S //for example egysíkú word need spokening single J and S phoneme | |||
| _e) gy (öntet J: | |||
| tár) gy (sor J | |||
| .group h | |||
| h h | |||
| @@ -562,6 +592,7 @@ harmince) gy (edik J: | |||
| _sz) í (vattak i | |||
| _sz) í (vattákk i | |||
| _sz) í (vató i | |||
| _v) í (zi i //for example vízipipa, vízimentők beginning words need spokening i, not i: phoneme | |||
| .group j | |||
| j j | |||
| @@ -613,6 +644,7 @@ harmince) gy (edik J: | |||
| _) közt kYst | |||
| k (-k k: //for example marok-körző word need cut one k letter and need spokening k: phoneme only | |||
| k-) k //silent with second k phoneme | |||
| _játé) kk (liens k: //exceptiof for kk (L01 rule | |||
| .group l | |||
| @@ -702,7 +734,6 @@ bagate) ll (iz l | |||
| bű) n (jel n | |||
| negyve) n (yard n | |||
| ötve) n (yard n | |||
| benzi) n (jegy n | |||
| elle) n (javaslat n | |||
| késő) n (jövő n | |||
| közbe) n (jár n | |||
| @@ -745,6 +776,10 @@ helybe) n (jár n | |||
| idé) ny (jel n^ | |||
| vagyo) n (nyilatkozat n //for example vagyonnyilatkozat word need spokening single n phoneme before n^ phoneme, not two n^n^ phoneme. | |||
| szí) n (jelzés n | |||
| kormá) ny (jelentés n^ | |||
| benzi) nj nj | |||
| mikrofo) n (nyílás n | |||
| szí) n (nyom n | |||
| .group o | |||
| o o | |||
| @@ -835,6 +870,9 @@ működé) s (zava S | |||
| viselkedé) s (zava S | |||
| alkalmazá) s (szerver S | |||
| fá) s (szárú S | |||
| ritmu) s (zavar S | |||
| pedagógu) s (sztrájk S | |||
| .group ss | |||
| ssz ss2 | |||
| @@ -843,6 +881,7 @@ alkalmazá) s (szerver S | |||
| _má) ssz (ó Ss | |||
| mennydörgé) ssz (erű Ss | |||
| robbaná) ss S: | |||
| hamva) ssz s: | |||
| robbaná) ssz (er Ss | |||
| danubiu) ss s: //a radio station name | |||
| danubiu) ssz s: //a radio station name | |||
| @@ -936,7 +975,7 @@ megállapodá) ssz (erű Ss | |||
| meglepeté) ssz (erű Ss | |||
| motoro) ssz (án Ss | |||
| ülé) ssz (ak Ss | |||
| tölté) ssz (abályoz Sss | |||
| tölté) ssz (abályoz Ss | |||
| orvo) ssz (övetség Ss | |||
| orvo) ssz (akértő Ss | |||
| orvo) ssz (emély Ss | |||
| @@ -1022,6 +1061,11 @@ települé) ssz (er Ss //for example településszerkezet word need spok | |||
| gyor) ssz (űr Ss //for example gyorsszűrő word need spokening single S and s phoneme | |||
| _a) ssz (iszt s //for example the asszisztens word need spokening one s phoneme | |||
| eltu) ss (ol S | |||
| ellátá) ssz (er Ss | |||
| égé) ssz (ag Ss | |||
| csapá) ssz (erű Ss | |||
| menekülé) ssz (erű Ss | |||
| _ökrö) ssz (ekere Ss | |||
| .group sz | |||
| sz s | |||
| @@ -1056,6 +1100,12 @@ rongyo) szs (ák SZ | |||
| _ka) sztsze st|sE | |||
| szemete) szs (ák SZ | |||
| dro) sztsze (rző st|sE //drosztszerződés word need spokening st and single sE phoneme | |||
| _búzá) szs (ák SZ | |||
| _szene) szs (ák SZ | |||
| _szalmá) szs (ák SZ | |||
| va) szs (anér SZ | |||
| gaboná) szs (ák SZ | |||
| va) sz (ápor Sz | |||
| .group t | |||
| t t | |||
| @@ -1175,6 +1225,7 @@ interne) tj (egy tj | |||
| álla) tj (ólét tj | |||
| dolgoza) tj (avít tj | |||
| természe) tj (ár tj | |||
| terüle) tj (elöl tj | |||
| .group ts | |||
| ts (_S2 tS //general rule with word end of ts letters | |||
| @@ -1377,7 +1428,7 @@ terüle) ts (áv t|S | |||
| _hé) tsz (ob t|s //same as prewious rule | |||
| gyakorla) ts (oroz t|S | |||
| támogato) ts (ág tS: | |||
| já) tsz (hass ts | |||
| .group tt | |||
| tt t: | |||
| @@ -1501,7 +1552,7 @@ _szára) zs (ág SS | |||
| találko) z (t s | |||
| eszkö) z (sor z | |||
| gő) z (síp z | |||
| matró) z (sapka z | |||
| matró) z (sapk z | |||
| nehé) z (súly z | |||
| tör) zsz (ászló Z|z | |||
| zsz z|s //general exception. Need difference first z and second sz phoneme. eg: rajzszög, rajzszeg, mézszín words. | |||
| @@ -1575,6 +1626,14 @@ magyará) z (kod s | |||
| pofo) z (kod s | |||
| ezkö) z (sáv z | |||
| eszkö) z (sáv z | |||
| _mé) z (sárg z | |||
| tű) z (sáv z | |||
| _tí) z (sor z | |||
| _szá) z (sor z | |||
| ré) z (sisak z | |||
| matró) z (zsák z | |||
| ré) z (sodrony z | |||
| há) z (sarkot z | |||
| .group | |||
| $ dolla:R2 | |||
| @@ -150,22 +150,23 @@ een @n $only | |||
| ən @-n // char.replacement for 'n | |||
| ət t // char.replacement for 't | |||
| // pronouns | |||
| ik $u | |||
| me $u | |||
| jij $u | |||
| je $u | |||
| gij $u | |||
| ge $u | |||
| u $u | |||
| hij $u | |||
| zij $u | |||
| ze $u | |||
| wij $u | |||
| we $u | |||
| // pronouns (may have -zelf suffix) | |||
| ik %Ik | |||
| me m@ | |||
| jij j%EI | |||
| je j@ | |||
| gij Q%EI | |||
| ge g@ | |||
| u %y | |||
| hij h%EI | |||
| zij z%EI | |||
| ze z@ | |||
| wij v#%EI | |||
| we v#@ | |||
| jullie $u | |||
| hen $u | |||
| zich $u | |||
| hen h%En | |||
| zich z%Ix | |||
| onszelf Ons'Elf | |||
| // possessives | |||
| mijn $u | |||
| @@ -229,7 +230,7 @@ dat $u $pause // that | |||
| hoewel $pause // although | |||
| of $u $pause // whether | |||
| omdat $pause // because | |||
| nadat $u $pause // after | |||
| nadat $u2 $pause // after | |||
| nudat $pause // now that | |||
| sinds $pause // since | |||
| tenzij $pause // unless | |||
| @@ -953,6 +954,7 @@ mokkel $alt | |||
| mormel $alt | |||
| mortel $alt | |||
| morzel $alt | |||
| navel $alt | |||
| obstakel $alt | |||
| parabel $alt | |||
| partikel $alt | |||
| @@ -1451,9 +1453,9 @@ onderhandelingsnota ,ond@r'hAnd@lINs,no:ta: | |||
| ongastvrij OnQAstvr'EI | |||
| ongelooflijk $3 | |||
| ongemakkelijk $3 | |||
| ongelukkig $3 | |||
| //ongelukkig $3 | |||
| ongerieflijk $3 | |||
| ongrondwettig $3 | |||
| //ongrondwettig $3 | |||
| partijvoorzitters $2 | |||
| pistache pist'AS | |||
| proces $2 | |||
| @@ -1478,6 +1480,9 @@ vrouwengek $alt3 | |||
| waarschijnlijk $2 | |||
| wanen v#a:n@n | |||
| wangen v#AN@n | |||
| wanluidend $2 | |||
| wanschapen $2 | |||
| wantrouwend $2 | |||
| ziekenhuisbevalling zi:k@nhWysb@vAlIN | |||
| @@ -1495,6 +1500,7 @@ Ingrid IN@-*It | |||
| Justine Zyst'in | |||
| kennedy kEn@dE | |||
| Laurent lo:r'An^ | |||
| Naomi $2 | |||
| Nys nEIsd'WyzEnt | |||
| //Trademarks | |||
| @@ -1508,7 +1514,24 @@ google gu:g@l | |||
| alexandrië $3 | |||
| canada kAna:da: | |||
| Kinshasa kInS'a:sa: | |||
| Nairobi nAjr'o:bi | |||
| Napel $alt | |||
| Rochefort roS'for | |||
| Zelzate zelzat@ | |||
| (vond dat de) vOn_tA_t@ | |||
| nadelig $2 // nadelig(e) | |||
| nadelige $2 | |||
| naderhand $3 | |||
| nadien $2 $only | |||
| nadrukke $2 // nadrukkelijk | |||
| nafta nAfta: | |||
| nalatig $2 // nalatig(e) | |||
| nalatige $2 | |||
| nasaal $2 | |||
| nasi nAsi | |||
| navoel $2 // navoelbaar(/bare) | |||
| navulbaar $2 | |||
| @@ -1,6 +1,8 @@ | |||
| // translation rules for Dutch | |||
| // This file is UTF-8 encoded | |||
| // Suffix rule: SUFX_E eg. S2e means double the vowel before the final consonant | |||
| .L01 g k | |||
| @@ -34,7 +36,6 @@ | |||
| aire (_ 'E:r@ | |||
| air (_ 'Er | |||
| @) agne (_ 'An^@ | |||
| ale (_ 'a:l@ | |||
| @) ant (_ 'Ant | |||
| @) ant (e_ 'Ant | |||
| @) ant (en_ 'Ant | |||
| @@ -51,7 +52,8 @@ | |||
| bs (_N ps | |||
| baan ba:n | |||
| &) baar (_ =ba:r | |||
| &) baar (_S4 =ba:r | |||
| &) bare (_S4 =ba:r@ | |||
| _) bij (C@P3 b'EI | |||
| _) binnen (P6 b'In@n | |||
| _) boven (P5 b'o:v@n | |||
| @@ -145,7 +147,7 @@ | |||
| .group e | |||
| e e# // [e:] but change to [@] in unstressed syllables | |||
| X) e e: // first syllable in a word | |||
| &C) e (_S1qd @ | |||
| e (_ @ | |||
| e (CK E | |||
| e (x E | |||
| @@ -157,6 +159,12 @@ | |||
| eeuw eU | |||
| eu Y: | |||
| &C) e (_S1qd @ | |||
| KAC) e (_S1e @ // remove 'e' and double the vowel | |||
| el) e (_+S1qd @ | |||
| er) e (_+S1qd @ | |||
| ig) e (_+S1qd @ | |||
| ea (_ 'e:a: | |||
| eau o: //words with French origin | |||
| @) ee (_ 'e: | |||
| @@ -188,12 +196,17 @@ | |||
| &) em (_ @m | |||
| &) e (ment @ | |||
| &) e (nissen_ @ | |||
| &) en (_S2qd @n | |||
| &) en (_S2qd @n // double the previous vowel | |||
| KAC) en (_S2e @n | |||
| el) en (_+S2qd @n | |||
| er) en (_+S2qd @n | |||
| &) ens (_S3q @ns | |||
| ll) en (_S3 @n | |||
| &) end (_ @nd | |||
| &) ende (_ @nd@ | |||
| &) enden (_ @nd@n | |||
| &) ende (_S1 @ | |||
| &) enden (_S2 @n | |||
| eden e:d@n | |||
| &) ent (_$w_alt =@nt | |||
| @) ent (_ 'Ent | |||
| @@ -205,7 +218,8 @@ | |||
| @) ent (ste_ 'Ent | |||
| ag) ent 'Ent | |||
| @j) es (_ @s | |||
| @) es (_S2qd 'Es | |||
| @) es (_S2qd 'Es // double the previous vowel | |||
| KAC) es (_S2e @s | |||
| @) essen (_S5qd 'Es@n | |||
| @) eres (_S4qd @r'Es | |||
| @) eressen (_S7sq @r'Es@n | |||
| @@ -268,6 +282,7 @@ | |||
| .group g | |||
| g Q // ph_dutch changes to [x] before unvoiced, NULL after [x] | |||
| gg Q | |||
| s) g x | |||
| _) ge (@P2 Q@ | |||
| ge (bied Q@ | |||
| @@ -335,13 +350,13 @@ | |||
| ie (CtjeX_ 'i | |||
| ie (ren_ 'i | |||
| ie (rd_ 'i | |||
| @) ig (_S2dq @x | |||
| @) ige (_S3dq @Q@ | |||
| @) igen (_ @Q@n | |||
| @) iger (_ @Q@r | |||
| @) igere (_ @Q@r@ | |||
| @) igst (_ @Qst | |||
| @) igste (_ @Qst@ | |||
| @) ig (_S2dq =@x | |||
| @) ige (_S3dq =@Q@ | |||
| @) igen (_ =@Q@n | |||
| @) iger (_ =@Q@r | |||
| @) igere (_ =@Q@r@ | |||
| @) igst (_ =@Qst | |||
| @) igste (_ =@Qst@ | |||
| ij (_ 'EI | |||
| ij (e_ 'EI | |||
| @) ij (n_ 'EI | |||
| @@ -410,10 +425,21 @@ _) inn (@P2 'I // ?? inneren | |||
| n (k$w_alt3 n | |||
| _) na (C@@P2 n'a: | |||
| _) na (tion na: | |||
| _) na (C@ n'a: | |||
| _) na (C% nA | |||
| _) na (cht nA | |||
| _) narci (s n%ArsI | |||
| _) na (rc n%A | |||
| _) na (der na: | |||
| _) na (tion na: | |||
| _) nano (@P4 n'a:no: | |||
| _) na (polA n%a: | |||
| napoleon n%a:po:l@jOn | |||
| _) natuur na:t'yr | |||
| naturel na:tyr'El | |||
| na (tur n%a: | |||
| na (vig n%a: | |||
| _) na (vr na: | |||
| _) na (volg@ n%a: | |||
| _) noord (@P5 no:rd | |||
| _) nieuws (@P6 n'iws | |||
| @@) nis (_S3 nIs | |||
| @@ -442,11 +468,13 @@ _) inn (@P2 'I // ?? inneren | |||
| _) on (@P2 %On | |||
| oo (X 'o: | |||
| oon 'o:n // in compounds, eg. telefoongesprek | |||
| oo (C_ 'o: | |||
| _) oost (@P4 o:st | |||
| _) op (@@P2 'Op | |||
| _) open (@P4 'o:p@n | |||
| _) op (era 'o:p | |||
| _) op (tion Op | |||
| @at) or (_ 'o:r | |||
| ou (che_ u | |||
| ouch (en_ uS | |||
| _) over (@P4 ,o:v@r | |||
| @@ -525,7 +553,7 @@ _) inn (@P2 'I // ?? inneren | |||
| s (s | |||
| A) s (A z | |||
| s (b z | |||
| s (g z | |||
| s (d z | |||
| sc s | |||
| sch sx | |||
| sch (_ s | |||
| @@ -536,6 +564,8 @@ _) inn (@P2 'I // ?? inneren | |||
| sj S | |||
| @@) s (_S1 s | |||
| sc (oop sk | |||
| sc (opi sk | |||
| &) sel (_ =s@l | |||
| &) selen (_ =s@l@n | |||
| @) si (o S | |||
| @@ -623,6 +653,7 @@ _) inn (@P2 'I // ?? inneren | |||
| .group v | |||
| v v | |||
| s) v f | |||
| _) van (@P3 v%An | |||
| _) vanzelf (@P7 vAnz,Elf | |||
| @@ -642,7 +673,14 @@ _) inn (@P2 'I // ?? inneren | |||
| _) wan (@P3 v#'An | |||
| _) wan (L01@P3 v#'AN | |||
| _) wan (del v#An | |||
| _) wanhopig v#Anh'o:p@Q | |||
| _) wan (kel v#AN | |||
| _) wann (eer v#An | |||
| _) wanordelijk v#An_|'Ord@l@k | |||
| _) wansmakelijk v#Ansm'a:k@l@k | |||
| _) wanstaltig v#Anst'Alt@Q | |||
| _) wantrouwig v#Antr'VU@Q | |||
| _) wanvoeglijk v#Anv'uxl@k | |||
| _) weg (@P3 v#'EQ | |||
| _) weg (en v#e:Q | |||
| _) weg (e_ v#e:Q // bewegelijk | |||
| @@ -664,7 +702,10 @@ _) inn (@P2 'I // ?? inneren | |||
| .group z | |||
| z z | |||
| z (z | |||
| s) z | |||
| zele (_S4 ze:l@ // common suffix for cities. | |||
| @) zelf (_S4 s'Elf | |||
| _) zoge (@P4 z,og@ | |||
| _) zuid (@P4 zWyt | |||
| @@ -329,6 +329,7 @@ | |||
| ou (_N 'oU | |||
| ou (_ ou | |||
| o (AAA o | |||
| @C) o (riii_ 'o | |||
| .group p | |||
| @@ -261,6 +261,9 @@ dlh dl-h | |||
| stĺp stl:p | |||
| plch pl-x | |||
| čln tSl-n | |||
| plť pl-t; | |||
| tĺk tl:k | |||
| vlk vl-k | |||
| // don't soften (d,n,t) before e,i | |||
| aktívni $alt | |||
| @@ -89,6 +89,8 @@ _[ id.V||sadUrVm // இட சதுரம் | |||
| _] vVlV||sadUrVm // வல சதுரம் | |||
| _{ id.V||gVn.Vm // இட கணம் | |||
| _} vVlV||gVn.Vm // வல கணம் | |||
| < kuRaIvU // குறைவு | |||
| > migUdi // மிகுதி | |||
| _" me:Rgo:l. // மேற்கோள் | |||
| _' ot.RaI||m'e:Rgo:l. // ொற்றை மேற்கோள் | |||
| __ ad.ig||ko:d.U // அடிக் கோடு | |||
| @@ -111,6 +113,8 @@ U+bf9 ru:ba:j | |||
| // abbreviations | |||
| ரூ ru:ba:j $dot $only | |||
| (பி . ஏ) bije: $dot | |||
| (கி . மீ) kilo:mi:t.t.Vr $dot | |||
| // numbers | |||
| _0 suz.ijVm // சுழியம் | |||
| @@ -182,9 +186,50 @@ _1M3 orUko:d.ie: | |||
| _dpt _pul.l.i | |||
| // drop final [U] when followed by an ordinal suffix | |||
| _1o onR | |||
| _2o irVn.d. | |||
| _3o mu:nR | |||
| _4o na:ng | |||
| _5o aInd | |||
| _6o a:R | |||
| _7o ;e:l | |||
| _8o ;et.t. | |||
| _9o onbVd. | |||
| _10o patt | |||
| _11o patinonR | |||
| _12o pVnnirVn.d. | |||
| _19o pattonbVd | |||
| _20o irUbVd | |||
| _30o muppVd // முப்பது | |||
| _40o na:RpVd | |||
| _50o aImbVd | |||
| _60o aRUbVd | |||
| _70o ;ez.UbVd | |||
| _80o ;en.bVd | |||
| _90o ton.n.u:R | |||
| _1Co nu:R | |||
| _2Co irUnu:R | |||
| _3Co munnu:R | |||
| _4Co na:nu:R | |||
| _5Co aInu:R | |||
| _6Co aRUnu:R | |||
| _7Co ;ez.Unu:R | |||
| _8Co ;en.n.u:R | |||
| _#ம் a:m // ordinal suffix | |||
| _#-ம் a:m // ordinal suffix | |||
| _#ல் il | |||
| _#வது a:vVdU | |||
| _#வதும் a:vVdUm | |||
| _#வதுமாக a:vVdUma:gV | |||
| _#-ம் a:m // ordinal suffix with hyphen | |||
| _#-ல் il | |||
| _#-வது a:vVdU | |||
| _#-வதும் a:vVdUm | |||
| _#-வதுமாக a:vVdUma:gV | |||
| // English words | |||
| tamil தமிழ் $text | |||
| @@ -305,7 +350,9 @@ tamil தமிழ் $text | |||
| பந்தா $alt | |||
| பிரா bra: | |||
| ப்ரா $alt | |||
| (பி . ஏ) bije: | |||
| பலம் $alt | |||
| பலமாக $alt | |||
| பலமா $alt | |||
| // initial த as [d] | |||
| @@ -366,6 +413,8 @@ tamil தமிழ் $text | |||
| தின $alt | |||
| தில் $alt | |||
| தன $alt | |||
| தடியா $alt | |||
| தட $alt | |||
| // initial ட | |||
| @@ -440,6 +489,7 @@ tamil தமிழ் $text | |||
| களிலும் $alt | |||
| கடம் $alt | |||
| காட் $alt | |||
| கிடு $alt | |||
| @@ -465,7 +515,6 @@ tamil தமிழ் $text | |||
| பைக்கில் baIkkIl | |||
| தாங்ஸ் Ta:Nks // thanks | |||
| டிபுடி d.EpjUt.i // deputy | |||
| டிபன் t.ifVn | |||
| ஆகா a:Ha: | |||
| ஓகோ o:Ho: | |||
| கப் kVp | |||
| @@ -1,9 +1,9 @@ | |||
| language variant | |||
| name female1 | |||
| gender female | |||
| gender female 70 | |||
| pitch 145 200 | |||
| flutter 7 | |||
| pitch 140 200 | |||
| flutter 8 | |||
| roughness 4 | |||
| formant 0 115 80 150 | |||
| formant 1 120 80 180 | |||
| @@ -15,4 +15,4 @@ formant 6 105 80 150 | |||
| formant 7 110 70 150 | |||
| formant 8 110 70 150 | |||
| stressAdd -10 -10 -20 -20 0 0 40 70 | |||
| stressAdd -10 -10 -20 -20 0 0 40 60 | |||
| @@ -3,7 +3,7 @@ name male1 | |||
| gender male 70 | |||
| pitch 75 109 | |||
| flutter 4 | |||
| flutter 5 | |||
| roughness 4 | |||
| consonants 80 100 | |||
| @@ -13,5 +13,4 @@ formant 6 90 50 100 | |||
| formant 7 100 50 100 | |||
| formant 8 100 50 100 | |||
| voicing 155 | |||
| fast_test 0 45 75 | |||
| @@ -1,5 +1,6 @@ | |||
| name english | |||
| language en-uk 2 | |||
| language en-gb 2 | |||
| language en 2 | |||
| gender male | |||
| @@ -1,6 +1,7 @@ | |||
| name lancashire | |||
| language en-uk-north | |||
| language en-uk 3 | |||
| language en 5 | |||
| gender male | |||
| phonemes en-n | |||
| @@ -1,6 +1,7 @@ | |||
| name english_rp | |||
| language en-uk-rp | |||
| language en-uk 4 | |||
| language en 5 | |||
| gender male | |||
| phonemes en-rp | |||
| @@ -1,6 +1,7 @@ | |||
| name en-westindies | |||
| language en-wi | |||
| language en-uk 4 | |||
| language en 10 | |||
| gender male | |||
| phonemes en-wi | |||
| @@ -1,5 +1,7 @@ | |||
| name english_wmids | |||
| language en-uk-wmids | |||
| language en-uk 9 | |||
| language en 9 | |||
| gender male | |||
| phonemes en-wm | |||
| @@ -1,6 +1,7 @@ | |||
| name spanish-latin-american | |||
| language es-la | |||
| language es-mx 6 | |||
| language es 6 | |||
| gender male | |||
| phonemes es-la | |||
| @@ -1,5 +1,6 @@ | |||
| language fr-be | |||
| name french (Belgium) | |||
| language fr-be | |||
| language fr 8 | |||
| gender male | |||
| dictrules 2 | |||
| @@ -1,9 +1,3 @@ | |||
| name hindi-test | |||
| name hindi | |||
| language hi | |||
| gender male | |||
| translator hi | |||
| phonemes hi | |||
| dictionary hi | |||
| dictrules 1 | |||
| @@ -1,5 +1,6 @@ | |||
| name armenian-west | |||
| language hy-west | |||
| language hy 8 | |||
| gender male | |||
| // change consonants for West Armenian pronunciation | |||
| @@ -1,5 +1,5 @@ | |||
| name en-german-5 | |||
| language en | |||
| language en 9 | |||
| gender female | |||
| pitch 140 220 | |||
| @@ -1,5 +1,5 @@ | |||
| name en-greek | |||
| language en 7 | |||
| language en 9 | |||
| gender male | |||
| pitch 82 117 | |||
| @@ -1,5 +1,5 @@ | |||
| name en-swedish-f | |||
| language en | |||
| language en 10 | |||
| gender female | |||
| pitch 140 220 | |||
| @@ -1,5 +1,6 @@ | |||
| name portugal | |||
| language pt-pt | |||
| language pt 6 | |||
| gender male | |||
| phonemes pt-pt | |||
| @@ -1,4 +1,4 @@ | |||
| 74 phoneme tables | |||
| 76 phoneme tables | |||
| new total | |||
| base 107 107 | |||
| consonants 10 116 | |||
| @@ -17,10 +17,11 @@ consonants 10 116 | |||
| jbo 2 114 | |||
| nci 3 123 | |||
| fi 40 133 | |||
| et 47 139 | |||
| fr 59 140 | |||
| fr-ca 11 140 | |||
| hi 57 148 | |||
| ta 22 151 | |||
| ta 23 152 | |||
| kn 17 148 | |||
| ml 21 151 | |||
| hu 25 122 | |||
| @@ -31,7 +32,7 @@ consonants 10 116 | |||
| cs 7 135 | |||
| hr 25 140 | |||
| mk 3 141 | |||
| sr 14 140 | |||
| sr 14 142 | |||
| ru 49 137 | |||
| bg 14 123 | |||
| it 19 127 | |||
| @@ -68,12 +69,13 @@ consonants 10 116 | |||
| ht 11 140 | |||
| az 10 127 | |||
| ak 8 109 | |||
| am 8 123 | |||
| am 14 112 | |||
| wo 18 118 | |||
| dv 14 148 | |||
| te 16 148 | |||
| si 24 154 | |||
| tn 27 119 | |||
| mt 32 127 | |||
| Data file Used by | |||
| b/b [b] base | |||
| @@ -99,6 +101,8 @@ d/d [d] base | |||
| [d[] base | |||
| [d] base2 | |||
| [d] fi | |||
| [d] et | |||
| [d^] et | |||
| [d] fr | |||
| [d] kn | |||
| [d] hu | |||
| @@ -106,10 +110,13 @@ d/d [d] base | |||
| [d;] pl | |||
| [d] hr | |||
| [d] sq | |||
| [d] mt | |||
| d/d_ [d] base | |||
| [d[] base | |||
| [d] base2 | |||
| [d] fi | |||
| [d] et | |||
| [d^] et | |||
| [d] fr | |||
| [d.] hi | |||
| [d] kn | |||
| @@ -118,11 +125,14 @@ d/d_ [d] base | |||
| [d;] pl | |||
| [d] hr | |||
| [d] sq | |||
| [d] mt | |||
| d/d_dnt [d] sr | |||
| d/dr [*] base | |||
| [d[] base | |||
| [d] base2 | |||
| [d] fi | |||
| [d] et | |||
| [d^] et | |||
| [d] fr | |||
| [d.] hi | |||
| [dh.] hi | |||
| @@ -132,6 +142,7 @@ d/dr [*] base | |||
| [d;] pl | |||
| [d] hr | |||
| [d] sq | |||
| [d] mt | |||
| d/tap [*;] ro | |||
| d/tap1 [*] base | |||
| d/tap2 [t#] en | |||
| @@ -143,6 +154,7 @@ d/xd [d] base | |||
| [dz] consonants | |||
| [d] base2 | |||
| [d] fi | |||
| [d] et | |||
| [d] fr | |||
| [z] fr | |||
| [dh] hi | |||
| @@ -152,8 +164,10 @@ d/xd [d] base | |||
| [d] hr | |||
| [d] sr | |||
| [d] sq | |||
| [d] mt | |||
| d/xd3 [dh] hi | |||
| d/xd_pzd [d;] pl | |||
| d/xd_pzd [d^] et | |||
| [d;] pl | |||
| d/xdr [d] fr | |||
| [d.] hi | |||
| [dh.] hi | |||
| @@ -247,25 +261,37 @@ g/xg [g] base | |||
| g/xgr [g] fr | |||
| h/h_ [h] base | |||
| [h] fi | |||
| [h] et | |||
| [<h>] la | |||
| [h] mt | |||
| h/h@ [h] base | |||
| [h] fi | |||
| [h] sr | |||
| [h] et | |||
| [h#] sr | |||
| [<h>] la | |||
| [h] mt | |||
| h/ha [h] base | |||
| [h] fi | |||
| [h] et | |||
| [<h>] la | |||
| [h] mt | |||
| h/he [h] base | |||
| [h] fi | |||
| [h] et | |||
| [<h>] la | |||
| [h] mt | |||
| h/hi [h] base | |||
| [h] fi | |||
| [h] et | |||
| [<h>] la | |||
| [h] mt | |||
| h/ho [h] base | |||
| [<h>] la | |||
| h/hu [h] base | |||
| [<h>] la | |||
| h/hu_fi [h] fi | |||
| [h] et | |||
| [h] mt | |||
| j2/_j2 [;] base | |||
| j2/j2@ [;] base | |||
| j2/j2a [;] base | |||
| @@ -368,8 +394,8 @@ l/l_ [l] base | |||
| [l/] fr | |||
| l/l_@ [l/3] base | |||
| [l/] fr | |||
| l/l@ [l#] base | |||
| [”¦] base | |||
| l/l@ [h1ô] base | |||
| [l#] base | |||
| [l] fr | |||
| [l/2] fr | |||
| [K] nso | |||
| @@ -402,16 +428,16 @@ l/L2_oL [l/2] base | |||
| l/L2_uL [l/2] base | |||
| l/l_3 [l/] de | |||
| l/l_4 [ll] sq | |||
| l/la [l#] base | |||
| [”¦] base | |||
| l/la [h1ô] base | |||
| [l#] base | |||
| [l] fr | |||
| [l/2] fr | |||
| [K] nso | |||
| [K] tn | |||
| l/l_a [l/3] base | |||
| [l/] fr | |||
| l/le [l#] base | |||
| [”¦] base | |||
| l/le [h1ô] base | |||
| [l#] base | |||
| [l] fr | |||
| [l/2] fr | |||
| [K] nso | |||
| @@ -422,8 +448,8 @@ l/L_eL_af [&] af | |||
| [&:] af | |||
| l/l_front [L] sq | |||
| l/l_front_ [l/4] sq | |||
| l/li [l#] base | |||
| [”¦] base | |||
| l/li [h1ô] base | |||
| [l#] base | |||
| [l] fr | |||
| [l/2] fr | |||
| [l] zh | |||
| @@ -436,8 +462,8 @@ ll/ll [L] bg | |||
| ll/_ll [L] bg | |||
| l/l_long [l] base | |||
| [l] fr | |||
| l/lo [l#] base | |||
| [”¦] base | |||
| l/lo [h1ô] base | |||
| [l#] base | |||
| [l/2] fr | |||
| [K] nso | |||
| [K] tn | |||
| @@ -446,8 +472,8 @@ l/l_o [l/3] base | |||
| l^/l_rfx [l.] base | |||
| [l] ru | |||
| [l^] ru | |||
| l/lu [l#] base | |||
| [”¦] base | |||
| l/lu [h1ô] base | |||
| [l#] base | |||
| [l] fr | |||
| [l/2] fr | |||
| [K] nso | |||
| @@ -584,9 +610,11 @@ r2/r2u [r-] en | |||
| [r-] tn | |||
| r3/r_ [r/] base | |||
| [r/] af | |||
| [r] et | |||
| [r/] tn | |||
| r3/r#_ [r#] is | |||
| r3/r_n [r/] base | |||
| [r] et | |||
| r3/r_ru [R4] ru | |||
| r3/r_ru2 [R4] ru | |||
| r3/r_trill [R2] base | |||
| @@ -606,8 +634,10 @@ r3/r_trill3.wav [R3] base | |||
| [r] af | |||
| [r] tn | |||
| r3/r_trill_short [R2] fi | |||
| [R2] et | |||
| r3/r_trill.wav [R2] base | |||
| [R2] fi | |||
| [R2] et | |||
| [R2] lv | |||
| [R] pl | |||
| [r*] sr | |||
| @@ -620,6 +650,7 @@ r3/r_uvl.wav [r"] base | |||
| r3/rx [*] base | |||
| [r/] base | |||
| [r/] af | |||
| [r] et | |||
| [r/] fr | |||
| [R] fr-ca | |||
| [x] pt-pt | |||
| @@ -684,8 +715,8 @@ r/xr [r] base | |||
| ufric/ch [C] base | |||
| [J^] base | |||
| ufric/ch_ [C] base | |||
| ufric/ch_sr [h] sr | |||
| [x] sr | |||
| ufric/ch_sr [h#] sr | |||
| [x#] sr | |||
| ufric/f [f] base | |||
| [pF] de | |||
| [f] fr | |||
| @@ -735,6 +766,7 @@ ufric/sh_pzd2 [S] sr | |||
| [S;] zh | |||
| ufric/sh_rfx [s.] base | |||
| [s.] zh | |||
| ufric/s_pal [s^] et | |||
| ufric/s_pzd [s;] base | |||
| [z;] base | |||
| [s;] ro | |||
| @@ -753,8 +785,8 @@ ufric/x2 [x2] af | |||
| ufric/x_hr [x] base | |||
| [x] hr | |||
| [x] ru | |||
| ufric/x_sr [h] sr | |||
| [x] sr | |||
| ufric/x_sr [h#] sr | |||
| [x#] sr | |||
| ufric/xx [X] base | |||
| [Q"] base | |||
| ustop/c [c] base | |||
| @@ -772,9 +804,11 @@ ustop/k_asp [kh] consonants | |||
| [kh] zh | |||
| [kh] tn | |||
| ustop/k_asp2 [k#] ka | |||
| ustop/k_ejc [k`] am | |||
| ustop/ki [k] base | |||
| [k] base2 | |||
| [c] af | |||
| [k] et | |||
| [k] fr | |||
| [k] lv | |||
| [k^] mk | |||
| @@ -786,6 +820,7 @@ ustop/ki [k] base | |||
| ustop/kl [k] base | |||
| [kh] consonants | |||
| [k] base2 | |||
| [k] et | |||
| [k] fr | |||
| [k] lv | |||
| [k] el | |||
| @@ -794,11 +829,13 @@ ustop/kl [k] base | |||
| [kh] tn | |||
| ustop/kr [k] base | |||
| [k] base2 | |||
| [k] et | |||
| [k] el | |||
| [k] zhy | |||
| ustop/k_unasp [k] base | |||
| [k-] consonants | |||
| [k] base2 | |||
| [k] et | |||
| [k] lv | |||
| [k] el | |||
| [k] zhy | |||
| @@ -845,6 +882,7 @@ ustop/p_unasp [p] base | |||
| [p] zh | |||
| [p] sq | |||
| [p] da | |||
| [p`] am | |||
| ustop/p_unasp_ [p-] consonants | |||
| [p] base2 | |||
| [p] fr | |||
| @@ -865,10 +903,12 @@ ustop/t_ [t] base | |||
| [t] lv | |||
| [t] sk | |||
| [th] zh | |||
| [t`] am | |||
| ustop/t_dnt [t] base | |||
| [t[] base | |||
| [t] base2 | |||
| [t] en-us | |||
| [t] et | |||
| [dh] hi | |||
| [th] hi | |||
| [t] hu | |||
| @@ -877,7 +917,10 @@ ustop/t_dnt [t] base | |||
| ustop/t_dnt2 [t] base2 | |||
| [d] kn | |||
| ustop/t_hi [t[] base | |||
| [t] et | |||
| [t`] am | |||
| ustop/t_pzd [c] base | |||
| [t^] et | |||
| [t;] pl | |||
| ustop/tr [t] base | |||
| [t] en-us | |||
| @@ -913,6 +956,7 @@ ustop/t_short_ [t] fr | |||
| ustop/tsh_pzd [tS;] zh | |||
| ustop/tsh_pzd_unasp [tS;] zh | |||
| ustop/tsh_sr [tS] sr | |||
| ustop/tsh_unasp [tS`] am | |||
| ustop/ts_pzd [tS;] base | |||
| [Jh] hi | |||
| [tS;] ru | |||
| @@ -956,6 +1000,7 @@ vdiph2/i@ [i@] en-n | |||
| vdiph2/i@_2 [i@] en-wm | |||
| vdiph2/ie [i@] en-wi | |||
| [ie] fi | |||
| [ie] mt | |||
| vdiph2/ie_2 [ie] lv | |||
| vdiph2/ii@ [i@] en | |||
| [i@3] en | |||
| @@ -968,10 +1013,12 @@ vdiph2/iu [iU] base2 | |||
| [iu] zhy | |||
| vdiph2/iu_2 [iu] fi | |||
| [iu] lv | |||
| [iu] mt | |||
| vdiph2/iu_3 [iu] af | |||
| vdiph2/iu_4 [Iu] cy | |||
| [Yu] cy | |||
| vdiph2/iy [iy] fi | |||
| [iy] mt | |||
| vdiph2/o@ [o@] af | |||
| [u@] zh | |||
| vdiph2/oa [Oa] ro | |||
| @@ -982,6 +1029,7 @@ vdiph2/o_oo [o@] en-wi | |||
| vdiph2/u#@ [U@] en-sc | |||
| vdiph2/uaa [uo] lv | |||
| vdiph2/uo [uo] fi | |||
| [uo] mt | |||
| vdiph2/uu@ [U@] en | |||
| [U@] en-n | |||
| [U@] en-wm | |||
| @@ -997,7 +1045,9 @@ vdiph2/yu [yU] nl | |||
| [yu] zh | |||
| vdiph2/y-y# [yY] fi | |||
| [y@] vi | |||
| [yY] mt | |||
| vdiph/8u [oU] en-us | |||
| [8u] et | |||
| [ou] zh | |||
| vdiph/aae [aI] en-us | |||
| vdiph/aai [ai] lv | |||
| @@ -1007,10 +1057,12 @@ vdiph/aai [ai] lv | |||
| vdiph/aai_2 [AI] af | |||
| [AY] cy | |||
| vdiph/aai_3 [ai] fi | |||
| [ai] mt | |||
| vdiph/aau [au] fi | |||
| [au] lv | |||
| [aU] is | |||
| [aU:] is | |||
| [au] mt | |||
| vdiph/aau_2 [aU] en-wi | |||
| [VU] nl | |||
| [aU] la | |||
| @@ -1083,6 +1135,7 @@ vdiph/eei_2 [eI] eo | |||
| [ei] fi | |||
| [ei] lv | |||
| [eI] id | |||
| [ei] mt | |||
| vdiph/eei_3 [eI] sk | |||
| [eI] ku | |||
| vdiph/eeu [EU] pt | |||
| @@ -1095,6 +1148,7 @@ vdiph/eeu_3 [aU] en-n | |||
| [aU] en-wm | |||
| [eU] ku | |||
| vdiph/eey [ey] fi | |||
| [ey] mt | |||
| vdiph/ei [eI] base2 | |||
| [e:] nl | |||
| [eI] la | |||
| @@ -1112,10 +1166,14 @@ vdiph/eu [eU] base2 | |||
| [eU] vi | |||
| [eU] ne | |||
| vdiph/eu_2 [eu] fi | |||
| vdiph/@i [@I] vi | |||
| [eu] mt | |||
| vdiph/@i [Yi] et | |||
| [@I] vi | |||
| [@:I] vi | |||
| vdiph/&i [&i] fi | |||
| [&i] et | |||
| [aI] hi | |||
| [i] mt | |||
| vdiph/@i_2 [eI] af | |||
| [@I] cy | |||
| [@Y] cy | |||
| @@ -1144,6 +1202,7 @@ vdiph/ooi [OI] en | |||
| [oi] lv | |||
| [OI] no | |||
| [oi] zhy | |||
| [oi] mt | |||
| vdiph/ooi_2 [OI] af | |||
| [oI] eo | |||
| vdiph/ooi_3 [OI] en-rp | |||
| @@ -1155,6 +1214,7 @@ vdiph/oou [oU] cs | |||
| vdiph/ou [ou] fi | |||
| [ou] zhy | |||
| [oU] ne | |||
| [ou] mt | |||
| vdiph/ou_2 [oU] sk | |||
| [oU] ro | |||
| vdiph/ou_3 [oU] is | |||
| @@ -1178,6 +1238,7 @@ vdiph/ui_2 [uI] af | |||
| vdiph/ui_3 [uI] cy | |||
| [uY] cy | |||
| vdiph/ui_4 [ui] fi | |||
| [ui] mt | |||
| vdiph/Vi [VI] ne | |||
| vdiph/Vu [@U] af | |||
| [VU] ne | |||
| @@ -1185,13 +1246,17 @@ vdiph/Vu_2 [oU] en-wm | |||
| vdiph/&y [&y] fi | |||
| [Wy] nl | |||
| vdiph/yi [yi] fi | |||
| [yi] et | |||
| [yI] grc | |||
| [u-I] no | |||
| [yi] zh | |||
| [yi] mt | |||
| vdiph/y#i [Yi] fi | |||
| [Yi] mt | |||
| vdiph/y#i_2 [Yy] is | |||
| [Yy:] is | |||
| vdiph/y#y [Yy] fi | |||
| [Yy] mt | |||
| vdiph/y#y_2 [Yy] af | |||
| [eoi] zhy | |||
| vdiph/y#y_3 [Y:] nl | |||
| @@ -1248,14 +1313,18 @@ voc/Q_less [Q] nl | |||
| voc/Q_ulv [Q"] base | |||
| voc/v [v] base | |||
| [v] fi | |||
| [v] et | |||
| [v] fr | |||
| [v;] ro | |||
| [v] mt | |||
| voc/v_ [B] base | |||
| [v] base | |||
| [v] fi | |||
| [v] et | |||
| [v] fr | |||
| [v#] es | |||
| [v;] ro | |||
| [v] mt | |||
| voc/v# [v#] base | |||
| voc/v#_ [v#] base | |||
| voc/v2 [v#] es | |||
| @@ -1317,6 +1386,8 @@ vowel/@- [@-] base | |||
| [r*] hr | |||
| vowel/& [a] en-rp | |||
| [&] fi | |||
| [&] et | |||
| [&:] et | |||
| [&:] hi | |||
| [&] lv | |||
| [&:] lv | |||
| @@ -1365,11 +1436,13 @@ vowel/@_6 [@] en | |||
| [W2] fr | |||
| vowel/8 [o-] zh | |||
| vowel/8_2 [U] en-us | |||
| [8] et | |||
| [8] sv | |||
| vowel/8_3 [eo] zhy | |||
| vowel/8_5 [8] ku | |||
| vowel/8_6 [V] sq | |||
| vowel/8_7 [@] lv | |||
| vowel/8_7 [8:] et | |||
| [@] lv | |||
| vowel/a [a] base | |||
| [a] en | |||
| [aa] en | |||
| @@ -1392,7 +1465,6 @@ vowel/a [a] base | |||
| [a] zh | |||
| [a] id | |||
| [a] sl | |||
| [a] am | |||
| vowel/a# [a] base2 | |||
| [a/] base2 | |||
| [a#] en-sc | |||
| @@ -1478,11 +1550,14 @@ vowel/a_5 [a:] ta | |||
| [a] tn | |||
| vowel/a_6 [a] ca | |||
| [a:] vi | |||
| [a] am | |||
| [a:] wo | |||
| vowel/a_7 [a] en | |||
| [a] fr | |||
| [a] sk | |||
| [a] ht | |||
| vowel/aa [A] fr-ca | |||
| vowel/aa [a:] et | |||
| [A] fr-ca | |||
| [A] no | |||
| [A:] no | |||
| [aa] zhy | |||
| @@ -1510,13 +1585,17 @@ vowel/aa_6 [A] de | |||
| [A:] de | |||
| vowel/aa_8 [0] en-us | |||
| [A:] en-us | |||
| [A] et | |||
| [A1] et | |||
| [A] nl | |||
| [a:] is | |||
| vowel/aa_9 [a] fi | |||
| [a] et | |||
| [a:] hi | |||
| [a] ne | |||
| [a] pa | |||
| [a] ak | |||
| [a] mt | |||
| vowel/@_bck [@] hi | |||
| [@] bg | |||
| [@] zh | |||
| @@ -1573,6 +1652,8 @@ vowel/e_3 [i] en-n | |||
| vowel/e_5 [i] en-sc | |||
| vowel/e_6 [e] ht | |||
| [e] ak | |||
| vowel/e_7 [e] et | |||
| [e:] et | |||
| vowel/e_8 [E:] de | |||
| [e] fr | |||
| vowel/ee [E] en-n | |||
| @@ -1598,12 +1679,15 @@ vowel/ee_2 [E] cy | |||
| [E] pa | |||
| vowel/ee#_2 [E-] sv | |||
| [E#] sq | |||
| [@] am | |||
| [e] tn | |||
| vowel/ee_3 [&] af | |||
| [&:] af | |||
| [E] pt | |||
| [E] vi | |||
| vowel/ee_4 [E] sq | |||
| vowel/ee_4 [E] et | |||
| [E1] et | |||
| [E] sq | |||
| vowel/ee_5 [E] en | |||
| [E] ak | |||
| [E] wo | |||
| @@ -1665,6 +1749,7 @@ vowel/e_mid2 [E] af | |||
| [e] am | |||
| [e] te | |||
| [e:] si | |||
| [e] mt | |||
| vowel/@_fnt [@] en-wi | |||
| [@2] en-wi | |||
| [@2] hr | |||
| @@ -1699,7 +1784,6 @@ vowel/i [i] base | |||
| [i] prs | |||
| [i] nso | |||
| [i] ak | |||
| [i] am | |||
| [i:] wo | |||
| [i:] dv | |||
| [i:] te | |||
| @@ -1707,11 +1791,14 @@ vowel/i [i] base | |||
| vowel/i# [y:] cy | |||
| vowel/i_2 [i2] de | |||
| [i:] de | |||
| [i] et | |||
| [i] nl | |||
| [i:] la | |||
| [i:] sv | |||
| vowel/i#_2 [y] am | |||
| vowel/i_3 [i] af | |||
| [I] et | |||
| [I1] et | |||
| [i:] sk | |||
| vowel/i_4 [i] fi | |||
| [i] hu | |||
| @@ -1719,6 +1806,7 @@ vowel/i_4 [i] fi | |||
| [i:] is | |||
| [i] vi | |||
| [i] da | |||
| [i] mt | |||
| vowel/i_5 [i:] en-sc | |||
| vowel/i#_5 [y] pt-pt | |||
| [i/] pt-pt | |||
| @@ -1734,11 +1822,13 @@ vowel/i_6 [i] hi | |||
| [i] tr | |||
| [i] ku | |||
| [i] id | |||
| [i] am | |||
| [i] dv | |||
| [i] te | |||
| [i] si | |||
| vowel/i#_6 [i.] zh | |||
| vowel/i_7 [i] pl | |||
| vowel/i_7 [i:] et | |||
| [i] pl | |||
| [i] sq | |||
| vowel/i#_7 [i[] zh | |||
| vowel/i_8 [i] fr | |||
| @@ -1770,6 +1860,7 @@ vowel/ii# [Y] cy | |||
| [i] sq | |||
| vowel/ii_2 [I] en | |||
| [i] zh | |||
| [I] mt | |||
| vowel/ii#_2 [y] pl | |||
| vowel/ii_3 [I] cy | |||
| [I] fi | |||
| @@ -1785,7 +1876,8 @@ vowel/ii#_3 [I2] en-us | |||
| vowel/ii_4 [I2] en | |||
| [I] en-us | |||
| [I2] tn | |||
| vowel/ii_5 [i] ta | |||
| vowel/ii_5 [i1] et | |||
| [i] ta | |||
| [i] bg | |||
| [I] la | |||
| [i] zh | |||
| @@ -1819,7 +1911,6 @@ vowel/@_low [@] en-rp | |||
| [@/] ne | |||
| [@] pa | |||
| [V] pa | |||
| [@] am | |||
| [@] si | |||
| vowel/@_low2 [@/] en-us | |||
| [@2] en-us | |||
| @@ -1829,6 +1920,7 @@ vowel/o [o] base2 | |||
| [oU] en-wi | |||
| [o:] de | |||
| [o] eo | |||
| [o:] et | |||
| [o] fr | |||
| [o] hi | |||
| [o] ta | |||
| @@ -1881,6 +1973,9 @@ vowel/oe [W] af | |||
| vowel/oe_2 [W] no | |||
| vowel/oe_4 [W] sv | |||
| vowel/o_mid [U@] en-rp | |||
| [O] et | |||
| [o] et | |||
| [O1] et | |||
| [O] fr | |||
| [o] hu | |||
| [o] bg | |||
| @@ -1929,6 +2024,7 @@ vowel/oo_1 [O:] en-n | |||
| [o] si | |||
| [o:] si | |||
| [O] tn | |||
| [o] mt | |||
| vowel/oo_2 [0] en-sc | |||
| [O] cy | |||
| [o] cs | |||
| @@ -1993,12 +2089,16 @@ vowel/u_2 [u1] fi | |||
| [u] am | |||
| [u] wo | |||
| vowel/u#_2 [u-] sv | |||
| vowel/u_3 [u] et | |||
| [u:] et | |||
| vowel/u#_3 [U] ta | |||
| [U:] ta | |||
| vowel/u#_4 [U] en-sc | |||
| [u:] en-sc | |||
| [y] ml | |||
| vowel/u_5 [u] sw | |||
| vowel/u_5 [U] et | |||
| [U1] et | |||
| [u] sw | |||
| [u] nso | |||
| [u] az | |||
| [u] tn | |||
| @@ -2048,6 +2148,7 @@ vowel/u_bck [u] base2 | |||
| [u#] rw | |||
| [u] ne | |||
| [u] pa | |||
| [u] mt | |||
| vowel/u_bck2 [u] fr | |||
| [u:] fr | |||
| [u:] la | |||
| @@ -2065,6 +2166,7 @@ vowel/uu_3 [u] af | |||
| [y] zh | |||
| vowel/uu_4 [U] fi | |||
| [U] sv | |||
| [U] mt | |||
| vowel/uu_bck [U] en-wi | |||
| [U] fr-ca | |||
| [U] hi | |||
| @@ -2097,6 +2199,8 @@ vowel/V_6 [V] en-us | |||
| vowel/y [y] base2 | |||
| [y:] de | |||
| [y] fi | |||
| [y] et | |||
| [y:] et | |||
| [y] fr | |||
| [y:] hu | |||
| [y] nl | |||
| @@ -2105,16 +2209,20 @@ vowel/y [y] base2 | |||
| [y] sq | |||
| [y] da | |||
| [y] az | |||
| [y] mt | |||
| vowel/y# [Y] base2 | |||
| [3:] en-wm | |||
| [Y:] de | |||
| [Y] fi | |||
| [Y] et | |||
| [Y:] et | |||
| [Y] fr | |||
| [Y:] hu | |||
| [8] nl | |||
| [Y] ro | |||
| [oe] zhy | |||
| [W] tr | |||
| [Y] mt | |||
| vowel/y## [y] is | |||
| vowel/y_2 [y:] la | |||
| [y] zh | |||
| @@ -2341,6 +2449,7 @@ x/d_ [d] base | |||
| [d[] base | |||
| [d] base2 | |||
| [d] fi | |||
| [d] et | |||
| [d] fr | |||
| [d.] hi | |||
| [d] kn | |||
| @@ -2348,13 +2457,17 @@ x/d_ [d] base | |||
| [d] hr | |||
| [d] is | |||
| [d] sq | |||
| [d] mt | |||
| x/d_dnt [d[] base | |||
| [d] base2 | |||
| [d] fi | |||
| [d] et | |||
| [d] kn | |||
| [d] hu | |||
| [d] pl | |||
| x/d_pzd [d;] pl | |||
| [d] mt | |||
| x/d_pzd [d^] et | |||
| [d;] pl | |||
| x/dzh [J] base | |||
| [dZ] base | |||
| x/dzh_ [dZ] base | |||
| @@ -350,9 +350,12 @@ phoneme t | |||
| voicingswitch d | |||
| lengthmod 2 | |||
| IF prevPh(isVowel) OR prevPh(n) THEN | |||
| IF nextPh(isVowel) AND nextPh(isUnstressed) AND thisPh(notWordStart) AND nextPh(notWordStart) THEN | |||
| ChangePhoneme(t#) | |||
| IF prevPhW(isVowel) OR prevPhW(n) THEN | |||
| IF nextPhW(isVowel) AND nextPh(isUnstressed) THEN | |||
| IF next2Ph(n) AND next2Ph(notWordStart) THEN | |||
| ELSE | |||
| ChangePhoneme(t#) | |||
| ENDIF | |||
| ENDIF | |||
| ENDIF | |||
| @@ -63,7 +63,8 @@ endphoneme | |||
| // This is for letter "h" at the beginning of a word | |||
| phoneme x | |||
| // Use [x] from lang=hr, request by Gašić Dajan 27.06.2011 | |||
| phoneme x# | |||
| vls vel frc | |||
| lengthmod 3 | |||
| IF nextPh(#i) OR nextPh(#e) THEN | |||
| @@ -76,7 +77,8 @@ endphoneme | |||
| // This is for letter "h" not at the beginning of word | |||
| phoneme h | |||
| // Use standard [h], request by Gašić Dajan 27.06.2011 | |||
| phoneme h# | |||
| vls vel frc | |||
| lengthmod 3 | |||
| IF nextPh(#@) THEN | |||
| @@ -31,9 +31,14 @@ phoneme e: | |||
| FMT(vowel/e_mid) | |||
| endphoneme | |||
| phoneme a | |||
| vowel starttype #a endtype #a | |||
| length 120 | |||
| IF thisPh(isWordEnd) AND thisPh(isUnstressed) THEN | |||
| FMT(vowel/a_7) | |||
| ENDIF | |||
| FMT(vowel/a) | |||
| endphoneme | |||
| @@ -29,13 +29,12 @@ endphoneme | |||
| phoneme V# // omit if the next phoneme is a vowel | |||
| vowel starttype #@ endtype #@ | |||
| length 130 | |||
| IF nextPhW(isVowel) THEN | |||
| IF nextPhW(isVowel) OR nextPhW(#) THEN | |||
| ChangePhoneme(NULL) | |||
| ENDIF | |||
| ChangePhoneme(V) | |||
| endphoneme | |||
| phoneme a: | |||
| vowel starttype #a endtype #a | |||
| length 300 | |||
| @@ -155,3 +154,8 @@ phoneme : // Lengthen previous vowel by "length" | |||
| length 50 | |||
| endphoneme | |||
| phoneme # // a NULL phoneme for 'virama' | |||
| virtual | |||
| ChangePhoneme(NULL) | |||
| endphoneme | |||
| @@ -1425,7 +1425,7 @@ endphoneme | |||
| phoneme q | |||
| vls uvl stop | |||
| lengthmod 2 | |||
| Vowelin f1=1 f2=1700 0 200 f3=-300 80 paus f4 rms=30 | |||
| Vowelin f1=1 f2=1700 0 200 f3=-300 80 gpaus f4 rms=30 | |||
| Vowelout f1=1 f2=1700 -100 200 f3=-300 80 f4 rms=35 | |||
| IF nextPh(isPause2) THEN | |||
| @@ -1682,6 +1682,9 @@ include ph_nahuatl | |||
| phonemetable fi base | |||
| include ph_finnish | |||
| phonemetable et base | |||
| include ph_estonian | |||
| phonemetable fr base | |||
| include ph_french | |||
| @@ -1857,7 +1860,7 @@ include ph_azerbaijani | |||
| phonemetable ak base | |||
| include ph_akan | |||
| phonemetable am base2 | |||
| phonemetable am base | |||
| include ph_amhari | |||
| phonemetable wo base | |||
| @@ -1874,3 +1877,7 @@ include ph_sinhala | |||
| phonemetable tn base | |||
| include ph_setswana | |||
| phonemetable mt base | |||
| include ph_maltese | |||
| @@ -2,7 +2,7 @@ | |||
| [Setup] | |||
| AppName=eSpeak | |||
| AppVerName=eSpeak version 1.45.01 | |||
| AppVerName=eSpeak version 1.45.05 | |||
| AppCopyright=Licensed under GNU General Public License version 3. (See file License.txt for details). | |||
| WindowVisible=yes | |||
| @@ -145,6 +145,7 @@ begin | |||
| $1d: Result := 'sv'; | |||
| $1f: Result := 'tr'; | |||
| $21: Result := 'id'; | |||
| $25: Result := 'et'; | |||
| $26: Result := 'lv'; | |||
| $2a: Result := 'vi'; | |||
| $2b: Result := 'hy'; | |||
| @@ -153,6 +154,7 @@ begin | |||
| $2f: Result := 'mk'; | |||
| $36: Result := 'af'; | |||
| $39: Result := 'hi'; | |||
| //$3a: Result := 'mt'; | |||
| $41: Result := 'sw'; | |||
| $49: Result := 'ta'; | |||
| $4b: Result := 'kn'; | |||
| @@ -230,6 +232,7 @@ begin | |||
| 'mk': value := $42f; | |||
| 'ml': value := $44c; | |||
| 'mn': value := $450; | |||
| 'mt': value := $43a; | |||
| 'ne': value := $461; | |||
| 'nl': value := $413; | |||
| 'no': value := $414; | |||
| @@ -238,6 +241,7 @@ begin | |||
| 'ro': value := $418; | |||
| 'ru': value := $419; | |||
| 'rw': value := $487; | |||
| 'si': value := $45b; | |||
| 'sk': value := $41b; | |||
| 'sq': value := $41c; | |||
| 'sr': value := $81a; | |||
| @@ -1,7 +1,7 @@ | |||
| [Setup] | |||
| AppName=eSpeakEdit | |||
| AppVerName=eSpeakEdit version 1.45.01 | |||
| AppVerName=eSpeakEdit version 1.45.05 | |||
| DefaultDirName={pf}\eSpeak | |||
| DefaultGroupName=eSpeak | |||
| OutputBaseFilename=setup_espeakedit | |||
| @@ -26,6 +26,8 @@ LN_SF = /bin/ln -sf | |||
| MKDIR = mkdir -p | |||
| AUDIO = portaudio | |||
| #AUDIO = portaudio0 | |||
| #AUDIO = portaudio2 | |||
| #AUDIO = pulseaudio | |||
| #AUDIO = sada | |||
| @@ -39,6 +41,16 @@ WAVE=wave.cpp | |||
| LIB_AUDIO=-lportaudio | |||
| USE_AUDIO=-DUSE_PORTAUDIO | |||
| else | |||
| ifeq ($(AUDIO),portaudio0) | |||
| WAVE=wave.cpp | |||
| LIB_AUDIO=/usr/lib/libportaudio.so.0 | |||
| USE_AUDIO=-DUSE_PORTAUDIO | |||
| else | |||
| ifeq ($(AUDIO),portaudio2) | |||
| WAVE=wave.cpp | |||
| LIB_AUDIO=/usr/lib/libportaudio.so.2 | |||
| USE_AUDIO=-DUSE_PORTAUDIO | |||
| else | |||
| ifeq ($(AUDIO),sada) | |||
| WAVE=wave_sada.cpp | |||
| USE_AUDIO=-DUSE_SADA | |||
| @@ -47,6 +59,8 @@ WAVE=wave.cpp | |||
| endif | |||
| endif | |||
| endif | |||
| endif | |||
| endif | |||
| speak_SOURCES = speak.cpp compiledict.cpp dictionary.cpp intonation.cpp \ | |||
| readclause.cpp setlengths.cpp numbers.cpp synth_mbrola.cpp \ | |||
| @@ -350,7 +350,7 @@ static keywtab_t keywords[] = { | |||
| {"glstop", tTRANSITION, 8}, | |||
| {"lenadd", tTRANSITION, 9}, | |||
| {"f4", tTRANSITION, 10}, | |||
| {"paus", tTRANSITION, 11}, | |||
| {"gpaus", tTRANSITION, 11}, | |||
| {"colr=", tTRANSITION, 12}, | |||
| {"amp=", tTRANSITION, 13}, // set rms of 1st frame as fraction of rms of 2nd frame (1/30ths) | |||
| @@ -617,8 +617,8 @@ void GetTranslatedPhonemeString(char *phon_out, int n_phon_out) | |||
| */ | |||
| int ix; | |||
| int len; | |||
| int max_len; | |||
| unsigned int len; | |||
| unsigned int max_len; | |||
| int phon_out_ix=0; | |||
| int stress; | |||
| unsigned int c; | |||
| @@ -2928,7 +2928,7 @@ static const char *LookupDict2(Translator *tr, const char *word, const char *wor | |||
| const char *word_end; | |||
| const char *word1; | |||
| int wflags = 0; | |||
| int wflags2; | |||
| // int wflags2; | |||
| char word_buf[N_WORD_BYTES+1]; | |||
| if(wtab != NULL) | |||
| @@ -3497,6 +3497,17 @@ int RemoveEnding(Translator *tr, char *word, int end_type, char *word_copy) | |||
| if(end_type & SUFX_E) | |||
| { | |||
| if(tr->translator_name == L('n','l')) | |||
| { | |||
| if(((word_end[0] & 0x80) == 0) && ((word_end[-1] & 0x80) == 0) && IsVowel(tr, word_end[-1]) && IsLetter(tr, word_end[0], LETTERGP_C) && !IsVowel(tr, word_end[-2])) | |||
| { | |||
| //double the vowel before the (ascii) final consonant | |||
| word_end[1] = word_end[0]; | |||
| word_end[0] = word_end[-1]; | |||
| word_end[2] = ' '; | |||
| } | |||
| } | |||
| else | |||
| if(tr->translator_name == L('e','n')) | |||
| { | |||
| // add 'e' to end of stem | |||
| @@ -123,6 +123,7 @@ static void close_pipes(int p1[2], int p2[2], int p3[2]) | |||
| static int start_mbrola(const char *voice_path) | |||
| { | |||
| int error, p_stdin[2], p_stdout[2], p_stderr[2]; | |||
| ssize_t written; | |||
| char charbuf[20]; | |||
| if (mbr_state != MBR_INACTIVE) { | |||
| @@ -151,7 +152,7 @@ static int start_mbrola(const char *voice_path) | |||
| 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)); | |||
| written = write(p_stderr[1], mbr_errorbuf, strlen(mbr_errorbuf)); | |||
| _exit(1); | |||
| } | |||
| @@ -168,7 +169,7 @@ static int start_mbrola(const char *voice_path) | |||
| /* 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)); | |||
| written = write(2, mbr_errorbuf, strlen(mbr_errorbuf)); | |||
| _exit(1); | |||
| } | |||
| @@ -1590,13 +1590,13 @@ static int TranslateNumber_1(Translator *tr, char *word, char *ph_out, unsigned | |||
| int suffix_ix; | |||
| int skipwords = 0; | |||
| char *p; | |||
| char string[20]; // for looking up entries in **_list | |||
| char string[32]; // for looking up entries in **_list | |||
| char buf1[100]; | |||
| char ph_append[50]; | |||
| char ph_buf[200]; | |||
| char ph_buf2[50]; | |||
| char ph_zeros[50]; | |||
| char suffix[20]; | |||
| char suffix[30]; // string[] must be long enough for sizeof(suffix)+2 | |||
| char buf_digit_lookup[50]; | |||
| static const char str_pause[2] = {phonPAUSE_NOLINK,0}; | |||
| @@ -190,9 +190,11 @@ void MakePhonemeList(Translator *tr, int post_pause, int start_sentence) | |||
| if(regression & 0x2) | |||
| { | |||
| // [v] amd [v;] don't cause regression, or [R^] | |||
| if((ph->mnemonic == 'v') || (ph->mnemonic == ((';'<<8)+'v')) || ((ph->mnemonic & 0xff)== 'R')) | |||
| if(((ph->mnemonic & 0xff) == 'v') || ((ph->mnemonic & 0xff)== 'R')) | |||
| { | |||
| stop_propagation = 1; | |||
| if(regression & 0x10) | |||
| voicing = 0; | |||
| } | |||
| } | |||
| @@ -247,7 +249,7 @@ void MakePhonemeList(Translator *tr, int post_pause, int start_sentence) | |||
| // stop propagation at a word boundary | |||
| voicing = 0; | |||
| } | |||
| if(regression & 0x10) | |||
| if(regression & 0x100) | |||
| { | |||
| // devoice word-final consonants, unless propagating voiced | |||
| if(voicing == 0) | |||
| @@ -164,7 +164,7 @@ static const unsigned int punct_attributes [] = { 0, | |||
| // frame 0 is for the defaults, before any ssml tags. | |||
| typedef struct { | |||
| int tag_type; | |||
| int voice_variant; | |||
| int voice_variant_number; | |||
| int voice_gender; | |||
| int voice_age; | |||
| char voice_name[40]; | |||
| @@ -175,6 +175,8 @@ typedef struct { | |||
| static int n_ssml_stack; | |||
| static SSML_STACK ssml_stack[N_SSML_STACK]; | |||
| static espeak_VOICE base_voice; | |||
| static char base_voice_variant_name[40] = {0}; | |||
| static char current_voice_id[40] = {0}; | |||
| @@ -1037,19 +1039,21 @@ static const char *VoiceFromStack() | |||
| // Use the voice properties from the SSML stack to choose a voice, and switch | |||
| // to that voice if it's not the current voice | |||
| int ix; | |||
| const char *p; | |||
| SSML_STACK *sp; | |||
| const char *v_id; | |||
| int voice_name_specified; | |||
| int voice_found; | |||
| espeak_VOICE voice_select; | |||
| char voice_name[40]; | |||
| static char voice_name[40]; | |||
| char language[40]; | |||
| char buf[80]; | |||
| strcpy(voice_name,ssml_stack[0].voice_name); | |||
| strcpy(language,ssml_stack[0].language); | |||
| voice_select.age = ssml_stack[0].voice_age; | |||
| voice_select.gender = ssml_stack[0].voice_gender; | |||
| voice_select.variant = ssml_stack[0].voice_variant; | |||
| voice_select.variant = ssml_stack[0].voice_variant_number; | |||
| voice_select.identifier = NULL; | |||
| for(ix=0; ix<n_ssml_stack; ix++) | |||
| @@ -1069,15 +1073,32 @@ static const char *VoiceFromStack() | |||
| if(sp->language[0] != 0) | |||
| { | |||
| strcpy(language, sp->language); | |||
| // is this language provided by the base voice? | |||
| p = base_voice.languages; | |||
| while(*p++ != 0) | |||
| { | |||
| if(strcmp(p, language) == 0) | |||
| { | |||
| // yes, change the language to the main language of the base voice | |||
| strcpy(language, &base_voice.languages[1]); | |||
| break; | |||
| } | |||
| p += (strlen(p) + 1); | |||
| } | |||
| if(voice_name_specified == 0) | |||
| voice_name[0] = 0; // forget a previous voice name if a language is specified | |||
| } | |||
| if(sp->voice_gender != 0) | |||
| { | |||
| voice_select.gender = sp->voice_gender; | |||
| } | |||
| if(sp->voice_age != 0) | |||
| voice_select.age = sp->voice_age; | |||
| if(sp->voice_variant != 0) | |||
| voice_select.variant = sp->voice_variant; | |||
| if(sp->voice_variant_number != 0) | |||
| voice_select.variant = sp->voice_variant_number; | |||
| } | |||
| voice_select.name = voice_name; | |||
| @@ -1085,6 +1106,14 @@ static const char *VoiceFromStack() | |||
| v_id = SelectVoice(&voice_select, &voice_found); | |||
| if(v_id == NULL) | |||
| return("default"); | |||
| if((strchr(v_id, '+') == NULL) && ((voice_select.gender == 0) || (voice_select.gender == base_voice.gender)) && (base_voice_variant_name[0] != 0)) | |||
| { | |||
| // a voice variant has not been selected, use the original voice variant | |||
| sprintf(buf, "%s+%s", v_id, base_voice_variant_name); | |||
| strncpy0(voice_name, buf, sizeof(voice_name)); | |||
| return(voice_name); | |||
| } | |||
| return(v_id); | |||
| } // end of VoiceFromStack | |||
| @@ -1389,8 +1418,8 @@ int AddNameData(const char *name, int wide) | |||
| } // end of AddNameData | |||
| void SetVoiceStack(espeak_VOICE *v) | |||
| {//================================ | |||
| void SetVoiceStack(espeak_VOICE *v, const char *variant_name) | |||
| {//========================================================== | |||
| SSML_STACK *sp; | |||
| sp = &ssml_stack[0]; | |||
| @@ -1402,10 +1431,12 @@ void SetVoiceStack(espeak_VOICE *v) | |||
| if(v->languages != NULL) | |||
| strcpy(sp->language,v->languages); | |||
| if(v->name != NULL) | |||
| strcpy(sp->voice_name,v->name); | |||
| sp->voice_variant = v->variant; | |||
| strncpy0(sp->voice_name, v->name, sizeof(sp->voice_name)); | |||
| sp->voice_variant_number = v->variant; | |||
| sp->voice_age = v->age; | |||
| sp->voice_gender = v->gender; | |||
| strncpy0(base_voice_variant_name, variant_name, sizeof(base_voice_variant_name)); | |||
| memcpy(&base_voice, ¤t_voice_selected, sizeof(base_voice)); | |||
| } | |||
| @@ -1467,7 +1498,7 @@ static int GetVoiceAttributes(wchar_t *pw, int tag_type) | |||
| attrcopy_utf8(ssml_sp->language,lang,sizeof(ssml_sp->language)); | |||
| attrcopy_utf8(ssml_sp->voice_name,name,sizeof(ssml_sp->voice_name)); | |||
| ssml_sp->voice_variant = attrnumber(variant,1,0)-1; | |||
| ssml_sp->voice_variant_number = attrnumber(variant,1,0)-1; | |||
| ssml_sp->voice_age = attrnumber(age,0,0); | |||
| ssml_sp->voice_gender = attrlookup(gender,mnem_gender); | |||
| ssml_sp->tag_type = tag_type; | |||
| @@ -1647,6 +1678,7 @@ static int ProcessSsmlTag(wchar_t *xml_buf, char *outbuf, int &outix, int n_outb | |||
| {"reduced",2}, | |||
| {"moderate",3}, | |||
| {"strong",4}, | |||
| {"x-strong",5}, | |||
| {NULL,-1}}; | |||
| static const char *prosody_attr[5] = { | |||
| @@ -1735,14 +1767,16 @@ static int ProcessSsmlTag(wchar_t *xml_buf, char *outbuf, int &outix, int n_outb | |||
| if(translator->langopts.tone_language == 1) | |||
| { | |||
| static unsigned char emphasis_to_pitch_range[] = {50,50,40,70,90,90}; | |||
| static unsigned char emphasis_to_volume[] = {100,100,70,110,140,140}; | |||
| static unsigned char emphasis_to_pitch_range[] = {50,50,40,70,90,100}; | |||
| static unsigned char emphasis_to_volume[] = {100,100,70,110,135,150}; | |||
| // tone language (eg.Chinese) do emphasis by increasing the pitch range. | |||
| sp->parameter[espeakRANGE] = emphasis_to_pitch_range[value]; | |||
| sp->parameter[espeakVOLUME] = emphasis_to_volume[value]; | |||
| } | |||
| else | |||
| { | |||
| static unsigned char emphasis_to_volume2[] = {100,100,75,100,120,150}; | |||
| sp->parameter[espeakVOLUME] = emphasis_to_volume2[value]; | |||
| sp->parameter[espeakEMPHASIS] = value; | |||
| } | |||
| ProcessParamStack(outbuf, outix); | |||
| @@ -428,7 +428,7 @@ static int initialise(void) | |||
| fprintf(stderr,"Wrong version of espeak-data 0x%x (expects 0x%x) at %s\n",result,version_phdata,path_home); | |||
| } | |||
| LoadConfig(); | |||
| SetVoiceStack(NULL); | |||
| SetVoiceStack(NULL, ""); | |||
| SynthesizeInit(); | |||
| for(param=0; param<N_SPEECH_PARAM; param++) | |||
| @@ -47,7 +47,6 @@ | |||
| #include "wave.h" | |||
| unsigned char *outbuf=NULL; | |||
| extern espeak_VOICE voice_selected; | |||
| espeak_EVENT *event_list=NULL; | |||
| int event_list_ix=0; | |||
| @@ -391,8 +390,8 @@ static int initialise(int control) | |||
| fprintf(stderr,"Wrong version of espeak-data 0x%x (expects 0x%x) at %s\n",result,version_phdata,path_home); | |||
| } | |||
| memset(&voice_selected,0,sizeof(voice_selected)); | |||
| SetVoiceStack(NULL); | |||
| memset(¤t_voice_selected,0,sizeof(current_voice_selected)); | |||
| SetVoiceStack(NULL, ""); | |||
| SynthesizeInit(); | |||
| InitNamedata(); | |||
| @@ -35,7 +35,7 @@ | |||
| #include "translate.h" | |||
| #include "wave.h" | |||
| const char *version_string = "1.45.31 25.Jun.11"; | |||
| const char *version_string = "1.45.40 23.Aug.11"; | |||
| const int version_phdata = 0x014500; | |||
| int option_device_number = -1; | |||
| @@ -512,6 +512,7 @@ void LoadConfig(void) | |||
| } | |||
| } | |||
| } | |||
| fclose(f); | |||
| } // end of LoadConfig | |||
| @@ -762,7 +762,7 @@ if(voice->klattv[0]) | |||
| } | |||
| if(flags & 0x40) | |||
| DoPause(12,0); // add a short pause after the consonant | |||
| DoPause(20,0); // add a short pause after the consonant | |||
| if(flags & 16) | |||
| return(len); | |||
| @@ -342,7 +342,7 @@ Translator *SelectTranslator(const char *name) | |||
| static const short stress_lengths_fr[8] = {190, 170, 190, 200, 0, 0, 190, 240}; | |||
| static const unsigned char stress_amps_fr[8] = {18,16, 18,18, 18,18, 18,18 }; | |||
| static const unsigned char stress_amps_sk[8] = {17,17, 20,20, 20,22, 22,21 }; | |||
| static const unsigned char stress_amps_sk[8] = {17,16, 20,20, 20,22, 22,21 }; | |||
| static const short stress_lengths_sk[8] = {190,190, 210,210, 0,0, 210,210}; | |||
| static const short stress_lengths_ta[8] = {200, 200, 210, 210, 0, 0, 230, 230}; | |||
| @@ -379,6 +379,7 @@ Translator *SelectTranslator(const char *name) | |||
| tr->langopts.stress_flags = 0x0024; // don't use secondary stress | |||
| tr->langopts.length_mods0 = tr->langopts.length_mods; // don't lengthen vowels in the last syllable | |||
| tr->langopts.param[LOPT_UNPRONOUNCABLE] = 1; // disable check for unpronouncable words | |||
| tr->langopts.numbers = NUM_OMIT_1_HUNDRED; | |||
| } | |||
| break; | |||
| @@ -394,7 +395,7 @@ Translator *SelectTranslator(const char *name) | |||
| SetCyrillicLetters(tr); | |||
| SetLetterVowel(tr,0x2a); | |||
| tr->langopts.param[LOPT_UNPRONOUNCABLE] = 0x432; // [v] don't count this character at start of word | |||
| tr->langopts.param[LOPT_REGRESSIVE_VOICING] = 0x17; // devoice at end of word, and change voicing to match a following consonant (except v) | |||
| tr->langopts.param[LOPT_REGRESSIVE_VOICING] = 0x107; // devoice at end of word, and change voicing to match a following consonant (except v) | |||
| tr->langopts.param[LOPT_REDUCE] = 2; | |||
| tr->langopts.stress_rule = STRESSPOSN_2R; | |||
| tr->langopts.numbers = NUM_DECIMAL_COMMA | NUM_ALLOW_SPACE | NUM_OMIT_1_HUNDRED | NUM_HUNDRED_AND | NUM_AND_UNITS | NUM_SINGLE_AND | NUM_ROMAN | NUM_ROMAN_ORDINAL | NUM_ROMAN_CAPITALS ; | |||
| @@ -468,7 +469,7 @@ Translator *SelectTranslator(const char *name) | |||
| tr->langopts.word_gap = 0x8; // don't use linking phonemes | |||
| tr->langopts.vowel_pause = 0x30; | |||
| tr->langopts.param[LOPT_PREFIXES] = 1; | |||
| tr->langopts.param[LOPT_REGRESSIVE_VOICING] = 0x10; // devoice at end of word | |||
| tr->langopts.param[LOPT_REGRESSIVE_VOICING] = 0x100; // devoice at end of word | |||
| tr->langopts.param[LOPT_LONG_VOWEL_THRESHOLD] = 175/2; | |||
| tr->langopts.numbers = NUM_DECIMAL_COMMA | NUM_SWAP_TENS | NUM_ALLOW_SPACE | NUM_ORDINAL_DOT | NUM_ROMAN; | |||
| @@ -954,6 +955,14 @@ SetLengthMods(tr,3); // all equal | |||
| } | |||
| break; | |||
| case L('m','t'): // Maltese | |||
| { | |||
| tr->charset_a0 = charsets[3]; // ISO-8859-3 | |||
| tr->langopts.param[LOPT_REGRESSIVE_VOICING] = 0x100; // devoice at end of word | |||
| tr->langopts.stress_rule = STRESSPOSN_2R; // penultimate | |||
| tr->langopts.numbers = 1; | |||
| } | |||
| break; | |||
| case L('n','l'): // Dutch | |||
| { | |||
| @@ -963,7 +972,7 @@ SetLengthMods(tr,3); // all equal | |||
| tr->langopts.vowel_pause = 0x30; // ?? | |||
| tr->langopts.param[LOPT_DIERESES] = 1; | |||
| tr->langopts.param[LOPT_PREFIXES] = 1; | |||
| tr->langopts.param[LOPT_REGRESSIVE_VOICING] = 0x10; // devoice at end of word | |||
| tr->langopts.param[LOPT_REGRESSIVE_VOICING] = 0x100; // devoice at end of word | |||
| SetLetterVowel(tr,'y'); | |||
| tr->langopts.numbers = NUM_DECIMAL_COMMA | NUM_SWAP_TENS | NUM_OMIT_1_HUNDRED | NUM_OMIT_1_THOUSAND | NUM_ALLOW_SPACE | NUM_1900 | NUM_ORDINAL_DOT; | |||
| @@ -1005,7 +1014,7 @@ SetLengthMods(tr,3); // all equal | |||
| tr->charset_a0 = charsets[2]; // ISO-8859-2 | |||
| tr->langopts.stress_rule = STRESSPOSN_2R; | |||
| tr->langopts.stress_flags = 0x6; // mark unstressed final syllables as diminished | |||
| tr->langopts.param[LOPT_REGRESSIVE_VOICING] = 0x8; | |||
| tr->langopts.param[LOPT_REGRESSIVE_VOICING] = 0x9; | |||
| tr->langopts.max_initial_consonants = 7; // for example: wchrzczony :) | |||
| tr->langopts.numbers = NUM_DECIMAL_COMMA | NUM_ALLOW_SPACE | NUM_DFRACTION_2; | |||
| tr->langopts.numbers2 = 0x40; | |||
| @@ -1123,7 +1132,7 @@ SetLengthMods(tr,3); // all equal | |||
| tr->charset_a0 = charsets[2]; // ISO-8859-2 | |||
| tr->langopts.stress_rule = STRESSPOSN_2R; // Temporary | |||
| tr->langopts.stress_flags = 0x20; | |||
| tr->langopts.param[LOPT_REGRESSIVE_VOICING] = 0x13; | |||
| tr->langopts.param[LOPT_REGRESSIVE_VOICING] = 0x103; | |||
| tr->langopts.numbers = NUM_DECIMAL_COMMA | NUM_ALLOW_SPACE | NUM_SWAP_TENS | NUM_OMIT_1_HUNDRED | NUM_DFRACTION_2 | NUM_ORDINAL_DOT | NUM_ROMAN; | |||
| tr->langopts.numbers2 = 0x100; // plural forms of millions etc | |||
| tr->langopts.thousands_sep = ' '; // don't allow dot as thousands separator | |||
| @@ -1563,6 +1563,39 @@ static int CountSyllables(unsigned char *phonemes) | |||
| } | |||
| void Word_EmbeddedCmd() | |||
| {//==================== | |||
| // Process embedded commands for emphasis, sayas, and break | |||
| int embedded_cmd; | |||
| int value; | |||
| do | |||
| { | |||
| embedded_cmd = embedded_list[embedded_read++]; | |||
| value = embedded_cmd >> 8; | |||
| switch(embedded_cmd & 0x1f) | |||
| { | |||
| case EMBED_Y: | |||
| option_sayas = value; | |||
| break; | |||
| case EMBED_F: | |||
| option_emphasis = value; | |||
| break; | |||
| case EMBED_B: | |||
| // break command | |||
| if(value == 0) | |||
| pre_pause = 0; // break=none | |||
| else | |||
| pre_pause += value; | |||
| break; | |||
| } | |||
| } while(((embedded_cmd & 0x80) == 0) && (embedded_read < embedded_ix)); | |||
| } // end of Word_EmbeddedCmd | |||
| int SetTranslator2(const char *new_language) | |||
| {//========================================= | |||
| // Set translator2 to a second language | |||
| @@ -1603,8 +1636,6 @@ static int TranslateWord2(Translator *tr, char *word, WORD_TAB *wtab, int pre_pa | |||
| int next_tone=0; | |||
| unsigned char *p; | |||
| int srcix; | |||
| int embedded_cmd; | |||
| int value; | |||
| int found_dict_flag; | |||
| unsigned char ph_code; | |||
| PHONEME_LIST2 *plist2; | |||
| @@ -1646,30 +1677,7 @@ static int TranslateWord2(Translator *tr, char *word, WORD_TAB *wtab, int pre_pa | |||
| { | |||
| embedded_flag = SFLAG_EMBEDDED; | |||
| do | |||
| { | |||
| embedded_cmd = embedded_list[embedded_read++]; | |||
| value = embedded_cmd >> 8; | |||
| switch(embedded_cmd & 0x1f) | |||
| { | |||
| case EMBED_Y: | |||
| option_sayas = value; | |||
| break; | |||
| case EMBED_F: | |||
| option_emphasis = value; | |||
| break; | |||
| case EMBED_B: | |||
| // break command | |||
| if(value == 0) | |||
| pre_pause = 0; // break=none | |||
| else | |||
| pre_pause += value; | |||
| break; | |||
| } | |||
| } while((embedded_cmd & 0x80) == 0); | |||
| Word_EmbeddedCmd(); | |||
| } | |||
| if((word[0] == 0) || (word_flags & FLAG_DELETE_WORD)) | |||
| @@ -3208,7 +3216,7 @@ if((c == '/') && (tr->langopts.testing & 2) && IsDigit09(next_in) && IsAlpha(pre | |||
| } | |||
| } | |||
| if((dict_flags & (FLAG_ALLOW_DOT | FLAG_NEEDS_DOT)) && (ix == word_count-1) && (terminator & CLAUSE_DOT)) | |||
| if((dict_flags & (FLAG_ALLOW_DOT | FLAG_NEEDS_DOT)) && (ix == word_count - 1 - dictionary_skipwords) && (terminator & CLAUSE_DOT)) | |||
| { | |||
| // probably an abbreviation such as Mr. or B. rather than end of sentence | |||
| clause_pause = 10; | |||
| @@ -3227,6 +3235,12 @@ if((c == '/') && (tr->langopts.testing & 2) && IsDigit09(next_in) && IsAlpha(pre | |||
| } | |||
| } | |||
| if(embedded_read < embedded_ix) | |||
| { | |||
| // any embedded commands not yet processed? | |||
| Word_EmbeddedCmd(); | |||
| } | |||
| for(ix=0; ix<2; ix++) | |||
| { | |||
| // terminate the clause with 2 PAUSE phonemes | |||
| @@ -266,10 +266,12 @@ extern const int param_defaults[N_SPEECH_PARAM]; | |||
| #define LOPT_PREFIXES 3 | |||
| // non-zero, change voiced/unoiced to match last consonant in a cluster | |||
| // bit 0=use regressive voicing | |||
| // bit 1=LANG=cz,bg don't propagate over [v] | |||
| // bit 2=don't propagate acress word boundaries | |||
| // bit 3=LANG=pl, propagate over liquids and nasals | |||
| // bit 4=devoice word-final consonants | |||
| // bit 4=LANG=cz,sk don't progagate to [v] | |||
| // bit 8=devoice word-final consonants | |||
| #define LOPT_REGRESSIVE_VOICING 4 | |||
| // 0=default, 1=no check, other allow this character as an extra initial letter (default is 's') | |||
| @@ -666,7 +668,7 @@ int TranslateWord(Translator *tr, char *word1, int next_pause, WORD_TAB *wtab); | |||
| void *TranslateClause(Translator *tr, FILE *f_text, const void *vp_input, int *tone, char **voice_change); | |||
| int ReadClause(Translator *tr, FILE *f_in, char *buf, short *charix, int *charix_top, int n_buf, int *tone_type, char *voice_change); | |||
| void SetVoiceStack(espeak_VOICE *v); | |||
| void SetVoiceStack(espeak_VOICE *v, const char *variant_name); | |||
| void InterpretPhoneme(Translator *tr, int control, PHONEME_LIST *plist, PHONEME_DATA *phdata); | |||
| void InterpretPhoneme2(int phcode, PHONEME_DATA *phdata); | |||
| @@ -69,6 +69,7 @@ typedef struct { | |||
| // percentages shown to user, ix=N_PEAKS means ALL peaks | |||
| extern USHORT voice_pcnt[N_PEAKS+1][3]; | |||
| extern espeak_VOICE current_voice_selected; | |||
| extern voice_t *voice; | |||
| extern int tone_points[12]; | |||
| @@ -66,7 +66,7 @@ static int n_voices_list = 0; | |||
| static espeak_VOICE *voices_list[N_VOICES_LIST]; | |||
| static int len_path_voices; | |||
| espeak_VOICE voice_selected; | |||
| espeak_VOICE current_voice_selected; | |||
| enum { | |||
| @@ -564,9 +564,9 @@ voice_t *LoadVoice(const char *vname, int control) | |||
| int pitch1; | |||
| int pitch2; | |||
| static char voice_identifier[40]; // file name for voice_selected | |||
| static char voice_name[40]; // voice name for voice_selected | |||
| static char voice_languages[100]; // list of languages and priorities for voice_selected | |||
| static char voice_identifier[40]; // file name for current_voice_selected | |||
| static char voice_name[40]; // voice name for current_voice_selected | |||
| static char voice_languages[100]; // list of languages and priorities for current_voice_selected | |||
| strcpy(voicename,vname); | |||
| if(voicename[0]==0) | |||
| @@ -635,9 +635,9 @@ voice_t *LoadVoice(const char *vname, int control) | |||
| voice_name[0] = 0; | |||
| voice_languages[0] = 0; | |||
| voice_selected.identifier = voice_identifier; | |||
| voice_selected.name = voice_name; | |||
| voice_selected.languages = voice_languages; | |||
| current_voice_selected.identifier = voice_identifier; | |||
| current_voice_selected.name = voice_name; | |||
| current_voice_selected.languages = voice_languages; | |||
| } | |||
| else | |||
| { | |||
| @@ -720,11 +720,11 @@ voice_t *LoadVoice(const char *vname, int control) | |||
| case V_GENDER: | |||
| { | |||
| int age; | |||
| int age = 0; | |||
| char vgender[80]; | |||
| sscanf(p,"%s %d",vgender,&age); | |||
| voice_selected.gender = LookupMnem(genders,vgender); | |||
| voice_selected.age = age; | |||
| current_voice_selected.gender = LookupMnem(genders,vgender); | |||
| current_voice_selected.age = age; | |||
| } | |||
| break; | |||
| @@ -1029,23 +1029,26 @@ voice_t *LoadVoice(const char *vname, int control) | |||
| } // end of LoadVoice | |||
| static char *ExtractVoiceVariantName(char *vname, int variant_num) | |||
| {//=============================================================== | |||
| static char *ExtractVoiceVariantName(char *vname, int variant_num, int add_dir) | |||
| {//=========================================================================== | |||
| // Remove any voice variant suffix (name or number) from a voice name | |||
| // Returns the voice variant name | |||
| char *p; | |||
| static char variant_name[20]; | |||
| static char variant_name[40]; | |||
| char variant_prefix[5]; | |||
| variant_name[0] = 0; | |||
| sprintf(variant_prefix,"!v%c",PATHSEP); | |||
| if(add_dir == 0) | |||
| variant_prefix[0] = 0; | |||
| if(vname != NULL) | |||
| { | |||
| if((p = strchr(vname,'+')) != NULL) | |||
| { | |||
| // The voice name has a +variant suffix | |||
| variant_num = 0; | |||
| *p++ = 0; // delete the suffix from the voice name | |||
| if(isdigit(*p)) | |||
| { | |||
| @@ -1054,8 +1057,7 @@ static char *ExtractVoiceVariantName(char *vname, int variant_num) | |||
| else | |||
| { | |||
| // voice variant name, not number | |||
| strcpy(variant_name,variant_prefix); | |||
| strncpy0(&variant_name[3],p,sizeof(variant_name)-3); | |||
| sprintf(variant_name, "%s%s", variant_prefix, p); | |||
| } | |||
| } | |||
| } | |||
| @@ -1083,7 +1085,7 @@ voice_t *LoadVoiceVariant(const char *vname, int variant_num) | |||
| char buf[60]; | |||
| strncpy0(buf,vname,sizeof(buf)); | |||
| variant_name = ExtractVoiceVariantName(buf,variant_num); | |||
| variant_name = ExtractVoiceVariantName(buf,variant_num, 1); | |||
| if((v = LoadVoice(buf,0)) == NULL) | |||
| return(NULL); | |||
| @@ -1319,15 +1321,17 @@ static int SetVoiceScores(espeak_VOICE *voice_select, espeak_VOICE **voices, int | |||
| espeak_VOICE *SelectVoiceByName(espeak_VOICE **voices, const char *name) | |||
| {//===================================================================== | |||
| espeak_VOICE *SelectVoiceByName(espeak_VOICE **voices, const char *name2) | |||
| {//====================================================================== | |||
| int ix; | |||
| int match_fname = -1; | |||
| int match_fname2 = -1; | |||
| int match_name = -1; | |||
| const char *id; | |||
| const char *id; // this is the filename within espeak-data/voices | |||
| char *variant_name; | |||
| int last_part_len; | |||
| char last_part[41]; | |||
| char name[40]; | |||
| if(voices == NULL) | |||
| { | |||
| @@ -1336,6 +1340,13 @@ espeak_VOICE *SelectVoiceByName(espeak_VOICE **voices, const char *name) | |||
| voices = voices_list; | |||
| } | |||
| strncpy0(name, name2, sizeof(name)); | |||
| if((variant_name = strchr(name, '+')) != NULL) | |||
| { | |||
| *variant_name = 0; | |||
| variant_name++; | |||
| } | |||
| sprintf(last_part,"%c%s",PATHSEP,name); | |||
| last_part_len = strlen(last_part); | |||
| @@ -1347,14 +1358,17 @@ espeak_VOICE *SelectVoiceByName(espeak_VOICE **voices, const char *name) | |||
| break; | |||
| } | |||
| else | |||
| if(strcmp(name,id = voices[ix]->identifier)==0) | |||
| { | |||
| match_fname = ix; // matching identifier, use this if no matching name | |||
| } | |||
| else | |||
| if(strcmp(last_part,&id[strlen(id)-last_part_len])==0) | |||
| { | |||
| match_fname2 = ix; | |||
| id = voices[ix]->identifier; | |||
| if(strcmp(name, id)==0) | |||
| { | |||
| match_fname = ix; // matching identifier, use this if no matching name | |||
| } | |||
| else | |||
| if(strcmp(last_part,&id[strlen(id)-last_part_len])==0) | |||
| { | |||
| match_fname2 = ix; | |||
| } | |||
| } | |||
| } | |||
| @@ -1414,7 +1428,7 @@ char const *SelectVoice(espeak_VOICE *voice_select, int *found) | |||
| } | |||
| strncpy0(buf,voice_select2.name,sizeof(buf)); | |||
| variant_name = ExtractVoiceVariantName(buf,0); | |||
| variant_name = ExtractVoiceVariantName(buf,0,0); | |||
| vp = SelectVoiceByName(voices_list,buf); | |||
| if(vp != NULL) | |||
| @@ -1425,7 +1439,7 @@ char const *SelectVoice(espeak_VOICE *voice_select, int *found) | |||
| { | |||
| if(variant_name[0] != 0) | |||
| { | |||
| sprintf(voice_id,"%s+%s",vp->identifier,&variant_name[3]); // omit the !v/ from variant_name | |||
| sprintf(voice_id,"%s+%s", vp->identifier, variant_name); | |||
| return(voice_id); | |||
| } | |||
| @@ -1512,8 +1526,8 @@ char const *SelectVoice(espeak_VOICE *voice_select, int *found) | |||
| if(vp->variant != 0) | |||
| { | |||
| variant_name = ExtractVoiceVariantName(NULL,vp->variant); | |||
| sprintf(voice_id,"%s+%s",vp->identifier,&variant_name[3]); | |||
| variant_name = ExtractVoiceVariantName(NULL, vp->variant, 0); | |||
| sprintf(voice_id,"%s+%s", vp->identifier, variant_name); | |||
| return(voice_id); | |||
| } | |||
| @@ -1671,7 +1685,7 @@ espeak_ERROR SetVoiceByName(const char *name) | |||
| static char buf[60]; | |||
| strncpy0(buf,name,sizeof(buf)); | |||
| variant_name = ExtractVoiceVariantName(buf,0); | |||
| variant_name = ExtractVoiceVariantName(buf, 0, 1); | |||
| memset(&voice_selector,0,sizeof(voice_selector)); | |||
| // voice_selector.name = buf; | |||
| @@ -1688,7 +1702,7 @@ espeak_ERROR SetVoiceByName(const char *name) | |||
| } | |||
| DoVoiceChange(voice); | |||
| SetVoiceStack(&voice_selector); | |||
| SetVoiceStack(&voice_selector, variant_name); | |||
| return(EE_OK); | |||
| } | |||
| @@ -1704,7 +1718,7 @@ espeak_ERROR SetVoiceByName(const char *name) | |||
| LoadVoice(variant_name,2); | |||
| } | |||
| DoVoiceChange(voice); | |||
| SetVoiceStack(&voice_selector); | |||
| SetVoiceStack(&voice_selector, variant_name); | |||
| return(EE_OK); | |||
| } | |||
| } | |||
| @@ -1725,7 +1739,7 @@ espeak_ERROR SetVoiceByProperties(espeak_VOICE *voice_selector) | |||
| LoadVoiceVariant(voice_id,0); | |||
| DoVoiceChange(voice); | |||
| SetVoiceStack(voice_selector); | |||
| SetVoiceStack(voice_selector, ""); | |||
| return(EE_OK); | |||
| } // end of SetVoiceByProperties | |||
| @@ -1795,7 +1809,7 @@ ESPEAK_API const espeak_VOICE **espeak_ListVoices(espeak_VOICE *voice_spec) | |||
| ESPEAK_API espeak_VOICE *espeak_GetCurrentVoice(void) | |||
| {//================================================== | |||
| return(&voice_selected); | |||
| return(¤t_voice_selected); | |||
| } | |||
| #pragma GCC visibility pop | |||