Browse Source

[1.26.05] Fix count of upper-case letters in a word to consider multibyte characters.

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-fd96e6ae7743
master
jonsd 18 years ago
parent
commit
188b0d7c11

+ 26
- 2
dictsource/dict_phonemes View File

@@ -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

+ 16
- 2
dictsource/hu_list View File

@@ -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

+ 9
- 6
dictsource/hu_rules View File

@@ -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:


+ 10
- 8
dictsource/it_list View File

@@ -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:

+ 2
- 2
dictsource/it_rules View File

@@ -214,8 +214,8 @@

.group q
_) q(_ ku:
q kw
qu kw
q kw2
qu kw2

.group r
_) r(_ ER*e

+ 48
- 47
phsource/compile_report View File

@@ -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

+ 1
- 49
phsource/ph_croatian View File

@@ -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/

+ 1
- 1
phsource/ph_hungarian View File

@@ -89,7 +89,7 @@ endphoneme

phoneme Y:
vowel starttype (@) endtype (@)
length 240
length 270
formants vowel/y#
endphoneme


+ 1
- 1
phsource/ph_italian View File

@@ -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

+ 32
- 0
phsource/ph_slovak View File

@@ -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



+ 6
- 0
phsource/phonemes View File

@@ -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


+ 1
- 1
src/menus.cpp View File

@@ -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);

+ 23
- 9
src/readclause.cpp View File

@@ -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);

+ 15
- 0
src/spect.cpp View File

@@ -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)
{//=========================================

+ 1
- 0
src/spect.h View File

@@ -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);

+ 7
- 1
src/spectdisplay.cpp View File

@@ -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"));

+ 9
- 0
src/synth_mbrola.cpp View File

@@ -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;


+ 1
- 1
src/synthdata.cpp View File

@@ -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;

+ 5
- 0
src/tr_languages.cpp View File

@@ -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;


+ 6
- 1
src/translate.cpp View File

@@ -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==' '))
{

Loading…
Cancel
Save