diff --git a/dictsource/af_list b/dictsource/af_list index e259bfc2..84689b17 100755 --- a/dictsource/af_list +++ b/dictsource/af_list @@ -148,6 +148,7 @@ _roman rum'eIns@ // Place names +afganistan afg'anistan alaska al'aska algerië alx2'e@re@:@- antwerpen antv&rp@n @@ -160,6 +161,7 @@ bermuda $2 bethlehem bEt_liEm boedapest budapEst boekarest bukarEst +bolivië bul'Ivi:@ bonnievale _^_EN brittanje $2 brooklyn _^_EN @@ -196,6 +198,7 @@ hermon $1 hirosjima hiruS'ima israel IsraI:l italië it'A:li;@ +kalafong kalaf'ON kanada kanad%a kanaän kA:nA:an kaïro ka_'iru @@ -309,6 +312,7 @@ der d@r derick dErik deventer d'e@v@nt@r diana dij'A:na +donaldson _^_EN du $u (du pisanie) du||pis'A:ni (du plessis) du||pl@s'i @@ -640,6 +644,8 @@ dis $u aangaande $2 aanstaande $2 adagio ad'A:dZi;%@U +afgaanse afg'A:ns@ +afgane afg'A:n@ africana $3 afkere afke@r@ agamemnon ax2am'EmnOn @@ -650,14 +656,12 @@ algaande $2 alge alx2@ algehele alx2@h,e@l@ allegro al'Egru -alles al@s almiskie $3 alom al_'Om alreeds $2 alternatiewe $4 amen A:mEn anale an'A:l@ -//###anatomie $4 $only asof asOf asook %as_o@k aspris $2 @@ -674,7 +678,7 @@ bene be@n@ beswil bEsv@l besnedene b@sne@d@n@ bestes bEst@s -beta be@ta +beta be@ta $only bewe be@v@ bewend be@v@nt bewering b@ve@rIN @@ -766,7 +770,6 @@ hokaai hOkAI hoofsaaklik $2 hoogedele ho@x2 _e@d@l@ hosanna hus'ana -//###huigelary $4 ibis $1 idee $2 @@ -941,7 +944,6 @@ sinagoge s@n@x2o@x2@ senatore s@nat'o@r@ singenot sInx2@nOt sir _^_EN -skares skA:r@s skepsele skEps@l@ skuldelas skWld@las s'n s@n $u @@ -1003,7 +1005,6 @@ verse f&:rs@ vers f&:rs verste f&rst@ verte f&rt@ -vertes f&rt@s verweg f&:rv&x2 via via volheid $1 diff --git a/dictsource/af_rules b/dictsource/af_rules index acd4203f..331b34a9 100755 --- a/dictsource/af_rules +++ b/dictsource/af_rules @@ -68,7 +68,6 @@ a (riA 'A: // akwarium/barium/estuarium/herbarium/seminaria a (ristokr %a // shorten 1st a: aristokrasie/-kraat/-krate/-kraties arm (last %ar@-m // move default stress: armlastig/-e - @C) as (_ as // shorten final a of words ending in -as: rigtingvas/jonkmanskas, etc. C) asie 'A:si @@@@) asie A:s%i oub) asie A:si // restore default stress: oubasie/-s @@ -256,6 +255,7 @@ ar (seen %ar ar (tikel %ar // stress: artikel and compounds artiku %art%ik%y // stress and vowel sounds: artikulasie/artikuleer + @C) as (_ as // shorten final a of words ending in -as: rigtingvas/jonkmanskas, etc. _) a (sië A: // fix stress and a sound: Asië/-r/-rs _) a (strA %a // astrant/astrale/astraal artille (rie %art@l@ // stress and vowel sounds: artillerie and compounds @@ -854,6 +854,7 @@ CAC) e (CC @ // fix e sound: nalatenskap/wapenstilstand CAC) e (C% E // beesfilette/nougesette/onderbesette/voortgesette juwel) e (C @ // fix e sound: juwelekissie and similar compounds + fontein) e (C @_ // fix e sound: Fonteinesirkel/-wisselaar, etc. kening) e (@ @ // fix e sound: rekeningeklerk/-navraag and similar narkos) e (C @ // fix e sound: narkosedood/-gas/-masker/-middel/-rekords, etc. ooi) e (C @ // fix e sound: dooiepunt/ooievaar and similar @@ -1048,7 +1049,7 @@ AAv) eer e@r // restore default stress: pouveer/makouveer/horlosieveer/kraaiveer/rooiveer w) eer e@r // stress may vary in words containing weer: lugafweer/donderweer u) eer 'e@r // aktueer/konstrueer/salueer, etc. - effek %e@fEk // move default stress and fix e sound: effek/-te/-tief + effek (K %ifEk // move default stress and fix e sound: effek/-te/-tief/rimpeleffek eienaardig %eI@nA:rd@x2 // move default stress: eienaardig/-ste @) ein (dig 'eIn // nimmereindige/nimmereindigend eind (eks eInt_ // fix d sound and make short pause: eindeksamen/-s and compounds @@ -1967,6 +1968,11 @@ j j j (j ja (broer jA: // fix a sound: jabroer/-s + _) jag (A j''ax2_ // fix stress and a sound: jagavontuur/-ekspedisie/-entoesias/-eskader/-instink... + jag (end jA:x2 // but long a in jagend/-e and compounds + jag (er jA:x2 // long a in jager and compounds + jag (ing jA:x2 // long a in (ver)jaging and similar + jaguar jagwar // fix a, g and u sounds: jaguar and compounds _) ja (CobA j%a // fix stress and a sound: Jacoba/Jacobus/Jakobus jakaranda j%ak%ar'anda //jakaranda and compounds jakopewer j%ak%Ope@v@r_ // fix stress and vowel sounds: jakopewer/-oë @@ -3374,6 +3380,7 @@ profesie prOf@s'i // fix vowel sounds and move stress profit (e pr%Of@t // fix stress and vowel sounds: profiteer/-tering pro (gram pr%u // fix stress and o sound: program/-e/ontwikkelingsprogram + programme (ring pr%ux2r%ame@ // fix e sound and stress: (rekenaar)programmering(staal), etc. pro (gress pr%o@ // fix stress and o sound: progressie/-f/-we pro (CA pr%u // probeer/produk/proses/professie/provinsie produk (A pr%udWk_ // fix u sound, pause: produkopsies/-uitstalling, etc. @@ -3510,6 +3517,7 @@ regime (_ r@Zi:m // regime/-s and compounds regi (ment r@x2@ // fix stress and e and i sounds: regement/-e and compounds regimen (ta@ r%Ex2%im%En // fix stress: regimentaal/-tale + regi (sseuC r@x2@ // fix stress and e sound: (film-/kuns-/mede-/musiek-/oorklankings-)regisseur/-sseuse reg (ist r@x2 // registrasie/-nommer/register/bevolkingsregister regle (ment r@x2l@ // fix stress and e sounds: reglement/-e and compounds regverdig r&x2f'&rd@x2 // regverdig/onregverdige/regverdigheid - verwyder uit af_list @@ -3576,6 +3584,7 @@ .group s s s s (s + @) s (_S1q s // to correctly handle plurals of propernames in af_list: Jouberts, etc. @@@) s (_S1 s // to correctly handle plural s i) s (_ s // exceptions to rule: @@@) s (_S1 s se (_ s@ //the word se and some ending in se @@ -3630,7 +3639,7 @@ seroto (ni s%Er@t%u // fix stress and vowel sounds: serotonien(vlakke, etc.) sitrus s'itr%Ws_ //i sound and stress in compounds - saamge (P6 s'A:mx2@ // saamgepers/-de/saamgetel/saamgeêet + _) saam (P4 s'A:m // saamgepers/-de/saamgetel/saamgeêet/saampers saamgee sA:mx2e@ // fix ee in saamgee; see rule: saamge (P6 sabot (A s%ab%ut // sabotasie/saboteer safari s%afA:r%i // fix 1st a: safari/safaripak, etc. @@ -4029,10 +4038,12 @@ straa) t (j t // split tj sound: straat(jas/-joggie/-jonge/-joernaal) ui) tj tj // uitjaag/uitjou/uitjubel ui) tjie ci // beskuitjie/fluitjie/ruitjie/uitjie, etc. + @) tjoernali tj%urn%al@ // fix stress, split t/j: front-/koerant-/sport-/vryskutjoernalis, etc. _) th (@@ t @) th (C t // drop h: Bothma/Neethling and similar _) theu t''Y@ // Theuns/Theunis _) th _^_EN // if only one vowel character + @) thy (_ _^_EN // words and names ending in -thy are English: Cathy, etc. @) th (_N _^_EN @) tion (_ _^_EN //words ending in tion is English @) tions (_ _^_EN //words ending in tions is English diff --git a/dictsource/cs_rules b/dictsource/cs_rules index fc8e3368..90dd0a05 100644 --- a/dictsource/cs_rules +++ b/dictsource/cs_rules @@ -384,11 +384,6 @@ synchro) ni ni qu kv .group r -// r r -// A) r (A * -// C) r (A @-* -// rr *r -// right rajt K) r (K r- r R diff --git a/dictsource/de_rules b/dictsource/de_rules index 0728fd5b..18581869 100644 --- a/dictsource/de_rules +++ b/dictsource/de_rules @@ -589,6 +589,13 @@ &) ie (r_ 'i: u) ie (r_ _|'i: &) ie (rlich 'i: + bank) ie (r I'e: + barr) ie (r I'e: + financ) ie (r I'e: + hotel) ie (r I'e: + prem) ie (r I'e: + hyg) ie (n I'e: + ital) ie (n I'e: d) ienst i:nst r) ien (@ IEn &) ien (_ =I@n diff --git a/dictsource/dict_phonemes b/dictsource/dict_phonemes index b01f3d00..73c43d05 100644 --- a/dictsource/dict_phonemes +++ b/dictsource/dict_phonemes @@ -15,6 +15,19 @@ n N p r s S t tS v w x2 z Z +Dictionary bn_dict + +& a a: a~ e E e~ i +I i: i:~ i~ l- o O o: +o~ O~ r- U u u: u:~ u~ + +* b B c C ch d d. +g h j J k kh l m +n N n. n^ p ph Q r +r. s S s. t t. t.h th +tS x z + + Dictionary cs_dict @- a a: aU e e: eI eU @@ -277,6 +290,34 @@ n^ p r R s S t tS ts tS; v x z Z +Dictionary ml_dict + +a a: aI aU e E e: i +I i: o o: r- u u: V +y + +: b c ch d d. dZ f +g h j J k kh l l. +m n N n. n^ p ph R +R2 s s. S; t t. t.h th +tS v w z z. + + +Dictionary ne_dict + +@ @- @2 @3 a a: aI aU +a~ e E e: E: E~ e~ i +I i: i~ l- o O o: O: +o~ O~ r- U u u: u~ V + +- : b c ch d d. f +g h H j J k kh l +l. m n N n. n^ p ph +Q q r r. s S s. t +T t. t.h th v w x z +z. + + Dictionary nl_dict 8 @ @- A a: E e: EI @@ -470,42 +511,13 @@ l m n N p r s t tS v w z -Dictionary ml_dict +Dictionary lv_dict -a a: aI aU e E e: i -I i: o o: r- u u: V -y +a a: ai au e e: ei i +i: ie iu o o: oi u u: +ui uo -: b c ch d d. dZ f -g h j J k kh l l. -m n N n. n^ p ph R -R2 s s. S; t t. t.h th -tS v w z z. - - -Dictionary bn_dict - -& a a: a~ e E e~ i -I i: i:~ i~ l- o O o: -o~ O~ r- U u u: u:~ u~ - -* b B c C ch d d. -g h j J k kh l m -n N n. n^ p ph Q r -r. s S s. t t. t.h th -tS x z - - -Dictionary ne_dict - -@ @- @2 @3 a a: aI aU -a~ e E e: E: E~ e~ i -I i: i~ l- o O o: O: -o~ O~ r- U u u: u~ V - -- : b c ch d d. f -g h H j J k kh l -l. m n N n. n^ p ph -Q q r r. s S s. t -T t. t.h th v w x z -z. +b c d dZ f g h j +J k l l^ m n N n^ +p R R2 s S t tS ts +v z Z diff --git a/dictsource/en_list b/dictsource/en_list index 8208a1e8..3fd2a2b8 100644 --- a/dictsource/en_list +++ b/dictsource/en_list @@ -350,6 +350,9 @@ prof $dot rev $dot st $dot +// not abbreviations when all-caps +all O:l $allcaps +no noU $allcaps // MAIN WORD DICTIONARY @@ -451,7 +454,6 @@ alfalfa alf'alf@ alias eIli@s alibi al@baI alkali alk@laI -all O:l $allcaps // not abbrev. allay a2leI allegiance a2li:dZ@ns allele a2li:l @@ -597,6 +599,7 @@ barometer b@r0mI2t3 barrage barA:Z basis beIsIs bass beIs +baste beIst bastion basti@n batman batman bayou baIu: @@ -937,6 +940,7 @@ edit EdIt edition I2dIS@n edwardian Edw'O@di@n efile i:faIl +egg Eg // egging eh eI el ,El electricity I2lEktr'IsI2tI @@ -1795,6 +1799,7 @@ saline seIlaIn san ,san sardine $2 satan seIt@n +satanist seIt@nIst saucepan sO:sp@n saudi saUdI says sEz @@ -1852,6 +1857,7 @@ sierra sI'e@r@ signage saInI2dZ sikh si:k silhouette sI2lUw'Et +silo saIloU simon saIm@n simultaneous $3 singly sINglI $verbf @@ -2421,7 +2427,6 @@ Denise d@ni:s Derek dErIk Dinah daIn@ Dominic d0mI2nIk -Donald d0n@Ld Doris d0rIs Dougall du:g@L Dylan dIl@n diff --git a/dictsource/en_rules b/dictsource/en_rules index f54493f9..af32f659 100644 --- a/dictsource/en_rules +++ b/dictsource/en_rules @@ -29,6 +29,8 @@ // ?7 Scottish // ?8 Use full vowel, not schwa in some word endings +.L01 l r + .replace ff ff // ligature fi fi @@ -2348,7 +2350,7 @@ _) exc (e %Eks exc (i %Eks exc (elle Eks - ex (e+ Eks + C) ex (e Eks exe (cutio EksI ex (erc Eks _) ex (A %Egz @@ -2533,6 +2535,7 @@ @) i (butive 'I @) i (butor 'I &) i (c_ =I + &) i (ciCe_ =I &) i (ca_ =I &) ico (_ =I2koU &) i (cal =I @@ -3714,6 +3717,7 @@ pers) on @n pers) on (i '0n postp) on 'oUn + on (ald 0n d) on (at %oUn on (an_ oUn _) on (io Vn @@ -4322,6 +4326,7 @@ rhyth rID _) rm ,A@Em rrhoea r'i@ + _) ru (bL01 ru: _) run (a rVn _) run (o rVn _) rw r%U diff --git a/dictsource/fr_list b/dictsource/fr_list index 7b5fddf2..90a01cc1 100755 --- a/dictsource/fr_list +++ b/dictsource/fr_list @@ -24,7 +24,7 @@ // 2006-11-18 Gilles Casse // -// Updated 2008-10-13 Michel Such +// Updated 2008-10-24 Michel Such // // * Numbers, a few abbreviations and exceptions. // @@ -268,6 +268,7 @@ anpe $abbrev api $abbrev avh aveaS bd boulevard $text +brltty $abbrev cci $abbrev cio $abbrev ctrl control $text $pause diff --git a/dictsource/fr_rules b/dictsource/fr_rules index 698d1f13..ab3b5237 100755 --- a/dictsource/fr_rules +++ b/dictsource/fr_rules @@ -23,7 +23,7 @@ // 2006-11-18 Gilles Casse // -// Updated: 2008-10-16 Michel Such +// Updated: 2008-11-01 Michel Such // // Letter classes: @@ -70,6 +70,8 @@ a (nnA a // manne an (K A~ // ancien, élan + @@m) an (_ an // tennisman + lism) an (_ A~ // talisman _C) aon (_ A~ // faon, paon, taon s) aoul (_ u // saoul s) aou (le u // saoule @@ -83,6 +85,7 @@ _) auto (@P4 oto _) autom (n otO _) au (treX o2 + bb) aye (X ei // abbaye p) a (ys E // pays paysage ay (C E // aymé ay Ej // paye @@ -116,9 +119,11 @@ cc (Y ks // accéder cc k // occuper _) ch (arism k // charisme, charismatique + _) ch (irop k // chiroptère a) ch (_ k // almanach e) ch (_ k // varech _A) ch (o_ k // écho + mani) ch (é k // manichéisme _eu) ch (ari k // eucharistie or) ch (esC k // orchestre or) ch (iC k // orchidée @@ -230,6 +235,7 @@ _) ç' (P2v s CC) ein (_ E~n2 // plein emploi e (il E // vieille ei E // neige + eoi wA // asseoir ell El // selle el (K El // celsius, caramel _f) em (me a // femme @@ -248,18 +254,18 @@ _) ç' (P2v s em (p A~ en (_ A~n2 // en en (hA A~n // enharmonique - en (A A~n // enivrer +_) en (A A~n // enivrer C) en (d_ A~ // comprend dépend od) en (dr E~ // rhododendron qu) en (d_ A~ pati) en A~ // patient patience - X) en (nu A~ // ennui - - C) en (A @n // menu - + en (nu A~ // ennui en (nA E // penne ennemi + + é) en (_ E~ // européen + Ci) en (nA E // mienne éC) en (t_ A~ // récent différent élément @@ -579,6 +585,7 @@ _) ç' (P2v s vin) gt (_sept t vin) gt (_huit t vin) gt (_neuf t + vin) gt (_neuvi t gt (_ // vingt doigts @@ -794,7 +801,6 @@ _) half _^_en _) n' (P2v n - A) ng (_ N // parking meeting nn n // panne _) n (_° nymero _) neuro (@@P5 nYro @@ -990,6 +996,7 @@ mou) rr rr // mourrai s s // verser sien s (_S1 z2 + stein (_ Stajn _) s' (P2v s // s'amène _) s' (esXP2v s // s'amène @@ -1079,7 +1086,6 @@ _tou) s (_leurs_ _) sky _^_en _) smil _^_en // smile, smiley spy _^_en - sy (_ _^_en .group t @@ -1280,7 +1286,8 @@ Vn) t (_ t2 x ks xs ks // lexique lexicaux vox e) x (A gz // exagérer exemple - le) x (i ks + Ce) x (i ks + ine) x (i gz _e) x (h gz // exhumer ai) x (_ // voix paix prix diff --git a/dictsource/sk_rules b/dictsource/sk_rules index c69a34f4..7fb5e064 100644 --- a/dictsource/sk_rules +++ b/dictsource/sk_rules @@ -346,11 +346,6 @@ _administratív) n (e n qu kv .group r -// r r -// A) r (A * -// C) r (A @-* -// rr *r - K) r (K r- r R rr R diff --git a/phsource/compile_report b/phsource/compile_report index 69c362b0..ace72ff4 100644 --- a/phsource/compile_report +++ b/phsource/compile_report @@ -1,4 +1,4 @@ -54 phoneme tables +55 phoneme tables new total base 100 100 base2 24 119 @@ -54,6 +54,7 @@ ml 13 139 bn 59 145 ne 14 141 + lv 26 121 Data file Used by b/b [b] base @@ -578,6 +579,7 @@ r3/r_trill [R2] base [R] sk [r*] sr [x] pt + [R] lv r3/r_trill2 [R] base [r] cy [R] hr @@ -591,6 +593,7 @@ r3/r_trill.wav [R2] base [R] sk [r*] sr [x] pt + [R] lv r3/r_u [(u)] base r3/rx [*] base [r/] base @@ -780,6 +783,7 @@ ustop/k_ [k] base [k] sw [k] sq [kh] bn + [k] lv ustop/ki [c] base [k] base [k] base2 @@ -797,6 +801,7 @@ ustop/ki [c] base [c] tr [J] ku [c] ku + [k] lv ustop/kl [k] base [k] base2 [k] en @@ -809,6 +814,7 @@ ustop/kl [k] base [k] zhy [k] sw [kh] bn + [k] lv ustop/kr [k] base [k] base2 [k] en @@ -821,6 +827,7 @@ ustop/kr [k] base [k] zhy [k] sw [kh] bn + [k] lv ustop/k_unasp [k] base [k] base2 [k] fi @@ -832,6 +839,7 @@ ustop/k_unasp [k] base [k`] ko [k] sq [k] bn + [k] lv ustop/k_unasp_ [k] zh ustop/null [?] base ustop/p [p] base @@ -860,6 +868,7 @@ ustop/pl [p] base [p] sq [p] bn [ph] bn + [p] lv ustop/pr [p] base [p] base2 [p] fi @@ -884,6 +893,7 @@ ustop/p_unasp [p] base [p`] ko [p] sq [p] bn + [p] lv ustop/p_unasp_ [p] base2 [p] fi [p] hi @@ -893,6 +903,7 @@ ustop/p_unasp_ [p] base2 [p;] ro [p] sq [p] bn + [p] lv ustop/q [q] base ustop/q_u [q] base ustop/t [t] base @@ -913,6 +924,7 @@ ustop/t_ [t] base [t] sq [t.] bn [t.h] bn + [t] lv ustop/t_dnt [t] base [t[] base [t] base2 @@ -950,6 +962,7 @@ ustop/ts [ts] base2 [ts;] ro [z] zhy [tsh] zh + [ts] lv ustop/tsh [tS] base [c] zhy ustop/tsh_ [tS] base @@ -964,6 +977,7 @@ ustop/t_short [t] fr [t] el [t] sq [t.] bn + [t] lv ustop/tsh_pzd [tS;] zh ustop/tsh_pzd_unasp [tS;] zh ustop/tsh_sr [tS] sr @@ -1012,6 +1026,7 @@ vdiph2/i@ [i@] en_n vdiph2/i@_2 [i@] en_wm vdiph2/ie [i@] en_wi [ie] fi +vdiph2/ie_2 [ie] lv vdiph2/ii@ [i@] en [i@3] en vdiph2/ii@_3 [i@] vi @@ -1020,6 +1035,7 @@ vdiph2/iu [iU] base2 [iU] vi [iu] zhy vdiph2/iu_2 [iu] fi + [iu] lv vdiph2/iu_3 [iu] af vdiph2/iu_4 [Iu] cy [Yu] cy @@ -1033,6 +1049,7 @@ vdiph2/o_oo [o@] en_wi [o] zh vdiph2/u-@ [y@] vi vdiph2/u#@ [U@] en_sc +vdiph2/uaa [uo] lv vdiph2/uo [uo] fi vdiph2/uu@ [U@] en [U@] en_n @@ -1057,6 +1074,7 @@ vdiph/aai_2 [AI] af [AY] cy vdiph/aai_3 [ai] fi vdiph/aau [au] fi + [au] lv vdiph/aau_2 [aU] en_wi [aU] de [VU] nl @@ -1078,6 +1096,7 @@ vdiph/ai [aI] base2 [aI] pt [a:I] vi [aI] id + [ai] lv vdiph/ai_2 [aI] cy [aY] cy vdiph/ai_3 [aI] no @@ -1113,6 +1132,7 @@ vdiph/eei [EI] base2 vdiph/eei_2 [eI] eo [ei] fi [eI] id + [ei] lv vdiph/eei_3 [eI] sk [eI] ku vdiph/eeu [EU] pt @@ -1171,6 +1191,7 @@ vdiph/ooi [OI] en [oi] fi [OI] no [oi] zhy + [oi] lv vdiph/ooi_2 [OI] af vdiph/ooi_3 [OI] en_rp [aI] en_wm @@ -1193,6 +1214,7 @@ vdiph/ui [uI] base2 [ui] fi [uI] vi [ui] zhy + [ui] lv vdiph/u-i [yI] vi vdiph/ui_2 [uI] af vdiph/ui_3 [uI] cy @@ -1360,6 +1382,7 @@ vowel/& [a] en_rp [&] sv [&] bn [&:] bn + [&:] lv vowel/0 [0] en [O] hi [O] pt @@ -1421,6 +1444,7 @@ vowel/a# [a/] base2 [&/] pt [a#] rw [a/] rw + [&] lv vowel/a_2 [a] base2 [a] en_wi [A:] en_wi @@ -1472,6 +1496,7 @@ vowel/a_5 [a:] ta [a] tr [a] sq [a:] ml + [a] lv vowel/a_6 [a] fr [a2] fr vowel/aa [a] fi @@ -1489,6 +1514,7 @@ vowel/aa_2 [A:] en [A] zh vowel/aa_3 [A:] af [A] sq + [a:] lv vowel/aa_4 [O:] en_us [A:] sv [O] vi @@ -1604,6 +1630,7 @@ vowel/e_mid [E] en_rp [E2] id [E] da [E] bn + [e] lv vowel/e_mid2 [E] af [E] de [E2] de @@ -1617,6 +1644,7 @@ vowel/e_mid2 [E] af [e] sw [e] tr [E] ko + [e:] lv vowel/@_fnt [@] en_wi [@2] en_wi [@2] hr @@ -1657,6 +1685,8 @@ vowel/i_3 [i] af [i] fr [i:] fr [i:] sk + [i] lv + [i:] lv vowel/i_4 [i] fi [i] hu [I] it @@ -1825,6 +1855,8 @@ vowel/oo_1 [O:] en_n [o] hr [o] vi [O/] sq + [o] lv + [o:] lv vowel/oo_2 [0] en_sc [O] cy [o] cs @@ -1928,6 +1960,8 @@ vowel/uu# [U] ku vowel/uu_2 [U] base2 [U] de [U] tr + [u] lv + [u:] lv vowel/uu_3 [u] af [y] zh vowel/uu_4 [U] fi diff --git a/phsource/ph_french b/phsource/ph_french index 9a4c9382..4d67d23d 100644 --- a/phsource/ph_french +++ b/phsource/ph_french @@ -425,6 +425,7 @@ phoneme r beforenotvowel r/2 formants vwl_fr/@R3+r3/rx%30 after @2 vwl_fr/@R5+r3/rx%40 + after (u) vwl_fr/@R5+r3/rx%30 after (e) vwl_fr/@R4+r3/rx%20 endphoneme diff --git a/phsource/phonemes b/phsource/phonemes index 1cdd3b8c..7846f64f 100644 --- a/phsource/phonemes +++ b/phsource/phonemes @@ -1322,3 +1322,6 @@ include ph_bengali phonemetable ne hi include ph_nepali + +phonemetable lv base +include ph_latvian diff --git a/phsource/vdiph2/ie_2 b/phsource/vdiph2/ie_2 index e30350a1..916c2c78 100644 Binary files a/phsource/vdiph2/ie_2 and b/phsource/vdiph2/ie_2 differ diff --git a/phsource/vdiph2/uaa b/phsource/vdiph2/uaa new file mode 100644 index 00000000..cc3c0ad0 Binary files /dev/null and b/phsource/vdiph2/uaa differ diff --git a/phsource/vowel/& b/phsource/vowel/& index ac60abe5..dbc90895 100644 Binary files a/phsource/vowel/& and b/phsource/vowel/& differ diff --git a/phsource/vowel/a_6 b/phsource/vowel/a_6 new file mode 100755 index 00000000..a6f4e24a Binary files /dev/null and b/phsource/vowel/a_6 differ diff --git a/phsource/vowel/aa_9 b/phsource/vowel/aa_9 new file mode 100644 index 00000000..212858d4 Binary files /dev/null and b/phsource/vowel/aa_9 differ diff --git a/platforms/windows/windows_sapi/ttsengobj.cpp b/platforms/windows/windows_sapi/ttsengobj.cpp index d4f341ef..88463b93 100755 --- a/platforms/windows/windows_sapi/ttsengobj.cpp +++ b/platforms/windows/windows_sapi/ttsengobj.cpp @@ -23,13 +23,12 @@ #include "src/speak_lib.h" #include "stdio.h" - - #define CTRL_EMBEDDED 1 CTTSEngObj *m_EngObj; ISpTTSEngineSite* m_OutputSite; FILE *f_log2=NULL; +ULONGLONG event_interest; extern int AddNameData(const char *name, int wide); extern void InitNamedata(void); @@ -49,6 +48,10 @@ char *path_install = NULL; unsigned long audio_offset = 0; unsigned long audio_latest = 0; +int prev_phoneme = 0; +int prev_phoneme_position = 0; +unsigned long prev_phoneme_time = 0; + unsigned int gBufSize = 0; wchar_t *TextBuf=NULL; @@ -65,6 +68,48 @@ int frag_count=0; FRAG_OFFSET *frag_offsets = NULL; +int VisemeCode(unsigned int phoneme_name) +{//====================================== +// Convert eSpeak phoneme name into a SAPI viseme code + + int ix; + unsigned int ph; + unsigned int ph_name; + +#define PH(c1,c2) (c2<<8)+c1 // combine two characters into an integer for phoneme name + + const unsigned char initial_to_viseme[128] = { + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 1, 0, 0, 0,19, 0, 0, 0, 0, 0, + 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,255, + 4, 2,18,16,17, 4,18,20,12, 6,16,20,14,21,20, 3, + 21,20,13,16,17, 4, 1, 5,20, 7,16, 0, 0, 0, 0, 0, + 0, 1,21,16,19, 4,18,20,12, 6, 6,20,14,21,19, 8, + 21,20,13,15,19, 7,18, 7,20, 7,15, 0, 0, 0, 0, 0 }; + + const unsigned int viseme_exceptions[] = { + PH('a','I'), 11, + PH('a','U'), 9, + PH('O','I'), 10, + PH('t','S'), 16, + PH('d','Z'), 16, + PH('_','|'), 255, + 0 + }; + + ph_name = phoneme_name & 0xffff; + for(ix=0; (ph = viseme_exceptions[ix]) != 0; ix+=2) + { + if(ph == ph_name) + { + return(viseme_exceptions[ix+1]); + } + } + return(initial_to_viseme[phoneme_name & 0x7f]); +} + + int SynthCallback(short *wav, int numsamples, espeak_EVENT *events); int SynthCallback(short *wav, int numsamples, espeak_EVENT *events) @@ -73,6 +118,8 @@ int SynthCallback(short *wav, int numsamples, espeak_EVENT *events) wchar_t *tailptr; unsigned int text_offset; int length; + int phoneme_duration; + int this_viseme; espeak_EVENT *event; #define N_EVENTS 100 @@ -86,7 +133,7 @@ int SynthCallback(short *wav, int numsamples, espeak_EVENT *events) m_EngObj->CheckActions(m_OutputSite); // return the events - for(event=events; event->type != 0; event++) + for(event=events; (event->type != 0) && (n_Events < N_EVENTS); event++) { audio_latest = event->audio_position + audio_offset; @@ -121,6 +168,28 @@ int SynthCallback(short *wav, int numsamples, espeak_EVENT *events) Event->lParam = (long)event->id.name; Event->wParam = wcstol((wchar_t *)event->id.name,&tailptr,10); } + if(event->type == espeakEVENT_PHONEME) + { + if(event_interest & SPEI_VISEME) + { + phoneme_duration = audio_latest - prev_phoneme_time; + + // ignore some phonemes (which translate to viseme=255) + if((this_viseme = VisemeCode(event->id.number)) != 255) + { + Event = &Events[n_Events++]; + Event->eEventId = SPEI_VISEME; + Event->elParamType = SPET_LPARAM_IS_UNDEFINED; + Event->ullAudioStreamOffset = ((prev_phoneme_position + audio_offset) * srate)/10; // ms -> bytes + Event->lParam = phoneme_duration << 16 | this_viseme; + Event->wParam = VisemeCode(prev_phoneme); + + prev_phoneme = event->id.number; + prev_phoneme_time = audio_latest; + prev_phoneme_position = event->audio_position; + } + } + } #ifdef deleted if(event->type == espeakEVENT_SENTENCE) { @@ -286,7 +355,7 @@ STDMETHODIMP CTTSEngObj::SetObjectToken(ISpObjectToken * pToken) gEmphasis = 0; gSayas = 0; - espeak_Initialize(AUDIO_OUTPUT_SYNCHRONOUS,100,path_install,0); + espeak_Initialize(AUDIO_OUTPUT_SYNCHRONOUS,100,path_install,1); espeak_SetVoiceByName(voice); espeak_SetSynthCallback(SynthCallback); @@ -654,7 +723,7 @@ STDMETHODIMP CTTSEngObj::Speak( DWORD dwSpeakFlags, m_ullAudioOff = 0; m_OutputSite = pOutputSite; - + pOutputSite->GetEventInterest(&event_interest); xVolume = gVolume; xSpeed = gSpeed; @@ -694,6 +763,10 @@ STDMETHODIMP CTTSEngObj::Speak( DWORD dwSpeakFlags, } audio_latest = 0; + prev_phoneme = 0; + prev_phoneme_time = 0; + prev_phoneme_position = 0; + size = ProcessFragList(pTextFragList,TextBuf,pOutputSite,&n_text_frag); if(size > 0) diff --git a/src/numbers.cpp b/src/numbers.cpp index e44ec7df..fb71b5a3 100644 --- a/src/numbers.cpp +++ b/src/numbers.cpp @@ -966,7 +966,13 @@ int Translator::LookupNum3(int value, char *ph_out, int suppress_null, int thous Lookup("_0C",ph_100); - if((hundreds >= 10) && (((langopts.numbers & 0x0800) == 0) || (hundreds != 19))) + if(((langopts.numbers & 0x0800) != 0) && (hundreds == 19)) + { + // speak numbers such as 1984 as years: nineteen-eighty-four +// ph_100[0] = 0; // don't say "hundred", we also need to surpess "and" + } + else + if(hundreds >= 10) { ph_digits[0] = 0; diff --git a/src/speak.cpp b/src/speak.cpp index 88fbf02b..1b536cd1 100755 --- a/src/speak.cpp +++ b/src/speak.cpp @@ -429,7 +429,7 @@ static void StopSpeak(int unused) int *flag; int val; }; - static int optind; + int optind; static int optional_argument; static const char *arg_opts = "afklpsvw"; // which options have arguments static char *opt_string=""; diff --git a/src/synthdata.cpp b/src/synthdata.cpp index a64fbeaa..b86d1199 100755 --- a/src/synthdata.cpp +++ b/src/synthdata.cpp @@ -35,7 +35,7 @@ #include "translate.h" #include "wave.h" -const char *version_string = "1.39.12 24.Oct.08"; +const char *version_string = "1.39.14 02.Nov.08"; const int version_phdata = 0x013900; int option_device_number = -1; diff --git a/src/tr_languages.cpp b/src/tr_languages.cpp index 9c8ad60d..9e2fca92 100644 --- a/src/tr_languages.cpp +++ b/src/tr_languages.cpp @@ -121,6 +121,9 @@ Translator *SelectTranslator(const char *name) int name2 = 0; Translator *tr; + static const unsigned char stress_amps_sk[8] = {16,16, 20,20, 20,24, 24,22 }; + static const short stress_lengths_sk[8] = {190,190, 210,210, 0,0, 210,210}; + // convert name string into a word of up to 4 characters, for the switch() while(*name != 0) name2 = (name2 << 8) + *name++; @@ -552,6 +555,19 @@ SetLengthMods(tr,3); // all equal } break; + case L('l','v'): // latvian + { + tr = new Translator(); + SetupTranslator(tr,stress_lengths_sk,stress_amps_sk); + + tr->langopts.stress_rule = 0; + tr->langopts.spelling_stress = 1; + tr->charset_a0 = charsets[4]; // ISO-8859-4 + tr->langopts.numbers = 0x409; + tr->langopts.stress_flags = 0x16; + } + break; + case L('m','k'): // Macedonian { static wchar_t vowels_cyrillic[] = {0x440, // also include 'р' [R] @@ -673,8 +689,6 @@ SetLengthMods(tr,3); // all equal case L('s','k'): // Slovak case L('c','s'): // Czech { - static const unsigned char stress_amps_sk[8] = {16,16, 20,20, 20,24, 24,22 }; - static const short stress_lengths_sk[8] = {190,190, 210,210, 0,0, 210,210}; static const char *sk_voiced = "bdgjlmnrvwzaeiouy"; tr = new Translator();