mirror of
https://github.com/rhasspy/espeak-ng.git
synced 2026-10-31 13:38:47 +00:00
Merge commit 'e4854a9cd6' into android
Conflicts: src/voices.cpp
This commit is contained in:
@@ -1022,6 +1022,7 @@ concerto k@ntS'e@toU
|
||||
conches k0ntSI#z
|
||||
concierge k0nsI'e@Z
|
||||
concise k0#ns'aIs
|
||||
conclave $1
|
||||
conduct $1
|
||||
conduct $verb
|
||||
cone koUn
|
||||
@@ -1136,6 +1137,7 @@ deli dElI
|
||||
deliberate dI2lIb@r@t
|
||||
delicate dElI2k@t
|
||||
delimit dI2lImIt // delimited
|
||||
delivery $alt2
|
||||
demolish dI2m0lIS
|
||||
demon di:m@n
|
||||
demoness di:m@nEs
|
||||
|
||||
+9
-4
@@ -1771,6 +1771,7 @@
|
||||
di (ox d%aI
|
||||
_) di (s@ dI2
|
||||
_) di (sa@ ,dI
|
||||
_) di (sarm dI2
|
||||
_) disa (p ,dIs@
|
||||
di (sast dI2
|
||||
di (sbe@ ,dI
|
||||
@@ -2467,6 +2468,7 @@
|
||||
er (ve 3:
|
||||
s) er (van 3:
|
||||
ery (_ @r%i
|
||||
?3 ery (_++$w_alt2 @rI
|
||||
?3 @@AC) ery (_ e@ri
|
||||
ery (A 3j
|
||||
_v) ery ErI2
|
||||
@@ -2745,6 +2747,8 @@
|
||||
gue (_ g
|
||||
gu (e g
|
||||
_) gu (i g
|
||||
_) gui (dA gaI
|
||||
guide (@ gaId
|
||||
_) g (yn g
|
||||
o) g (y_ g
|
||||
g (ynous_ =dZ
|
||||
@@ -3262,7 +3266,7 @@
|
||||
inter (est Intr
|
||||
interfer Int@f'i@3
|
||||
_) int (erio+ %Int
|
||||
_) inter (n_ %Int3:
|
||||
_) inter (nK %Int3:
|
||||
_) inter (nal %Int3:
|
||||
_) inter (pr %Int3:
|
||||
_) inter (pol@ %Int3:
|
||||
@@ -4576,7 +4580,7 @@
|
||||
pull) ov oUv
|
||||
m) ov (A u:v
|
||||
n) ov (el 0v
|
||||
p) over (@ 0v@
|
||||
p) over (@ 0v3
|
||||
pr) ov (e# u:v
|
||||
gr) ov (el 0v
|
||||
tr) ov (er 0v
|
||||
@@ -4942,6 +4946,8 @@
|
||||
_) re (i@P2 r,i:
|
||||
_) rei (c raI
|
||||
_) rei (l raI
|
||||
_) rei (s raI
|
||||
_) re (iss r%i:
|
||||
_) rele (g rElI2
|
||||
rele (nt rI2lE
|
||||
rele (v rElI#
|
||||
@@ -5122,9 +5128,8 @@
|
||||
1_) st (_
|
||||
_) st (_ s@nt
|
||||
stein staIn
|
||||
ti) ssue Su:
|
||||
_) s (u s
|
||||
ss (ue S
|
||||
ssue Su:
|
||||
ssur S3
|
||||
a) ssur SU@
|
||||
a) ssure S'U@
|
||||
|
||||
+96
-98
@@ -325,7 +325,7 @@ elas $u+
|
||||
|
||||
me $u // reflexive
|
||||
te $u
|
||||
nos $u
|
||||
nos $u $nounf
|
||||
la $u
|
||||
lo $u
|
||||
las $u
|
||||
@@ -335,35 +335,31 @@ los $u
|
||||
?2 este $u+ $nounf 'estSi // this
|
||||
?2 estes $u+ $nounf 'estSis // these
|
||||
?2 esta 'Est& $u+ $nounf
|
||||
?2 nesta $u+ $nounf
|
||||
?2 neste $u+ $nounf n'estSi //in this
|
||||
?2 nestes $u+ n'estSis //in these
|
||||
?2 esse $u+ $nounf 'esi // that
|
||||
essa 'Es& $u+
|
||||
desse d'esy $u+
|
||||
nesse n'esy $u+
|
||||
desse $u+ $nounf
|
||||
desta $nounf
|
||||
nesse n'esy $u+ $nounf
|
||||
aquele &k'ely $u+ $nounf // that
|
||||
aquela $u+
|
||||
aquela $u+ $nounf
|
||||
daquele d&k'ely $u+ $nounf
|
||||
daquela $u+ $nounf
|
||||
|
||||
que $u // pronunciation is in pt_rules
|
||||
|
||||
// possessive adjectives
|
||||
meu $u+ $nounf
|
||||
minha $u+
|
||||
meus $u+
|
||||
minhas $u+
|
||||
meu $u+ $nounf // meus
|
||||
minha $u+ $nounf // minhas
|
||||
teu $u+ $nounf
|
||||
tua $u+
|
||||
teus $u+
|
||||
tuas $u+
|
||||
tua $u+ $nounf
|
||||
seu $u+ $nounf
|
||||
sua $u+
|
||||
seus $u+
|
||||
suas $u+
|
||||
?2 nosso $u+ // n'OsU
|
||||
?2 nossa $u+ n'Os&
|
||||
?2 nossos $u+ n'OsUs
|
||||
?2 nossas $u+ n'Os&s
|
||||
sua $u+ $nounf
|
||||
?2 nosso $u+ $nounf // n'OsU
|
||||
?2 nossa $u+ $nounf n'Os&
|
||||
?2 nossos $u+ $nounf n'OsUs
|
||||
?2 nossas $u+ $nounf n'Os&s
|
||||
dele dely $u1+
|
||||
dela $u+
|
||||
deles $u+
|
||||
@@ -371,11 +367,11 @@ delas $u+
|
||||
nele nely $u1+
|
||||
|
||||
// prepositions
|
||||
de $u // of,from
|
||||
de $u $nounf // of,from
|
||||
do $u $nounf
|
||||
da $u $nounf
|
||||
dos $u
|
||||
das $u
|
||||
dos $u $nounf
|
||||
das $u $nounf
|
||||
dum $u
|
||||
duma $u
|
||||
duns $u
|
||||
@@ -383,19 +379,15 @@ dumas $u
|
||||
|
||||
em $u // in,on,at
|
||||
no nu $u $nounf
|
||||
na $u
|
||||
?2 nos nus# $u
|
||||
nas $u
|
||||
na $u $nounf
|
||||
num $u
|
||||
numa $u
|
||||
nuns $u
|
||||
numas $u
|
||||
|
||||
por $u // by,for,through
|
||||
pelo $u
|
||||
?2 pela $u p'el&
|
||||
pelos $u
|
||||
?2 pelas $u p'el&s
|
||||
por $u $nounf // by,for,through
|
||||
pelo $u $nounf
|
||||
?2 pela $u $nounf p'el&
|
||||
|
||||
ao $u
|
||||
à ,a:
|
||||
@@ -418,7 +410,6 @@ com $u // with
|
||||
?2 até $u // until
|
||||
?2 desde $u // from,since
|
||||
?2 entre // between,among
|
||||
?2 por $u // by,for,through
|
||||
sobre $alt2 // on,above,about
|
||||
?2 sob // under,below
|
||||
?2 debaixo // under,below
|
||||
@@ -625,19 +616,6 @@ alguns $u // some
|
||||
algumas $u // some
|
||||
não n,&U~ $strend // not
|
||||
|
||||
// Words with two possible pronounciations
|
||||
jogo Z'OgU $verb
|
||||
gosto g'OstU $verb
|
||||
começo kom'EsU $verb
|
||||
almoço aUm'OsU $verb
|
||||
retorno xet'OrnU $verb
|
||||
acordo &k'OrdU $verb
|
||||
governo gov'ernU $noun
|
||||
?2 olho 'oljU $noun
|
||||
?4 olho 'ol^U $noun
|
||||
?2 colher kolj'Er $noun
|
||||
?4 colher kol^'Er $noun
|
||||
|
||||
|
||||
// MAIN WORD DICTIONARY
|
||||
//*********************
|
||||
@@ -648,6 +626,7 @@ abacaxi abakaSy
|
||||
abordo $alt
|
||||
aborto $alt $verb
|
||||
acerto $alt2 $noun
|
||||
acordo $alt $verb
|
||||
acertos $alt2
|
||||
acervo $alt2
|
||||
adepto $alt
|
||||
@@ -659,27 +638,22 @@ alcateia $alt
|
||||
alferes $alt
|
||||
algozes $alt
|
||||
alicerce $alt
|
||||
amanheça $alt2
|
||||
amanheço $alt2
|
||||
amanhecesse $alt2
|
||||
almoço $alt $verb
|
||||
amarelo $alt
|
||||
ameba $alt
|
||||
amores $alt2
|
||||
anoitecesse $alt2
|
||||
anoiteça $alt2
|
||||
anoiteço $alt2
|
||||
apego $alt2 $noun
|
||||
apelo $alt $verb
|
||||
aposto $alt $verb
|
||||
apreço $alt2
|
||||
aperto $alt2 $noun
|
||||
apoio $alt $verb
|
||||
aprendeste $alt2
|
||||
aprovo $alt
|
||||
arredores $alt
|
||||
arremesso $alt2 $noun
|
||||
arroz $alt2
|
||||
assembleia $alt
|
||||
ateia $alt
|
||||
aterro $alt2 $noun
|
||||
atmosfera $alt
|
||||
atrozes $alt
|
||||
@@ -687,12 +661,10 @@ austera $alt
|
||||
austero $alt
|
||||
autora $alt2
|
||||
axé aSE
|
||||
bebeste $alt2
|
||||
baqueta $alt2
|
||||
beco $alt2
|
||||
belo $alt
|
||||
besta $alt2
|
||||
bezerra $alt2
|
||||
bezerro $alt2
|
||||
bilhete $alt2
|
||||
boca $alt2
|
||||
bochecha $alt2
|
||||
@@ -712,71 +684,73 @@ cachorra $alt2
|
||||
caderneta $alt2
|
||||
camiseta $alt2
|
||||
cantora $alt2
|
||||
capacete $alt2
|
||||
caractere $alt
|
||||
caramelo $alt
|
||||
careta $alt2
|
||||
carreta $alt2
|
||||
carroça $alt
|
||||
casebre $alt
|
||||
castelo $alt
|
||||
cateto $alt2
|
||||
catorze $alt2
|
||||
cebola $alt2
|
||||
cefaleia $alt
|
||||
cerca $alt $verb
|
||||
cerco $alt $verb
|
||||
cesta $alt2
|
||||
cesto $alt2
|
||||
chamego $alt2
|
||||
chefe $alt
|
||||
checam $alt
|
||||
cheque $alt
|
||||
chinelo $alt
|
||||
choro $alt2 $noun
|
||||
chovesse $alt2
|
||||
chupeta $alt2
|
||||
clamores $alt2
|
||||
coco $alt2
|
||||
cofre $alt
|
||||
cogumelo $alt
|
||||
coice $alt2
|
||||
colabore $alt
|
||||
colheste $alt2
|
||||
colete $alt2
|
||||
colchete $alt2
|
||||
colher $alt $verb
|
||||
colheres $alt $noun
|
||||
colmeia $alt
|
||||
colore $alt
|
||||
começo $alt2 $noun
|
||||
comodo $alt2
|
||||
comera $alt2
|
||||
comeres $alt2
|
||||
comeste $alt2
|
||||
concerto $alt2 $noun
|
||||
concordo $alt
|
||||
conforto $alt $verb
|
||||
conheceste $alt2
|
||||
conheço $alt2
|
||||
consolo $alt2 $noun
|
||||
contivermos $alt
|
||||
controle $alt2 $noun
|
||||
controlo $alt2 $noun
|
||||
copa $alt
|
||||
copo $alt
|
||||
coreia $alt
|
||||
corneta $alt2
|
||||
cornos $alt
|
||||
corpos $alt
|
||||
correste $alt2
|
||||
corto $alt
|
||||
corveta $alt2
|
||||
corvos $alt
|
||||
coto $alt2
|
||||
couber $alt
|
||||
couberem $alt
|
||||
couberdes $alt
|
||||
couberes $alt
|
||||
coubermos $alt
|
||||
cratera $alt
|
||||
crede $alt2
|
||||
cresce $alt
|
||||
crescem $alt
|
||||
der $alt
|
||||
derdes $alt
|
||||
desapego $alt2 $noun
|
||||
descabelo $alt
|
||||
desce $alt
|
||||
descem $alt
|
||||
descordo $alt
|
||||
descova $alt2
|
||||
desespero $alt2 $noun
|
||||
desfecho $alt2
|
||||
desprezo $alt $verb
|
||||
@@ -808,27 +782,29 @@ envelope $alt
|
||||
envolto $alt2
|
||||
enxerto $alt2 $noun
|
||||
epopeia $alt
|
||||
erga $alt2
|
||||
ergam $alt2
|
||||
ergo $alt2
|
||||
eritreia $alt
|
||||
erro $alt2 $noun
|
||||
erros $alt2
|
||||
esboço $alt $verb
|
||||
escopeta $alt2
|
||||
escova $alt2 $noun
|
||||
escroto $alt2
|
||||
esforço $alt $verb
|
||||
esforços $alt
|
||||
esgoto $alt2 $noun
|
||||
esgotos $alt2
|
||||
esperma $alt
|
||||
espeto $alt2 $noun
|
||||
espiroqueta $alt2
|
||||
espoleta $alt2
|
||||
esposa $alt2
|
||||
esqueceste $alt2
|
||||
esqueleto $alt2
|
||||
estiverdes $alt
|
||||
estiveres $alt
|
||||
estivermos $alt
|
||||
estrela $alt2
|
||||
estremeceste $alt2
|
||||
estrofe $alt
|
||||
estorno $alt $verb
|
||||
estorvo $alt $verb
|
||||
@@ -844,24 +820,25 @@ farofa $alt
|
||||
febre $alt
|
||||
feitora $alt2
|
||||
fera $alt
|
||||
fere $alt
|
||||
ferem $alt
|
||||
ferozes $alt
|
||||
fezes $alt
|
||||
?1 fixe fiSy
|
||||
fizerdes $alt
|
||||
fizermos $alt
|
||||
foda $alt2 $verb
|
||||
folga $alt
|
||||
fogos $alt
|
||||
foguete $alt2
|
||||
foice $alt2
|
||||
forca $alt2
|
||||
forças $alt2
|
||||
fores $alt2
|
||||
fordes $alt2
|
||||
fores $alt2
|
||||
forro $alt $verb
|
||||
fosse $alt2
|
||||
fossem $alt2
|
||||
frevo $alt2
|
||||
galera $alt
|
||||
galileia $alt
|
||||
gameta $alt2
|
||||
geleia $alt
|
||||
gelo $alt $verb
|
||||
@@ -870,24 +847,29 @@ gesso $alt2
|
||||
golpe $alt
|
||||
gonorreia $alt
|
||||
gorda $alt2
|
||||
gosto $alt $verb
|
||||
gota $alt2
|
||||
governo $alt2 $noun
|
||||
gozo $alt $verb
|
||||
graveto $alt2
|
||||
grego $alt2
|
||||
grelha $alt
|
||||
grega $alt2
|
||||
groselha $alt
|
||||
grosso $alt2
|
||||
grozo $alt $verb
|
||||
hemorroida $alt
|
||||
hoje $alt2
|
||||
horrores $alt2
|
||||
houverdes $alt
|
||||
houvermos $alt
|
||||
ideia $alt
|
||||
insonoro $alt
|
||||
interesse $alt2 $noun
|
||||
joga $alt
|
||||
jogam $alt
|
||||
jogos $alt
|
||||
jogam$alt
|
||||
jogo $alt $verb
|
||||
jogos $alt
|
||||
jogue $alt
|
||||
joguem $alt
|
||||
joguem $alt
|
||||
joguete $alt2
|
||||
lambreta $alt2
|
||||
lebre $alt
|
||||
@@ -899,6 +881,7 @@ maleta $alt2
|
||||
mantiverdes $alt
|
||||
mantiveres $alt
|
||||
mantivermos $alt
|
||||
marcelo $alt
|
||||
marmelo $alt
|
||||
marreta $alt2
|
||||
martelo $alt
|
||||
@@ -906,11 +889,15 @@ merda $alt
|
||||
megera $alt
|
||||
melo $alt
|
||||
mentora $alt2
|
||||
meta $alt $noun
|
||||
meteoro $alt
|
||||
metro $alt
|
||||
mexa m'eS&
|
||||
mexi meS'i
|
||||
mexo m'eSU
|
||||
minueto $alt2
|
||||
miolo $alt2
|
||||
miolos $alt
|
||||
moeda $alt
|
||||
modo $alt
|
||||
modos $alt
|
||||
@@ -930,24 +917,25 @@ mulheres $alt
|
||||
mureta $alt2
|
||||
mutreta $alt2
|
||||
namoro $alt2 $noun
|
||||
naquele $alt2
|
||||
negra $alt2
|
||||
negro $alt2
|
||||
naquela $nounf
|
||||
naquele $alt2 $nounf
|
||||
nervo $alt2
|
||||
novos $alt
|
||||
obstetra $alt
|
||||
obsoleta $alt2
|
||||
obsoleto $alt2
|
||||
pbvivera $alt
|
||||
obtivera $alt
|
||||
obtivermos $alt
|
||||
odisseia $alt
|
||||
onu $1
|
||||
olho $alt2 $noun
|
||||
osso $alt2
|
||||
ossos $alt
|
||||
opereta $alt2
|
||||
ordens $alt
|
||||
osso $alt2
|
||||
ostra $alt2
|
||||
ovos $alt
|
||||
pachorra $alt2
|
||||
padeceste $alt2
|
||||
paexa paeSa
|
||||
palacete $alt2
|
||||
palheta $alt2
|
||||
@@ -961,14 +949,12 @@ pelego $alt2
|
||||
pelo $alt $verb
|
||||
perde $alt
|
||||
perdem $alt
|
||||
perede $alt2
|
||||
pesa $alt
|
||||
pesam $alt
|
||||
pesque $alt
|
||||
pesquem $alt
|
||||
peso $alt
|
||||
peso $alt2 $noun
|
||||
piloto $alt2
|
||||
peso $alt $verb
|
||||
piloto $alt2 $noun
|
||||
pintora $alt2
|
||||
pirueta $alt2
|
||||
plateia $alt
|
||||
@@ -984,14 +970,14 @@ poxa p'oS&
|
||||
preta $alt2
|
||||
preto $alt2
|
||||
primavera $alt
|
||||
profere $alt
|
||||
proferem $alt
|
||||
provo $alt
|
||||
puder $alt
|
||||
punheta $alt
|
||||
puderdes $alt
|
||||
pudermos $alt
|
||||
puserdes $alt
|
||||
quarteto $alt2
|
||||
quinteto $alt2
|
||||
quiserdes $alt
|
||||
quisermos $alt
|
||||
recomeço $alt2 $noun
|
||||
recordo $alt
|
||||
@@ -1008,19 +994,28 @@ remorso $alt
|
||||
reprovo $alt
|
||||
resolve $alt
|
||||
resolvem $alt
|
||||
retorno $alt $verb
|
||||
rixa x'iS&
|
||||
rocha $alt
|
||||
rock $alt
|
||||
rogas $alt
|
||||
rola $alt2 $noun
|
||||
rolo $alt2 $noun
|
||||
rosna $alt
|
||||
rosnam $alt
|
||||
rosne $alt
|
||||
rosnem $alt
|
||||
rosno $alt
|
||||
rumores $alt2
|
||||
saleta $alt2
|
||||
sarjeta $alt
|
||||
severa $alt
|
||||
severo $alt
|
||||
seborreia $alt
|
||||
seco $alt2 $noun
|
||||
secos $alt2
|
||||
seca $alt2 $noun
|
||||
secas $alt2
|
||||
seco $alt2
|
||||
seco $alt $verb
|
||||
selo $alt $verb
|
||||
selvagem seUv'aZeIN
|
||||
sexteto $alt2
|
||||
@@ -1056,17 +1051,18 @@ tapete $alt2
|
||||
tempero $alt2 $noun
|
||||
teta $alt2
|
||||
tetra $alt
|
||||
tiver $alt
|
||||
tivera $alt
|
||||
tiveres $alt
|
||||
tiverdes $alt
|
||||
tivermos $alt
|
||||
tocha $alt
|
||||
toga $alt
|
||||
tola $alt2
|
||||
tolo $alt2
|
||||
tolhe $alt
|
||||
tolhem $alt
|
||||
topo $alt $verb
|
||||
torno $alt $verb
|
||||
torres $alt2
|
||||
torre $alt2 $noun
|
||||
torres $alt2
|
||||
tortos $alt
|
||||
traqueia $alt
|
||||
travesso $alt2
|
||||
@@ -1076,16 +1072,18 @@ troco $alt2 $noun
|
||||
tropa $alt
|
||||
tropeço $alt2 $noun
|
||||
trombeta $alt2
|
||||
tumores $alt2
|
||||
valeta $alt2
|
||||
vanessa $alt2
|
||||
velozes $alt
|
||||
verbo $alt
|
||||
verme $alt
|
||||
vierem $alt
|
||||
violeta $alt2
|
||||
violoncelo $alt
|
||||
voga $alt
|
||||
vozes $alt
|
||||
xarope $alt
|
||||
xeque $alt
|
||||
zelo $alt $verb
|
||||
zero $alt
|
||||
zorra $alt2
|
||||
|
||||
+137
-110
@@ -58,7 +58,7 @@
|
||||
an (K+ &~N
|
||||
anh (A &~n^
|
||||
am (_ =&U~
|
||||
?1 a (z_ 'a //eg: paz, rapaz, capaz, etc...
|
||||
a (z_ 'a //eg: paz, rapaz, capaz, etc...
|
||||
?1 C) acç 'a's // eg: selecção, etc...
|
||||
|
||||
ai aI
|
||||
@@ -178,7 +178,7 @@
|
||||
e (ctA_ E
|
||||
e (ctAm_ E
|
||||
e (çA_ E
|
||||
e (çAm_ E
|
||||
e (çAm_ E
|
||||
|
||||
e (de_ E
|
||||
e (dem_ E
|
||||
@@ -304,7 +304,7 @@
|
||||
?1 _n) e (nhu i // eg: nenhum, nenhuma, nenhuns, nenhumas.
|
||||
?1 e (la_ 'E // eg: cadela, janela, vela, etc...
|
||||
?1 C) e (cC ,E // eg: seleccionar, efectuar, etc...
|
||||
?1 C) ecç 'E's // eg: selecção, etc...
|
||||
?1 C) ecç 'Es // eg: selecção, etc...
|
||||
?1 C) e (ã i // leão, panteão, etc.
|
||||
?1 C) e (a i // oceano, etc.
|
||||
?1 C) e (o 'i // eg: geologia, etc...
|
||||
@@ -342,110 +342,138 @@
|
||||
?1 l) e (ta 'E // eg: bicicleta, atleta.
|
||||
|
||||
|
||||
sf) e (ra_ E // esfera, biosfera
|
||||
|
||||
sf) e (ra_ E // esfera, biosfera
|
||||
|
||||
//sort
|
||||
_fiz) e (L05_ E
|
||||
_exag) e (L05_ E
|
||||
_houv) e (L05_ E
|
||||
_perd) e (L05_ e
|
||||
_soub) e (L05_ E
|
||||
_rend) e (L06_ e
|
||||
_vend) e (L06_ e
|
||||
_atend) e (L06_ e
|
||||
_com) e (L05_ e
|
||||
fiz) e (L05_ E
|
||||
_coub) e (L05_ E
|
||||
_exag) e (L05_ E
|
||||
_houv) e (L05_ E
|
||||
_perd) e (L05_ e
|
||||
_soub) e (L05_ E
|
||||
tiv) e (L05_ E // es-
|
||||
_atend) e (L06_ e
|
||||
_compreend) e (L06_ e
|
||||
_entend) e (L06_ e
|
||||
_estend) e (L06_ e
|
||||
respond) e (L06_ e // cor-
|
||||
com) e (L07_ e
|
||||
_bat) e (L07_ e
|
||||
_beb) e (L07_ e
|
||||
_tem) e (L07_ e
|
||||
_viv) e (L07_ e
|
||||
colh) e (L07_ e // & es-
|
||||
_corr) e (L07_ e
|
||||
_eleg) e (L07_ e
|
||||
_morr) e (L07_ e
|
||||
_perd) e (L07_ e
|
||||
_sofr) e (L07_ e
|
||||
_torc) e (L07_ e
|
||||
_venc) e (L07_ e
|
||||
_adoec) e (L07_ e
|
||||
_aperd) e (L07_ e
|
||||
_merec) e (L07_ e
|
||||
conhec) e (L07_ e // & re-
|
||||
entend) e (L07_ e
|
||||
preend) e (L07_ e // sur- com-
|
||||
respond) e (L07_ e // cor-
|
||||
_convenc) e (L07_ e
|
||||
_entend) e (L06_ e
|
||||
_estend) e (L06_ e
|
||||
_rend) e (L06_ e
|
||||
_vend) e (L06_ e
|
||||
respond) e (L06_ e // cor-
|
||||
_aborrec) e (L07_ e
|
||||
_adoec) e (L07_ e
|
||||
_amanhec) e (L07_ e
|
||||
_anoitec) e (L07_ e
|
||||
_arrepend) e (L07_ e
|
||||
_beb) e (L07_ e
|
||||
_com) e (L07_ e
|
||||
_defend) e (L07_ e
|
||||
_depend) e (L07_ e
|
||||
_eleg) e (L07_ e
|
||||
_enlouquec) e (L07_ e
|
||||
_entristec) e (L07_ e
|
||||
_envaidec) e (L07_ e
|
||||
_escond) e (L07_ e
|
||||
_obedec) e (L07_ e
|
||||
interromp) e (L07_ e
|
||||
intromet) e (L07_ e
|
||||
qu) e (brL04_ E
|
||||
_hosp) e (dL03_ E
|
||||
_estr) ei (L03_ EI
|
||||
_inv) e (jL04_ E
|
||||
_dec) e (pL04_ E
|
||||
_p) e (quL02_ E
|
||||
_s) e (quL02_ E
|
||||
l) e (que_ E
|
||||
_imp) e (rL03_ E
|
||||
_reit) e (rL03_ E
|
||||
_g) e (rL04_ E
|
||||
_op) e (rL04_ E
|
||||
_qu) e (rL04_ E
|
||||
_alt) e (rL04_ E
|
||||
_sup) e (rL04_ E
|
||||
_tol) e (rL04_ E
|
||||
_coop) e (rL04_ E
|
||||
_temp) e (rL04_ E
|
||||
_) e (rguL02_ E
|
||||
_alb) e (rguL02_ E
|
||||
_enx) e (rguL02_ E
|
||||
_inv) e (rtL03_ e
|
||||
_f) e (rvL03_ e
|
||||
_p) e (scL03_ E
|
||||
_m) e (sclL04 E
|
||||
_l) e (ssL02_ e
|
||||
_esp) e (ssL03_ e
|
||||
_m) e (tL03_ e
|
||||
_com) e (tL03_ e
|
||||
_rem) e (tL03_ e
|
||||
_derr) e (tL03_ e
|
||||
_prom) e (tL03_ e
|
||||
_subm) e (tL03_ e
|
||||
_comprom) e (tL03_ e
|
||||
_sol) e (trL03_ E
|
||||
_pen) e (trL04_ E
|
||||
scr) e (vL03_ e // e- in- pre- ree-
|
||||
_atr) e (vL03_ e
|
||||
_descr) e (vL03_ e
|
||||
_pr) e (zL04_ E
|
||||
_embel) e (zL04_ E
|
||||
par) e (çL01_ e // pareça, apareça
|
||||
_acont) e (çL01_ e
|
||||
_arref) e (çL01_ e
|
||||
_ado) e (çL03_ e
|
||||
_aqu) e (çL03_ e
|
||||
_car) e (çL03_ e
|
||||
_mer) e (çL03_ e
|
||||
_pad) e (çL03_ e
|
||||
_per) e (çL03_ e
|
||||
_esqu) e (çL03_ e
|
||||
_obed) e (çL03_ e
|
||||
_ofer) e (çL03_ e
|
||||
_aborr) e (çL03_ e
|
||||
_compar) e (çL03_ e
|
||||
_desapar) e (çL03_ e
|
||||
_enfraqu) e (çL03_ e
|
||||
_enriqu) e (çL03_ e
|
||||
_envaid) e (çL03_ e
|
||||
_esclar) e (çL03_ e
|
||||
_reapar) e (çL03_ e
|
||||
_reconh) e (çL03_ e
|
||||
_envaidec) e (L07_ e
|
||||
_envelhec) e (L07_ e
|
||||
_ergu) e (L07_ e
|
||||
_esclarec) e (L07_ e
|
||||
_escond) e (L07_ e
|
||||
_escurec) e (L07_ e
|
||||
_esquec) e (L07_ e
|
||||
_interromp) e (L07_ e
|
||||
_mord) e (L07_ e
|
||||
_morr) e (L07_ e
|
||||
_obedec) e (L07_ e
|
||||
_perd) e (L07_ e
|
||||
_sofr) e (L07_ e
|
||||
_tem) e (L07_ e
|
||||
aprend) e (L07_ e // re-
|
||||
bat) e (L07_ e // re- com-
|
||||
ced) e (L07_ e // pro- con- su-
|
||||
colh) e (L07_ e // & es-
|
||||
conhec) e (L07_ e // & re- des-
|
||||
corr) e (L07_ e // per- con- in- so- dis-
|
||||
entend) e (L07_ e
|
||||
merec) e (L07_ e // des-
|
||||
met) e (L07_ e // co- pro- arre- re- intro- compro- sub-
|
||||
padec) e (L07_ e // com-
|
||||
parec) e (L07_ e // a- rea- com- desa-
|
||||
preend) e (L07_ e // sur- com-
|
||||
respond) e (L07_ e // cor-
|
||||
torc) e (L07_ e // con-
|
||||
venc) e (L07_ e // con-
|
||||
vert) e (L07_ e // in- re- con-
|
||||
viv) e (L07_ e // re-
|
||||
qu) e (brL04_ E
|
||||
_hosp) e (dL03_ E
|
||||
_gr) e (gL03_ e
|
||||
_n) e (grL03_ e
|
||||
_estr) ei (L03_ EI
|
||||
_inv) e (jL04_ E
|
||||
_dec) e (pL04_ E
|
||||
_s) e (quL02_ E
|
||||
_p) e (quL02_ E
|
||||
l) e (que_ E
|
||||
_imp) e (rL03_ E
|
||||
_reit) e (rL03_ E
|
||||
_g) e (rL04_ E
|
||||
_op) e (rL04_ E
|
||||
_qu) e (rL04_ E
|
||||
_alt) e (rL04_ E
|
||||
_sup) e (rL04_ E
|
||||
_tol) e (rL04_ E
|
||||
_coop) e (rL04_ E
|
||||
_temp) e (rL04_ E
|
||||
_ven) e (rL04_ E
|
||||
_v) e (rbL03_ E
|
||||
_h) e (rdL04_ E
|
||||
_) e (rguL02_ E
|
||||
_alb) e (rguL02_ E
|
||||
_enx) e (rguL02_ E
|
||||
_bez) e (rrL03_ e
|
||||
_inv) e (rtL03_ e
|
||||
_f) e (rvL03_ e
|
||||
_p) e (scL03_ E
|
||||
_m) e (sclL04 E
|
||||
_l) e (ssL02_ e
|
||||
_esp) e (ssL03_ e
|
||||
_m) e (tL03_ e
|
||||
_com) e (tL03_ e
|
||||
prom) e (tL03_ e // com-
|
||||
_derr) e (tL03_ e
|
||||
_rem) e (tL03_ e
|
||||
_sol) e (trL03_ E
|
||||
_pen) e (trL04_ E
|
||||
_atr) e (vL03_ e
|
||||
scr) e (vL03_ e // e- in- pre- ree- de-
|
||||
_pr) e (zL04_ E
|
||||
_embel) e (zL04_ E
|
||||
_acont) e (çL01_ e
|
||||
_arref) e (çL01_ e
|
||||
_aqu) e (çL03_ e
|
||||
_car) e (çL03_ e
|
||||
_estrem) e (çL03_ e
|
||||
_mer) e (çL03_ e
|
||||
_pad) e (çL03_ e // com-
|
||||
_per) e (çL03_ e
|
||||
par) e (çL03_ e // a- re- com- rea- desa-
|
||||
_esqu) e (çL03_ e
|
||||
_obed) e (çL03_ e
|
||||
_ofer) e (çL03_ e
|
||||
abast) e (çL03_ e // re-
|
||||
_aborr) e (çL03_ e
|
||||
_fortal) e (çL03_ e
|
||||
_ado) e (çL03_ e
|
||||
_amanh) e (çL03_ e
|
||||
_anoit) e (çL03_ e
|
||||
_enfraqu) e (çL03_ e
|
||||
_enlouqu) e (çL03_ e
|
||||
_enriqu) e (çL03_ e
|
||||
_entrist) e (çL03_ e
|
||||
_envaid) e (çL03_ e
|
||||
_envelh) e (çL03_ e
|
||||
_esclar) e (çL03_ e
|
||||
_forn) e (çL03_ e
|
||||
conh) e (çL03_ e // re-
|
||||
//endsort
|
||||
|
||||
|
||||
@@ -626,7 +654,7 @@ _reconh) e (çL03_ e
|
||||
oi oI
|
||||
oi ($w_alt OI
|
||||
oi ($w_alt2++ oI
|
||||
oi (a_ OI // ??
|
||||
oi (a_ OI // ??
|
||||
oi (cA_ OI
|
||||
oi (de_ OI
|
||||
oi (s oI
|
||||
@@ -662,7 +690,7 @@ _reconh) e (çL03_ e
|
||||
o (ltAm_ O
|
||||
|
||||
o (sA_ O
|
||||
o (so_N o // not for osos_
|
||||
o (so_N o // not for osos_
|
||||
o (sAm_ O
|
||||
|
||||
o (ssA_ O
|
||||
@@ -751,9 +779,8 @@ _desabr) o (chL04_ O
|
||||
_rev) o (lvL02_ O
|
||||
_desenv) o (lvL02_ O
|
||||
_ent) o (pL02_ O
|
||||
c) o (rrL01_ o // escorra, incorra, corra, recorra
|
||||
c) o (rrL01_ o // escorra, incorra, corra, recorra
|
||||
_m) o (rrL01_ o
|
||||
_r) o (snL01_ O
|
||||
_c) o (spL02_ O
|
||||
p) ostos (_ Ost=Us# // dispostos etc.
|
||||
//endsort
|
||||
@@ -893,8 +920,8 @@ _desenv) o (lvL02_ O
|
||||
r) u (_A u
|
||||
u (A_ 'u
|
||||
|
||||
u (am_ 'u
|
||||
u (em_ 'u
|
||||
u (am_ 'u
|
||||
u (em_ 'u
|
||||
ui uI
|
||||
ui (_ 'uI
|
||||
u (iu w
|
||||
|
||||
+758
-740
File diff suppressed because it is too large
Load Diff
@@ -14,4 +14,4 @@ stressAmp 17 16 19 19 19 19 21 19
|
||||
|
||||
replace 03 I i
|
||||
replace 03 I2 i
|
||||
replace 03 @ @/
|
||||
|
||||
|
||||
@@ -0,0 +1,12 @@
|
||||
name vietnam_hue
|
||||
language vi-hue
|
||||
phonemes vi-hue
|
||||
dictrules 1
|
||||
gender male
|
||||
|
||||
words 1
|
||||
pitch 82 118 //80 118
|
||||
//breath 75 75 60 40 15 10
|
||||
//breathw 150 150 200 200 400 400
|
||||
voicing 90 //18
|
||||
flutter 20
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -8,7 +8,7 @@ phoneme 3 // Schwa, used for rhotic schwa in American
|
||||
vowel starttype #@ endtype #@
|
||||
ipa ɚ
|
||||
unstressed
|
||||
length 210
|
||||
length 200
|
||||
IfNextVowelAppend(r-)
|
||||
FMT(vwl_en_us/3_us)
|
||||
endphoneme
|
||||
@@ -21,15 +21,12 @@ phoneme @ // Schwa
|
||||
IF nextPh(isRhotic) THEN
|
||||
ChangePhoneme(3)
|
||||
ENDIF
|
||||
IF thisPh(isWordEnd) THEN
|
||||
FMT(vowel/@_6)
|
||||
ENDIF
|
||||
FMT(vowel/@_4)
|
||||
endphoneme
|
||||
|
||||
phoneme @/ // Schwa, end of word
|
||||
vowel starttype #@ endtype #@
|
||||
unstressed
|
||||
length 130
|
||||
FMT(vowel/@_low2)
|
||||
endphoneme
|
||||
|
||||
phoneme @2 // Schwa, changes to I before a vowel
|
||||
vowel starttype #@ endtype #@
|
||||
|
||||
@@ -39,7 +39,11 @@ phoneme &~
|
||||
vowel starttype #@ endtype #@
|
||||
ipa ɐU+0303
|
||||
length 180
|
||||
FMT(vnasal/a#_n)
|
||||
IF thisPh(isFinalVowel) THEN
|
||||
FMT(vnasal/W_n)
|
||||
ELSE
|
||||
FMT(vnasal/a#_n)
|
||||
ENDIF
|
||||
endphoneme
|
||||
|
||||
phoneme &U~
|
||||
@@ -224,10 +228,3 @@ phoneme *
|
||||
endphoneme
|
||||
|
||||
|
||||
// TESTING
|
||||
phoneme &2~
|
||||
vowel starttype #@ endtype #@
|
||||
ipa ɐU+0303
|
||||
length 200
|
||||
FMT(vnasal/W_n)
|
||||
endphoneme
|
||||
|
||||
+16
-6
@@ -85,14 +85,18 @@ phoneme i
|
||||
IF prevPhW(w) THEN
|
||||
VowelStart(w/wi)
|
||||
ENDIF
|
||||
FMT(vowel/i_4)
|
||||
IF nextPh(n^) OR nextPh(c) THEN
|
||||
FMT(vnasal/ii_n)
|
||||
ELSE
|
||||
FMT(vowel/i_4)
|
||||
ENDIF
|
||||
endphoneme
|
||||
|
||||
|
||||
phoneme O
|
||||
vowel starttype #o endtype #o
|
||||
IF nextPh(kh) THEN
|
||||
length 95
|
||||
IF nextPh(kh) OR nextPh(N) THEN
|
||||
length 110
|
||||
ELSE
|
||||
length 200
|
||||
ENDIF
|
||||
@@ -101,8 +105,8 @@ endphoneme
|
||||
|
||||
phoneme o
|
||||
vowel starttype #o endtype #o
|
||||
IF nextPh(kh) THEN
|
||||
length 95
|
||||
IF nextPh(kh) OR nextPh(N) THEN
|
||||
length 110
|
||||
ELSE
|
||||
length 200
|
||||
ENDIF
|
||||
@@ -286,7 +290,7 @@ endphoneme
|
||||
|
||||
phoneme u@
|
||||
vowel starttype #u endtype #@
|
||||
length 200
|
||||
length 150 //200
|
||||
FMT(vdiph2/uu@)
|
||||
endphoneme
|
||||
|
||||
@@ -317,6 +321,12 @@ phoneme o&
|
||||
FMT(vietnam/oe)
|
||||
endphoneme
|
||||
|
||||
phoneme iE // iê : viết, giệc
|
||||
vowel starttype #i endtype #e
|
||||
length 190
|
||||
FMT(vietnam/ie_2)
|
||||
endphoneme
|
||||
|
||||
phoneme kh
|
||||
vls vel frc
|
||||
lengthmod 3
|
||||
|
||||
@@ -0,0 +1,49 @@
|
||||
|
||||
//====================================================
|
||||
// Vietnamese Phonemes - Make Huế Dialect
|
||||
//====================================================
|
||||
|
||||
|
||||
phoneme 1 // ngang tone: level
|
||||
stress
|
||||
Tone(30, 2, envelope/p_level, NULL) // similar Hue dialect tone
|
||||
endphoneme
|
||||
|
||||
|
||||
phoneme 2 // huyền tone: low falling
|
||||
stress
|
||||
Tone(20, 25, envelope/p_fall,envelope/vi_6amp) // NULL) //20 8
|
||||
endphoneme
|
||||
|
||||
|
||||
phoneme 3 // sắc Tone(rising
|
||||
stress
|
||||
Tone(2, 10, envelope/p_rise, NULL) // 25 50 45 75
|
||||
endphoneme
|
||||
|
||||
|
||||
phoneme 4 // hỏi Tone(curve (dipping rising)
|
||||
stress
|
||||
Tone(20, 5, envelope/p_512,NULL) //Tone(55, 5, envelope/p_fallrise, NULL) //30 5 m 55 5
|
||||
endphoneme
|
||||
|
||||
|
||||
phoneme 5 // ngã tone: broken (creaking rising)
|
||||
stress
|
||||
Tone(50,2, envelope/p_214, envelope/vi_5amp) // 28,58 m20 85
|
||||
endphoneme
|
||||
|
||||
|
||||
phoneme 6 // nặng Tone(drop (constricted)
|
||||
stress
|
||||
//length 150 // ignore because it make too short sound 75 // reduce the length of the vowel
|
||||
Tone(25, 10, envelope/p_512, envelope/vi_6amp) // 40 20
|
||||
endphoneme
|
||||
|
||||
|
||||
phoneme 7 // Tone(1 (ngang) at end of clause
|
||||
stress
|
||||
Tone(5, 40, envelope/p_level, NULL) //Tone(99, 50, envelope/p_fall, NULL) // 40 20
|
||||
endphoneme
|
||||
|
||||
|
||||
+6
-7
@@ -771,12 +771,12 @@ phoneme n.
|
||||
ENDIF
|
||||
|
||||
NextVowelStarts
|
||||
VowelStart(n/n@)
|
||||
VowelStart(n/na)
|
||||
VowelStart(n/ne)
|
||||
VowelStart(n/ni)
|
||||
VowelStart(n/no)
|
||||
VowelStart(n/nu)
|
||||
VowelStart(n/nr@)
|
||||
VowelStart(n/nra)
|
||||
VowelStart(n/nre)
|
||||
VowelStart(n/nri)
|
||||
VowelStart(n/nro)
|
||||
VowelStart(n/nru)
|
||||
EndSwitch
|
||||
|
||||
IF prevPh(isNotVowel) AND nextPhW(isLiquid) THEN
|
||||
@@ -1936,4 +1936,3 @@ include ph_korean
|
||||
phonemetable kl base
|
||||
include ph_greenlandic
|
||||
|
||||
|
||||
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -1,5 +1,5 @@
|
||||
|
||||
|
||||
// 20.02.13 Add samplerate 4-bytes at start of phondata
|
||||
// 14.09.10 Recognize long and short frames in phondata
|
||||
// 02.09.10 Fix: Q sections were omitted from the converted phondata
|
||||
// 13.08.10 jonsd: Added Q lines. Use Address to set the displacement in phondata file.
|
||||
@@ -235,7 +235,9 @@ void swap_phondata (const char *infile, const char *outfile,
|
||||
exit (1);
|
||||
}
|
||||
|
||||
xread = fread(buf_4, 4, 1, in);
|
||||
xread = fread(buf_4, 4, 1, in); // version number
|
||||
fwrite(buf_4, 4, 1, out);
|
||||
xread = fread(buf_4, 4, 1, in); // sample rate
|
||||
fwrite(buf_4, 4, 1, out);
|
||||
|
||||
while (fgets (line, sizeof(line), mfest))
|
||||
|
||||
+95
-52
@@ -27,6 +27,7 @@
|
||||
#include "wx/wfstream.h"
|
||||
#include "wx/dir.h"
|
||||
#include "wx/filename.h"
|
||||
#include <wx/numdlg.h>
|
||||
|
||||
#include "speak_lib.h"
|
||||
#include "main.h"
|
||||
@@ -45,6 +46,7 @@ extern void FindPhonemesUsed(void);
|
||||
extern void DisplayErrorFile(const char *fname);
|
||||
extern int utf8_out(unsigned int c, char *buf);
|
||||
extern void DrawEnvelopes();
|
||||
extern void ReadPhondataManifest();
|
||||
char path_source[sizeof(path_home)+20];
|
||||
|
||||
|
||||
@@ -465,7 +467,7 @@ return;
|
||||
instn_category = (instn >> 12) & 0xf;
|
||||
data1 = instn & 0xff;
|
||||
type2 = (instn >> 8) & 0xf;
|
||||
fprintf(f_out, " %.3x: %.4x %s",pc-prog_buf,instn,instn_category_string[instn_category]);
|
||||
fprintf(f_out, " %.3x: %.4x %s",(unsigned int)(pc-prog_buf),instn,instn_category_string[instn_category]);
|
||||
|
||||
switch(instn_category)
|
||||
{
|
||||
@@ -644,6 +646,7 @@ static int duplicate_references = 0;
|
||||
static int count_frames = 0;
|
||||
static int error_count = 0;
|
||||
static int resample_count = 0;
|
||||
static int resample_fails = 0;
|
||||
static int then_count = 0;
|
||||
static int after_if = 0;
|
||||
|
||||
@@ -738,7 +741,6 @@ static void CompileReport(void)
|
||||
const char *data_path;
|
||||
int prev_table;
|
||||
int prev_mnemonic;
|
||||
char fname[sizeof(path_source)+20];
|
||||
|
||||
if(f_report == NULL)
|
||||
return;
|
||||
@@ -1791,8 +1793,12 @@ static int LoadWavefile(FILE *f, const char *fname)
|
||||
int max = 0;
|
||||
int length;
|
||||
int sr1, sr2;
|
||||
int failed;
|
||||
int len;
|
||||
int resample_wav = 0;
|
||||
const char *fname2;
|
||||
char fname_temp[100];
|
||||
char msg[120];
|
||||
int scale_factor=0;
|
||||
|
||||
fseek(f,24,SEEK_SET);
|
||||
@@ -1802,53 +1808,67 @@ static int LoadWavefile(FILE *f, const char *fname)
|
||||
|
||||
if((sr1 != samplerate_native) || (sr2 != sr1*2))
|
||||
{
|
||||
#ifdef PLATFORM_WINDOWS
|
||||
if(sr1 != samplerate_native)
|
||||
int fd_temp;
|
||||
char command[sizeof(path_source)+200];
|
||||
|
||||
failed = 0;
|
||||
|
||||
#ifdef PLATFORM_POSIX
|
||||
strcpy(fname_temp,"/tmp/espeakXXXXXX");
|
||||
if((fd_temp = mkstemp(fname_temp)) >= 0)
|
||||
{
|
||||
fprintf(f_errors,"Wrong samplerate %d, wants %d\n",sr1,samplerate_native);
|
||||
error("Wrong samplerate: %s",fname);
|
||||
}
|
||||
if(sr2 != sr1*2)
|
||||
{
|
||||
error("Not mono: %s",fname);
|
||||
close(fd_temp);
|
||||
}
|
||||
#else
|
||||
{
|
||||
int fd_temp;
|
||||
char command[sizeof(path_source)+200];
|
||||
strcpy(fname_temp,"/tmp/espeakXXXXXX");
|
||||
if((fd_temp = mkstemp(fname_temp)) >= 0)
|
||||
{
|
||||
close(fd_temp);
|
||||
sprintf(command,"sox \"%s%s.wav\" -c1 -t wav %s rate -h %d\n",path_source,fname,fname_temp,samplerate_native);
|
||||
if(system(command) < 0)
|
||||
{
|
||||
error("Failed to resample: %s",command);
|
||||
remove(fname_temp);
|
||||
return(0);
|
||||
}
|
||||
}
|
||||
|
||||
if(GetFileLength(fname_temp) <= 0)
|
||||
{
|
||||
error("Failed to resample: %s",command);
|
||||
remove(fname_temp);
|
||||
return(0);
|
||||
}
|
||||
|
||||
f = fopen(fname_temp,"rb");
|
||||
if(f == NULL)
|
||||
{
|
||||
error("Can't read temp file: %s",fname_temp);
|
||||
return(0);
|
||||
}
|
||||
if(f_report != NULL)
|
||||
fprintf(f_report, "resampled %s\n", fname);
|
||||
resample_count++;
|
||||
resample_wav = 1;
|
||||
fseek(f,40,SEEK_SET); // skip past the WAV header, up to before "data length"
|
||||
}
|
||||
strcpy(fname_temp,tmpnam(NULL));
|
||||
#endif
|
||||
|
||||
fname2 = fname;
|
||||
len = strlen(fname);
|
||||
if(strcmp(&fname[len-4], ".wav") == 0)
|
||||
{
|
||||
strcpy(msg, fname);
|
||||
msg[len-4] = 0;
|
||||
fname2 = msg;
|
||||
}
|
||||
|
||||
sprintf(command,"sox \"%s%s.wav\" -r %d -c1 -t wav %s\n",path_source,fname2,samplerate_native, fname_temp);
|
||||
if(system(command) < 0)
|
||||
{
|
||||
failed = 1;
|
||||
}
|
||||
|
||||
|
||||
if(failed || (GetFileLength(fname_temp) <= 0))
|
||||
{
|
||||
if(resample_fails < 2)
|
||||
error("Resample command failed: %s", command);
|
||||
resample_fails++;
|
||||
|
||||
if(sr1 != samplerate_native)
|
||||
{
|
||||
sprintf(msg, "Can't resample (%d to %d): %s", sr1, samplerate_native, fname);
|
||||
error("%s", msg);
|
||||
}
|
||||
else
|
||||
{
|
||||
error("WAV file is not mono: %s", fname);
|
||||
}
|
||||
remove(fname_temp);
|
||||
return(0);
|
||||
}
|
||||
|
||||
f = fopen(fname_temp,"rb");
|
||||
if(f == NULL)
|
||||
{
|
||||
error("Can't read temp file: %s",fname_temp);
|
||||
return(0);
|
||||
}
|
||||
if(f_report != NULL)
|
||||
fprintf(f_report, "resampled %s\n", fname);
|
||||
resample_count++;
|
||||
resample_wav = 1;
|
||||
fseek(f,40,SEEK_SET); // skip past the WAV header, up to before "data length"
|
||||
}
|
||||
|
||||
displ = ftell(f_phdata);
|
||||
@@ -3321,8 +3341,11 @@ static void CompileEquivalents()
|
||||
p_start[2] = n_bytes >> 8; // index of next table
|
||||
p_start[3] = n_bytes;
|
||||
|
||||
LoadVoice(voice_name2,0); // reset the original phoneme table
|
||||
LoadVoiceVariant(save_voice_name,0);
|
||||
if(gui_flag != 0)
|
||||
{
|
||||
LoadVoice(voice_name2,0); // reset the original phoneme table
|
||||
LoadVoiceVariant(save_voice_name,0);
|
||||
}
|
||||
} // end of CompileEquivalents
|
||||
|
||||
|
||||
@@ -3362,6 +3385,7 @@ static void CompilePhonemeFiles()
|
||||
case kINCLUDE:
|
||||
NextItem(tSTRING);
|
||||
sprintf(buf,"%s%s",path_source,item_string);
|
||||
|
||||
if((stack_ix < N_STACK) && (f = fopen_log(f_errors,buf,"rb")) != NULL)
|
||||
{
|
||||
fprintf(f_errors,"include %s\n",item_string);
|
||||
@@ -3421,6 +3445,7 @@ make_envs();
|
||||
|
||||
n_envelopes = 0;
|
||||
error_count = 0;
|
||||
resample_count = 0;
|
||||
memset(markers_used,0,sizeof(markers_used));
|
||||
|
||||
f_errors = stderr;
|
||||
@@ -3534,6 +3559,7 @@ memset(markers_used,0,sizeof(markers_used));
|
||||
|
||||
// write a word so that further data doesn't start at displ=0
|
||||
Write4Bytes(f_phdata,version_phdata);
|
||||
Write4Bytes(f_phdata,samplerate_native);
|
||||
Write4Bytes(f_phindex,version_phdata);
|
||||
|
||||
memset(ref_hash_tab,0,sizeof(ref_hash_tab));
|
||||
@@ -3555,9 +3581,10 @@ fprintf(f_errors,"\nRefs %d, Reused %d\n",count_references,duplicate_references
|
||||
fclose(f_phtab);
|
||||
fclose(f_phcontents);
|
||||
|
||||
LoadPhData();
|
||||
LoadVoice(voice_name2,0);
|
||||
LoadPhData(NULL);
|
||||
|
||||
if(gui_flag != 0)
|
||||
LoadVoice(voice_name2,0);
|
||||
|
||||
CompileReport();
|
||||
report_dict = CompileAllDictionaries();
|
||||
@@ -3595,6 +3622,8 @@ fprintf(f_errors,"\nRefs %d, Reused %d\n",count_references,duplicate_references
|
||||
fprintf(stderr,"%s\n",fname);
|
||||
|
||||
}
|
||||
|
||||
ReadPhondataManifest();
|
||||
} // end of CompilePhonemeData
|
||||
|
||||
|
||||
@@ -3759,7 +3788,6 @@ void CompileIntonation()
|
||||
char buf[sizeof(path_source)+120];
|
||||
|
||||
error_count = 0;
|
||||
resample_count = 0;
|
||||
|
||||
sprintf(fname_errors,"%s%s",path_source,"error_intonation");
|
||||
if((f_errors = fopen(fname_errors,"w")) == NULL)
|
||||
@@ -4036,7 +4064,7 @@ void CompileIntonation()
|
||||
{
|
||||
DisplayErrorFile(fname_errors);
|
||||
}
|
||||
LoadPhData();
|
||||
LoadPhData(NULL);
|
||||
|
||||
} // end of CompileIntonation
|
||||
|
||||
@@ -4044,7 +4072,22 @@ void CompileIntonation()
|
||||
|
||||
void CompilePhonemeData()
|
||||
{
|
||||
WavegenInit(22050, 0);
|
||||
WavegenSetVoice(voice);
|
||||
CompilePhonemeData2("phonemes");
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
void CompileSampleRate()
|
||||
{
|
||||
long value;
|
||||
value = wxGetNumberFromUser(_T("Compile phoneme data with a specified sample rate"), _T("Sample rate"), _T("Resample (needs sox)"), 22050, 5000, 48000);
|
||||
|
||||
if(value > 1000)
|
||||
{
|
||||
WavegenInit(value, 0);
|
||||
WavegenSetVoice(voice);
|
||||
CompilePhonemeData2("phonemes");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -300,10 +300,6 @@ int LoadDictionary(Translator *tr, const char *name, int no_error)
|
||||
|
||||
// set up indices into data_dictrules
|
||||
InitGroups(tr);
|
||||
if(tr->groups1[0] == NULL)
|
||||
{
|
||||
fprintf(stderr,"Error in %s_rules, no default rule group\n",name);
|
||||
}
|
||||
|
||||
// set up hash table for data_dictlist
|
||||
p = &(tr->data_dictlist[8]);
|
||||
|
||||
+28
-12
@@ -43,11 +43,11 @@
|
||||
#include "prosodydisplay.h"
|
||||
|
||||
|
||||
#ifdef deleted
|
||||
static const char *about_string = "espeakedit: %s\nAuthor: Jonathan Duddington (c) 2009\n\n"
|
||||
|
||||
static const char *about_string2 = "espeakedit: %s\nAuthor: Jonathan Duddington (c) 2009\n\n"
|
||||
"Licensed under GNU General Public License version 3\n"
|
||||
"http://espeak.sourceforge.net/";
|
||||
#endif
|
||||
|
||||
|
||||
static const char *about_string = "<font size=0><b>espeakedit </b> %s<br>Author: Jonathan Duddington (c) 2009<br>"
|
||||
"<a href=\"http://espeak.sourceforge.net/\">http://espeak.sourceforge.net</a><br>"
|
||||
@@ -63,6 +63,7 @@ extern void DictionarySort(const char *dictname);
|
||||
|
||||
extern void init_z();
|
||||
extern void CompilePhonemeData(void);
|
||||
extern void CompileSampleRate(void);
|
||||
extern void CompileMbrola();
|
||||
extern void CompileIntonation();
|
||||
extern void InitSpectrumDisplay();
|
||||
@@ -133,22 +134,21 @@ if(argc > 1)
|
||||
|
||||
if((strcmp(param,"--help")==0) || (strcmp(param,"-h")==0))
|
||||
{
|
||||
printf(about_string,espeak_Info(NULL));
|
||||
printf(help_text);
|
||||
printf(about_string2,espeak_Info(NULL));
|
||||
printf("%s", help_text);
|
||||
exit(0);
|
||||
}
|
||||
|
||||
ConfigInit();
|
||||
VoiceReset(0);
|
||||
WavegenSetVoice(voice);
|
||||
WavegenInitSound();
|
||||
|
||||
if(strcmp(param,"--compile")==0)
|
||||
{
|
||||
LoadPhData(NULL);
|
||||
samplerate_native = samplerate = 22050;
|
||||
CompilePhonemeData();
|
||||
CompileIntonation();
|
||||
exit(0);
|
||||
}
|
||||
exit(0);
|
||||
}
|
||||
|
||||
ConfigInit();
|
||||
@@ -205,6 +205,7 @@ BEGIN_EVENT_TABLE(MyFrame, wxFrame)
|
||||
EVT_MENU(MENU_PATH3, MyFrame::OnOptions)
|
||||
EVT_MENU(MENU_PATH4, MyFrame::OnOptions)
|
||||
EVT_MENU(MENU_COMPILE_PH, MyFrame::OnTools)
|
||||
EVT_MENU(MENU_COMPILE_PH2, MyFrame::OnTools)
|
||||
EVT_MENU(MENU_COMPILE_DICT, MyFrame::OnTools)
|
||||
EVT_MENU(MENU_COMPILE_DICT_DEBUG, MyFrame::OnTools)
|
||||
EVT_MENU(MENU_FORMAT_DICTIONARY, MyFrame::OnTools)
|
||||
@@ -266,6 +267,7 @@ MyFrame::MyFrame(wxWindow *parent, const wxWindowID id, const wxString& title, c
|
||||
int error_flag = 0;
|
||||
int result;
|
||||
int param;
|
||||
int srate;
|
||||
|
||||
notebook = new wxNotebook(this, ID_NOTEBOOK, wxDefaultPosition, wxSize(312,760));
|
||||
// notebook->AddPage(voicedlg,_T("Voice"),FALSE);
|
||||
@@ -301,9 +303,8 @@ MyFrame::MyFrame(wxWindow *parent, const wxWindowID id, const wxString& title, c
|
||||
SetSize(pos.x, pos.y, size.GetWidth(), size.GetHeight());
|
||||
|
||||
LoadConfig();
|
||||
WavegenInitSound();
|
||||
|
||||
if((result = LoadPhData()) != 1)
|
||||
if((result = LoadPhData(&srate)) != 1)
|
||||
{
|
||||
if(result == -1)
|
||||
wxLogError(_T("Failed to read espeak-data/phontab,phondata,phonindex\nPath = ")+wxString(path_home,wxConvLocal)+_T("\n\nThe 'eSpeak' package needs to be installed"));
|
||||
@@ -311,7 +312,10 @@ MyFrame::MyFrame(wxWindow *parent, const wxWindowID id, const wxString& title, c
|
||||
wxLogError(_T("Wrong version of espeak-data at:\n")+ wxString(path_home,wxConvLocal)+_T("\nVersion 0x%x (expects 0x%x)"),result,version_phdata);
|
||||
|
||||
error_flag = 1;
|
||||
srate = 22050;
|
||||
}
|
||||
WavegenInit(srate,0);
|
||||
WavegenInitSound();
|
||||
|
||||
f_trans = stdout;
|
||||
option_ssml = 1;
|
||||
@@ -350,7 +354,13 @@ MyFrame::MyFrame(wxWindow *parent, const wxWindowID id, const wxString& title, c
|
||||
void MyFrame::SetVoiceTitle(char *voice_name)
|
||||
{//==========================================
|
||||
char buf[100];
|
||||
SetTitle(AppName + _T(" - ") + wxString(voice_name,wxConvLocal) + _T(" voice"));
|
||||
|
||||
if(samplerate_native == 22050)
|
||||
sprintf(buf, " - %s voice", voice_name);
|
||||
else
|
||||
sprintf(buf, " - %s voice %dHz", voice_name, samplerate_native);
|
||||
SetTitle(AppName + wxString(buf,wxConvLocal));
|
||||
|
||||
if((data_menu != NULL) && (translator != NULL))
|
||||
{
|
||||
sprintf(buf,"Compile &dictionary '%s'",translator->dictionary_name);
|
||||
@@ -738,6 +748,12 @@ void MyFrame::OnTools(wxCommandEvent& event)
|
||||
|
||||
case MENU_COMPILE_PH:
|
||||
CompilePhonemeData();
|
||||
SetVoiceTitle(voice_name2);
|
||||
break;
|
||||
|
||||
case MENU_COMPILE_PH2:
|
||||
CompileSampleRate();
|
||||
SetVoiceTitle(voice_name2);
|
||||
break;
|
||||
|
||||
case MENU_COMPILE_MBROLA:
|
||||
|
||||
+20
-20
@@ -135,7 +135,7 @@ int TestSynthCallback(short *wav, int numsamples, espeak_EVENT *events)
|
||||
else
|
||||
if(type==espeakEVENT_PHONEME)
|
||||
{
|
||||
char buf[10];
|
||||
// char buf[10];
|
||||
fprintf(f_events,"[%s]\n",WordToString(events->id.number)); //old version, only 4 characters bytes
|
||||
// memcpy(buf, events->id.string, 8);
|
||||
// buf[8] = 0;
|
||||
@@ -206,7 +206,7 @@ static const unsigned short KOI8_R[0x60] = {
|
||||
|
||||
|
||||
#define N_CHARS 34
|
||||
#define PH(c1,c2) (c2<<8)+c1 // combine two characters into an integer for phoneme name
|
||||
#define PH(c1,c2) (c2<<8)+c1 // combine two characters into an integer for phoneme name
|
||||
|
||||
|
||||
|
||||
@@ -236,7 +236,7 @@ static void DecodePhonemes2(const char *inptr, char *outptr)
|
||||
continue; /* indicates unrecognised phoneme */
|
||||
if((ph = phoneme_tab[phcode]) == NULL)
|
||||
continue;
|
||||
|
||||
|
||||
if((ph->type == phSTRESS) && (ph->std_length <= 4) && (ph->program == 0))
|
||||
{
|
||||
if(ph->std_length > 2)
|
||||
@@ -281,7 +281,7 @@ static void DecodePhonemes2(const char *inptr, char *outptr)
|
||||
else
|
||||
if(mnem != 0)
|
||||
{
|
||||
while((c = (mnem & 0xff)) != 0)
|
||||
while((c = (mnem & 0xff)) != 0)
|
||||
{
|
||||
*outptr++ = c;
|
||||
mnem = mnem >> 8;
|
||||
@@ -363,7 +363,7 @@ void Lexicon_It(int pass)
|
||||
path_dir1 = wxFileName(fname_lex).GetPath();
|
||||
strcpy(buf_out, path_dir1.mb_str(wxConvLocal));
|
||||
sprintf(buf, "%s/IT_errors", buf_out);
|
||||
|
||||
|
||||
if((f_out = fopen(buf,"w")) == NULL)
|
||||
{
|
||||
str = wxString(buf, wxConvLocal);
|
||||
@@ -412,7 +412,7 @@ void Lexicon_It(int pass)
|
||||
|
||||
if((p = strstr(buf,"//")) != NULL)
|
||||
*p = 0;
|
||||
|
||||
|
||||
if((sscanf(buf,"%s %s",word,temp)) < 2)
|
||||
continue;
|
||||
|
||||
@@ -522,7 +522,7 @@ void Lexicon_It(int pass)
|
||||
fputc(*p, f_listx); // omit secondary stress marks
|
||||
}
|
||||
fputc('\n',f_listx);
|
||||
|
||||
|
||||
}
|
||||
else
|
||||
if((stress_posn1 != stress_posn2) && (stress_posn1 > 0) && (stress_posn2 > 0))
|
||||
@@ -706,7 +706,7 @@ void Lexicon_De()
|
||||
return;
|
||||
}
|
||||
path_dir1 = wxFileName(fname).GetPath();
|
||||
|
||||
|
||||
if((f_out = fopen("compare_de","w")) == NULL)
|
||||
{
|
||||
wxLogError(_T("Can't write file "));
|
||||
@@ -934,7 +934,7 @@ void Lexicon_Bg()
|
||||
|
||||
FILE *f_in;
|
||||
FILE *f_out;
|
||||
|
||||
|
||||
char word[80];
|
||||
char word_in[80];
|
||||
char phonemes[N_WORD_PHONEMES];
|
||||
@@ -1101,7 +1101,7 @@ if(n_stress > 1) n_stress = 1;
|
||||
|
||||
if(done)
|
||||
n_out++;
|
||||
}
|
||||
}
|
||||
|
||||
n_words++;
|
||||
}
|
||||
@@ -1383,10 +1383,10 @@ void Lexicon_Ru()
|
||||
len = strlen(suffix);
|
||||
if(len >= (wlen-2))
|
||||
continue;
|
||||
|
||||
|
||||
if(ru_stress > (vcount - suffixes[sfx].syllables))
|
||||
continue;
|
||||
|
||||
|
||||
if(strcmp(suffix,&word[wlen-len])==0)
|
||||
{
|
||||
strcpy(word2,word);
|
||||
@@ -1547,7 +1547,7 @@ void CountWordFreq(wxString path, wcount **hashtab)
|
||||
// skip leading spaces, numbers, etc
|
||||
if(feof(f_in)) break;
|
||||
}
|
||||
|
||||
|
||||
// read utf8 bytes until a space, number or punctuation
|
||||
ix = 0;
|
||||
while(!feof(f_in) && (c >= 'A') && (ix < sizeof(buf)-1))
|
||||
@@ -1557,7 +1557,7 @@ void CountWordFreq(wxString path, wcount **hashtab)
|
||||
}
|
||||
buf[ix++] = 0;
|
||||
buf[ix] = 0;
|
||||
|
||||
|
||||
// the buf may contain non-alphabetic characters
|
||||
j = 0;
|
||||
n_chars = 0;
|
||||
@@ -1583,7 +1583,7 @@ void CountWordFreq(wxString path, wcount **hashtab)
|
||||
}
|
||||
}
|
||||
fclose(f_in);
|
||||
|
||||
|
||||
} // end of CountWordFreq
|
||||
|
||||
|
||||
@@ -1645,7 +1645,7 @@ void MakeWordFreqList()
|
||||
free(p);
|
||||
}
|
||||
fclose(f_out);
|
||||
|
||||
|
||||
} // end of Make WorkFreqList
|
||||
|
||||
|
||||
@@ -2129,9 +2129,9 @@ void SetSpeedTab(void)
|
||||
// Interpolation table to translate from words-per-minute to internal speed
|
||||
// words-per-minute values (measured)
|
||||
static float wpm1[N_WPM] =
|
||||
{0, 82, 96, 108, 124, 134, 147, 162, 174, 189, 224, 259, 273, 289, 307, 326, 346, 361, 370 };
|
||||
{0, 82, 96, 108, 124, 134, 147, 162, 174, 189, 224, 259, 273, 289, 307, 326, 346, 361, 370 };
|
||||
// corresponding internal speed values
|
||||
static float wpm2[N_WPM] =
|
||||
static float wpm2[N_WPM] =
|
||||
{0,253,200, 170, 140, 125, 110, 95, 85, 75, 55, 40, 35, 30, 25, 20, 15, 10, 5 };
|
||||
|
||||
unsigned char speed_lookup[290];
|
||||
@@ -2245,7 +2245,7 @@ void CharsetToUnicode(const char *charset)
|
||||
#ifdef deleted
|
||||
void Test2()
|
||||
{
|
||||
//
|
||||
//
|
||||
char buf[120];
|
||||
FILE *f;
|
||||
FILE *f_out;
|
||||
@@ -2299,7 +2299,7 @@ if(control==2)
|
||||
f = fopen("/home/jsd1/speechdata/text/test.txt","r");
|
||||
if(f==NULL)
|
||||
return;
|
||||
|
||||
|
||||
|
||||
while(!feof(f) && (ix < sizeof(textbuf)-2))
|
||||
{
|
||||
|
||||
@@ -136,6 +136,7 @@ enum {
|
||||
|
||||
MENU_PROSODY,
|
||||
MENU_COMPILE_PH,
|
||||
MENU_COMPILE_PH2,
|
||||
MENU_COMPILE_DICT,
|
||||
MENU_COMPILE_DICT_DEBUG,
|
||||
MENU_FORMAT_DICTIONARY,
|
||||
|
||||
+2
-1
@@ -1,5 +1,5 @@
|
||||
/***************************************************************************
|
||||
* Copyright (C) 2005 to 2010 by Jonathan Duddington *
|
||||
* Copyright (C) 2005 to 2013 by Jonathan Duddington *
|
||||
* email: jonsd@users.sourceforge.net *
|
||||
* *
|
||||
* This program is free software; you can redistribute it and/or modify *
|
||||
@@ -90,6 +90,7 @@ wxMenuBar *MakeMenu(int type, const char *dict_name)
|
||||
// DATA MENU
|
||||
data_menu = new wxMenu;
|
||||
data_menu->Append(MENU_COMPILE_PH, _("Compile &phoneme data"));
|
||||
data_menu->Append(MENU_COMPILE_PH2, _("Change sample &rate"));
|
||||
data_menu->Append(MENU_COMPILE_DICT, _("Compile &dictionary"));
|
||||
data_menu->Append(MENU_COMPILE_DICT_DEBUG, _("Compile dictionary (debu&g)"));
|
||||
data_menu->AppendSeparator();
|
||||
|
||||
+26
-26
@@ -1,5 +1,5 @@
|
||||
/***************************************************************************
|
||||
* Copyright (C) 2005 to 2011 by Jonathan Duddington *
|
||||
* Copyright (C) 2005 to 2013 by Jonathan Duddington *
|
||||
* email: jonsd@users.sourceforge.net *
|
||||
* *
|
||||
* This program is free software; you can redistribute it and/or modify *
|
||||
@@ -439,7 +439,7 @@ void LookupAccentedLetter(Translator *tr, unsigned int letter, char *ph_buf)
|
||||
if((letter >= 0x250) && (letter <= 0x2a8))
|
||||
{
|
||||
accent_data = letter_accents_250[letter - 0x250];
|
||||
}
|
||||
}
|
||||
|
||||
if(accent_data != 0)
|
||||
{
|
||||
@@ -555,7 +555,7 @@ void LookupLetter(Translator *tr, unsigned int letter, int next_byte, char *ph_b
|
||||
|
||||
// if the $accent flag is set for this letter, use the accents table (below)
|
||||
dict_flags[1] = 0;
|
||||
|
||||
|
||||
if(Lookup(tr, &single_letter[1], ph_buf3) == 0)
|
||||
{
|
||||
single_letter[1] = ' ';
|
||||
@@ -682,7 +682,7 @@ int TranslateLetter(Translator *tr, char *word, char *phonemes, int control)
|
||||
|
||||
if((ph_buf[0]==0) && !iswspace(letter))
|
||||
Lookup(tr, "_??", ph_buf);
|
||||
|
||||
|
||||
if(ph_buf[0] != 0)
|
||||
{
|
||||
// speak the hexadecimal number of the character code
|
||||
@@ -876,7 +876,7 @@ int TranslateRoman(Translator *tr, char *word, char *ph_out, WORD_TAB *wtab)
|
||||
|
||||
static const char *roman_numbers = "ixcmvld";
|
||||
static int roman_values[] = {1,10,100,1000,5,50,500};
|
||||
|
||||
|
||||
acc = 0;
|
||||
prev = 0;
|
||||
subtract = 0x7fff;
|
||||
@@ -926,7 +926,7 @@ int TranslateRoman(Translator *tr, char *word, char *ph_out, WORD_TAB *wtab)
|
||||
|
||||
if(isdigit(word[0]))
|
||||
return(0); // eg. 'xx2'
|
||||
|
||||
|
||||
acc += prev;
|
||||
if(acc < tr->langopts.min_roman)
|
||||
return(0);
|
||||
@@ -989,7 +989,7 @@ int TranslateRoman(Translator *tr, char *word, char *ph_out, WORD_TAB *wtab)
|
||||
static const char *M_Variant(int value)
|
||||
{//====================================
|
||||
// returns M, or perhaps MA or MB for some cases
|
||||
|
||||
|
||||
int teens = 0;
|
||||
|
||||
if(((value % 100) > 10) && ((value % 100) < 20))
|
||||
@@ -1078,7 +1078,7 @@ static int LookupThousands(Translator *tr, int value, int thousandplex, int thou
|
||||
|
||||
if(found_value == 0)
|
||||
{
|
||||
if((value % 100) >= 20)
|
||||
if((value % 100) >= 20)
|
||||
{
|
||||
Lookup(tr, "_0of", ph_of);
|
||||
}
|
||||
@@ -1203,7 +1203,7 @@ static int LookupNum2(Translator *tr, int value, const int control, char *ph_out
|
||||
if(is_ordinal)
|
||||
{
|
||||
strcpy(ph_ordinal, ph_ordinal2);
|
||||
|
||||
|
||||
if(control & 4)
|
||||
{
|
||||
sprintf(string,"_%d%cx",value,ord_type); // LANG=hu, special word for 1. 2. when there are no higher digits
|
||||
@@ -1216,7 +1216,7 @@ static int LookupNum2(Translator *tr, int value, const int control, char *ph_out
|
||||
}
|
||||
found_ordinal = found;
|
||||
}
|
||||
|
||||
|
||||
if(found == 0)
|
||||
{
|
||||
if(control & 2)
|
||||
@@ -1250,9 +1250,9 @@ static int LookupNum2(Translator *tr, int value, const int control, char *ph_out
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// no, speak as tens+units
|
||||
|
||||
|
||||
if((control & 0x10) && (value < 10))
|
||||
{
|
||||
// speak leading zero
|
||||
@@ -1266,8 +1266,8 @@ static int LookupNum2(Translator *tr, int value, const int control, char *ph_out
|
||||
}
|
||||
else
|
||||
{
|
||||
|
||||
if((is_ordinal) &&
|
||||
|
||||
if((is_ordinal) &&
|
||||
((units == 0) || (tr->langopts.numbers & NUM_SWAP_TENS) || (tr->langopts.numbers2 & NUM2_MULTIPLE_ORDINAL)))
|
||||
{
|
||||
sprintf(string,"_%dX%c", tens, ord_type);
|
||||
@@ -1287,7 +1287,7 @@ static int LookupNum2(Translator *tr, int value, const int control, char *ph_out
|
||||
sprintf(string,"_%dX", tens);
|
||||
Lookup(tr, string, ph_tens);
|
||||
}
|
||||
|
||||
|
||||
if((ph_tens[0] == 0) && (tr->langopts.numbers & NUM_VIGESIMAL))
|
||||
{
|
||||
// tens not found, (for example) 73 is 60+13
|
||||
@@ -1295,12 +1295,12 @@ static int LookupNum2(Translator *tr, int value, const int control, char *ph_out
|
||||
sprintf(string,"_%dX", tens & 0xfe);
|
||||
Lookup(tr, string, ph_tens);
|
||||
}
|
||||
|
||||
|
||||
ph_digits[0] = 0;
|
||||
if(units > 0)
|
||||
{
|
||||
{
|
||||
found = 0;
|
||||
|
||||
|
||||
if((control & 2) && (digit_lookup[0] != 0))
|
||||
{
|
||||
// we have an entry for this digit (possibly together with the next word)
|
||||
@@ -1350,7 +1350,7 @@ static int LookupNum2(Translator *tr, int value, const int control, char *ph_out
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
if((is_ordinal) && (found_ordinal == 0) && (ph_ordinal[0] == 0))
|
||||
{
|
||||
if((value >= 20) && (((value % 10) == 0) || (tr->langopts.numbers & NUM_SWAP_TENS)))
|
||||
@@ -1358,7 +1358,7 @@ static int LookupNum2(Translator *tr, int value, const int control, char *ph_out
|
||||
if(ph_ordinal[0] == 0)
|
||||
Lookup(tr, "_ord", ph_ordinal);
|
||||
}
|
||||
|
||||
|
||||
if((tr->langopts.numbers & (NUM_SWAP_TENS | NUM_AND_UNITS)) && (ph_tens[0] != 0) && (ph_digits[0] != 0))
|
||||
{
|
||||
Lookup(tr, "_0and", ph_and);
|
||||
@@ -1381,7 +1381,7 @@ static int LookupNum2(Translator *tr, int value, const int control, char *ph_out
|
||||
{
|
||||
if((next_phtype = phoneme_tab[(unsigned int)(ph_digits[0])]->type) == phSTRESS)
|
||||
next_phtype = phoneme_tab[(unsigned int)(ph_digits[1])]->type;
|
||||
|
||||
|
||||
if((phoneme_tab[(unsigned int)(ph_tens[ix])]->type == phVOWEL) && (next_phtype == phVOWEL))
|
||||
ph_tens[ix] = 0;
|
||||
}
|
||||
@@ -1563,13 +1563,13 @@ static int LookupNum3(Translator *tr, int value, char *ph_out, int suppress_null
|
||||
sprintf(string,"_%dC0",hundreds);
|
||||
found = Lookup(tr, string, ph_digits);
|
||||
}
|
||||
|
||||
|
||||
if(!found)
|
||||
{
|
||||
sprintf(string,"_%dC",hundreds);
|
||||
found = Lookup(tr, string, ph_digits); // is there a specific pronunciation for n-hundred ?
|
||||
}
|
||||
|
||||
|
||||
if(found)
|
||||
{
|
||||
ph_100[0] = 0;
|
||||
@@ -1632,7 +1632,7 @@ static int LookupNum3(Translator *tr, int value, char *ph_out, int suppress_null
|
||||
x = 8; // use variant (feminine) for before thousands and millions
|
||||
}
|
||||
|
||||
if(LookupNum2(tr, tensunits, x | control & 0x100, buf2) != 0)
|
||||
if(LookupNum2(tr, tensunits, x | (control & 0x100), buf2) != 0)
|
||||
{
|
||||
if(tr->langopts.numbers & NUM_SINGLE_AND)
|
||||
ph_hundred_and[0] = 0; // don't put 'and' after 'hundred' if there's 'and' between tens and units
|
||||
@@ -1791,7 +1791,7 @@ static int TranslateNumber_1(Translator *tr, char *word, char *ph_out, unsigned
|
||||
// this is an ordinal suffix
|
||||
ordinal = 2;
|
||||
flags[0] |= FLAG_SKIPWORDS;
|
||||
skipwords = 1;
|
||||
skipwords = 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -2052,7 +2052,7 @@ static int TranslateNumber_1(Translator *tr, char *word, char *ph_out, unsigned
|
||||
break;
|
||||
n_digits++;
|
||||
strcat(ph_out, buf1);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
+7
-14
@@ -1,5 +1,5 @@
|
||||
/***************************************************************************
|
||||
* Copyright (C) 2005 to 2007 by Jonathan Duddington *
|
||||
* Copyright (C) 2005 to 2013 by Jonathan Duddington *
|
||||
* email: jonsd@users.sourceforge.net *
|
||||
* *
|
||||
* This program is free software; you can redistribute it and/or modify *
|
||||
@@ -79,7 +79,7 @@ Options::~Options()
|
||||
|
||||
for(ix=0; ix < 1; ix++)
|
||||
delete m_lab[ix];
|
||||
|
||||
|
||||
delete m_samplerate;
|
||||
delete m_save;
|
||||
delete m_close;
|
||||
@@ -89,13 +89,13 @@ void Options::OnCommand(wxCommandEvent& event)
|
||||
{//===========================================
|
||||
int id;
|
||||
int value;
|
||||
|
||||
|
||||
switch(id = event.GetId())
|
||||
{
|
||||
case wxID_SAVE:
|
||||
value = GetNumeric(m_samplerate);
|
||||
if(value > 0) WavegenInit(value,0);
|
||||
|
||||
|
||||
Destroy();
|
||||
break;
|
||||
|
||||
@@ -120,11 +120,10 @@ void ConfigSetPaths()
|
||||
|
||||
void ConfigInit()
|
||||
{//==============
|
||||
long value;
|
||||
wxString string;
|
||||
wxString basedir;
|
||||
const char *path_base;
|
||||
|
||||
|
||||
#ifdef PLATFORM_WINDOWS
|
||||
int found = 0;
|
||||
char buf[200];
|
||||
@@ -134,7 +133,7 @@ void ConfigInit()
|
||||
{
|
||||
sprintf(path_home,"%s\\espeak-data",path_base);
|
||||
if(GetFileLength(path_home) == -2)
|
||||
found = 1; // an espeak-data directory exists
|
||||
found = 1; // an espeak-data directory exists
|
||||
}
|
||||
|
||||
if(found == 0)
|
||||
@@ -142,7 +141,7 @@ void ConfigInit()
|
||||
if(pRegKey->Exists() )
|
||||
{
|
||||
wxString RegVal;
|
||||
pRegKey->QueryValue(_T("Path"),RegVal);
|
||||
pRegKey->QueryValue(_T("Path"),RegVal);
|
||||
strncpy0(buf,RegVal.mb_str(wxConvLocal),sizeof(buf));
|
||||
path_base = buf;
|
||||
}
|
||||
@@ -161,12 +160,6 @@ void ConfigInit()
|
||||
wxFileConfig *pConfig = new wxFileConfig(_T("espeakedit"));
|
||||
wxFileConfig::Set(pConfig);
|
||||
|
||||
pConfig->Read(_T("/samplerate"),&value,22050);
|
||||
#ifdef PLATFORM_WINDOWS
|
||||
value = 22050;
|
||||
#endif
|
||||
WavegenInit(value,0);
|
||||
|
||||
basedir = wxString(path_base,wxConvLocal); // this is only used to set defaults for other paths if they are not in the config file
|
||||
pConfig->Read(_T("/spectload"),&path_spectload,basedir+_T("/phsource"));
|
||||
pConfig->Read(_T("/spectload2"),&path_spectload2,basedir+_T("/phsource"));
|
||||
|
||||
+88
-3
@@ -50,6 +50,86 @@ static wxPen PEN_PHSELECTED(wxColour(255,0,0),2,wxSOLID);
|
||||
static wxPen PEN_PHSTRESSED(wxColour(80,80,196),3,wxSOLID);
|
||||
static wxPen PEN_PHSTRESSED2(wxColour(160,160,255),2,wxSOLID);
|
||||
|
||||
|
||||
|
||||
|
||||
typedef struct {
|
||||
unsigned int value;
|
||||
char *name;
|
||||
} NAMETAB;
|
||||
|
||||
NAMETAB *manifest = NULL;
|
||||
int n_manifest;
|
||||
|
||||
const char *LookupManifest(unsigned int addr)
|
||||
{//=============================================
|
||||
int ix;
|
||||
|
||||
if(manifest != NULL)
|
||||
{
|
||||
for(ix=0; ix < n_manifest; ix++)
|
||||
{
|
||||
if(manifest[ix].value == addr)
|
||||
return(manifest[ix].name);
|
||||
if(manifest[ix].value > addr)
|
||||
break;
|
||||
}
|
||||
}
|
||||
return("");
|
||||
}
|
||||
|
||||
|
||||
void ReadPhondataManifest()
|
||||
{//=========================
|
||||
// Read the phondata-manifest file
|
||||
FILE *f;
|
||||
int n_lines=0;
|
||||
int ix;
|
||||
char *p;
|
||||
unsigned int value;
|
||||
char buf[sizeof(path_home)+40];
|
||||
char name[120];
|
||||
|
||||
sprintf(buf,"%s%c%s",path_home,PATHSEP,"phondata-manifest");
|
||||
if((f = fopen(buf, "r")) == NULL)
|
||||
return;
|
||||
|
||||
while(fgets(buf, sizeof(buf), f) != NULL)
|
||||
n_lines++;
|
||||
|
||||
rewind(f);
|
||||
|
||||
if(manifest != NULL)
|
||||
{
|
||||
for(ix=0; ix < n_manifest; ix++)
|
||||
free(manifest[ix].name);
|
||||
}
|
||||
|
||||
if((manifest = (NAMETAB *)realloc(manifest, n_lines * sizeof(NAMETAB))) == NULL)
|
||||
return;
|
||||
|
||||
n_manifest = 0;
|
||||
while(fgets(buf, sizeof(buf), f) != NULL)
|
||||
{
|
||||
if(!isalpha(buf[0]))
|
||||
continue;
|
||||
|
||||
if(sscanf(&buf[2], "%x %s", &value, name) == 2)
|
||||
{
|
||||
if((p = (char *)malloc(strlen(name)+1)) != NULL)
|
||||
{
|
||||
strcpy(p, name);
|
||||
manifest[n_manifest].value = value;
|
||||
manifest[n_manifest].name = p;
|
||||
n_manifest++;
|
||||
}
|
||||
}
|
||||
}
|
||||
fclose(f);
|
||||
}
|
||||
|
||||
|
||||
|
||||
ProsodyDisplay::ProsodyDisplay(wxWindow *parent, const wxPoint& pos, const wxSize& size)
|
||||
: wxScrolledWindow(parent, -1, pos, size,
|
||||
wxSUNKEN_BORDER | wxNO_FULL_REPAINT_ON_RESIZE)
|
||||
@@ -76,6 +156,7 @@ void InitProsodyDisplay()
|
||||
int ix;
|
||||
wxString string;
|
||||
|
||||
ReadPhondataManifest();
|
||||
menu_envelopes = new wxMenu;
|
||||
// entries match those in envelope_data[] in intonation.cpp
|
||||
|
||||
@@ -142,6 +223,7 @@ void ProsodyDisplay::SelectPh(int index)
|
||||
int ix;
|
||||
const char *name = "?";
|
||||
char buf[120];
|
||||
char len_string[20];
|
||||
|
||||
if(index < 0) return;
|
||||
|
||||
@@ -162,8 +244,12 @@ void ProsodyDisplay::SelectPh(int index)
|
||||
}
|
||||
y1 = p->pitch1;
|
||||
y2 = p->pitch2;
|
||||
sprintf(buf,"Stress %s%d Amp %2d StdLength %2d LengthMod %2d Pitch %3d %3d %s PhFlags %.2x ",
|
||||
emphasized,p->stresslevel&0x7,p->amp,p->std_length*2, p->length,y1,y2,name,p->ph->phflags);
|
||||
len_string[0] = 0;
|
||||
if(p->std_length > 0)
|
||||
sprintf(len_string," Length %d", p->std_length*2);
|
||||
|
||||
sprintf(buf,"Stress %s%d Amp %2d LengthMod %2d Pitch %3d %3d %s PhFlags %.2x [%s%s]",
|
||||
emphasized,p->stresslevel&0x7,p->amp, p->length,y1,y2,name,p->ph->phflags, LookupManifest(p->phontab_addr), len_string);
|
||||
wxLogStatus(wxString(buf,wxConvLocal));
|
||||
}
|
||||
|
||||
@@ -625,4 +711,3 @@ void MyFrame::OnProsody(wxCommandEvent& WXUNUSED(event))
|
||||
adding_page = 2; // work around for wxNotebook bug (version 2.8.7)
|
||||
screenpages->AddPage(prosodycanvas, _T("Prosody"), true);
|
||||
}
|
||||
|
||||
|
||||
+1
-8
@@ -741,7 +741,6 @@ static int LoadSoundFile(const char *fname, int index)
|
||||
{
|
||||
int ix;
|
||||
int fd_temp;
|
||||
const char *resample;
|
||||
int header[3];
|
||||
char command[sizeof(fname2)+sizeof(fname2)+40];
|
||||
|
||||
@@ -755,17 +754,11 @@ static int LoadSoundFile(const char *fname, int index)
|
||||
fclose(f);
|
||||
f = NULL;
|
||||
|
||||
if(header[2] == samplerate)
|
||||
resample = "";
|
||||
else
|
||||
resample = "polyphase";
|
||||
|
||||
strcpy(fname_temp,"/tmp/espeakXXXXXX");
|
||||
if((fd_temp = mkstemp(fname_temp)) >= 0)
|
||||
{
|
||||
close(fd_temp);
|
||||
// sprintf(fname_temp,"%s.wav",tmpnam(NULL));
|
||||
sprintf(command,"sox \"%s\" -r %d -w -s -c1 %s %s\n", fname, samplerate, fname_temp, resample);
|
||||
sprintf(command,"sox \"%s\" -r %d -c1 -t wav %s\n", fname, samplerate, fname_temp);
|
||||
if(system(command) == 0)
|
||||
{
|
||||
fname = fname_temp;
|
||||
|
||||
+11
-8
@@ -104,7 +104,7 @@ static unsigned char pause_factor_350[] = {
|
||||
15,15,15,15,15}; // 370
|
||||
|
||||
// wav_factor adjustments for speeds 350 to 450
|
||||
// Use this to calibrate speed for wpm 350-450
|
||||
// Use this to calibrate speed for wpm 350-450
|
||||
static unsigned char wav_factor_350[] = {
|
||||
120, 121, 120, 119, 119, // 350
|
||||
118, 118, 117, 116, 116, // 355
|
||||
@@ -275,6 +275,9 @@ void SetSpeed(int control)
|
||||
speed.min_sample_len = 420 - (wpm - 440);
|
||||
}
|
||||
|
||||
// adjust for different sample rates
|
||||
speed.min_sample_len = (speed.min_sample_len * samplerate_native) / 22050;
|
||||
|
||||
speed.pause_factor = (256 * s1)/115; // full speed adjustment, used for pause length
|
||||
speed.clause_pause_factor = 0;
|
||||
|
||||
@@ -463,7 +466,7 @@ void SetAmplitude(int amp)
|
||||
|
||||
if((amp >= 0) && (amp <= 20))
|
||||
{
|
||||
option_amplitude = (amplitude_factor[amp] * 480)/256;
|
||||
option_amplitude = (amplitude_factor[amp] * 480)/256;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
@@ -606,7 +609,7 @@ void CalcLengths(Translator *tr)
|
||||
case phPAUSE:
|
||||
last_pitch = 0;
|
||||
break;
|
||||
|
||||
|
||||
case phSTOP:
|
||||
last_pitch = 0;
|
||||
if(prev->type == phFRICATIVE)
|
||||
@@ -710,7 +713,7 @@ void CalcLengths(Translator *tr)
|
||||
p->amp = tr->stress_amps[0]; // unless changed later
|
||||
p->length = 256; // TEMPORARY
|
||||
min_drop = 0;
|
||||
|
||||
|
||||
if(p->newword)
|
||||
{
|
||||
if(prev->type==phLIQUID)
|
||||
@@ -733,12 +736,12 @@ void CalcLengths(Translator *tr)
|
||||
if((prev->type==phVOWEL) || (prev->type == phLIQUID))
|
||||
{
|
||||
p->length = prev->length;
|
||||
|
||||
|
||||
if(p->type == phLIQUID)
|
||||
{
|
||||
p->length = speed1;
|
||||
}
|
||||
|
||||
|
||||
if(next->type == phVSTOP)
|
||||
{
|
||||
p->length = (p->length * 160)/100;
|
||||
@@ -963,11 +966,11 @@ if(p->type != phVOWEL)
|
||||
next->synthflags &= ~SFLAG_SEQCONTINUE;
|
||||
if(next->type == phNASAL && next2->type != phVOWEL)
|
||||
next->synthflags |= SFLAG_SEQCONTINUE;
|
||||
|
||||
|
||||
if(next->type == phLIQUID)
|
||||
{
|
||||
next->synthflags |= SFLAG_SEQCONTINUE;
|
||||
|
||||
|
||||
if(next2->type == phVOWEL)
|
||||
{
|
||||
next->synthflags &= ~SFLAG_SEQCONTINUE;
|
||||
|
||||
+4
-3
@@ -1,5 +1,5 @@
|
||||
/***************************************************************************
|
||||
* Copyright (C) 2005 to 2007 by Jonathan Duddington *
|
||||
* Copyright (C) 2005 to 2013 by Jonathan Duddington *
|
||||
* email: jonsd@users.sourceforge.net *
|
||||
* *
|
||||
* This program is free software; you can redistribute it and/or modify *
|
||||
@@ -397,6 +397,7 @@ static int initialise(void)
|
||||
{//========================
|
||||
int param;
|
||||
int result;
|
||||
int srate = 22050; // default sample rate
|
||||
|
||||
// It seems that the wctype functions don't work until the locale has been set
|
||||
// to something other than the default "C". Then, not only Latin1 but also the
|
||||
@@ -412,8 +413,7 @@ static int initialise(void)
|
||||
#endif
|
||||
|
||||
|
||||
WavegenInit(22050,0); // 22050
|
||||
if((result = LoadPhData()) != 1)
|
||||
if((result = LoadPhData(&srate)) != 1)
|
||||
{
|
||||
if(result == -1)
|
||||
{
|
||||
@@ -423,6 +423,7 @@ static int initialise(void)
|
||||
else
|
||||
fprintf(stderr,"Wrong version of espeak-data 0x%x (expects 0x%x) at %s\n",result,version_phdata,path_home);
|
||||
}
|
||||
WavegenInit(srate,0);
|
||||
LoadConfig();
|
||||
SetVoiceStack(NULL, "");
|
||||
SynthesizeInit();
|
||||
|
||||
+4
-2
@@ -377,11 +377,12 @@ static int initialise(int control)
|
||||
{//===============================
|
||||
int param;
|
||||
int result;
|
||||
int srate = 22050; // default sample rate 22050 Hz
|
||||
|
||||
err = EE_OK;
|
||||
LoadConfig();
|
||||
WavegenInit(22050,0); // 22050
|
||||
if((result = LoadPhData()) != 1)
|
||||
|
||||
if((result = LoadPhData(&srate)) != 1) // reads sample rate from espeak-data/phontab
|
||||
{
|
||||
if(result == -1)
|
||||
{
|
||||
@@ -394,6 +395,7 @@ static int initialise(int control)
|
||||
else
|
||||
fprintf(stderr,"Wrong version of espeak-data 0x%x (expects 0x%x) at %s\n",result,version_phdata,path_home);
|
||||
}
|
||||
WavegenInit(srate,0);
|
||||
|
||||
memset(¤t_voice_selected,0,sizeof(current_voice_selected));
|
||||
SetVoiceStack(NULL, "");
|
||||
|
||||
+20
-7
@@ -35,8 +35,8 @@
|
||||
#include "translate.h"
|
||||
#include "wave.h"
|
||||
|
||||
const char *version_string = "1.46.35 14.Feb.13";
|
||||
const int version_phdata = 0x014631;
|
||||
const char *version_string = "1.46.37 20.Feb.13";
|
||||
const int version_phdata = 0x014636;
|
||||
|
||||
int option_device_number = -1;
|
||||
FILE *f_logespeak = NULL;
|
||||
@@ -108,13 +108,14 @@ static char *ReadPhFile(void *ptr, const char *fname, int *size)
|
||||
} // end of ReadPhFile
|
||||
|
||||
|
||||
int LoadPhData()
|
||||
{//=============
|
||||
int LoadPhData(int *srate)
|
||||
{//========================
|
||||
int ix;
|
||||
int n_phonemes;
|
||||
int version;
|
||||
int result = 1;
|
||||
int length;
|
||||
int rate;
|
||||
unsigned char *p;
|
||||
int *pw;
|
||||
|
||||
@@ -126,14 +127,16 @@ int LoadPhData()
|
||||
return(-1);
|
||||
if((tunes = (TUNE *)ReadPhFile((void *)(tunes),"intonations",&length)) == NULL)
|
||||
return(-1);
|
||||
wavefile_data = (unsigned char *)phondata_ptr;
|
||||
wavefile_data = (unsigned char *)phondata_ptr;
|
||||
n_tunes = length / sizeof(TUNE);
|
||||
|
||||
// read the version number from the first 4 bytes of phondata
|
||||
version = 0;
|
||||
// read the version number and sample rate from the first 8 bytes of phondata
|
||||
version = 0; // bytes 0-3, version number
|
||||
rate = 0; // bytes 4-7, sample rate
|
||||
for(ix=0; ix<4; ix++)
|
||||
{
|
||||
version += (wavefile_data[ix] << (ix*8));
|
||||
rate += (wavefile_data[ix+4] << (ix*8));
|
||||
}
|
||||
|
||||
if(version != version_phdata)
|
||||
@@ -163,6 +166,8 @@ int LoadPhData()
|
||||
if(phoneme_tab_number >= n_phoneme_tables)
|
||||
phoneme_tab_number = 0;
|
||||
|
||||
if(srate != NULL)
|
||||
*srate = rate;
|
||||
return(result);
|
||||
} // end of LoadPhData
|
||||
|
||||
@@ -970,7 +975,9 @@ void InterpretPhoneme(Translator *tr, int control, PHONEME_LIST *plist, PHONEME_
|
||||
phdata->pd_param[i_LENGTH_MOD] = ph->length_mod;
|
||||
|
||||
if(ph->program == 0)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
end_flag = 0;
|
||||
|
||||
@@ -1215,7 +1222,13 @@ void InterpretPhoneme(Translator *tr, int control, PHONEME_LIST *plist, PHONEME_
|
||||
memcpy(&worddata->prev_vowel, &plist[0], sizeof(PHONEME_LIST));
|
||||
}
|
||||
|
||||
#ifdef _ESPEAKEDIT
|
||||
plist->std_length = phdata->pd_param[i_SET_LENGTH];
|
||||
if(phdata->sound_addr[0] != 0)
|
||||
plist->phontab_addr = phdata->sound_addr[0]; // FMT address
|
||||
else
|
||||
plist->phontab_addr = phdata->sound_addr[1]; // WAV address
|
||||
#endif
|
||||
} // end of InterpretPhoneme
|
||||
|
||||
|
||||
|
||||
+6
-3
@@ -1,5 +1,5 @@
|
||||
/***************************************************************************
|
||||
* Copyright (C) 2005 to 2010 by Jonathan Duddington *
|
||||
* Copyright (C) 2005 to 2013 by Jonathan Duddington *
|
||||
* email: jonsd@users.sourceforge.net *
|
||||
* *
|
||||
* This program is free software; you can redistribute it and/or modify *
|
||||
@@ -40,7 +40,7 @@ static void SmoothSpect(void);
|
||||
|
||||
// list of phonemes in a clause
|
||||
int n_phoneme_list=0;
|
||||
PHONEME_LIST phoneme_list[N_PHONEME_LIST];
|
||||
PHONEME_LIST phoneme_list[N_PHONEME_LIST+1];
|
||||
|
||||
int mbrola_delay;
|
||||
char mbrola_name[20];
|
||||
@@ -1377,7 +1377,7 @@ int Generate(PHONEME_LIST *phoneme_list, int *n_ph, int resume)
|
||||
DoPause(0,0); // isolate from the previous clause
|
||||
}
|
||||
|
||||
while(ix < (*n_ph))
|
||||
while((ix < (*n_ph)) && (ix < N_PHONEME_LIST-2))
|
||||
{
|
||||
p = &phoneme_list[ix];
|
||||
|
||||
@@ -1448,6 +1448,9 @@ int Generate(PHONEME_LIST *phoneme_list, int *n_ph, int resume)
|
||||
{
|
||||
case phPAUSE:
|
||||
DoPause(p->length,0);
|
||||
#ifdef _ESPEAKEDIT
|
||||
p->std_length = p->ph->std_length;
|
||||
#endif
|
||||
break;
|
||||
|
||||
case phSTOP:
|
||||
|
||||
+6
-3
@@ -1,5 +1,5 @@
|
||||
/***************************************************************************
|
||||
* Copyright (C) 2005 to 2007 by Jonathan Duddington *
|
||||
* Copyright (C) 2005 to 2013 by Jonathan Duddington *
|
||||
* email: jonsd@users.sourceforge.net *
|
||||
* *
|
||||
* This program is free software; you can redistribute it and/or modify *
|
||||
@@ -220,7 +220,10 @@ typedef struct {
|
||||
unsigned char newword; // bit 0=start of word, bit 1=end of clause, bit 2=start of sentence
|
||||
unsigned char pitch1;
|
||||
unsigned char pitch2;
|
||||
#ifdef _ESPEAKEDIT
|
||||
unsigned char std_length;
|
||||
unsigned int phontab_addr;
|
||||
#endif
|
||||
} PHONEME_LIST;
|
||||
|
||||
|
||||
@@ -435,7 +438,7 @@ extern PHONEME_TAB *phoneme_tab[N_PHONEME_TAB];
|
||||
|
||||
// list of phonemes in a clause
|
||||
extern int n_phoneme_list;
|
||||
extern PHONEME_LIST phoneme_list[N_PHONEME_LIST];
|
||||
extern PHONEME_LIST phoneme_list[N_PHONEME_LIST+1];
|
||||
extern unsigned int embedded_list[];
|
||||
|
||||
extern unsigned char env_fall[128];
|
||||
@@ -510,7 +513,7 @@ unsigned int LookupSound(PHONEME_TAB *ph1, PHONEME_TAB *ph2, int which, int *mat
|
||||
frameref_t *LookupSpect(PHONEME_TAB *this_ph, int which, FMT_PARAMS *fmt_params, int *n_frames, PHONEME_LIST *plist);
|
||||
|
||||
unsigned char *LookupEnvelope(int ix);
|
||||
int LoadPhData();
|
||||
int LoadPhData(int *srate);
|
||||
|
||||
void SynthesizeInit(void);
|
||||
int Generate(PHONEME_LIST *phoneme_list, int *n_ph, int resume);
|
||||
|
||||
@@ -3382,6 +3382,8 @@ if((c == '/') && (tr->langopts.testing & 2) && IsDigit09(next_in) && IsAlpha(pre
|
||||
}
|
||||
|
||||
MakePhonemeList(tr, clause_pause, new_sentence);
|
||||
phoneme_list[N_PHONEME_LIST].ph = NULL; // recognize end of phoneme_list array, in Generate()
|
||||
phoneme_list[N_PHONEME_LIST].sourceix = 1;
|
||||
|
||||
if(embedded_count) // ???? is this needed
|
||||
{
|
||||
|
||||
+4
-2
@@ -1,5 +1,5 @@
|
||||
/***************************************************************************
|
||||
* Copyright (C) 2005 to 2007 by Jonathan Duddington *
|
||||
* Copyright (C) 2005 to 2013 by Jonathan Duddington *
|
||||
* email: jonsd@users.sourceforge.net *
|
||||
* *
|
||||
* This program is free software; you can redistribute it and/or modify *
|
||||
@@ -503,13 +503,15 @@ void TranslDlg::OnCommand(wxCommandEvent& event)
|
||||
|
||||
if((n_ph_list + n_phoneme_list) >= N_PH_LIST)
|
||||
{
|
||||
n_phoneme_list = N_PH_LIST - n_ph_list - n_phoneme_list;
|
||||
n_phoneme_list = N_PH_LIST - n_ph_list;
|
||||
}
|
||||
|
||||
memcpy(&ph_list[n_ph_list],phoneme_list,sizeof(PHONEME_LIST)*n_phoneme_list);
|
||||
n_ph_list += n_phoneme_list;
|
||||
}
|
||||
|
||||
ph_list[N_PH_LIST].ph = NULL; // to recognize overrun off list (in Generate() )
|
||||
|
||||
t_phonetic->Clear();
|
||||
if(option_phonemes == 2)
|
||||
{
|
||||
|
||||
+18
-18
@@ -410,7 +410,7 @@ void VoiceReset(int tone_only)
|
||||
voice->voicing = 64;
|
||||
voice->consonant_amp = 100;
|
||||
voice->consonant_ampv = 100;
|
||||
voice->samplerate = 22050;
|
||||
voice->samplerate = samplerate_native;
|
||||
memset(voice->klattv,0,sizeof(voice->klattv));
|
||||
|
||||
speed.fast_settings[0] = 450;
|
||||
@@ -674,24 +674,24 @@ voice_t *LoadVoice(const char *vname, int control)
|
||||
|
||||
if(tone_only)
|
||||
break;
|
||||
|
||||
|
||||
priority = DEFAULT_LANGUAGE_PRIORITY;
|
||||
language_name[0] = 0;
|
||||
|
||||
|
||||
sscanf(p,"%s %d",language_name,&priority);
|
||||
if(strcmp(language_name,"variant") == 0)
|
||||
break;
|
||||
|
||||
|
||||
len = strlen(language_name) + 2;
|
||||
// check for space in languages[]
|
||||
if(len < (sizeof(voice_languages)-langix-1))
|
||||
{
|
||||
voice_languages[langix] = priority;
|
||||
|
||||
|
||||
strcpy(&voice_languages[langix+1],language_name);
|
||||
langix += len;
|
||||
}
|
||||
|
||||
|
||||
// only act on the first language line
|
||||
if(language_set == 0)
|
||||
{
|
||||
@@ -701,10 +701,10 @@ voice_t *LoadVoice(const char *vname, int control)
|
||||
strcpy(new_dictionary,language_type);
|
||||
strcpy(phonemes_name,language_type);
|
||||
SelectPhonemeTableName(phonemes_name);
|
||||
|
||||
|
||||
if(new_translator != NULL)
|
||||
DeleteTranslator(new_translator);
|
||||
|
||||
|
||||
new_translator = SelectTranslator(translator_name);
|
||||
langopts = &new_translator->langopts;
|
||||
}
|
||||
@@ -1059,10 +1059,10 @@ static char *ExtractVoiceVariantName(char *vname, int variant_num, int add_dir)
|
||||
{
|
||||
// voice variant name, not number
|
||||
sprintf(variant_name, "%s%s", variant_prefix, p);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
if(variant_num > 0)
|
||||
{
|
||||
if(variant_num < 10)
|
||||
@@ -1421,13 +1421,13 @@ char const *SelectVoice(espeak_VOICE *voice_select, int *found)
|
||||
{
|
||||
// no language is specified. Get language from the named voice
|
||||
static char buf[60];
|
||||
|
||||
|
||||
if(voice_select2.name == NULL)
|
||||
{
|
||||
if((voice_select2.name = voice_select2.identifier) == NULL)
|
||||
voice_select2.name = "default";
|
||||
}
|
||||
|
||||
|
||||
strncpy0(buf,voice_select2.name,sizeof(buf));
|
||||
variant_name = ExtractVoiceVariantName(buf,0,0);
|
||||
|
||||
@@ -1492,7 +1492,7 @@ char const *SelectVoice(espeak_VOICE *voice_select, int *found)
|
||||
}
|
||||
if(skip==0)
|
||||
{
|
||||
voices2[ix2++] = vp;
|
||||
voices2[ix2++] = vp;
|
||||
}
|
||||
|
||||
for(j=0; (j < vp->xx1) && (n_variants < N_VOICE_VARIANTS);)
|
||||
@@ -1579,10 +1579,10 @@ static void GetVoices(const char *path)
|
||||
}
|
||||
else
|
||||
{
|
||||
// a regular line, add it to the voices list
|
||||
// a regular line, add it to the voices list
|
||||
if((f_voice = fopen(fname,"r")) == NULL)
|
||||
continue;
|
||||
|
||||
|
||||
// pass voice file name within the voices directory
|
||||
voice_data = ReadVoiceFile(f_voice, fname+len_path_voices, &buf[20]);
|
||||
fclose(f_voice);
|
||||
@@ -1617,10 +1617,10 @@ static void GetVoices(const char *path)
|
||||
else
|
||||
if(ftype > 0)
|
||||
{
|
||||
// a regular line, add it to the voices list
|
||||
// a regular line, add it to the voices list
|
||||
if((f_voice = fopen(fname,"r")) == NULL)
|
||||
continue;
|
||||
|
||||
|
||||
// pass voice file name within the voices directory
|
||||
voice_data = ReadVoiceFile(f_voice, fname+len_path_voices, FindFileData.cFileName);
|
||||
fclose(f_voice);
|
||||
@@ -1660,7 +1660,7 @@ static void GetVoices(const char *path)
|
||||
else
|
||||
if(ftype > 0)
|
||||
{
|
||||
// a regular line, add it to the voices list
|
||||
// a regular line, add it to the voices list
|
||||
if((f_voice = fopen(fname,"r")) == NULL)
|
||||
{
|
||||
LOGE("Unble to load voice file '%s': %s", fname, strerror(errno));
|
||||
|
||||
Reference in New Issue
Block a user