diff --git a/dictsource/af_list b/dictsource/af_list index 8f286f0a..72286fca 100755 --- a/dictsource/af_list +++ b/dictsource/af_list @@ -1,4 +1,4 @@ -//maintainer: Willem van der Walt +//maintainer: Willem van der Walt // email: wvdwalt@csir.co.za // tel: +27 12 8413996 // Meraka Institute, CSIR @@ -313,6 +313,7 @@ david _^_EN (da vinci) da||v'intSi debora d@bo@ra debussy d@bus'i: +de d@ (de la) d@||la $u // de la Rey/de la Bat, etc. der d@r derick dErik @@ -608,7 +609,6 @@ voor $u $strend2 // misc unstressed -de d@ dat $u $strend te t@ $verbf nie $unstressend $verbextend diff --git a/dictsource/cs_list b/dictsource/cs_list index e417ac39..15439c9e 100644 --- a/dictsource/cs_list +++ b/dictsource/cs_list @@ -84,8 +84,6 @@ _" uvozovki _, tSa:Rka _- mi:nus _; zdR^edn^i:k -_= Rovno -_* hvjezJitSka _? otazn^i:k __ pottr-Zen^i: _` 'obRa:ts,ena:||tS'a:Rka @@ -99,14 +97,20 @@ _< menSi: _> vjetSi: _| sv'isla:||tS'a:Ra _: dv'ojtetSka -% pRotsento -+ plus + +. tetSka $max3 +* hvjezJitSka $max3 += Rovno $max3 +* hvjezJitSka $max3 +% pRotsento $max3 ++ plus $max3 +! vigR^itSn^i:k $max3 € eURo @ zavina:tS & ampr-sent # gR^i:Zek / lomeno -_\ beksleS +\ beksleS ° stupen^ × kRa:t diff --git a/dictsource/cs_rules b/dictsource/cs_rules index 90dd0a05..5edceb2e 100644 --- a/dictsource/cs_rules +++ b/dictsource/cs_rules @@ -631,18 +631,9 @@ _flegma) ti ti ü i $ dola:R - ! vigR^itSn^i:k - . tetSka - . (. _: - \.) . __) - (_D mi:nus A_) - (_D _ C_) - (_D _ - --) - - * hvj'ezJitSka - *) * (* - ** - **) * (_ _:: diff --git a/dictsource/de_list b/dictsource/de_list index 4ba91c73..87f86c4b 100644 --- a/dictsource/de_list +++ b/dictsource/de_list @@ -15,9 +15,19 @@ // spoken when "speak punctuation" option is on. _. pUnkt +* StE*n $max3 +% p@-*o:ts'Ent $max3 ++ plUs $max3 += glaIC $max3 +# nUm3 $max3 +€ OY*o: +£ paUnd +& Unt +@ kl'ame:*,af@ +~ tIld@ +\ bEkslES + _, kOma - - _| paIp _: d'Op@lp,UNkt _; St@-*'ICpUNkt @@ -64,6 +74,13 @@ _rng k@-*'u:Ze:k _stk S@-*'Egst@-*IC _tld t'Ild@ +æ $accent +é $accent +ç $accent +č $accent +š $accent +ž $accent + // Not Roman numbers v faU x Iks diff --git a/dictsource/de_rules b/dictsource/de_rules index 09b89123..7020ac6e 100644 --- a/dictsource/de_rules +++ b/dictsource/de_rules @@ -1150,24 +1150,5 @@ , (D kOma $ dOl'A: - € OY*o: - £ paUnd - % p@-*o:ts'Ent - & Unt - @ kl'ame:*,af@ - # nUm3 - + plUs - = glaIC - ~ tIld@ - \ bEkslES - . pUnkt - . (. _: - \.) . - - * StE*n - *) * (* - ** - **) * (_ _:: - diff --git a/dictsource/dict_phonemes b/dictsource/dict_phonemes index 8e8582f7..1f779e77 100644 --- a/dictsource/dict_phonemes +++ b/dictsource/dict_phonemes @@ -20,6 +20,7 @@ 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~ +V * b B bh c C ch d d. d.h dh g gh h j J @@ -46,10 +47,11 @@ Dictionary cs_dict i i: l- o o: oU r- u u: -* ; b c d dZ f g -h j J k l l^ m n -N n^ p r R R^ R^/ s -S t tS ts v x z Z +* ; b c d dZ dz f +g h j J k l l^ m +n N n^ p r R R^ R^/ +s S t tS ts v x z +Z Dictionary cy_dict @@ -180,10 +182,10 @@ Dictionary hbs_dict E e e: i I i: l- O o o: oU r* r- u U u: -* ; b d dZ dZ; f g -h j k l l^ m n N -n^ p r R R2 s S t -tS ts tS; v x z Z +* ; b d dZ dz dZ; f +g h j k l l^ m n +N n^ p r R R2 s S +t tS ts tS; v x z Z Dictionary hi_dict @@ -323,9 +325,9 @@ i: ie iu o o: u u: ui uo : b c d dZ f g h -j J k l l^ m n n^ -p r R R2 s S t tS -ts v x z Z +j J k l l^ m n N +n^ p r R R2 s S t +tS ts v z Z Dictionary mk_dict @@ -334,10 +336,10 @@ Dictionary mk_dict e e: i I i: l- o o: oU r- u u: -* b d dZ dZ; f g h -j k k^ l l^ m n N -n^ p r R s S t tS -ts tS; v x z Z +* b d dZ dz dZ; f g +h j k k^ l l^ m n +N n^ p r R s S t +tS ts tS; v x z Z Dictionary ml_dict @@ -411,10 +413,10 @@ a E E# E~ i O O~ u y : ; b c C d d; dZ -dz; f g h j k l m -n N n^ p r R s S -s; S; t t; tS ts ts; tS; -v w x z Z Z; +dz dz; f g h j k l +m n N n^ p r R s +S s; S; t t; tS ts ts; +tS; v w x z Z Z; Dictionary pt_dict @@ -476,10 +478,11 @@ Dictionary sk_dict l- l: o o: oU r- r: u u: -* ; b d d; 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 +* ; b d d; dZ dz f +g h j k l l^ m n +N n^ p r R R^ R^/ s +S t t; tS ts v x z +Z Dictionary sq_dict diff --git a/dictsource/en_list b/dictsource/en_list index 0357c3c8..5c5a0ca2 100644 --- a/dictsource/en_list +++ b/dictsource/en_list @@ -178,6 +178,8 @@ _‴ trIp@LpraIm _‼ Ekskla2m'eIS@nz _₠ jU@roU +@ _at_ +& _and \ bakstroUk $max3 / stroUk $max3 ?3 \ bakslaS $max3 @@ -2279,7 +2281,7 @@ Berlin b3:l'In Bhutan bu:t'an Bogota b0g@t'A: ?3 Boston bOst@n -Bucharest bu:k@r'Est +Bucharest bu:ka2r'Est Budapest bu:d@p'Est Buenos bweIn0s Burundi bUr'UndI @@ -2308,7 +2310,7 @@ Djibouti dZIb'u:tI Egyptian IdZ'IpS@n Eire e@r@ Geneva dZ@ni:v@ -Harare h@rA:rI +Harare ha2rA:rI Hanoi han'OI Hawaii h@w'aIi: Hawai'i h@w'aIi: @@ -2327,7 +2329,7 @@ Jakarta $2 Jerusalem dZ@ru:s@l@m Johannesburg $2 Kalgoorlie kalgU@lI -Karachi k@rA@tSI +Karachi ka2rA@tSI Kentucky $2 Kiev ki:Ev Khmer kmi@3 @@ -2413,7 +2415,7 @@ Taipei t,aIp'eI Taiwan taI'wan (tel aviv) t,El||a2v'i:v Tibet tI2b'Et -Totonto t@r0ntoU +Toronto t@r0ntoU Timor ti:mo@ Tokyo toUkIoU Toulouse tu:l'u:z diff --git a/dictsource/en_rules b/dictsource/en_rules index 3fc18a30..92295bb2 100644 --- a/dictsource/en_rules +++ b/dictsource/en_rules @@ -730,6 +730,7 @@ r) anged (S1 d perm) an @n ang (er aNg + h) ang (er aN m) anoeu (v @nu: _qu) an 0n _w) an 0n @@ -3404,7 +3405,9 @@ cla) ng (er Ng ta) ngi ndZI i) ng (er Ng - bi) ng (er ndZ + ri) ng (er N + si) ng (er N + bi) ng (er ndZ gi) ng (er ndZ o) ng (er Ng you) ng (er Ng @@ -5338,8 +5341,6 @@ : koUl@n D_) : (_DD_ // omit colon in time, eg: 2:30 $ d0l3 - @ at_: - & _!%and != n0ti:kw@Lz >= greIt@O@i:kw@L <= lEsO@i:kw@L diff --git a/dictsource/eo_list b/dictsource/eo_list index 14158cfc..736ebac6 100644 --- a/dictsource/eo_list +++ b/dictsource/eo_list @@ -61,14 +61,14 @@ _- dividost@-*eko __ subst@-*eko ~ tildo ° gradoI -% p@-*otsento +% p@-*otsento $max3 @ _tSe_ -& kaI -= egala +& _kaI += egala $max3 \ deklivo / oblikvo | duktosigno -* asteRisko +* asteRisko $max3 © kopiRaIto _( R'ondak@-*'ampo _) f'eRmaRondak@-*'ampo diff --git a/dictsource/fi_list b/dictsource/fi_list index 2c538021..c19385ad 100755 --- a/dictsource/fi_list +++ b/dictsource/fi_list @@ -67,15 +67,17 @@ _< p'ienempIk'uin _> s'u:*empIk'uin _- vi:va2 __ ala2vi:va2 -+ plus ++ plus $max3 +* asteriski $max3 += 'yht&k'uin $max3 +% p@-*osent:I $max3 / kaut:a2 \ keno € eu*o £ punta2 ¤ valu:t:a2 -& et -@ &t -% p@-*osent:I +& _et +@ _&t ~ tilde _acu 'aku:t:I diff --git a/dictsource/fi_rules b/dictsource/fi_rules index c36e3235..4f494bcb 100755 --- a/dictsource/fi_rules +++ b/dictsource/fi_rules @@ -207,13 +207,11 @@ .group å o - å o: + åå o: š S ž Z $ dollarin - * asteriski - = 'yht&k'uin __) - (_D mi:nus A_) - (_D _ C_) - (_D _ diff --git a/dictsource/fr_list b/dictsource/fr_list index 565b44fb..76f9a35b 100755 --- a/dictsource/fr_list +++ b/dictsource/fr_list @@ -111,7 +111,6 @@ _# djEz _' a2postr'Of _( 'uvR@-parA~t'Ez _) f'Erm parA~t'Ez -_* asterisk: _, virgyl _- tirE _. _|pw%E~ @@ -142,10 +141,11 @@ _§ sEksj'O~ // symbols that are normally spoken when reading text @ arobaz -% pursA~ -& e $u $brk +% pursA~ $max3 +* asterisk: $max3 +& _e _& _e_komErsj'al -+ plys ++ plys $max3 ~ tilde € @ro ¢ sEnt diff --git a/dictsource/hbs_list b/dictsource/hbs_list index ed3268a9..b95c9faa 100644 --- a/dictsource/hbs_list +++ b/dictsource/hbs_list @@ -51,7 +51,7 @@ _ú $accent _lig l'ig&t,UR& _acu 'akUt _ac2 dv'ostr**UkI;'akUt -//_brv +_brv br**'Ev // ?? _ced ts'EdIl& _cir ts'iRkUmflEks _dia 'uml&Ut @@ -71,8 +71,12 @@ _tld t'ild& _cap k'apIt&l // ?? use English until I find the correct word © 'aUtoRsk&||pr*av& - % p'osto - + plus + * zvj'ezdits& $max3 + = _j'edn&ko $max3 + % p'osto $max3 + + plus $max3 + . totSk& $max3 +?4 . tatSk& $max3 € 'euRo ?4 € 'evr*o @ _'at @@ -82,9 +86,9 @@ _tld t'ild& ?2 ! 'uzvItSnIk : dv'ototSk& ?4 : dv'ot&tSk& - # br*'oj_ - / kr*'oz_ - \\ b'EkslES + # br*'oj_ $max3 + / kr*'oz_ $max3 + \ b'EkslES $max3 ^ ts'iRkumfleks ~ t'ild& ¤ v'alut& diff --git a/dictsource/hbs_rules b/dictsource/hbs_rules index 23a0789b..3e77614d 100755 --- a/dictsource/hbs_rules +++ b/dictsource/hbs_rules @@ -148,25 +148,10 @@ $ d'ol&R - . totSk& -?4 . tatSk& - . (. _: - \.) . - __) - (_D minus A_) - (_D _ C_) - (_D _ - --) - - * zvj'ezdits& - *) * (* - ** - **) * (_ _:: - - = _j'edn&ko - = (== - =) = (= - ==) = (_ _:: .group 0xce // Greek letters diff --git a/dictsource/hu_list b/dictsource/hu_list index 6f0d9e86..1427a714 100755 --- a/dictsource/hu_list +++ b/dictsource/hu_list @@ -50,7 +50,7 @@ _lig ligAtu:R2A _acu e:lES _ac2 kEt:Y:S _brv fe:lkYR2 -//_ced // cedilla +_ced tse:dillE _cir tsiR2kumflEks _dia tR2e:mA //_dot // dot above @@ -343,10 +343,49 @@ ty ce: ly Ellipsilon ny En^ -_. pont +ä $accent +æ $accent +ç $accent +ñ $accent +ø $accent +ß _^_DE + +. pont $max3 +* tS'illAg $max3 +% sa:zAle:k $max3 ++ plus $max3 += EJEnlY:Se:g $max3 +@ kukAts +& e:SjEl +€ EuR2o +¶ bEkEzde:S +§ pAR2AgR2AfuS +~ tildE +^ hia:n^ +° fokjEl Ft foR2int - +_, vEss2Y: +_; pontoSvEss2Y: +_: kEt:Y:Spont +_! fElkia:lto: +_? ke:R2dY: +_- kYtY:jEl +__ Ala:hu:za:S +_' ApostR2o:f +_– nAJkYtY: +_— kviR2tmi:nus +_" ide:zY: +_( za:R2o: +_) za:R2o: +_[ s'YglEtES||z'a:R2o: +_] s'YglEtES||z'a:R2o: +_{ k'AptSoS||z'a:R2o: +_} k'AptSoS||z'a:R2o: +_# sa:mjEl +_… ha:R2_mASpont +_• di:spont +_\ viss2ApER2 // Main Exceptions List //===================== diff --git a/dictsource/hu_rules b/dictsource/hu_rules index d5d0724d..064ff381 100644 --- a/dictsource/hu_rules +++ b/dictsource/hu_rules @@ -336,19 +336,3 @@ _szára) zs (ág zS ç tS ñ n^ ø Y - - % sa:zAle:k - @ kukAts - € EuR2o - + plus - § pAR2AgR2AfuS - - . pont - . (. _: - \.) . - - - * tS'illAg // asterisk - *) * (* - ** - **) * (_ _:: diff --git a/dictsource/it_list b/dictsource/it_list index 48b6e31a..84104ae4 100644 --- a/dictsource/it_list +++ b/dictsource/it_list @@ -441,7 +441,6 @@ principi $1 tesser tess'ER uomini $1 - // $alt = use ò or è in the stressed syllable // If the final vowel is omitted, then the rule applies to 'a' 'e' 'i' 'o' $textmode diff --git a/dictsource/pl_list b/dictsource/pl_list index 6e1444fa..faf92f7f 100644 --- a/dictsource/pl_list +++ b/dictsource/pl_list @@ -174,21 +174,21 @@ _{ n,av;as||klamROvy _} pRavy||n,av;as||klamR'Ovy _' ap'OstROf -. kR'Opka +. kR'Opka $max3 ~ t'ylda -= R'uvna||S;E -/ slES -* gv;'astka -\ b'EkslES += R'uvna||S;E $max3 +/ slES $max3 +* gv;'astka $max3 +\ b'EkslES $max3 | kR,Eska||p;On'Ova -# haS +# haS $max3 _$ d'OlaR % pR'OtsEnt ^ d'aSEk // what's be better? & and ` 'aktsEnt @ m'awpa -+ plus ++ plus $max3 // other characters diff --git a/dictsource/pt_list b/dictsource/pt_list index 25e64453..f5ced60c 100755 --- a/dictsource/pt_list +++ b/dictsource/pt_list @@ -53,11 +53,11 @@ _ô $accent _õ $accent _ú $accent _ü $accent +ß _^_DE v ve // not Roman numbers x Sis# - _cap maI'uskulU _?A l'etR&_ _?? s'imbolU_ @@ -65,21 +65,31 @@ _#32 esp'asU ?1 _#32 Sp'asU _#9 tab -_. p'oNtU +* &ste*'iskU $max3 += __igw'&l_ $max3 +. p'oNtU $max3 ++ maIs# $max3 +% pors'eINtU $max3 +& _'e_ +@ &x'ob& +¤ 'eU*U +€ 'eU*U +§ p&*'agRafU + + _! ,eskl&mas'&U~ _" 'asp&s# ?1 _# k,ardin'al ?2 _# k,ardZin'aU _$ s,ifR'&U~ -_% pors'eINtU _& 'e ?1 _' ap'Ostr,ofy ?2 _' &p'OstRofU _( ,abRipa*'eINtezy _) f,ES&pa*'eINtezy _* &ste*'iskU -_+ m'aIs# +_− m'enUs _, v'irgul& _- 'ifeIN @@ -91,7 +101,6 @@ _< men'Or ?2 _= igw'aU _> maI'Or _? ,iNtex,ogas'&U~ -_@ &x'ob& _[ ,abRikowS'etSi _\ b,ax&,iNvertS'id& _] f,ES&kowS'etSi diff --git a/dictsource/pt_rules b/dictsource/pt_rules index f5d248f0..a06f3da0 100755 --- a/dictsource/pt_rules +++ b/dictsource/pt_rules @@ -838,39 +838,17 @@ ü u ß s - % pors'eINtU $ sifR'&U~ _r_) $ - − m'enUs - + maIs# - & 'e - @ &x'ob& - ¤ 'eU*U - € 'eU*U - § p&*'agRafU D_) º %o // ordinal D_) ª %a // ordinal - // don't speak multiple occurances of these symbols , (D v'irgul& - . p'oNtU - . (. _: - \.) . - * &ste*'iskU - *) * (* - ** - **) * (_ _:: __) - (_D m'enUs A_) - (_D _ C_) - (_D _ - --) - - - = __igw'&l_ - = (== - =) = (= - ==) = (_ _:: diff --git a/dictsource/ro_list b/dictsource/ro_list index 8f2fcff3..93d9e8c5 100644 --- a/dictsource/ro_list +++ b/dictsource/ro_list @@ -46,6 +46,7 @@ z zet â ,ydin'a $atend ă '@ $atend î ,ydin'i $atend +ö $accent _?? ka*akt'er _cap maZusk'ul@ @@ -69,7 +70,7 @@ _tld t'ild@ // punctuation and symbols -_. punkt + _, v'irgul@ _: do'u@p'unkte _; p'unkt||Siv'irgul@ @@ -93,9 +94,11 @@ _| b'ar@vertik'al@ _#9 t'ab _#32 sp'atsiU -= eg'al -# dj'ez -+ plus +. punkt $max3 +* aste*isk $max3 += eg'al $max3 +# dj'ez $max3 ++ plus $max3 & ampersand © k'apiraIt @ a*'ond @@ -104,7 +107,6 @@ _#32 sp'atsiU ° g@-*ade - // numeric //******** _0 z'e*o @@ -180,6 +182,9 @@ _dpt _v'irgul@ _0Z2 s'utimi _0Z3 m'iImi +// not Roman numbers +vi vi +vii viI // Abbreviations //************** diff --git a/dictsource/ro_rules b/dictsource/ro_rules index 69c74265..b971f44f 100644 --- a/dictsource/ro_rules +++ b/dictsource/ro_rules @@ -7,7 +7,8 @@ .replace ș ş ț ţ - + Ș ş // because Windows doesn't convert upper-case Ș Ț to lower-case + Ț ţ .group a a a @@ -471,19 +472,9 @@ , (D v'irgul@ - . punkt - . (. _: - \.) . - __) - (_D m'inus A_) - (_D _ C_) - (_D _ - --) - - - * aste*isk - *) * (* - ** - **) * (_ _:: diff --git a/dictsource/sk_list b/dictsource/sk_list index 9b091af4..388c5863 100644 --- a/dictsource/sk_list +++ b/dictsource/sk_list @@ -47,6 +47,8 @@ y ipsilon _z zet ž Zet +ě $accent + // accent names _lig l'igat,u:Rov,ane: _acu s_d'l:Zn^om @@ -72,16 +74,19 @@ _#9 t'ab _#32 'medzeRa _?A znak +* hviezda $max3 ++ plus $max3 += Rovna:sa $max3 +@ zavina:tS +& ampeRsand +# kRi:Zik $max3 + _! vi:kRitSn^i:k _" u:vodzovki -_# kRi:Zik _$ dola:R -_& ampeRsand _' apostRof _( za:tvoRka _) zatvoRit; -_* hviezda -+ plus _, tSiaRka _- poml-tSka __ podtSiaRknutie @@ -90,10 +95,8 @@ _/ lomeno _: dvojbodka _; bodkotSiaRka _< menSi: -_= Rovna:sa _> vetSSi: _? ota:zn^ik -_@ zavina:tS _[ hRanata:||za:tvoRka _\ opatSne:||lomeno _] hRanata:||zatvoRit; @@ -179,8 +182,15 @@ _2C dv'est'o _0M1 t;'isi:ts _1M1 t;'isi:ts _2M1 dv'et;'isi:ts -_0M2 m'ilio:n -_0M3 m'iljaRda +_0M2 m'ilio:nou // others, 5-9 +_0MA2 m'ilio:ni // for 2,3,4 million +_1M2 m'ilio:n // for 1 million +_0M3 m'iljaRt +_0MA3 m'iljaRdi +_1M3 m'iljaRda +_0M4 b'ilio:nou +_0MA4 b'ilio:ni +_1M4 b'ilio:n _dpt _:tSj,arka_ diff --git a/dictsource/tr_list b/dictsource/tr_list index dbadaa6f..7240207e 100644 --- a/dictsource/tr_list +++ b/dictsource/tr_list @@ -44,7 +44,7 @@ _?A haRf _acu vURg'UimI _ac2 tS'IftvURg'UimI _brv ku#s'altmaimI -_ced tSEnJ'El +_ced h'aRf _cir Sapk'a _dia Umla'Ut _dot YstnOkt'a @@ -75,15 +75,17 @@ _^ IndZ'EltmEiSa*et'I _& v'EiSa*et'I _* j'u#ldu#z _@ kUjRUkl'U'a -_\\ t'ERs||ej,IktSIzg'I +_\ t'ERs||ej,IktSIzg'I ¶ pa*agR'af § tSEnJ'El ° de*edZ'E _# dij'Ez _~ jaklaS'u#k __ ,alttSIzg'I -+ aRt'u# -€ avR'O += ESIt $max3 +% jYzdE $max3 ++ aRtu# $max3 +€ avRO _0 su#fu#R diff --git a/dictsource/tr_rules b/dictsource/tr_rules index d834af47..78f0590b 100644 --- a/dictsource/tr_rules +++ b/dictsource/tr_rules @@ -321,5 +321,5 @@ .group $ dolar - ' (Pb % // split a word at ' and translate the first part separately. + ' (Pb // split a word at ' and translate the first part separately. diff --git a/phsource/compile_report b/phsource/compile_report index 956972d7..73252dd7 100644 --- a/phsource/compile_report +++ b/phsource/compile_report @@ -2,12 +2,12 @@ new total base 103 103 base2 24 122 - en 51 149 - en_n 31 149 - en_us 36 150 + en 50 149 + en_n 32 149 + en_us 37 150 en_sc 39 151 en_rp 34 149 - en_wm 30 149 + en_wm 31 149 en_wi 30 149 af 39 135 cy 29 129 @@ -22,12 +22,12 @@ hu 23 119 lv 29 126 nl 28 126 - pl 19 116 - sk 28 134 - cs 6 134 - hr 26 139 - mk 3 140 - sr 14 139 + pl 20 117 + sk 28 135 + cs 6 135 + hr 26 140 + mk 3 141 + sr 14 140 ru 39 134 it 17 125 la 21 121 @@ -49,15 +49,15 @@ tr 18 127 ku 18 127 id 15 124 + sq 35 127 + hy 24 119 rw 15 129 ko 18 159 da 15 133 - sq 35 127 ml 13 151 kn 15 151 bn 59 155 ne 18 157 - hy 24 119 om 25 125 en_klatt 77 149 ga 18 117 @@ -184,6 +184,7 @@ d/xd [d] base [d.h] hi [d] hu [d] pl + [dz] pl [d] hr [d] ru [d;] ro @@ -192,9 +193,9 @@ d/xd [d] base [d] id [d] sq [dz] sq + [dz] hy [d] bn [d.] bn - [dz] hy [d[] ga d/xd2 [d`] om d/xd3 [dh] hi @@ -751,10 +752,12 @@ n/nj [n] base [n] da n/n_long_ [n] zh nn/_nn [N] base - [N] en + [N] en_n + [N] en_wm [N] zh nn/nn_ [N] base - [N] en + [N] en_n + [N] en_wm nn/nn@ [(@)] base [(@)] en_klatt nn/nn#_ [N#] is @@ -945,8 +948,8 @@ ufric/s [s] base [z2] fr [s] es [s#] pt - [s`] ko [z] sq + [s`] ko [s] en_klatt ufric/s_ [s] base [z] base @@ -1103,10 +1106,10 @@ ustop/k_unasp [k] base [k] sk [k] el [k] zhy - [k`] ko [k] sq - [k] bn [k] hy + [k`] ko + [k] bn ustop/k_unasp_ [k] zh ustop/null [?] base ustop/p [p] base @@ -1119,8 +1122,8 @@ ustop/p_ [p] base [p2] fr [ph] hi [ph] zh - [ph] bn [p#] hy + [ph] bn ustop/p_asp [bh] hi [ph] hi [p#] hy @@ -1138,10 +1141,10 @@ ustop/pl [p] base [p] la [p;] ro [p] sq - [p] bn - [ph] bn [p] hy [p#] hy + [p] bn + [ph] bn ustop/pr [p] base [p] base2 [p] fi @@ -1151,10 +1154,10 @@ ustop/pr [p] base [p] hu [p] la [p;] ro - [p] bn - [ph] bn [p] hy [p#] hy + [p] bn + [ph] bn ustop/p_unasp [p] base [p] base2 [p] fi @@ -1166,10 +1169,10 @@ ustop/p_unasp [p] base [p] la [p;] ro [p] zh - [p`] ko [p] sq - [p] bn [p] hy + [p`] ko + [p] bn ustop/p_unasp_ [p] base2 [p] fi [p] hi @@ -1179,8 +1182,8 @@ ustop/p_unasp_ [p] base2 [p] la [p;] ro [p] sq - [p] bn [p] hy + [p] bn ustop/q [q] base ustop/q_u [q] base ustop/t [t] base @@ -1216,18 +1219,18 @@ ustop/t_dnt [t] base [t;] ro [t[] vi [t] sw - [t`] ko [t] sq - [t] bn [t] hy + [t`] ko + [t] bn [t[] ga ustop/t_dnt2 [t[] vi ustop/t_ejc [t`] om ustop/t_hi [t] hi [t] sq + [t] hy [t] bn [th] bn - [t] hy ustop/t_pzd [t;] pl [t;] ru ustop/tr [t] base @@ -1240,6 +1243,7 @@ ustop/ts [ts] base2 [ts] eo [ts] hu [ts] pl + [dz] pl [ts] ru [ts;] ro [z] zhy @@ -1254,6 +1258,7 @@ ustop/ts_ [ts] base2 [ts] hu [ts] lv [ts] pl + [dz] pl [ts] ru [ts;] ro [ts] sq @@ -1289,13 +1294,13 @@ ustop/ts_pzd [tS;] base [ch] bn ustop/ts_pzd_ [c] hi [c] hu - [c] bn [c] hy + [c] bn ustop/ts_pzd2 [c] hi [c] hu + [c] hy [c`] ko [c] bn - [c] hy ustop/ts_pzd3 [tS;] hr [dZ;] hr ustop/t_sr [d] sr @@ -1406,8 +1411,8 @@ vdiph/ai [aI] base2 [aI] pt [a:I] vi [aI] id - [aI] kn [aI] hy + [aI] kn vdiph/ai_2 [aI] en [aI] cy [aY] cy @@ -1440,8 +1445,8 @@ vdiph/eei [EI] base2 [EI] de [EI] nl [EI] vi - [eI] ne [eI] hy + [eI] ne vdiph/eei_2 [eI] eo [ei] fi [ei] lv @@ -1704,10 +1709,10 @@ vowel/@ [@] base [@] en_rp [V] cy [@4] hi + [@] hy [@] ml [@] kn [@4] bn - [@] hy [@] ga vowel/@- [@-] base [r*] hr @@ -1726,7 +1731,8 @@ vowel/0 [0] en vowel/0_2 [0] en_n [O] pt_pt [o] sw -vowel/0_3 [O] en_sc +vowel/0_3 [O:] en_us + [O] en_sc [0] en_rp [A] hu vowel/@_2 [@] vi @@ -1754,7 +1760,6 @@ vowel/@_4 [@] en_us [@] nl [@] no vowel/@_5 [W] fr -vowel/@_6 [@/] en_us vowel/8 [o-] zh vowel/8_2 [U] en_us [8] sv @@ -1820,8 +1825,8 @@ vowel/a_3 [a] en_sc [a:] la [a] is [A] zh - [A] da [a] sq + [A] da vowel/a#_3 [a2] en [a2] en_n [a2] en_us @@ -1871,8 +1876,7 @@ vowel/aa_2 [A:] en [A] zh vowel/aa_3 [A:] af [A] sq -vowel/aa_4 [O:] en_us - [A:] sv +vowel/aa_4 [A:] sv [O] vi vowel/aa_5 [A:] en_n [A:] en_wm @@ -1915,11 +1919,11 @@ vowel/e [e] base2 [e] grc [e] vi [e] id + [e] sq [e] rw [e#] rw [e] ko [e] da - [e] sq [e] ml [e:] ml [e:] kn @@ -1991,9 +1995,9 @@ vowel/e_mid [E] en_rp [E] tr [E] id [E2] id + [e] hy [E] da [E] bn - [e] hy vowel/e_mid2 [E] af [E] de [E2] de @@ -2007,8 +2011,8 @@ vowel/e_mid2 [E] af [e] el [e] sw [e] tr - [E] ko [e#] sq + [E] ko [e] kn [E] om [E#] om @@ -2038,13 +2042,13 @@ vowel/i [i] base2 [i] zhy [i] zh [i] sw + [i] hy [i] rw [i#] rw [i] ko [i:] ml [i:] kn [i] ne - [i] hy [i:] om [i:] ga vowel/i# [y:] cy @@ -2156,6 +2160,8 @@ vowel/@_low [3] en_rp [@2] bn [V] ne [@/] ne +vowel/@_low2 [@/] en_us + [@2] en_us vowel/o [o] base2 [o:] en [oU] en_n @@ -2172,6 +2178,7 @@ vowel/o [o] base2 [o] grc [o:] sv [o] id + [o] hy [o] rw [o#] rw [o] ml @@ -2179,7 +2186,6 @@ vowel/o [o] base2 [o] kn [o:] kn [o] bn - [o] hy [o:] ga vowel/o_2 [o:] cy [o2] fr @@ -2204,8 +2210,8 @@ vowel/o_7 [o] ku vowel/oe [W] en [W] af [W] de - [W] da [W] hy + [W] da vowel/oe_2 [W] no [W] tr vowel/oe_4 [W] sv @@ -2342,12 +2348,12 @@ vowel/u_bck [u] base2 [u] is [u] zhy [u] zh + [u] hy [u] rw [u#] rw [u] ko [u:] bn [u] ne - [u] hy [u:] ga vowel/u_bck2 [u:] la [u] sq diff --git a/phsource/ph_english b/phsource/ph_english index f3c57610..17aed1f1 100644 --- a/phsource/ph_english +++ b/phsource/ph_english @@ -27,18 +27,6 @@ phoneme t2 // [t] which doesn't reduce endphoneme -phoneme N - vcd vel nasal - vowelout f1=3 f2=2300 300 400 f3=-200 80 len=40 rms=20 brk - length 100 - formants NULL - after _ nn/_nn - before _ nn/nn_ - lengthmod 8 // longer than 'n' - linkout g- -endphoneme - - phoneme l liquid length 100 diff --git a/phsource/ph_english_n b/phsource/ph_english_n index f5536c35..450d9b22 100644 --- a/phsource/ph_english_n +++ b/phsource/ph_english_n @@ -1,4 +1,16 @@ +phoneme N + vcd vel nasal + vowelout f1=3 f2=2300 300 400 f3=-200 80 len=40 rms=20 brk + length 100 + formants NULL + after _ nn/_nn + before _ nn/nn_ + lengthmod 8 // longer than 'n' + linkout g- +endphoneme + + //******************************************************************* // VOWELS diff --git a/phsource/ph_english_us b/phsource/ph_english_us index dbe8cb48..81253c2e 100644 --- a/phsource/ph_english_us +++ b/phsource/ph_english_us @@ -1,5 +1,4 @@ - //******************************************************************* // VOWELS //******************************************************************* @@ -10,7 +9,6 @@ phoneme 3 // Schwa, used for rhotic schwa in American formants vwl_en_us/3_us unstressed linkout r- -// beforevowel @ length 210 endphoneme @@ -19,16 +17,24 @@ phoneme @ // Schwa vowel starttype (@) endtype (@) formants vowel/@_4 unstressed + before_r 3 length 130 endphoneme phoneme @/ // Schwa, end of word vowel starttype (@) endtype (@) - formants vowel/@_6 + formants vowel/@_low2 unstressed length 130 endphoneme +phoneme @2 // Schwa, changes to I before a vowel + vowel starttype (@) endtype (@) + formants vowel/@_low2 + unstressed + beforevowel I2 + length 120 +endphoneme phoneme @L vowel starttype (@) endtype l @@ -137,7 +143,7 @@ endphoneme phoneme A@ // Used for [A:] when followed by 'r', becomes [A:]+[r] in American vowel starttype (a) endtype (@) - length 250 + length 260 formants vwl_en_us/ar appendph r endphoneme @@ -160,12 +166,10 @@ endphoneme phoneme O: - vowel starttype (a) endtype (a) + vowel starttype (o) endtype (o) length 210 - formants vowel/aa_4 -// formants vowel/aa_4 + formants vowel/0_3 before r vwl_en_us/oor -// before r vwl_en_us/or reduceto @ 0 endphoneme @@ -188,7 +192,7 @@ endphoneme phoneme O - vowel starttype (a) endtype (a) + vowel starttype (o) endtype (o) length 200 formants vowel/aa# reduceto @ 0 diff --git a/phsource/ph_english_wm b/phsource/ph_english_wm index 9e243339..b0977bc4 100644 --- a/phsource/ph_english_wm +++ b/phsource/ph_english_wm @@ -1,4 +1,16 @@ +phoneme N + vcd vel nasal + vowelout f1=3 f2=2300 300 400 f3=-200 80 len=40 rms=20 brk + length 100 + formants NULL + after _ nn/_nn + before _ nn/nn_ + lengthmod 8 // longer than 'n' + linkout g- +endphoneme + + //******************************************************************* // VOWELS diff --git a/phsource/ph_polish b/phsource/ph_polish index fe8fbce3..d5f564c8 100644 --- a/phsource/ph_polish +++ b/phsource/ph_polish @@ -138,7 +138,6 @@ phoneme d; endphoneme - phoneme ts vls alv afr sibilant vowelin f1=0 f2=1700 -300 300 f3=-100 80 @@ -146,9 +145,24 @@ phoneme ts lengthmod 2 wave ustop/ts before _ ustop/ts_ + switchvoicing dz endphoneme +phoneme dz + vcd alv afr sibilant + vowelin f1=1 f2=1700 -300 300 f3=-100 80 + vowelout f1=2 f2=1700 -300 300 f3=-100 80 + formants d/xd+ustop/ts + before _ d/xd+ustop/ts_ + after _ NULL + after @ d/xd + lengthmod 5 + switchvoicing ts +endphoneme + + + phoneme w liquid diff --git a/phsource/phonemes b/phsource/phonemes index 2aec9029..a9c4bbe1 100644 --- a/phsource/phonemes +++ b/phsource/phonemes @@ -365,6 +365,7 @@ endphoneme phoneme r liquid starttype #r endtype #r + rhotic length 100 lengthmod 7 beforenotvowel r/ @@ -1324,6 +1325,12 @@ include ph_kurdish phonemetable id base2 include ph_indonesian +phonemetable sq base +include ph_albanian + +phonemetable hy base +include ph_armenian + phonemetable rw base2 @@ -1335,9 +1342,6 @@ include ph_korean phonemetable da is include ph_danish -phonemetable sq base -include ph_albanian - phonemetable ml hi include ph_malayalam @@ -1350,9 +1354,6 @@ include ph_bengali phonemetable ne hi include ph_nepali -phonemetable hy base -include ph_armenian - phonemetable om base include ph_oromo diff --git a/phsource/vdiph2/u@ b/phsource/vdiph2/u@ new file mode 100644 index 00000000..452b315f Binary files /dev/null and b/phsource/vdiph2/u@ differ diff --git a/phsource/vowel/0_3 b/phsource/vowel/0_3 index 1f2191d6..007a655e 100644 Binary files a/phsource/vowel/0_3 and b/phsource/vowel/0_3 differ diff --git a/phsource/vowel/@_low2 b/phsource/vowel/@_low2 new file mode 100644 index 00000000..26a19a73 Binary files /dev/null and b/phsource/vowel/@_low2 differ diff --git a/phsource/vowel/a b/phsource/vowel/a index 4cead38e..4f93d735 100644 Binary files a/phsource/vowel/a and b/phsource/vowel/a differ diff --git a/phsource/vowel/vowelchart.png b/phsource/vowel/vowelchart.png index f2a75c49..5180d755 100644 Binary files a/phsource/vowel/vowelchart.png and b/phsource/vowel/vowelchart.png differ diff --git a/phsource/vwl_en_us/3_us2 b/phsource/vwl_en_us/3_us2 index 454e29e0..5c25422e 100644 Binary files a/phsource/vwl_en_us/3_us2 and b/phsource/vwl_en_us/3_us2 differ diff --git a/phsource/vwl_en_us/ar b/phsource/vwl_en_us/ar index 5cc2166e..dc01c18c 100644 Binary files a/phsource/vwl_en_us/ar and b/phsource/vwl_en_us/ar differ diff --git a/src/compiledata.cpp b/src/compiledata.cpp index 099679a8..65b6b67a 100755 --- a/src/compiledata.cpp +++ b/src/compiledata.cpp @@ -69,6 +69,7 @@ #define tBEFORENOTVOWEL 19 #define tBEFORENOTVOWEL2 20 #define tSWITCHVOICING 21 +#define tBEFORE_R 22 #define tLINKOUT 23 #define tVOWELIN 24 @@ -83,7 +84,7 @@ #define tSTRESSTYPE 32 -static const int flags_alternative[] = {phBEFOREVOWEL,phBEFOREVOWELPAUSE,phBEFORENOTVOWEL,phBEFORENOTVOWEL2,phSWITCHVOICING}; +static const int flags_alternative[] = {phBEFOREVOWEL,phBEFOREVOWELPAUSE,phBEFORENOTVOWEL,phBEFORENOTVOWEL2,phSWITCHVOICING,phBEFORE_R}; extern void MakeVowelLists(void); extern void FindPhonemesUsed(void); @@ -243,6 +244,7 @@ static keywtab_t keywords[] = { {"beforevowelpause", tBEFOREVOWELPAUSE}, {"beforenotvowel",tBEFORENOTVOWEL}, {"beforenotvowel2",tBEFORENOTVOWEL2}, + {"before_r",tBEFORE_R}, {"linkout",tLINKOUT}, {"switchvoicing",tSWITCHVOICING}, {"vowelin",tVOWELIN}, @@ -263,6 +265,7 @@ static keywtab_t keywords[] = { {"palatal", 0x2000000+phPALATAL}, {"long", 0x2000000+phLONG}, {"brkafter", 0x2000000+phBRKAFTER}, + {"rhotic", 0x2000000+phRHOTIC}, {"nonsyllabic",0x2000000+phNONSYLLABIC}, {"lengthenstop",0x2000000+phLENGTHENSTOP}, @@ -1465,6 +1468,7 @@ int Compile::CPhoneme() case tBEFORENOTVOWEL: case tBEFORENOTVOWEL2: case tSWITCHVOICING: + case tBEFORE_R: ph->phflags |= flags_alternative[item - tBEFOREVOWEL]; if((phcode = NextItem(tPHONEMEMNEM)) == -1) phcode = LookupPhoneme(item_string,1); @@ -1813,7 +1817,7 @@ int LoadEnvelope2(FILE *f, const char *fname) n = sscanf(line_buf,"%f %f %d",&env_x[n_points],&env_y[n_points],&env_lin[n_points]); if(n >= 2) { - env_x[n_points] *= 1.28; // convert range 0-100 to 0-128 + env_x[n_points] *= (float)1.28; // convert range 0-100 to 0-128 n_points++; } } diff --git a/src/compiledict.cpp b/src/compiledict.cpp index 90383868..fca312f7 100755 --- a/src/compiledict.cpp +++ b/src/compiledict.cpp @@ -1271,7 +1271,16 @@ static void output_rule_group(FILE *f_out, int n_rules, char **rules, char *name static int compile_lettergroup(char *input, FILE *f_out) {//===================================================== char *p; + char *p_start; int group; + int ix; + int n_items; + int length; + int max_length = 0; + + #define N_LETTERGP_ITEMS 200 + char *items[N_LETTERGP_ITEMS]; + char item_length[N_LETTERGP_ITEMS]; p = input; if(!isdigit(p[0]) || !isdigit(p[1])) @@ -1296,18 +1305,38 @@ static int compile_lettergroup(char *input, FILE *f_out) fputc(group + 'A', f_out); letterGroupsDefined[group] = 1; - for(;;) + n_items = 0; + while(n_items < N_LETTERGP_ITEMS) { while(isspace2(*p)) p++; if(*p == 0) break; - + + items[n_items] = p_start = p; while((*p & 0xff) > ' ') { - fputc(*p++, f_out); + p++; } - fputc(0,f_out); + *p++ = 0; + length = p - p_start; + if(length > max_length) + max_length = length; + item_length[n_items++] = length; } + + // write out the items, longest first + while(max_length > 1) + { + for(ix=0; ix < n_items; ix++) + { + if(item_length[ix] == max_length) + { + fwrite(items[ix],1,max_length,f_out); + } + } + max_length--; + } + fputc(RULE_GROUP_END,f_out); return(0); diff --git a/src/numbers.cpp b/src/numbers.cpp index 32963a12..48366061 100644 --- a/src/numbers.cpp +++ b/src/numbers.cpp @@ -829,7 +829,10 @@ static const char *M_Variant(int value) {//==================================== // returns M, or perhaps MA for some cases - if(((value % 100)>20) || ((value % 100)<10)) // but not teens, 10 to 19 + if((translator->langopts.numbers2 & 0x100) && (value >= 2) && (value <= 4)) + return("0MA"); // Czech, Slovak + else + if(((value % 100) < 10) || ((value % 100) > 20)) // but not teens, 10 to 19 { if ((translator->langopts.numbers2 & 0x40) && ((value % 10)>=2) && diff --git a/src/phoneme.h b/src/phoneme.h index 8021e953..596f457e 100755 --- a/src/phoneme.h +++ b/src/phoneme.h @@ -55,10 +55,12 @@ #define phBEFORENOTVOWEL 0x0c00 #define phBEFORENOTVOWEL2 0x1000 #define phSWITCHVOICING 0x0800 +#define phBEFORE_R 0x1400 #define phNONSYLLABIC 0x100000 // don't count this vowel as a syllable when finding the stress position #define phLONG 0x200000 #define phLENGTHENSTOP 0x400000 // make the pre-pause slightly longer +#define phRHOTIC 0x800000 // fixed phoneme code numbers, these can be used from the program code #define phonCONTROL 1 diff --git a/src/phonemelist.cpp b/src/phonemelist.cpp index 0c0fb902..7f1c65e8 100755 --- a/src/phonemelist.cpp +++ b/src/phonemelist.cpp @@ -427,6 +427,13 @@ void MakePhonemeList(Translator *tr, int post_pause, int start_sentence) if(next->type == phVOWEL) alternative = ph->alternative_ph; break; + + case phBEFORE_R: + if(next->phflags & phRHOTIC) + { + alternative = ph->alternative_ph; + } + break; } } if(ph->phflags & phBEFOREPAUSE) diff --git a/src/readclause.cpp b/src/readclause.cpp index 4e836cb7..3eca8de5 100644 --- a/src/readclause.cpp +++ b/src/readclause.cpp @@ -1750,7 +1750,7 @@ static int ProcessSsmlTag(wchar_t *xml_buf, char *outbuf, int &outix, int n_outb } if((attr2 = GetSsmlAttribute(px,"time")) != NULL) { - value = (attrnumber(attr2,0,1) * 25) / speed_factor1; // compensate for speaking speed to keep constant pause length + value = (attrnumber(attr2,0,1) * 25) / speed.speed_factor1; // compensate for speaking speed to keep constant pause length if(terminator == 0) terminator = CLAUSE_NONE; diff --git a/src/setlengths.cpp b/src/setlengths.cpp index 06784505..fb284747 100755 --- a/src/setlengths.cpp +++ b/src/setlengths.cpp @@ -136,24 +136,37 @@ void SetSpeed(int control) { // these are used in synthesis file s1 = (x * voice->speedf1)/256; - speed_factor1 = (256 * s1)/115; // full speed adjustment, used for pause length -if(speed_factor1 < 15) - speed_factor1 = 15; + speed.speed_factor1 = (256 * s1)/115; // full speed adjustment, used for pause length +if(speed.speed_factor1 < 15) + speed.speed_factor1 = 15; if(wpm >= 170) // speed_factor2 = 100 + (166*s1)/128; // reduced speed adjustment, used for playing recorded sounds - speed_factor2 = 110 + (150*s1)/128; // reduced speed adjustment, used for playing recorded sounds + speed.speed_factor2 = 110 + (150*s1)/128; // reduced speed adjustment, used for playing recorded sounds else - speed_factor2 = 128 + (128*s1)/130; // = 215 at 170 wpm + speed.speed_factor2 = 128 + (128*s1)/130; // = 215 at 170 wpm if(wpm2 > 369) { if(wpm2 > 390) wpm2 = 390; - speed_factor2 = faster[wpm2 - 370]; + speed.speed_factor2 = faster[wpm2 - 370]; } } - speed_min_sample_len = 450; + speed.min_sample_len = 450; + speed.speed_factor3 = 110; // controls the effect of FRFLAG_LEN_MOD reduce length change + + if(wpm2 >= 370) + { + // TESTING + // use experimental fast settings if they have been specified in the Voice + if(speed.fast_settings[0] > 0) + speed.speed_factor1 = speed.fast_settings[0]; + if(speed.fast_settings[1] > 0) + speed.speed_factor2 = speed.fast_settings[1]; + if(speed.fast_settings[2] > 0) + speed.speed_factor3 = speed.fast_settings[2]; + } } // end of SetSpeed @@ -528,8 +541,7 @@ void CalcLengths(Translator *tr) length_mod *= speed3; length_mod = length_mod / 128; -// if(length_mod < 9) -// length_mod = 9; // restrict how much lengths can be reduced + if(length_mod < 8) length_mod = 8; // restrict how much lengths can be reduced diff --git a/src/synth_mbrola.cpp b/src/synth_mbrola.cpp index 301c5d5a..1055f549 100755 --- a/src/synth_mbrola.cpp +++ b/src/synth_mbrola.cpp @@ -597,13 +597,13 @@ void MbrolaTranslate(PHONEME_LIST *plist, int n_phonemes, FILE *f_mbrola) { // a pause phoneme, which has not been changed by the translation name = '_'; - len = (p->length * speed_factor1)/256; + len = (p->length * speed.speed_factor1)/256; // if(len == 0) continue; if(len == 0) len = 1; } else - len = (80 * speed_factor2)/256; + len = (80 * speed.speed_factor2)/256; #ifdef USE_MBROLA_LIB MbrolaMarker(espeakEVENT_PHONEME, (p->sourceix & 0x7ff) + clause_start_char, 0, ph->mnemonic); @@ -664,7 +664,7 @@ void MbrolaTranslate(PHONEME_LIST *plist, int n_phonemes, FILE *f_mbrola) break; case phVSTOP: - len = (80 * speed_factor2)/256; + len = (80 * speed.speed_factor2)/256; break; case phFRICATIVE: diff --git a/src/synthdata.cpp b/src/synthdata.cpp index 88b0b120..7904527c 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.42 17.Dec.08"; +const char *version_string = "1.39.48 19.Dec.08"; const int version_phdata = 0x013900; int option_device_number = -1; diff --git a/src/synthesize.cpp b/src/synthesize.cpp index ba63c59a..42d4f0b5 100755 --- a/src/synthesize.cpp +++ b/src/synthesize.cpp @@ -45,9 +45,7 @@ PHONEME_LIST phoneme_list[N_PHONEME_LIST]; int mbrola_delay; char mbrola_name[20]; -int speed_factor1; -int speed_factor2; -int speed_min_sample_len; +SPEED_FACTORS speed; static int last_pitch_cmd; static int last_amp_cmd; @@ -192,9 +190,9 @@ int PauseLength(int pause, int control) int len; if(control == 0) - len = (pause * speed_factor1)/256; + len = (pause * speed.speed_factor1)/256; else - len = (pause * speed_factor2)/256; + len = (pause * speed.speed_factor2)/256; if(len < 5) len = 5; // mS, limit the amount to which pauses can be shortened return(len); @@ -253,8 +251,8 @@ static int DoSample2(int index, int which, int length_mod, int amp) length = length1; - length = (length * speed_factor2)/256; - min_length = speed_min_sample_len; + length = (length * speed.speed_factor2)/256; + min_length = speed.min_sample_len; if(format==0) min_length *= 2; @@ -982,7 +980,7 @@ if(which==1) length_factor = length_mod; if(frame1->frflags & FRFLAG_LEN_MOD) // reduce effect of length mod { - length_factor = (length_mod*4 + 256*3)/7; + length_factor = (length_mod*(256-speed.speed_factor3) + 256*speed.speed_factor3)/256; } len = (frame_length * samplerate)/1000; len = (len * length_factor)/256; diff --git a/src/synthesize.h b/src/synthesize.h index f50a208e..50710f88 100755 --- a/src/synthesize.h +++ b/src/synthesize.h @@ -213,6 +213,14 @@ typedef struct { int control; } MBROLA_TAB; +typedef struct { + int speed_factor1; + int speed_factor2; + int speed_factor3; + int min_sample_len; + int fast_settings[8]; +} SPEED_FACTORS; + // phoneme table extern PHONEME_TAB *phoneme_tab[N_PHONEME_TAB]; @@ -304,9 +312,7 @@ int CompileDictionary(const char *dsource, const char *dict_name, FILE *log, cha extern unsigned char *envelope_data[18]; extern int formant_rate[]; // max rate of change of each formant -extern int speed_factor1; -extern int speed_factor2; -extern int speed_min_sample_len; +extern SPEED_FACTORS speed; extern long count_samples; extern int outbuf_size; diff --git a/src/tr_languages.cpp b/src/tr_languages.cpp index f42321d0..3f6c2ceb 100644 --- a/src/tr_languages.cpp +++ b/src/tr_languages.cpp @@ -282,7 +282,7 @@ Translator *SelectTranslator(const char *name) SetLetterBitsRange(tr,LETTERGP_F,0x3e,0x4c); // vowel signs, but not virama tr->langopts.numbers = 0x1; - tr->langopts.numbers2 = 0x100; + tr->langopts.numbers2 = NUM2_100000; } break; @@ -849,13 +849,13 @@ SetLengthMods(tr,3); // all equal tr->langopts.param[LOPT_COMBINE_WORDS] = 4; // combine some prepositions with the following word tr->langopts.numbers = 0x0401 + 0x4000 + NUM_ROMAN; - tr->langopts.numbers2 = 0x40; + tr->langopts.numbers2 = 0x100; tr->langopts.thousands_sep = 0; //no thousands separator tr->langopts.decimal_sep = ','; if(name2 == L('c','s')) { - tr->langopts.numbers2 = 0x48; // variant numbers before milliards + tr->langopts.numbers2 = 0x108; // variant numbers before milliards } SetLetterVowel(tr,'y'); diff --git a/src/translate.h b/src/translate.h index acfa1255..afa59ca3 100755 --- a/src/translate.h +++ b/src/translate.h @@ -349,14 +349,15 @@ typedef struct { // bit21= say "roman" after the number, not before int numbers; -#define NUM2_100000 0x100 // numbers for 100,000 and 10,000,000 -#define NUM2_100000a 0x500 // numbers for 100,000 and 1,000,000 +#define NUM2_100000 0x800 // numbers for 100,000 and 10,000,000 +#define NUM2_100000a 0xc00 // numbers for 100,000 and 1,000,000 // bits 1-4 use variant form of numbers before thousands,millions,etc. // bit6=(LANG=pl) two forms of plural, M or MA // bit7=(LANG-ru) use MB for 1 thousand, million, etc - // bit8=(LANG=hi) special word for 100,000 and 10,000,000 + // bit8=(LANG=cs,sk) two forms of plural, M or MA // bit9=(LANG=rw) say "thousand" and "million" before its number, not after // bit10=(LANG=sw) special word for 100,000 and 1,000,000 + // bit11=(LANG=hi) special word for 100,000 and 10,000,000 int numbers2; int max_roman; diff --git a/src/voices.cpp b/src/voices.cpp index 5411a039..3e16347e 100755 --- a/src/voices.cpp +++ b/src/voices.cpp @@ -69,44 +69,46 @@ static int len_path_voices; espeak_VOICE voice_selected; - -#define V_NAME 1 -#define V_LANGUAGE 2 -#define V_GENDER 3 -#define V_TRANSLATOR 4 -#define V_PHONEMES 5 -#define V_DICTIONARY 6 +enum { + V_NAME = 1, + V_LANGUAGE, + V_GENDER, + V_TRANSLATOR, + V_PHONEMES, + V_DICTIONARY, // these affect voice quality, are independent of language -#define V_FORMANT 7 -#define V_PITCH 8 -#define V_ECHO 9 -#define V_FLUTTER 10 -#define V_ROUGHNESS 11 -#define V_CLARITY 12 -#define V_TONE 13 -#define V_VOICING 14 -#define V_BREATH 15 -#define V_BREATHW 16 + V_FORMANT, + V_PITCH, + V_ECHO, + V_FLUTTER, + V_ROUGHNESS, + V_CLARITY, + V_TONE, + V_VOICING, + V_BREATH, + V_BREATHW, // these override defaults set by the translator -#define V_WORDGAP 17 -#define V_INTONATION 18 -#define V_STRESSLENGTH 19 -#define V_STRESSAMP 20 -#define V_STRESSADD 21 -#define V_DICTRULES 22 -#define V_STRESSRULE 23 -#define V_CHARSET 24 -#define V_NUMBERS 25 -#define V_OPTION 26 + V_WORDGAP, + V_INTONATION, + V_STRESSLENGTH, + V_STRESSAMP, + V_STRESSADD, + V_DICTRULES, + V_STRESSRULE, + V_CHARSET, + V_NUMBERS, + V_OPTION, -#define V_MBROLA 27 -#define V_KLATT 28 + V_MBROLA, + V_KLATT, + V_FAST, // these need a phoneme table to have been specified -#define V_REPLACE 29 -#define V_CONSONANTS 30 + V_REPLACE, + V_CONSONANTS +}; @@ -147,6 +149,7 @@ static keywtab_t keyword_tab[] = { {"mbrola", V_MBROLA}, {"consonants", V_CONSONANTS}, {"klatt", V_KLATT}, + {"fast_test", V_FAST}, // these just set a value in langopts.param[] {"l_dieresis", 0x100+LOPT_DIERESES}, @@ -385,6 +388,7 @@ void VoiceReset(int tone_only) voice->consonant_amp = 100; voice->consonant_ampv = 100; memset(voice->klatt,0,sizeof(voice->klatt)); + memset(speed.fast_settings,0,sizeof(speed.fast_settings)); #ifdef PLATFORM_RISCOS voice->roughness = 1; @@ -880,6 +884,11 @@ voice_t *LoadVoice(const char *vname, int control) voice->klatt[KLATT_Kopen] -= 40; break; + case V_FAST: + Read8Numbers(p,speed.fast_settings); + SetSpeed(2); + break; + default: if((key & 0xff00) == 0x100) {