Browse Source

Fix samplerate for ufric/xx, ufric/sx_sv, x/g2.

Don't read all the voice files on start, wait until they are needed.
Added 'W' code to _rules files to mean: further letters follow while spelling a word.
Lang=fr replace [r] with [R],  shorten [R] slightly


git-svn-id: https://espeak.svn.sourceforge.net/svnroot/espeak/trunk@4 d46cf337-b52f-0410-862d-fd96e6ae7743
master
jonsd 18 years ago
parent
commit
9099061844

+ 3
- 0
dictsource/en_list View File

@@ -1190,9 +1190,11 @@ monotone m0n@toUn
monsieur m@sj3:
?5 monsieur m@sjVR
mony mVnI2 // monies, monied
moped moUpEd
moraine m@reIn
morale m@ral
morass m0r'as
morose m@r'oUs
mosquito m0sk'i:toU
motel moUt'El
motif moUt'i:f
@@ -1895,6 +1897,7 @@ zulu zu:lu:
Altrincham O:ltrIN@m
Anglesey aNg@LsI2
Argyle A@g'aIl
Argyll A@g;aIl
Bacup beIk@p
Berwick bErIk
Betws bEtUs

+ 6
- 0
dictsource/en_rules View File

@@ -1280,6 +1280,7 @@
ch (ord k
an) ch (or k
o) ch (_ k
oo) ch (_ tS
_ta) ch k
ta) ch tS
sta) ch S
@@ -1605,6 +1606,7 @@
acB) e (_ I2
e (Cic_ E
e (Cical 'E
e (Cium i:
t) ech (_ Ek
m) e (chanic I
@@) eble (_ @b@L
@@ -1860,6 +1862,7 @@
eir e@
w) eir i@
l) ei (s E
th) ei (sC i:I
_s) eis (m aIz
f) ei (t_ I
ei (th aI
@@ -3211,6 +3214,7 @@
_) mobile moUbaIl
im) mobile moUbaIl
mobile m@bi:l
mono (ga m@n'0
mo (noto m@
_) mono m0noU
mon (opol m@n
@@ -3503,6 +3507,8 @@
_id) ol (a 0l
petr) ol (_ @L
s) ol (em 0l
s) ol (ic @l
s) ol (il @l
t) ol (er 0l
m) ol (ec @l
m) ol (ecule 0l

+ 133
- 136
dictsource/fr_list View File

@@ -12,23 +12,23 @@
// "letter" name, then include the letter name here, with the letter
// prefixed by a _ character.

_à a:aksA~grav
â a:aksA~sirkO~flEks
ä a:trema
_à a:aksA~gRav
â a:aksA~siRkO~flEks
ä a:tRema
ç sesedij
ë @:trema
ë @:tRema
é @:aksA~Egy
è @:aksA~grav
ê @:aksA~sirkO~flEks
ï i:trema
ë @:trema
è @:aksA~gRav
ê @:aksA~siRkO~flEks
ï i:tRema
ë @:tRema
ñ Entilde
ô o:aksA~sirkO~flEks
ö o:trema
ù u:aksA~grav
û u:aksA~sirkO~flEks
ü u:trema
_y i:gr'Ek
ô o:aksA~siRkO~flEks
ö o:tRema
ù u:aksA~gRav
û u:aksA~siRkO~flEks
ü u:tRema
_y i:gR'Ek



@@ -41,57 +41,57 @@ _?? sE~b'OL
! Eksklamassj'O~
_" gijm'E
_# dj'Ez
_$ dOl'ar
_% purs'A~
_$ dOl'aR
_% puRs'A~
_& e
_' apOstr'Of
_( 'uvr@-parA~t'Ez
_) f'Erm parA~t'Ez
_* astErisk:
_' apOstR'Of
_( 'uvR@-paRA~t'Ez
_) f'ERm paRA~t'Ez
_* astERisk:
_+ plys
_, virg'yl
_- tir'E
_, viRg'yl
_- tiR'E
_. pw'E~
_/ sl'aS
_: d'Ypw'E~
_; pw'E~virg'yl
_< E~ferj'Wr
_; pw'E~viRg'yl
_< E~feRj'WR
_= eg'al
_> syperj'Wr
_> sypeRj'WR
_? kEstj'O~
_@ at
_[ uvr@-_kroS'E
_[ uvR@-_kRoS'E
_\ b'aksl'aS
_] f'Erm_kroS'E
_^ sirkOnfl'Eks
_] f'ERm_kRoS'E
_^ siRkOnfl'Eks
__ sulin^'e
_` aks'A~_gr'av
_{ uvr_akOl'ad
_| b'ar
_} f'Erm_akOl'ad
_` aks'A~_gR'av
_{ uvR_akOl'ad
_| b'aR
_} f'ERm_akOl'ad
_~ tild'e
_¢ sEnt
_¥ i;'En
_£ l'ivr
_° d@gr'e
_£ l'ivR
_° d@gR'e
_± pl'yz_'u_mw'E~
_× myltip@-lj'e_p'ar
_÷ diviz'e_p'ar
_¼ W~_k'ar
_× myltip@-lj'e_p'aR
_÷ diviz'e_p'aR
_¼ W~_k'aR
_½ W~_d@m'i
_¾ trw'a k'ar
_© _^_k'0pIr,aIt_^_
r@Zistr'@d_m'ark
_¾ tRw'a k'aR
_© _^_k'0pIR,aIt_^_
R@ZistR'@d_m'aRk



// numeric

_0 zer'o
_0 zeR'o
_1 W~
_2 d'Y
_3 trw'a
_4 k'atr
_3 tRw'a
_4 k'atR
_5 s'E~c
_6 s'is
six siz2
@@ -102,8 +102,8 @@ _10 d'is
dix diz2
_11 O~z
_12 d'uz
_13 tr'Ez
_14 kat'Orz
_13 tR'Ez
_14 kat'ORz
_15 k'E~z
_16 s'Ez
_17 d'is:'Et
@@ -112,17 +112,17 @@ _19 d'is:n'@f
_20 v'E~
_21 v'E~te:E~
_22 v'E~td'Y
_23 v'E~t:trw'a
_24 v'E~tk'atr
_23 v'E~t:tRw'a
_24 v'E~tk'atR
_25 v'E~ts'E~c
_26 v'E~ts'is
_27 v'E~ts'Et
_28 v'E~tw^it
_29 v'E~tn'@f
_3X tr'A~t
_31 tr'A~te:E~
_4X kar'A~t
_41 kar'A~te:E~
_3X tR'A~t
_31 tR'A~te:E~
_4X kaR'A~t
_41 kaR'A~te:E~
_5X sE~k'A~t
_51 sE~k'A~te:E~
_6X swas'A~t
@@ -130,31 +130,31 @@ _61 swas'A~te:E~
_7X swas'A~t:d'is
_71 swas'A~te:O~z
_72 swas'A~t:d'uz
_73 swas'A~t:tr'Ez
_74 swas'A~t:kat'Orz
_73 swas'A~t:tR'Ez
_74 swas'A~t:kat'ORz
_75 swas'A~t:k'E~z
_76 swas'A~t:s'Ez
_77 swas'A~t:d'is:'Et
_78 swas'A~t:d'is:'w^it
_79 swas'A~t:d'is:n'@f
_8X k'atr@v'E~
_80 k'atr@v'E~z2
_9X k'atr@v'E~d'is
_91 k'atr@v'E~:O~z
_92 k'atr@v'E~:d'uz
_93 k'atr@v'E~:tr'Ez
_94 k'atr@v'E~:kat'Orz
_95 k'atr@v'E~:k'E~z
_96 k'atr@v'E~:s'Ez
_97 k'atr@v'E~:d'is:'Et
_98 k'atr@v'E~:d'is:'w^it
_99 k'atr@v'E~:d'is:n'@f
_8X k'atR@v'E~
_80 k'atR@v'E~z2
_9X k'atR@v'E~d'is
_91 k'atR@v'E~:O~z
_92 k'atR@v'E~:d'uz
_93 k'atR@v'E~:tR'Ez
_94 k'atR@v'E~:kat'ORz
_95 k'atR@v'E~:k'E~z
_96 k'atR@v'E~:s'Ez
_97 k'atR@v'E~:d'is:'Et
_98 k'atR@v'E~:d'is:'w^it
_99 k'atR@v'E~:d'is:n'@f
_0C s'A~
_1C0 s'A~t2
_0M1 m'il
_1M1 m'il
_0M2 milj'O~
_0M3 milj'ar
_0M3 milj'aR
_0and e
_dpt pw'E~

@@ -167,9 +167,9 @@ abc 'a b'e s'e
ac 'a s'e
api 'a p'e 'i
cio s'e'i;'o
ctrl kO~tr'ol
dept depart@m'A~
etc etseter'a
ctrl kO~tR'ol
dept depaRt@m'A~
etc etseteR'a
hmm h@m
ibm 'i:b'e:'Em
ip 'i:p'e
@@ -179,31 +179,30 @@ mbrola Em'bRola
mlle mad@mwaz'El
mme mad'am
mr m@sj'Y
p.s pOstkript'Om
ratp 'Er:'a:t'e:p'e
p.s pOstkRipt'Om
ratp 'ER:'a:t'e:p'e
s.t.p s'il:t'@:pl'E
s.v.p s'il:v'u:pl'E
st s'E~
ste s'E~t
stp s'il:t'@:pl'E
svp s'il:v'u:pl'E
url 'y:'Er:'El
url 'y:'ER:'El
usb 'y:'Es:'be
utf y:te:Ef
xfce iksEfse@
xy 'iks:igr'Ek
xy 'iks:igR'Ek

ii d'Y $abbrev // roman numerals
iii trw'a $abbrev
iv k'atr $abbrev
iii tRw'a $abbrev
iv k'atR $abbrev


dr dOkt'Wr $dot $capital
dr dOkt'WR $dot $capital
prof $dot



// numbers

// articles
le $u $nounf
@@ -348,8 +347,8 @@ tout $u

// Letters which can be words
//===========================
à a:aksA~grav $atend
y i:gr'Ek $atend
à a:aksA~gRav $atend
y i:gR'Ek $atend



@@ -357,15 +356,15 @@ y i:gr'Ek $atend

scient si
bénéficient benefisi $verb
président prezidA~t2
président prezidt2 $verb
président pRezidA~t2
président pRezidt2 $verb


// MAIN WORD DICTIONARY
//*********************

monsieur m@sjY // monsieur
montréal mO~real // Montréal
monsieur m@sjY
montréal mO~Real
(il y a) ili;a $u
(il y) ili $u
(n'est ce pas) nEspa
@@ -385,7 +384,7 @@ montréal mO~real // Montréal
bus bys
echo Eko
fils fis
mars mars
mars maRs
pays pEi
sens sA~s
c'est sEt2 $u
@@ -403,45 +402,43 @@ open OpEn
espeak ispik
nvda $abbrev
outlook autluk
reader Rid'Wr
potentiomètre pOtA~sjOmEtr
reader Rid'WR
potentiomètre pOtA~sjOmEtR

processus pROsEsys

// ut (t is said)
août ut
azimut azim'yt
brut br'yt
brut bR'yt
but by $verb
but byt
connecticut kOnEktikyt
helmut Elmut
mazout mazut
out aut
rut ryt
scorbut skOrbyt
rut Ryt
scorbut skORbyt
scout skut
scouts skut
stout staut
uppercut ypErkyt
uppercut ypERkyt
ut yt
zut syt


// et (t is said)

//Downing_street
//Dun_and_Bradstreet
bridget bRidZEt
exocet EgzOsEt
fret fR'Et
gadget gadZEt
hamlet amlEt
internet E~tErnEt
internet E~tERnEt
jacket ZakEt
knesset knEsEt
lazaret lazarEt
margaret margarEt
lazaret lazaREt
margaret maRgaREt
net nEt
offset OfsEt
pickpocket pikpOkEt
@@ -453,38 +450,38 @@ soviet sOvjEt
// ct (ct are not said)
aspect aspE
aspects aspE
circonspect circO~spE
irrespect irEspE
prospect prOspE
respect rEspE
circonspect ciRcO~spE
irrespect iREspE
prospect pROspE
respect REspE
suspect syspE

// st (t is not said)
prévost prevo
prévost pRevo

// urt (t is said)
kurt kurt
yaourt jaurt
yoghourt yogurt
yogourt yogurt
kurt kuRt
yaourt jauRt
yoghourt yoguRt
yogourt yoguRt

// ort (t said)
short SOrt
short SORt

// art (t said)
stewart stiwart
steward stiwart
stuttgart Stutgart
hart art
kart kart
smart smart
stewart stiwaRt
steward stiwaRt
stuttgart StutgaRt
hart aRt
kart kaRt
smart smaRt

// irt
flirt fl@rt
(sweat shirt) swEtS@rt
tee-shirt tiS@rt
flirt fl@Rt
(sweat shirt) swEtS@Rt
tee-shirt tiS@Rt

parfum parfW~
parfum paRfW~
forum fOR@m

// words from other languages
@@ -520,9 +517,9 @@ yacht jot
// tions (tjO~ instead of sjO~)
achetions aS@tjO~z2
ajoutions aZutjO~z2
apportions apOrtjO~z2
apprêtions aprEtjO~z2
arrêtions arEtjO~z2
apportions apORtjO~z2
apprêtions apREtjO~z2
arrêtions aREtjO~z2
assistions asistjO~
bastions bastjO~z2
battions batjO~z2
@@ -538,39 +535,39 @@ digestions diZEstjO~z2
discutions diskytjO~z2
doutions dutjO~z2
débutions debytjO~z2
désertions dezErtjO~z2
désertions dezERtjO~z2
détentions detA~tjO~z2
escomptions EskO~tjO~z2
existions EgzistjO~z2
exploitions EksplwatjO~z2
exportions EkspOrtjO~z2
exportions EkspORtjO~z2
gestions ZEstjO~z2
habitions abitjO~z2
heurtions @rtjO~z2
heurtions @RtjO~z2
indigestions E~diZEstjO~z2
insistions E~sistjO~z2
jetions Z@tjO~z2
limitions limitjO~z2
manifestions manifEstjO~z2
méritions meritjO~z2
partions partjO~z2
pressentions prEsA~tjO~z2
présentions prezA~tjO~z2
prêtions prEtjO~z2
méritions meRitjO~z2
partions paRtjO~z2
pressentions pREsA~tjO~z2
présentions pRezA~tjO~z2
prêtions pREtjO~z2
quittions kitjO~z2
rations ratjO~z2
redoutions r@dutjO~z2
regrettions r@grEtjO~z2
représentions r@prezA~tjO~z2
respections rEspEktjO~z2
ressentions r@sA~tjO~z2
restions rEstjO~z2
répétions repetjO~z2
rations RatjO~z2
redoutions R@dutjO~z2
regrettions R@gREtjO~z2
représentions R@pRezA~tjO~z2
respections REspEktjO~z2
ressentions R@sA~tjO~z2
restions REstjO~z2
répétions RepetjO~z2
sentions sA~tjO~z2
sortions sOrtjO~z2
sortions sORtjO~z2
souhaitions suEtjO~z2
soumettions sumEtjO~z2
supportions sypOrtjO~z2
supportions sypORtjO~z2
tentions tA~tjO~z2
traitions tREtjO~z2
votions vOtjO~z2 $u

+ 4
- 4
dictsource/fr_rules View File

@@ -248,8 +248,8 @@
_r) e (stru @ // restructurer
-) est (_ Est // -est

Cr) es (_C @
rC) es (_C @ // fortes dames
@Cr) es (_C =@
rC) es (_C =@ // fortes dames

') eu (_ y // eu
eu (r_ W // peur
@@ -278,8 +278,8 @@
_CC) e (_ @
_qu) e (_ @ // que

Cr) e (_C @ // quatre pattes
rC) e (_C @
@Cr) e (_C =@ // quatre pattes
rC) e (_C =@

e (_ // montre


+ 45
- 20
dictsource/pt_list View File

@@ -34,23 +34,28 @@ _?? s'imbolu

_. p'oNtu
_! ,eskl&mas'&U~
_" 'asp&s
_# k,ardZin'aU
?1 _" 'asp&S
?2 _" 'asp&s
?1 _# k,ardin'al
?2 _# k,ardZin'aU
_$ s,if@-*'&U~
_% pors'eINtu
_& 'e
_' ap'Ost@-*,ofu
?1 _' ap'Ost@-*,ofy
?2 _' ap'Ost@-*,ofu
_( ,ab@-*ipa*'eINtezi
_) f,ES&pa*'eINtezi
_* ,aste*'isku
_+ m'aIs
?1 _+ m'aIS
?2 _+ m'aIs
_, v'irgul&
_- 'ifeIN
_/ b'aQ&
_: d,oIsp'oNtus
_; p,oNtu_iv'irgul&
_< men'Or
_= igw'aU
?1 _= igw'al
?2 _= igw'aU
_> maI'Or
_? ,iNtex,ogas'&U~
_@ ax'ob&
@@ -61,12 +66,15 @@ _^ s,irkuNfl'Eksu
__ s,ublin^'adu
_` g@-*'avi
_{ ,ab@-*iS'avi
_| b,ax&v,ertSik'aU
?1 _| b,ax&v,ertSik'al
?2 _| b,ax&v,ertSik'aU
_} f,ES&S'avi
_~ tS'iU
?1 _~ t'il
?2 _~ tS'iU
_¡ ,eskl&mas,&U~,iNvertS'id&
_¿ ,iNtex,ogas,&U~,iNvertS'id&
_" 'ab@-*i;'asp&z d'upl&s
?1 _" 'ab@-*i;'asp&S d'upl&S
?2 _" 'ab@-*i;'asp&z d'upl&s


// numeric
@@ -155,10 +163,25 @@ _0Z3 mil'Ezim& // 1000ths

// ABBREVIATIONS
//**************
(http ://) ag,atete'pe_
a.c ,as'e
abadv $abbrev
a.c 'as'e
adsl $abbrev
apedv $abbrev
?1 apedv ,a,pe,,E,de've
bios b'i,OS
d.c d,es'e
etc ,ets'Ete*&
cpu $abbrev
//?1 cpu ,se,pe'u
?1 cpuc ,se,pe,u'se
edp $abbrev
?1 etc ,ets'Et:r&
?2 etc ,ets'Ete*&
?2 (http ://) ag,atete'pe_
nvda $abbrev
unts $abbrev
unts $abbrev
?1 usb ,u,Esy'be
?2 usb $abbrev


// articles
@@ -516,7 +539,7 @@ era 'Er&
abacaxi abakaSi
axé aSE
elixir eliSir
?1fixe fiSe
?1 fixe fiSe
lixo l'iSu
roxo x'oSu

@@ -524,9 +547,9 @@ roxo x'oSu
?1 alt 'alt
?1 bacalhau b,&k&lj'aU
?1 caps k'aps
?1 ctrl k'oNt:r'Ol
ctrl k'oNt:r,Ol
?1 delete dil'i:t
?1 design diz'aIn //? In Brasilian Portuguese
?1 design diz'aIn
?1 down d'aUn
?1 download d'aUnloUd
?1 escape Sk'eIpy
@@ -541,8 +564,7 @@ layout l'eI,aUt
?1 mail meIl
?2 mail m'eja
?1 menu mEnU
?1 num _^_EN
?1 ok Ok'eI
ok Ok'eI
?1 pause p'au:z
?1 page p'eIdZ
?1 scroll _^_EN
@@ -562,18 +584,20 @@ alan 'al@n
?1 access 'aksEs
debian d'Ebj&~N
espeak isp'i:k
speak spi:k
espeakedit isp'i:k,Ed,it
firefox f'ai@foks
?1 hal hal
?1 jaws dZ'au:z
?1 linux l'inUks
?1 linux l,in'uks
?2 linux l'inuks
openoffice 'opeIN|'Ofis
?1 reader r'i:d&@
?1 reader _^_EN
slackware sl'akwe@
speak spi:k
suse z'u:ts@
ubuntu ub'untu
unix j'u:niks
?1 unix ,u:n'iks
?2 unix j'u:niks
?1 windows _^_EN


@@ -625,3 +649,4 @@ ronchi r'OnCi:
vogel f'o:g@l
volkmann f'Olkman



+ 78
- 72
dictsource/pt_rules View File

@@ -13,6 +13,7 @@

.group a
_) a (_ a
_) a (_W 'a // in an acronym
a a
&) a (_ =& // in final unstressed syllable
&) a (s_ =&
@@ -25,7 +26,7 @@

a (C_ &
a (r_ 'a
?1 p) a (d_ =E
?1 p) a (d_ =E
a (CC_ &
?1 al (_ 'al // eg: Portugal, capital, etc.
?2 al (K aU
@@ -38,6 +39,7 @@
an (K &~N
a (nhA &~
am (_ =&U~
?1 a (z_ 'a //eg: paz, rapaz, capaz, etc...

ai aI
ai (s aI
@@ -133,7 +135,7 @@
?2 el (K EU
?2 elh elj

?1 e (rtA_ 'E // Eg: Alberto, aberta, etc...
?1 e (rtA_ 'E // Eg: Alberto, aberta, etc...
em (C eIm
en (K eIN
enh en^
@@ -152,24 +154,26 @@
eu (s eU
e (uCK e

?1 _) es (C@@ S // drop initial "e".
?1 _) e (f i // efectuar, etc.
?1 C) e (cC 'E // eg: seleccionar, efectuar, selecção, etc...
?1 C) e (ã i // leão, panteão, etc.
?1 C) e (a i // oceano, etc.
?1 _C) e (CACA =y //definições.
?1 _C) e (CCACAr =y // desligar.
?1 _C) e (CKAr =y // fechar
?1 _C) e (CCACAr =y // terminar.
?1 _C) e (CACC =y // recicla, reciclagem, etc...
?1 _f) e (rrament =y // ferramenta, ferramentas.
?1 hip) e (r ,E // eg: hiper
?1 sup) e (r ,E // super
?1 int) e (rC 'E // Interno
?1 int) e (rr E // Interno
?1 n) e (t ,E // eg: net

?1 e (l_ ,E
?1 _) es (C@@ S // drop initial "e".
?1 _) e (f i // efectuar, etc.
?1 _n) e (nhu i // eg: nenhum, nenhuma, nenhuns, nenhumas.
?1 C) e (cC ,E // eg: seleccionar, efectuar, etc...
?1 C) ecç 'E's // eg: selecção, etc...
?1 C) e (ã i // leão, panteão, etc.
?1 C) e (a i // oceano, etc.
?1 _C) e (CACA y //definições.
?1 _C) e (CCACAr y // desligar.
?1 C) e (CCAC y // eg: deslocamento, etc...
?1 _C) e (CKAr y // fechar
?1 _C) e (CCACAr y // terminar.
?1 _C) e (CACC y // recicla, reciclagem, etc...
?1 _f) e (rrament y // ferramenta, ferramentas.
?1 hip) e (r ,E // eg: hiper
?1 sup) e (r ,E // super
?1 int) e (rC 'E // Interno
?1 int) e (rr E // eg: Enterra
?1 n) e (t ,E // eg: net
?1 e (l_ ,E // eg: possível, manuel, etc...


.group é
@@ -197,8 +201,8 @@


.group f
?1 _) f (_ Ef; // individual letter
?1 _) f (__ Ef // individual letter at end-of-word
?1 _) f (_W Ef; // within an acronym
?1 _) f (_ Ef // individual letter or end-of-acronym
_) f (_ 'Efe
f f
f (f
@@ -206,6 +210,7 @@

.group g
?1 _) g (_ ge
?1 _) g (_W Ze // within an acronym
_) g (_ Ze
g g
g (g
@@ -216,7 +221,8 @@


.group h
_) h (_ ag'a
?1 _) h (_ &g'a
?2 _) h (_ ag'a
h // silent


@@ -262,8 +268,8 @@
úC) i (A_ j
úCC) i (A_ j

?1 @) ing (_ _^_EN
?1 @) ings (_ _^_EN
?1 @) ing (_ _^_EN
?1 @) ings (_ _^_EN


.group í
@@ -282,14 +288,14 @@

.group k
?1 _) k (_ k'ap&
?2 _) k (_ ka
?2 _) k (_ ka
k k
k (k


.group l
?1 _) l (_ El; // individual letter
?1 _) l (__ El // individual letter at end-of-word
?1 _) l (_W El; // within an acronym
?1 _) l (_ El
_) l (_ 'Ele
l l
l (l
@@ -299,16 +305,16 @@


.group m
?1 _) m (_ Em;
?1 _) m (__ Em
?1 _) m (_W 'Em;
?1 _) m (_ Em
_) m (_ 'eme
m m
m (m


.group n
?1 _) n (_ En;
?1 _) n (__ En
?1 _) n (_W 'En
?1 _) n (_ En
_) n (_ 'ene
n n
n (n
@@ -327,37 +333,33 @@
oi (s oI
o (iCK o
oo u
?1 v) oo (_ ow
?1 C) oo (_ ow // eg: voo, enjoo, etc...
oy OI

o (Ca_ O
?1 o (Cá_ 'O
?1 o (Cé_ 'O
?1 o (Cí_ 'O
?1 o (Có_ 'O
?1 o (Cú_ 'O
?1 ol (_ Ol
?2 ol (K Ow
?2 olh olj

?1 om (_ 'om
?2 om (_ oN
?1 om (_ 'om
?2 om (_ oN
o (ma_ o
?1 om (C 'om
?2 om (C om
?1 om (C 'om
?2 om (C om
on (K oN
o (na_ o
onh on^
o (rmA_ O
o (rmAC O

?1 oz (_ OS
?2 oz (_ Oz
?1 oz (_ OS
?2 oz (_ Oz
o (zes_ O
o (ra_ O
o (ras_ O
?1 _C) o (CACACC =u // Documento, documentação, etc.
?1 _C) o (CCAC =u // formatar, formato.
?1 _) o (C O // eg: olá, orla, opção, etc...
?1 _C) o (CACACC u // Documento, documentação, etc.
?1 C) o (CCAC u // formatar, formato.


.group ô
@@ -415,18 +417,18 @@

.group r
?1 _) r (_ 'Err; // individual letter
?1 _) r (__ 'Err // individual letter at end-of-word
?1 _) r (_W 'Err; // within an acronym
?1 _) r (_ 'Err
_) r (_ 'Exe
_) r (_\$ xe'aU // currency
r r
?1 A) r (A :r
?2 A) r (A *
?1 A) r (_A :r
?2 A) r (_A *
?1 A) r (A :r
?2 A) r (A *
?1 A) r (_A :r
?2 A) r (_A *
rr x
?1 C) r (A :r
?2 C) r (A @-*
?1 C) r (A :r
?2 C) r (A @-*
_) r x
l) r x
n) r x
@@ -435,18 +437,18 @@


.group s
?1 _) s (_ 'Ess|; [s]+[;] not [s;] phoneme
?1 _) s (__ 'Ess
_) s (_ 'Ese
?1 _) s (_W 'Es|; within an acronym [s]+[;] not [s;] phoneme
?1 _) s (_ 'Es
?2 _) s (_ 'Ese
s s
ss s
sc (Y s
sç s
A) s (A z
?1 s (_ S
?2 s (_ s
s (_A z // next word starts with vowel
s (_G z // next word starts with voiced consonant
?1 @) s (_ S
?2 @) s (_ s
@) s (_A z // next word starts with vowel
@) s (_G z // next word starts with voiced consonant

A) s (_S1 s
A) s (_AS1 z // next word starts with vowel
@@ -466,8 +468,8 @@
?2 t (i tS
?2 t (í tS
?2 t (e_ tS
?1 th _^_EN
?1 tion (_ _^_EN
?1 th _^_EN
?1 tion (_ _^_EN


.group u
@@ -507,14 +509,15 @@


.group w
_) w (_ d'ablju
?1 _) w (_ d'&bl,iu
?2 _) w (_ d'ablju
w w
?1 w (_ _^_EN
?1 w (_ _^_EN


.group x
?1 _) x (_ SiS
?2 _) x (_ Sis
?1 _) x (_ SiS
?2 _) x (_ Sis
x (A S
A) x (A ks
e) x (A z
@@ -532,7 +535,8 @@


.group y
_) y (_ 'ipsiloN
?1 _) y (_ 'ipsil,ON
?2 _) y (_ 'ipsiloN
y i
y (A j

@@ -541,16 +545,17 @@
_) z (_ ze
z z
z (z
?1 z (_ S
?2 z (_ s
z (_A z
z (_G z
?1 @) z (_ S
?2 @) z (_ s
@) z (_A z
@) z (_G z

?1 A) z (C S
?1 A) z (G+ Z
?1 A) z (_C S
?1 A) z (_G+ Z


.group
ç s
_) ç (_ s'esed'il^&
@@ -600,3 +605,4 @@





BIN
phsource/ufric/sx_sv.wav View File


BIN
phsource/ufric/xx.wav View File


BIN
phsource/vnasal/o_n3 View File


BIN
phsource/vnasal/vowelchart.png View File


BIN
phsource/vwl_fr/@R View File


BIN
phsource/vwl_fr/@R2 View File


BIN
phsource/x/g2.wav View File


+ 3
- 0
src/compiledict.cpp View File

@@ -654,6 +654,9 @@ void copy_rule_string(char *string, int &state)
case 'T':
c = RULE_ALT1;
break;
case 'W':
c = 0x31;
break;
case 'L':
// expect two digits
c = *p++ - '0';

+ 6
- 1
src/numbers.cpp View File

@@ -45,6 +45,7 @@ int Translator::TranslateLetter(char *word, char *phonemes, int control)
int n_bytes;
int letter;
int len;
int next;
unsigned char *p;
char ph_stress[2];
char capital[20];
@@ -69,7 +70,11 @@ int Translator::TranslateLetter(char *word, char *phonemes, int control)

len = utf8_out(letter,&single_letter[2]);
single_letter[2+len] = ' ';
memcpy(&single_letter[3+len],&word[n_bytes],3); // include the next letter, after a space, in case it affects the translation rules

next = 0x31;
if(word[n_bytes] == ' ')
next = ' ';
single_letter[3+len] = next; // follow by space-space if the end of the word, or space-0x31

single_letter[1] = '_';
if(Lookup(&single_letter[1],ph_buf) == 0)

+ 2
- 2
src/readclause.cpp View File

@@ -594,8 +594,8 @@ static char *VoiceFromStack(int *voice_variant)
{
sp = &ssml_stack[ix];

if(sp->voice_name[0] != 0)
strcpy(voice_name, sp->voice_name);
// if(sp->voice_name[0] != 0)
strcpy(voice_name, sp->voice_name); // don't inherit name from previous levels ??
if(sp->language[0] != 0)
strcpy(language, sp->language);
if(sp->voice_gender != 0)

+ 1
- 1
src/synthdata.cpp View File

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

const char *version_string = "1.24.02 04.May.07";
const char *version_string = "1.24.03 06.May.07";
const int version_phdata = 0x012201;

int option_device_number = -1;

+ 1
- 1
src/translate.h View File

@@ -46,7 +46,7 @@

#define FLAG_CAPITAL 0x8000 /* pronunciation if initial letter is upper case */
#define FLAG_DOT 0x10000 /* ignore '.' after word (abbreviation) */
#define FLAG_ABBREV 0x20000 /* use this pronunciation rather than split into letters */
#define FLAG_ABBREV 0x20000 // spell as letters, even with a vowel, OR use specified pronunciation rather than split into letters
#define FLAG_STEM 0x40000 // must have a suffix

#define FLAG_DOUBLING 0x80000 // doubles the following consonant

+ 173
- 145
src/voices.cpp View File

@@ -61,6 +61,7 @@ static espeak_VOICE *voices_list[N_VOICES_LIST];
static int len_path_voices;

espeak_VOICE *voice_selected = NULL;
espeak_VOICE *first_voice = NULL;
char voice_name[40];


@@ -209,6 +210,143 @@ void ReadTonePoints(char *string, int *tone_pts)
}




static espeak_VOICE *ReadVoiceFile(FILE *f_in, const char *fname, const char*leafname)
{//===================================================================================
// Read a Voice file, allocate a VOICE_DATA and set data from the
// file's language, gender, name lines

char linebuf[120];
char vname[80];
char vgender[80];
char vlanguage[80];
char languages[300]; // allow space for several alternate language names and priorities


unsigned int len;
int langix = 0;
int n_languages = 0;
char *p;
espeak_VOICE *voice_data;
int priority;
int age;
int n_variants = 3; // default, number of variants of this voice before using another voice
int gender;

#ifdef PLATFORM_WINDOWS
if(memcmp(leafname,"mb-",3) == 0)
{
// check whether the mbrola speech data is present for this voice
memcpy(vname,&leafname[3],3);
vname[3] = 0;
sprintf(linebuf,"%s/mbrola/%s",path_home,vname);

if(GetFileLength(linebuf) <= 0)
return(0);
}
#endif

vname[0] = 0;
vgender[0] = 0;
age = 0;

while(fgets(linebuf,sizeof(linebuf),f_in) != NULL)
{
linebuf[strlen(linebuf)-1] = 0;

if(memcmp(linebuf,"name",4)==0)
{
p = &linebuf[4];
while(isspace(*p)) p++;
strncpy0(vname,p,sizeof(vname));
}
else
if(memcmp(linebuf,"language",8)==0)
{
priority = DEFAULT_LANGUAGE_PRIORITY;
vlanguage[0] = 0;

sscanf(&linebuf[8],"%s %d",vlanguage,&priority);
len = strlen(vlanguage) + 2;
// check for space in languages[]
if(len < (sizeof(languages)-langix-1))
{
languages[langix] = priority;

strcpy(&languages[langix+1],vlanguage);
langix += len;
n_languages++;
}
}
else
if(memcmp(linebuf,"gender",6)==0)
{
sscanf(&linebuf[6],"%s %d",vgender,&age);
}
else
if(memcmp(linebuf,"variants",8)==0)
{
sscanf(&linebuf[8],"%d",&n_variants);
}
}
languages[langix++] = 0;

gender = LookupMnem(genders,vgender);

if(n_languages == 0)
{
#ifdef deleted
// Read voice variant files
// Don't use this, instead preset the variants_* arrays

// no language is specified, this voice file only affects the voice characteristics
if(memcmp(leafname,"!variant",8)==0)
{
if(((variant = atoi(&leafname[8])) > 0) && (strlen(variants_either) < N_VOICE_VARIANTS))
{
char string[2];
string[0] = variant;
string[1] = 0;
strcat(variants_either,string);
if(gender == 1)
strcat(variants_male,string);
if(gender == 2)
strcat(variants_female,string);
}
}
#endif
return(NULL); // no language lines in the voice file
}

p = (char *)calloc(sizeof(espeak_VOICE) + langix + strlen(fname) + strlen(vname) + 3, 1);
voice_data = (espeak_VOICE *)p;
p = &p[sizeof(espeak_VOICE)];

memcpy(p,languages,langix);
voice_data->languages = p;

strcpy(&p[langix],fname);
voice_data->identifier = &p[langix];
voice_data->name = &p[langix];

if(vname[0] != 0)
{
langix += strlen(fname)+1;
strcpy(&p[langix],vname);
voice_data->name = &p[langix];
}

voice_data->age = age;
voice_data->gender = gender;
voice_data->variant = 0;
voice_data->xx1 = n_variants;
return(voice_data);
} // end of ReadVoiceFile




void VoiceReset(int tone_only)
{//===========================
// Set voice to the default values
@@ -379,6 +517,7 @@ voice_t *LoadVoice(char *vname, int control)
char phonemes_name[40];
char *language_type;
char buf[200];
char path_voices[140];
char langname[4];

int stress_amps[8];
@@ -392,7 +531,8 @@ voice_t *LoadVoice(char *vname, int control)
if(voicename[0]==0)
strcpy(voicename,"default");

sprintf(buf,"%s%cvoices%c%s",path_home,PATHSEP,PATHSEP,voicename);
sprintf(path_voices,"%s%cvoices%c",path_home,PATHSEP,PATHSEP);
sprintf(buf,"%s%s",path_voices,voicename);

if(GetFileLength(buf) <= 0)
{
@@ -400,10 +540,15 @@ voice_t *LoadVoice(char *vname, int control)
langname[0] = voicename[0];
langname[1] = voicename[1];
langname[2] = 0;
sprintf(buf,"%s%cvoices%c%s%c%s",path_home,PATHSEP,PATHSEP,langname,PATHSEP,voicename);
sprintf(buf,"%s%s%c%s",path_voices,langname,PATHSEP,voicename);
}

f_voice = fopen(buf,"r");
if(first_voice == NULL)
{
first_voice = ReadVoiceFile(f_voice,buf+len_path_voices,voicename);
rewind(f_voice);
}

language_type = "en"; // default
if(f_voice == NULL)
@@ -776,7 +921,7 @@ static int ScoreVoice(espeak_VOICE *voice_spec, int spec_n_parts, int spec_lang_

p = voice->languages; // list of languages+dialects for which this voice is suitable

if(voice_spec->languages == NULL)
if(spec_n_parts == 0)
{
score = 100;
}
@@ -836,10 +981,18 @@ static int ScoreVoice(espeak_VOICE *voice_spec, int spec_n_parts, int spec_lang_
if(score == 0)
return(0);

if((voice_spec->name != NULL) && (strcmp(voice_spec->name,voice->name)==0))
if(voice_spec->name != NULL)
{
// match on voice name
score += 400;
if(strcmp(voice_spec->name,voice->name)==0)
{
// match on voice name
score += 500;
}
else
if(strcmp(voice_spec->name,voice->identifier)==0)
{
score += 400;
}
}

if(((voice_spec->gender == 1) || (voice_spec->gender == 2)) &&
@@ -886,14 +1039,15 @@ static int SetVoiceScores(espeak_VOICE *voice_select, espeak_VOICE **voices)
int ix;
int score;
int nv; // number of candidates
int n_parts=1;
int n_parts=0;
int lang_len=0;
char *p;
espeak_VOICE *vp;

// count number of parts in the specified language
if(voice_select->languages != NULL)
if((voice_select->languages != NULL) && (voice_select->languages[0] != 0))
{
n_parts = 1;
lang_len = strlen(voice_select->languages);
for(p = voice_select->languages; *p != 0; p++)
{
@@ -901,7 +1055,6 @@ static int SetVoiceScores(espeak_VOICE *voice_select, espeak_VOICE **voices)
n_parts++;
}
}

// select those voices which match the specified language
nv = 0;
for(ix=0; ix<n_voices_list; ix++)
@@ -926,139 +1079,6 @@ static int SetVoiceScores(espeak_VOICE *voice_select, espeak_VOICE **voices)



static espeak_VOICE *ReadVoiceFile(FILE *f_in, const char *fname, const char*leafname)
{//===================================================================================
// Read a Voice file, allocate a VOICE_DATA and set data from the
// file's language, gender, name lines

char linebuf[120];
char vname[80];
char vgender[80];
char vlanguage[80];
char languages[300]; // allow space for several alternate language names and priorities


unsigned int len;
int langix = 0;
int n_languages = 0;
char *p;
espeak_VOICE *voice_data;
int priority;
int age;
int n_variants = 3; // default, number of variants of this voice before using another voice
int gender;

#ifdef PLATFORM_WINDOWS
if(memcmp(leafname,"mb-",3) == 0)
{
// check whether the mbrola speech data is present for this voice
memcpy(vname,&leafname[3],3);
vname[3] = 0;
sprintf(linebuf,"%s/mbrola/%s",path_home,vname);

if(GetFileLength(linebuf) <= 0)
return(0);
}
#endif

vname[0] = 0;
vgender[0] = 0;
age = 0;

while(fgets(linebuf,sizeof(linebuf),f_in) != NULL)
{
linebuf[strlen(linebuf)-1] = 0;

if(memcmp(linebuf,"name",4)==0)
{
p = &linebuf[4];
while(isspace(*p)) p++;
strncpy0(vname,p,sizeof(vname));
}
else
if(memcmp(linebuf,"language",8)==0)
{
priority = DEFAULT_LANGUAGE_PRIORITY;
vlanguage[0] = 0;

sscanf(&linebuf[8],"%s %d",vlanguage,&priority);
len = strlen(vlanguage) + 2;
// check for space in languages[]
if(len < (sizeof(languages)-langix-1))
{
languages[langix] = priority;

strcpy(&languages[langix+1],vlanguage);
langix += len;
n_languages++;
}
}
else
if(memcmp(linebuf,"gender",6)==0)
{
sscanf(&linebuf[6],"%s %d",vgender,&age);
}
else
if(memcmp(linebuf,"variants",8)==0)
{
sscanf(&linebuf[8],"%d",&n_variants);
}
}
languages[langix++] = 0;

gender = LookupMnem(genders,vgender);

if(n_languages == 0)
{
#ifdef deleted
// Read voice variant files
// Don't use this, instead preset the variants_* arrays

// no language is specified, this voice file only affects the voice characteristics
if(memcmp(leafname,"!variant",8)==0)
{
if(((variant = atoi(&leafname[8])) > 0) && (strlen(variants_either) < N_VOICE_VARIANTS))
{
char string[2];
string[0] = variant;
string[1] = 0;
strcat(variants_either,string);
if(gender == 1)
strcat(variants_male,string);
if(gender == 2)
strcat(variants_female,string);
}
}
#endif
return(NULL); // no language lines in the voice file
}

p = (char *)calloc(sizeof(espeak_VOICE) + langix + strlen(fname) + strlen(vname) + 3, 1);
voice_data = (espeak_VOICE *)p;
p = &p[sizeof(espeak_VOICE)];

memcpy(p,languages,langix);
voice_data->languages = p;

strcpy(&p[langix],fname);
voice_data->identifier = &p[langix];
voice_data->name = &p[langix];

if(vname[0] != 0)
{
langix += strlen(fname)+1;
strcpy(&p[langix],vname);
voice_data->name = &p[langix];
}

voice_data->age = age;
voice_data->gender = gender;
voice_data->variant = 0;
voice_data->xx1 = n_variants;
return(voice_data);
} // end of ReadVoiceFile


static espeak_VOICE *SelectVoiceByName(espeak_VOICE **voices, const char *name)
{//============================================================================
int ix;
@@ -1212,7 +1232,7 @@ void GetVoices(const char *path)
FILE *f_voice;
espeak_VOICE *voice_data;
int ftype;
char fname[80];
char fname[140];

#ifdef PLATFORM_RISCOS
#else
@@ -1305,7 +1325,7 @@ espeak_ERROR SetVoiceByName(const char *name)
espeak_VOICE *v;
int variant=0;
char *p;
char buf[80];
static char buf[60];

strncpy0(buf,name,sizeof(buf));
if((p = strchr(buf,'+')) != NULL)
@@ -1315,6 +1335,14 @@ espeak_ERROR SetVoiceByName(const char *name)
variant = atoi(p+1);
}

// first check for a voice with this filename
if(LoadVoice(buf,1) != NULL)
{
voice_selected = first_voice;
WavegenSetVoice(voice);
return(EE_OK);
}

if(n_voices_list == 0)
espeak_ListVoices(NULL); // create the voices list

@@ -1358,7 +1386,7 @@ ESPEAK_API const espeak_VOICE **espeak_ListVoices(espeak_VOICE *voice_spec)
int ix;
static espeak_VOICE *voices[N_VOICES_LIST];
char selected_voice_id[80];
char path_voices[80];
char path_voices[130];

// free previous voice list data
if((voice_selected != NULL) && (voice_selected->identifier != NULL))

Loading…
Cancel
Save