Mbrola translations, option to not match across a word boundary. Mbrola translations, allow check of lengthen indicator [:]. espeakedit, add operation to apply a voice's formants modifications to a keyframe. git-svn-id: https://espeak.svn.sourceforge.net/svnroot/espeak/trunk@47 d46cf337-b52f-0410-862d-fd96e6ae7743master
@@ -157,8 +157,8 @@ o: u u: y Y y: Y: | |||
* : b c C d dZ f | |||
g h j J k l m n | |||
N n^ p r R s S s2 | |||
t tS ts v z Z z2 | |||
N n^ p r R R2 s S | |||
s2 t tS ts v z Z z2 | |||
Dictionary it_dict | |||
@@ -321,3 +321,27 @@ f g h j J k l l# | |||
m m# n N n# N# n^ n^# | |||
p Q r R r# R2 s S | |||
t T tl# v x z | |||
Dictionary la_dict | |||
@- a a: aI aU E e: EU | |||
I i: O o: OI U u: y | |||
y: | |||
* : <h> b d f g h | |||
j k l m n N p r | |||
R s t w z | |||
Dictionary sr_dict | |||
& @ @- @2 a A a: aI | |||
aU E e e: E~ i I i: | |||
l- o o: oU r- u U u: | |||
y | |||
* b d dZ dZ; f g h | |||
j k l l^ m n N n^ | |||
p r R s S t tS ts | |||
tS; v x z Z |
@@ -45,13 +45,23 @@ km kilo:me:tER | |||
mm milime:tER | |||
a.m An^n^i||m'int $dot | |||
dr doktoR $dot | |||
gpu $abbrev | |||
id idY:SEb: $dot | |||
ill illEdvE $dot | |||
ifj ifjAb: $dot | |||
mta $abbrev | |||
pl pe:lda:ul $dot | |||
stb SAtYb:i $dot | |||
ú.n u:JnEvEzEt: | |||
vö v'EZd||_'Yss2E | |||
ii kEttY: $abbrev | |||
iii ha:Rom $abbrev | |||
iv ne:J $abbrev | |||
vi hAt $abbrev | |||
vii he:t $abbrev | |||
viii n^olts $abbrev | |||
// Articles | |||
@@ -135,6 +145,7 @@ be $u | |||
ra $u | |||
re $u | |||
ik $u | |||
as $u | |||
es $u | |||
os $u | |||
ós $u | |||
@@ -251,6 +262,9 @@ _. pont | |||
// Names | |||
ricárd RiCArd | |||
Engels ENgEls | |||
Kéthly ke:thli | |||
ricárd RiCARd | |||
richard RiCARd | |||
Szamuelly sAmuElli | |||
Szamuely sAmuElli |
@@ -21,6 +21,7 @@ | |||
cc ts: | |||
cs tS | |||
ccs tS: | |||
cz ts | |||
anar) ch (i C | |||
hierar) ch (i C | |||
@@ -130,6 +131,7 @@ _minde) gy (ik J: | |||
.group k | |||
k k | |||
kk k: | |||
_) köz kYz | |||
.group l | |||
l l | |||
@@ -143,7 +145,7 @@ _minde) gy (ik J: | |||
.group m | |||
m m | |||
ko) mm (unis m | |||
ko) mm (uni m | |||
.group n | |||
@@ -183,11 +185,11 @@ _minde) gy (ik J: | |||
qu kv | |||
.group r | |||
r R | |||
A) r (A * | |||
C) r (A R | |||
r (C R | |||
rr R* | |||
r R2 | |||
A) r (A R2 | |||
C) r (A R2 | |||
r (C R2 | |||
rr R2* | |||
.group s | |||
s S | |||
@@ -196,6 +198,7 @@ _minde) gy (ik J: | |||
hel) s (inki z | |||
ki) s (ebb SS | |||
_munká) s S | |||
_o) slo slo: | |||
_o) sló slo: | |||
@@ -29,9 +29,9 @@ _= ugwale | |||
_> kj,uza'angolo | |||
_? p'untointeRogat'ivo | |||
_@ ki'otS:ola | |||
_[ ap'eRtakw'ad@-*a | |||
_[ ap'eRtakw2'ad@-*a | |||
_\ bakslaS | |||
_] kj,uzakw'ad@-*a | |||
_] kj,uzakw2'ad@-*a | |||
_^ kap:utS:o | |||
__ 'undeRskoRe | |||
_` bakp@-*aIm | |||
@@ -47,8 +47,8 @@ _0 dz'eRo | |||
_1 'uno | |||
_2 d'ue | |||
_3 tR'e | |||
_4 kw'at:Ro | |||
_5 tS'inkwe | |||
_4 kw2'at:Ro | |||
_5 tS'inkw2e | |||
_6 s'ej | |||
_7 s'Et:e | |||
_8 'Ot:o | |||
@@ -57,16 +57,16 @@ _10 di'etSi | |||
_11 'unditSi | |||
_12 d'oditSi | |||
_13 t@-*'editSi | |||
_14 kwat:'ORditSi | |||
_15 kw'imditSi | |||
_14 kw2at:'ORditSi | |||
_15 kw2'imditSi | |||
_16 s'editSi | |||
_17 ditSas:'Et:e | |||
_18 ditS'Ot:o | |||
_19 ditSann'ove | |||
_2X v'ente | |||
_3X t@-*'enta | |||
_4X kwaR'anta | |||
_5X tSinkw'anta | |||
_4X kw2aR'anta | |||
_5X tSinkw2'anta | |||
_6X sess'anta | |||
_7X set:'anta | |||
_8X ot'anta | |||
@@ -348,6 +348,8 @@ facevano $u+ | |||
// If a letter has a "word" pronunciation which is different from its | |||
// "letter" name, then include the letter name here, with the letter | |||
// prefixed by a _ character. | |||
_a a: | |||
a a: $atend | |||
_e e: | |||
e e: $atend | |||
_i i: |
@@ -214,8 +214,8 @@ | |||
.group q | |||
_) q(_ ku: | |||
q kw | |||
qu kw | |||
q kw2 | |||
qu kw2 | |||
.group r | |||
_) r(_ ER*e |
@@ -1,4 +1,4 @@ | |||
35 phoneme tables | |||
37 phoneme tables | |||
new total | |||
base 96 96 | |||
base2 24 114 | |||
@@ -19,11 +19,13 @@ | |||
hu 24 114 | |||
nl 26 117 | |||
pl 15 107 | |||
sk 26 124 | |||
cs 5 124 | |||
hr 25 133 | |||
sk 29 125 | |||
cs 5 125 | |||
hr 19 129 | |||
sr 2 129 | |||
ru 36 124 | |||
it 12 114 | |||
la 21 114 | |||
es 6 114 | |||
pt 28 131 | |||
pt_pt 20 131 | |||
@@ -104,8 +106,8 @@ | |||
1 l^/j2u base | |||
1 l^/_l^ base | |||
1 l^/l^ base | |||
7 l/l base en af sk ru pt ro | |||
10 l/_l base en af de fr sk ru pt ro | |||
8 l/l base en af sk ru la pt ro | |||
11 l/_l base en af de fr sk ru la pt ro | |||
1 l/l_ base | |||
2 l/l@ base | |||
1 l/L1_aL base | |||
@@ -126,10 +128,10 @@ | |||
2 l/le base | |||
1 l/L_eL_af af | |||
2 l/li base | |||
3 l/l_long base fr ro | |||
4 l/l_long base fr la ro | |||
2 l/lo base | |||
2 l/lu base | |||
8 l/tl base en af fr sk ru pt ro | |||
9 l/tl base en af fr sk ru la pt ro | |||
6 l/xl base | |||
2 m/_m base ro | |||
2 m/m_ base ro | |||
@@ -212,13 +214,13 @@ | |||
2 ufric/ch base de | |||
3 ufric/f base de ro | |||
2 ufric/f_ base ro | |||
4 ufric/h_ base fi hi | |||
5 ufric/h@ base fi hi | |||
4 ufric/ha base fi hi | |||
4 ufric/he base fi hi | |||
4 ufric/hi base fi hi | |||
3 ufric/ho base hi | |||
3 ufric/hu base hi | |||
5 ufric/h_ base fi hi la | |||
6 ufric/h@ base fi hi la | |||
5 ufric/ha base fi hi la | |||
5 ufric/he base fi hi la | |||
5 ufric/hi base fi hi la | |||
4 ufric/ho base hi la | |||
4 ufric/hu base hi la | |||
2 ufric/hu_fi fi | |||
2 ufric/ll base is | |||
3 ufric/s base es pt | |||
@@ -241,18 +243,18 @@ | |||
1 ufric/x_hr hr | |||
1 ustop/c base | |||
5 ustop/k base en fr hi sw | |||
9 ustop/k_ base base2 en fi fr hi hu el sw | |||
12 ustop/ki base base2 en af fi fr hi hu is sw | |||
10 ustop/kl base base2 en fi fr hi hu el sw | |||
11 ustop/kr base base2 en fi fr hi hu el sw | |||
9 ustop/k_unasp base base2 fi hi hu el | |||
10 ustop/k_ base base2 en fi fr hi hu sk el sw | |||
13 ustop/ki base base2 en af fi fr hi hu sk is sw | |||
11 ustop/kl base base2 en fi fr hi hu sk el sw | |||
12 ustop/kr base base2 en fi fr hi hu sk el sw | |||
10 ustop/k_unasp base base2 fi hi hu sk el | |||
2 ustop/p base hi | |||
2 ustop/p_ base hi | |||
1 ustop/percus10 base | |||
8 ustop/pl base base2 fi hi hu hr ro | |||
8 ustop/pr base base2 fi hi hu ro | |||
7 ustop/p_unasp base base2 fi hi hu hr ro | |||
6 ustop/p_unasp_ base2 fi hi hu hr ro | |||
9 ustop/pl base base2 fi hi hu sk la ro | |||
9 ustop/pr base base2 fi hi hu la ro | |||
8 ustop/p_unasp base base2 fi hi hu sk la ro | |||
7 ustop/p_unasp_ base2 fi hi hu sk la ro | |||
3 ustop/t base en hi | |||
6 ustop/t_ base en hi sk el | |||
27 ustop/t_dnt base base2 en fi fr hi hu pl hr ru ro vi ++ | |||
@@ -297,16 +299,16 @@ | |||
2 vdiph/aai_2 af cy | |||
1 vdiph/aai_3 fi | |||
1 vdiph/aau fi | |||
3 vdiph/aau_2 de nl zh_yue | |||
4 vdiph/aau_2 de nl la zh_yue | |||
1 vdiph/aau_3 hi | |||
1 vdiph/aau_4 vi | |||
1 vdiph/ae fr_ca | |||
1 vdiph/ae_2 en_n | |||
6 vdiph/ai base2 eo hr it pt vi | |||
7 vdiph/ai base2 eo sk hr it pt vi | |||
3 vdiph/ai_2 en_us cy | |||
1 vdiph/ai_3 no | |||
1 vdiph/ai_4 af | |||
1 vdiph/ai_5 de | |||
2 vdiph/ai_5 de la | |||
1 vdiph/ai_6 en_rp | |||
5 vdiph/ai_7 en_sc is | |||
1 vdiph/ai_en en | |||
@@ -321,11 +323,10 @@ | |||
3 vdiph/eei_3 en_us en_rp sk | |||
1 vdiph/eei_4 nl | |||
3 vdiph/eeu pt vi zh_yue | |||
1 vdiph/eeu_2 pt_pt | |||
2 vdiph/eeu_2 la pt_pt | |||
2 vdiph/eeu_3 en_n en_wm | |||
1 vdiph/eey fi | |||
6 vdiph/ei base2 nl pt is vi zh_yue | |||
1 vdiph/ei_2 hr | |||
7 vdiph/ei base2 nl la pt is vi zh_yue | |||
8 vdiph/eu base2 en cy eo nl sk pt vi | |||
1 vdiph/eu_2 fi | |||
2 vdiph/&i fi hi | |||
@@ -334,13 +335,13 @@ | |||
3 vdiph/@i_3 en_wm ro zh_yue | |||
1 vdiph/&i_3 vi | |||
1 vdiph/@i_4 vi | |||
2 vdiph/ii hr ro | |||
1 vdiph/ii ro | |||
1 vdiph/i#i ro | |||
5 vdiph/oi base2 en_wm de it vi | |||
6 vdiph/oi base2 en_wm de it la vi | |||
1 vdiph/oi_2 af | |||
10 vdiph/ooi en en_n en_us en_rp cy eo fi no zh_yue | |||
1 vdiph/ooi_2 af | |||
2 vdiph/ooi_3 en_wm hr | |||
1 vdiph/ooi_3 en_wm | |||
2 vdiph/ou fi zh_yue | |||
2 vdiph/ou_2 sk ro | |||
2 vdiph/ou_3 is | |||
@@ -352,7 +353,6 @@ | |||
1 vdiph/u-i vi | |||
1 vdiph/ui_2 af | |||
2 vdiph/ui_3 cy | |||
1 vdiph/ui_4 hr | |||
1 vdiph/Vi vi | |||
1 vdiph/Vu af | |||
1 vdiph/Vu_2 en_wm | |||
@@ -417,12 +417,12 @@ | |||
1 vowel/3_2 en_n | |||
1 vowel/3_3 en_rp | |||
3 vowel/3_en en en_wm af | |||
2 vowel/@_4 nl hr | |||
1 vowel/@_4 nl | |||
2 vowel/8_2 en_us sv | |||
1 vowel/8_3 zh_yue | |||
11 vowel/a en_n cy de hu nl pl sk hr | |||
13 vowel/a en_n cy de hu nl pl sk hr sr la | |||
5 vowel/a# base2 en_sc it pt | |||
7 vowel/a_2 base2 eo it pt pt_pt ro vi | |||
8 vowel/a_2 base2 eo it la pt pt_pt ro vi | |||
4 vowel/a#_2 hr sv is sw | |||
6 vowel/a_3 en_sc cs is | |||
12 vowel/a#_3 en en_n en_us en_wm de hi ru pt_pt vi zh_yue | |||
@@ -438,14 +438,14 @@ | |||
1 vowel/aa_7 nl | |||
4 vowel/a_en en fr | |||
1 vowel/@_bck hi | |||
14 vowel/e base2 en en_n af cy eo fr hu hr it pt pt_pt ++ | |||
15 vowel/e base2 en en_n af cy eo fr hu hr it la pt ++ | |||
2 vowel/e# en_sc | |||
6 vowel/e_2 en_sc de hi sv no | |||
1 vowel/e_3 hu | |||
1 vowel/e_5 en_sc | |||
3 vowel/ee fr pl sv | |||
2 vowel/e_e en_sc is | |||
7 vowel/ee_1 base2 en en_n pl sv no zh_yue | |||
8 vowel/ee_1 base2 en en_n pl la sv no zh_yue | |||
3 vowel/ee_2 en cy nl | |||
1 vowel/ee#_2 sv | |||
3 vowel/ee_3 af pt vi | |||
@@ -456,7 +456,7 @@ | |||
1 vowel/@_hgh no | |||
19 vowel/i base2 en_n en_rp en_wm cy eo fr hu pl it pt pt_pt ++ | |||
1 vowel/i# cy | |||
3 vowel/i_2 de nl sv | |||
4 vowel/i_2 de nl la sv | |||
2 vowel/i_3 af sk | |||
3 vowel/i_4 fi hu is | |||
5 vowel/i_5 en_sc | |||
@@ -466,11 +466,12 @@ | |||
2 vowel/i_fnt hi | |||
10 vowel/ii en_wm cy de fr_ca nl is zh_yue | |||
3 vowel/ii# cy pl ru | |||
1 vowel/ii_2 la | |||
7 vowel/ii_3 en_rp fi hi sk hr sv no | |||
2 vowel/ii_4 en_rp | |||
6 vowel/ii_en en en_n | |||
5 vowel/@_low hi ro no | |||
10 vowel/o base2 en en_wm de fr hi it pt_pt sv | |||
11 vowel/o base2 en en_wm de fr hi it la pt_pt sv | |||
4 vowel/o_2 cy hi hu no | |||
2 vowel/o-_2 en_n en_wm | |||
2 vowel/o_3 en_sc | |||
@@ -482,11 +483,11 @@ | |||
1 vowel/oe_2 no | |||
1 vowel/oe_4 sv | |||
2 vowel/o_mid fr hu | |||
8 vowel/oo en_sc de eo es el sv no zh_yue | |||
9 vowel/oo en_sc de eo la es el sv no zh_yue | |||
11 vowel/oo_1 en_n en_rp en_wm af fi sk hr vi | |||
3 vowel/oo_2 en_sc cy cs | |||
1 vowel/oo_3 af | |||
2 vowel/oo_4 hi pl | |||
3 vowel/oo_4 hi pl it | |||
1 vowel/oo_5 is | |||
6 vowel/oo_en en en_n en_rp | |||
2 vowelr/aa_r en_sc | |||
@@ -495,7 +496,7 @@ | |||
4 vowelr/r-voc hi sk hr | |||
2 vowelr/V3_r en en_sc | |||
1 vowelr/V_r en | |||
7 vowel/u en_n cy de eo fr cs | |||
8 vowel/u en_n cy de eo fr cs la | |||
5 vowel/u# en en_sc | |||
4 vowel/u_2 fi sk hr ro | |||
1 vowel/u#_2 sv | |||
@@ -508,7 +509,7 @@ | |||
1 vowel/u_7 vi | |||
16 vowel/u_bck base2 cy fi fr_ca hi hu nl pl sk hr it pt ++ | |||
2 vowel/uu en en_wm | |||
2 vowel/uu_2 base2 de | |||
3 vowel/uu_2 base2 de la | |||
1 vowel/uu_3 af | |||
2 vowel/uu_4 fi sv | |||
7 vowel/uu_bck fr_ca hi hu pt no zh_yue | |||
@@ -528,7 +529,7 @@ | |||
1 vowel/yy fr_ca | |||
1 vowel/yy_2 no | |||
1 vowel/yy_3 sv | |||
3 vowel/yy_4 de hu is | |||
5 vowel/yy_4 de hu la is | |||
1 vwl_af/@ af | |||
1 vwl_af/I af | |||
2 vwl_af/r@ af | |||
@@ -606,7 +607,7 @@ | |||
1 w/wa base | |||
1 w/we base | |||
3 w/wi base vi zh_yue | |||
10 w/wi2 en en_n en_us en_sc en_rp en_wm de nl sv no | |||
11 w/wi2 en en_n en_us en_sc en_rp en_wm de nl la sv no | |||
1 w/wo base | |||
1 w/wu base | |||
5 w/xw base |
@@ -10,12 +10,6 @@ phoneme @2 // Schwa (raised) | |||
length 140 | |||
endphoneme | |||
phoneme @3 // Schwa (raised) | |||
vowel starttype (@) endtype (@) | |||
formants vowel/@_4 | |||
length 140 | |||
endphoneme | |||
phoneme a | |||
vowel starttype (a) endtype (a) | |||
@@ -84,10 +78,10 @@ phoneme u | |||
reduceto U 4 | |||
endphoneme | |||
phoneme U | |||
vowel starttype (u) endtype (u) | |||
length 140 | |||
// formants vowel/uu_bck | |||
formants vowel/u_2 | |||
endphoneme | |||
@@ -99,48 +93,6 @@ phoneme aI | |||
endphoneme | |||
phoneme eI | |||
vowel starttype (e) endtype (i) | |||
length 250 | |||
formants vdiph/ei_2 | |||
linkout ; | |||
endphoneme | |||
phoneme iI | |||
vowel starttype (i) endtype (i) | |||
length 250 | |||
formants vdiph/ii | |||
linkout ; | |||
endphoneme | |||
phoneme oI | |||
vowel starttype (o) endtype (i) | |||
length 250 | |||
formants vdiph/ooi_3 | |||
linkout ; | |||
endphoneme | |||
phoneme uI | |||
vowel starttype (u) endtype (i) | |||
length 250 | |||
formants vdiph/ui_4 | |||
linkout ; | |||
endphoneme | |||
phoneme p | |||
vls blb stop | |||
vowelin f1=0 f2=1000 -50 -100 f3=-200 80 | |||
vowelout f1=0 f2=1000 -500 -350 f3=-300 80 rms=30 | |||
lengthmod 2 | |||
wave ustop/p_unasp%120 | |||
before _ ustop/p_unasp_%80 | |||
before l ustop/pl | |||
switchvoicing b | |||
endphoneme | |||
phoneme t // dental variant of /t/ |
@@ -89,7 +89,7 @@ endphoneme | |||
phoneme Y: | |||
vowel starttype (@) endtype (@) | |||
length 240 | |||
length 270 | |||
formants vowel/y# | |||
endphoneme | |||
@@ -52,7 +52,7 @@ endphoneme | |||
phoneme O | |||
vowel starttype (o) endtype (o) | |||
length 170 | |||
// formants vowel/oo_4 | |||
formants vowel/oo_4 | |||
// formants vowel/0 | |||
reduceto o 4 // [O] only in stressed syllables | |||
endphoneme |
@@ -87,6 +87,13 @@ phoneme oU | |||
formants vdiph/ou_2 | |||
endphoneme | |||
phoneme aI | |||
vowel starttype (a) endtype (i) | |||
length 270 | |||
formants vdiph/ai | |||
endphoneme | |||
phoneme eI | |||
vowel starttype (e) endtype (i) | |||
length 260 | |||
@@ -176,4 +183,29 @@ phoneme t | |||
switchvoicing d | |||
endphoneme | |||
phoneme p | |||
vls blb stop | |||
vowelin f1=0 f2=1000 -50 -100 f3=-200 80 | |||
vowelout f1=0 f2=1000 -500 -350 f3=-300 80 rms=30 | |||
lengthmod 2 | |||
wave ustop/p_unasp%120 | |||
before _ ustop/p_unasp_%80 | |||
before l ustop/pl | |||
switchvoicing b | |||
endphoneme | |||
phoneme k | |||
vls vel stop | |||
vowelin f1=0 f2=2300 200 400 f3=-100 80 | |||
vowelout f1=0 f2=2300 300 400 f3=-100 80 rms=20 | |||
lengthmod 2 | |||
wave ustop/k_unasp%60 // weaker | |||
before _ ustop/k_ | |||
before r ustop/kr | |||
before l ustop/kl | |||
before (i) ustop/ki | |||
switchvoicing g | |||
endphoneme | |||
@@ -1188,6 +1188,9 @@ include ph_czech | |||
phonemetable hr sk | |||
include ph_croatian | |||
phonemetable sr hr | |||
include ph_serbian | |||
phonemetable ru base | |||
include ph_russian | |||
@@ -1195,6 +1198,9 @@ include ph_russian | |||
phonemetable it base2 | |||
include ph_italian | |||
phonemetable la base | |||
include ph_latin | |||
phonemetable es base2 | |||
include ph_spanish | |||
@@ -129,7 +129,7 @@ wxMenuBar *MakeMenu(int type) | |||
menu_bar->Append(voice_menu, _T("&Voice")); | |||
menu_bar->Append(option_menu, _T("&Options")); | |||
menu_bar->Append(tools_menu, _T("&Tools")); | |||
menu_bar->Append(data_menu, _T("&Data")); | |||
menu_bar->Append(data_menu, _T("&Compile")); | |||
menu_bar->Append(help_menu, _T("&Help")); | |||
return(menu_bar); |
@@ -239,8 +239,11 @@ static int GetC(void) | |||
int c; | |||
int c1; | |||
int c2; | |||
int cbuf[4]; | |||
int ix; | |||
int n_bytes; | |||
unsigned char m; | |||
static int ungot2 = 0; | |||
static const unsigned char mask[4] = {0xff,0x1f,0x0f,0x07}; | |||
static const unsigned char mask2[4] = {0,0x80,0x20,0x30}; | |||
@@ -250,7 +253,16 @@ static int GetC(void) | |||
return(c1); | |||
} | |||
c1 = GetC_get(); | |||
if(ungot2 != 0) | |||
{ | |||
c1 = ungot2; | |||
ungot2 = 0; | |||
} | |||
else | |||
{ | |||
c1 = GetC_get(); | |||
} | |||
if(option_multibyte == espeakCHARS_WCHAR) | |||
{ | |||
count_characters++; | |||
@@ -271,14 +283,13 @@ static int GetC(void) | |||
if(((c1 & 0xf8) == 0xf0) && ((c1 & 0x0f) <= 4)) | |||
n_bytes = 3; | |||
if(n_bytes > 0) | |||
if((ix = n_bytes) > 0) | |||
{ | |||
c = c1 & mask[n_bytes]; | |||
m = mask2[n_bytes]; | |||
while(n_bytes > 0) | |||
c = c1 & mask[ix]; | |||
m = mask2[ix]; | |||
while(ix > 0) | |||
{ | |||
c2 = GetC_get(); | |||
if(c2 == 0) | |||
if((c2 = cbuf[ix] = GetC_get()) == 0) | |||
{ | |||
if(option_multibyte==espeakCHARS_AUTO) | |||
option_multibyte=espeakCHARS_8BIT; // change "auto" option to "no" | |||
@@ -288,14 +299,17 @@ static int GetC(void) | |||
if((c2 & 0xc0) != 0x80) | |||
{ | |||
// This is not UTF8. Change to 8-bit characterset. | |||
if(n_bytes > 1) | |||
ungot2 = cbuf[2]; | |||
GetC_unget(c2); | |||
break; | |||
} | |||
m = 0x80; | |||
c = (c << 6) + (c2 & 0x3f); | |||
n_bytes--; | |||
ix--; | |||
} | |||
if(n_bytes == 0) | |||
if(ix == 0) | |||
{ | |||
count_characters++; | |||
return(c); |
@@ -377,6 +377,21 @@ void SpectFrame::ToggleMarker(int n) | |||
} | |||
void SpectFrame::ApplyVoiceMods() | |||
{//============================== | |||
// apply the modifications to the formants which are defined in the current voice | |||
int pk; | |||
for(pk=0; pk<N_PEAKS; pk++) | |||
{ | |||
peaks[pk].pkfreq = (peaks[pk].pkfreq * voice->freq2[pk])/256; | |||
peaks[pk].pkheight = (peaks[pk].pkheight * voice->height2[pk])/256; | |||
peaks[pk].pkwidth = (peaks[pk].pkwidth * voice->width2[pk])/256; | |||
peaks[pk].pkright = (peaks[pk].pkright * voice->width2[pk])/256; | |||
} | |||
} | |||
double SpectFrame::GetRms(int seq_amplitude) | |||
{//========================================= |
@@ -98,6 +98,7 @@ public: | |||
void ZeroPeaks(); | |||
void CopyPeaks(SpectFrame *sf); | |||
void ToggleMarker(int n); | |||
void ApplyVoiceMods(); | |||
void MakeWave(int peaks, PitchEnvelope &pitch, int amplitude, int duration); | |||
void MakeHtab(int numh, int *htab, int pitch); |
@@ -468,7 +468,7 @@ void SpectDisplay::OnMenu(wxCommandEvent& event) | |||
int code; | |||
wxKeyEvent keyevent; | |||
SpectFrame *sf; | |||
static int key[] = {0x1044,0x3044,0x104e,0x1047,0x105a,0x1051,0x3051,WXK_F1,WXK_F2,0x1049}; | |||
static int key[] = {0x1044,0x3044,0x104e,0x1047,0x105a,0x1051,0x3051,WXK_F1,WXK_F2,0x1049,WXK_F10}; | |||
id = event.GetId(); | |||
@@ -773,6 +773,11 @@ void SpectDisplay::OnKey(wxKeyEvent& event) | |||
display = 2; | |||
break; | |||
case WXK_F10: | |||
sf->ApplyVoiceMods(); | |||
display = 2; | |||
break; | |||
case WXK_F2: | |||
// make and play sequence | |||
ReadDialogValues(); | |||
@@ -1002,6 +1007,7 @@ void InitSpectrumDisplay() | |||
menu_spectdisplay->Append(207,_T("Hide Interpolation CTRL+SHIFT+Q")); | |||
menu_spectdisplay->Append(205,_T("Zero Peaks CTRL+Z")); | |||
menu_spectdisplay->Append(210,_T("Toggle Marker"),menu_markers); | |||
menu_spectdisplay->Append(211,_T("Apply the formant adjustments from current voice")); | |||
menu_spectdisplay->AppendSeparator(); | |||
menu_spectdisplay->Append(208,_T("Play Selected Frame F1")); | |||
menu_spectdisplay->Append(209,_T("Play All F2")); |
@@ -196,6 +196,7 @@ int GetMbrName(PHONEME_LIST *plist, PHONEME_TAB *ph, PHONEME_TAB *ph_prev, PHONE | |||
// bit 0 skip the next phoneme | |||
// bit 1 match this and Previous phoneme | |||
// bit 2 only at the start of a word | |||
// bit 4 don't match two phonemes across a word boundary | |||
pr = mbrola_tab; | |||
while(pr->name != 0) | |||
@@ -205,9 +206,17 @@ int GetMbrName(PHONEME_LIST *plist, PHONEME_TAB *ph, PHONEME_TAB *ph_prev, PHONE | |||
if(pr->next_phoneme == 0) | |||
found = 1; | |||
else | |||
if((pr->next_phoneme == ':') && (plist->synthflags & SFLAG_LENGTHEN)) | |||
{ | |||
found = 1; | |||
} | |||
else | |||
{ | |||
if(pr->control & 2) | |||
other_ph = ph_prev; | |||
else | |||
if((pr->control & 8) && ((plist+1)->newword)) | |||
other_ph = phoneme_tab[phPAUSE]; // don't match the next phoneme over a word boundary | |||
else | |||
other_ph = ph_next; | |||
@@ -35,7 +35,7 @@ | |||
#include "translate.h" | |||
#include "wave.h" | |||
const char *version_string = "1.26.04 13.Jun.07"; | |||
const char *version_string = "1.26.05 14.Jun.07"; | |||
const int version_phdata = 0x012601; | |||
int option_device_number = -1; |
@@ -271,6 +271,7 @@ Translator *SelectTranslator(const char *name) | |||
case L('h','r'): // Croatian | |||
case L('s','r'): // Serbian | |||
{ | |||
static const wchar_t replace_chars_hr[] = | |||
{0x430,0x431,0x446,0x45b,0x447,0x434,0x452,0x45f, | |||
@@ -389,6 +390,10 @@ Translator *SelectTranslator(const char *name) | |||
tr = new Translator(); | |||
tr->charset_a0 = charsets[4]; // ISO-8859-4, includes a,e,i,o,u-macron | |||
tr->langopts.stress_rule = 2; | |||
tr->langopts.stress_flags = 0x21; | |||
tr->langopts.unstressed_wd1 = 0; | |||
tr->langopts.unstressed_wd2 = 2; | |||
tr->langopts.param[LOPT_DIERESES] = 1; | |||
} | |||
break; | |||
@@ -1601,6 +1601,7 @@ void *Translator::TranslateClause(FILE *f_text, const void *vp_input, int *tone_ | |||
int dict_flags; // returned from dictionary lookup | |||
int word_flags; // set here | |||
int embedded_count = 0; | |||
int letter_count = 0; | |||
char *word; | |||
char *p; | |||
int j, k; | |||
@@ -1854,6 +1855,8 @@ if((c == '/') && (langopts.testing & 2) && isdigit(next_in) && IsAlpha(prev_out) | |||
{ | |||
if(!IsAlpha(prev_out) || (langopts.ideographs && (c >= 0x3000))) | |||
{ | |||
letter_count = 0; | |||
if((prev_out != ' ') && (prev_out != '\'')) | |||
{ | |||
// start of word, insert space if not one there already | |||
@@ -1875,6 +1878,8 @@ if((c == '/') && (langopts.testing & 2) && isdigit(next_in) && IsAlpha(prev_out) | |||
} | |||
} | |||
letter_count++; | |||
if(iswupper(c)) | |||
{ | |||
c = towlower(c); | |||
@@ -1909,7 +1914,7 @@ if((c == '/') && (langopts.testing & 2) && isdigit(next_in) && IsAlpha(prev_out) | |||
source_index = prev_source_index; // unget | |||
} | |||
#endif | |||
if((all_upper_case) && ((ix - words[word_count].start) > 1)) | |||
if((all_upper_case) && (letter_count > 2)) | |||
{ | |||
if((c == 's') && (next_in==' ')) | |||
{ |