mirror of
https://github.com/rhasspy/espeak-ng.git
synced 2026-11-03 14:17:12 +00:00
[1.31.05]
<say-as tts:char>, if a character name is not defined, say its English name. phoneme tables, added beforenotvowel2 attribure for lang=tr lang=tr: initial draft git-svn-id: https://espeak.svn.sourceforge.net/svnroot/espeak/trunk@135 d46cf337-b52f-0410-862d-fd96e6ae7743
This commit is contained in:
@@ -42,6 +42,7 @@ _— g@d'ank@nSt@-*,IC
|
||||
|
||||
_#9 t,abu:l'Ato:*
|
||||
_#32 l'e:*ts'aIC@n
|
||||
_?? zymb'o:l
|
||||
|
||||
// Not Roman numbers
|
||||
v faU
|
||||
|
||||
+21
-10
@@ -43,9 +43,9 @@ x z
|
||||
Dictionary de_dict
|
||||
|
||||
3 @ @- a A A: aI aU
|
||||
E E2 E: e: EI I i2 I:
|
||||
i: O o: OY U u: W y
|
||||
y: Y:
|
||||
E E2 E: e: EI I i2 i:
|
||||
O o: OY U u: W y y:
|
||||
Y:
|
||||
|
||||
* : ; b C C2 d D
|
||||
dZ f g h j k l m
|
||||
@@ -117,8 +117,9 @@ w^i W~ y Y
|
||||
|
||||
* : ; b c d dZ f
|
||||
g h j k l L m n
|
||||
N n^ p r R s S t
|
||||
t2 tS v w z Z z2 z3
|
||||
N n2 n^ p r R s S
|
||||
t t2 tS v w z Z z2
|
||||
z3
|
||||
|
||||
|
||||
Dictionary hi_dict
|
||||
@@ -281,7 +282,7 @@ u U uI u~ y
|
||||
g h j k l l^ m n
|
||||
N n^ p Q r R r- s
|
||||
S s# s; t T tS ts v
|
||||
w w2 x z Z
|
||||
w x z Z
|
||||
|
||||
|
||||
Dictionary ro_dict
|
||||
@@ -340,10 +341,10 @@ Dictionary zh_dict
|
||||
i i. i[ iou o o- ou u
|
||||
uai y
|
||||
|
||||
: f j k kh l m n
|
||||
N p ph r R s s. S;
|
||||
t th ts ts. ts. tS; tS; tsh
|
||||
v w x z z.
|
||||
(u) : f h j k kh l
|
||||
m n N p ph r s s.
|
||||
S; t th ts ts. ts. tS; tS;
|
||||
tsh v w x z z.
|
||||
|
||||
|
||||
Dictionary jbo_dict
|
||||
@@ -390,3 +391,13 @@ x z
|
||||
|
||||
Dictionary ja_dict
|
||||
|
||||
|
||||
|
||||
Dictionary tr_dict
|
||||
|
||||
a e E i I o O u
|
||||
u# W y Y
|
||||
|
||||
: ; b d dZ f g h
|
||||
j k l m n p Q r
|
||||
R s S t tS v z Z
|
||||
|
||||
+21
-2
@@ -92,6 +92,25 @@ _| vi:b'A@
|
||||
_} A@breIs
|
||||
_~ tIld@
|
||||
|
||||
£ paUnd
|
||||
¥ jEn
|
||||
§ sEkS@n
|
||||
_¶ par@graf // in en_rules
|
||||
¤ kVr@nsI2saIn
|
||||
© k0pI2raIt
|
||||
° dI2gri:z
|
||||
− maIn@s
|
||||
± plVs@maIn@s
|
||||
µ maIkroU
|
||||
¼ a2kwO@t3
|
||||
½ a2hA:f
|
||||
¾ Tri:kwO@t3
|
||||
× taImz
|
||||
÷ dI2vaIdbaI
|
||||
€ jU@roUz
|
||||
♯ SA@p
|
||||
♭ flat
|
||||
ə SwA:
|
||||
|
||||
// numeric
|
||||
|
||||
@@ -2673,8 +2692,8 @@ than %Dan $only
|
||||
then DEn $verbf
|
||||
|
||||
// these should be stressed at the start of a sentence
|
||||
which ,wItS $pause $strend2 $only $verbsf
|
||||
who ,hu: $verbsf $pause $strend2 $onlys
|
||||
which ,wItS $pause $strend2 $only $verbf
|
||||
who ,hu: $verbf $pause $strend2 $onlys
|
||||
whose ,hu:z $pause $only
|
||||
what ,w0t $strend2 $onlys
|
||||
how ,haU $strend2 $onlys
|
||||
|
||||
+1
-19
@@ -5160,7 +5160,6 @@
|
||||
ë E
|
||||
ï i:
|
||||
ö 3:
|
||||
?5 ö VR
|
||||
ü u:
|
||||
ç s
|
||||
ß s
|
||||
@@ -5178,7 +5177,6 @@
|
||||
?3 \\ bakslaS
|
||||
?3 / slaS
|
||||
'
|
||||
£ paUnd
|
||||
! _:Ekskl@meIS@n_:
|
||||
!) !
|
||||
? (? kwEstS@nmA@ks
|
||||
@@ -5227,22 +5225,6 @@
|
||||
%) % (%
|
||||
%%) % (_ _::
|
||||
|
||||
// extra symbols
|
||||
¥ jEn
|
||||
§ sEkS@n
|
||||
// extra symbols (mostly in en_list)
|
||||
¶ par@graf
|
||||
¶¶ par@grafs
|
||||
¤ kVr@nsI2saIn
|
||||
© k0pI2raIt
|
||||
° dI2gri:z
|
||||
− maIn@s
|
||||
± plVs@maIn@s
|
||||
µ maIkroU
|
||||
¼ a2kwO@t3
|
||||
½ a2hA:f
|
||||
¾ Tri:kwO@t3
|
||||
× taImz
|
||||
÷ dI2vaIdbaI
|
||||
€ jU@roUz
|
||||
♯ SA@p
|
||||
♭ flat
|
||||
|
||||
+57
-3
@@ -2,8 +2,54 @@
|
||||
// This file in UTF8 encoded
|
||||
|
||||
// letters
|
||||
ch tSe
|
||||
ll Ejje
|
||||
|
||||
_cap m'aJ^us
|
||||
_?? s'imbolo
|
||||
_#32 Esp'aTjo
|
||||
|
||||
|
||||
// names of symbols
|
||||
_. punto
|
||||
_, koma
|
||||
_; p,untoik'oma
|
||||
_: d,osp'untos
|
||||
_! TE*R'aRaDmi**aTj'on
|
||||
_? TE*R'aRintE*R,oQaTj'on
|
||||
_¡ aB@-*'iRaDmi**aTj'on
|
||||
_¿ aB@-*'iRintE*R,oQaTj'on
|
||||
_= iQw'al
|
||||
_< mEn'oRke
|
||||
_> maJ^'oRke
|
||||
_' apost@-*'ofo
|
||||
_" kom'iJ^as
|
||||
_+ s'iQnodesum'aR
|
||||
_$ dolar
|
||||
_# almoaD'il^a
|
||||
_* astE*'isko
|
||||
_- gJ^on
|
||||
__ suB@-*aJ^'aDo
|
||||
_/ ba*Ra
|
||||
_\ b'a*RaimbERt'iDa
|
||||
_` aT'Entog@-*'aBe
|
||||
_( ,aB@-*epa**'EntEsis
|
||||
_) Tj,E*Rapa**'EntEsis
|
||||
_[ ,aB@-*ekoRtS'Ete
|
||||
_] Tj,E*RakoRtS'Ete
|
||||
_{ ,aB@-*eJ^'aBe
|
||||
_} Tj,E*RaJ^'aBe
|
||||
_« kom'iJ^as||iTkJ^'ERDas
|
||||
_» kom'iJ^as||dE**'EtSas
|
||||
|
||||
^ TiRkumfl'Exo
|
||||
€ eU*o
|
||||
% porTj'Ento
|
||||
& ampERs'ant
|
||||
@ a*R'oBa
|
||||
/ ba*Ra
|
||||
© kopi*R'aIt
|
||||
£ liB@-*as
|
||||
¶ p'a*Rafo
|
||||
§ sEkTj'on
|
||||
|
||||
|
||||
// numbers
|
||||
@@ -291,8 +337,16 @@ v uve
|
||||
x Ekis
|
||||
_y ,ig@-*'iEQa
|
||||
y ,ig@-*'iEQa $atend
|
||||
ch tSe
|
||||
ll Ejje
|
||||
á 'a||aTEntw'aDa
|
||||
é 'e||aTEntw'aDa
|
||||
í 'i||aTEntw'aDa
|
||||
_ó 'o||aTEntw'aDa
|
||||
ó 'o||aTEntw'aDa $atend
|
||||
ú 'u||aTEntw'aDa
|
||||
ü ,uDjE**'Esis
|
||||
|
||||
_. punto
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -201,12 +201,6 @@
|
||||
_)ñ (_ En^e
|
||||
|
||||
$ d'olar
|
||||
€ eU*o
|
||||
% porTj'Ento
|
||||
& ampErs'ant
|
||||
@ a*R'oBa
|
||||
/ b'a*Ra
|
||||
© k,opi*R'aIt
|
||||
|
||||
+ m'as
|
||||
_) ++ (_ masm'as
|
||||
|
||||
+5
-3
@@ -63,9 +63,11 @@ _y i:gR'Ek
|
||||
// character names
|
||||
|
||||
|
||||
//_cap k,ap@-t@L
|
||||
_?A lEt@
|
||||
_?? sE~b'OL
|
||||
//_cap k,ap@-t@L
|
||||
_?A lEt@
|
||||
_?? sE~b'OL
|
||||
_#9 tabylasjO~
|
||||
_#32 Espas
|
||||
|
||||
_" gijmE
|
||||
_# djEz
|
||||
|
||||
+9
-5
@@ -3,7 +3,7 @@
|
||||
|
||||
// 2006-11-18 Gilles Casse <gcasse@oralux.org>
|
||||
//
|
||||
// Updated: 2008-01-29 Michel Such <michel.such@free.fr>
|
||||
// Updated: 2008-02-04 Michel Such <michel.such@free.fr>
|
||||
//
|
||||
// * The rules are based on Cicero TTS.
|
||||
//
|
||||
@@ -136,10 +136,9 @@
|
||||
em (b A~ // décembre
|
||||
em (m A~ // emmancher
|
||||
em (p A~
|
||||
en (_ A~ // en
|
||||
en (_ A~n2 // en
|
||||
en (hA A~n // enharmonique
|
||||
en (A A~n // enivrer
|
||||
en (_A A~n // en avion
|
||||
|
||||
C) en (d_ A~ // comprend dépend
|
||||
C) en (ds_ A~
|
||||
@@ -395,6 +394,7 @@
|
||||
_) h (ac _! // hache
|
||||
_) h (ai _! // haine haillon
|
||||
_) h (al _! // halte
|
||||
_) h (amea _! // hameau
|
||||
_) h (amp _! // hampe
|
||||
_) h (an _! // hanche
|
||||
_) h (app _! // happer
|
||||
@@ -406,6 +406,7 @@ _) h (arp _! // harpe
|
||||
_) h (au _! // haut
|
||||
_) h (av _! // havre
|
||||
_) h (ern _! // hernie
|
||||
_) h (éro _! // héros, héron
|
||||
_) h (ers _! // herse
|
||||
_) h (eurt _! // heurter
|
||||
_) h (ibo _! // hibou
|
||||
@@ -655,6 +656,7 @@ mou) rr RR // mourrai
|
||||
A) s (oft s // microsoft
|
||||
y) s (A z // paysage
|
||||
CCan) s (A z // transition
|
||||
xpan) s (A s // expansion
|
||||
|
||||
|
||||
ibu) s (_ s
|
||||
@@ -758,8 +760,9 @@ C) te (_ t@- // patte
|
||||
um (b W~ // humble
|
||||
um (p W~
|
||||
un (C W~ // emprunt lundi
|
||||
un (_ W~ // brun
|
||||
un (_A W~n // un avion
|
||||
C) un (_ W~ // brun
|
||||
uc) un (_ W~n2 // aucun
|
||||
un (_ W~n2 // un avion
|
||||
|
||||
g) u (A // fatigue
|
||||
g) u (ï y // ambiguïté
|
||||
@@ -864,3 +867,4 @@ C) te (_ t@- // patte
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
+1
-1
@@ -23,7 +23,7 @@ m e:m
|
||||
n En
|
||||
p pe:
|
||||
q ku-:
|
||||
r Err
|
||||
r E:R
|
||||
s Es
|
||||
t te:
|
||||
v ve:
|
||||
|
||||
@@ -0,0 +1,71 @@
|
||||
|
||||
// This file is UTF8 encoded
|
||||
// Spelling-to-phoneme words for Turkish
|
||||
|
||||
a a
|
||||
b be
|
||||
c dZE
|
||||
ç tSE
|
||||
d dE
|
||||
e E
|
||||
f fE
|
||||
g g;E
|
||||
ğ jumuS'ak||g;'E
|
||||
h hE
|
||||
ı u#
|
||||
i i
|
||||
j ZE
|
||||
k ka
|
||||
l lE
|
||||
m mE
|
||||
n nE
|
||||
o O
|
||||
ö W
|
||||
p pE
|
||||
q kvE
|
||||
r RE
|
||||
s sE
|
||||
ş SE
|
||||
t tE
|
||||
u u
|
||||
ü y
|
||||
v vE
|
||||
w dubElv'E
|
||||
x Eks
|
||||
y jE
|
||||
z zE
|
||||
|
||||
_?? sEmb'Ol
|
||||
|
||||
_0 su#fu#r
|
||||
_1 bir
|
||||
_2 iki
|
||||
_3 YtS
|
||||
_4 dWrt
|
||||
_5 beS
|
||||
_6 altu#
|
||||
_7 jedi
|
||||
_8 sekiz
|
||||
_9 dokuz
|
||||
_10 on
|
||||
_1X on
|
||||
_2X jirmi
|
||||
_3X otuz
|
||||
_4X ku#rk
|
||||
_5X elli
|
||||
_6X altmu#S
|
||||
_7X jetmiS
|
||||
_8X seksEn
|
||||
_9X doksan
|
||||
_0C jyz
|
||||
_0M1 bIn
|
||||
_0M2 miljon
|
||||
_0M3 miljar
|
||||
_dpt _virg,Yl
|
||||
|
||||
|
||||
|
||||
// exceptions
|
||||
|
||||
ankara $1
|
||||
|
||||
@@ -0,0 +1,108 @@
|
||||
|
||||
// Turkish translation rules
|
||||
// This file is UTF-8 encoded
|
||||
|
||||
|
||||
.group a
|
||||
a a
|
||||
|
||||
.group b
|
||||
b b
|
||||
|
||||
.group c
|
||||
c dZ
|
||||
|
||||
.group ç
|
||||
ç tS
|
||||
|
||||
.group d
|
||||
d d
|
||||
|
||||
.group e
|
||||
e e
|
||||
|
||||
.group f
|
||||
f f
|
||||
|
||||
.group g
|
||||
g g
|
||||
|
||||
.group ğ
|
||||
ğ Q
|
||||
A) ğ :
|
||||
|
||||
.group h
|
||||
h h
|
||||
|
||||
.group i
|
||||
i i
|
||||
|
||||
.group ı
|
||||
ı u#
|
||||
|
||||
.group j
|
||||
j Z
|
||||
|
||||
.group k
|
||||
k k
|
||||
|
||||
.group l
|
||||
l l
|
||||
|
||||
.group m
|
||||
m m
|
||||
|
||||
@) ma (_S2 m%a
|
||||
@) me (_S2 m%e
|
||||
@) mı (_S2 m%u#
|
||||
|
||||
.group n
|
||||
n n
|
||||
|
||||
.group o
|
||||
o o
|
||||
|
||||
.group ö
|
||||
ö W
|
||||
|
||||
.group p
|
||||
p p
|
||||
|
||||
.group q
|
||||
q k
|
||||
|
||||
.group r
|
||||
r r
|
||||
|
||||
.group s
|
||||
s s
|
||||
|
||||
.group ş
|
||||
ş S
|
||||
|
||||
.group t
|
||||
t t
|
||||
|
||||
.group u
|
||||
u u
|
||||
|
||||
.group ü
|
||||
ü y
|
||||
|
||||
.group v
|
||||
v v
|
||||
|
||||
.group w
|
||||
w v
|
||||
|
||||
.group x
|
||||
x ks
|
||||
|
||||
.group y
|
||||
y j
|
||||
|
||||
.group z
|
||||
z z
|
||||
|
||||
.group
|
||||
$ dolar
|
||||
+2
-2
@@ -144,8 +144,8 @@ In rhotic accents, such as General American, the phonemes <code>[3:], [A@], [e@]
|
||||
<tr><td><code>[aU]</code><td>m<b>ou</b>th
|
||||
<tr><td><code>[oU]</code><td>g<b>oa</b>t
|
||||
|
||||
<tr><td><code>[aI@]</code>
|
||||
<tr><td><code>[aU@]</code>
|
||||
<tr><td><code>[aI@]</code><td>sc<b>ie</b>nce
|
||||
<tr><td><code>[aU@]</code><td>h<b>our</b>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
|
||||
@@ -3,3 +3,4 @@ language no
|
||||
language nb
|
||||
gender male
|
||||
|
||||
intonation 4
|
||||
|
||||
Executable
+4
@@ -0,0 +1,4 @@
|
||||
name turkish-test
|
||||
language tr
|
||||
gender male
|
||||
|
||||
+62
-47
@@ -1,51 +1,52 @@
|
||||
46 phoneme tables
|
||||
47 phoneme tables
|
||||
new total
|
||||
base 98 98
|
||||
base2 24 117
|
||||
en 54 147
|
||||
en_n 30 147
|
||||
en_us 34 147
|
||||
en_sc 39 149
|
||||
en_rp 34 147
|
||||
en_wm 30 147
|
||||
en_wi 30 147
|
||||
af 38 130
|
||||
cy 29 124
|
||||
de 33 125
|
||||
eo 13 110
|
||||
jbo 4 111
|
||||
fi 40 129
|
||||
fr 42 122
|
||||
fr_ca 11 122
|
||||
hi 50 134
|
||||
ta 15 136
|
||||
hu 23 114
|
||||
nl 28 121
|
||||
pl 15 109
|
||||
sk 29 127
|
||||
cs 6 127
|
||||
hr 20 132
|
||||
mk 3 133
|
||||
sr 14 132
|
||||
ru 38 128
|
||||
it 17 120
|
||||
la 21 116
|
||||
es 7 117
|
||||
pt 27 133
|
||||
pt_pt 20 133
|
||||
ro 36 141
|
||||
el 8 117
|
||||
grc 12 122
|
||||
sv 25 120
|
||||
no 28 124
|
||||
is 32 123
|
||||
vi 42 136
|
||||
zhy 40 131
|
||||
zh 62 146
|
||||
sw 14 107
|
||||
th 50 141
|
||||
id 14 119
|
||||
ja 7 103
|
||||
base 99 99
|
||||
base2 24 118
|
||||
en 54 148
|
||||
en_n 30 148
|
||||
en_us 34 148
|
||||
en_sc 39 150
|
||||
en_rp 34 148
|
||||
en_wm 30 148
|
||||
en_wi 30 148
|
||||
af 38 131
|
||||
cy 29 125
|
||||
de 33 126
|
||||
eo 13 111
|
||||
jbo 4 112
|
||||
fi 40 130
|
||||
fr 43 124
|
||||
fr_ca 11 124
|
||||
hi 50 135
|
||||
ta 15 137
|
||||
hu 23 115
|
||||
nl 28 122
|
||||
pl 15 110
|
||||
sk 29 128
|
||||
cs 6 128
|
||||
hr 20 133
|
||||
mk 3 134
|
||||
sr 14 133
|
||||
ru 38 129
|
||||
it 17 121
|
||||
la 21 117
|
||||
es 7 118
|
||||
pt 27 134
|
||||
pt_pt 20 134
|
||||
ro 36 142
|
||||
el 8 118
|
||||
grc 12 123
|
||||
sv 25 121
|
||||
no 28 125
|
||||
is 32 124
|
||||
vi 42 137
|
||||
zhy 40 132
|
||||
zh 62 147
|
||||
sw 14 108
|
||||
th 50 142
|
||||
id 14 120
|
||||
tr 14 123
|
||||
ja 7 104
|
||||
|
||||
Data file Used by
|
||||
b/b [b] base
|
||||
@@ -402,6 +403,7 @@ n/_n [n] base
|
||||
[n;] ro
|
||||
[n] zh
|
||||
n/n_ [n] base
|
||||
[n2] fr
|
||||
[n;] ro
|
||||
n/n@ [(@)] base
|
||||
n/n#_ [n#] is
|
||||
@@ -1260,6 +1262,7 @@ vowel/a_5 [a:] ta
|
||||
[a] la
|
||||
[a] sv
|
||||
[a] sw
|
||||
[a] tr
|
||||
vowel/aa [a] fi
|
||||
[A] fr_ca
|
||||
[A] no
|
||||
@@ -1367,6 +1370,7 @@ vowel/e_mid [E] en_rp
|
||||
[E] is
|
||||
[E] id
|
||||
[E2] id
|
||||
[E] tr
|
||||
[e] ja
|
||||
vowel/e_mid2 [E] af
|
||||
[E] de
|
||||
@@ -1378,6 +1382,7 @@ vowel/e_mid2 [E] af
|
||||
[e] ro
|
||||
[e] el
|
||||
[e] sw
|
||||
[e] tr
|
||||
vowel/@_fnt [@] en_wi
|
||||
[@2] en_wi
|
||||
[@2] hr
|
||||
@@ -1432,6 +1437,7 @@ vowel/i_6 [i:] en_us
|
||||
[i] ta
|
||||
[i] hr
|
||||
[i] id
|
||||
[i] tr
|
||||
vowel/i#_7 [i[] zh
|
||||
vowel/i_en [i:] en
|
||||
[i:] fr
|
||||
@@ -1460,6 +1466,7 @@ vowel/ii_3 [I] cy
|
||||
[I] hr
|
||||
[I] sv
|
||||
[I] no
|
||||
[I] tr
|
||||
vowel/ii_4 [I] en
|
||||
[I2] en
|
||||
[I] en_n
|
||||
@@ -1519,9 +1526,11 @@ vowel/oe [W] en
|
||||
[W] af
|
||||
[W] de
|
||||
vowel/oe_2 [W] no
|
||||
[W] tr
|
||||
vowel/oe_4 [W] sv
|
||||
vowel/o_mid [O] fr
|
||||
[o] hu
|
||||
[o] tr
|
||||
vowel/oo [O:] en_sc
|
||||
[O] en_wi
|
||||
[O:] en_wi
|
||||
@@ -1536,6 +1545,7 @@ vowel/oo [O:] en_sc
|
||||
[O] th
|
||||
[O:] th
|
||||
[O] id
|
||||
[O] tr
|
||||
[o] ja
|
||||
vowel/oo_1 [O:] en_n
|
||||
[O:] en_rp
|
||||
@@ -1593,10 +1603,12 @@ vowel/u [u:] en_wi
|
||||
[u] id
|
||||
vowel/u# [u-] en
|
||||
[u:] en_sc
|
||||
[Y] tr
|
||||
vowel/u_2 [u1] fi
|
||||
[u] sk
|
||||
[U] hr
|
||||
[u] ro
|
||||
[u] tr
|
||||
vowel/u#_2 [u-] ta
|
||||
[u-] sv
|
||||
vowel/u_3 [yU] ro
|
||||
@@ -1608,6 +1620,7 @@ vowel/u_6 [U] pt_pt
|
||||
[u] pt_pt
|
||||
vowel/u#_6 [u:] en_us
|
||||
vowel/u_7 [u] vi
|
||||
vowel/u#_7 [u#] tr
|
||||
vowel/u_bck [u] base2
|
||||
[U] cy
|
||||
[u] fi
|
||||
@@ -1634,6 +1647,7 @@ vowel/uu [U] en
|
||||
vowel/uu_2 [U] base2
|
||||
[U] de
|
||||
[U] ta
|
||||
[U] tr
|
||||
vowel/uu_3 [u] af
|
||||
vowel/uu_4 [U] fi
|
||||
[U] sv
|
||||
@@ -1685,6 +1699,7 @@ vowel/y_3 [y] af
|
||||
vowel/y#_3 [W] is
|
||||
vowel/y_4 [y:] no
|
||||
vowel/y_5 [y:] sv
|
||||
[y] tr
|
||||
vowel/yy [y"] fr_ca
|
||||
[y] no
|
||||
vowel/yy_3 [y] sv
|
||||
|
||||
@@ -276,6 +276,6 @@ phoneme t# // reduced [t] as in "city"
|
||||
vowelout f1=2 f2=1700 -300 300 f3=-100 80
|
||||
formants d/tap2+x/d%70
|
||||
after @ d/x_tap
|
||||
lengthmod 2
|
||||
lengthmod 5
|
||||
endphoneme
|
||||
|
||||
|
||||
@@ -266,6 +266,17 @@ phoneme l
|
||||
endphoneme
|
||||
|
||||
|
||||
phoneme n2
|
||||
beforenotvowel NULL
|
||||
vcd alv nasal
|
||||
vowelout f1=2 f2=1700 -300 250 f3=-100 80 rms=20 brk
|
||||
length 100
|
||||
lengthmod 4
|
||||
formants n/n_
|
||||
before _ n/n_
|
||||
endphoneme
|
||||
|
||||
|
||||
phoneme p
|
||||
vls blb stop
|
||||
vowelin f1=0 f2=1000 -50 -100 f3=-200 80 amp=11
|
||||
|
||||
@@ -177,7 +177,6 @@ endphoneme
|
||||
phoneme Yy
|
||||
vowel starttype (@) endtype (u)
|
||||
length 270
|
||||
long
|
||||
formants vwl_no/y#y
|
||||
endphoneme
|
||||
|
||||
|
||||
@@ -0,0 +1,93 @@
|
||||
|
||||
|
||||
phoneme i
|
||||
vowel starttype (i) endtype (i)
|
||||
beforenotvowel2 I
|
||||
length 150
|
||||
formants vowel/i_6
|
||||
endphoneme
|
||||
|
||||
phoneme I
|
||||
vowel starttype (i) endtype (i)
|
||||
length 150
|
||||
formants vowel/ii_3
|
||||
endphoneme
|
||||
|
||||
phoneme y
|
||||
vowel starttype (u) endtype (u)
|
||||
beforenotvowel2 Y
|
||||
length 155
|
||||
formants vowel/y_5
|
||||
endphoneme
|
||||
|
||||
phoneme Y
|
||||
vowel starttype (u) endtype (u)
|
||||
length 155
|
||||
formants vowel/u#
|
||||
endphoneme
|
||||
|
||||
|
||||
|
||||
phoneme e
|
||||
vowel starttype (e) endtype (e)
|
||||
beforenotvowel2 E
|
||||
length 180
|
||||
formants vowel/e_mid2
|
||||
endphoneme
|
||||
|
||||
phoneme E
|
||||
vowel starttype (e) endtype (e)
|
||||
length 180
|
||||
formants vowel/e_mid
|
||||
endphoneme
|
||||
|
||||
phoneme W
|
||||
vowel starttype (@) endtype (@)
|
||||
length 180
|
||||
formants vowel/oe_2
|
||||
endphoneme
|
||||
|
||||
|
||||
|
||||
phoneme a
|
||||
vowel starttype (a) endtype (a)
|
||||
length 190
|
||||
formants vowel/a_5
|
||||
endphoneme
|
||||
|
||||
|
||||
|
||||
phoneme u
|
||||
vowel starttype (u) endtype (u)
|
||||
beforenotvowel2 U
|
||||
length 150
|
||||
formants vowel/u_2
|
||||
endphoneme
|
||||
|
||||
phoneme U
|
||||
vowel starttype (u) endtype (u)
|
||||
length 150
|
||||
formants vowel/uu_2
|
||||
endphoneme
|
||||
|
||||
phoneme u#
|
||||
vowel starttype (@) endtype (@)
|
||||
length 150
|
||||
formants vowel/u#_7
|
||||
endphoneme
|
||||
|
||||
|
||||
|
||||
phoneme o
|
||||
vowel starttype (o) endtype (o)
|
||||
beforenotvowel2 O
|
||||
length 190
|
||||
formants vowel/o_mid
|
||||
endphoneme
|
||||
|
||||
phoneme O
|
||||
vowel starttype (o) endtype (o)
|
||||
length 190
|
||||
formants vowel/oo
|
||||
endphoneme
|
||||
|
||||
@@ -31,6 +31,7 @@ phonemenumber 24 _:: // long pause
|
||||
phonemenumber 25 t# // reduced version of [t]
|
||||
phonemenumber 26 '! // stress - emphasized
|
||||
phonemenumber 27 _;_ // clause pause
|
||||
phonemenumber 28 _^^ // Change language + phoneme table number
|
||||
|
||||
// The base phoneme table contains the utility phonemes, the consonants,
|
||||
// and a schwa. The vowels are defined in the language specific phoneme
|
||||
@@ -149,6 +150,13 @@ phoneme _^_ // Change dictionary (followed by language-code in ascii
|
||||
lengthmod 1
|
||||
endphoneme
|
||||
|
||||
phoneme _^^ // Change phoneme table (followed by phoneme table number)
|
||||
pause
|
||||
starttype _ endtype _
|
||||
length 1
|
||||
lengthmod 1
|
||||
endphoneme
|
||||
|
||||
phoneme _X1 // a language specific action
|
||||
pause
|
||||
starttype _ endtype _
|
||||
@@ -1268,5 +1276,8 @@ include ph_thai
|
||||
phonemetable id base2
|
||||
include ph_indonesian
|
||||
|
||||
phonemetable tr base2
|
||||
include ph_turkish
|
||||
|
||||
phonemetable ja base
|
||||
include ph_japanese
|
||||
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
|
Before Width: | Height: | Size: 67 KiB After Width: | Height: | Size: 67 KiB |
Binary file not shown.
+26
-26
@@ -58,21 +58,26 @@
|
||||
#define tOLDNAME 14
|
||||
#define tREDUCETO 15
|
||||
#define tFIXEDCODE 16
|
||||
|
||||
#define tBEFOREVOWEL 17
|
||||
#define tBEFOREVOWELPAUSE 18
|
||||
#define tBEFORENOTVOWEL 19
|
||||
#define tLINKOUT 20
|
||||
#define tBEFORENOTVOWEL2 20
|
||||
#define tSWITCHVOICING 21
|
||||
#define tVOWELIN 22
|
||||
#define tVOWELOUT 23
|
||||
#define tAPPENDPH 24 // always insert another phoneme (linkout) after this one
|
||||
#define tIMPORTPH 25
|
||||
#define tBEFOREPAUSE 26
|
||||
|
||||
#define tLINKOUT 23
|
||||
#define tVOWELIN 24
|
||||
#define tVOWELOUT 25
|
||||
#define tAPPENDPH 26 // always insert another phoneme (linkout) after this one
|
||||
#define tIMPORTPH 27
|
||||
#define tBEFOREPAUSE 28
|
||||
|
||||
#define tPHONEMENUMBER 29
|
||||
#define tPHONEMETABLE 30
|
||||
#define tINCLUDE 31
|
||||
|
||||
static const int flags_alternative[] = {phBEFOREVOWEL,phBEFOREVOWELPAUSE,phBEFORENOTVOWEL,phBEFORENOTVOWEL2,phSWITCHVOICING};
|
||||
|
||||
extern void Write4Bytes(FILE *f, int value);
|
||||
extern int Read4Bytes(FILE *f);
|
||||
extern void MakeVowelLists(void);
|
||||
@@ -230,16 +235,17 @@ static keywtab_t keywords[] = {
|
||||
{"length", 12},
|
||||
{"longlength", 13},
|
||||
{"reduceto", 15},
|
||||
{"beforevowel", 17},
|
||||
{"beforevowelpause", 18},
|
||||
{"beforenotvowel",19},
|
||||
{"linkout",20},
|
||||
{"switchvoicing",21},
|
||||
{"vowelin",22},
|
||||
{"vowelout",23},
|
||||
{"appendph",24},
|
||||
{"import_phoneme",25},
|
||||
{"beforepause",26},
|
||||
{"beforevowel", tBEFOREVOWEL},
|
||||
{"beforevowelpause", tBEFOREVOWELPAUSE},
|
||||
{"beforenotvowel",tBEFORENOTVOWEL},
|
||||
{"beforenotvowel2",tBEFORENOTVOWEL2},
|
||||
{"linkout",tLINKOUT},
|
||||
{"switchvoicing",tSWITCHVOICING},
|
||||
{"vowelin",tVOWELIN},
|
||||
{"vowelout",tVOWELOUT},
|
||||
{"appendph",tAPPENDPH},
|
||||
{"import_phoneme",tIMPORTPH},
|
||||
{"beforepause",tBEFOREPAUSE},
|
||||
|
||||
// flags
|
||||
{"wavef", 0x2000000+phWAVE},
|
||||
@@ -1374,18 +1380,12 @@ int Compile::CPhoneme()
|
||||
ph->phflags = (ph->phflags & 0xfffffff) + (value << 28);
|
||||
break;
|
||||
|
||||
case tBEFORENOTVOWEL:
|
||||
ph->phflags |= phBEFORENOTVOWEL; // and drop through to tBEFOREVOWEL
|
||||
case tBEFOREVOWELPAUSE:
|
||||
ph->phflags |= phBEFOREVOWELPAUSE;
|
||||
case tBEFOREVOWEL:
|
||||
if((phcode = NextItem(tPHONEMEMNEM)) == -1)
|
||||
phcode = LookupPhoneme(item_string,1);
|
||||
ph->alternative_ph = phcode;
|
||||
break;
|
||||
|
||||
case tBEFOREVOWELPAUSE:
|
||||
case tBEFORENOTVOWEL:
|
||||
case tBEFORENOTVOWEL2:
|
||||
case tSWITCHVOICING:
|
||||
ph->phflags |= phSWITCHVOICING;
|
||||
ph->phflags |= flags_alternative[item - tBEFOREVOWEL];
|
||||
if((phcode = NextItem(tPHONEMEMNEM)) == -1)
|
||||
phcode = LookupPhoneme(item_string,1);
|
||||
ph->alternative_ph = phcode;
|
||||
|
||||
@@ -1197,6 +1197,23 @@ void Translator::SetWordStress(char *output, unsigned int dictionary_flags, int
|
||||
}
|
||||
break;
|
||||
|
||||
case 7: // LANG=tr, the last syllable for any vowel markes explicitly as unstressed
|
||||
if(stressed_syllable == 0)
|
||||
{
|
||||
stressed_syllable = vowel_count - 1;
|
||||
for(ix=2; ix < vowel_count; ix++)
|
||||
{
|
||||
if(vowel_stress[ix] == 1)
|
||||
{
|
||||
stressed_syllable = ix-1;
|
||||
break;
|
||||
}
|
||||
}
|
||||
vowel_stress[stressed_syllable] = 4;
|
||||
max_stress = 4;
|
||||
}
|
||||
break;
|
||||
|
||||
case 9: // mark all as stressed
|
||||
for(ix=1; ix<vowel_count; ix++)
|
||||
{
|
||||
|
||||
+3
-3
@@ -1160,7 +1160,7 @@ void Test2()
|
||||
|
||||
|
||||
|
||||
const char* text1 = "Hello, World2 <mark name=\"mark2\"/>. This is the second sentence";
|
||||
const char* text1 = "Hello world. Testing.";
|
||||
|
||||
void TestTest(int control)
|
||||
{//=======================
|
||||
@@ -1200,10 +1200,10 @@ if(control==2)
|
||||
|
||||
f_wavtest = OpenWaveFile3("/home/jsd1/speechdata/text/test.wav");
|
||||
f_events = fopen("/home/jsd1/speechdata/text/events","w");
|
||||
fprintf(f_events,"Type Audio Text Length Id\n");
|
||||
fprintf(f_events,"Type Audio Text Length Id\n");
|
||||
fclose(f_events);
|
||||
|
||||
espeak_Initialize(AUDIO_OUTPUT_PLAYBACK,1000,NULL,0);
|
||||
espeak_Initialize(AUDIO_OUTPUT_RETRIEVAL,1000,NULL,1);
|
||||
espeak_SetSynthCallback(TestSynthCallback);
|
||||
espeak_SetUriCallback(TestUriCallback);
|
||||
|
||||
|
||||
+29
-14
@@ -31,6 +31,7 @@
|
||||
#include "speech.h"
|
||||
#include "phoneme.h"
|
||||
#include "synthesize.h"
|
||||
#include "voice.h"
|
||||
#include "translate.h"
|
||||
|
||||
|
||||
@@ -44,6 +45,15 @@ void Translator::LookupLetter(int letter, int next_byte, char *ph_buf1)
|
||||
char ph_stress[2];
|
||||
char ph_buf3[30];
|
||||
|
||||
if((letter <= 32) || iswspace(letter))
|
||||
{
|
||||
// lookup space as _&32 etc.
|
||||
sprintf(&single_letter[1],"_#%d ",letter);
|
||||
Lookup(&single_letter[1],ph_buf1);
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
len = utf8_out(letter,&single_letter[2]);
|
||||
single_letter[len+2] = ' ';
|
||||
|
||||
@@ -89,11 +99,13 @@ int Translator::TranslateLetter(char *word, char *phonemes, int control)
|
||||
int n_bytes;
|
||||
int letter;
|
||||
int len;
|
||||
int phoneme_tab_en;
|
||||
char *p2;
|
||||
char *pbuf;
|
||||
char capital[20];
|
||||
char ph_buf[50];
|
||||
char ph_buf2[50];
|
||||
char ph_buf[60];
|
||||
char ph_buf2[60];
|
||||
char ph_buf_en[60];
|
||||
char hexbuf[6];
|
||||
static char single_letter[10] = {0,0};
|
||||
|
||||
@@ -117,15 +129,6 @@ int Translator::TranslateLetter(char *word, char *phonemes, int control)
|
||||
}
|
||||
letter = towlower(letter);
|
||||
|
||||
if((letter <= 32) || iswspace(letter))
|
||||
{
|
||||
// lookup space as _&32 etc.
|
||||
sprintf(&single_letter[1],"_#%d ",letter);
|
||||
Lookup(&single_letter[1],ph_buf);
|
||||
strcat(phonemes,ph_buf);
|
||||
return(n_bytes);
|
||||
}
|
||||
|
||||
LookupLetter(letter, word[n_bytes], ph_buf);
|
||||
|
||||
if(ph_buf[0] == phonSWITCH)
|
||||
@@ -133,6 +136,18 @@ int Translator::TranslateLetter(char *word, char *phonemes, int control)
|
||||
strcpy(phonemes,ph_buf);
|
||||
return(0);
|
||||
}
|
||||
|
||||
if(ph_buf[0] == 0)
|
||||
{
|
||||
phoneme_tab_en = SetTranslator2("en");
|
||||
translator2->LookupLetter(letter, word[n_bytes], ph_buf_en);
|
||||
if(ph_buf_en[0] != 0)
|
||||
{
|
||||
sprintf(ph_buf,"%c%c%s%c%c",phonSWITCH2, phoneme_tab_en + phonTOP, ph_buf_en, phonSWITCH2, voice->phoneme_tab_ix + phonTOP);
|
||||
}
|
||||
SelectPhonemeTable(voice->phoneme_tab_ix); // revert to original phoneme table
|
||||
}
|
||||
|
||||
if(ph_buf[0] == 0)
|
||||
{
|
||||
// character name not found
|
||||
@@ -166,8 +181,8 @@ int Translator::TranslateLetter(char *word, char *phonemes, int control)
|
||||
|
||||
|
||||
|
||||
void Translator::SetSpellingStress(char *phonemes, int control)
|
||||
{//============================================================
|
||||
void Translator::SetSpellingStress(char *phonemes, int control, int n_chars)
|
||||
{//=========================================================================
|
||||
// Individual letter names, reduce the stress of some.
|
||||
int ix;
|
||||
unsigned int c;
|
||||
@@ -188,7 +203,7 @@ void Translator::SetSpellingStress(char *phonemes, int control)
|
||||
count = 0;
|
||||
for(ix=0; (c = buf[ix]) != 0; ix++)
|
||||
{
|
||||
if(c == phonSTRESS_P)
|
||||
if((c == phonSTRESS_P) && (n_chars > 1))
|
||||
{
|
||||
count++;
|
||||
|
||||
|
||||
+5
-2
@@ -45,18 +45,19 @@
|
||||
#define phTRILL 0x80
|
||||
#define phVOWEL2 0x100 // liquid that is considered a vowel
|
||||
#define phPALATAL 0x200
|
||||
#define phLONG 0x1000
|
||||
#define phAPPENDPH 0x2000 // always insert another phoneme (link_out) after this one
|
||||
#define phBRKAFTER 0x4000 // [*] add a post-pause
|
||||
#define phBEFOREPAUSE 0x8000 // replace with the link_out phoneme if the next phoneme is a pause
|
||||
|
||||
#define phALTERNATIVE 0x0c00 // bits 10,11 specifying use of alternative_ph
|
||||
#define phALTERNATIVE 0x1c00 // bits 10,11,12 specifying use of alternative_ph
|
||||
#define phBEFOREVOWEL 0x0000
|
||||
#define phBEFOREVOWELPAUSE 0x0400
|
||||
#define phBEFORENOTVOWEL 0x0c00
|
||||
#define phBEFORENOTVOWEL2 0x1000
|
||||
#define phSWITCHVOICING 0x0800
|
||||
|
||||
#define phNONSYLLABIC 0x100000 // don't count this vowel as a syllable when finding the stress position
|
||||
#define phLONG 0x200000
|
||||
|
||||
// fixed phoneme code numbers, these can be used from the program code
|
||||
#define phonCONTROL 1
|
||||
@@ -86,6 +87,8 @@
|
||||
#define phonT_REDUCED 25
|
||||
#define phonSTRESS_TONIC 26
|
||||
#define phonPAUSE_CLAUSE 27
|
||||
#define phonSWITCH2 28
|
||||
#define phonTOP 28 // highest pre-defined phoneme number
|
||||
|
||||
extern const unsigned char pause_phonemes[8]; // 0, vshort, short, pause, long, glottalstop
|
||||
|
||||
|
||||
@@ -395,6 +395,14 @@ void Translator::MakePhonemeList(int post_pause, int start_sentence)
|
||||
alternative = ph->alternative_ph;
|
||||
break;
|
||||
|
||||
case phBEFORENOTVOWEL2: // LANG=tr
|
||||
if(((plist2+1)->sourceix != 0) ||
|
||||
((next->type != phVOWEL) && ((phoneme_tab[(plist2+2)->phcode]->type != phVOWEL) || ((plist2+2)->sourceix != 0))))
|
||||
{
|
||||
alternative = ph->alternative_ph;
|
||||
}
|
||||
break;
|
||||
|
||||
case phBEFOREVOWELPAUSE:
|
||||
if((next->type == phVOWEL) || (next->type == phPAUSE))
|
||||
alternative = ph->alternative_ph;
|
||||
|
||||
@@ -41,6 +41,7 @@
|
||||
#endif
|
||||
|
||||
#ifdef _ESPEAKEDIT
|
||||
#define USE_PORTAUDIO
|
||||
#define USE_ASYNC
|
||||
#define LOG_FRAMES // write keyframe info to log-espeakedit
|
||||
#endif
|
||||
|
||||
+2
-2
@@ -35,8 +35,8 @@
|
||||
#include "translate.h"
|
||||
#include "wave.h"
|
||||
|
||||
const char *version_string = "1.31.04 30.Jan.08";
|
||||
const int version_phdata = 0x013100;
|
||||
const char *version_string = "1.31.05 04.Feb.08";
|
||||
const int version_phdata = 0x013105;
|
||||
|
||||
int option_device_number = -1;
|
||||
|
||||
|
||||
@@ -669,15 +669,15 @@ SetLengthMods(tr,3); // all equal
|
||||
case L('t','r'): // Turkish
|
||||
{
|
||||
static const unsigned char stress_amps_tr[8] = {16,16, 20,20, 20,24, 24,22 };
|
||||
static const short stress_lengths_tr[8] = {180,150, 200,180, 0,0, 230,270};
|
||||
static const short stress_lengths_tr[8] = {170,170, 190,170, 0,0, 250,270};
|
||||
|
||||
tr = new Translator();
|
||||
SetupTranslator(tr,stress_lengths_tr,stress_amps_tr);
|
||||
tr->charset_a0 = charsets[9]; // ISO-8859-9 - Latin5
|
||||
|
||||
tr->langopts.stress_rule = 3; // stress on the last syllable
|
||||
tr->langopts.stress_rule = 7; // stress on the last syllable, before any explicitly unstressed syllable
|
||||
|
||||
tr->langopts.numbers = 0x1009;
|
||||
tr->langopts.numbers = 0x1d09;
|
||||
tr->langopts.max_initial_consonants = 2;
|
||||
}
|
||||
break;
|
||||
|
||||
+67
-41
@@ -38,7 +38,7 @@
|
||||
|
||||
|
||||
Translator *translator = NULL; // the main translator
|
||||
static Translator *translator2 = NULL; // secondary translator for certain words
|
||||
Translator *translator2 = NULL; // secondary translator for certain words
|
||||
static char translator2_language[20] = {0};
|
||||
|
||||
FILE *f_trans = NULL; // phoneme output text
|
||||
@@ -750,6 +750,7 @@ if((wmark > 0) && (wmark < 8))
|
||||
while(*wordx != ' ')
|
||||
{
|
||||
wordx += TranslateLetter(wordx, phonemes,spell_word);
|
||||
posn++;
|
||||
if(phonemes[0] == phonSWITCH)
|
||||
{
|
||||
// change to another language in order to translate this word
|
||||
@@ -757,7 +758,7 @@ if((wmark > 0) && (wmark < 8))
|
||||
return(0);
|
||||
}
|
||||
}
|
||||
SetSpellingStress(phonemes,spell_word);
|
||||
SetSpellingStress(phonemes,spell_word,posn);
|
||||
}
|
||||
else
|
||||
if(found == 0)
|
||||
@@ -776,6 +777,7 @@ if((wmark > 0) && (wmark < 8))
|
||||
// find a remainder that we can pronounce.
|
||||
emphasize_allcaps = 0;
|
||||
wordx += TranslateLetter(wordx,phonemes,0);
|
||||
posn++;
|
||||
if(phonemes[0] == phonSWITCH)
|
||||
{
|
||||
// change to another language in order to translate this word
|
||||
@@ -798,7 +800,7 @@ if((wmark > 0) && (wmark < 8))
|
||||
if(length > 0)
|
||||
wordx[-1] = ' '; // prevent this affecting the pronunciation of the pronuncable part
|
||||
}
|
||||
SetSpellingStress(phonemes,0);
|
||||
SetSpellingStress(phonemes,0,posn);
|
||||
|
||||
// anything left ?
|
||||
if(*wordx != ' ')
|
||||
@@ -1164,6 +1166,39 @@ static int CountSyllables(unsigned char *phonemes)
|
||||
return(count);
|
||||
}
|
||||
|
||||
|
||||
int SetTranslator2(const char *new_language)
|
||||
{//=========================================
|
||||
// Set translator2 to a second language
|
||||
int new_phoneme_tab;
|
||||
|
||||
if((new_phoneme_tab = SelectPhonemeTableName(new_language)) >= 0)
|
||||
{
|
||||
if((translator2 != NULL) && (strcmp(new_language,translator2_language) != 0))
|
||||
{
|
||||
// we already have an alternative translator, but not for the required language, delete it
|
||||
delete translator2;
|
||||
translator2 = NULL;
|
||||
}
|
||||
|
||||
if(translator2 == NULL)
|
||||
{
|
||||
translator2 = SelectTranslator(new_language);
|
||||
strcpy(translator2_language,new_language);
|
||||
|
||||
if(translator2->LoadDictionary(new_language,0) != 0)
|
||||
{
|
||||
SelectPhonemeTable(voice->phoneme_tab_ix); // revert to original phoneme table
|
||||
new_phoneme_tab = -1;
|
||||
translator2_language[0] = 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
return(new_phoneme_tab);
|
||||
} // end of SetTranslator2
|
||||
|
||||
|
||||
|
||||
int Translator::TranslateWord2(char *word, WORD_TAB *wtab, int pre_pause, int next_pause)
|
||||
{//======================================================================================
|
||||
int flags=0;
|
||||
@@ -1199,27 +1234,31 @@ int Translator::TranslateWord2(char *word, WORD_TAB *wtab, int pre_pause, int ne
|
||||
if(word_flags & FLAG_EMBEDDED)
|
||||
{
|
||||
embedded_flag = SFLAG_EMBEDDED;
|
||||
value = embedded_list[embedded_read] >> 8;
|
||||
|
||||
switch(embedded_cmd = embedded_list[embedded_read] & 0x1f)
|
||||
do
|
||||
{
|
||||
case EMBED_Y:
|
||||
option_sayas = value;
|
||||
break;
|
||||
embedded_cmd = embedded_list[embedded_read++];
|
||||
value = embedded_cmd >> 8;
|
||||
|
||||
case EMBED_F:
|
||||
option_emphasis = value;
|
||||
break;
|
||||
|
||||
case EMBED_B:
|
||||
// break command
|
||||
if(value == 0)
|
||||
pre_pause = 0; // break=none
|
||||
else
|
||||
pre_pause += value;
|
||||
break;
|
||||
}
|
||||
while((embedded_list[embedded_read++] & 0x80) == 0); // read over the embedded commands for this word
|
||||
switch(embedded_cmd & 0x1f)
|
||||
{
|
||||
case EMBED_Y:
|
||||
option_sayas = value;
|
||||
break;
|
||||
|
||||
case EMBED_F:
|
||||
option_emphasis = value;
|
||||
break;
|
||||
|
||||
case EMBED_B:
|
||||
// break command
|
||||
if(value == 0)
|
||||
pre_pause = 0; // break=none
|
||||
else
|
||||
pre_pause += value;
|
||||
break;
|
||||
}
|
||||
} while((embedded_cmd & 0x80) == 0);
|
||||
}
|
||||
|
||||
if(word[0] == 0)
|
||||
@@ -1328,28 +1367,9 @@ int Translator::TranslateWord2(char *word, WORD_TAB *wtab, int pre_pause, int ne
|
||||
new_language = (char *)(&p[1]);
|
||||
if(new_language[0]==0)
|
||||
new_language = "en";
|
||||
if((switch_phonemes = SelectPhonemeTableName(new_language)) >= 0)
|
||||
{
|
||||
if((translator2 != NULL) && (strcmp(new_language,translator2_language) != 0))
|
||||
{
|
||||
// we already have an alternative translator, but not for the required language, delete it
|
||||
delete translator2;
|
||||
translator2 = NULL;
|
||||
}
|
||||
|
||||
if(translator2 == NULL)
|
||||
{
|
||||
translator2 = SelectTranslator(new_language);
|
||||
strcpy(translator2_language,new_language);
|
||||
switch_phonemes = SetTranslator2(new_language);
|
||||
|
||||
if(translator2->LoadDictionary(new_language,0) != 0)
|
||||
{
|
||||
SelectPhonemeTable(voice->phoneme_tab_ix); // revert to original phoneme table
|
||||
switch_phonemes = -1;
|
||||
translator2_language[0] = 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
if(switch_phonemes >= 0)
|
||||
{
|
||||
// re-translate the word using the new translator
|
||||
@@ -1488,6 +1508,12 @@ int Translator::TranslateWord2(char *word, WORD_TAB *wtab, int pre_pause, int ne
|
||||
srcix = source_ix+1;
|
||||
}
|
||||
else
|
||||
if(ph_code == phonSWITCH2)
|
||||
{
|
||||
SetPlist2(&ph_list2[n_ph_list2],phonSWITCH);
|
||||
ph_list2[n_ph_list2++].tone_number = *p++ - phonTOP; // phoneme table number (phonTOP is added to avoid confusion with special phoneme numbers)
|
||||
}
|
||||
else
|
||||
if(ph_code == phonX1)
|
||||
{
|
||||
// a language specific action
|
||||
|
||||
+3
-1
@@ -416,7 +416,7 @@ public:
|
||||
private:
|
||||
int TranslateWord2(char *word, WORD_TAB *wtab, int pre_pause, int next_pause);
|
||||
int TranslateLetter(char *letter, char *phonemes, int control);
|
||||
void SetSpellingStress(char *phonemes, int control);
|
||||
void SetSpellingStress(char *phonemes, int control, int n_chars);
|
||||
void WriteMnemonic(int *ix, int mnem);
|
||||
void MakePhonemeList(int post_pause, int new_sentence);
|
||||
int SubstitutePhonemes(PHONEME_LIST2 *plist_out);
|
||||
@@ -541,6 +541,7 @@ extern unsigned char punctuation_to_tone[INTONATION_TYPES][PUNCT_INTONATIONS];
|
||||
extern int speech_parameters[];
|
||||
|
||||
extern Translator *translator;
|
||||
extern Translator *translator2;
|
||||
extern const unsigned short *charsets[N_CHARSETS];
|
||||
extern char dictionary_name[40];
|
||||
extern char ctrl_embedded; // to allow an alternative CTRL for embedded commands
|
||||
@@ -554,6 +555,7 @@ extern int (* phoneme_callback)(const char *);
|
||||
extern void SetLengthMods(Translator *tr, int value);
|
||||
|
||||
Translator *SelectTranslator(const char *name);
|
||||
int SetTranslator2(const char *name);
|
||||
int CompileDictionary(const char *dsource, const char *dict_name, FILE *log, char *err_name,int flags);
|
||||
void LoadConfig(void);
|
||||
int PhonemeCode(unsigned int mnem);
|
||||
|
||||
Reference in New Issue
Block a user