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

// Aragon translation rules
// Aragon translation rules
// This file is UTF-8 encoded // This file is UTF-8 encoded


// letters // letters
/ baRRa / baRRa
\ kontraBaRRa \ kontraBaRRa
| b'aRRaBertik'al | b'aRRaBertik'al
° graUs


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

+ 28
- 16
dictsource/bn_list View File

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




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



// full vowels // full vowels
অ O অ O
উ hrOS:o'u উ hrOS:o'u
ঊ dirg#o'u ঊ dirg#o'u
ঋ ri ঋ ri
এ e
ঐ oj
ও o
ঔ ow ঔ ow


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


// combining vowel signs // combining vowel signs
া 'akar া 'akar
ি r'oS:ikar ি r'oS:ikar
ঁ tS'Ondrobindu ঁ tS'Ondrobindu
় b'indu ় b'indu


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





// Punctuation // Punctuation
। dVn.d.V । dVn.d.V

_, koma
_? pr'oSnOtSihnO


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

+ 3
- 1
dictsource/bn_rules View File


// This file is UTF8 encoded // This file is UTF8 encoded


// letter groups: // letter groups:
ৢ l- ৢ l-
ৣ l- ৣ l-


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

+ 19
- 19
dictsource/da_list View File

_#9 tab _#9 tab
_#32 blank _#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: _, k'oma:
_; se:mi:ko:lVn
_; semiko:lVn
_: k'o:lVn _: k'o:lVn
_. pONtOm // PN u => O _. pONtOm // PN u => O
_? spWrgsmVlstajn
_! udRVbstejn
_- binnesdrai
__ b'Onsdrai
_? spWrsmOlstAjn
_! udRVbstAjn
_- bin@-sdrAi
__ b'OnsdrAi
& _Vw & _Vw
£ pun? £ pun?
€ euro € euro
© kVpirajt
÷ divid'eReD||meD
© kVpirAjt
÷ divid'eRVD||mED
= l'imeD = l'imeD
# n'OmV # n'OmV
§ paragr'af § paragr'af
× g'aNe × g'aNe
ª feminin||Wdin'al ª feminin||Wdin'al
º m'askulin||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 ¢ s'ent
¥ j'en: ¥ j'en:
µ my µ my
' apostr'Vf ' apostr'Vf
½ en'hal
½ en'h&l
+ plus + plus
// numbers // numbers
idé id'e // idea idé id'e // idea
tune tun3 $capital // PB Tune lufthavn - not "tune a car" [tjune] tune tun3 $capital // PB Tune lufthavn - not "tune a car" [tjune]
ny ny // new ny ny // new
også Vs@- // also
også ?Vs@- // also
idet id'e // in so far as idet id'e // in so far as
(rub og stub) R'Ob||V||sd'Ob (rub og stub) R'Ob||V||sd'Ob
tre tr'E // the number 3 tre tr'E // the number 3
rejicerer rejis'eV // PB rejicerer rejis'eV // PB
rejiceres rejis'eVs // PB rejiceres rejis'eVs // PB
rejicering rejis'eRiN // 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 ligesom l?isVm // PB
bliver blir // PB bliver blir // PB
konfirmand kVnferm'&nd // 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

tS tS` v w x z Z 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 a aI aU e E eI eU i
o O oI u U o O oI u U
t# tS w x t# tS w x




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


a a: aI aU e E e: i a a: aI aU e E e: i
i: l- o o: r- u u: i: l- o o: r- u u:
Z z; Z z;




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


& a a~ e e~ i i~ l- & a a~ e e~ i i~ l-
o O o: O~ o~ r- u u~ o O o: O~ o~ r- u u~
x z x z




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


& &# 0 3 ?& ?&# ?0 ?A & &# 0 3 ?& ?&# ?0 ?A
?e ?E ?i ?o ?O ?u ?V ?W ?e ?E ?i ?o ?O ?u ?V ?W
ts v x z ts v x z




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


0 0# 3 3: @ @- @2 @5 0 0# 3 3: @ @- @2 @5
@L a a# A: A@ aa aI aI3 @L a a# A: A@ aa aI aI3
x z Z x z Z




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


@ a aI aU e E eI eU @ a aI aU e E eI eU
i o O oI u i o O oI u
t tS ts tS; v x z Z 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- l- o O o: O: O~ o~ r-
u U u: u~ V u U u: u~ V


S s2 t T tl# v x z 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 @- a a/ aI aU e E eI
i I i# o O u i I i# o O u
tS ts tS; v x z Z 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 @ a a# a: aI aU e E
e: i I i: o o: r- u e: i I i: o o: r- u
t.# v w x z t.# v w x z




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


8 @ @- a A a: A~ e 8 @ @- a A a: A~ e
E e# E2 e: EI eU i I E e# E2 e: EI eU i I
ts; v w x z Z Z; ts; v w x z Z Z;




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


& &/ &U~ &~ @ @- a A & &/ &U~ &~ @ @- a A
aI aU e E eI EI eU EU aI aU e E eI EI eU EU
z; Z; z; Z;




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


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

+ 2
- 1
dictsource/en_list View File


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


gilead g'IlIad gilead g'IlIad
gimme gImi gimme gImi
giraffe dZI2raaf giraffe dZI2raaf
github gIthVb
glacier gleIS3 glacier gleIS3
goin ,goUI2n $only // for goin' goin ,goUI2n $only // for goin'
gonna g,@n@ gonna g,@n@

+ 1
- 0
dictsource/es_list View File

// names of symbols // names of symbols
ª a ª a
º o º o
° grados
_. punto _. punto
_, koma _, koma
_; p,untoik'oma _; p,untoik'oma

+ 15
- 4
dictsource/hi_list View File

श S@ श S@
ष s.@ // retroflex [S] ष s.@ // retroflex [S]
स s@ स s@
ह H@-
ह H@
क़ q@ क़ q@
ख़ x@ ख़ x@
ग़ Q@ ग़ Q@


_?? Vks.@r _?? Vks.@r


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


// Punctuation // Punctuation
। dVn.d.V । dVn.d.V


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

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






// Conjunctions // Conjunctions


और $u $pause // aur: and
और $u $brk // aur: and
य j@ $u $pause // ja: or य j@ $u $pause // ja: or
अगर $u $pause // agar: if अगर $u $pause // agar: if
यदि $u $pause // yadi: if, whether यदि $u $pause // yadi: if, whether




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

+ 2
- 7
dictsource/hi_rules View File

ः H // visarga ः H // visarga


.group ् // virama .group ् // virama


// Extra consonants // Extra consonants


ज़ zV ज़ zV
ज़ (B z ज़ (B z


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








.group
$ dOlV
% pVsEnt



+ 2
- 1
dictsource/it_list View File

// 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] // $alt change [e] or [o] in the stressed syllable to [E] or [O]
# kantSellet:o # kantSellet:o
@ ki'otS:ola @ ki'otS:ola
~ tilde ~ tilde
° g@-*'a:di
: d,uep'unti : d,uep'unti


_! p,untoesklamat'ivo _! p,untoesklamat'ivo

+ 0
- 7
dictsource/ml_rules View File







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

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


.group .group
$ do:l.ar $ do:l.ar

+ 2
- 1
dictsource/nl_list View File


// This file in UTF8 encoded // This file in UTF8 encoded


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




// numbers // numbers

+ 45
- 35
dictsource/pt_list View File

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

+ 37
- 26
dictsource/pt_rules View File

ái (s ''aI ái (s ''aI
á (iCK ''a á (iCK ''a
áy ''aI áy ''aI
ál (C ''aU
áu ''aU áu ''aU
áu (s ''aU áu (s ''aU
?1 ál ''Al ?1 ál ''Al
f) e (rem_ E f) e (rem_ E


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


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


e (rsA_ E e (rsA_ E
e (rsAm_ E e (rsAm_ E
e (stAm_ E e (stAm_ E
e (strA_ E e (strA_ E


e (rme_ E
e (rme_ E


e (rnA_ E e (rnA_ E
e (rnAm_ E e (rnAm_ E
_gr) e (gL03_ e _gr) e (gL03_ e
_gal) e (gL03_ e _gal) e (gL03_ e
_n) e (grL03_ e _n) e (grL03_ e
_ch) e (guL02_ e
estr) ei (L04_ EI estr) ei (L04_ EI
_inv) e (jL04_ E _inv) e (jL04_ E
tr) e (pL04_ E // es- tr) e (pL04_ E // es-
_refrig) e (rL04_ E _refrig) e (rL04_ E
_v) e (rbL03_ E _v) e (rbL03_ E
_p) e (rdL02_ E _p) e (rdL02_ E
_ch) e (guL02_ e
_l) e (rdL03_ E _l) e (rdL03_ E
_h) e (rdL04_ E _h) e (rdL04_ E
_bez) e (rrL03_ e
_bez) e (rrL03_ e
_inv) e (rtL03_ e _inv) e (rtL03_ e
_f) e (rvL03_ e _f) e (rvL03_ e
_refr) e (scL01_ E _refr) e (scL01_ E
éi (s ''EI éi (s ''EI
é (iCK ''E é (iCK ''E
éy ''eI éy ''eI
él (C ''EU
éu ''EU éu ''EU
éu (s ''EU éu (s ''EU
é (uCK ''E é (uCK ''E
gu (Y g gu (Y g
a) gu (ent gw a) gu (ent gw
_ar) gu (i gw _ar) gu (i gw
averi) gu (e gw
averi) gu (e gw
enxa) gu (e gw enxa) gu (e gw
i) gu (idade gw
i) gu (idade gw
lin) gu (e gw lin) gu (e gw
lin) gu (i gw lin) gu (i gw
_min) gu (e gw
_min) gu (e gw
_pin) gu (im_ gw _pin) gu (im_ gw
_pin) gu (ins_ gw _pin) gu (ins_ gw
_sa) gu (i gw
_sa) gu (i gw
san) gu (ín gw san) gu (ín gw
san) gu (in gw san) gu (in gw
tin) gu (i gw
tin) gu (i gw
?1 n) gu (A gw // eg: língua, etc. ?1 n) gu (A gw // eg: língua, etc.
?1 man) gu (ei g // mangueira ?1 man) gu (ei g // mangueira
?1 gu (ém_ g // eg: alguém, ninguém, etc... ?1 gu (ém_ g // eg: alguém, ninguém, etc...


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

io (_ iU io (_ iU
io (s_ iU io (s_ iU
i (oCK i i (oCK i
ím (C ''im ím (C ''im
ín (K ''iN ín (K ''iN
ính ''in^ ính ''in^
íl (C ''IU




.group j .group j
o (ltA_ O o (ltA_ O
o (ltAm_ O o (ltAm_ O


o (lve_ O
o (lvem_ O

o (sA_ O o (sA_ O
o (so_N o // not for osos_ o (so_N o // not for osos_
o (sAm_ O o (sAm_ O
//sort //sort
_f) o (L05_ o _f) o (L05_ o
_f) o (L07_ o _f) o (L07_ o
_engl) o (bL04_ O
_s) o (bL02_ O _s) o (bL02_ O
_af) o (bL04_ O
_esn) o (bL04_ O _esn) o (bL04_ O
_af) o (bL04_ O
_engl) o (bL04_ O
br) o (chL04_ O br) o (chL04_ O
_deb) o (chL04_ O _deb) o (chL04_ O
_m) o (fL01_ O _m) o (fL01_ O
_s) o (frL02_ O _s) o (frL02_ O
r) o (gL04_ O // inter- r) o (gL04_ O // inter-
_j) o (gL04_ O _j) o (gL04_ O
_emp) o (lgL04_ O
_f) o (lgL04_ O
_af) o (gL04_ O _af) o (gL04_ O
_adv) o (gL04_ O _adv) o (gL04_ O
_ref) o (gL04_ O _ref) o (gL04_ O
_ap) oi (L02_ OI _ap) oi (L02_ OI
_b) oi (L04_ OI _b) oi (L04_ OI
_t) o (lL03_ o _t) o (lL03_ o
_f) o (lgL04_ O
_emp) o (lgL04_ O
c) o (lhL02_ O // es- en- re- c) o (lhL02_ O // es- en- re-
_t) o (lhL02_ O _t) o (lhL02_ O
_m) o (lhL04_ 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 _c) o (pL03_ O
_ens) o (pL04_ O _ens) o (pL04_ O
_s) o (prL04_ O _s) o (prL04_ O
?1 _) qua kwa // quatro, etc. ?1 _) qua kwa // quatro, etc.
?1 _) que ke // quente, etc. ?1 _) que ke // quente, etc.
?1 _) quei (C k'eI // queira, queima, 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 ade) qu (e kw
_a) qu (idade_ kw
_a) qu (ífero_ kw
e) qu (estr kw e) qu (estr kw
ese) qu (ív kw ese) qu (ív kw
_e) qu (in kw _e) qu (in kw
fre) qu (ent kw fre) qu (ent kw
_ini) qu (idade_ kw
li) qu (id kw li) qu (id kw
lí) qu (id kw lí) qu (id kw
n) qu (en kw n) qu (en kw
_) qu (inqu kw _) qu (inqu kw
se) qu (en kw se) qu (en kw
tran) qu (il kw tran) qu (il kw
?1 quec kes // esquece, etc.
?1 queç kes // esqueça. ?1 queç kes // esqueça.
?1 A) que (nA_ ke // pequeno, etc. ?1 A) que (nA_ ke // pequeno, etc.
?1 C) quê (_ ke // porquê, etc. ?1 C) quê (_ ke // porquê, etc.
?1 A) s (G+ Z ?1 A) s (G+ Z
?1 A) s (_KS1 s# ?1 A) s (_KS1 s#
?1 A) s (_G+S1 Z ?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 _) sobre (@P5 sob*e



+ 3
- 3
dictsource/ru_list View File

_7C s;,Ims'ot _7C s;,Ims'ot
_8C vOs;Ims'ot _8C vOs;Ims'ot
_9C dev;Vts'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 _1MA2 m;,IlI;'on
_0MA2 m;,IlI;'ona _0MA2 m;,IlI;'ona
_0M2 m;,IlI;'onof _0M2 m;,IlI;'onof

+ 8
- 8
dictsource/te_list View File

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


ఫ్ ip# ఫ్ ip#
బ్ ib బ్ ib
భ్ ib# భ్ ib#
మ్ im
మ్ imu:
య్ ij య్ ij
ర్ ir ర్ ir
ఱ్ ir ఱ్ ir

+ 2
- 2
dictsource/te_rules View File



. ఁ n // candrabindu . ఁ n // candrabindu


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


ః h // visarga ః h // visarga




ూ u: ూ u:


ృ ru
ృ r-


ౄ r-: ౄ r-:



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

name english name english
language en-uk 2
language en-gb 2 language en-gb 2
language en-uk 2
language en 2 language en 2
gender male gender male



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

name spanish-latin-american
name spanish-latin-am
language es-la language es-la
language es-mx 6 language es-mx 6
language es 6 language es 6

+ 1
- 7
phsource/compile_report View File

ne 18 157 ne 18 157
ur 6 149 ur 6 149
pa 15 151 pa 15 151
ta 23 153
ta 24 153
kn 17 149 kn 17 149
ml 26 152 ml 26 152
te 16 149 te 16 149
[l/3] da [l/3] da
l/l_@ [l/3] base l/l_@ [l/3] base
[l/] fr [l/] fr
[l/3] da
l/l@ [l#] base l/l@ [l#] base
base vowelstart_l base vowelstart_l
[l] fr [l] fr
[l/2] fr [l/2] fr
l/l_a [l/3] base l/l_a [l/3] base
[l/] fr [l/] fr
[l/3] da
l/le [l#] base l/le [l#] base
base vowelstart_l base vowelstart_l
[l] fr [l] fr
[l/2] fr [l/2] fr
l/l_e [l/3] base l/l_e [l/3] base
[l/] fr [l/] fr
[l/3] da
l/L_eL_af [&] af l/L_eL_af [&] af
[&:] af [&:] af
l/l_front [L] sq l/l_front [L] sq
l/l_i [l/3] base l/l_i [l/3] base
[l/] fr [l/] fr
[i] sq [i] sq
[l/3] da
ll/ll [L] base ll/ll [L] base
ll/_ll [L] base ll/_ll [L] base
l/l_long [l] base l/l_long [l] base
[l/2] fr [l/2] fr
l/l_o [l/3] base l/l_o [l/3] base
[l/] fr [l/] fr
[l/3] da
l^/l_rfx [l.] base l^/l_rfx [l.] base
[l;] lt [l;] lt
[l] ru [l] ru
[l/2] fr [l/2] fr
l/l_u [l/3] base l/l_u [l/3] base
[l/] fr [l/] fr
[l/3] da
l/l_vi [l] vi l/l_vi [l] vi
ll/xll [L] base ll/xll [L] base
l/l_y [l/] fr l/l_y [l/] fr

+ 6
- 6
phsource/ph_bengali View File



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




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




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




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




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

+ 155
- 186
phsource/ph_danish View File

// AC + @- OR V: Long "pile" [pi:l@-] // AC + @- OR V: Long "pile" [pi:l@-]
// AC[i]: Long "smidig" [smi:Di] // 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 @ phoneme @
vowel starttype #@ endtype #@ vowel starttype #@ endtype #@
unstressed unstressed
length 140 length 140
// Long vowel followed by consonant and @- "gide", "pile" // Long vowel followed by consonant and @- "gide", "pile"
IF nextPhW(isNotVowel) AND next2PhW(@-) THEN IF nextPhW(isNotVowel) AND next2PhW(@-) THEN
length 225
// length 225
ENDIF ENDIF
// "gider", vrider" // "gider", vrider"
IF nextPhW(D) AND next2PhW(V) OR next2PhW(?V) THEN IF nextPhW(D) AND next2PhW(V) OR next2PhW(?V) THEN
length 140 length 140
ENDIF 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 //"skider" short
IF nextPhW(D) AND next2PhW(V) THEN IF nextPhW(D) AND next2PhW(V) THEN
length 140 length 140
IF nextPhW(D) AND next2PhW(V) AND next3PhW(V) THEN IF nextPhW(D) AND next2PhW(V) AND next3PhW(V) THEN
length 225 length 225
ENDIF ENDIF
CALL LongVowelLength
FMT(vowel/i_4) FMT(vowel/i_4)
endphoneme endphoneme


// sviret vs. svirret // sviret vs. svirret
phoneme ?i phoneme ?i
vowel starttype #i endtype #i vowel starttype #i endtype #i
length 100
length 140
CALL ShortVowelLength
IfNextVowelAppend(;) IfNextVowelAppend(;)
FMT(vowel/i_4) FMT(vowel/i_4)
endphoneme endphoneme
phoneme e phoneme e
vowel starttype #e endtype #e vowel starttype #e endtype #e
length 140 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) FMT(vowel/e)
endphoneme endphoneme


phoneme ?e phoneme ?e
vowel starttype #e endtype #e vowel starttype #e endtype #e
length 140 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) FMT(vowel/e)
endphoneme endphoneme


IF thisPh(isWordEnd) THEN IF thisPh(isWordEnd) THEN
IfNextVowelAppend(_!) IfNextVowelAppend(_!)
ENDIF 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 IF nextPhW(V) THEN
length 225 length 225
ENDIF 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 length 225
ENDIF ENDIF
// "længe" - short - 2 consonants => 1 consonant
IF nextPhW(N) THEN
length 140
ENDIF
CALL LongVowelLength
// "værelse" [v'E3-Vls@_!] // "værelse" [v'E3-Vls@_!]
IF nextPhW(3-) AND next2PhW(V) THEN IF nextPhW(3-) AND next2PhW(V) THEN
length 100 length 100
ENDIF
// "mælkebøtte" - short followed by 2 consonants
IF nextPhW(isNotVowel) AND next2PhW(isNotVowel) THEN
length 140
ENDIF ENDIF
FMT(vowel/e_mid2) FMT(vowel/e_mid2)
endphoneme endphoneme
vowel starttype #e endtype #e vowel starttype #e endtype #e
ipa ε ipa ε
length 140 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) FMT(vowel/e_mid2)
endphoneme endphoneme


length 140 length 140
// "same", "sale", "bade" - consonant + @-: long // "same", "sale", "bade" - consonant + @-: long
// but NOT "hinanden" // 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 ENDIF
// ThisPh + V or @- // ThisPh + V or @-
// "ae", "aer" vowel + vowel: extra length // "ae", "aer" vowel + vowel: extra length
IF nextPhW(@-) OR nextPhW(V) THEN IF nextPhW(@-) OR nextPhW(V) THEN
length 260 length 260
ENDIF 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) FMT(vowel/ee_2)
endphoneme endphoneme


phoneme ?& phoneme ?&
vowel starttype #e endtype #e vowel starttype #e endtype #e
length 140 length 140
FMT(vowel/ee_2)
FMT(vowel/ee_2)
endphoneme endphoneme


// Added for the æ in "dræbt" // Added for the æ in "dræbt"
vowel starttype #e endtype #e vowel starttype #e endtype #e
length 140 length 140
ipa a ipa a
CALL LongVowelLength
// CALL ShortVowelLength
FMT(vowel/&) FMT(vowel/&)
endphoneme endphoneme


// "revl" vs. "tremme" // "revl" vs. "tremme"
phoneme ?&# phoneme ?&#
vowel starttype #e endtype #e vowel starttype #e endtype #e
length 120
length 140
CALL ShortVowelLength
FMT(vowel/&) FMT(vowel/&)
endphoneme endphoneme


phoneme A // PB changed to a_8 phoneme A // PB changed to a_8
vowel starttype #a endtype #a vowel starttype #a endtype #a
length 140 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] // "fare" [f'A:A]
IF nextPhW(A) THEN IF nextPhW(A) THEN
length 225 length 225
ENDIF
// "gratis"
IF next2PhW(i) THEN
length 225
ENDIF
IF nextPhW(isNotVowel) AND next2PhW(isNotVowel) THEN
length 140
ENDIF ENDIF
FMT(vowel/a_8) FMT(vowel/a_8)
endphoneme endphoneme


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


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


phoneme ?u phoneme ?u
vowel starttype #u endtype #u vowel starttype #u endtype #u
length 140 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) FMT(vowel/u_bck)
endphoneme endphoneme


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


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


phoneme V phoneme V
vowel starttype #@ endtype #@ vowel starttype #@ endtype #@
length 140 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) FMT(vowel/V_4)
endphoneme endphoneme




phoneme 0 phoneme 0
vowel starttype #o endtype #o 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) FMT(vowel/oo_2)
endphoneme endphoneme


phoneme ?0 phoneme ?0
vowel starttype #o endtype #o vowel starttype #o endtype #o
length 140 length 140
ipa ɔ
FMT(vowel/oo_2) FMT(vowel/oo_2)
endphoneme endphoneme


// PB long vowel followed by consonant and certain vowels // PB long vowel followed by consonant and certain vowels
// "gyde", "gyder" // "gyde", "gyder"
IF nextPhW(isNotVowel) AND next2PhW(@-) OR next2PhW(V) THEN 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 ENDIF
// "syge" [sy@-] vowel + vowel: extra length, but NOT "fyret" [fyVD] // "syge" [sy@-] vowel + vowel: extra length, but NOT "fyret" [fyVD]
IF nextPhW(@-) OR nextPhW(3) AND NOT next2PhW(D) THEN IF nextPhW(@-) OR nextPhW(3) AND NOT next2PhW(D) THEN
length 225 length 225
ENDIF ENDIF
// "tyve" // "tyve"
IF nextPhW(?u) AND next2PhW(@-) THEN
IF nextPhW(w) AND next2PhW(@-) THEN
length 225 length 225
ENDIF 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) FMT(vowel/y)
endphoneme endphoneme


phoneme ?y phoneme ?y
vowel starttype #i endtype #i vowel starttype #i endtype #i
length 140 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) FMT(vowel/y)
endphoneme endphoneme


phoneme Y phoneme Y
vowel starttype #i endtype #i 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 length 225
ENDIF ENDIF
FMT(vowel/yy) FMT(vowel/yy)
phoneme W phoneme W
vowel starttype #@ endtype #@ vowel starttype #@ endtype #@
length 140 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 // "røveri" but NOT "surfer" [sWfV] TEST
IF next2PhW(V) OR next2PhW(?V) AND NOT next2PhW(isFinalVowel) THEN IF next2PhW(V) OR next2PhW(?V) AND NOT next2PhW(isFinalVowel) THEN
length 140 length 140
ENDIF 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 // "børnebog" - short
IF nextPhW(r) AND next2PhW(n) AND next3PhW(@-) THEN IF nextPhW(r) AND next2PhW(n) AND next3PhW(@-) THEN
length 140 length 140
ENDIF ENDIF
// PB "synge"
IF nextPhW(N) THEN
length 140
ENDIF
CALL LongVowelLength
FMT(vowel/oe) FMT(vowel/oe)
endphoneme endphoneme


phoneme ?W phoneme ?W
vowel starttype #@ endtype #@ vowel starttype #@ endtype #@
length 140 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) FMT(vowel/oe)
endphoneme endphoneme


phoneme ?W# phoneme ?W#
vowel starttype #@ endtype #@ vowel starttype #@ endtype #@
length 140 length 140
CALL ShortVowelLength
FMT(vowel/V) FMT(vowel/V)
endphoneme endphoneme


phoneme l/3 // Replacement for [l/] phoneme l/3 // Replacement for [l/]
liquid liquid
lengthmod 7 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_) FMT(l/l_)
endphoneme endphoneme



+ 1
- 1
phsource/ph_english_us View File



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

+ 4
- 0
phsource/ph_tamil View File

ChangePhoneme(NULL) ChangePhoneme(NULL)
endphoneme 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



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


case kINCLUDE: case kINCLUDE:

+ 29
- 2
src/numbers.cpp View File

else else
language = L('e','n'); 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) // speak in the language for this alphabet (or English)
ph_buf[2] = SetTranslator2(WordToString2(language)); 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) if(ph_buf[3] == phonSWITCH)
{ {

+ 59
- 50
src/phonemelist.cpp View File

int delete_count; int delete_count;
int word_start; int word_start;
int inserted; int inserted;
int deleted;
PHONEME_DATA phdata; PHONEME_DATA phdata;


int n_ph_list3; int n_ph_list3;
plist3 = &ph_list3[j]; plist3 = &ph_list3[j];


inserted = 0; inserted = 0;
deleted = 0;
if(insert_ph != 0) if(insert_ph != 0)
{ {
// we have a (linking) phoneme which we need to insert here // we have a (linking) phoneme which we need to insert here
plist3->phcode = alternative; plist3->phcode = alternative;


if(alternative == 1) 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 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; PHONEME_LIST *p;


} }
} }


if(plist3 != plist3_inserted)
if((plist3 != plist3_inserted) && (ix > 0))
{ {
if((x = (tr->langopts.word_gap & 0x7)) != 0) if((x = (tr->langopts.word_gap & 0x7)) != 0)
{ {
// not yet implemented // 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 phlist[ix].newword = 2; // end of clause



+ 2
- 0
src/readclause.cpp View File

0x055e, // Armenian question 0x055e, // Armenian question
0x055b, // Armenian emphasis mark 0x055b, // Armenian emphasis mark


0x060c, // Arabic ,
0x061b, // Arabic ; 0x061b, // Arabic ;
0x061f, // Arabic ? 0x061f, // Arabic ?
0x06d4, // Arabic . 0x06d4, // Arabic .
CLAUSE_QUESTION | PUNCT_IN_WORD, // Armenian question CLAUSE_QUESTION | PUNCT_IN_WORD, // Armenian question
CLAUSE_PERIOD | PUNCT_IN_WORD, // Armenian emphasis mark CLAUSE_PERIOD | PUNCT_IN_WORD, // Armenian emphasis mark


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

+ 24
- 4
src/setlengths.cpp View File

int last_pitch = 0; int last_pitch = 0;
int pitch_start; int pitch_start;
int length_mod; int length_mod;
int next2type;
int len; int len;
int env2; int env2;
int end_of_clause; int end_of_clause;


p->prepause = 40; 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 else
if(p->newword==0) if(p->newword==0)
{ {
next3 = &phoneme_list[ix+4]; next3 = &phoneme_list[ix+4];
} }


next2type = next2->ph->length_mod;
if(more_syllables==0) 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)) if((next->newword) && (tr->langopts.word_gap & 0x20))
{ {
} }
else 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)) if((next->type == phNASAL) && (next2->type == phSTOP || next2->type == phVSTOP) && (next3->ph->phflags & phFORTIS))
length_mod -= 15; length_mod -= 15;

+ 1
- 1
src/synthdata.cpp View File

#include "translate.h" #include "translate.h"
#include "wave.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; const int version_phdata = 0x014701;


int option_device_number = -1; int option_device_number = -1;

+ 2
- 2
src/tr_languages.cpp View File

{"_ti", OFFSET_TIBET, 0xf00, 0xfff, 0, 0}, {"_ti", OFFSET_TIBET, 0xf00, 0xfff, 0, 0},
{"_my", OFFSET_MYANMAR, 0x1000,0x109f, 0, 0}, {"_my", OFFSET_MYANMAR, 0x1000,0x109f, 0, 0},
{"_ka", OFFSET_GEORGIAN, 0x10a0,0x10ff, L('k','a'), AL_WORDS}, {"_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}, {"_eth", OFFSET_ETHIOPIC, 0x1200,0x139f, 0, 0},
{"_braille", 0x2800, 0x2800,0x28ff, 0, AL_NO_SYMBOL}, {"_braille", 0x2800, 0x2800,0x28ff, 0, AL_NO_SYMBOL},
{"_ja", 0x3040, 0x3040,0x30ff, 0, AL_NOT_CODE}, {"_ja", 0x3040, 0x3040,0x30ff, 0, AL_NOT_CODE},
{"_zh", 0x3100, 0x3100,0x9fff, 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} {NULL, 0, 0, 0, 0, 0}
}; };



+ 31
- 31
src/translate.cpp View File

translator2->phoneme_tab_ix = new_phoneme_tab; translator2->phoneme_tab_ix = new_phoneme_tab;
} }
} }
translator2->phonemes_repeat[0] = 0;
return(new_phoneme_tab); return(new_phoneme_tab);
} // end of SetTranslator2 } // end of SetTranslator2


0x72,0x73,0x74,0x75 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) switch(tr->translator_name)
{ {
case L('a','f'): case L('a','f'):
} }
} }
break; 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)); return(SubstituteChar(tr, c, next_in, insert, wordflags));
} }
} }
else 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 // lower case followed by upper case in a word
if(UpperCaseInWord(tr, &sbuf[ix], c) == 1) if(UpperCaseInWord(tr, &sbuf[ix], c) == 1)

+ 14
- 3
src/voices.cpp View File



ESPEAK_API const espeak_VOICE **espeak_ListVoices(espeak_VOICE *voice_spec) 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 ix;
int j; int j;
espeak_VOICE *v; espeak_VOICE *v;
static espeak_VOICE **voices = NULL; static espeak_VOICE **voices = NULL;
char path_voices[sizeof(path_home)+12];


// free previous voice list data // free previous voice list data
FreeVoiceList(); FreeVoiceList();
} }
return((const espeak_VOICE **)voices); return((const espeak_VOICE **)voices);
#endif #endif
return((const espeak_VOICE **)voices_list);
} // end of espeak_ListVoices } // end of espeak_ListVoices





Loading…
Cancel
Save