mirror of
https://github.com/rhasspy/espeak-ng.git
synced 2026-11-11 00:26:08 +00:00
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
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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 @@
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
|
Before Width: | Height: | Size: 20 KiB After Width: | Height: | Size: 20 KiB |
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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))
|
||||
|
||||
Reference in New Issue
Block a user