From e40539b00b8d7e47649e7e285d32c9e7577bfa4b Mon Sep 17 00:00:00 2001 From: jonsd Date: Tue, 22 May 2007 01:47:55 +0000 Subject: [PATCH] [1.25.3] espeak_SetVoiceByName() didn't set current_voice correctly when voice is specified by filename. Added ResetLetterBits() to clear data before using SetLetterBits(). git-svn-id: https://espeak.svn.sourceforge.net/svnroot/espeak/trunk@19 d46cf337-b52f-0410-862d-fd96e6ae7743 --- dictsource/dict_phonemes | 13 +++++++++++++ dictsource/el_rules | 4 +++- phsource/compile_report | 16 +++++++++------- phsource/n/n#_ | Bin 952 -> 1263 bytes phsource/n^/n^#_ | Bin 0 -> 10628 bytes phsource/nn/nn#_ | Bin 1073 -> 1424 bytes phsource/ph_hungarian | 2 +- src/dictionary.cpp | 15 +++++++++++++++ src/extras.cpp | 6 +++++- src/synthdata.cpp | 2 +- src/synthesize.cpp | 2 +- src/tr_languages.cpp | 16 ++++++++++------ src/translate.h | 1 + src/voices.cpp | 2 +- 14 files changed, 60 insertions(+), 19 deletions(-) create mode 100644 phsource/n^/n^#_ diff --git a/dictsource/dict_phonemes b/dictsource/dict_phonemes index b22f7993..e9d82f59 100644 --- a/dictsource/dict_phonemes +++ b/dictsource/dict_phonemes @@ -307,3 +307,16 @@ oi ong ou u ui yu b c d f g h j k l m n N p r s t tS v w z + + +Dictionary is_dict + +& @- a aI aU e E eI +i I o O oU u W y +Yy + +* : ; b c C d D +f g h j J k l L +l# m m# n N n# N# n^ +n^# p Q r r# s S t +T tl# v x z diff --git a/dictsource/el_rules b/dictsource/el_rules index 575d0e9d..22cfc35f 100644 --- a/dictsource/el_rules +++ b/dictsource/el_rules @@ -6,7 +6,8 @@ // Α α, Β β, Γ γ, Δ δ, Ε ε, Ζ ζ, Η η, Θ θ, Ι ι, Κ κ, Λ λ, Μ μ, Ν ν, Ξ ξ, // Ο ο, Π π, Ρ ρ, Σ σ ς (word-final form), Τ τ, Υ υ, Φ φ, Χ χ, Ψ ψ, Ω ω. -// Y: ε η ι υ (+tonos variants, front vowels). +// Letter group B: θ κ ξ π ς σ τ φ χ (voiceless consonants) +// Letter group Y: ε η ι υ έ ή ί ύ (front vowels). .group α @@ -43,6 +44,7 @@ δ D δ (δ + .group ε ε e ει i diff --git a/phsource/compile_report b/phsource/compile_report index 682ee354..57df62e6 100644 --- a/phsource/compile_report +++ b/phsource/compile_report @@ -30,7 +30,7 @@ el 8 112 sv 25 114 no 29 118 - is 27 113 + is 32 117 vi 41 129 zh_yue 32 120 sw 14 101 @@ -143,6 +143,7 @@ 1 n^/_n^ base 1 n^/n^_ base 1 n^/n^@ base + 1 n^/n^#_ is 6 n/_n base ro 3 n/n_ base ro 1 n/n@ base @@ -233,13 +234,14 @@ 1 ufric/sx_sv sv 1 ufric/th base 1 ufric/th_ base + 1 ufric/tl# is 2 ufric/x base vi 4 ufric/x2 af nl pt 1 ufric/x_hr hr 1 ustop/c base 5 ustop/k base en fr hi sw 9 ustop/k_ base en fi fr hi hu it el sw - 11 ustop/ki base en af fi fr hi hu it sw + 12 ustop/ki base en af fi fr hi hu it is sw 10 ustop/kl base en fi fr hi hu it el sw 11 ustop/kr base en fi fr hi hu it el sw 9 ustop/k_unasp base fi hi hu it el @@ -339,7 +341,7 @@ 2 vdiph/ooi_3 en_wm hr 2 vdiph/ou fi zh_yue 2 vdiph/ou_2 sk ro - 1 vdiph/ou_3 is + 2 vdiph/ou_3 is 1 vdiph/@u en_wm 1 vdiph/@u_2 en_rp 1 vdiph/@u_3 ro @@ -386,8 +388,8 @@ 2 voc/Q base 4 voc/Q_ base nl pt 2 voc/Q_less nl pt - 5 voc/v base fi hi nl ro - 6 voc/v_ base fi hi nl ro + 6 voc/v base fi hi nl ro is + 7 voc/v_ base fi hi nl ro is 4 vocw/dh base es 2 vocw/Q base 3 vocw/Q_ base nl @@ -606,8 +608,8 @@ 20 x/b base hi ro is 2 x/b_ base is 9 x/d base hi hr el is - 15 x/d_ base fi fr hi hu pl hr ru it ro el is ++ - 22 x/d_dnt base fi fr hi hu pl ru it ro sw + 14 x/d_ base fi fr hi pl hr ru it ro el is sw + 23 x/d_dnt base fi fr hi hu pl ru it ro sw 6 x/d_pzd pl ru 3 x/dzh base hi 5 x/dzh_ base hi ru diff --git a/phsource/n/n#_ b/phsource/n/n#_ index e4813be62584a1e273009eb15a607c8ca5fb67f4..c9e57aa624ad6f80ba6a6c3cb4deef366eeab98f 100644 GIT binary patch delta 102 zcmdnN{+?4HIKb68B-k~OnSp^JPdT1tBEJk1OV37KQ%3Ob hT*)ZQDCxkm03wDW&A{Ncc|8*+Pc>{Wt3u^e3n^)F=g`x HCQe2Ga{&%4 diff --git a/phsource/n^/n^#_ b/phsource/n^/n^#_ new file mode 100644 index 0000000000000000000000000000000000000000..23895f28e9345f800da0671f277d631b93c90b23 GIT binary patch literal 10628 zcmb7q1$Y!^yY|k!HnTgkvo6_0d{{oB%rMQ&brBTo}4Ex8)0J%lWBvzK{lBZm37WfW0NT&_|G^;#E0>9_YUuaz>g79 zw%Iw#$DNC>p73jYT-@^<8L^qsKSnkVmqOcxEb%^cwRGgSb+ra`RdZPUW``;(FSx-w zuviwsajd43^;@y;@Ax^LwxBWeCOJs%k&<*ht-$WEsl1kmP%@Q6>O6Bhi&vYW zJ=4Nd#6^<*7I#Zi(W`US+Ua&zxo{q~+2L>qYB$Bh=Q< zw$irUw$?Vs_6?S$wnw&__T%g9gquIL%!ndlkhDermg9^lS&)pIR% zW;&7_P3=={myPnqY3pcfWvkbEN*|}E=y$d0S{2RE&RJGjMp`Obo|y-lZ>xFLCQ45+ zh!0^S=}dA;PL~VF1Ldc3OR|eNX=OZ@p|lsRL*po;FNjLB(;~DG4bYe50Ws48v_9=Z zhtR2X6Maatvl^@=tIv|zGrEFyrg^c)2GXCDBxW4>XSu&zUZ(OqDOKt%J(9}E8FEMY zGx?tMSZX1kl5>)DQil{GPvvjrJaW7|R(>s4BV))fIK~FD7N0$MFE?=BTjV%dN_vrG za!&3m$H*o*LarhAktfMZz=_Uz2sHhbknV__5?6P00fCl2oG8=%3We z5?L`;ge5Q^W9%KZp|*OkHS8g?aR-0S_MmE7qiX824E8mf!KSf(ER8+FvwBB5lLztw z`4{=P{6cn+Y$QJ^gRAOGX5t=?kP~D-?sguTNQRK+IO`pGvRqjHL+UFHlP*ie&gmK1I5HzOLL`g?Wn1*#l$X37p0>*lNReaXx4bIy*!^~ znBI@yA3iW#&RU-}?iuz8!--0c=nvz!uFIaN!2R%gF^{tM$#p%hWc=E=Nx6#WlyY2; zU63s^dVb{ouz7)jzIpBxXD$05#$;=6y_J@3DPc}jqm^u;FmKA{&{w1_c_puqC(2Xh zRq|O`C51^FG8NVFm^f$z_0Y#;IjKp`%EjgOQmk}OYA^4RbyQ(X(g*LeD`|i|9OSY5 zK=zRqWE+V@h3~-|t;D`!`#{Y&`q(rfZ>Vq${6mmDA~L;n--8x39CcvE{Yt zwkyUQqo^_4dJKJJk7ccSyZTJ2t{f8e#WmiT??Khpqyx!nxuHBl-iZ6kgZtb~UJ(~{ zqTX%+3Hj(O8qQ`hH~*3^;_LZ*-i62VT`ZlQ0J?9X_WI(*k@1^Fv^F)%cj$nq);v&rI`vs|nv_+~UFP9&pe!WB?H*vi~ekGYsKoaLQG-D=o~tTeu;bQNe7@$w4-U%peKRdQ>dgK*!LZc0N)twPdb4XqxXR3 z<*3dZcpq=T6i4yfI9zu+DN17S93RL>riIp2e; z1ljZc=l_r456t}u!$B!33&WNy4BuBao3?z!@H@*(Q&9VW;ZwT#ZwxQ63HE=%aC!gb zki}s+qFZIZk*iU{g2ZKsLlPRqt;&%YTQFu})L#)N!*T@^{dqjSoQd`?j2EcaQQ_yWsLKkp6u?#vBHFTJsr?=?~s)MmB zvM%7^U(r<$vVCj^+k(*rCU{Zahi~CRR1#yw9`QniDutA?N+qS7lA;t=(v%*`8Kr|7 zX})S+WNE26^m)3+`i1pNYenl_y_P;n+h93mexYVpJ1VC{Cs9-s6V1d-aZ{95wkxgF zWV6>owOiT-y|*>i*kv@dJ+Te7YmQNl=Z>1r`Odq}1XnxPPp%6tySt#fk~`g9!JXgj zcHehxcTIFPcO|&)I%hbGJNG*(IJVf6?Tc)=Y`+?*#$js>>t4NxzD&!j?YH!@BwKEy zgA_3DR;#L~lorZMF-4>bli0_9;GKAGev-9d7icYd5nXOHnBh24XhASE66cmwlLODg|e9ooD@J^HX+C4Xkek396>IUe)K6#W1U!cFjEBEf!duD zHFU}AatgY@EV2l=t4c1(MdiX$AE_I<$zf8HZl__aEt|u(VVQ^bk(b?vdTNS(yOVT6 zFW4>*kiU@I%HPZ9UljUR;jUC0)R0qo4x2VH{8H%geCXfOMU9peyMm z`j(oR4)(o|UOXNMe}N8Emt;q`$$=w`Cx4JI+KT={AJAO5_95tHtJr2#!Wvx7Xy}g5 zz{A_ot!|UtBtlM++mq7t9Q_QqZHFq0W)Gp;rr=!p=~dF5T$PjLO;UCFk=&YWCND?` z%?XW@izcEH>*L8yLH}AnC(^F8EDfO#q48FtPYeZzlproVv2F5P=#&vq9WCVwa$Y%B z4wZHJzO+-CA&rzKOZ%jhm)9Y# zicw8Gi-#SWCbj;^!;kb1e`EMZYeVv%F>Eq@;^97?G+&dTH?mhYTh5trYC_e73Gun& ze$3e;$Kvd}VoPOv6!kcKaxlMN_Y`ujw@tS0)bd((scjXnxWL{(>Aj#Op=yRg@6-f( zpFj&Qqd(zkEkezW2YM^xIU1BwGYzLjX#=q9SUk^3^efsQda@h7$Kc71NAIi$jpzWQ zUn6@_zk^6Cbm0x85OnrPR+?+#j99D;QR|zNfy3XmzPjDo-@4Aa(K^T~TT}ERnrvCB z_EYwYn|GQ0mhP4_mcrWC+96HW8?1Z&+&(?qoG(YYelti zt-iKF3*v|+^pjes7HhGYUjeaBQIdCOGwD*YPu?oGLa%QN79^}FYtOzz=Q_atWarrL z(18`%d3cTSWU8D;3X?C%S-PYpsZC0eTttWZeIN_)KwI)Hurm?JDnK%!bB2MH_XAhm zfvU53UMGRASwP4>AU+w#tB5D5(sN`r_G=8ax*IyNr#uE|{8nx+7nGyq+VZ0JiYJUn zWTRYJULvJSvOHdXCKo0Rah@LF!f~kasbI=9@_^tFgj&V;eMMjWS;IW-R z!el6^X3zqKNhoyGYPq#6$r(~xQ#0wc)B&zfgDR~DHPIZpwh>r*2(EP_nC~2x<4|0S zafFdT(>FNQ6H=R=p`Dq^zvXXuQBhgs6_5DW+{s6?x8PHm&IT*m$q9KDx=UU;Q(7QZ zlH5|Vlp+PC>e2&gm`uU%tH^co7SH`Mw8$9J8s{F4b3P^>8cqH5C9ZrFsR+gmKyfGH zS-YT^cf*w|#``*sWj)YbNIoeImxf3`NxuPa{iKvvQx~Rx#PEsTzq}u9zH{^6U^vE< z18Wl%aI~7`hqFlm(>Iby$@0Tzlz#6qJP^(*O$(FOSWG;EM38%WV_?`sv&O58YcvbP zAN;V%)Y)s2K8@#wo1j^;e6q=u5xwR8`kB7EAx*+u(Sx%m$6ZYrkR;_Eo|K+=GQMYA zwOsz3?XtVG<%u$fKMr{P8J@?^;r1d%PQ8;Q(cDAL1HMbd5~jXWjw!R0wn~15C?~`c zF+wyKrA2NLBceo3kzaf+%7a|BP|;)D1NK0)+WhN{!e%Ps4)pYF>+9d@^YtluPrb3;PG73$vEHz5G-ld*+KV|ZI%+t-aenU{ z?d*fk9%p{n7FTWeO?Pw8R?kZh_ulf%^%VDPa>u*Jx^6i0J9{{m+ArAxwob+q>l*7e zD>3RBvyJV>Dx;4PZLGDXfsf1Rt2LKa&oa_HQ=O~K7W4TI=4I>Q>m~5sF&4us^U|F0 zkx+nd;V@f35$8tNE5wel#{2}27mY=RXeCMst2n@i@VxvS8w?$I5Dv2zEk#Sy>a;QK zNc+&?^lN8;=p^*ZTKJoVo`Eh+CJSU2Jo#CYjZn(#h5 z;hrX=AFP7=FpUaJr6l8-IUQJKZBgj%dhcZtkm4U|ZX(~Ixs_|9)9nUSwi7KKjG**&`z!Q4H z_wy;dCg*%PYXGf$n0^o4QVdUaAt_Ea;heuq52Xh34mlfee3cZTgW<}L!Fitq->joc z>Cade;d#x3dK`$SSsltJf(q!%qhvk#naqJwT8?g&@@n&sv$CLLD#1?gKk$C^&)2`p zw18n#9o%zH$!p39H~SPW;+itpbWJgtV!`xJEfuAwmJj0{dJky_GOeubCmIvU#J@AG zcklYTKY8GP^~3-0@ECumz~S&`F@NRknrKa)l$L#4wfr2Hm3 z3AMc&Dr*>6emMP$yrif2L1ndhlvc>P)_85ZXCLHP<{03R9Ce^=Lu{LknZ{z{fN|S+ zW<0|8Yomy5m93dQzr*dk?_B1p>fYn_d&+v6db)UqdFFTyd8oITH^V#AyTNA?%NGVB}YG;w~XVQJ>9yB zb5~q*IaZ2QU=3L>Xq4?NlO>`m=JR9x7Qezb@xi81STK^M-v>5gZv~2`3=kd0Kww(5{_Dp+I$7RQGXFXSA_gK#{Z@^zYq;;TrP!0V$ z^kS$QriVQV-4fa}G%9pQuvO30>U#zJ?tZB0Z=i19f%V47BjsjD z%e%;D~|R+E)gmr3XWzQ$&Lgt zlh$O5*>jeUr@S8ebk}>(mSERkUHS*UAJ+Z1xutjSK4CajGEAu-Fp^~w(KzvHrFs0GZ!~kH}^0vFkdo}v)-WVHf{p<;josKfj4bHr-wXT|O)pOYMgSWje-hbR*FJwi?fsh|UVnaIl zzw>SO`n@|myFHrsOYbpns4vY|4NHCBaNkv5Z+}WiRKN({4gMJF2`doxEVNE&n_!8+ zTmJ^%H1AKI>+r|>TyDm>` z3d>^4I?Hy;YUJb2{}N+=h_7*SQ^5y_&W=q7$d zws&1TL%w$hGiJYt;i91^ggSr8&jaJX@ToxeK;D=4gVz|!he3Py=e^)Y2JmnA&-?&? z$PJMVP9+g~NQ1ZhgRg~K83oPLgjeGE!NafFS+)*H9Sm%@!qNfR#vmYl9G20@ntGxK zG{bCQb<7cz1Cy2kzRLsUS)5rAGlNbhV|LJl9R723k*QD#>)BFt-uCDyKK2;8bt71C zCAfVLJpe{r40Tb3h9dKPLMYOb21ts32M)dP3sFpEXONeq(rZ9d1oDJ&(BR|beaP$A4-l(|##sok7 zerz)ON$|rT#-=326!6my5TN&v^r97P=wj#u_g z_SW_{wm~-8Hrfa`c3OK|KeN8oH|jm~1pSgWO>3YfXjbj5CDZc2a?5hTa@4ZJvc|F! zmA%_?*}}El+85dwZ4+jG3+hAl%X&5IVQVAft+5#MK&2e<&TOt2cc|yBXN5PLue49` zwe+_0#JRUS>p2qalWpg1$Lud1x1Bv*GhCfqF4q?49Op4-Vb{+t;x6Q_=kDj8?Ox^{ zYucwoHj_af|#5vdzbX>9TurIccv$wGqvcI*hvwdmHZaZ&GGO8HV zSYfScy`^{3Zz26UXenz=%0Oj|G8KAf zrLs}kq3l$)K<6w_reMo{_-lspCAMm#G=lOe4m}^DSQJ_LOS}_QQ5CCVR~%TJid*q3 z;YzHMONm!WUsfm4ej{qP9| z{pAin114Pr#%{~Y^F$ti#`i+G7v~MoZD#Ow{4l@BZ}QvtT;b>VNqz*5U^~_?<3FLt zOy%F92aVyw(VaT*y3io;=r#tFv;)VA;W>CV?uV+s$NoU7zJ{&E+{S74gc>(Y1VI3({9nA8MR}PwfWLen0 zD9tk`O30|+W3`|zNgK2eTEh8zt@)awnS;mgFpzJw97ZbZlht z@Lr)80=+^i`y2V@dtKfso@mb!cV72uSBmSfv%S;h+~w%+DCBr-Uu17$_u3EJzOq%Y z*=(nbxkiRj+6XiLvfc#OUbNn~awEnlYji~AZ!zv0QMTq_-e~(0dtFBkXTX)cOvB+p>_>JS%udO984>k!&_G4{{ z)>SKs{OgA0H_ISPS&LygV_s|?Y3^)pW^RO~nYop@y}66I7ZlA{^EC5(^K$cA^Ct5) z^L8xT%$v>Y%qz@4nWy8ggU}sXo9mg&VNNUD%%I~QUe)4Go=;!M_Y88wiq>4 z>M9kL&y;M)Pab2wVY^rkM13blir(l3bukZ@0Hq;|htS)n`ElU=0N=y6@-=e_W>Qj-}yuf)k;h59VNk&5741(54dA)jexlb5QbiE(_ z^YuSvT4N-;Y0O70-CDV5Y7HLF%Cvf!pPG8%KZ|6IlXZ)f{83B0j6Rapy&5Jgc^GpnW>}0XW_0wmsEDYyx0cJ{cIycX)$DXRZ*dLxDQEv)%QH{Ju2>iI4drQ z(_*h!Bj%&Rrl1m+f)W1^SHU3<#RDMarnmu}{ZzteT< z3+Gy26hJol6wG;$@5Zu^ALVEHb^e4)!azP33$Dv1JUB;IrqP~9Ad|1l?qEK#6+RDW z3+VPTd>((wlYy;XVhGUR9`~DoIf?UpH6M?C(!j9S;M|+S+3$zyZG@z_Ih^T!YKKFg z2EKJ-n@(WqX}FJpNDiX;U1;FB@W`uie8CIzj(iRh{&zeCb0YzCgLB~H?pUA67U6mr u+lu-2>$C}b%YNX6(QooW5$%HxdWe)}4mym4`GnGN9*dB-mI1eiWBD&y1H?xF literal 0 HcmV?d00001 diff --git a/phsource/nn/nn#_ b/phsource/nn/nn#_ index 86bde9b0d7f0ff674cf7b068584030d8eb0105c5..cdcfd5af637e23ff050896858cc6fb26b90de442 100644 GIT binary patch delta 57 zcmdnUF@ak!IKb68B-k~Og@J(~FHbq1WurhfBjbsQdXk%$GCDC%)D~lAV6fT5Y{)qI LGLsIY5r_o delta 46 zcmbQhy^%v8IKb68B-k~OnSp^JFE5^XqhK{7 C6$|zN diff --git a/phsource/ph_hungarian b/phsource/ph_hungarian index 7be3f573..ff13f2bc 100644 --- a/phsource/ph_hungarian +++ b/phsource/ph_hungarian @@ -135,7 +135,7 @@ phoneme d // dental variant of /d/ vowelin f1=2 f2=1500 -300 300 f3=-150 80 vowelout f1=2 f2=1500 -300 300 f3=-150 80 formants d/d+x/d_dnt%110 - before _ d/d_+x/d_ + before _ d/d_+x/d_dnt%80 before r d/dr+x/d_dnt%110 after _ NULL after @ d/xd diff --git a/src/dictionary.cpp b/src/dictionary.cpp index e0491be4..7dab1cea 100755 --- a/src/dictionary.cpp +++ b/src/dictionary.cpp @@ -629,6 +629,21 @@ void SetLetterVowel(Translator *tr, int c) tr->letter_bits[c] = 0x81; // group 0 only } +void ResetLetterBits(Translator *tr, int groups) +{//============================================= +// Clear all the specified groups + unsigned int ix; + unsigned int mask; + + mask = ~groups; + + for(ix=0; ixletter_bits); ix++) + { + tr->letter_bits[ix] &= mask; + } +} + + void SetLetterBits(Translator *tr, int group, const char *string) {//============================================================== int bits; diff --git a/src/extras.cpp b/src/extras.cpp index d4fb247e..33c1d9e2 100644 --- a/src/extras.cpp +++ b/src/extras.cpp @@ -916,6 +916,7 @@ void TestTest(int control) unsigned int ix=0; char textbuf[2000]; espeak_VOICE voice; + espeak_VOICE *voice2; //FindPhonemesUsed(); //return; @@ -956,7 +957,10 @@ if(control==2) voice.gender = 0; voice.age = 0; voice.variant = 0; - espeak_SetVoiceByName("en"); + ix = espeak_SetVoiceByName("pt-xx"); + + voice2 = espeak_GetCurrentVoice(); + // espeak_SetVoiceByProperties(&voice); espeak_SetParameter(espeakRANGE,0,0); espeak_Synth(textbuf,ix+1,0,POS_CHARACTER,0,espeakCHARS_8BIT+espeakSSML,NULL,NULL); diff --git a/src/synthdata.cpp b/src/synthdata.cpp index 3338d619..696e8d32 100755 --- a/src/synthdata.cpp +++ b/src/synthdata.cpp @@ -35,7 +35,7 @@ #include "translate.h" #include "wave.h" -const char *version_string = "1.25.02 21.May.07"; +const char *version_string = "1.25.03 22.May.07"; const int version_phdata = 0x012501; int option_device_number = -1; diff --git a/src/synthesize.cpp b/src/synthesize.cpp index e923c6a7..9cda3c8c 100755 --- a/src/synthesize.cpp +++ b/src/synthesize.cpp @@ -653,7 +653,7 @@ static void SmoothSpect(void) modified = 0; if(frame->frflags & FRFLAG_FORMANT_RATE) - len = (len * 13)/10; // allow slightly greater rate of change for this frame (was 12/10) + len = (len * 12)/10; // allow slightly greater rate of change for this frame (was 12/10) for(pk=0; pk<6; pk++) { diff --git a/src/tr_languages.cpp b/src/tr_languages.cpp index d1215920..4a7f53f1 100644 --- a/src/tr_languages.cpp +++ b/src/tr_languages.cpp @@ -122,8 +122,8 @@ Translator *SelectTranslator(const char *name) // character codes offset by 0x380 static const char el_vowels[] = {0x10,0x2c,0x2d,0x2e,0x2f,0x30,0x31,0x35,0x37,0x39,0x3f,0x45,0x49,0x4a,0x4b,0x4c,0x4d,0x4e,0x4f,0}; - static const char el_fvowels[] = {0x2d,0x2e,0x2f,0x35,0x37,0x39,0x45,0x4d,0}; - static const char el_voiceless[]= {0x38,0x3a,0x3f,0x40,0x42,0x43,0x44,0x46,0x47,0}; + static const char el_fvowels[] = {0x2d,0x2e,0x2f,0x35,0x37,0x39,0x45,0x4d,0}; // ε η ι υ έ ή ί ύ + static const char el_voiceless[]= {0x38,0x3a,0x3e,0x40,0x42,0x43,0x44,0x46,0x47,0}; // θ κ ξ π ς σ τ φ χ static const char el_consonants[]={0x32,0x33,0x34,0x36,0x38,0x3a,0x3b,0x3c,0x3d,0x3e,0x40,0x41,0x42,0x43,0x44,0x46,0x47,0x48,0}; static const wchar_t el_char_apostrophe[] = {0x3c3,0}; // σ @@ -259,6 +259,8 @@ Translator *SelectTranslator(const char *name) tr->letter_bits_offset = OFFSET_DEVANAGARI; tr->langopts.replace_chars = replace_chars_hi; tr->langopts.replacement_chars = replacement_chars_hi; + + memset(tr->letter_bits,0,sizeof(tr->letter_bits)); SetLetterBitsRange(tr,LETTERGP_A,0x06,0x14); // vowel letters SetLetterBitsRange(tr,LETTERGP_B,0x3e,0x4d); // vowel signs + virama SetLetterBitsRange(tr,LETTERGP_C,0x15,0x39); // the main consonant range @@ -311,7 +313,7 @@ Translator *SelectTranslator(const char *name) case L('h','u'): // Hungarian { static int stress_amps_hu[8] = {16,16, 20,20, 20,24, 24,22 }; - static int stress_lengths_hu[8] = {180,150, 200,180, 0,0, 230,270}; + static int stress_lengths_hu[8] = {180,160, 200,180, 0,0, 230,270}; static const wchar_t replace_chars_hu[] = {0xd4,0xf4,0xdb,0xfb,0}; static const unsigned int replacement_chars_hu[] = {0x150,0x151,0x170,0x171,0}; // allow o,u-circumflex for o,u-double-acute @@ -322,7 +324,7 @@ Translator *SelectTranslator(const char *name) tr->langopts.replacement_chars = replacement_chars_hu; tr->langopts.stress_rule = 0; - tr->langopts.stress_flags = 0x56; // move secondary stress from light to a following heavy syllable + tr->langopts.stress_flags = 0x16; // move secondary stress from light to a following heavy syllable tr->langopts.param[LOPT_REGRESSIVE_VOICING] = 0x1; tr->langopts.param[LOPT_IT_DOUBLING] = 1; tr->langopts.long_stop = 130; @@ -336,14 +338,15 @@ Translator *SelectTranslator(const char *name) case L('i','s'): // Icelandic { static int stress_amps_is[] = {16,16, 20,20, 20,24, 24,22 }; - static int stress_lengths_is[8] = {180,140, 200,200, 0,0, 240,260}; - static const wchar_t is_L08[] = {'c','f','h','k','p','s','t','x',0xfe,0}; // voiceless conants, including 'þ' + static int stress_lengths_is[8] = {180,160, 200,200, 0,0, 240,260}; + static const wchar_t is_L08[] = {'c','f','h','k','p','t','x',0xfe,0}; // voiceless conants, including 'þ' ?? 's' tr = new Translator(); SetupTranslator(tr,stress_lengths_is,stress_amps_is); tr->langopts.stress_rule = 1; tr->langopts.param[LOPT_IT_LENGTHEN] = 0x11; // remove lengthen indicator from unstressed vowels + ResetLetterBits(tr,0x18); SetLetterBits(tr,4,"kpst"); // Letter group F SetLetterBits(tr,3,"jvr"); // Letter group H tr->letter_groups[8] = is_L08; @@ -502,6 +505,7 @@ Translator *SelectTranslator(const char *name) SetLetterVowel(tr,'y'); SetLetterVowel(tr,'r'); + ResetLetterBits(tr,0x2); SetLetterBits(tr,5,sk_voiced); } break; diff --git a/src/translate.h b/src/translate.h index df795125..37dc06b9 100755 --- a/src/translate.h +++ b/src/translate.h @@ -504,6 +504,7 @@ int lookupwchar(const unsigned short *list,int c); int Eof(void); char *strchr_w(const char *s, int c); int IsBracket(int c); +void ResetLetterBits(Translator *tr, int groups); void SetLetterBits(Translator *tr, int group, const char *string); void SetLetterBitsRange(Translator *tr, int group, int first, int last); void SetLetterVowel(Translator *tr, int c); diff --git a/src/voices.cpp b/src/voices.cpp index 235c89e0..c389fe59 100755 --- a/src/voices.cpp +++ b/src/voices.cpp @@ -1341,7 +1341,7 @@ espeak_ERROR SetVoiceByName(const char *name) } // first check for a voice with this filename - if(LoadVoice(buf,1) != NULL) + if((first_voice == NULL) && (LoadVoice(buf,1) != NULL)) { voice_selected = first_voice;