Browse Source

[1.47.03f]

Fix, speak letter names of Hangul (Korean) characters.
Fix, ChangePhoneme(NULL) caused problems for word-gap options.
Recognize Arabic comma U+060C.
Languages changes: pt, nl, bn, te, da.


git-svn-id: https://espeak.svn.sourceforge.net/svnroot/espeak/trunk@336 d46cf337-b52f-0410-862d-fd96e6ae7743
master
jonsd 12 years ago
parent
commit
394869c5c2

+ 2
- 1
dictsource/an_list View File

@@ -1,4 +1,4 @@
// Aragon translation rules
// Aragon translation rules
// This file is UTF-8 encoded

// letters
@@ -182,6 +182,7 @@ $ d'olar
/ baRRa
\ kontraBaRRa
| b'aRRaBertik'al
° graUs

_- gj'on
! TaRR'ar||eksklamaTj'on

+ 28
- 16
dictsource/bn_list View File

@@ -5,7 +5,7 @@
// Bengali numbers are changed to latin characters before translation
_0 S'unjO
_1 '&k
_2 duj
_2 d'uj
_3 t'in
_4 tS'ar
_5 p'a~tS
@@ -125,7 +125,7 @@ _0M1 h'ajar
_0M2 l'ak#
_0M3 k'ot.i
_0M4 'Orbud
_dpt dOsomik
_dpt _d'Osomik_


// Single consonants
@@ -133,40 +133,42 @@ _dpt dOsomik
খ k#O
গ gO
ঘ g#O
ঙ 'uNO
ঙ 'uNO~
চ tSO
ছ tShO // [h] to distinguish from [tS]
জ JO
ঝ J#O
ঞ 'iNO
ঞ 'iNO~
ট t.O
ঠ t.#O
ড d.O
ঢ d.#O
ণ m'odd#ennO
ণ m,odd#en.n.'O
ত tO
থ t#O
দ dO
ধ d#O
ন d'ontennO
ন d,ontenn'O
প pO
ফ fO // or [p#O] ?
ব bO
ভ b#O
ম mO
য় Oj
য ontostedZ'O
,ontostedZ'O
র rO
ড় r.O
ড় r.O // (d. + nukta)
ঢ় hr.O
ঢ় hr.O // (d#. + nukta)
ল lO
শ taleboS:O
ষ mud#en:oS:O
স d'onteS:O
শ t,aleboS:'O
ষ m,ud#en:oS:'O
স d,onteS:'O
হ hO
ৎ kh'Ond.otO
ৎ kh,Ond.ot'O
ক্ষ k,ojmud#en:oS:'O


// full vowels
অ O
@@ -176,11 +178,16 @@ _dpt dOsomik
উ hrOS:o'u
ঊ dirg#o'u
ঋ ri
এ e
ঐ oj
ও o
ঔ ow

এ e $u+ // word 'it'
ঐ oj $u+ // word 'that'
ও o $u+ $brk // 'and'
_এ e
_ঐ oj
_ও o


// combining vowel signs
া 'akar
ি r'oS:ikar
@@ -200,12 +207,17 @@ _dpt dOsomik
ঁ tS'Ondrobindu
় b'indu

_, koma
$ d.Olar
% SOtk'Ora
+ jOg
= SOman



// Punctuation
। dVn.d.V

_, koma
_? pr'oSnOtSihnO

// Pronouns
আমি $u // main: I

+ 3
- 1
dictsource/bn_rules View File

@@ -1,4 +1,4 @@

// This file is UTF8 encoded

// letter groups:
@@ -384,3 +384,5 @@
ৢ l-
ৣ l-

__) - (_D bij'og
D_) - (_D bij'og

+ 19
- 19
dictsource/da_list View File

@@ -54,38 +54,38 @@ _?? symbol
_#9 tab
_#32 blank

* 'asd&r,isg $max3
% pRos'end $max3
@ sn,&:bel'&:
/ sgRVsdrai $max3
\ 'Vmvendsgr,VsdRai $max3
* '&sd@-r,isg $max3
% pRos'End $max3
@ sn,&b@-l'&:
/ sgRVsdrAj $max3
\ 'VmvEndsgr,VsdRai $max3
_, k'oma:
_; se:mi:ko:lVn
_; semiko:lVn
_: k'o:lVn
_. pONtOm // PN u => O
_? spWrgsmVlstajn
_! udRVbstejn
_- binnesdrai
__ b'Onsdrai
_? spWrsmOlstAjn
_! udRVbstAjn
_- bin@-sdrAi
__ b'OnsdrAi
& _Vw
£ pun?
€ euro
© kVpirajt
÷ divid'eReD||meD
© kVpirAjt
÷ divid'eRVD||mED
= l'imeD
# n'OmV
§ paragr'af
× g'aNe
ª feminin||Wdin'al
º m'askulin||Wdin'al
® registr'Er@D||v'ar@mErk3
¼ en||kvart
¾ trEkv'art
® registr'ErVD||v'Ar@-mErk@-
¼ en||kvArt
¾ trEkv'Art
¢ s'ent
¥ j'en:
µ my
' apostr'Vf
½ en'hal
½ en'h&l
+ plus
// numbers
@@ -11132,7 +11132,7 @@ ide id'e // idea
idé id'e // idea
tune tun3 $capital // PB Tune lufthavn - not "tune a car" [tjune]
ny ny // new
også Vs@- // also
også ?Vs@- // also
idet id'e // in so far as
(rub og stub) R'Ob||V||sd'Ob
tre tr'E // the number 3
@@ -11140,8 +11140,8 @@ rejicere rejis'eV // PB should not be pronounced [raje]
rejicerer rejis'eV // PB
rejiceres rejis'eVs // PB
rejicering rejis'eRiN // PB
nogle n'o:@-n // PB English: 'some' - must be pronounced like the Danish word 'nogen'
nogen n'o:@-n // PB
nogle n'o@-n // PB English: 'some' - must be pronounced like the Danish word 'nogen'
nogen n'o@-n // PB
ligesom l?isVm // PB
bliver blir // PB
konfirmand kVnferm'&nd // PB

+ 279
- 239
dictsource/da_rules
File diff suppressed because it is too large
View File


+ 14
- 14
dictsource/dict_phonemes View File

@@ -25,7 +25,7 @@ n^ p p` r s S t t`
tS tS` v w x z Z


Dictionary an_dict 2013-03-28
Dictionary an_dict 2013-03-29

a aI aU e E eI eU i
o O oI u U
@@ -36,7 +36,7 @@ Q r R R2 s S t T
t# tS w x


Dictionary te_dict 2013-03-26
Dictionary te_dict 2013-03-31

a a: aI aU e E e: i
i: l- o o: r- u u:
@@ -60,7 +60,7 @@ s; t t; tS ts v x z
Z z;


Dictionary bn_dict 2013-03-29
Dictionary bn_dict 2013-03-31

& a a~ e e~ i i~ l-
o O o: O~ o~ r- u u~
@@ -111,7 +111,7 @@ p r s S t T v w
x z


Dictionary da_dict 2013-03-29
Dictionary da_dict 2013-03-31

& &# 0 3 ?& ?&# ?0 ?A
?e ?E ?i ?o ?O ?u ?V ?W
@@ -150,7 +150,7 @@ p Q r R s s; t T
ts v x z


Dictionary en_dict 2013-03-28
Dictionary en_dict 2013-03-30

0 0# 3 3: @ @- @2 @5
@L a a# A: A@ aa aI aI3
@@ -178,7 +178,7 @@ s S t T tS ts v w
x z Z


Dictionary es_dict 2013-03-28
Dictionary es_dict 2013-03-29

@ a aI aU e E eI eU
i o O oI u
@@ -273,10 +273,10 @@ N n^ p r R R2 s S
t tS ts tS; v x z Z


Dictionary hi_dict 2013-03-16
Dictionary hi_dict 2013-03-31

@ @- @2 a a: aI aU a~
e E e: E: E~ i I i:
@ @2 a a: aI aU a~ e
E e: E: e~ E~ i I i:
l- o O o: O: O~ o~ r-
u U u: u~ V

@@ -336,7 +336,7 @@ n^# p Q r R r# R2 s
S s2 t T tl# v x z


Dictionary it_dict 2012-11-22
Dictionary it_dict 2013-03-29

@- a a/ aI aU e E eI
i I i# o O u
@@ -462,7 +462,7 @@ N n^ p r R s S t
tS ts tS; v x z Z


Dictionary ml_dict 2013-03-16
Dictionary ml_dict 2013-03-31

@ a a# a: aI aU e E
e: i I i: o o: r- u
@@ -501,7 +501,7 @@ r r. s S s. t t# t.
t.# v w x z


Dictionary nl_dict 2013-03-27
Dictionary nl_dict 2013-03-29

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


Dictionary pt_dict 2013-03-29
Dictionary pt_dict 2013-03-31

& &/ &U~ &~ @ @- a A
aI aU e E eI EI eU EU
@@ -592,7 +592,7 @@ ts; v v; w w2 x z Z
z; Z;


Dictionary ru_dict 2011-10-24
Dictionary ru_dict 2013-03-31

8 @- a A e E E# E%
E2 i I I# I3 I^ ja ju

+ 2
- 1
dictsource/en_list View File

@@ -1,4 +1,4 @@

// You can use the en_extra file, rather than this one
// to add your own pronunciation definitions.

@@ -1631,6 +1631,7 @@ gigantic dZaIg'antIk
gilead g'IlIad
gimme gImi
giraffe dZI2raaf
github gIthVb
glacier gleIS3
goin ,goUI2n $only // for goin'
gonna g,@n@

+ 1
- 0
dictsource/es_list View File

@@ -29,6 +29,7 @@ _tld t'ilde
// names of symbols
ª a
º o
° grados
_. punto
_, koma
_; p,untoik'oma

+ 15
- 4
dictsource/hi_list View File

@@ -162,7 +162,7 @@ _dpt _d@s@ml'o:_ // ?? what is Hi for "." ?
श S@
ष s.@ // retroflex [S]
स s@
ह H@-
ह H@
क़ q@
ख़ x@
ग़ Q@
@@ -196,10 +196,21 @@ _dpt _d@s@ml'o:_ // ?? what is Hi for "." ?

_?? Vks.@r

// Alphabet names
_ar 'Vrbi
_cyr sIrIk'Ik
_zh c'i@ni

// Punctuation
। dVn.d.V

$ dOl@r
% pVt'IS@t
+ plVs
= bVr'a:b@r
* ta:r'a:Nk@n
*

// Pronouns
मैं $u // main: IrI
मुझे $u
@@ -262,7 +273,7 @@ _?? Vks.@r
को $u // ko: to
तक $u // tak: until, for(time)
बिना $u $pause // without (preposition)
में $u // me: in
में me~: $u+ // me: in
से $u // se: from, with, by


@@ -272,7 +283,7 @@ _?? Vks.@r

// Conjunctions

और $u $pause // aur: and
और $u $brk // aur: and
य j@ $u $pause // ja: or
अगर $u $pause // agar: if
यदि $u $pause // yadi: if, whether
@@ -299,5 +310,5 @@ _?? Vks.@r


// Exceptions
क्रिकेट krIk'Et
क्रिकेट kr'IkIt
सायबर s'aIb@r

+ 2
- 7
dictsource/hi_rules View File

@@ -390,7 +390,7 @@
ः H // visarga

.group ् // virama

// Extra consonants

@@ -410,7 +410,7 @@
ज़ zV
ज़ (B z

.group ड़ // dddha (should retroflex flap)
.group ड़ // dddha (should retroflex flap ?)
ड़ r.V
ड़ (B r.

@@ -443,8 +443,3 @@



.group
$ dOlV
% pVsEnt



+ 2
- 1
dictsource/it_list View File

@@ -1,4 +1,4 @@
// This file is UTF-8 encoded
// This file is UTF-8 encoded


// $alt change [e] or [o] in the stressed syllable to [E] or [O]
@@ -82,6 +82,7 @@ _tld t'ilde
# kantSellet:o
@ ki'otS:ola
~ tilde
° g@-*'a:di
: d,uep'unti

_! p,untoesklamat'ivo

+ 0
- 7
dictsource/ml_rules View File

@@ -295,12 +295,5 @@



.group 0xe0a4 // devanagari
0xe0a4 _^_HI // switch to hindi voice

.group 0xe0a5 // devanagari
0xe0a5 _^_HI


.group
$ do:l.ar

+ 2
- 1
dictsource/nl_list View File

@@ -1,4 +1,4 @@

// This file in UTF8 encoded

// $alt2, remove s from plural, remove en from plural
@@ -80,6 +80,7 @@ _- k'OpElt,e:k@n
= Q@l'EIkte:k@n
__ l'IgEntst@-*'e:pj@
€ 'Y:*o:t,e:k@n
° Qra:d@n


// numbers

+ 45
- 35
dictsource/pt_list View File

@@ -683,6 +683,7 @@ bolo $alt2
bolo $alt $verb
borboleta $alt2
bordo $alt
borra $alt2 $noun
bosque $alt
boto $alt2 $noun
brejo $alt
@@ -693,12 +694,13 @@ cacete $alt2
cachorra $alt2
caderneta $alt2
cadete $alt2
camelha $alt
camelo $alt2
camiseta $alt2
cantora $alt2
capacete $alt2
caractere $alt
carbureto $alt2
carbureto $alt2
careta $alt2
carreta $alt2
carroça $alt
@@ -707,7 +709,7 @@ cateto $alt2
catorze $alt2
cebola $alt2
cefaleia $alt
centopeia $alt
centopeia $alt
cerca $alt
cerca $alt2 $noun
cerco $alt $verb
@@ -735,8 +737,11 @@ concerto $alt2 $noun
concertos $alt2
concordo $alt
conforto $alt $verb
console $alt2 $noun
consolo $alt2 $noun
controle $alt2 $noun
controles $alt2
controles $alt $verb
controlo $alt2 $noun
coreia $alt
coreto $alt2
@@ -747,19 +752,19 @@ corto $alt
corveta $alt2
corvos $alt
coto $alt2
cotovelo $alt2
cotovelo $alt2
cratera $alt
crede $alt2
crepe $alt
decore $alt
degelo $alt2
degelo $alt2
desapego $alt2 $noun
descordo $alt
desemprego $alt2
desemprego $alt $verb
desespero $alt2 $noun
desfecho $alt2
desmantelo $alt2 $noun
desmantelo $alt2 $noun
desporto $alt2
desportos $alt
desprezo $alt2 $noun
@@ -768,7 +773,7 @@ desse $alt $verb
deste $alt2
deste $alt $verb
desterro $alt2
destroem $alt
destroem $alt
deveras $alt
dez $alt
diarreia $alt
@@ -787,11 +792,12 @@ endereço $alt $verb
enforco $alt
engordo $alt
enredo $alt $verb
enrosco $alt $verb
enrosco $alt $verb
enterro $alt2 $noun
enumerem $alt
envelope $alt
envolto $alt2
enxaqueca $alt2
enxerto $alt2 $noun
epopeia $alt
eritreia $alt
@@ -800,7 +806,7 @@ erro $alt $verb
esboço $alt $verb
escopeta $alt2
escova $alt2 $noun
escovas $alt2
escovas $alt2
escovo $alt
escroto $alt2
esforço $alt $verb
@@ -813,18 +819,18 @@ espiroqueta $alt2
espoleta $alt2
esposa $alt2
esqueleto $alt2
estilete $alt2
estilete $alt2
estrela $alt2
estrofe $alt
estorno $alt $verb
estorvo $alt $verb
etiqueta $alt2
europa $alt
europeia $alt
europeia $alt
exagero $alt $verb
explore $alt
faceta $alt2
fantoche $alt
fantoche $alt
farofa $alt
febre $alt
fera $alt
@@ -843,7 +849,7 @@ forca $alt2
força $alt2 $noun
forças $alt2
forço $alt
formos $alt2
formos $alt2
forro $alt $verb
frevo $alt2
fulgores $alt2
@@ -851,8 +857,8 @@ galera $alt
galileia $alt
gameta $alt2
geleia $alt
gelo $alt2
gelo $alt $verb
gelo $alt2
gelo $alt $verb
genebra $alt
gesso $alt2
golpe $alt
@@ -871,16 +877,18 @@ hemorroida $alt
hoje $alt2
horrores $alt2
ideia $alt
interesse $alt2 $noun
imberbe $alt
interesse $alt2
interesse $alt $verb
jogo $alt2 $noun
joguete $alt2
lagosta $alt2
lambreta $alt2
lebre $alt
lembrete $alt2
lepra $alt
lepra $alt
leste $alt2 $verb
lingueta $alt2
lingueta $alt2
lopes $alt
macete $alt2
maior $alt
@@ -901,9 +909,9 @@ minueto $alt2
miolo $alt2
miolos $alt
modelo $alt2
modelo $alt $verb
modelo $alt $verb
moeda $alt
mofo $alt $verb
mofo $alt $verb
molho $alt2 $noun
monera $alt
morcego $alt2
@@ -928,7 +936,7 @@ obstetra $alt
odisseia $alt
onu $1
olho $alt2 $noun
onomatopeia $alt
onomatopeia $alt
opereta $alt2
ordens $alt
osso $alt2
@@ -942,7 +950,6 @@ palacete $alt2
palheta $alt2
panfleto $alt2
pangeia $alt
panqueca p,&~Nk'Ek&
pantera $alt
parede $alt2
pastora $alt2
@@ -970,7 +977,7 @@ pose $alt2
povos $alt
poxa p'oS&
primavera $alt
prosopopeia $alt
prosopopeia $alt
quarteto $alt2
queda $alt
quede $alt2
@@ -986,13 +993,13 @@ reforço $alt $verb
reforços $alt
refresco $alt $verb
reitora $alt2
rejo $alt
rejo $alt
relevo $alt2 $noun
remorso $alt
renovo $alt $verb
renovo $alt $verb
retorno $alt $verb
reuva $alt
rigores $alt2
reuva $alt
rigores $alt2
rixa x'iS&
rocha $alt
rock $alt
@@ -1037,10 +1044,10 @@ tocha $alt
toga $alt
topo $alt $verb
torno $alt $verb
tornozelo $alt2
tornozelo $alt2
torre $alt2 $noun
torres $alt2
torro $alt
torro $alt
tortos $alt
traqueia $alt
travesso $alt2
@@ -1054,6 +1061,7 @@ tumores $alt2
valeta $alt2
vanessa $alt2
velozes $alt
verbete $alt2
violeta $alt2
violoncelo $alt
voga $alt
@@ -1070,7 +1078,8 @@ zorra $alt2
?1 back b'Ek
?2 backup bEk'&p
?2 backups bEk'&ps
?1 blind bl'aind
blind bl'aind
book buk
?1 braille b:r'aily
?2 Braille bR'aili
?1 cancel k'&ns'El
@@ -1087,7 +1096,6 @@ zorra $alt2
?2 download daUNl'owd
?3 download dau~Nl'owd
?1 end 'end
?1 escape Sk'eIpy
?2 esc 'Esk
?3 esc 'EskI
?1 explorer ,ekspl'O:*&r-
@@ -1110,6 +1118,7 @@ zorra $alt2
?2 Intranet iNtRan'Et
?1 kernel k'Ern,El
?2 kernel k'Ern@l
laptop lEptOp
?1 line l'ain
layout l'eI,aUt
?2 logo l'OgU
@@ -1140,14 +1149,12 @@ símbolo s'imbolU
?2 software s'Oftwe@-
?1 space sp'eIsy
?1 sporting sp'Ort,ing
?1 tab t'ab
tab t'aby
?1 telemóvel t,El,Em'OvEl
?1 telemóveis t,El,Em'OveIs#
?1 up &p
?1 upload &pl'oud
?2 web w'Eb
?2 verbete verb'etSi
?2 verbetes verb'etSis
?1 yahoo 'i,ah'u
?2 yahoo iah'u
?1 yes j'Es
@@ -1161,14 +1168,16 @@ louis _^_FR
// foreign product names
?1 access 'aks,Es
?1 adobe &d'Oby
apple 'Epow
chrome kR'owmi
debian d'Ebj&~N
?1 excel ,Eks'El
?1 express ,Ekspr'Es
espeak isp'i:k
?1 espeakedit isp'i:kEd,it
facebook feisybuk
?1 fedora _^_EN
?1 firefox f'ai&rfOks
?2 firefox f'ai@fOks
firefox f'ai@fOks
?1 front fr'ont
?1 jaws dZ'au:z
?1 linux l,in'uks
@@ -1203,6 +1212,7 @@ playstation _^_EN
suse z'u:ts@
?1 start st'art // nero StartSmart
?1 time t'aImy // nero show time
twitter tw'iter
ubuntu ub'untu
?1 unix ,u:n'iks
?2 unix j'uniks

+ 37
- 26
dictsource/pt_rules View File

@@ -100,6 +100,7 @@
ái (s ''aI
á (iCK ''a
áy ''aI
ál (C ''aU
áu ''aU
áu (s ''aU
?1 ál ''Al
@@ -221,13 +222,13 @@
f) e (rem_ E

e (que_ E
e (quem_ E
e (quem_ E
e (rgA_ E
e (rgAm_ E

e (rgue_ E
e (rguem_ E
e (rgue_ E
e (rguem_ E

e (rsA_ E
e (rsAm_ E
@@ -242,7 +243,7 @@ e (rguem_ E
e (stAm_ E
e (strA_ E

e (rme_ E
e (rme_ E

e (rnA_ E
e (rnAm_ E
@@ -461,6 +462,7 @@ respond) e (L07_ e // cor-
_gr) e (gL03_ e
_gal) e (gL03_ e
_n) e (grL03_ e
_ch) e (guL02_ e
estr) ei (L04_ EI
_inv) e (jL04_ E
tr) e (pL04_ E // es-
@@ -488,10 +490,9 @@ _recup) e (rL04_ E
_refrig) e (rL04_ E
_v) e (rbL03_ E
_p) e (rdL02_ E
_ch) e (guL02_ e
_l) e (rdL03_ E
_h) e (rdL04_ E
_bez) e (rrL03_ e
_bez) e (rrL03_ e
_inv) e (rtL03_ e
_f) e (rvL03_ e
_refr) e (scL01_ E
@@ -536,6 +537,7 @@ _entorp) e (çL03_ e
éi (s ''EI
é (iCK ''E
éy ''eI
él (C ''EU
éu ''EU
éu (s ''EU
é (uCK ''E
@@ -576,18 +578,18 @@ _entorp) e (çL03_ e
gu (Y g
a) gu (ent gw
_ar) gu (i gw
averi) gu (e gw
averi) gu (e gw
enxa) gu (e gw
i) gu (idade gw
i) gu (idade gw
lin) gu (e gw
lin) gu (i gw
_min) gu (e gw
_min) gu (e gw
_pin) gu (im_ gw
_pin) gu (ins_ gw
_sa) gu (i gw
_sa) gu (i gw
san) gu (ín gw
san) gu (in gw
tin) gu (i gw
tin) gu (i gw
?1 n) gu (A gw // eg: língua, etc.
?1 man) gu (ei g // mangueira
?1 gu (ém_ g // eg: alguém, ninguém, etc...
@@ -620,6 +622,8 @@ _entorp) e (çL03_ e

i (A_ 'i
i (am_ 'i
i (em_ 'i

io (_ iU
io (s_ iU
i (oCK i
@@ -657,6 +661,7 @@ _entorp) e (çL03_ e
ím (C ''im
ín (K ''iN
ính ''in^
íl (C ''IU


.group j
@@ -754,6 +759,9 @@ _entorp) e (çL03_ e
o (ltA_ O
o (ltAm_ O

o (lve_ O
o (lvem_ O

o (sA_ O
o (so_N o // not for osos_
o (sAm_ O
@@ -831,10 +839,10 @@ _entorp) e (çL03_ e
//sort
_f) o (L05_ o
_f) o (L07_ o
_engl) o (bL04_ O
_s) o (bL02_ O
_af) o (bL04_ O
_esn) o (bL04_ O
_af) o (bL04_ O
_engl) o (bL04_ O
br) o (chL04_ O
_deb) o (chL04_ O
_m) o (fL01_ O
@@ -842,8 +850,6 @@ _entorp) e (çL03_ e
_s) o (frL02_ O
r) o (gL04_ O // inter-
_j) o (gL04_ O
_emp) o (lgL04_ O
_f) o (lgL04_ O
_af) o (gL04_ O
_adv) o (gL04_ O
_ref) o (gL04_ O
@@ -851,15 +857,12 @@ _f) o (lgL04_ O
_ap) oi (L02_ OI
_b) oi (L04_ OI
_t) o (lL03_ o
_f) o (lgL04_ O
_emp) o (lgL04_ O
c) o (lhL02_ O // es- en- re-
_t) o (lhL02_ O
_m) o (lhL04_ O
env) o (lvL02_ O // des-
_abs) o (lvL02_ O
_dev) o (lvL02_ O
_res) o (lvL02_ O
_rev) o (lvL02_ O
_ent) o (pL02_ O
ent) o (pL02_ O
_c) o (pL03_ O
_ens) o (pL04_ O
_s) o (prL04_ O
@@ -941,21 +944,21 @@ _remem) o (rL04_ O
?1 _) qua kwa // quatro, etc.
?1 _) que ke // quente, etc.
?1 _) quei (C k'eI // queira, queima, etc
A) quên (C kw'eN // frequência, etc.
C) quên (C kw'eN // delinquência, etc.
C) quên (A kw'eN // quinquênio, etc.
quên kw'eN // quinquênio, etc.
ade) qu (e kw
_a) qu (idade_ kw
_a) qu (ífero_ kw
e) qu (estr kw
ese) qu (ív kw
_e) qu (in kw
fre) qu (ent kw
_ini) qu (idade_ kw
li) qu (id kw
lí) qu (id kw
n) qu (en kw
_) qu (inqu kw
se) qu (en kw
tran) qu (il kw
?1 quec kes // esquece, etc.
?1 queç kes // esqueça.
?1 A) que (nA_ ke // pequeno, etc.
?1 C) quê (_ ke // porquê, etc.
@@ -1013,6 +1016,14 @@ _remem) o (rL04_ O
?1 A) s (G+ Z
?1 A) s (_KS1 s#
?1 A) s (_G+S1 Z
s (b z
s (d z
s (g z
s (l z
s (m z
s (n z
sr zx
s (v z

_) sobre (@P5 sob*e


+ 3
- 3
dictsource/ru_list View File

@@ -51,9 +51,9 @@ _6C S,E#s;t;s'ot
_7C s;,Ims'ot
_8C vOs;Ims'ot
_9C dev;Vts'ot
_1MA1 t'ys;Its;V // no '1' before thousand
_0MA1 t'ys;Its;i
_0M1 t'ys;Vts;
_1MA1 t'ys;ItS;V // no '1' before thousand
_0MA1 t'ys;ItS;i
_0M1 t'ys;VtS;
_1MA2 m;,IlI;'on
_0MA2 m;,IlI;'ona
_0M2 m;,IlI;'onof

+ 8
- 8
dictsource/te_list View File

@@ -22,7 +22,7 @@ n En
o o:
p pi:
q kju:
r a:r
r a:rp
s Es
t t#i:
u ju:
@@ -40,7 +40,7 @@ _1 okat.i
_1a oka
_2 rend.u
_3 mu:d.u
_4 na:lgu
_4 na:lugu
_5 aIdu
_6 a:ru
_7 ;e:d.u
@@ -48,20 +48,20 @@ _8 ;enimidi
_9 tommidi
_1X padi
_11 padakond.u
_12 pannemd.u
_13 padamu:d.u:
_12 pannend.u
_13 padammu:d.u:
_14 pad#na:lugu
_15 padihe:nu
_16 padaha:ru
_17 padihe:d.u
_18 padd#enimidi
_19 pamdommadi
_19 pandommidi
_2X irav#aI
_3X muppaI
_4X nalub#aI
_5X ja:b#aI
_6X arav#aI
_7X d.eb#baI
_7X d.#eb#baI
_8X jenab#aI
_9X tomb#aI
_0C v#andala
@@ -85,7 +85,7 @@ _?? aks.aram // 'unknown character'
+ ku:d.ika
* naks.atra
\ bja:kasla:s.
/ sla:s.
/ kudiva:lugi:ta
© ka:pi:raIt.
¶ v#e:ra:

@@ -137,7 +137,7 @@ U+c4d v#ottu
ఫ్ ip#
బ్ ib
భ్ ib#
మ్ im
మ్ imu:
య్ ij
ర్ ir
ఱ్ ir

+ 2
- 2
dictsource/te_rules View File

@@ -224,7 +224,7 @@

. ఁ n // candrabindu

m // anusvara (this should nasalize the vowel)
n // anusvara (this should nasalize the vowel)

ః h // visarga

@@ -243,7 +243,7 @@

ూ u:

ృ ru
ృ r-

ౄ r-:


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

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


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

@@ -1,4 +1,4 @@
name spanish-latin-american
name spanish-latin-am
language es-la
language es-mx 6
language es 6

+ 1
- 7
phsource/compile_report View File

@@ -28,7 +28,7 @@ consonants 11 119
ne 18 157
ur 6 149
pa 15 151
ta 23 153
ta 24 153
kn 17 149
ml 26 152
te 16 149
@@ -429,7 +429,6 @@ l/l_ [l] base
[l/3] da
l/l_@ [l/3] base
[l/] fr
[l/3] da
l/l@ [l#] base
base vowelstart_l
[l] fr
@@ -468,14 +467,12 @@ l/la [l#] base
[l/2] fr
l/l_a [l/3] base
[l/] fr
[l/3] da
l/le [l#] base
base vowelstart_l
[l] fr
[l/2] fr
l/l_e [l/3] base
[l/] fr
[l/3] da
l/L_eL_af [&] af
[&:] af
l/l_front [L] sq
@@ -488,7 +485,6 @@ l/li [l#] base
l/l_i [l/3] base
[l/] fr
[i] sq
[l/3] da
ll/ll [L] base
ll/_ll [L] base
l/l_long [l] base
@@ -498,7 +494,6 @@ l/lo [l#] base
[l/2] fr
l/l_o [l/3] base
[l/] fr
[l/3] da
l^/l_rfx [l.] base
[l;] lt
[l] ru
@@ -509,7 +504,6 @@ l/lu [l#] base
[l/2] fr
l/l_u [l/3] base
[l/] fr
[l/3] da
l/l_vi [l] vi
ll/xll [L] base
l/l_y [l/] fr

+ 6
- 6
phsource/ph_bengali View File

@@ -35,37 +35,37 @@ endphoneme

phoneme i
vowel starttype #i endtype #i
length 200
length 210
FMT(vowel/i_6)
endphoneme


phoneme u
vowel starttype #u endtype #u
length 200
length 210
FMT(vowel/u)
endphoneme


phoneme e
vowel starttype #e endtype #e
length 200
length 210
FMT(vowel/e)
endphoneme


phoneme &
vowel starttype #a endtype #a
length 200
length 210
FMT(vowel/&_2)
endphoneme


phoneme o
vowel starttype #o endtype #o
length 200
length 210
IF nextPhW(w) THEN
length 160
length 170
ENDIF
FMT(vowel/o)
endphoneme

+ 155
- 186
phsource/ph_danish View File

@@ -8,6 +8,116 @@
// AC + @- OR V: Long "pile" [pi:l@-]
// AC[i]: Long "smidig" [smi:Di]

// Change the length of short vowels (?+vowel)
procedure ShortVowelLength
// "endelig" - Short initial vowel sounds too short
IF thisPh(isWordStart) THEN
length 160
RETURN
ENDIF
// "slutte" t/d + @- makes the u too long
IF next2PhW(@-) THEN
IF nextPhW(t) OR nextPhW(d) THEN
//length 100
LengthAdd -50
// Don't shorten it further if it comes after an "r" sound
// Exit the procedure
RETURN
ENDIF
ENDIF
// "bygget" - consonant + [@-D] makes the vowel too long
IF next2PhW(@-) THEN
IF next3PhW(t) OR next3PhW(d) OR next3PhW(D) THEN
LengthAdd -50
// Don't shorten it further if it comes after an "r" sound ("brygget")
// Exit the procedure
RETURN
ENDIF
ENDIF
// "bygger" - consonant + [V] makes the vowel too long
IF nextPhW(isNotVowel) AND next2PhW(V) THEN
LengthAdd -50
// Don't shorten it further if it comes after an "r" sound ("brygger")
// Exit the procedure
RETURN
ENDIF
// "rigtigt", "fred", "frem", "centralen" - R makes the vowel too long
IF prevPhW(R) OR prevPhW(3-) OR prevPhW(r) THEN
// length 100
LengthAdd -50
ENDIF
// "ring", "ringe", "fængsel"
IF nextPhW(N) THEN
// length 100
LengthAdd -10
ENDIF
// "sigte" t/d + @- makes the vowel too long
IF nextPhW(isNotVowel) AND next2PhW(t) OR next2PhW(d) THEN
IF next3PhW(@-) THEN
// length 100
LengthAdd -50
ENDIF
ENDIF
endprocedure

// Change the length of normal vowels (without ? in front of them)
procedure LongVowelLength
// "alene" - Short initial vowel sounds too short at length 140
IF thisPh(isWordStart) THEN
length 160
RETURN
ENDIF
// "forlade" - [D@-] makes the vowel too long
IF nextPhW(D) AND next2PhW(@-) THEN
length 180
RETURN
ENDIF
// PB long vowel followed by [@-] or [V](vowel+vowel) - "pigen" [p'i@-n]
IF nextPhW(@-) OR nextPhW(V) THEN
length 225
ENDIF
// PB "enig", "enige", "evig", "stædig" - vowel+consolant+[i]
IF nextPhW(isNotVowel) AND next2PhW(i) THEN
length 225
ENDIF
// "ræve", "dele", "mene", "røve", "møve"
IF nextPhW(isNotVowel) AND next2PhW(@-) OR next2PhW(3) OR next3PhW(@-) THEN
length 225
ENDIF
// "vilje", "nedladende" [n'eDl&D@-n@-], "delte" - short followed by 2 consonants
IF nextPhW(isNotVowel) AND next2PhW(isNotVowel) THEN
// Don't make "møve" [m'Ww_!@-_!] short
IF NOT next2PhW(_!) THEN
length 140
ENDIF
ENDIF
// "bryde", "bryder", "strålen", "henrivende" R makes the vowel too long
IF prevPhW(R) OR prevPhW(3-) OR prevPhW(r) THEN
IF next2PhW(@-) OR next2PhW(V) THEN
// length 180
LengthAdd -70
ENDIF
ENDIF
// "syste", "sylte" t/d/D + @- makes the vowel too long
// "international", - added [V] TEST
IF nextPhW(isNotVowel) AND next2PhW(t) OR next2PhW(d) OR next2PhW(D) THEN
IF next3PhW(@-) OR next3PhW(V) THEN
length 110
ENDIF
ENDIF
// "glimrende" [l/3] makes the following vowel too long
// LengthAdd doesn't work here. The length could be 225 or 140 - 30
IF prevPhW(l/3) THEN
// LengthAdd -30
length 110
ENDIF
// "længe" - short - 2 consonants => 1 consonant (ng => [N])
IF nextPhW(N) THEN
length 140
ENDIF
endprocedure

// A bit longer than [@-]
phoneme @
vowel starttype #@ endtype #@
unstressed
@@ -59,26 +169,12 @@ phoneme i
length 140
// Long vowel followed by consonant and @- "gide", "pile"
IF nextPhW(isNotVowel) AND next2PhW(@-) THEN
length 225
// length 225
ENDIF
// "gider", vrider"
IF nextPhW(D) AND next2PhW(V) OR next2PhW(?V) THEN
length 140
ENDIF
// PB long vowel followed by [@-] - "pigen" [p'i@-n]
IF nextPhW(@-) OR nextPhW(V) THEN
length 225
ENDIF
// "vilje" - short followed by 2 consonants
IF nextPhW(isNotVowel) AND next2PhW(isNotVowel) THEN
length 140
ENDIF
// PB "tie", "stige", "krige" vowel + vowel: extra length
// What is causing this very short [i] in words with final [@-]?
// NOT "galleriet" [g,?&lVR'i@-D]
IF nextPhW(V) OR nextPhW(@) OR nextPhW(@-) AND NOT next2PhW(D) THEN
// length 240
ENDIF
//"skider" short
IF nextPhW(D) AND next2PhW(V) THEN
length 140
@@ -87,7 +183,7 @@ ENDIF
IF nextPhW(D) AND next2PhW(V) AND next3PhW(V) THEN
length 225
ENDIF
CALL LongVowelLength
FMT(vowel/i_4)
endphoneme

@@ -95,7 +191,8 @@ endphoneme
// sviret vs. svirret
phoneme ?i
vowel starttype #i endtype #i
length 100
length 140
CALL ShortVowelLength
IfNextVowelAppend(;)
FMT(vowel/i_4)
endphoneme
@@ -111,22 +208,8 @@ endphoneme
phoneme e
vowel starttype #e endtype #e
length 140
// "dele", "mene"
IF next2PhW(@-) THEN
length 225
ENDIF
// PB "ring", "ringe"
IF nextPhW(N) THEN
length 140
ENDIF
// PB "enig", "enige", "evig"
IF nextPhW(isNotVowel) AND next2PhW(i) THEN
length 225
ENDIF
// "nedladende" [n'eDl&D@-n@-], "delte" - before 2 consonants: short
IF nextPhW(isNotVowel) AND next2PhW(isNotVowel) THEN
length 140
ENDIF
CALL LongVowelLength
CALL ShortVowelLength
FMT(vowel/e)
endphoneme

@@ -135,14 +218,7 @@ endphoneme
phoneme ?e
vowel starttype #e endtype #e
length 140
// "rigtigt" R makes the e too long
IF prevPhW(R) THEN
length 100
ENDIF
// "sigte" t/d + @- makes the e too long
IF nextPhW(isNotVowel) AND next2PhW(t) OR next2PhW(d) AND next3PhW(@-) THEN
length 100
ENDIF
CALL ShortVowelLength
FMT(vowel/e)
endphoneme

@@ -153,29 +229,18 @@ phoneme E
IF thisPh(isWordEnd) THEN
IfNextVowelAppend(_!)
ENDIF
// "ræve"
IF nextVowel(@-) THEN
length 225
ENDIF
// "ære", "kærester", "ærefrygt" - longer E
// "ære", "kærester", "ærefrygt" - vowel + vowel
IF nextPhW(V) THEN
length 225
ENDIF
// "stædig" [st'EDi] long
IF nextPhW(isNotVowel) AND next2PhW(i) THEN
// "dræber" TEST shortened by -70 in procedure because of the "r" sound
IF prevPhW(R) OR prevPhW(r) OR prevPhW(3-) AND next2PhW(V) THEN
length 225
ENDIF
// "længe" - short - 2 consonants => 1 consonant
IF nextPhW(N) THEN
length 140
ENDIF
CALL LongVowelLength
// "værelse" [v'E3-Vls@_!]
IF nextPhW(3-) AND next2PhW(V) THEN
length 100
ENDIF
// "mælkebøtte" - short followed by 2 consonants
IF nextPhW(isNotVowel) AND next2PhW(isNotVowel) THEN
length 140
ENDIF
FMT(vowel/e_mid2)
endphoneme
@@ -186,14 +251,7 @@ phoneme ?E
vowel starttype #e endtype #e
ipa ε
length 140
// "fred" R makes the E too long
IF prevPhW(R) OR prevPhW(3-) OR prevPhW(r) THEN
length 100
ENDIF
// "fængsel" N makes the E too long
IF nextPhW(N) THEN
length 100
ENDIF
CALL ShortVowelLength
FMT(vowel/e_mid2)
endphoneme

@@ -203,22 +261,17 @@ phoneme &
length 140
// "same", "sale", "bade" - consonant + @-: long
// but NOT "hinanden"
IF next2PhW(@-) OR next2PhW(@) AND NOT next3PhW(n) THEN
length 225
IF nextPhW(isNotVowel) AND next2PhW(@-) OR next2PhW(@) THEN
IF NOT next3PhW(n) THEN
length 225
ENDIF
ENDIF
// ThisPh + V or @-
// "ae", "aer" vowel + vowel: extra length
IF nextPhW(@-) OR nextPhW(V) THEN
length 260
ENDIF
// "stadig" [st&Di], "stadigt" [st&Dit]
IF nextPhW(isNotVowel) AND next2PhW(i) THEN
length 225
ENDIF
// "Alfie", "alfer" - short before 2 consonants
IF nextPhW(isNotVowel) AND next2PhW(isNotVowel) THEN
length 140
ENDIF
CALL LongVowelLength
FMT(vowel/ee_2)
endphoneme

@@ -228,7 +281,7 @@ endphoneme
phoneme ?&
vowel starttype #e endtype #e
length 140
FMT(vowel/ee_2)
FMT(vowel/ee_2)
endphoneme

// Added for the æ in "dræbt"
@@ -236,6 +289,8 @@ phoneme &#
vowel starttype #e endtype #e
length 140
ipa a
CALL LongVowelLength
// CALL ShortVowelLength
FMT(vowel/&)
endphoneme

@@ -243,40 +298,28 @@ endphoneme
// "revl" vs. "tremme"
phoneme ?&#
vowel starttype #e endtype #e
length 120
length 140
CALL ShortVowelLength
FMT(vowel/&)
endphoneme

phoneme A // PB changed to a_8
vowel starttype #a endtype #a
length 140
// PB long vowel followed by consonant and certain vowels - "drabelig"
IF nextPhW(isNotVowel) AND next2PhW(#@) OR next2PhW(V) THEN
length 225
ENDIF
// "bange" [bAN@-] - [N] = 2 consonants (ng) => short
IF nextPhW(N) THEN
length 140
ENDIF
CALL LongVowelLength
// "fare" [f'A:A]
IF nextPhW(A) THEN
length 225
ENDIF
// "gratis"
IF next2PhW(i) THEN
length 225
ENDIF
IF nextPhW(isNotVowel) AND next2PhW(isNotVowel) THEN
length 140
ENDIF
FMT(vowel/a_8)
endphoneme

// PB short A
// "drab" vs. "drabelig"
// "krabbe" vs. "drabelig"
phoneme ?A
vowel starttype #a endtype #a
length 140
CALL ShortVowelLength
FMT(vowel/a_8)
endphoneme

@@ -287,10 +330,7 @@ phoneme u
IF nextPhW(@-) OR nextPhW(V) OR next2PhW(@-) OR next2PhW(V)THEN
length 225
ENDIF
// "umulig" [u:m'uli]
IF nextVowel(i) AND nextVowel(isFinalVowel) AND nextVowel(isWordEnd) THEN
length 225
ENDIF
CALL LongVowelLength
FMT(vowel/u_bck)
endphoneme

@@ -299,10 +339,7 @@ endphoneme
phoneme ?u
vowel starttype #u endtype #u
length 140
// "slutte" t/d + @- makes the u too long
IF nextPhW(t) OR nextPhW(d) AND next2PhW(@-) THEN
length 100
ENDIF
CALL ShortVowelLength
FMT(vowel/u_bck)
endphoneme

@@ -317,10 +354,7 @@ ENDIF
IF next2PhW(V) OR next2PhW(@-) THEN
length 225
ENDIF
// "modig" - long vowel after consonant + [i]
IF nextPhW(D) AND next2PhW(i) THEN
length 225
ENDIF
CALL LongVowelLength
FMT(vowel/o_2)
endphoneme

@@ -344,14 +378,11 @@ ENDIF
IF nextPhW(V) OR nextPhW(@-) THEN
length 225
ENDIF
// "rådig"
IF nextVowel(i) AND nextVowel(isFinalVowel) THEN
length 225
ENDIF
// "såre", "sårede" [s'O:?OD@-]
IF nextPhW(O) OR nextPhW(?O) THEN
length 225
ENDIF
CALL LongVowelLength
FMT(vowel/o_5)
endphoneme

@@ -366,14 +397,7 @@ endphoneme
phoneme V
vowel starttype #@ endtype #@
length 140
// "forlig"
IF nextPhW(isNotVowel) AND next2PhW(i) THEN
length 225
ENDIF
// PB "konge" - ng=>n
IF nextPhW(N) THEN
length 140
ENDIF
CALL LongVowelLength
FMT(vowel/V_4)
endphoneme

@@ -387,10 +411,8 @@ endphoneme

phoneme 0
vowel starttype #o endtype #o
length 140 //225
IF nextPhW(3) OR nextPhW(V) OR nextPhW(@-) THEN
length 225
ENDIF
length 140
ipa ɔ
FMT(vowel/oo_2)
endphoneme

@@ -398,6 +420,7 @@ endphoneme
phoneme ?0
vowel starttype #o endtype #o
length 140
ipa ɔ
FMT(vowel/oo_2)
endphoneme

@@ -407,24 +430,20 @@ phoneme y
// PB long vowel followed by consonant and certain vowels
// "gyde", "gyder"
IF nextPhW(isNotVowel) AND next2PhW(@-) OR next2PhW(V) THEN
length 225
ENDIF
// "dydig" [dyDi]
IF nextPhW(isNotVowel) AND next2PhW(i) THEN
length 225
// not "gebyret" TEST
IF NOT nextPhW(3-) AND NOT nextPhW(R) AND NOT nextPhW(r) THEN
length 225
ENDIF
ENDIF
// "syge" [sy@-] vowel + vowel: extra length, but NOT "fyret" [fyVD]
IF nextPhW(@-) OR nextPhW(3) AND NOT next2PhW(D) THEN
length 225
ENDIF
// "tyve"
IF nextPhW(?u) AND next2PhW(@-) THEN
IF nextPhW(w) AND next2PhW(@-) THEN
length 225
ENDIF
// "bryde" R makes the y too long
IF prevPhW(R) OR prevPhW(3-) OR prevPhW(r) THEN
length 180
ENDIF
CALL LongVowelLength
FMT(vowel/y)
endphoneme

@@ -433,25 +452,14 @@ endphoneme
phoneme ?y
vowel starttype #i endtype #i
length 140
// "udrydde" R makes the y too long
IF prevPhW(R) OR prevPhW(3-) OR prevPhW(r) THEN
length 100
ENDIF
// "hytte" t/d + @- makes the y too long
IF nextPhW(t) OR nextPhW(d) AND next2PhW(@-) THEN
length 100
ENDIF
CALL ShortVowelLength
FMT(vowel/y)
endphoneme

phoneme Y
vowel starttype #i endtype #i
length 225
IF NOT next2Ph(3) AND NOT next2Ph(V) AND NOT next2PhW(@-) AND nextPhW(isNotVowel) THEN
glstop
length 140
ENDIF
IF nextPhW(3) OR nextPhW(V) OR nextPhW(@) THEN
length 140
IF nextPhW(V) OR nextPhW(@-) THEN
length 225
ENDIF
FMT(vowel/yy)
@@ -460,34 +468,15 @@ endphoneme
phoneme W
vowel starttype #@ endtype #@
length 140
// "kløe" vowel + vowel: long
IF nextPhW(@-) THEN
length 225
ENDIF
// "røve" W + 1 consonant + 3 or W or @
IF next2PhW(@-) OR next2PhW(3) THEN
length 225
ENDIF
// "røveri" but NOT "surfer" [sWfV] TEST
IF next2PhW(V) OR next2PhW(?V) AND NOT next2PhW(isFinalVowel) THEN
length 140
ENDIF
// PB "nødig", "nødigt", "kølige" - long
IF nextVowel(i) THEN
length 225
ENDIF
// "møve" [mWw@-] - long
IF nextPhW(w) AND nextVowel(@-) THEN
length 225
ENDIF
// "børnebog" - short
IF nextPhW(r) AND next2PhW(n) AND next3PhW(@-) THEN
length 140
ENDIF
// PB "synge"
IF nextPhW(N) THEN
length 140
ENDIF
CALL LongVowelLength
FMT(vowel/oe)
endphoneme

@@ -496,10 +485,7 @@ endphoneme
phoneme ?W
vowel starttype #@ endtype #@
length 140
// "bryllup", "rødder" R makes the y too long
IF prevPhW(R) OR prevPhW(3-) OR prevPhW(r) THEN
length 100
ENDIF
CALL ShortVowelLength
FMT(vowel/oe)
endphoneme

@@ -519,6 +505,7 @@ endphoneme
phoneme ?W#
vowel starttype #@ endtype #@
length 140
CALL ShortVowelLength
FMT(vowel/V)
endphoneme

@@ -562,24 +549,6 @@ endphoneme
phoneme l/3 // Replacement for [l/]
liquid
lengthmod 7

IF nextPhW(isVowel) THEN
// ChangePhoneme(l)
ENDIF

PrevVowelEndings
VowelEnding(l/l_@)
VowelEnding(l/l_a)
VowelEnding(l/l_e, -50) // hjælpe
VowelEnding(l/l_i, -70) // flygte?
VowelEnding(l/l_o, -60) // stole, skole, hjulpet
VowelEnding(l/l_u, -70)
EndSwitch

// IF nextPh(isLiquid) THEN
// FMT(l/_l)
// ENDIF

FMT(l/l_)
endphoneme


+ 1
- 1
phsource/ph_english_us View File

@@ -322,7 +322,7 @@ endphoneme

phoneme aI3
vowel starttype #a endtype #@
length 300
length 310
ipa aɪɚ
IfNextVowelAppend(r-)
FMT(vwl_en_us/ai3)

+ 4
- 0
phsource/ph_tamil View File

@@ -159,3 +159,7 @@ phoneme # // a NULL phoneme for 'virama'
ChangePhoneme(NULL)
endphoneme

phoneme z.
CALL base/z.
ipa U+027B
endphoneme

BIN
phsource/vwl_en_us/er View File


BIN
phsource/vwl_en_us/oor View File


+ 1
- 0
src/compiledata.cpp View File

@@ -3059,6 +3059,7 @@ int CompilePhoneme(int compile_phoneme)

case kRETURN:
*prog_out++ = i_RETURN;
DecThenCount();
break;

case kINCLUDE:

+ 29
- 2
src/numbers.cpp View File

@@ -699,11 +699,38 @@ int TranslateLetter(Translator *tr, char *word, char *phonemes, int control)
else
language = L('e','n');

if(language != tr->translator_name)
if((language != tr->translator_name) || (language == L('k','o')))
{
char *p3;
int initial, code;
char hangul_buf[12];

// speak in the language for this alphabet (or English)
ph_buf[2] = SetTranslator2(WordToString2(language));
LookupLetter(translator2, letter, word[n_bytes], &ph_buf[3], control & 1);

if(((code = letter - 0xac00) >= 0) && (letter <= 0xd7af))
{
// Special case for Korean letters.
// break a syllable hangul into 2 or 3 individual jamo

hangul_buf[0] = ' ';
p3 = &hangul_buf[1];
if((initial = (code/28)/21) != 11)
{
p3 += utf8_out(initial + 0x1100, p3);
}
utf8_out(((code/28) % 21) + 0x1161, p3); // medial
utf8_out((code % 28) + 0x11a7, &p3[3]); // final
p3[6] = ' ';
p3[7] = 0;
ph_buf[3] = 0;
TranslateRules(translator2, &hangul_buf[1], &ph_buf[3], sizeof(ph_buf)-3, NULL, 0, NULL);
SetWordStress(translator2, &ph_buf[3], NULL, -1, 0);
}
else
{
LookupLetter(translator2, letter, word[n_bytes], &ph_buf[3], control & 1);
}

if(ph_buf[3] == phonSWITCH)
{

+ 59
- 50
src/phonemelist.cpp View File

@@ -125,6 +125,7 @@ void MakePhonemeList(Translator *tr, int post_pause, int start_sentence)
int delete_count;
int word_start;
int inserted;
int deleted;
PHONEME_DATA phdata;

int n_ph_list3;
@@ -343,6 +344,7 @@ void MakePhonemeList(Translator *tr, int post_pause, int start_sentence)
plist3 = &ph_list3[j];

inserted = 0;
deleted = 0;
if(insert_ph != 0)
{
// we have a (linking) phoneme which we need to insert here
@@ -431,23 +433,27 @@ void MakePhonemeList(Translator *tr, int post_pause, int start_sentence)
plist3->phcode = alternative;

if(alternative == 1)
continue; // NULL phoneme, discard

if(ph->type == phVOWEL)
{
plist3->synthflags |= SFLAG_SYLLABLE;
if(ph2->type != phVOWEL)
plist3->stresslevel = 0; // change from non-vowel to vowel, make sure it's unstressed
deleted = 1; // NULL phoneme, discard
}
else
plist3->synthflags &= ~SFLAG_SYLLABLE;
{
if(ph->type == phVOWEL)
{
plist3->synthflags |= SFLAG_SYLLABLE;
if(ph2->type != phVOWEL)
plist3->stresslevel = 0; // change from non-vowel to vowel, make sure it's unstressed
}
else
plist3->synthflags &= ~SFLAG_SYLLABLE;

// re-interpret the changed phoneme
// But it doesn't obey a second ChangePhoneme()
InterpretPhoneme(tr, 0x100, plist3, &phdata, &worddata);
// re-interpret the changed phoneme
// But it doesn't obey a second ChangePhoneme()
InterpretPhoneme(tr, 0x100, plist3, &phdata, &worddata);
}
}

if(ph->type == phVOWEL)
if((ph->type == phVOWEL) && (deleted == 0))
{
PHONEME_LIST *p;

@@ -552,7 +558,7 @@ void MakePhonemeList(Translator *tr, int post_pause, int start_sentence)
}
}

if(plist3 != plist3_inserted)
if((plist3 != plist3_inserted) && (ix > 0))
{
if((x = (tr->langopts.word_gap & 0x7)) != 0)
{
@@ -585,51 +591,54 @@ void MakePhonemeList(Translator *tr, int post_pause, int start_sentence)
// not yet implemented
}

phlist[ix].ph = ph;
phlist[ix].type = ph->type;
phlist[ix].env = PITCHfall; // default, can be changed in the "intonation" module
phlist[ix].synthflags = plist3->synthflags;
phlist[ix].stresslevel = plist3->stresslevel & 0xf;
phlist[ix].wordstress = plist3->wordstress;
phlist[ix].tone_ph = plist3->tone_ph;
phlist[ix].sourceix = 0;
phlist[ix].phcode = ph->code;

if(plist3->sourceix != 0)
if(deleted == 0)
{
phlist[ix].sourceix = plist3->sourceix;
phlist[ix].newword = 1; // this phoneme is the start of a word
phlist[ix].ph = ph;
phlist[ix].type = ph->type;
phlist[ix].env = PITCHfall; // default, can be changed in the "intonation" module
phlist[ix].synthflags = plist3->synthflags;
phlist[ix].stresslevel = plist3->stresslevel & 0xf;
phlist[ix].wordstress = plist3->wordstress;
phlist[ix].tone_ph = plist3->tone_ph;
phlist[ix].sourceix = 0;
phlist[ix].phcode = ph->code;

if(plist3->sourceix != 0)
{
phlist[ix].sourceix = plist3->sourceix;
phlist[ix].newword = 1; // this phoneme is the start of a word

if(start_sentence)
if(start_sentence)
{
phlist[ix].newword = 5; // start of sentence + start of word
start_sentence = 0;
}
}
else
{
phlist[ix].newword = 5; // start of sentence + start of word
start_sentence = 0;
phlist[ix].newword = 0;
}
}
else
{
phlist[ix].newword = 0;
}

// phlist[ix].length = ph->std_length;
phlist[ix].length = phdata.pd_param[i_SET_LENGTH]*2;
if((ph->code == phonPAUSE_LONG) && (option_wordgap > 0))
{
phlist[ix].ph = phoneme_tab[phonPAUSE_SHORT];
phlist[ix].length = option_wordgap*14; // 10mS per unit at the default speed
}
// phlist[ix].length = ph->std_length;
phlist[ix].length = phdata.pd_param[i_SET_LENGTH]*2;
if((ph->code == phonPAUSE_LONG) && (option_wordgap > 0) && (plist3[1].sourceix != 0))
{
phlist[ix].ph = phoneme_tab[phonPAUSE_SHORT];
phlist[ix].length = option_wordgap*14; // 10mS per unit at the default speed
}

if(ph->type==phVOWEL || ph->type==phLIQUID || ph->type==phNASAL || ph->type==phVSTOP || ph->type==phVFRICATIVE || (ph->phflags & phPREVOICE))
{
phlist[ix].length = 128; // length_mod
phlist[ix].env = PITCHfall;
}
if(ph->type==phVOWEL || ph->type==phLIQUID || ph->type==phNASAL || ph->type==phVSTOP || ph->type==phVFRICATIVE || (ph->phflags & phPREVOICE))
{
phlist[ix].length = 128; // length_mod
phlist[ix].env = PITCHfall;
}

phlist[ix].prepause = 0;
phlist[ix].amp = 20; // default, will be changed later
phlist[ix].pitch1 = 255;
phlist[ix].pitch2 = 255;
ix++;
phlist[ix].prepause = 0;
phlist[ix].amp = 20; // default, will be changed later
phlist[ix].pitch1 = 255;
phlist[ix].pitch2 = 255;
ix++;
}
}
phlist[ix].newword = 2; // end of clause


+ 2
- 0
src/readclause.cpp View File

@@ -85,6 +85,7 @@ static const unsigned short punct_chars[] = {',','.','?','!',':',';',
0x055e, // Armenian question
0x055b, // Armenian emphasis mark

0x060c, // Arabic ,
0x061b, // Arabic ;
0x061f, // Arabic ?
0x06d4, // Arabic .
@@ -132,6 +133,7 @@ static const unsigned int punct_attributes [] = { 0,
CLAUSE_QUESTION | PUNCT_IN_WORD, // Armenian question
CLAUSE_PERIOD | PUNCT_IN_WORD, // Armenian emphasis mark

CLAUSE_COMMA, // Arabic ,
CLAUSE_SEMICOLON, // Arabic ;
CLAUSE_QUESTION, // Arabic question mark
CLAUSE_PERIOD, // Arabic full stop

+ 24
- 4
src/setlengths.cpp View File

@@ -575,6 +575,7 @@ void CalcLengths(Translator *tr)
int last_pitch = 0;
int pitch_start;
int length_mod;
int next2type;
int len;
int env2;
int end_of_clause;
@@ -689,8 +690,19 @@ void CalcLengths(Translator *tr)

p->prepause = 40;

if((prev->type == phPAUSE) || (prev->type == phVOWEL)) // || (prev->ph->mnemonic == ('/'*256+'r')))
p->prepause = 0;
if(prev->type == phVOWEL)
{
p->prepause = 0; // use murmur instead to link from the preceding vowel
}
else
if(prev->type == phPAUSE)
{
// reduce by the length of the preceding pause
if(prev->length < p->prepause)
p->prepause -= prev->length;
else
p->prepause = 0;
}
else
if(p->newword==0)
{
@@ -827,9 +839,17 @@ if(stress <= 1)
next3 = &phoneme_list[ix+4];
}

next2type = next2->ph->length_mod;
if(more_syllables==0)
{
len = tr->langopts.length_mods0[next2->ph->length_mod *10+ next->ph->length_mod];
if(next->newword || next2->newword)
{
// don't use 2nd phoneme over a word boundary, unless it's a pause
if(next2type != 1)
next2type = 0;
}

len = tr->langopts.length_mods0[next2type *10+ next->ph->length_mod];

if((next->newword) && (tr->langopts.word_gap & 0x20))
{
@@ -841,7 +861,7 @@ if(stress <= 1)
}
else
{
length_mod = tr->langopts.length_mods[next2->ph->length_mod *10+ next->ph->length_mod];
length_mod = tr->langopts.length_mods[next2type *10+ next->ph->length_mod];

if((next->type == phNASAL) && (next2->type == phSTOP || next2->type == phVSTOP) && (next3->ph->phflags & phFORTIS))
length_mod -= 15;

+ 1
- 1
src/synthdata.cpp View File

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

const char *version_string = "1.47.03e 29.Mar.13";
const char *version_string = "1.47.03f 31.Mar.13";
const int version_phdata = 0x014701;

int option_device_number = -1;

+ 2
- 2
src/tr_languages.cpp View File

@@ -93,12 +93,12 @@ ALPHABET alphabets [] = {
{"_ti", OFFSET_TIBET, 0xf00, 0xfff, 0, 0},
{"_my", OFFSET_MYANMAR, 0x1000,0x109f, 0, 0},
{"_ka", OFFSET_GEORGIAN, 0x10a0,0x10ff, L('k','a'), AL_WORDS},
{"_ko", OFFSET_KOREAN, 0x1100,0x11ff, 0, 0},
{"_ko", OFFSET_KOREAN, 0x1100,0x11ff, L('k','o'), AL_WORDS},
{"_eth", OFFSET_ETHIOPIC, 0x1200,0x139f, 0, 0},
{"_braille", 0x2800, 0x2800,0x28ff, 0, AL_NO_SYMBOL},
{"_ja", 0x3040, 0x3040,0x30ff, 0, AL_NOT_CODE},
{"_zh", 0x3100, 0x3100,0x9fff, 0, AL_NOT_CODE},
{"_ko", 0xa700, 0xa700,0xd7ff, 0, AL_NOT_CODE},
{"_ko", 0xa700, 0xa700,0xd7ff, L('k','o'), AL_NOT_CODE | AL_WORDS},
{NULL, 0, 0, 0, 0, 0}
};


+ 31
- 31
src/translate.cpp View File

@@ -1732,6 +1732,7 @@ int SetTranslator2(const char *new_language)
translator2->phoneme_tab_ix = new_phoneme_tab;
}
}
translator2->phonemes_repeat[0] = 0;
return(new_phoneme_tab);
} // end of SetTranslator2

@@ -2440,6 +2441,35 @@ static int TranslateChar(Translator *tr, char *ptr, int prev_in, unsigned int c,
0x72,0x73,0x74,0x75
};

// check for Korean Hangul letters
if(((code = c - 0xac00) >= 0) && (c <= 0xd7af))
{
// break a syllable hangul into 2 or 3 individual jamo
initial = (code/28)/21;
medial = (code/28) % 21;
final = code % 28;

if(initial == 11)
{
// null initial
c = medial + 0x1161;
if(final > 0)
*insert = final + 0x11a7;
}
else
{
// extact the initial and insert the remainder with a null initial
c = initial + 0x1100;
*insert = (11*28*21) + (medial*28) + final + 0xac00;
}
return(c);
}
else if(((code = c - 0x3130) >= 0) && (code < 0x34))
{
// Hangul compatibility jamo
return(hangul_compatibility[code] + 0x1100);
}

switch(tr->translator_name)
{
case L('a','f'):
@@ -2467,36 +2497,6 @@ static int TranslateChar(Translator *tr, char *ptr, int prev_in, unsigned int c,
}
}
break;

case L('k','o'):
if(((code = c - 0xac00) >= 0) && (c <= 0xd7af))
{
// break a syllable hangul into 2 or 3 individual jamo
initial = (code/28)/21;
medial = (code/28) % 21;
final = code % 28;

if(initial == 11)
{
// null initial
c = medial + 0x1161;
if(final > 0)
*insert = final + 0x11a7;
}
else
{
// extact the initial and insert the remainder with a null initial
c = initial + 0x1100;
*insert = (11*28*21) + (medial*28) + final + 0xac00;
}
return(c);
}
else if(((code = c - 0x3130) >= 0) && (code < 0x34))
{
// Hangul compatibility jamo
return(hangul_compatibility[code] + 0x1100);
}
break;
}
return(SubstituteChar(tr, c, next_in, insert, wordflags));
}
@@ -2951,7 +2951,7 @@ if((c == '/') && (tr->langopts.testing & 2) && IsDigit09(next_in) && IsAlpha(pre
}
else
{
if(iswlower(prev_in))
if((iswlower(prev_in)) && (prev_in != 0xba)) // Windows thinks masc.ordinal (0xba) is lower-case
{
// lower case followed by upper case in a word
if(UpperCaseInWord(tr, &sbuf[ix], c) == 1)

+ 14
- 3
src/voices.cpp View File

@@ -1883,12 +1883,24 @@ void FreeVoiceList()

ESPEAK_API const espeak_VOICE **espeak_ListVoices(espeak_VOICE *voice_spec)
{//========================================================================
#ifndef PLATFORM_RISCOS
char path_voices[sizeof(path_home)+12];
#ifdef PLATFORM_RISCOS
if(n_voices_list == 0)
{
sprintf(path_voices,"%s%cvoices",path_home,PATHSEP);
len_path_voices = strlen(path_voices)+1;
GetVoices(path_voices);
voices_list[n_voices_list] = NULL; // voices list terminator
}
return((const espeak_VOICE **)voices_list);

#else
int ix;
int j;
espeak_VOICE *v;
static espeak_VOICE **voices = NULL;
char path_voices[sizeof(path_home)+12];

// free previous voice list data
FreeVoiceList();
@@ -1926,7 +1938,6 @@ ESPEAK_API const espeak_VOICE **espeak_ListVoices(espeak_VOICE *voice_spec)
}
return((const espeak_VOICE **)voices);
#endif
return((const espeak_VOICE **)voices_list);
} // end of espeak_ListVoices



Loading…
Cancel
Save