Browse Source

Merge branch 'master' into build

master
Reece Dunn 14 years ago
parent
commit
332e6aec39
59 changed files with 2403 additions and 1039 deletions
  1. 20
    13
      dictsource/da_list
  2. 831
    211
      dictsource/da_rules
  3. 47
    22
      dictsource/dict_phonemes
  4. 14
    6
      dictsource/en_list
  5. 34
    19
      dictsource/en_rules
  6. 4
    3
      dictsource/fr_rules
  7. 80
    1
      dictsource/hu_list
  8. 65
    6
      dictsource/hu_rules
  9. 41
    18
      dictsource/nl_list
  10. 58
    17
      dictsource/nl_rules
  11. 1
    0
      dictsource/ro_rules
  12. 3
    0
      dictsource/sk_list
  13. 538
    527
      dictsource/sk_rules
  14. 52
    3
      dictsource/ta_list
  15. 213
    34
      dictsource/ta_rules
  16. 4
    4
      espeak-data/voices/!v/f1
  17. 1
    1
      espeak-data/voices/!v/m1
  18. 0
    1
      espeak-data/voices/!v/m7
  19. 1
    0
      espeak-data/voices/en/en
  20. 1
    0
      espeak-data/voices/en/en-n
  21. 1
    0
      espeak-data/voices/en/en-rp
  22. 1
    0
      espeak-data/voices/en/en-wi
  23. 2
    0
      espeak-data/voices/en/en-wm
  24. 1
    0
      espeak-data/voices/es-la
  25. 2
    1
      espeak-data/voices/fr-be
  26. 1
    7
      espeak-data/voices/hi
  27. 1
    0
      espeak-data/voices/hy-west
  28. 1
    1
      espeak-data/voices/mb/mb-de5-en
  29. 1
    1
      espeak-data/voices/mb/mb-gr2-en
  30. 1
    1
      espeak-data/voices/mb/mb-sw2-en
  31. 1
    0
      espeak-data/voices/pt-pt
  32. 146
    33
      phsource/compile_report
  33. 6
    3
      phsource/ph_english_us
  34. 4
    2
      phsource/ph_serbian
  35. 5
    0
      phsource/ph_slovak
  36. 6
    2
      phsource/ph_tamil
  37. 9
    2
      phsource/phonemes
  38. BIN
      phsource/vowel/a#_2
  39. BIN
      phsource/vowel/ee#_2
  40. BIN
      phsource/w/iw_
  41. BIN
      phsource/w/w_
  42. 5
    1
      platforms/windows/make_espeak.iss
  43. 1
    1
      platforms/windows/make_espeakedit.iss
  44. 14
    0
      src/Makefile
  45. 1
    1
      src/compiledata.cpp
  46. 14
    3
      src/dictionary.cpp
  47. 3
    2
      src/mbrowrap.cpp
  48. 2
    2
      src/numbers.cpp
  49. 4
    2
      src/phonemelist.cpp
  50. 46
    12
      src/readclause.cpp
  51. 1
    1
      src/speak.cpp
  52. 2
    3
      src/speak_lib.cpp
  53. 2
    1
      src/synthdata.cpp
  54. 1
    1
      src/synthesize.cpp
  55. 15
    6
      src/tr_languages.cpp
  56. 41
    27
      src/translate.cpp
  57. 4
    2
      src/translate.h
  58. 1
    0
      src/voice.h
  59. 49
    35
      src/voices.cpp

+ 20
- 13
dictsource/da_list View File

@@ -290,11 +290,9 @@ skinheads _^_EN
street _^_EN
boy _^_EN
square _^_EN
appeal _^_EN
apple _^_EN
beachbuggy _^_EN
beachvolley _^_EN
browser _^_EN
chart _^_EN
coach _^_EN
coke _^_EN
@@ -307,7 +305,6 @@ event _^_EN
firewall _^_EN
freak _^_EN
friendly _^_EN
groupie _^_EN
homepage _^_EN
hooligan _^_EN
interface _^_EN
@@ -371,7 +368,6 @@ bbc _^_EN $alt
boston _^_EN $alt
bronx _^_EN $alt
boyle _^_EN $alt
clarence _^_EN $alt
cyrus _^_EN
cia _^_EN $alt
fox _^_EN
@@ -383,7 +379,7 @@ montreal _^_EN $alt
oregon _^_EN $alt
piccadilly _^_EN
reynolds _^_EN $alt
purvis _^_EN
//purvis _^_EN
white _^_EN $alt

// PB French words
@@ -1496,6 +1492,7 @@ rentrice $alt
renæssance $alt
ressource $alt
restance $alt
revanche $alt
romance $alt
seance $alt
service $alt
@@ -2001,6 +1998,7 @@ spartan $alt
srilankan $alt
sudan $alt
taiwan $alt
texan $alt
tibetan $alt
tongan $alt
trojan $alt
@@ -2161,7 +2159,7 @@ etik $alt
eugenik $alt
excentrik $alt
fabrik $alt
falkeblik $alt
//falkeblik $alt
folkloristik $alt
fonetik $alt
fysik $alt
@@ -2183,6 +2181,7 @@ heuristik $alt
homiletik $alt
hydraulik $alt
informatik $alt
journalistik $alt
kamik $alt
karakteristik $alt
kasuistik $alt
@@ -2794,6 +2793,7 @@ homofoni $alt
ironi $alt
kakofoni $alt
kapellani $alt
katatoni $alt
kleptomani $alt
koloni $alt
kompagni $alt
@@ -2801,7 +2801,6 @@ kosmogoni $alt
kvadrofoni $alt
litani $alt
ludomani $alt
makaroni m&k@r'Vni $alt
mani $alt
misogyni $alt
monomani $alt
@@ -6561,16 +6560,16 @@ kontingenter $alt
kontinuer $alt
kontraher $alt
kontrasigner $alt
kontraster $alt
kontrastere $alt
kontribuer $alt
kontroller $alt
kontrollere $alt
konturere $alt
konvener $alt
konverger $alt
konverser $alt
konverter $alt
konvojere $alt
konvoluter $alt
konvolutere $alt
kooperer $alt
koordiner $alt
kopiere $alt
@@ -6628,7 +6627,7 @@ lakser $alt
lamenter $alt
laminer $alt
lancer $alt
lasere $alt
//lasere $alt
latiniser $alt
lavpasteuriser $alt
legaliser $alt
@@ -6825,6 +6824,7 @@ patentere $alt
patiner $alt
patroniser $alt
patruljere $alt
afpatruljer $alt
pausere $alt
pelleter $alt
pendulere $alt
@@ -7175,7 +7175,7 @@ stoltser $alt
strabadsere $alt
stranguler $alt
stratificer $alt
strukturer $alt
strukturere $alt
omstrukturer $alt
studere $alt
indstudere $alt
@@ -7218,7 +7218,7 @@ taktere $alt
taktreguler $alt
taljere $alt
tamburer $alt
tamponer $alt
tamponere $alt
tangere $alt
tapetser $alt
tarer $alt
@@ -9623,6 +9623,7 @@ interferon $alt
futon $alt
føljeton fWljet'Vn $alt
facon $alt
kamæleon $alt
lazaron $alt
makron $alt
melon $alt
@@ -10232,6 +10233,7 @@ palæontolog $alt
patolog $alt
politolog $alt
prolog $alt
proktolog $alt
psykolog $alt
radiolog $alt
runolog $alt
@@ -10399,6 +10401,7 @@ zoologi $alt
økologi $alt

// final -ose - stressed o
acidose $alt
antibiose $alt
apoteose $alt
asbestose $alt
@@ -10717,6 +10720,7 @@ processor $alt
professor $alt
provisor $alt
revisor $alt
sektor $alt
sensor $alt
sponsor $alt
successor $alt
@@ -11209,6 +11213,7 @@ fx fVegsemp@l // PB "fx" is short for 'for eksempel'
emp $abbrev
hbo $abbrev // TV station
usa $abbrev
kfum $abbrev
who $abbrev $allcaps // PB World Health Organization
ussr $abbrev $allcaps // Sovjet Union
vsop $abbrev
@@ -11234,6 +11239,8 @@ bh $abbrev
(bh'er) b,e:h'O:V
(l'chaim) l&kr'ajm
scsi skVsi // PB
ike ajk // PB name
ikes ajks // PB

// Try to catch errors


+ 831
- 211
dictsource/da_rules
File diff suppressed because it is too large
View File


+ 47
- 22
dictsource/dict_phonemes View File

@@ -53,7 +53,7 @@ p r s S t T v w
x z


Dictionary da_dict 2011-05-05
Dictionary da_dict 2011-07-21

& &# 0 3 @ @- a A
aI e E i o O u V
@@ -62,11 +62,11 @@ W W# y Y
* - : ? b B d D
dZ f g h j J k l
l/2 l/3 m n N p r R
s S t T tS v w x
z Z
R3 s S t T tS v w
x z Z


Dictionary hu_dict 2011-06-25
Dictionary hu_dict 2011-08-19

a A a: E e: i i: o
o: u u: Y y y: Y:
@@ -101,7 +101,7 @@ p Q r R s s; t T
ts v x z


Dictionary en_dict 2011-06-21
Dictionary en_dict 2011-08-17

0 3 3: @ @- @2 @5 @L
a a# A: A@ aa aI aI@ aU
@@ -151,7 +151,7 @@ l m n N p r s S
s2 t v w Z


Dictionary fr_dict 2011-05-21
Dictionary fr_dict 2011-08-14

@ @- a A~ e E E: E~
i I o O O~ u u: w
@@ -201,17 +201,17 @@ q r r. s S s. t T
t. th th. v w x z


Dictionary ta_dict 2011-06-25
Dictionary ta_dict 2011-08-21

a a: aI aU e E e: i
I i: o o: u U u2 u:
U: V V#

#X1 #X2 : ; b C d d.
dZ f g h H j k l
l. m n N n. n^ p Q
r R s S s. t T t.
th tS v w z z.
# #X1 #X2 : ; b C d
d. dZ f g h H j k
l l. m n N n. n^ p
Q r R s S s. t T
t. th tS v w z z.


Dictionary hy_dict 2008-12-22
@@ -326,7 +326,7 @@ k l m n p R s S
t tS v w x


Dictionary nl_dict 2011-06-08
Dictionary nl_dict 2011-07-23

8 @ @- a A a: A~ e
E e# E2 e: EI eU i I
@@ -388,7 +388,7 @@ S s# s; t T tS ts v
w x z Z


Dictionary ro_dict 2011-03-10
Dictionary ro_dict 2011-07-21

@ @- @I @U a aI aU e
ea eI eo eU i i/ I^ iI
@@ -416,7 +416,7 @@ t; ts tS; v x z Z z;
Z;


Dictionary sk_dict 2010-03-12
Dictionary sk_dict 2011-08-08

& @- a a: e e: i i:
l- l: o o: oU r- r: u
@@ -425,8 +425,8 @@ u:
* ; 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
S t t; tS ts v w x
z Z


Dictionary sq_dict 2008-12-22
@@ -524,14 +524,14 @@ l m n N p r s t
tS v w z


Dictionary am_dict 2010-10-02
Dictionary am_dict 2011-08-23

@ a e i o u y

? b d dZ f g h j
k l m n N n^ p R
s S t tS ts v w x
z Z
: ? b d dZ f g h
j k k` l m n N n^
p p` r R s S t t`
tS tS` v w x z Z


Dictionary ml_dict 2011-04-25
@@ -748,3 +748,28 @@ b d d. dZ f g h j
k l l. m m# n N n#
N# n. n.# n^ n^# p r s
S t t. th tS v w z


Dictionary et_dict 2011-07-01

& &: &i 8 8: 8u a A1
a: e E1 e: i I I1 i1
i: o O1 o: u U1 u: Y
y Y: y: Yi yi

: b d d^ dZ f g h
j k l l^ m n N n^
p r R s S s2 s^ t
t^ v w z Z


Dictionary mt_dict 2011-07-29

@ a ai au e ei eu i
I ie iu l- o u U ui
y yi yY

* : b c C d dZ f
g h j k l m n p
q r s S t tS v w
x z Z

+ 14
- 6
dictsource/en_list View File

@@ -46,7 +46,6 @@ u ju:
v vi:
w d'Vb@Lju:
x Eks
y waI
z zEd
?3 z zi:

@@ -151,7 +150,8 @@ _´ a#kju:taksEnt
_· mId@Ld0t
_¸ sEd'Il@
_¹ su:p@skrIptw'0n
_º maskjUlIn'O@dI2n@L
//_º maskjUlIn'O@dI2n@L
_º dI2gr'i:z
_» raIt'gIl@mEt
_¿ %Inv,3:tI2dkw'EstS@n

@@ -391,6 +391,7 @@ ufo $abbrev
ui $abbrev
uk $abbrev
un $abbrev $allcaps
unhcr $abbrev
url $abbrev
usa $abbrev
usb $abbrev
@@ -570,7 +571,6 @@ anniversary anIv'3:s@ri
anon a#n0n
anonymous $2
another a#nVD3
answer aans3
ante anti
antecedent antIs'i:d@nt
antibody $1
@@ -950,6 +950,7 @@ customer k'Vst@m3
cutaway kVt@weI
cutoff kVt0f
cutout kVtaUt
cwm kUm
cyan saI'an
cymru kVmri

@@ -957,6 +958,7 @@ dahlia deIli:@
dais deIIs
damaged d'amI2dZd
dandelion dandI2laI@n
ddu DI // Welsh
de d@ $only
debacle deIb'A:k@L
debrief di:br'i:f
@@ -1056,6 +1058,7 @@ dugout dVgaUt
dungaree dVNga#r'i:
duvet du:veI
d'ye dj@
dynamo $1

ebook i:bUk
eweek i:wi:k
@@ -1187,6 +1190,7 @@ flexible flEksIb@L
flier flaI3
flourish flVrI2S
?3 flourish fl3:I2S
flyby flaIbaI
focus foUk@s // ed,ing
foothold fUthoUld
forage f0rI2dZ
@@ -1436,6 +1440,7 @@ labor leIb3
labored leIb@d
laborer leIb@r3
lager lA:g3
laity leI@ti
landowner l'and,oUn3
las ,las
?3 las ,lA:s
@@ -1476,8 +1481,8 @@ liter li:t3
literature lItrI2tS3
live laIv $onlys
live lIv $verb
lived lIvd
livecd l'aIvsi:d'i:
livestock l'aIvst,0k
lively laIvlI
llama lA:m@
locale loUk'aal
@@ -1528,7 +1533,6 @@ margarine mA@dZ@ri:n
marijuana marI2w'A:n@
marshall mA@S@L
martinet $3
massacre mas@k3
massage masA:Z
mausoleum mO:s@li:@m
mayhem meIhEm
@@ -1565,6 +1569,7 @@ million mIli@n
minibus mInIbVs
mining maInIN // not mini
minuet mInju:'Et
minus maIn@s
minute mInIt $onlys
mirage mIrA:Z
misery mIz@rI
@@ -1934,6 +1939,7 @@ record rEkO@d $onlys
record $verb
redcross $2
redeye r'Ed,aI
redial ri:daI@l
redo ri:du:
redone ri:d'Vn
reference rEfr@ns
@@ -2049,7 +2055,6 @@ sceptre sEpt3
sclera skli@r
scourge sk3:dZ
scrotum skroUt@m
scythe saID
seabed si:bEd
sealion si:laI@n
seance seI0ns
@@ -2087,6 +2092,7 @@ sex sEks // sexism
several sEvr@L
shallow SaloU
shampoo $2
shepherd SEp@d
sheriff S'ErI2f
shew SoU
shia Si:@
@@ -2458,6 +2464,7 @@ Dumfries dVmfr'i:s
Dyfed d'VvId
Edinburgh EdInb%Vr@
Ely i:li
Enfield $1
Exeter EksIt3
Exmoor EksmU@
Fylde faIld
@@ -3002,6 +3009,7 @@ Carnegie kA@nEgi
Cohen koU@n
Cthulhu k@-Tu:l#u:
Chrysler kraIzl3
Dante danteI
Disney dIzni
Dolce d0ltSeI
Dvorak d@-vo@Zak

+ 34
- 19
dictsource/en_rules View File

@@ -52,6 +52,7 @@
sw) a (B 0
a (Be# eI
w) a (Be# eI
a (Cee+ a
a (BeCo_ a
a (BerA a
a (BerC a
@@ -86,7 +87,7 @@
w) a (d 0
ow) a (d @
ae i:
aea i@
aea 'i@
@) aed (_S2 d
ae (l eI
h) ae (m i:
@@ -164,6 +165,7 @@
@) awi (_ 'A:wI
_) aw (k O:
_) aw (ok a#w
awr (_ aU@
C) a (x+ a
_) a (x+ a
ay eI
@@ -306,6 +308,7 @@
acou (st a#ku:
ac (quie ,a
_) acre eIk@
mass) acre @k3
_) ac (ri ak
ac (ro ak
m) acro (@ akr@
@@ -456,6 +459,7 @@
ai (_ aI
aic (_ 'eIIk
aic (al 'eIIk
aie eI@
ai (i aI
@) ai (Ca_ 'eI
aig (n 'eI
@@ -640,7 +644,7 @@
@erd) am (_ am
?!3 &h) am (_N @m
&s) am (_ @m
@r) am (a 'A:m
@r) am (a_ 'A:m
_) am (al a#m
amateur am@t3
amaz a#meIz
@@ -777,6 +781,7 @@
tr) an (si an
tr) ansis anz'Is
tr) an (som an
answ (er aans
ante (nn ant'E
_) anti (@P4 ,antI // prefix
ant (iq ant
@@ -868,11 +873,13 @@
&h) ar (d_ 3
&ch) ar (d 3
&k) ar (d_ 3
&p) ar (d_ 3
&st) ar (d_ 3
&w) ar (d_ 3
aw) ar (d O@
eot) ar (d_ A@
&z) ar (d_ 3
ar (dry 3
h) ar (ass @r
&m) aran @ran
sep) ar (at 3r
@@ -1456,7 +1463,7 @@
co (mpou k0
co (mprehen k0
co (mprom k0
co (mpt k0
_) comp (tr k%0m
co (mputa k,0
_) co (mr k0
_) con (@ k%0n
@@ -2206,7 +2213,6 @@
&) en (ce_ @n
?8 &) en (ce_ En
f) en (ce_ En
g) ener (al En@r
_) en (ough I2n

.group eo
@@ -2246,6 +2252,7 @@
%C) ers (_S4 3z
?8 %C) ers (_S4 a#z
ss) er (_S2 3
ss) ers (_S3 3z
all) er (_ 3
mb) er (_ 3
lin) er (_S1 3
@@ -2255,8 +2262,10 @@
_) er (A I2r
_) er 3:
_) err (A Er
@) eral (ity @r'al
&) eram (ent r@m
X) era (_ i@r@
cam) era @-r@
XC) err Er
erre 'e@
erred (_ '3:d
@@ -2717,6 +2726,7 @@
&) ico (_ =I2koU
i (cus_ =I
_) i (d aI
up) i (de I
ir) i (d I
acc) i (d I
c) i (dal 'aI
@@ -3096,7 +3106,7 @@
inte (llec Int@
_) inter (@P5 ,Int3 // prefix
_) inter (AP5 ,Int@r
inter (est Int@r
inter (est Intr
interfer Int@f'i@3
_) int (erio+ %Int
_) inter (n_ %Int3:
@@ -3183,7 +3193,6 @@
inism (_ InIz@m
infor (matio Inf3
ino (_ 'i:noU
_m) in (us aIn
_m) inu (te aIn'ju:
_m) inute (m InIt
_) intra Intr@
@@ -3203,7 +3212,7 @@
n) ion =i@n
v) io (l aI@
ione (_ 'aI@ni
g) io (n @
g) io (n+ @
m) io (n I20
sh) io (n @
_) io (n aI0
@@ -3230,6 +3239,7 @@
ir (at %aIr
ir (ate =i@r
ire aI@
ir (ee aI@
?8 ire aIa#
s) ir (en aI@
c) ire (n aIr@
@@ -3307,7 +3317,6 @@


.group it
_) it' %It
_m) it (o aIt
it (a_N 'i:t
it (o_ 'i:t
@@ -3363,7 +3372,7 @@
@) iv (e Iv
iv (e# aIv
h) iv (e_ aIv
l) ive (l aIv
_l) ive (B aIv
l) iv (en aIv
r) ival aIv@L
ct) iv (al 'aIv
@@ -3456,6 +3465,7 @@
Al) l (_
&) lim (ent lIm
&B) ling (_ lIN
&B) lings (_ lINz
ng) ling (_ @-lIN
&t) ling (_ _lIN
&l) ling (_S4vd IN
@@ -3679,6 +3689,7 @@
X) o (By_ oU
_) o (Cy+ 0
o (Be# oU
oi (ce# OI
o (BeCo_ 0
o (BenC oU
o (Beon 'oU
@@ -3891,7 +3902,6 @@
@@) ol (ar 'oUl
h) ol (ar 0l
m) ole (st @lE
b) ol (t oUl
c) ol (our Vl
@@) ol (us 'oUl
contr) ol oUl
@@ -3924,7 +3934,7 @@
olm (_ oUm
olo (gi '0l@
olo (gic @l'0
v) olt oUlt
olt oUlt
w) olv Ulv
N_p) oly ,0lI

@@ -4173,7 +4183,7 @@
os (al_ 'oUz
_l) os (e u:z
ose (_ oUz
purp) ose (_ @s
purp) ose @s
_r) os (e# oUz
c) os (ec oUs
c) os (ine_ oUs
@@ -4329,6 +4339,7 @@
y) ou (t_ aU
ou (v u:
oux (_ u:
ou (z u:

.group ov
@) ov (al u:v
@@ -4439,6 +4450,7 @@
_) pt (Y t

ph f
ph (am_ p
phenome (n fI2n0mI
phenyl f,i:naIl
p (haza p
@@ -4651,12 +4663,10 @@
&ant) ry (_S2 r%I

.group re
// _) re (@P2 %ri:
_) re (C@ rI2
// _) re (A rI2
&Ct) red (_ @d
&B) red (_ r@d
noeuv) re @
uv) re @
rer (_ r@
re (_ 3
A) re (_ r@
@@ -4792,7 +4802,7 @@
_) scar (A ske@
_) scar (a skar
scarc ske@s
sc (i s
sc (L02 s
sci (b s@
sci (_ =skaI
scis (_ =skIs
@@ -5154,14 +5164,15 @@
@) u (late =jU
u (le_ ju:
s) u (le_ ju:
f) ul (fil %Vl
f) ul (fil %Ul
j) u (li u:
@) uli (_ =jUlaI
b) ull Ul
f) ull Ul
p) ull Ul
b) ully UlI
_f) ully UlI
_f) u (lC U
f) u (lcr V
&f) ully (_ @l%I
?8 &f) ully (_ Vl%I
&) u (lous_ =jU
@@ -5291,7 +5302,7 @@
p) un (ish Vn
r) un (i u:n
un (A Vn
un (er ju:n
C) un (er ju:n
_) un (reC@P2 ,Vn
un (regi %Vn

@@ -5381,6 +5392,7 @@
_) wr (Y r

C) w (_ w@
C) w (X U // Welsh names
wh w
wr r
C) we (_ =wI
@@ -5424,6 +5436,8 @@
xure (_ kS%U@

.group y
_) y (_ waI
-) y (- @ // Welsh names
y j
_) y' (CP2 j@
y (C_ I
@@ -5644,6 +5658,7 @@
Ette (_ 'Et
E (tic_ E
Eus (_ I2@s
Ew (_ u:
ob) Ey (_ eI



+ 4
- 3
dictsource/fr_rules View File

@@ -1,7 +1,7 @@
// French translation rules for Espeak

// ***************************************************************************
// * Copyright (C) 2005 to 2011 by Jonathan Duddington *
// * Copyright (C) 2005 to 2010 by Jonathan Duddington *
// * email: [email protected] *
// * *
// * This program is free software; you can redistribute it and/or modify *
@@ -27,7 +27,7 @@
// http://www.fluxnic.net/cicero
//
// Rules are now maintained by Michel Such <[email protected]>
// Last update: 2011-05-20 Michel Such <[email protected]>
// Last update: 2011-08-13 Michel Such <[email protected]>
//

// Letter classes:
@@ -63,7 +63,7 @@
// When these diphtonges are after a consonant folllowing e, e is not mute
.L10 ia ie io ua ue ui uo
.L11 b p
.L12 é è aï al ib ie l om on ré
.L12 é è aï al ib ie iq l om on ym

// Words ending "son" pust sound english if preceded by L13
.L13 d g k l p er hn
@@ -1486,6 +1486,7 @@ A) wn _^_en

_) yahoo (P5 ja'u
ym (L11 E~ // tympan
ym (_ E~ // thym
X) ys (_ is

yn (K E~ // laryngite

+ 80
- 1
dictsource/hu_list View File

@@ -447,7 +447,8 @@ WC ve:tse: $allcaps
LST ElESte: $allcaps
BAR bAR2 $allcaps
//SS EsEs $allcaps

ALT Alt $allcaps
TAB tAb $allcaps
(a . m .) An^n^i||m'int $hasdot
ún u:JnEvEzEt: $hasdot
dr doktoR2 $hasdot
@@ -1773,6 +1774,84 @@ fajták $unstressend
körülményei $unstressend
bízva $unstressend
száma $unstressend
képes $unstressend
számoltak $unstressend
fakadó $unstressend
firtatta $unstressend
ítélték $unstressend
itélték $unstressend
fogják $unstressend
bennem $unstressend
állhat $unstressend
lényege $unstressend
derített $unstressend
gyártotta $unstressend
beszélni $unstressend
számítógéppel $unstressend
változást $unstressend
lettek $unstressend
tapasztalattal $unstressend
súlyát $unstressend
hatnak $unstressend
rugalmas $unstressend
anyagok $unstressend
tárgyak $unstressend
váltak $unstressend
szűrő $unstressend
szűrők $unstressend
vitát $unstressend
tevő $unstressend
lévő $unstressend
ajánlat $unstressend
jelentkezhetnek $unstressend
léphessen $unstressend
építeni $unstressend
darabra $unstressend
figyelmesek $unstressend
láttuk $unstressend
hullott $unstressend
szóltak $unstressend
hallatszott $unstressend
keresték $unstressend
gépeket $unstressend
követte $unstressend
keresik $unstressend
éreztem $unstressend
vitatta $unstressend
vitatja $unstressend
útját $unstressend
nehézségeket $unstressend
város $unstressend
polgármester $unstressend
elkezdődött $unstressend
vezető $unstressend
feladatokat $unstressend
jelzem $unstressend
valósul $unstressend
készül $unstressend
megbízatást $unstressend
polgármestert $unstressend
nyertek $unstressend
került $unstressend
jelezte $unstressend
végezni $unstressend
tartunk $unstressend
személy $unstressend
fizetni $unstressend
Éva $unstressend
bánik $unstressend
kiszolgáló $unstressend
alapul $unstressend
jelezni $unstressend
fogadta $unstressend
kapcsolat $unstressend
tervet $unstressend
szolgáltatását $unstressend
segíti $unstressend
felkerültek $unstressend
mutatni $unstressend
korlátozott $unstressend

// word pairs

(hogy a) h,oJ,A

+ 65
- 6
dictsource/hu_rules View File

@@ -44,7 +44,7 @@

bb (L01 b // only speak one b if followed by a consonant
bbr bR2 //special exception with always need executing
bbj bj //special exception with always need executing

.group c
c ts
@@ -109,7 +109,17 @@ fegyen) c (csoport ts
cs (-sz tS|s //need spokening single ts and single s phoneme
ccs (-sz tS|s //need spokening single ts and single s phoneme
licen) c (sértés ts

_fil) c (csík ts
_pia) c (csarnok ts
_pol) c (csat ts
_mala) c (sivít ts
_kilen) c (csöv ts
_kilen) c (csomó ts
szanité) c (cs ts
pokró) c (cs ts
kul) cs (zörg tS
kartá) cs (zápo tS
ínyen) c (ség ts

.group ch
anar) ch (i h
@@ -285,6 +295,10 @@ standar) d (jegy d
harma) d (szint d
kó) d (jel d
harma) d (sor d
beszé) d (javít d
rekor) d (sugár d
máso) d (szaká d //For example másodszakács, másodszakáccsá words need spokening single d phoneme before s phoneme
_ná) d (söv d //for example nádsövénnyé word

.group dz
fogó) dz (kod ts
@@ -332,6 +346,7 @@ smarag) dz (öld d|z
kapáló) dz z
_ó) dz (ko ts
gyűrű) dz (ik z
burkoló) dz z

.group e
e E
@@ -374,7 +389,9 @@ kapáló) dz z
ggb gb //special exception with always need executing
ggr gR2 //special exception with always need executing
?1 _) goeth gY:tE
_me) ggy (en_ J: //Single meggyen word need spokening longer J: phoneme
me) g (gy g

ggy (L01 J
ggyb Jb //special exception with always need executing
ggyr JR2 //special exception with always need executing
@@ -423,6 +440,17 @@ arcüre) g (gyulladás g
szöve) g (gyűjt g
ta) g (gyűl g
gu) gg (ol g
orszá) g (gyarapod g
anya) g (gyár g
anya) g (gyűjt g
végi) g (gya g
me) ggy (mag J
me) ggy (íz J:
bádo) g (gy g
szö) g (gyár g
han) g (gyakor g
ele) ggy (é J:
_jé) g (gyár g

.group gy
gy J
@@ -530,6 +558,8 @@ harmince) gy (edik J:
e) gy (összeg J:
e) gys (ík J|S //for example egysíkú word need spokening single J and S phoneme
_e) gy (öntet J:
tár) gy (sor J


.group h
h h
@@ -562,6 +592,7 @@ harmince) gy (edik J:
_sz) í (vattak i
_sz) í (vattákk i
_sz) í (vató i
_v) í (zi i //for example vízipipa, vízimentők beginning words need spokening i, not i: phoneme

.group j
j j
@@ -613,6 +644,7 @@ harmince) gy (edik J:
_) közt kYst
k (-k k: //for example marok-körző word need cut one k letter and need spokening k: phoneme only
k-) k //silent with second k phoneme
_játé) kk (liens k: //exceptiof for kk (L01 rule


.group l
@@ -702,7 +734,6 @@ bagate) ll (iz l
bű) n (jel n
negyve) n (yard n
ötve) n (yard n
benzi) n (jegy n
elle) n (javaslat n
késő) n (jövő n
közbe) n (jár n
@@ -745,6 +776,10 @@ helybe) n (jár n
idé) ny (jel n^
vagyo) n (nyilatkozat n //for example vagyonnyilatkozat word need spokening single n phoneme before n^ phoneme, not two n^n^ phoneme.
szí) n (jelzés n
kormá) ny (jelentés n^
benzi) nj nj
mikrofo) n (nyílás n
szí) n (nyom n

.group o
o o
@@ -835,6 +870,9 @@ működé) s (zava S
viselkedé) s (zava S
alkalmazá) s (szerver S
fá) s (szárú S
ritmu) s (zavar S
pedagógu) s (sztrájk S


.group ss
ssz ss2
@@ -843,6 +881,7 @@ alkalmazá) s (szerver S
_má) ssz (ó Ss
mennydörgé) ssz (erű Ss
robbaná) ss S:
hamva) ssz s:
robbaná) ssz (er Ss
danubiu) ss s: //a radio station name
danubiu) ssz s: //a radio station name
@@ -936,7 +975,7 @@ megállapodá) ssz (erű Ss
meglepeté) ssz (erű Ss
motoro) ssz (án Ss
ülé) ssz (ak Ss
tölté) ssz (abályoz Sss
tölté) ssz (abályoz Ss
orvo) ssz (övetség Ss
orvo) ssz (akértő Ss
orvo) ssz (emély Ss
@@ -1022,6 +1061,11 @@ települé) ssz (er Ss //for example településszerkezet word need spok
gyor) ssz (űr Ss //for example gyorsszűrő word need spokening single S and s phoneme
_a) ssz (iszt s //for example the asszisztens word need spokening one s phoneme
eltu) ss (ol S
ellátá) ssz (er Ss
égé) ssz (ag Ss
csapá) ssz (erű Ss
menekülé) ssz (erű Ss
_ökrö) ssz (ekere Ss

.group sz
sz s
@@ -1056,6 +1100,12 @@ rongyo) szs (ák SZ
_ka) sztsze st|sE
szemete) szs (ák SZ
dro) sztsze (rző st|sE //drosztszerződés word need spokening st and single sE phoneme
_búzá) szs (ák SZ
_szene) szs (ák SZ
_szalmá) szs (ák SZ
va) szs (anér SZ
gaboná) szs (ák SZ
va) sz (ápor Sz

.group t
t t
@@ -1175,6 +1225,7 @@ interne) tj (egy tj
álla) tj (ólét tj
dolgoza) tj (avít tj
természe) tj (ár tj
terüle) tj (elöl tj

.group ts
ts (_S2 tS //general rule with word end of ts letters
@@ -1377,7 +1428,7 @@ terüle) ts (áv t|S
_hé) tsz (ob t|s //same as prewious rule
gyakorla) ts (oroz t|S
támogato) ts (ág tS:
já) tsz (hass ts

.group tt
tt t:
@@ -1501,7 +1552,7 @@ _szára) zs (ág SS
találko) z (t s
eszkö) z (sor z
gő) z (síp z
matró) z (sapka z
matró) z (sapk z
nehé) z (súly z
tör) zsz (ászló Z|z
zsz z|s //general exception. Need difference first z and second sz phoneme. eg: rajzszög, rajzszeg, mézszín words.
@@ -1575,6 +1626,14 @@ magyará) z (kod s
pofo) z (kod s
ezkö) z (sáv z
eszkö) z (sáv z
_mé) z (sárg z
tű) z (sáv z
_tí) z (sor z
_szá) z (sor z
ré) z (sisak z
matró) z (zsák z
ré) z (sodrony z
há) z (sarkot z

.group
$ dolla:R2

+ 41
- 18
dictsource/nl_list View File

@@ -150,22 +150,23 @@ een @n $only
ən @-n // char.replacement for 'n
ət t // char.replacement for 't

// pronouns
ik $u
me $u
jij $u
je $u
gij $u
ge $u
u $u
hij $u
zij $u
ze $u
wij $u
we $u
// pronouns (may have -zelf suffix)
ik %Ik
me m@
jij j%EI
je j@
gij Q%EI
ge g@
u %y
hij h%EI
zij z%EI
ze z@
wij v#%EI
we v#@
jullie $u
hen $u
zich $u
hen h%En
zich z%Ix
onszelf Ons'Elf

// possessives
mijn $u
@@ -229,7 +230,7 @@ dat $u $pause // that
hoewel $pause // although
of $u $pause // whether
omdat $pause // because
nadat $u $pause // after
nadat $u2 $pause // after
nudat $pause // now that
sinds $pause // since
tenzij $pause // unless
@@ -953,6 +954,7 @@ mokkel $alt
mormel $alt
mortel $alt
morzel $alt
navel $alt
obstakel $alt
parabel $alt
partikel $alt
@@ -1451,9 +1453,9 @@ onderhandelingsnota ,ond@r'hAnd@lINs,no:ta:
ongastvrij OnQAstvr'EI
ongelooflijk $3
ongemakkelijk $3
ongelukkig $3
//ongelukkig $3
ongerieflijk $3
ongrondwettig $3
//ongrondwettig $3
partijvoorzitters $2
pistache pist'AS
proces $2
@@ -1478,6 +1480,9 @@ vrouwengek $alt3
waarschijnlijk $2
wanen v#a:n@n
wangen v#AN@n
wanluidend $2
wanschapen $2
wantrouwend $2
ziekenhuisbevalling zi:k@nhWysb@vAlIN


@@ -1495,6 +1500,7 @@ Ingrid IN@-*It
Justine Zyst'in
kennedy kEn@dE
Laurent lo:r'An^
Naomi $2
Nys nEIsd'WyzEnt

//Trademarks
@@ -1508,7 +1514,24 @@ google gu:g@l
alexandrië $3
canada kAna:da:
Kinshasa kInS'a:sa:
Nairobi nAjr'o:bi
Napel $alt
Rochefort roS'for
Zelzate zelzat@

(vond dat de) vOn_tA_t@


nadelig $2 // nadelig(e)
nadelige $2
naderhand $3
nadien $2 $only
nadrukke $2 // nadrukkelijk
nafta nAfta:
nalatig $2 // nalatig(e)
nalatige $2
nasaal $2
nasi nAsi
navoel $2 // navoelbaar(/bare)
navulbaar $2


+ 58
- 17
dictsource/nl_rules View File

@@ -1,6 +1,8 @@
// translation rules for Dutch
// This file is UTF-8 encoded

// Suffix rule: SUFX_E eg. S2e means double the vowel before the final consonant

.L01 g k


@@ -34,7 +36,6 @@
aire (_ 'E:r@
air (_ 'Er
@) agne (_ 'An^@
ale (_ 'a:l@
@) ant (_ 'Ant
@) ant (e_ 'Ant
@) ant (en_ 'Ant
@@ -51,7 +52,8 @@
bs (_N ps

baan ba:n
&) baar (_ =ba:r
&) baar (_S4 =ba:r
&) bare (_S4 =ba:r@
_) bij (C@P3 b'EI
_) binnen (P6 b'In@n
_) boven (P5 b'o:v@n
@@ -145,7 +147,7 @@
.group e
e e# // [e:] but change to [@] in unstressed syllables
X) e e: // first syllable in a word
&C) e (_S1qd @
e (_ @
e (CK E
e (x E
@@ -157,6 +159,12 @@
eeuw eU
eu Y:

&C) e (_S1qd @
KAC) e (_S1e @ // remove 'e' and double the vowel
el) e (_+S1qd @
er) e (_+S1qd @
ig) e (_+S1qd @

ea (_ 'e:a:
eau o: //words with French origin
@) ee (_ 'e:
@@ -188,12 +196,17 @@
&) em (_ @m
&) e (ment @
&) e (nissen_ @
&) en (_S2qd @n

&) en (_S2qd @n // double the previous vowel
KAC) en (_S2e @n
el) en (_+S2qd @n
er) en (_+S2qd @n

&) ens (_S3q @ns
ll) en (_S3 @n
&) end (_ @nd
&) ende (_ @nd@
&) enden (_ @nd@n
&) ende (_S1 @
&) enden (_S2 @n
eden e:d@n
&) ent (_$w_alt =@nt
@) ent (_ 'Ent
@@ -205,7 +218,8 @@
@) ent (ste_ 'Ent
ag) ent 'Ent
@j) es (_ @s
@) es (_S2qd 'Es
@) es (_S2qd 'Es // double the previous vowel
KAC) es (_S2e @s
@) essen (_S5qd 'Es@n
@) eres (_S4qd @r'Es
@) eressen (_S7sq @r'Es@n
@@ -268,6 +282,7 @@
.group g
g Q // ph_dutch changes to [x] before unvoiced, NULL after [x]
gg Q
s) g x

_) ge (@P2 Q@
ge (bied Q@
@@ -335,13 +350,13 @@
ie (CtjeX_ 'i
ie (ren_ 'i
ie (rd_ 'i
@) ig (_S2dq @x
@) ige (_S3dq @Q@
@) igen (_ @Q@n
@) iger (_ @Q@r
@) igere (_ @Q@r@
@) igst (_ @Qst
@) igste (_ @Qst@
@) ig (_S2dq =@x
@) ige (_S3dq =@Q@
@) igen (_ =@Q@n
@) iger (_ =@Q@r
@) igere (_ =@Q@r@
@) igst (_ =@Qst
@) igste (_ =@Qst@
ij (_ 'EI
ij (e_ 'EI
@) ij (n_ 'EI
@@ -410,10 +425,21 @@ _) inn (@P2 'I // ?? inneren
n (k$w_alt3 n

_) na (C@@P2 n'a:
_) na (tion na:
_) na (C@ n'a:
_) na (C% nA
_) na (cht nA
_) narci (s n%ArsI
_) na (rc n%A
_) na (der na:
_) na (tion na:
_) nano (@P4 n'a:no:
_) na (polA n%a:
napoleon n%a:po:l@jOn
_) natuur na:t'yr
naturel na:tyr'El
na (tur n%a:
na (vig n%a:
_) na (vr na:
_) na (volg@ n%a:
_) noord (@P5 no:rd
_) nieuws (@P6 n'iws
@@) nis (_S3 nIs
@@ -442,11 +468,13 @@ _) inn (@P2 'I // ?? inneren
_) on (@P2 %On
oo (X 'o:
oon 'o:n // in compounds, eg. telefoongesprek
oo (C_ 'o:
_) oost (@P4 o:st
_) op (@@P2 'Op
_) open (@P4 'o:p@n
_) op (era 'o:p
_) op (tion Op
@at) or (_ 'o:r
ou (che_ u
ouch (en_ uS
_) over (@P4 ,o:v@r
@@ -525,7 +553,7 @@ _) inn (@P2 'I // ?? inneren
s (s
A) s (A z
s (b z
s (g z
s (d z
sc s
sch sx
sch (_ s
@@ -536,6 +564,8 @@ _) inn (@P2 'I // ?? inneren
sj S
@@) s (_S1 s

sc (oop sk
sc (opi sk
&) sel (_ =s@l
&) selen (_ =s@l@n
@) si (o S
@@ -623,6 +653,7 @@ _) inn (@P2 'I // ?? inneren

.group v
v v
s) v f

_) van (@P3 v%An
_) vanzelf (@P7 vAnz,Elf
@@ -642,7 +673,14 @@ _) inn (@P2 'I // ?? inneren
_) wan (@P3 v#'An
_) wan (L01@P3 v#'AN
_) wan (del v#An
_) wanhopig v#Anh'o:p@Q
_) wan (kel v#AN
_) wann (eer v#An
_) wanordelijk v#An_|'Ord@l@k
_) wansmakelijk v#Ansm'a:k@l@k
_) wanstaltig v#Anst'Alt@Q
_) wantrouwig v#Antr'VU@Q
_) wanvoeglijk v#Anv'uxl@k
_) weg (@P3 v#'EQ
_) weg (en v#e:Q
_) weg (e_ v#e:Q // bewegelijk
@@ -664,7 +702,10 @@ _) inn (@P2 'I // ?? inneren
.group z
z z
z (z
s) z

zele (_S4 ze:l@ // common suffix for cities.
@) zelf (_S4 s'Elf
_) zoge (@P4 z,og@
_) zuid (@P4 zWyt


+ 1
- 0
dictsource/ro_rules View File

@@ -329,6 +329,7 @@
ou (_N 'oU
ou (_ ou
o (AAA o
@C) o (riii_ 'o


.group p

+ 3
- 0
dictsource/sk_list View File

@@ -261,6 +261,9 @@ dlh dl-h
stĺp stl:p
plch pl-x
čln tSl-n
plť pl-t;
tĺk tl:k
vlk vl-k

// don't soften (d,n,t) before e,i
aktívni $alt

+ 538
- 527
dictsource/sk_rules
File diff suppressed because it is too large
View File


+ 52
- 3
dictsource/ta_list View File

@@ -89,6 +89,8 @@ _[ id.V||sadUrVm // இட சதுரம்
_] vVlV||sadUrVm // வல சதுரம்
_{ id.V||gVn.Vm // இட கணம்
_} vVlV||gVn.Vm // வல கணம்
< kuRaIvU // குறைவு
> migUdi // மிகுதி
_" me:Rgo:l. // மேற்கோள்
_' ot.RaI||m'e:Rgo:l. // ொற்றை மேற்கோள்
__ ad.ig||ko:d.U // அடிக் கோடு
@@ -111,6 +113,8 @@ U+bf9 ru:ba:j

// abbreviations
ரூ ru:ba:j $dot $only
(பி . ஏ) bije: $dot
(கி . மீ) kilo:mi:t.t.Vr $dot

// numbers
_0 suz.ijVm // சுழியம்
@@ -182,9 +186,50 @@ _1M3 orUko:d.ie:

_dpt _pul.l.i

// drop final [U] when followed by an ordinal suffix
_1o onR
_2o irVn.d.
_3o mu:nR
_4o na:ng
_5o aInd
_6o a:R
_7o ;e:l
_8o ;et.t.
_9o onbVd.
_10o patt
_11o patinonR
_12o pVnnirVn.d.
_19o pattonbVd

_20o irUbVd
_30o muppVd // முப்பது
_40o na:RpVd
_50o aImbVd
_60o aRUbVd
_70o ;ez.UbVd
_80o ;en.bVd
_90o ton.n.u:R

_1Co nu:R
_2Co irUnu:R
_3Co munnu:R
_4Co na:nu:R
_5Co aInu:R
_6Co aRUnu:R
_7Co ;ez.Unu:R
_8Co ;en.n.u:R

_#ம் a:m // ordinal suffix
_#-ம் a:m // ordinal suffix
_#ல் il
_#வது a:vVdU
_#வதும் a:vVdUm
_#வதுமாக a:vVdUma:gV

_#-ம் a:m // ordinal suffix with hyphen
_#-ல் il
_#-வது a:vVdU
_#-வதும் a:vVdUm
_#-வதுமாக a:vVdUma:gV

// English words
tamil தமிழ் $text
@@ -305,7 +350,9 @@ tamil தமிழ் $text
பந்தா $alt
பிரா bra:
ப்ரா $alt
(பி . ஏ) bije:
பலம் $alt
பலமாக $alt
பலமா $alt


// initial த as [d]
@@ -366,6 +413,8 @@ tamil தமிழ் $text
தின $alt
தில் $alt
தன $alt
தடியா $alt
தட $alt


// initial ட
@@ -440,6 +489,7 @@ tamil தமிழ் $text
களிலும் $alt
கடம் $alt
காட் $alt
கிடு $alt



@@ -465,7 +515,6 @@ tamil தமிழ் $text
பைக்கில் baIkkIl
தாங்ஸ் Ta:Nks // thanks
டிபுடி d.EpjUt.i // deputy
டிபன் t.ifVn
ஆகா a:Ha:
ஓகோ o:Ho:
கப் kVp

+ 213
- 34
dictsource/ta_rules
File diff suppressed because it is too large
View File


+ 4
- 4
espeak-data/voices/!v/f1 View File

@@ -1,9 +1,9 @@
language variant
name female1
gender female
gender female 70

pitch 145 200
flutter 7
pitch 140 200
flutter 8
roughness 4
formant 0 115 80 150
formant 1 120 80 180
@@ -15,4 +15,4 @@ formant 6 105 80 150
formant 7 110 70 150
formant 8 110 70 150

stressAdd -10 -10 -20 -20 0 0 40 70
stressAdd -10 -10 -20 -20 0 0 40 60

+ 1
- 1
espeak-data/voices/!v/m1 View File

@@ -3,7 +3,7 @@ name male1
gender male 70

pitch 75 109
flutter 4
flutter 5
roughness 4
consonants 80 100


+ 0
- 1
espeak-data/voices/!v/m7 View File

@@ -13,5 +13,4 @@ formant 6 90 50 100
formant 7 100 50 100
formant 8 100 50 100
voicing 155
fast_test 0 45 75


+ 1
- 0
espeak-data/voices/en/en View File

@@ -1,5 +1,6 @@
name english
language en-uk 2
language en-gb 2
language en 2
gender male


+ 1
- 0
espeak-data/voices/en/en-n View File

@@ -1,6 +1,7 @@
name lancashire
language en-uk-north
language en-uk 3
language en 5
gender male

phonemes en-n

+ 1
- 0
espeak-data/voices/en/en-rp View File

@@ -1,6 +1,7 @@
name english_rp
language en-uk-rp
language en-uk 4
language en 5
gender male

phonemes en-rp

+ 1
- 0
espeak-data/voices/en/en-wi View File

@@ -1,6 +1,7 @@
name en-westindies
language en-wi
language en-uk 4
language en 10
gender male

phonemes en-wi

+ 2
- 0
espeak-data/voices/en/en-wm View File

@@ -1,5 +1,7 @@
name english_wmids
language en-uk-wmids
language en-uk 9
language en 9
gender male

phonemes en-wm

+ 1
- 0
espeak-data/voices/es-la View File

@@ -1,6 +1,7 @@
name spanish-latin-american
language es-la
language es-mx 6
language es 6
gender male

phonemes es-la

+ 2
- 1
espeak-data/voices/fr-be View File

@@ -1,5 +1,6 @@
language fr-be
name french (Belgium)
language fr-be
language fr 8
gender male

dictrules 2

+ 1
- 7
espeak-data/voices/hi View File

@@ -1,9 +1,3 @@
name hindi-test
name hindi
language hi
gender male

translator hi
phonemes hi
dictionary hi

dictrules 1

+ 1
- 0
espeak-data/voices/hy-west View File

@@ -1,5 +1,6 @@
name armenian-west
language hy-west
language hy 8
gender male

// change consonants for West Armenian pronunciation

+ 1
- 1
espeak-data/voices/mb/mb-de5-en View File

@@ -1,5 +1,5 @@
name en-german-5
language en
language en 9
gender female

pitch 140 220

+ 1
- 1
espeak-data/voices/mb/mb-gr2-en View File

@@ -1,5 +1,5 @@
name en-greek
language en 7
language en 9
gender male

pitch 82 117

+ 1
- 1
espeak-data/voices/mb/mb-sw2-en View File

@@ -1,5 +1,5 @@
name en-swedish-f
language en
language en 10
gender female

pitch 140 220

+ 1
- 0
espeak-data/voices/pt-pt View File

@@ -1,5 +1,6 @@
name portugal
language pt-pt
language pt 6
gender male
phonemes pt-pt


+ 146
- 33
phsource/compile_report View File

@@ -1,4 +1,4 @@
74 phoneme tables
76 phoneme tables
new total
base 107 107
consonants 10 116
@@ -17,10 +17,11 @@ consonants 10 116
jbo 2 114
nci 3 123
fi 40 133
et 47 139
fr 59 140
fr-ca 11 140
hi 57 148
ta 22 151
ta 23 152
kn 17 148
ml 21 151
hu 25 122
@@ -31,7 +32,7 @@ consonants 10 116
cs 7 135
hr 25 140
mk 3 141
sr 14 140
sr 14 142
ru 49 137
bg 14 123
it 19 127
@@ -68,12 +69,13 @@ consonants 10 116
ht 11 140
az 10 127
ak 8 109
am 8 123
am 14 112
wo 18 118
dv 14 148
te 16 148
si 24 154
tn 27 119
mt 32 127

Data file Used by
b/b [b] base
@@ -99,6 +101,8 @@ d/d [d] base
[d[] base
[d] base2
[d] fi
[d] et
[d^] et
[d] fr
[d] kn
[d] hu
@@ -106,10 +110,13 @@ d/d [d] base
[d;] pl
[d] hr
[d] sq
[d] mt
d/d_ [d] base
[d[] base
[d] base2
[d] fi
[d] et
[d^] et
[d] fr
[d.] hi
[d] kn
@@ -118,11 +125,14 @@ d/d_ [d] base
[d;] pl
[d] hr
[d] sq
[d] mt
d/d_dnt [d] sr
d/dr [*] base
[d[] base
[d] base2
[d] fi
[d] et
[d^] et
[d] fr
[d.] hi
[dh.] hi
@@ -132,6 +142,7 @@ d/dr [*] base
[d;] pl
[d] hr
[d] sq
[d] mt
d/tap [*;] ro
d/tap1 [*] base
d/tap2 [t#] en
@@ -143,6 +154,7 @@ d/xd [d] base
[dz] consonants
[d] base2
[d] fi
[d] et
[d] fr
[z] fr
[dh] hi
@@ -152,8 +164,10 @@ d/xd [d] base
[d] hr
[d] sr
[d] sq
[d] mt
d/xd3 [dh] hi
d/xd_pzd [d;] pl
d/xd_pzd [d^] et
[d;] pl
d/xdr [d] fr
[d.] hi
[dh.] hi
@@ -247,25 +261,37 @@ g/xg [g] base
g/xgr [g] fr
h/h_ [h] base
[h] fi
[h] et
[<h>] la
[h] mt
h/h@ [h] base
[h] fi
[h] sr
[h] et
[h#] sr
[<h>] la
[h] mt
h/ha [h] base
[h] fi
[h] et
[<h>] la
[h] mt
h/he [h] base
[h] fi
[h] et
[<h>] la
[h] mt
h/hi [h] base
[h] fi
[h] et
[<h>] la
[h] mt
h/ho [h] base
[<h>] la
h/hu [h] base
[<h>] la
h/hu_fi [h] fi
[h] et
[h] mt
j2/_j2 [;] base
j2/j2@ [;] base
j2/j2a [;] base
@@ -368,8 +394,8 @@ l/l_ [l] base
[l/] fr
l/l_@ [l/3] base
[l/] fr
l/l@ [l#] base
[”¦] base
l/l@ [h1ô] base
[l#] base
[l] fr
[l/2] fr
[K] nso
@@ -402,16 +428,16 @@ l/L2_oL [l/2] base
l/L2_uL [l/2] base
l/l_3 [l/] de
l/l_4 [ll] sq
l/la [l#] base
[”¦] base
l/la [h1ô] base
[l#] base
[l] fr
[l/2] fr
[K] nso
[K] tn
l/l_a [l/3] base
[l/] fr
l/le [l#] base
[”¦] base
l/le [h1ô] base
[l#] base
[l] fr
[l/2] fr
[K] nso
@@ -422,8 +448,8 @@ l/L_eL_af [&] af
[&:] af
l/l_front [L] sq
l/l_front_ [l/4] sq
l/li [l#] base
[”¦] base
l/li [h1ô] base
[l#] base
[l] fr
[l/2] fr
[l] zh
@@ -436,8 +462,8 @@ ll/ll [L] bg
ll/_ll [L] bg
l/l_long [l] base
[l] fr
l/lo [l#] base
[”¦] base
l/lo [h1ô] base
[l#] base
[l/2] fr
[K] nso
[K] tn
@@ -446,8 +472,8 @@ l/l_o [l/3] base
l^/l_rfx [l.] base
[l] ru
[l^] ru
l/lu [l#] base
[”¦] base
l/lu [h1ô] base
[l#] base
[l] fr
[l/2] fr
[K] nso
@@ -584,9 +610,11 @@ r2/r2u [r-] en
[r-] tn
r3/r_ [r/] base
[r/] af
[r] et
[r/] tn
r3/r#_ [r#] is
r3/r_n [r/] base
[r] et
r3/r_ru [R4] ru
r3/r_ru2 [R4] ru
r3/r_trill [R2] base
@@ -606,8 +634,10 @@ r3/r_trill3.wav [R3] base
[r] af
[r] tn
r3/r_trill_short [R2] fi
[R2] et
r3/r_trill.wav [R2] base
[R2] fi
[R2] et
[R2] lv
[R] pl
[r*] sr
@@ -620,6 +650,7 @@ r3/r_uvl.wav [r"] base
r3/rx [*] base
[r/] base
[r/] af
[r] et
[r/] fr
[R] fr-ca
[x] pt-pt
@@ -684,8 +715,8 @@ r/xr [r] base
ufric/ch [C] base
[J^] base
ufric/ch_ [C] base
ufric/ch_sr [h] sr
[x] sr
ufric/ch_sr [h#] sr
[x#] sr
ufric/f [f] base
[pF] de
[f] fr
@@ -735,6 +766,7 @@ ufric/sh_pzd2 [S] sr
[S;] zh
ufric/sh_rfx [s.] base
[s.] zh
ufric/s_pal [s^] et
ufric/s_pzd [s;] base
[z;] base
[s;] ro
@@ -753,8 +785,8 @@ ufric/x2 [x2] af
ufric/x_hr [x] base
[x] hr
[x] ru
ufric/x_sr [h] sr
[x] sr
ufric/x_sr [h#] sr
[x#] sr
ufric/xx [X] base
[Q"] base
ustop/c [c] base
@@ -772,9 +804,11 @@ ustop/k_asp [kh] consonants
[kh] zh
[kh] tn
ustop/k_asp2 [k#] ka
ustop/k_ejc [k`] am
ustop/ki [k] base
[k] base2
[c] af
[k] et
[k] fr
[k] lv
[k^] mk
@@ -786,6 +820,7 @@ ustop/ki [k] base
ustop/kl [k] base
[kh] consonants
[k] base2
[k] et
[k] fr
[k] lv
[k] el
@@ -794,11 +829,13 @@ ustop/kl [k] base
[kh] tn
ustop/kr [k] base
[k] base2
[k] et
[k] el
[k] zhy
ustop/k_unasp [k] base
[k-] consonants
[k] base2
[k] et
[k] lv
[k] el
[k] zhy
@@ -845,6 +882,7 @@ ustop/p_unasp [p] base
[p] zh
[p] sq
[p] da
[p`] am
ustop/p_unasp_ [p-] consonants
[p] base2
[p] fr
@@ -865,10 +903,12 @@ ustop/t_ [t] base
[t] lv
[t] sk
[th] zh
[t`] am
ustop/t_dnt [t] base
[t[] base
[t] base2
[t] en-us
[t] et
[dh] hi
[th] hi
[t] hu
@@ -877,7 +917,10 @@ ustop/t_dnt [t] base
ustop/t_dnt2 [t] base2
[d] kn
ustop/t_hi [t[] base
[t] et
[t`] am
ustop/t_pzd [c] base
[t^] et
[t;] pl
ustop/tr [t] base
[t] en-us
@@ -913,6 +956,7 @@ ustop/t_short_ [t] fr
ustop/tsh_pzd [tS;] zh
ustop/tsh_pzd_unasp [tS;] zh
ustop/tsh_sr [tS] sr
ustop/tsh_unasp [tS`] am
ustop/ts_pzd [tS;] base
[Jh] hi
[tS;] ru
@@ -956,6 +1000,7 @@ vdiph2/i@ [i@] en-n
vdiph2/i@_2 [i@] en-wm
vdiph2/ie [i@] en-wi
[ie] fi
[ie] mt
vdiph2/ie_2 [ie] lv
vdiph2/ii@ [i@] en
[i@3] en
@@ -968,10 +1013,12 @@ vdiph2/iu [iU] base2
[iu] zhy
vdiph2/iu_2 [iu] fi
[iu] lv
[iu] mt
vdiph2/iu_3 [iu] af
vdiph2/iu_4 [Iu] cy
[Yu] cy
vdiph2/iy [iy] fi
[iy] mt
vdiph2/o@ [o@] af
[u@] zh
vdiph2/oa [Oa] ro
@@ -982,6 +1029,7 @@ vdiph2/o_oo [o@] en-wi
vdiph2/u#@ [U@] en-sc
vdiph2/uaa [uo] lv
vdiph2/uo [uo] fi
[uo] mt
vdiph2/uu@ [U@] en
[U@] en-n
[U@] en-wm
@@ -997,7 +1045,9 @@ vdiph2/yu [yU] nl
[yu] zh
vdiph2/y-y# [yY] fi
[y@] vi
[yY] mt
vdiph/8u [oU] en-us
[8u] et
[ou] zh
vdiph/aae [aI] en-us
vdiph/aai [ai] lv
@@ -1007,10 +1057,12 @@ vdiph/aai [ai] lv
vdiph/aai_2 [AI] af
[AY] cy
vdiph/aai_3 [ai] fi
[ai] mt
vdiph/aau [au] fi
[au] lv
[aU] is
[aU:] is
[au] mt
vdiph/aau_2 [aU] en-wi
[VU] nl
[aU] la
@@ -1083,6 +1135,7 @@ vdiph/eei_2 [eI] eo
[ei] fi
[ei] lv
[eI] id
[ei] mt
vdiph/eei_3 [eI] sk
[eI] ku
vdiph/eeu [EU] pt
@@ -1095,6 +1148,7 @@ vdiph/eeu_3 [aU] en-n
[aU] en-wm
[eU] ku
vdiph/eey [ey] fi
[ey] mt
vdiph/ei [eI] base2
[e:] nl
[eI] la
@@ -1112,10 +1166,14 @@ vdiph/eu [eU] base2
[eU] vi
[eU] ne
vdiph/eu_2 [eu] fi
vdiph/@i [@I] vi
[eu] mt
vdiph/@i [Yi] et
[@I] vi
[@:I] vi
vdiph/&i [&i] fi
[&i] et
[aI] hi
[i] mt
vdiph/@i_2 [eI] af
[@I] cy
[@Y] cy
@@ -1144,6 +1202,7 @@ vdiph/ooi [OI] en
[oi] lv
[OI] no
[oi] zhy
[oi] mt
vdiph/ooi_2 [OI] af
[oI] eo
vdiph/ooi_3 [OI] en-rp
@@ -1155,6 +1214,7 @@ vdiph/oou [oU] cs
vdiph/ou [ou] fi
[ou] zhy
[oU] ne
[ou] mt
vdiph/ou_2 [oU] sk
[oU] ro
vdiph/ou_3 [oU] is
@@ -1178,6 +1238,7 @@ vdiph/ui_2 [uI] af
vdiph/ui_3 [uI] cy
[uY] cy
vdiph/ui_4 [ui] fi
[ui] mt
vdiph/Vi [VI] ne
vdiph/Vu [@U] af
[VU] ne
@@ -1185,13 +1246,17 @@ vdiph/Vu_2 [oU] en-wm
vdiph/&y [&y] fi
[Wy] nl
vdiph/yi [yi] fi
[yi] et
[yI] grc
[u-I] no
[yi] zh
[yi] mt
vdiph/y#i [Yi] fi
[Yi] mt
vdiph/y#i_2 [Yy] is
[Yy:] is
vdiph/y#y [Yy] fi
[Yy] mt
vdiph/y#y_2 [Yy] af
[eoi] zhy
vdiph/y#y_3 [Y:] nl
@@ -1248,14 +1313,18 @@ voc/Q_less [Q] nl
voc/Q_ulv [Q"] base
voc/v [v] base
[v] fi
[v] et
[v] fr
[v;] ro
[v] mt
voc/v_ [B] base
[v] base
[v] fi
[v] et
[v] fr
[v#] es
[v;] ro
[v] mt
voc/v# [v#] base
voc/v#_ [v#] base
voc/v2 [v#] es
@@ -1317,6 +1386,8 @@ vowel/@- [@-] base
[r*] hr
vowel/& [a] en-rp
[&] fi
[&] et
[&:] et
[&:] hi
[&] lv
[&:] lv
@@ -1365,11 +1436,13 @@ vowel/@_6 [@] en
[W2] fr
vowel/8 [o-] zh
vowel/8_2 [U] en-us
[8] et
[8] sv
vowel/8_3 [eo] zhy
vowel/8_5 [8] ku
vowel/8_6 [V] sq
vowel/8_7 [@] lv
vowel/8_7 [8:] et
[@] lv
vowel/a [a] base
[a] en
[aa] en
@@ -1392,7 +1465,6 @@ vowel/a [a] base
[a] zh
[a] id
[a] sl
[a] am
vowel/a# [a] base2
[a/] base2
[a#] en-sc
@@ -1478,11 +1550,14 @@ vowel/a_5 [a:] ta
[a] tn
vowel/a_6 [a] ca
[a:] vi
[a] am
[a:] wo
vowel/a_7 [a] en
[a] fr
[a] sk
[a] ht
vowel/aa [A] fr-ca
vowel/aa [a:] et
[A] fr-ca
[A] no
[A:] no
[aa] zhy
@@ -1510,13 +1585,17 @@ vowel/aa_6 [A] de
[A:] de
vowel/aa_8 [0] en-us
[A:] en-us
[A] et
[A1] et
[A] nl
[a:] is
vowel/aa_9 [a] fi
[a] et
[a:] hi
[a] ne
[a] pa
[a] ak
[a] mt
vowel/@_bck [@] hi
[@] bg
[@] zh
@@ -1573,6 +1652,8 @@ vowel/e_3 [i] en-n
vowel/e_5 [i] en-sc
vowel/e_6 [e] ht
[e] ak
vowel/e_7 [e] et
[e:] et
vowel/e_8 [E:] de
[e] fr
vowel/ee [E] en-n
@@ -1598,12 +1679,15 @@ vowel/ee_2 [E] cy
[E] pa
vowel/ee#_2 [E-] sv
[E#] sq
[@] am
[e] tn
vowel/ee_3 [&] af
[&:] af
[E] pt
[E] vi
vowel/ee_4 [E] sq
vowel/ee_4 [E] et
[E1] et
[E] sq
vowel/ee_5 [E] en
[E] ak
[E] wo
@@ -1665,6 +1749,7 @@ vowel/e_mid2 [E] af
[e] am
[e] te
[e:] si
[e] mt
vowel/@_fnt [@] en-wi
[@2] en-wi
[@2] hr
@@ -1699,7 +1784,6 @@ vowel/i [i] base
[i] prs
[i] nso
[i] ak
[i] am
[i:] wo
[i:] dv
[i:] te
@@ -1707,11 +1791,14 @@ vowel/i [i] base
vowel/i# [y:] cy
vowel/i_2 [i2] de
[i:] de
[i] et
[i] nl
[i:] la
[i:] sv
vowel/i#_2 [y] am
vowel/i_3 [i] af
[I] et
[I1] et
[i:] sk
vowel/i_4 [i] fi
[i] hu
@@ -1719,6 +1806,7 @@ vowel/i_4 [i] fi
[i:] is
[i] vi
[i] da
[i] mt
vowel/i_5 [i:] en-sc
vowel/i#_5 [y] pt-pt
[i/] pt-pt
@@ -1734,11 +1822,13 @@ vowel/i_6 [i] hi
[i] tr
[i] ku
[i] id
[i] am
[i] dv
[i] te
[i] si
vowel/i#_6 [i.] zh
vowel/i_7 [i] pl
vowel/i_7 [i:] et
[i] pl
[i] sq
vowel/i#_7 [i[] zh
vowel/i_8 [i] fr
@@ -1770,6 +1860,7 @@ vowel/ii# [Y] cy
[i] sq
vowel/ii_2 [I] en
[i] zh
[I] mt
vowel/ii#_2 [y] pl
vowel/ii_3 [I] cy
[I] fi
@@ -1785,7 +1876,8 @@ vowel/ii#_3 [I2] en-us
vowel/ii_4 [I2] en
[I] en-us
[I2] tn
vowel/ii_5 [i] ta
vowel/ii_5 [i1] et
[i] ta
[i] bg
[I] la
[i] zh
@@ -1819,7 +1911,6 @@ vowel/@_low [@] en-rp
[@/] ne
[@] pa
[V] pa
[@] am
[@] si
vowel/@_low2 [@/] en-us
[@2] en-us
@@ -1829,6 +1920,7 @@ vowel/o [o] base2
[oU] en-wi
[o:] de
[o] eo
[o:] et
[o] fr
[o] hi
[o] ta
@@ -1881,6 +1973,9 @@ vowel/oe [W] af
vowel/oe_2 [W] no
vowel/oe_4 [W] sv
vowel/o_mid [U@] en-rp
[O] et
[o] et
[O1] et
[O] fr
[o] hu
[o] bg
@@ -1929,6 +2024,7 @@ vowel/oo_1 [O:] en-n
[o] si
[o:] si
[O] tn
[o] mt
vowel/oo_2 [0] en-sc
[O] cy
[o] cs
@@ -1993,12 +2089,16 @@ vowel/u_2 [u1] fi
[u] am
[u] wo
vowel/u#_2 [u-] sv
vowel/u_3 [u] et
[u:] et
vowel/u#_3 [U] ta
[U:] ta
vowel/u#_4 [U] en-sc
[u:] en-sc
[y] ml
vowel/u_5 [u] sw
vowel/u_5 [U] et
[U1] et
[u] sw
[u] nso
[u] az
[u] tn
@@ -2048,6 +2148,7 @@ vowel/u_bck [u] base2
[u#] rw
[u] ne
[u] pa
[u] mt
vowel/u_bck2 [u] fr
[u:] fr
[u:] la
@@ -2065,6 +2166,7 @@ vowel/uu_3 [u] af
[y] zh
vowel/uu_4 [U] fi
[U] sv
[U] mt
vowel/uu_bck [U] en-wi
[U] fr-ca
[U] hi
@@ -2097,6 +2199,8 @@ vowel/V_6 [V] en-us
vowel/y [y] base2
[y:] de
[y] fi
[y] et
[y:] et
[y] fr
[y:] hu
[y] nl
@@ -2105,16 +2209,20 @@ vowel/y [y] base2
[y] sq
[y] da
[y] az
[y] mt
vowel/y# [Y] base2
[3:] en-wm
[Y:] de
[Y] fi
[Y] et
[Y:] et
[Y] fr
[Y:] hu
[8] nl
[Y] ro
[oe] zhy
[W] tr
[Y] mt
vowel/y## [y] is
vowel/y_2 [y:] la
[y] zh
@@ -2341,6 +2449,7 @@ x/d_ [d] base
[d[] base
[d] base2
[d] fi
[d] et
[d] fr
[d.] hi
[d] kn
@@ -2348,13 +2457,17 @@ x/d_ [d] base
[d] hr
[d] is
[d] sq
[d] mt
x/d_dnt [d[] base
[d] base2
[d] fi
[d] et
[d] kn
[d] hu
[d] pl
x/d_pzd [d;] pl
[d] mt
x/d_pzd [d^] et
[d;] pl
x/dzh [J] base
[dZ] base
x/dzh_ [dZ] base

+ 6
- 3
phsource/ph_english_us View File

@@ -350,9 +350,12 @@ phoneme t
voicingswitch d
lengthmod 2

IF prevPh(isVowel) OR prevPh(n) THEN
IF nextPh(isVowel) AND nextPh(isUnstressed) AND thisPh(notWordStart) AND nextPh(notWordStart) THEN
ChangePhoneme(t#)
IF prevPhW(isVowel) OR prevPhW(n) THEN
IF nextPhW(isVowel) AND nextPh(isUnstressed) THEN
IF next2Ph(n) AND next2Ph(notWordStart) THEN
ELSE
ChangePhoneme(t#)
ENDIF
ENDIF
ENDIF


+ 4
- 2
phsource/ph_serbian View File

@@ -63,7 +63,8 @@ endphoneme


// This is for letter "h" at the beginning of a word
phoneme x
// Use [x] from lang=hr, request by Gašić Dajan 27.06.2011
phoneme x#
vls vel frc
lengthmod 3
IF nextPh(#i) OR nextPh(#e) THEN
@@ -76,7 +77,8 @@ endphoneme


// This is for letter "h" not at the beginning of word
phoneme h
// Use standard [h], request by Gašić Dajan 27.06.2011
phoneme h#
vls vel frc
lengthmod 3
IF nextPh(#@) THEN

+ 5
- 0
phsource/ph_slovak View File

@@ -31,9 +31,14 @@ phoneme e:
FMT(vowel/e_mid)
endphoneme


phoneme a
vowel starttype #a endtype #a
length 120

IF thisPh(isWordEnd) AND thisPh(isUnstressed) THEN
FMT(vowel/a_7)
ENDIF
FMT(vowel/a)
endphoneme


+ 6
- 2
phsource/ph_tamil View File

@@ -29,13 +29,12 @@ endphoneme
phoneme V# // omit if the next phoneme is a vowel
vowel starttype #@ endtype #@
length 130
IF nextPhW(isVowel) THEN
IF nextPhW(isVowel) OR nextPhW(#) THEN
ChangePhoneme(NULL)
ENDIF
ChangePhoneme(V)
endphoneme


phoneme a:
vowel starttype #a endtype #a
length 300
@@ -155,3 +154,8 @@ phoneme : // Lengthen previous vowel by "length"
length 50
endphoneme

phoneme # // a NULL phoneme for 'virama'
virtual
ChangePhoneme(NULL)
endphoneme


+ 9
- 2
phsource/phonemes View File

@@ -1425,7 +1425,7 @@ endphoneme
phoneme q
vls uvl stop
lengthmod 2
Vowelin f1=1 f2=1700 0 200 f3=-300 80 paus f4 rms=30
Vowelin f1=1 f2=1700 0 200 f3=-300 80 gpaus f4 rms=30
Vowelout f1=1 f2=1700 -100 200 f3=-300 80 f4 rms=35

IF nextPh(isPause2) THEN
@@ -1682,6 +1682,9 @@ include ph_nahuatl
phonemetable fi base
include ph_finnish

phonemetable et base
include ph_estonian

phonemetable fr base
include ph_french

@@ -1857,7 +1860,7 @@ include ph_azerbaijani
phonemetable ak base
include ph_akan

phonemetable am base2
phonemetable am base
include ph_amhari

phonemetable wo base
@@ -1874,3 +1877,7 @@ include ph_sinhala

phonemetable tn base
include ph_setswana


phonemetable mt base
include ph_maltese

BIN
phsource/vowel/a#_2 View File


BIN
phsource/vowel/ee#_2 View File


BIN
phsource/w/iw_ View File


BIN
phsource/w/w_ View File


+ 5
- 1
platforms/windows/make_espeak.iss View File

@@ -2,7 +2,7 @@
[Setup]
AppName=eSpeak
AppVerName=eSpeak version 1.45.01
AppVerName=eSpeak version 1.45.05
AppCopyright=Licensed under GNU General Public License version 3. (See file License.txt for details).
WindowVisible=yes
@@ -145,6 +145,7 @@ begin
$1d: Result := 'sv';
$1f: Result := 'tr';
$21: Result := 'id';
$25: Result := 'et';
$26: Result := 'lv';
$2a: Result := 'vi';
$2b: Result := 'hy';
@@ -153,6 +154,7 @@ begin
$2f: Result := 'mk';
$36: Result := 'af';
$39: Result := 'hi';
//$3a: Result := 'mt';
$41: Result := 'sw';
$49: Result := 'ta';
$4b: Result := 'kn';
@@ -230,6 +232,7 @@ begin
'mk': value := $42f;
'ml': value := $44c;
'mn': value := $450;
'mt': value := $43a;
'ne': value := $461;
'nl': value := $413;
'no': value := $414;
@@ -238,6 +241,7 @@ begin
'ro': value := $418;
'ru': value := $419;
'rw': value := $487;
'si': value := $45b;
'sk': value := $41b;
'sq': value := $41c;
'sr': value := $81a;

+ 1
- 1
platforms/windows/make_espeakedit.iss View File

@@ -1,7 +1,7 @@
[Setup]
AppName=eSpeakEdit
AppVerName=eSpeakEdit version 1.45.01
AppVerName=eSpeakEdit version 1.45.05
DefaultDirName={pf}\eSpeak
DefaultGroupName=eSpeak
OutputBaseFilename=setup_espeakedit

+ 14
- 0
src/Makefile View File

@@ -26,6 +26,8 @@ LN_SF = /bin/ln -sf
MKDIR = mkdir -p

AUDIO = portaudio
#AUDIO = portaudio0
#AUDIO = portaudio2
#AUDIO = pulseaudio
#AUDIO = sada

@@ -39,6 +41,16 @@ WAVE=wave.cpp
LIB_AUDIO=-lportaudio
USE_AUDIO=-DUSE_PORTAUDIO
else
ifeq ($(AUDIO),portaudio0)
WAVE=wave.cpp
LIB_AUDIO=/usr/lib/libportaudio.so.0
USE_AUDIO=-DUSE_PORTAUDIO
else
ifeq ($(AUDIO),portaudio2)
WAVE=wave.cpp
LIB_AUDIO=/usr/lib/libportaudio.so.2
USE_AUDIO=-DUSE_PORTAUDIO
else
ifeq ($(AUDIO),sada)
WAVE=wave_sada.cpp
USE_AUDIO=-DUSE_SADA
@@ -47,6 +59,8 @@ WAVE=wave.cpp
endif
endif
endif
endif
endif

speak_SOURCES = speak.cpp compiledict.cpp dictionary.cpp intonation.cpp \
readclause.cpp setlengths.cpp numbers.cpp synth_mbrola.cpp \

+ 1
- 1
src/compiledata.cpp View File

@@ -350,7 +350,7 @@ static keywtab_t keywords[] = {
{"glstop", tTRANSITION, 8},
{"lenadd", tTRANSITION, 9},
{"f4", tTRANSITION, 10},
{"paus", tTRANSITION, 11},
{"gpaus", tTRANSITION, 11},
{"colr=", tTRANSITION, 12},
{"amp=", tTRANSITION, 13}, // set rms of 1st frame as fraction of rms of 2nd frame (1/30ths)


+ 14
- 3
src/dictionary.cpp View File

@@ -617,8 +617,8 @@ void GetTranslatedPhonemeString(char *phon_out, int n_phon_out)
*/

int ix;
int len;
int max_len;
unsigned int len;
unsigned int max_len;
int phon_out_ix=0;
int stress;
unsigned int c;
@@ -2928,7 +2928,7 @@ static const char *LookupDict2(Translator *tr, const char *word, const char *wor
const char *word_end;
const char *word1;
int wflags = 0;
int wflags2;
// int wflags2;
char word_buf[N_WORD_BYTES+1];

if(wtab != NULL)
@@ -3497,6 +3497,17 @@ int RemoveEnding(Translator *tr, char *word, int end_type, char *word_copy)
if(end_type & SUFX_E)
{
if(tr->translator_name == L('n','l'))
{
if(((word_end[0] & 0x80) == 0) && ((word_end[-1] & 0x80) == 0) && IsVowel(tr, word_end[-1]) && IsLetter(tr, word_end[0], LETTERGP_C) && !IsVowel(tr, word_end[-2]))
{
//double the vowel before the (ascii) final consonant
word_end[1] = word_end[0];
word_end[0] = word_end[-1];
word_end[2] = ' ';
}
}
else
if(tr->translator_name == L('e','n'))
{
// add 'e' to end of stem

+ 3
- 2
src/mbrowrap.cpp View File

@@ -123,6 +123,7 @@ static void close_pipes(int p1[2], int p2[2], int p3[2])
static int start_mbrola(const char *voice_path)
{
int error, p_stdin[2], p_stdout[2], p_stderr[2];
ssize_t written;
char charbuf[20];

if (mbr_state != MBR_INACTIVE) {
@@ -151,7 +152,7 @@ static int start_mbrola(const char *voice_path)
dup2(p_stderr[1], 2) == -1) {
snprintf(mbr_errorbuf, sizeof(mbr_errorbuf),
"dup2(): %s\n", strerror(errno));
write(p_stderr[1], mbr_errorbuf, strlen(mbr_errorbuf));
written = write(p_stderr[1], mbr_errorbuf, strlen(mbr_errorbuf));
_exit(1);
}

@@ -168,7 +169,7 @@ static int start_mbrola(const char *voice_path)
/* if execution reaches this point then the exec() failed */
snprintf(mbr_errorbuf, sizeof(mbr_errorbuf),
"mbrola: %s\n", strerror(errno));
write(2, mbr_errorbuf, strlen(mbr_errorbuf));
written = write(2, mbr_errorbuf, strlen(mbr_errorbuf));
_exit(1);
}


+ 2
- 2
src/numbers.cpp View File

@@ -1590,13 +1590,13 @@ static int TranslateNumber_1(Translator *tr, char *word, char *ph_out, unsigned
int suffix_ix;
int skipwords = 0;
char *p;
char string[20]; // for looking up entries in **_list
char string[32]; // for looking up entries in **_list
char buf1[100];
char ph_append[50];
char ph_buf[200];
char ph_buf2[50];
char ph_zeros[50];
char suffix[20];
char suffix[30]; // string[] must be long enough for sizeof(suffix)+2
char buf_digit_lookup[50];

static const char str_pause[2] = {phonPAUSE_NOLINK,0};

+ 4
- 2
src/phonemelist.cpp View File

@@ -190,9 +190,11 @@ void MakePhonemeList(Translator *tr, int post_pause, int start_sentence)
if(regression & 0x2)
{
// [v] amd [v;] don't cause regression, or [R^]
if((ph->mnemonic == 'v') || (ph->mnemonic == ((';'<<8)+'v')) || ((ph->mnemonic & 0xff)== 'R'))
if(((ph->mnemonic & 0xff) == 'v') || ((ph->mnemonic & 0xff)== 'R'))
{
stop_propagation = 1;
if(regression & 0x10)
voicing = 0;
}
}

@@ -247,7 +249,7 @@ void MakePhonemeList(Translator *tr, int post_pause, int start_sentence)
// stop propagation at a word boundary
voicing = 0;
}
if(regression & 0x10)
if(regression & 0x100)
{
// devoice word-final consonants, unless propagating voiced
if(voicing == 0)

+ 46
- 12
src/readclause.cpp View File

@@ -164,7 +164,7 @@ static const unsigned int punct_attributes [] = { 0,
// frame 0 is for the defaults, before any ssml tags.
typedef struct {
int tag_type;
int voice_variant;
int voice_variant_number;
int voice_gender;
int voice_age;
char voice_name[40];
@@ -175,6 +175,8 @@ typedef struct {
static int n_ssml_stack;
static SSML_STACK ssml_stack[N_SSML_STACK];

static espeak_VOICE base_voice;
static char base_voice_variant_name[40] = {0};
static char current_voice_id[40] = {0};


@@ -1037,19 +1039,21 @@ static const char *VoiceFromStack()
// Use the voice properties from the SSML stack to choose a voice, and switch
// to that voice if it's not the current voice
int ix;
const char *p;
SSML_STACK *sp;
const char *v_id;
int voice_name_specified;
int voice_found;
espeak_VOICE voice_select;
char voice_name[40];
static char voice_name[40];
char language[40];
char buf[80];

strcpy(voice_name,ssml_stack[0].voice_name);
strcpy(language,ssml_stack[0].language);
voice_select.age = ssml_stack[0].voice_age;
voice_select.gender = ssml_stack[0].voice_gender;
voice_select.variant = ssml_stack[0].voice_variant;
voice_select.variant = ssml_stack[0].voice_variant_number;
voice_select.identifier = NULL;

for(ix=0; ix<n_ssml_stack; ix++)
@@ -1069,15 +1073,32 @@ static const char *VoiceFromStack()
if(sp->language[0] != 0)
{
strcpy(language, sp->language);

// is this language provided by the base voice?
p = base_voice.languages;
while(*p++ != 0)
{
if(strcmp(p, language) == 0)
{
// yes, change the language to the main language of the base voice
strcpy(language, &base_voice.languages[1]);
break;
}
p += (strlen(p) + 1);
}
if(voice_name_specified == 0)
voice_name[0] = 0; // forget a previous voice name if a language is specified
}
if(sp->voice_gender != 0)
{
voice_select.gender = sp->voice_gender;
}

if(sp->voice_age != 0)
voice_select.age = sp->voice_age;
if(sp->voice_variant != 0)
voice_select.variant = sp->voice_variant;
if(sp->voice_variant_number != 0)
voice_select.variant = sp->voice_variant_number;
}

voice_select.name = voice_name;
@@ -1085,6 +1106,14 @@ static const char *VoiceFromStack()
v_id = SelectVoice(&voice_select, &voice_found);
if(v_id == NULL)
return("default");

if((strchr(v_id, '+') == NULL) && ((voice_select.gender == 0) || (voice_select.gender == base_voice.gender)) && (base_voice_variant_name[0] != 0))
{
// a voice variant has not been selected, use the original voice variant
sprintf(buf, "%s+%s", v_id, base_voice_variant_name);
strncpy0(voice_name, buf, sizeof(voice_name));
return(voice_name);
}
return(v_id);
} // end of VoiceFromStack

@@ -1389,8 +1418,8 @@ int AddNameData(const char *name, int wide)
} // end of AddNameData


void SetVoiceStack(espeak_VOICE *v)
{//================================
void SetVoiceStack(espeak_VOICE *v, const char *variant_name)
{//==========================================================
SSML_STACK *sp;
sp = &ssml_stack[0];

@@ -1402,10 +1431,12 @@ void SetVoiceStack(espeak_VOICE *v)
if(v->languages != NULL)
strcpy(sp->language,v->languages);
if(v->name != NULL)
strcpy(sp->voice_name,v->name);
sp->voice_variant = v->variant;
strncpy0(sp->voice_name, v->name, sizeof(sp->voice_name));
sp->voice_variant_number = v->variant;
sp->voice_age = v->age;
sp->voice_gender = v->gender;
strncpy0(base_voice_variant_name, variant_name, sizeof(base_voice_variant_name));
memcpy(&base_voice, &current_voice_selected, sizeof(base_voice));
}


@@ -1467,7 +1498,7 @@ static int GetVoiceAttributes(wchar_t *pw, int tag_type)

attrcopy_utf8(ssml_sp->language,lang,sizeof(ssml_sp->language));
attrcopy_utf8(ssml_sp->voice_name,name,sizeof(ssml_sp->voice_name));
ssml_sp->voice_variant = attrnumber(variant,1,0)-1;
ssml_sp->voice_variant_number = attrnumber(variant,1,0)-1;
ssml_sp->voice_age = attrnumber(age,0,0);
ssml_sp->voice_gender = attrlookup(gender,mnem_gender);
ssml_sp->tag_type = tag_type;
@@ -1647,6 +1678,7 @@ static int ProcessSsmlTag(wchar_t *xml_buf, char *outbuf, int &outix, int n_outb
{"reduced",2},
{"moderate",3},
{"strong",4},
{"x-strong",5},
{NULL,-1}};

static const char *prosody_attr[5] = {
@@ -1735,14 +1767,16 @@ static int ProcessSsmlTag(wchar_t *xml_buf, char *outbuf, int &outix, int n_outb

if(translator->langopts.tone_language == 1)
{
static unsigned char emphasis_to_pitch_range[] = {50,50,40,70,90,90};
static unsigned char emphasis_to_volume[] = {100,100,70,110,140,140};
static unsigned char emphasis_to_pitch_range[] = {50,50,40,70,90,100};
static unsigned char emphasis_to_volume[] = {100,100,70,110,135,150};
// tone language (eg.Chinese) do emphasis by increasing the pitch range.
sp->parameter[espeakRANGE] = emphasis_to_pitch_range[value];
sp->parameter[espeakVOLUME] = emphasis_to_volume[value];
}
else
{
static unsigned char emphasis_to_volume2[] = {100,100,75,100,120,150};
sp->parameter[espeakVOLUME] = emphasis_to_volume2[value];
sp->parameter[espeakEMPHASIS] = value;
}
ProcessParamStack(outbuf, outix);

+ 1
- 1
src/speak.cpp View File

@@ -428,7 +428,7 @@ static int initialise(void)
fprintf(stderr,"Wrong version of espeak-data 0x%x (expects 0x%x) at %s\n",result,version_phdata,path_home);
}
LoadConfig();
SetVoiceStack(NULL);
SetVoiceStack(NULL, "");
SynthesizeInit();

for(param=0; param<N_SPEECH_PARAM; param++)

+ 2
- 3
src/speak_lib.cpp View File

@@ -47,7 +47,6 @@
#include "wave.h"

unsigned char *outbuf=NULL;
extern espeak_VOICE voice_selected;

espeak_EVENT *event_list=NULL;
int event_list_ix=0;
@@ -391,8 +390,8 @@ static int initialise(int control)
fprintf(stderr,"Wrong version of espeak-data 0x%x (expects 0x%x) at %s\n",result,version_phdata,path_home);
}

memset(&voice_selected,0,sizeof(voice_selected));
SetVoiceStack(NULL);
memset(&current_voice_selected,0,sizeof(current_voice_selected));
SetVoiceStack(NULL, "");
SynthesizeInit();
InitNamedata();


+ 2
- 1
src/synthdata.cpp View File

@@ -35,7 +35,7 @@
#include "translate.h"
#include "wave.h"

const char *version_string = "1.45.31 25.Jun.11";
const char *version_string = "1.45.40 23.Aug.11";
const int version_phdata = 0x014500;

int option_device_number = -1;
@@ -512,6 +512,7 @@ void LoadConfig(void)
}
}
}
fclose(f);
} // end of LoadConfig



+ 1
- 1
src/synthesize.cpp View File

@@ -762,7 +762,7 @@ if(voice->klattv[0])
}

if(flags & 0x40)
DoPause(12,0); // add a short pause after the consonant
DoPause(20,0); // add a short pause after the consonant

if(flags & 16)
return(len);

+ 15
- 6
src/tr_languages.cpp View File

@@ -342,7 +342,7 @@ Translator *SelectTranslator(const char *name)
static const short stress_lengths_fr[8] = {190, 170, 190, 200, 0, 0, 190, 240};
static const unsigned char stress_amps_fr[8] = {18,16, 18,18, 18,18, 18,18 };

static const unsigned char stress_amps_sk[8] = {17,17, 20,20, 20,22, 22,21 };
static const unsigned char stress_amps_sk[8] = {17,16, 20,20, 20,22, 22,21 };
static const short stress_lengths_sk[8] = {190,190, 210,210, 0,0, 210,210};

static const short stress_lengths_ta[8] = {200, 200, 210, 210, 0, 0, 230, 230};
@@ -379,6 +379,7 @@ Translator *SelectTranslator(const char *name)
tr->langopts.stress_flags = 0x0024; // don't use secondary stress
tr->langopts.length_mods0 = tr->langopts.length_mods; // don't lengthen vowels in the last syllable
tr->langopts.param[LOPT_UNPRONOUNCABLE] = 1; // disable check for unpronouncable words
tr->langopts.numbers = NUM_OMIT_1_HUNDRED;
}
break;

@@ -394,7 +395,7 @@ Translator *SelectTranslator(const char *name)
SetCyrillicLetters(tr);
SetLetterVowel(tr,0x2a);
tr->langopts.param[LOPT_UNPRONOUNCABLE] = 0x432; // [v] don't count this character at start of word
tr->langopts.param[LOPT_REGRESSIVE_VOICING] = 0x17; // devoice at end of word, and change voicing to match a following consonant (except v)
tr->langopts.param[LOPT_REGRESSIVE_VOICING] = 0x107; // devoice at end of word, and change voicing to match a following consonant (except v)
tr->langopts.param[LOPT_REDUCE] = 2;
tr->langopts.stress_rule = STRESSPOSN_2R;
tr->langopts.numbers = NUM_DECIMAL_COMMA | NUM_ALLOW_SPACE | NUM_OMIT_1_HUNDRED | NUM_HUNDRED_AND | NUM_AND_UNITS | NUM_SINGLE_AND | NUM_ROMAN | NUM_ROMAN_ORDINAL | NUM_ROMAN_CAPITALS ;
@@ -468,7 +469,7 @@ Translator *SelectTranslator(const char *name)
tr->langopts.word_gap = 0x8; // don't use linking phonemes
tr->langopts.vowel_pause = 0x30;
tr->langopts.param[LOPT_PREFIXES] = 1;
tr->langopts.param[LOPT_REGRESSIVE_VOICING] = 0x10; // devoice at end of word
tr->langopts.param[LOPT_REGRESSIVE_VOICING] = 0x100; // devoice at end of word
tr->langopts.param[LOPT_LONG_VOWEL_THRESHOLD] = 175/2;
tr->langopts.numbers = NUM_DECIMAL_COMMA | NUM_SWAP_TENS | NUM_ALLOW_SPACE | NUM_ORDINAL_DOT | NUM_ROMAN;
@@ -954,6 +955,14 @@ SetLengthMods(tr,3); // all equal
}
break;

case L('m','t'): // Maltese
{
tr->charset_a0 = charsets[3]; // ISO-8859-3
tr->langopts.param[LOPT_REGRESSIVE_VOICING] = 0x100; // devoice at end of word
tr->langopts.stress_rule = STRESSPOSN_2R; // penultimate
tr->langopts.numbers = 1;
}
break;

case L('n','l'): // Dutch
{
@@ -963,7 +972,7 @@ SetLengthMods(tr,3); // all equal
tr->langopts.vowel_pause = 0x30; // ??
tr->langopts.param[LOPT_DIERESES] = 1;
tr->langopts.param[LOPT_PREFIXES] = 1;
tr->langopts.param[LOPT_REGRESSIVE_VOICING] = 0x10; // devoice at end of word
tr->langopts.param[LOPT_REGRESSIVE_VOICING] = 0x100; // devoice at end of word
SetLetterVowel(tr,'y');

tr->langopts.numbers = NUM_DECIMAL_COMMA | NUM_SWAP_TENS | NUM_OMIT_1_HUNDRED | NUM_OMIT_1_THOUSAND | NUM_ALLOW_SPACE | NUM_1900 | NUM_ORDINAL_DOT;
@@ -1005,7 +1014,7 @@ SetLengthMods(tr,3); // all equal
tr->charset_a0 = charsets[2]; // ISO-8859-2
tr->langopts.stress_rule = STRESSPOSN_2R;
tr->langopts.stress_flags = 0x6; // mark unstressed final syllables as diminished
tr->langopts.param[LOPT_REGRESSIVE_VOICING] = 0x8;
tr->langopts.param[LOPT_REGRESSIVE_VOICING] = 0x9;
tr->langopts.max_initial_consonants = 7; // for example: wchrzczony :)
tr->langopts.numbers = NUM_DECIMAL_COMMA | NUM_ALLOW_SPACE | NUM_DFRACTION_2;
tr->langopts.numbers2 = 0x40;
@@ -1123,7 +1132,7 @@ SetLengthMods(tr,3); // all equal
tr->charset_a0 = charsets[2]; // ISO-8859-2
tr->langopts.stress_rule = STRESSPOSN_2R; // Temporary
tr->langopts.stress_flags = 0x20;
tr->langopts.param[LOPT_REGRESSIVE_VOICING] = 0x13;
tr->langopts.param[LOPT_REGRESSIVE_VOICING] = 0x103;
tr->langopts.numbers = NUM_DECIMAL_COMMA | NUM_ALLOW_SPACE | NUM_SWAP_TENS | NUM_OMIT_1_HUNDRED | NUM_DFRACTION_2 | NUM_ORDINAL_DOT | NUM_ROMAN;
tr->langopts.numbers2 = 0x100; // plural forms of millions etc
tr->langopts.thousands_sep = ' '; // don't allow dot as thousands separator

+ 41
- 27
src/translate.cpp View File

@@ -1563,6 +1563,39 @@ static int CountSyllables(unsigned char *phonemes)
}


void Word_EmbeddedCmd()
{//====================
// Process embedded commands for emphasis, sayas, and break
int embedded_cmd;
int value;

do
{
embedded_cmd = embedded_list[embedded_read++];
value = embedded_cmd >> 8;

switch(embedded_cmd & 0x1f)
{
case EMBED_Y:
option_sayas = value;
break;

case EMBED_F:
option_emphasis = value;
break;

case EMBED_B:
// break command
if(value == 0)
pre_pause = 0; // break=none
else
pre_pause += value;
break;
}
} while(((embedded_cmd & 0x80) == 0) && (embedded_read < embedded_ix));
} // end of Word_EmbeddedCmd


int SetTranslator2(const char *new_language)
{//=========================================
// Set translator2 to a second language
@@ -1603,8 +1636,6 @@ static int TranslateWord2(Translator *tr, char *word, WORD_TAB *wtab, int pre_pa
int next_tone=0;
unsigned char *p;
int srcix;
int embedded_cmd;
int value;
int found_dict_flag;
unsigned char ph_code;
PHONEME_LIST2 *plist2;
@@ -1646,30 +1677,7 @@ static int TranslateWord2(Translator *tr, char *word, WORD_TAB *wtab, int pre_pa
{
embedded_flag = SFLAG_EMBEDDED;

do
{
embedded_cmd = embedded_list[embedded_read++];
value = embedded_cmd >> 8;

switch(embedded_cmd & 0x1f)
{
case EMBED_Y:
option_sayas = value;
break;
case EMBED_F:
option_emphasis = value;
break;
case EMBED_B:
// break command
if(value == 0)
pre_pause = 0; // break=none
else
pre_pause += value;
break;
}
} while((embedded_cmd & 0x80) == 0);
Word_EmbeddedCmd();
}

if((word[0] == 0) || (word_flags & FLAG_DELETE_WORD))
@@ -3208,7 +3216,7 @@ if((c == '/') && (tr->langopts.testing & 2) && IsDigit09(next_in) && IsAlpha(pre
}
}

if((dict_flags & (FLAG_ALLOW_DOT | FLAG_NEEDS_DOT)) && (ix == word_count-1) && (terminator & CLAUSE_DOT))
if((dict_flags & (FLAG_ALLOW_DOT | FLAG_NEEDS_DOT)) && (ix == word_count - 1 - dictionary_skipwords) && (terminator & CLAUSE_DOT))
{
// probably an abbreviation such as Mr. or B. rather than end of sentence
clause_pause = 10;
@@ -3227,6 +3235,12 @@ if((c == '/') && (tr->langopts.testing & 2) && IsDigit09(next_in) && IsAlpha(pre
}
}

if(embedded_read < embedded_ix)
{
// any embedded commands not yet processed?
Word_EmbeddedCmd();
}

for(ix=0; ix<2; ix++)
{
// terminate the clause with 2 PAUSE phonemes

+ 4
- 2
src/translate.h View File

@@ -266,10 +266,12 @@ extern const int param_defaults[N_SPEECH_PARAM];
#define LOPT_PREFIXES 3

// non-zero, change voiced/unoiced to match last consonant in a cluster
// bit 0=use regressive voicing
// bit 1=LANG=cz,bg don't propagate over [v]
// bit 2=don't propagate acress word boundaries
// bit 3=LANG=pl, propagate over liquids and nasals
// bit 4=devoice word-final consonants
// bit 4=LANG=cz,sk don't progagate to [v]
// bit 8=devoice word-final consonants
#define LOPT_REGRESSIVE_VOICING 4

// 0=default, 1=no check, other allow this character as an extra initial letter (default is 's')
@@ -666,7 +668,7 @@ int TranslateWord(Translator *tr, char *word1, int next_pause, WORD_TAB *wtab);
void *TranslateClause(Translator *tr, FILE *f_text, const void *vp_input, int *tone, char **voice_change);
int ReadClause(Translator *tr, FILE *f_in, char *buf, short *charix, int *charix_top, int n_buf, int *tone_type, char *voice_change);

void SetVoiceStack(espeak_VOICE *v);
void SetVoiceStack(espeak_VOICE *v, const char *variant_name);
void InterpretPhoneme(Translator *tr, int control, PHONEME_LIST *plist, PHONEME_DATA *phdata);
void InterpretPhoneme2(int phcode, PHONEME_DATA *phdata);


+ 1
- 0
src/voice.h View File

@@ -69,6 +69,7 @@ typedef struct {
// percentages shown to user, ix=N_PEAKS means ALL peaks
extern USHORT voice_pcnt[N_PEAKS+1][3];

extern espeak_VOICE current_voice_selected;

extern voice_t *voice;
extern int tone_points[12];

+ 49
- 35
src/voices.cpp View File

@@ -66,7 +66,7 @@ static int n_voices_list = 0;
static espeak_VOICE *voices_list[N_VOICES_LIST];
static int len_path_voices;

espeak_VOICE voice_selected;
espeak_VOICE current_voice_selected;


enum {
@@ -564,9 +564,9 @@ voice_t *LoadVoice(const char *vname, int control)
int pitch1;
int pitch2;

static char voice_identifier[40]; // file name for voice_selected
static char voice_name[40]; // voice name for voice_selected
static char voice_languages[100]; // list of languages and priorities for voice_selected
static char voice_identifier[40]; // file name for current_voice_selected
static char voice_name[40]; // voice name for current_voice_selected
static char voice_languages[100]; // list of languages and priorities for current_voice_selected

strcpy(voicename,vname);
if(voicename[0]==0)
@@ -635,9 +635,9 @@ voice_t *LoadVoice(const char *vname, int control)
voice_name[0] = 0;
voice_languages[0] = 0;

voice_selected.identifier = voice_identifier;
voice_selected.name = voice_name;
voice_selected.languages = voice_languages;
current_voice_selected.identifier = voice_identifier;
current_voice_selected.name = voice_name;
current_voice_selected.languages = voice_languages;
}
else
{
@@ -720,11 +720,11 @@ voice_t *LoadVoice(const char *vname, int control)

case V_GENDER:
{
int age;
int age = 0;
char vgender[80];
sscanf(p,"%s %d",vgender,&age);
voice_selected.gender = LookupMnem(genders,vgender);
voice_selected.age = age;
current_voice_selected.gender = LookupMnem(genders,vgender);
current_voice_selected.age = age;
}
break;

@@ -1029,23 +1029,26 @@ voice_t *LoadVoice(const char *vname, int control)
} // end of LoadVoice


static char *ExtractVoiceVariantName(char *vname, int variant_num)
{//===============================================================
static char *ExtractVoiceVariantName(char *vname, int variant_num, int add_dir)
{//===========================================================================
// Remove any voice variant suffix (name or number) from a voice name
// Returns the voice variant name

char *p;
static char variant_name[20];
static char variant_name[40];
char variant_prefix[5];

variant_name[0] = 0;
sprintf(variant_prefix,"!v%c",PATHSEP);
if(add_dir == 0)
variant_prefix[0] = 0;

if(vname != NULL)
{
if((p = strchr(vname,'+')) != NULL)
{
// The voice name has a +variant suffix
variant_num = 0;
*p++ = 0; // delete the suffix from the voice name
if(isdigit(*p))
{
@@ -1054,8 +1057,7 @@ static char *ExtractVoiceVariantName(char *vname, int variant_num)
else
{
// voice variant name, not number
strcpy(variant_name,variant_prefix);
strncpy0(&variant_name[3],p,sizeof(variant_name)-3);
sprintf(variant_name, "%s%s", variant_prefix, p);
}
}
}
@@ -1083,7 +1085,7 @@ voice_t *LoadVoiceVariant(const char *vname, int variant_num)
char buf[60];

strncpy0(buf,vname,sizeof(buf));
variant_name = ExtractVoiceVariantName(buf,variant_num);
variant_name = ExtractVoiceVariantName(buf,variant_num, 1);

if((v = LoadVoice(buf,0)) == NULL)
return(NULL);
@@ -1319,15 +1321,17 @@ static int SetVoiceScores(espeak_VOICE *voice_select, espeak_VOICE **voices, int



espeak_VOICE *SelectVoiceByName(espeak_VOICE **voices, const char *name)
{//=====================================================================
espeak_VOICE *SelectVoiceByName(espeak_VOICE **voices, const char *name2)
{//======================================================================
int ix;
int match_fname = -1;
int match_fname2 = -1;
int match_name = -1;
const char *id;
const char *id; // this is the filename within espeak-data/voices
char *variant_name;
int last_part_len;
char last_part[41];
char name[40];

if(voices == NULL)
{
@@ -1336,6 +1340,13 @@ espeak_VOICE *SelectVoiceByName(espeak_VOICE **voices, const char *name)
voices = voices_list;
}

strncpy0(name, name2, sizeof(name));
if((variant_name = strchr(name, '+')) != NULL)
{
*variant_name = 0;
variant_name++;
}

sprintf(last_part,"%c%s",PATHSEP,name);
last_part_len = strlen(last_part);

@@ -1347,14 +1358,17 @@ espeak_VOICE *SelectVoiceByName(espeak_VOICE **voices, const char *name)
break;
}
else
if(strcmp(name,id = voices[ix]->identifier)==0)
{
match_fname = ix; // matching identifier, use this if no matching name
}
else
if(strcmp(last_part,&id[strlen(id)-last_part_len])==0)
{
match_fname2 = ix;
id = voices[ix]->identifier;
if(strcmp(name, id)==0)
{
match_fname = ix; // matching identifier, use this if no matching name
}
else
if(strcmp(last_part,&id[strlen(id)-last_part_len])==0)
{
match_fname2 = ix;
}
}
}

@@ -1414,7 +1428,7 @@ char const *SelectVoice(espeak_VOICE *voice_select, int *found)
}
strncpy0(buf,voice_select2.name,sizeof(buf));
variant_name = ExtractVoiceVariantName(buf,0);
variant_name = ExtractVoiceVariantName(buf,0,0);

vp = SelectVoiceByName(voices_list,buf);
if(vp != NULL)
@@ -1425,7 +1439,7 @@ char const *SelectVoice(espeak_VOICE *voice_select, int *found)
{
if(variant_name[0] != 0)
{
sprintf(voice_id,"%s+%s",vp->identifier,&variant_name[3]); // omit the !v/ from variant_name
sprintf(voice_id,"%s+%s", vp->identifier, variant_name);
return(voice_id);
}

@@ -1512,8 +1526,8 @@ char const *SelectVoice(espeak_VOICE *voice_select, int *found)

if(vp->variant != 0)
{
variant_name = ExtractVoiceVariantName(NULL,vp->variant);
sprintf(voice_id,"%s+%s",vp->identifier,&variant_name[3]);
variant_name = ExtractVoiceVariantName(NULL, vp->variant, 0);
sprintf(voice_id,"%s+%s", vp->identifier, variant_name);
return(voice_id);
}

@@ -1671,7 +1685,7 @@ espeak_ERROR SetVoiceByName(const char *name)
static char buf[60];

strncpy0(buf,name,sizeof(buf));
variant_name = ExtractVoiceVariantName(buf,0);
variant_name = ExtractVoiceVariantName(buf, 0, 1);

memset(&voice_selector,0,sizeof(voice_selector));
// voice_selector.name = buf;
@@ -1688,7 +1702,7 @@ espeak_ERROR SetVoiceByName(const char *name)
}

DoVoiceChange(voice);
SetVoiceStack(&voice_selector);
SetVoiceStack(&voice_selector, variant_name);
return(EE_OK);
}

@@ -1704,7 +1718,7 @@ espeak_ERROR SetVoiceByName(const char *name)
LoadVoice(variant_name,2);
}
DoVoiceChange(voice);
SetVoiceStack(&voice_selector);
SetVoiceStack(&voice_selector, variant_name);
return(EE_OK);
}
}
@@ -1725,7 +1739,7 @@ espeak_ERROR SetVoiceByProperties(espeak_VOICE *voice_selector)

LoadVoiceVariant(voice_id,0);
DoVoiceChange(voice);
SetVoiceStack(voice_selector);
SetVoiceStack(voice_selector, "");

return(EE_OK);
} // end of SetVoiceByProperties
@@ -1795,7 +1809,7 @@ ESPEAK_API const espeak_VOICE **espeak_ListVoices(espeak_VOICE *voice_spec)

ESPEAK_API espeak_VOICE *espeak_GetCurrentVoice(void)
{//==================================================
return(&voice_selected);
return(&current_voice_selected);
}

#pragma GCC visibility pop

Loading…
Cancel
Save