Browse Source

[1.45.37]

Keep the original voice variant across SSML xml:lang changes.

Use the original language sub-type (eg. en-sc) when SSML xml:lang changes to a compatible language.

SSML <emphasis>, increase volume for "strong" and "x-strong".

Fix bug where </emphasis> was ignored at end of clause.

Fix: $dot attribute was ignored for multi-word entries in *_list files.


git-svn-id: https://espeak.svn.sourceforge.net/svnroot/espeak/trunk@269 d46cf337-b52f-0410-862d-fd96e6ae7743
master
jonsd 14 years ago
parent
commit
b9611e1fb6
51 changed files with 2170 additions and 974 deletions
  1. 20
    13
      dictsource/da_list
  2. 831
    211
      dictsource/da_rules
  3. 36
    11
      dictsource/dict_phonemes
  4. 6
    3
      dictsource/en_list
  5. 12
    5
      dictsource/en_rules
  6. 49
    0
      dictsource/hu_list
  7. 12
    2
      dictsource/hu_rules
  8. 41
    18
      dictsource/nl_list
  9. 58
    17
      dictsource/nl_rules
  10. 1
    0
      dictsource/ro_rules
  11. 3
    0
      dictsource/sk_list
  12. 538
    527
      dictsource/sk_rules
  13. 49
    3
      dictsource/ta_list
  14. 146
    21
      dictsource/ta_rules
  15. 4
    4
      espeak-data/voices/!v/f1
  16. 1
    1
      espeak-data/voices/!v/m1
  17. 0
    1
      espeak-data/voices/!v/m7
  18. 1
    0
      espeak-data/voices/en/en
  19. 1
    0
      espeak-data/voices/en/en-n
  20. 1
    0
      espeak-data/voices/en/en-rp
  21. 1
    0
      espeak-data/voices/en/en-wi
  22. 2
    0
      espeak-data/voices/en/en-wm
  23. 1
    0
      espeak-data/voices/es-la
  24. 2
    1
      espeak-data/voices/fr-be
  25. 1
    7
      espeak-data/voices/hi
  26. 1
    0
      espeak-data/voices/hy-west
  27. 1
    1
      espeak-data/voices/mb/mb-de5-en
  28. 1
    1
      espeak-data/voices/mb/mb-gr2-en
  29. 1
    1
      espeak-data/voices/mb/mb-sw2-en
  30. 1
    0
      espeak-data/voices/pt-pt
  31. 136
    28
      phsource/compile_report
  32. 4
    2
      phsource/ph_serbian
  33. 5
    0
      phsource/ph_slovak
  34. 7
    0
      phsource/phonemes
  35. BIN
      phsource/vowel/a#_2
  36. BIN
      phsource/w/iw_
  37. BIN
      phsource/w/w_
  38. 14
    0
      src/Makefile
  39. 14
    3
      src/dictionary.cpp
  40. 3
    2
      src/mbrowrap.cpp
  41. 2
    2
      src/numbers.cpp
  42. 4
    2
      src/phonemelist.cpp
  43. 46
    12
      src/readclause.cpp
  44. 1
    1
      src/speak.cpp
  45. 2
    3
      src/speak_lib.cpp
  46. 1
    1
      src/synthdata.cpp
  47. 14
    6
      src/tr_languages.cpp
  48. 41
    27
      src/translate.cpp
  49. 4
    2
      src/translate.h
  50. 1
    0
      src/voice.h
  51. 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


+ 36
- 11
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-08

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

0 3 3: @ @- @2 @5 @L
a a# A: A@ aa aI aI@ aU
@@ -201,7 +201,7 @@ 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-09

a a: aI aU e E e: i
I i: o o: u U u2 u:
@@ -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
@@ -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

+ 6
- 3
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:

@@ -391,6 +390,7 @@ ufo $abbrev
ui $abbrev
uk $abbrev
un $abbrev $allcaps
unhcr $abbrev
url $abbrev
usa $abbrev
usb $abbrev
@@ -570,7 +570,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 +949,7 @@ customer k'Vst@m3
cutaway kVt@weI
cutoff kVt0f
cutout kVtaUt
cwm kUm
cyan saI'an
cymru kVmri

@@ -957,6 +957,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
@@ -1565,6 +1566,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
@@ -2049,7 +2051,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 +2088,7 @@ sex sEks // sexism
several sEvr@L
shallow SaloU
shampoo $2
shepherd SEp@d
sheriff S'ErI2f
shew SoU
shia Si:@
@@ -3002,6 +3004,7 @@ Carnegie kA@nEgi
Cohen koU@n
Cthulhu k@-Tu:l#u:
Chrysler kraIzl3
Dante danteI
Disney dIzni
Dolce d0ltSeI
Dvorak d@-vo@Zak

+ 12
- 5
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
@@ -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
@@ -777,6 +779,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,6 +871,7 @@
&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@
@@ -1456,7 +1460,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 +2210,6 @@
&) en (ce_ @n
?8 &) en (ce_ En
f) en (ce_ En
g) ener (al En@r
_) en (ough I2n

.group eo
@@ -2255,6 +2258,7 @@
_) er (A I2r
_) er 3:
_) err (A Er
@) eral (ity @r'al
&) eram (ent r@m
X) era (_ i@r@
XC) err Er
@@ -3096,7 +3100,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 +3187,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@
@@ -3679,6 +3682,7 @@
X) o (By_ oU
_) o (Cy+ 0
o (Be# oU
oi (ce# OI
o (BeCo_ 0
o (BenC oU
o (Beon 'oU
@@ -4792,7 +4796,7 @@
_) scar (A ske@
_) scar (a skar
scarc ske@s
sc (i s
sc (L02 s
sci (b s@
sci (_ =skaI
scis (_ =skIs
@@ -5381,6 +5385,7 @@
_) wr (Y r

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

.group y
_) y (_ waI
-) y (- @ // Welsh names
y j
_) y' (CP2 j@
y (C_ I

+ 49
- 0
dictsource/hu_list View File

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

(a . m .) An^n^i||m'int $hasdot
ún u:JnEvEzEt: $hasdot
@@ -1773,6 +1774,54 @@ 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

// word pairs

(hogy a) h,oJ,A

+ 12
- 2
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
@@ -285,6 +285,8 @@ 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

.group dz
fogó) dz (kod ts
@@ -332,6 +334,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
@@ -530,6 +533,7 @@ 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
@@ -745,6 +749,7 @@ 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^

.group o
o o
@@ -835,6 +840,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
@@ -1022,6 +1030,7 @@ 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

.group sz
sz s
@@ -1175,6 +1184,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 +1387,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:

+ 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


+ 49
- 3
dictsource/ta_list View File

@@ -111,6 +111,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 +184,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 +348,9 @@ tamil தமிழ் $text
பந்தா $alt
பிரா bra:
ப்ரா $alt
(பி . ஏ) bije:
பலம் $alt
பலமாக $alt
பலமா $alt


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


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



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

+ 146
- 21
dictsource/ta_rules View File

@@ -66,12 +66,20 @@
// i or i:
.L08 ி ீ

// n or n
.L09 ந ன

// l or l.
.L10 ல ள

// b d g
.L11 ப த க

// words before "bottle"
.L10 பீர் கலர் சாராய சோடா தண்ணி தண்ணீர் பிராந்தி வாட்டர் விஸ்கி பிளாஸ்டிக் ப்ளாஸ்டிக் கண்ணாடி கிளாஸ் க்ளாஸ் மது
.L12 பீர் கலர் சாராய சோடா தண்ணி தண்ணீர் பிராந்தி வாட்டர் விஸ்கி பிளாஸ்டிக் ப்ளாஸ்டிக் கண்ணாடி கிளாஸ் க்ளாஸ் மது

// words after "booga"
.L11 வாழ்க்கை பூமி விருந்த மனிதன

.L13 வாழ்க்கை பூமி விருந்த மனிதன

// consonants

@@ -182,9 +190,17 @@
_) கி (ராம g
_) கி (ராம்ப k
_) கி (ரிகோரிய g
_) க (ிரிக்கா g
_) க (ிரிஜா g
_) க (ிரிதர g
_) கி (ரித்த k
_) கி (ரிமினல k
_) கி (ரியா_ k
_) க (ிரியாக g
_) க (ிரியால g
_) க (ிரியி g
_) க (ிரியு g
_) கி (ரில் g
_) கிரிஸ்டோப (ர krist.o:fV
_) கி (ரிஸ்த k
_) கி (ரீட k
@@ -195,6 +211,7 @@
_) கி (ரீஸ g
_) க (ிருகஸ்தர g
_) க (ிருகிரு g
_) கிரு (ஸ்த kri
_) க (ிருஹஸ்தர g
_) கி (ரேக்க g
_) கி (ரேய k
@@ -280,6 +297,7 @@ _மன்மதக்) க (ுகை g
_) க (ுருஜி g
_) க (ுருதேவ g
_) க (ுருநா g
_) குருப (ாத gurup
_) க (ுருபூஜை g
_) க (ுருப்பெயர g
_) க (ுருமார g
@@ -292,11 +310,13 @@ _மன்மதக்) க (ுகை g
_) க (ுருவு g
_) க (ுருவுடை g
_) க (ுருவை g
_) க (ுருவோ g
_) க (ுருவோட g
_) க (ுலாப g
_) க (ுலாம g
_) க (ுலேபா g
_) கு (லோபல g
_) க (ுல்மோL06ர g
_) க (ுவஹாத்தி g
_) குவாலிட(ி kwa:lit.
_) குவ (ாலிபிகேஷன kw
@@ -321,11 +341,13 @@ _மன்மதக்) க (ுகை g
_) க (ெஸ்ட g
_) க (ேட்டண்டை g
_) க (ேட்டிலிருந்த g
_) க (ேட்டுக்கருக g
_) க (ேட்டுக்குப் g
_) க (ேட்டைக் g
_) க (ேட்டைத் g
_) க (ேட்டைப் g
_) க (ேலி g
_) க (ைட g
_) க (ொணத் g
_) க (ொணம g
_) க (ொரில g
@@ -352,6 +374,7 @@ _மன்மதக்) க (ுகை g
_) க (ோமதி g
_) க (ோமாதா g
_) க (ோமிய g
_) க (ோமூத்திர g
_) க (ோயல g
_) க (ோர_ g
_) க (ோர_மாட்ட k
@@ -361,6 +384,8 @@ _மன்மதக்) க (ுகை g
_) க (ோரத g
_) க (ோரப g
_) க (ோரப்பட k
_) க (ோரப்போக k
_) க (ோரப்போவ k
_) க (ோரம g
_) க (ோலிக g
_) க (ோலிய g
@@ -551,6 +576,7 @@ _டா) குமெண்ட kUmen.tV#
_மை) க் k
_ஷா) க் (_ k
_விவே) க் (_ k
_ஜ) க்க ggV#
துர்) க்க ggV#
மார்) க்க ggV#
மூர்) க்க ggV#
@@ -584,10 +610,13 @@ _வேதா) க்க (ினி gg
இ) க்கி (ராம gg
L03) க்க (ுகை gg
_மு) க்க (ுண gg
_போர்) க்க (ுண gg
அணு) க்க (ுண்ட gg
_வெடி) க்க (ுண்ட gg
_துப்பாக்கி) க்க (ுண்ட gg
ஜன) க்க (ும்பல gg
_ல) க்க (ேஜ gg
L03) க்க (ோபுர gg
_வி) க்ச (னரி ks.V
_பி) க்ச (ர ktSV
_மெ) க்சிக (ோ ksik
@@ -661,9 +690,11 @@ _துப்பாக்கி) க்க (ுண்ட gg
ச (ந்திர tSV
_ஹட்) ச (ன sV
_வாட்) ச (ன sV
_சாபவிமோ) ச (ன tSV
_டேவிட்) ச (ன sV
_பாவவிமோ) ச (ன tSV
_விமோ) ச (ன tSV
_) ச (ப்பL11் tSV
_) ச (ப்பா tSV
_) ச (ப்பி tSV
_) ச (ப்பு tSV
@@ -671,6 +702,7 @@ _விமோ) ச (ன tSV
_) சரசு (வதி sVrVs
_) சர்ச (ி tSVrtS
_) ச (ர்ச்சில tSV
_) ச (ர்ச்சு tSV
மருதா) ச (ல tSV
வேதா) ச (ல tSV
_சேஷா) ச (ல tSV
@@ -678,6 +710,7 @@ _தணிகா) ச (ல tSV
அருணா) ச (ல tSV
வெங்கடா) ச (ல tSV
வேங்கடா) ச (ல tSV
_) ச (வான tSV
_) சாக்ப (ீL04 tSa:kp
_) சாக்லேட் tSa:kle:t.
_) ச (ாணக்கிய tS
@@ -703,6 +736,8 @@ _தணிகா) ச (ல tSV
ஆ) ச (ாரம tS
_) சாருலத (ா tSa:rUlVt
_) ச (ாருவ tS
_ரீ) ச (ார்ஜ tS
_டிஸ்) ச (ார்ஜ tS
_) ச (ார்ஜை tS
_) ச (ார்ஜ்_ tS
_) ச (ார்லஸ tS
@@ -739,9 +774,12 @@ _தணிகா) ச (ல tSV
_) ச (ிப்ஸ tS
சி (ரம s
_) சி (ரார்த்த s
_) சிரு (ங்கார sri
_) சிரு (ஷ்டி sri
_) ச (ிற்றம்பல tS
_) சி (லாகி s
_) ச (ிலிய tS
_) சி (லேட s
_) ச (ில்ற tS
_) ச (ில்லறை tS
_) ச (ிள்ற tS
@@ -765,6 +803,7 @@ _தணிகா) ச (ல tSV
ராவணே) சு (வர s
_) சுவர்க்க svVrggV#
_) சுவர்க்க (ோழி suvVrkk
_) சு (வர்ண s
_) சு (வாச s
சு (வாதீன s
சு (வாமி s
@@ -772,7 +811,9 @@ _தணிகா) ச (ல tSV
அ) சுவாரசி (ய sva:rVs
சு (வாரஸ்ய s
_) சு (விட்ச s
_) சு (விஸ s
_) சு (வீட s
_) ச (ூரண tS
_) செக் (_ tSek
_) ச (ெக்கோL04 tS
_) ச (ெங்கிஸ tS
@@ -786,11 +827,13 @@ _தணிகா) ச (ல tSV
_) ச (ென்னி tS
_) ச (ென்னை tS
_) ச (ெயின tS
_) செயின்ட sejint.V#
_) செயின்ட sejint.
_) ச (ெய்ன tS
_) செய்ன்ட sejnt.V#
_) செய்ன்ட sejnt.
_) ச (ெர்னோபில tS
_) ச (ெல்லக்கிளி tS
_) ச (ெல்லக்குட்டி tS
_) ச (ெல்லக்குழந்த tS
_) ச (ெல்லத்துக்கு tS
_) ச (ெல்லத்தை tS
_) ச (ெல்லப்பன tS
@@ -799,8 +842,11 @@ _தணிகா) ச (ல tSV
_) ச (ெல்லப்பெண் tS
_) ச (ெல்லப்பையன tS
_) ச (ெல்லமா tS
_) ச (ெல்லமே_ tS
_) ச (ெஸ் tS
ச (ெஸ்டர tS // -chester
_) ச (ேஞ்ச tS
_) ச (ேட்டன tS
_) ச (ேனல tS
_) ச (ேரி tS
_) ச (ேர்மேன tS
@@ -812,6 +858,8 @@ _தணிகா) ச (ல tSV
_) ச (ைனாவ tS
_) ச (ைனீஸ tS
_) ச (ௌதரி tS
_) ச (ௌதிரி tS
_) ச (ௌஹான tS
//endsort


@@ -849,7 +897,10 @@ _ரிப்போர்) ட t.V#
அர்ஜண்) ட t.V#
அர்ஜெண்) ட t.V#
இண்டர்மீடியே) ட t.V#
ன்ஸ்பரண்) ட t.V#
ன்ஸ்பெரண்) ட t.V#
_) ட (ஃப் t.V
_) ட (க் t.V
_) ட (க்கர t.V
ங்) ட (ன t.V // -ington
_நியூ) ட (ன t.V
@@ -864,6 +915,7 @@ _ரிப்போர்) ட t.V#
_) ட (யரில t.V
_) ட (யரு t.V
_) ட (யர் t.V
ஃபில்) ட (ர t.V
_செண்) ட (ர t.V
_ப்ரிண்) ட (ர t.V
_ஷெல்) ட (ர t.V
@@ -920,6 +972,7 @@ _நாவல்) ட (ி t.
கான்) டினென்ட (ல t.inent.V
_) ட (ின் t.
_) டின்க (ரிங் t.inkV
_) டிப (ன t.ifV
_சர்) டிபிகேட t.ifige:t.V#
_) ட (ிப்ஸ t.
_) டி (யூசன t.
@@ -929,6 +982,7 @@ _நாவல்) ட (ி t.
_) டி (யூஷன t.
_) டி (ரங் t.
_) டி (ரங்கு t.
_) டி (ரபிள t.
_) டிரம்பெட் t.rVmpet.
_) டிர (ஸ d.re
_) டிர (ஸ்ட t.rV
@@ -939,9 +993,9 @@ _நாவல்) ட (ி t.
_) டி (ராஜ t.
_) டி (ரான்சிஸ்டர t.
_) டி (ரான்ஸ்ஃபர t.
_) டி (ரான்ஸ்ப t.
_) டிரான்ஸ்ப (ர t.ra:nsfV
_) டி (ரான்ஸ்பாண்டர t.
_) டிரான்ஸ்பிரண்ட t.ra:nspirVn.t.V#
_) டிரான் (ஸ்பரண்ட+++ t.ra:n
_) டி (ரான்ஸ்மீட்டர t.
_) டி (ரான்ஸ்லே t.
_) டி (ரான்ஸ்வேல t.
@@ -956,7 +1010,9 @@ _நாவல்) ட (ி t.
_) டிரிக்க (ர t.riggV
_) டி (ரிங்க் d.
_) டி (ரிம் t.
_) டி (ரில்லியன t.
_) டிரீட் t.ri:t.
_) டி (ரெண் t.
_) டிரெயி(லர t.rej
_) டி (ரெயின t.
_) டி (ரெய்லர t.
@@ -967,6 +1023,7 @@ _நாவல்) ட (ி t.
_) டி (ரை_செஞ்ச t.
_) டி (ரை_செய் t.
_) டி (ரை_பண் t.
_) டி (ரைலர t.
_) டி (ரைவ d.
கண்) டி (ரோல t.
_நெக) ட (ிவ t.
@@ -981,11 +1038,13 @@ _நாவல்) ட (ி t.
_) ட (ுனீL04 t.
_) ட (ுனீஷிய t.
_) டுவிங்க (ிள t.wiNk
_) டுவ (ிட்டர t.w
_கார்) ட (ூன t.
_) ட (ூர t.
_) டெக் (னாலஜி t.ek
_) டெக்னிக (ல t.eknikV
_) ட (ெக்ஸாஸ t.
_) ட (ெக்ஸ் t.
_) ட (ெண்டர t.
_) ட (ெண்டுல்கர t.
_) டென்டுல்க (ர t.ent.UlkV
@@ -1014,8 +1073,10 @@ _லான்_) ட (ென்னிஸ t.
_) டைட (ில t.aIt.
_) டைப் t.aIp
_) ட (ைம்_ t.
_) டொக் t.ok
_) ட (ோக்கன t.
_) ட (ோக்கியோ t.
_) ட (ோட்டல t.
_) டோரண்ட (ோ t.o:rVn.t.
_ப்ரி) ட (ோரிய t.
@மெண்) ட் t. // -ment
@@ -1031,6 +1092,7 @@ _லான்_) ட (ென்னிஸ t.
ஸ்) ட் (ர _|t. // ?? make t. distinct
_) ட் (ரங் t.
_) ட் (ரங்கு t.
_) ட் (ரபிள t.
_) ட்ரம்பெட் t.rVmpet.
_) ட் (ரஸ்ட t.
_த) ட் (ரா t.
@@ -1044,6 +1106,7 @@ _லான்_) ட (ென்னிஸ t.
_நியூ) ட் (ரான t.
_) ட (்ரான்சிஸ்டர t.
_) ட் (ரான்ஸ்ஃபர t.
_) ட் (ரான்ஸ்ப t.
_) ட்ரான்ஸ்ப (ர t.ra:nsfV
_) ட் (ரான்ஸ்பாண்டர t.
_) ட்ரான்ஸ்பிரண்ட t.ra:nspirVn.t.V#
@@ -1059,10 +1122,12 @@ _லான்_) ட (ென்னிஸ t.
_) ட்ரிக் t.rik
_) ட்ரிக்க (ர t.riggV
_) ட் (ரிம் t.
_) ட் (ரில்லியன t.
_) ட்ரீட் t.ri:t.
_வி) ட் (ரு t.
_கே) ட் (ரு t.
_போ) ட் (ரு t.
_) ட் (ரெண் t.
_) ட்ரெயி (லர t.rej
_) ட் (ரெய்லர t.
இண்) ட் (ரேஸ்ட t.
@@ -1070,6 +1135,7 @@ _லான்_) ட (ென்னிஸ t.
_) ட் (ரை_செய் t.
_) ட் (ரை_பண் t.
_) ட் (ரையல t.
_) ட் (ரைலர t.
_பெ) ட் (ரோ t.
_மெ) ட் (ரோ t.
கண்) ட் (ரோல t.
@@ -1091,6 +1157,7 @@ _நடுரோ) ட் (ல t.
_ஹி) ட் (லர t.
அ) ட்லாண்ட t.la:n.t.V# // atlant
_) ட்விங்க (ிள t.wiNk
_) ட்வ (ிட்டர t.w
//endsort


@@ -1173,9 +1240,11 @@ _நடுரோ) ட் (ல t.
_) த (னராஜ dV
_) த (னலக்ஷ்மி dV
_) த (னலட்சுமி dV
_) த (னவந்த dV
_) த (னுஷ dV
_) த (ன்மந்திரி dV
_) த (ன்ராஜ dV
_) த (ன்வந்தரி dV
_) தபதப dVbVdVbV#
_) த (மயந்தி dV
_) த (ம்பதி dV
@@ -1286,11 +1355,16 @@ _நடுரோ) ட் (ல t.
_) த (ிம்ம d
_) தி (யாக t
_) தி (யான d
_) தி (யேட்டர t
_) த (ிரவ d
_) த (ிரவிய d
_) தி (ராட்சை d
_) தி (ராணி t
_) தி (ராவிட d
_) திரிப (ாதி trip
_) திரிப (ோலி trip
_) தி (ரிலோக t
_) தி (ரிவேதி t
_) திரு (திரா dri
_) திரு (ஷ்டி dri
_) த (ிரௌபதி d
@@ -1349,11 +1423,13 @@ _நடுரோ) ட் (ல t.
_) து (ரோண t
_) த (ுர் d
_) து (வந்த_ d
_) துவ (ாதசி dv
_) துவாப (ர dva:pV
_) துவ (ார dv
_) து (வேச d
_) து (வேஷ d
_) துவைத (_ dvaItV
_) துவ (ைதத்த dv
_) துவைத (த்தில dvaItV
_) துவைத (ம dvaItV
_) த (ுஷ் d
@@ -1380,6 +1456,7 @@ _நடுரோ) ட் (ல t.
_) த (ேச d
_) த (ேவகான d
_) த (ேவகி d
_) த (ேவகுமார d
_) த (ேவகுரு d
_) த (ேவகுல d
_) த (ேவக் d
@@ -1474,6 +1551,7 @@ _நிவேதி) த (ை t
யு) த்த ddV#
_சிரார்) த்த ddV#
_ஸ்ரார்) த்த ddV#
அர்) த்த (L09ார ddV
_சிறை) த்த (ண்டனை ddV
பு) த்த (ன ddV
_வர்) த்த (மான ddV
@@ -1510,6 +1588,7 @@ _சிறை) த்த (ண்டனை ddV
ஆதி) த்தி (ராவிட dd
ராஜ) த்து (ரோக dd
_தேச) த்து (ரோகி td
அ) த்து (வான d
வி) த்து (வான d
_முக) த்து (வார dd
L03) த்த (ூச dd
@@ -1583,6 +1662,7 @@ _காமசூ) த் (ர t
பி_._) ப(ி_._சி b // b.b.c
_) ப (L06ுகுணா bV
_) ப (L07லர b
_) ப (ஃபூன bV
_) ப (கதூர bV
_) ப (கத்சிங் bV
_) ப (கவதி bV
@@ -1595,11 +1675,13 @@ _காமசூ) த் (ர t
_) ப (கிஷ்க bV
_) ப (கீர bV
_) ப (குள bV
_) ப (க்கிங்L06ாம bV
_) ப (க்கெட் bV
_) ப (க்கென்ற bV
_) பக் (த bVk
_) பக் (ரீத bVk
_) ப (க்ருதீன fV
_) ப (க்ஷண bV
_) ப (ங்கம bV
_) பங்க (ர bVNkV
_) ப (ங்களா bV
@@ -1634,9 +1716,13 @@ _சொந்த_) ப (ந்த bV
_) பந்த (ுலு bVnt
_) ப (ந்துவ bV
_) ப (ந்தோபஸ்த bV
_) ப (னல fV
_) ப (னியன bV
_) ப (ன்னாரி bV
_டீயும்_) ப (ன்னும்_ bV
_) ப (ன்னும்_டீயும் bV
_) ப (ன்ருட்டி bV
_) ப (பூன bV
_) ப (ம்பர bV
_) ப (ம்பாய bV
_) ப (யங் bV
@@ -1649,6 +1735,7 @@ _சொந்த_) ப (ந்த bV
_) ப (யபக்தி bV
_) ப (யப் bV
_) ப (யப்பத pV
_) ப (யப்பவை pV
_) ப (யம bV
_) ப (யாலஜி bV
_) பயாஸ்கோப் bVja:sko:p
@@ -1682,11 +1769,14 @@ _சொந்த_) ப (ந்த bV
_) ப (லப்பட bV
_) ப (லப்படு bV
_) ப (லப்பரீட்சை bV
_) ப (லம bV
_) ப (லமடங்க pV
_) ப (லமாடி pV
_) ப (லமுறை pV
_) ப (லமொழி pV
_) ப (லமணைத்த bV
_) ப (லமாகC் bV
_) ப (லமாகி bV
_) ப (லமாச்ச bV
_) ப (லமான bV
_) ப (லமாய் bV
_) ப (லமுடன bV
_) ப (லமும bV
_) ப (லராம bV
_) ப (லவந்த bV
_) ப (லவான bV
@@ -1735,12 +1825,13 @@ _சொந்த_) ப (ந்த bV
_) ப (ாக்ஸர b
_) ப (ாக்ஸிங் b
_) பாங்க (ாக் ba:Nk
_) ப (ாங்கில b
_) ப (ாங்க் b
_) ப (ாசு b
_) ப (ாசுர p
_) ப (ாடி_பில்டிங் b
_) ப (ாட்டலியன b
_L10_) ப (ாட்டில b // bottle
_L12_) ப (ாட்டில b // bottle
_) ப (ாட்டிலி b
_) ப (ாட்டிலுக் b
_) ப (ாட்டிலுடன b
@@ -1774,6 +1865,7 @@ _சொந்த_) ப (ந்த bV
_) பாப (ர ba:bV
_) பாப (ாசாகேப் ba:b
_) பாப (ாசாஹேப் ba:b
_) பாப (ாவ ba:b
_) ப (ாபிலோனியா b
_) ப (ாபுவ b
_) ப (ாமாவ b
@@ -1781,6 +1873,7 @@ _சொந்த_) ப (ந்த bV
_) ப (ாம்பே b
_ஆடு_) ப (ாம்பே p
_விளையாடு_) ப (ாம்பே p
_ரூம்_) ப (ாய b
_) ப (ாரத b
_) ப (ாரதி b
_) ப (ாரத்த b
@@ -1866,6 +1959,7 @@ _ராகத்தின்_) ப (ாவ b
_) ப (ிசினஸ b
_) ப (ிசிய b
_) ப (ிஜிலி b
_) ப (ிடில f
_) ப (ிட்சு b
_) ப (ிட்டடி b
_) ப (ினாமி b
@@ -1984,6 +2078,8 @@ _ராகத்தின்_) ப (ாவ b
_) ப (ிரித்தானி b
_) பி (ரித்தானி b
_) பிரின்சிப (ால prinsip
_) பிரியங்க (ா prijVNk
_) பி (ரியதர p
_) பி (ரியன p
_) பி (ரியப்பட p
_) பி (ரியம p
@@ -2027,11 +2123,14 @@ _ராகத்தின்_) ப (ாவ b
_) பிள (ைட் fl.
_) பி (ளௌஸ b
_) பிஷப் bis.Vp
_) ப (ிஷ் f
_) ப (ிஸினஸ b
_) ப (ிஸிய b
_) ப (ிஸ்கட் b
_) ப (ிஸ்கெட் b
_) ப (ிஸ்கோத் b
_) ப (ிஸ்மார்க் b
_) ப (ிஸ்மில்லா b
_) ப (ீகார b
_) ப (ீச்சில b
_) ப (ீச்சுக்க b
@@ -2080,6 +2179,7 @@ _பெனசீர்_) ப (ுட்டோ b
_) புரபொ (சர profV
_) பு (ரவுச b
_) ப (ுருடா b
_) பு (ருனாய b
_) புரொப (சர profV
_) புரொபொ (சர profV
_) பு (ரோகித p
@@ -2096,6 +2196,7 @@ _பெனசீர்_) ப (ுட்டோ b
_) ப (ுஸ்ஸெ b
_) ப (ூகம்ப b
_) ப (ூகோல b
_) ப (ூச்சாண்டி b
_) பூட (ான bu:t.
_) ப (ூட்ஸ b
_) ப (ூதகணங்க b
@@ -2133,6 +2234,7 @@ _பெனசீர்_) ப (ுட்டோ b
_) ப (ெண்டாஸ்டிக் f
_) ப (ெதர f
_) ப (ெனசீர b
_) பெப்ப (ே bebb
_) ப (ெப்ரவரி f
_) ப (ெர்னாட்ஷா b
_) ப (ெர்னான்ட f
@@ -2152,6 +2254,9 @@ _பெனசீர்_) ப (ுட்டோ b
_) ப (ேஜார b
_) ப (ேட்டரி b
_) ப (ேட்டா b
_) ப (ேதங் b
_) ப (ேதமி b
_) ப (ேதமு b
_) ப (ேதலித்த b
_) ப (ேதி b
_) ப (ேனர b
@@ -2163,13 +2268,14 @@ _பெனசீர்_) ப (ுட்டோ b
_) ப (ேஷன f
_) ப (ேஷா b
_) ப (ைக்குகள b
_) ப (ைசன b
_) ப (ைபிள b
_) ப (ைரவ b
_) ப (ொம்மன b
_) ப (ொம்மல b
_) ப (ொம்மை b
_) ப (ோஃபோர் b
_) ப (ோக_L11 b
_) ப (ோக_L13 b
_) ப (ோகங்க b
_) ப (ோகத்த b
_) ப (ோகத்திற்க b
@@ -2205,6 +2311,7 @@ _பெனசீர்_) ப (ுட்டோ b
_) ப (ோர்_அடி b
_) ப (ோர்ஜரி f
_) ப (ோர்தான்_அடி b
_) ப (ோர்வெல் b
_) ப (ோஷி b
_சந்திர_) ப (ோஸ b
_) ப (ோஸிட b
@@ -2212,6 +2319,7 @@ _சந்திர_) ப (ோஸ b
_) பௌண்ட (ன faUn.t.V
_) ப (ௌதிக b
_) ப (ௌத்த b
சு) ப்பி (ரமணி b
_) ப் (ரசல்ஸ b
_) ப்ரபொ (சர profV
_) ப் (ரம்ம b
@@ -2223,6 +2331,7 @@ _சந்திர_) ப (ோஸ b
_) ப் (ரான்ஸ f
_) ப் (ராவ b
_) ப்ரிஸ்ப (ேன brisb
_) ப் (ருனாய b
_) ப் (ரெஞ்ச் f
_) ப் (ரெட் b
_) ப்ரெட்ரிக் fred.rik
@@ -2252,11 +2361,14 @@ _சந்திர_) ப (ோஸ b
_பயன்) ப pV
_விகல்) ப pV#
அடால்) ப fV#
_ஷெரீ) ப (+ fV#
_ஸ்தா) ப (+ bV#
பரிதா) ப (+ bV#
அநுதா) ப (+ bV#
அனுதா) ப (+ bV#
பிரஸ்தா) ப (+ bV#
_பச்சாதா) ப (+ bV#
_விரகதா) ப (+ bV#
மனஸ்தா) ப (+ bV#
அல்) ப (_ pV#
நன்) ப (கல pV
@@ -2392,6 +2504,7 @@ _வெளிப்) ப (ாக b
ஜிந்தா) ப (ாத் b
ச) பாபதி ba:pVti
_) பாபவிமோசன pa:bVvimo:tSV
_சாயி) பாப (ா ba:b
_சாய்) பாப (ா ba:b
அ) பாயிண்ட்மெண்ட pa:jin.t.ment.V#
_டீ) ப (ாய் p
@@ -2404,6 +2517,7 @@ _வெளிப்) ப (ாக b
L03தன்) ப (ால p
_ப்ரின்சி) ப (ால p
_சிவ) ப (ாலன b
_கம்) ப (ாலா p
_கா) ப (ாலி b
_டி) பால்ட fa:lt.V#
_நே) ப (ாள p
@@ -2416,7 +2530,9 @@ _ப்ரின்சி) ப (ால p
வீண்) ப (ாவ p
அடி) ப (ாவி p
_நவ) ப (ாஷ p
_தமிழ்ப்) ப (ாஷ _b
வாதா) ப (ி p
_கடா) ப (ி f
சித்தப்) பி(ரமை b
_கன்) ப (ிகர f
வாலி) பிக (ேஷன fik
@@ -2436,6 +2552,7 @@ _ப்ரின்சி) ப (ால p
_முன்) ப (ின்_ p
@) ப (ின்நாலும்_ p
@) ப (ின்னர்_ p
_கன்னா) ப (ின்னா p
@) ப (ின்னால்_ p
_) ப (ிப்ரவரி f
_லெஸ்) ப (ியன b
@@ -2600,16 +2717,25 @@ _மைக்ரோசா) ப் (ட f
உ) ப்ப (ிப் bb
உ) ப்ப (ிய bb
அ) ப்ப (ியாச bb
_சிவ) ப்பி (ரகா pp
_யாதவ) ப்பி (ரகாச pp
அதிக) ப்பி (ரசங்க pp
_நில) ப்பி (ரபு pp
மன) ப்பி (ரமை bb
_பர) ப்பி (ரம்ம pb
_மணி) ப்பி (ரவா pp
L03) ப்பி (ரவாக pp
_நதி) ப்பி (ரவாக pp
அக) ப்பி (ரவாக pp
_ஜல) ப்பி (ரவாக pp
_மன) ப்பி (ரவாக pp
_ரத்த) ப்பி (ரவாக pp
இரத்த) ப்பி (ரவாக pp
_ஒL10ி) ப்பி (ரவாக pp
தேச) ப்பி (ரஷ்ட pp
ஆ) ப்பி (ரிக்க f
தென்னா) ப்பி (ரிக்க fV
_ஹ) ப்ப (ிள bb
_சந்தேக) ப்ப (ுத்தி bb
இ) ப்ப (ூமி bb
_ல) ப்ப (ை bb
@@ -2689,6 +2815,7 @@ _சந்தேக) ப்ப (ுத்தி bb
ம mV
ம (B m
_சL07) மி (ய m
_) மி (யூ m


.group ய
@@ -2733,13 +2860,6 @@ _சந்தேக) ப்ப (ுத்தி bb
_) வி (யா v
வி (யூக v

D_) வ (து_ a:vV
D_) வ (தும்_ a:vV
D_) வ (துமாக_ a:vV
-) வ (து_ a:vV
-) வ (தும்_ a:vV
-) வ (துமாக_ a:vV


.group ஶ
ஶ SV
@@ -2791,6 +2911,7 @@ _சந்தேக) ப்ப (ுத்தி bb
இ (ரத்த
இரப்ப (ர rVbbV
இ (ரயில
இ (ரவீந்திர
இ (ராக
இ (ராச
இ (ராஜ
@@ -2801,6 +2922,7 @@ _சந்தேக) ப்ப (ுத்தி bb
இ (ராதாகி
இ (ராதாவ
இ (ராத்த
இ (ராப்_
இ (ராப்பிச்சை
இ (ராம
இ (ராமல்_ i
@@ -2809,6 +2931,7 @@ _சந்தேக) ப்ப (ுத்தி bb
இ (ராவுத்த
இ (ராஷ்டிர
இ (லகுவாக
இ (லக்ஷ்மண
இ (லட்சக்
இ (லட்சங்
இ (லட்சண
@@ -2816,9 +2939,11 @@ _சந்தேக) ப்ப (ுத்தி bb
இ (லட்சம
இ (லட்சா
இ (லட்சிய
இ (லட்சுமண
இ (லட்சுமி
இ (லண்டன
இ (லத்தீன
இ (லயி
இ (லவங்க
இ (லாப
இ (லேச

+ 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


+ 136
- 28
phsource/compile_report View File

@@ -1,4 +1,4 @@
74 phoneme tables
76 phoneme tables
new total
base 107 107
consonants 10 116
@@ -17,6 +17,7 @@ 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
@@ -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
@@ -74,6 +75,7 @@ consonants 10 116
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@ [hfx] 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 [hfx] 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 [hfx] 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 [hfx] 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 [hfx] 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 [hfx] 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
@@ -775,6 +807,7 @@ ustop/k_asp2 [k#] ka
ustop/ki [k] base
[k] base2
[c] af
[k] et
[k] fr
[k] lv
[k^] mk
@@ -786,6 +819,7 @@ ustop/ki [k] base
ustop/kl [k] base
[kh] consonants
[k] base2
[k] et
[k] fr
[k] lv
[k] el
@@ -794,11 +828,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
@@ -869,6 +905,7 @@ ustop/t_dnt [t] base
[t[] base
[t] base2
[t] en-us
[t] et
[dh] hi
[th] hi
[t] hu
@@ -877,7 +914,9 @@ ustop/t_dnt [t] base
ustop/t_dnt2 [t] base2
[d] kn
ustop/t_hi [t[] base
[t] et
ustop/t_pzd [c] base
[t^] et
[t;] pl
ustop/tr [t] base
[t] en-us
@@ -956,6 +995,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 +1008,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 +1024,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 +1040,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 +1052,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 +1130,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 +1143,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 +1161,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 +1197,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 +1209,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 +1233,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 +1241,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 +1308,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 +1381,8 @@ vowel/@- [@-] base
[r*] hr
vowel/& [a] en-rp
[&] fi
[&] et
[&:] et
[&:] hi
[&] lv
[&:] lv
@@ -1365,11 +1431,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
@@ -1481,8 +1549,10 @@ vowel/a_6 [a] ca
[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 +1580,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 +1647,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
@@ -1603,7 +1679,9 @@ 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 +1743,7 @@ vowel/e_mid2 [E] af
[e] am
[e] te
[e:] si
[e] mt
vowel/@_fnt [@] en-wi
[@2] en-wi
[@2] hr
@@ -1707,11 +1786,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 +1801,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
@@ -1738,7 +1821,8 @@ vowel/i_6 [i] hi
[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 +1854,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 +1870,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
@@ -1829,6 +1915,7 @@ vowel/o [o] base2
[oU] en-wi
[o:] de
[o] eo
[o:] et
[o] fr
[o] hi
[o] ta
@@ -1881,6 +1968,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 +2019,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 +2084,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 +2143,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 +2161,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 +2194,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 +2204,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 +2444,7 @@ x/d_ [d] base
[d[] base
[d] base2
[d] fi
[d] et
[d] fr
[d.] hi
[d] kn
@@ -2348,13 +2452,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

+ 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


+ 7
- 0
phsource/phonemes View File

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

@@ -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/w/iw_ View File


BIN
phsource/w/w_ View File


+ 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 \

+ 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();


+ 1
- 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.37 08.Aug.11";
const int version_phdata = 0x014500;

int option_device_number = -1;

+ 14
- 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};
@@ -394,7 +394,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 +468,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 +954,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 +971,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 +1013,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 +1131,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