Browse Source

[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
master
jonsd 17 years ago
parent
commit
703da28454

+ 1
- 0
dictsource/de_list View File



_#9 t,abu:l'Ato:* _#9 t,abu:l'Ato:*
_#32 l'e:*ts'aIC@n _#32 l'e:*ts'aIC@n
_?? zymb'o:l


// Not Roman numbers // Not Roman numbers
v faU v faU

+ 21
- 10
dictsource/dict_phonemes View File

Dictionary de_dict Dictionary de_dict


3 @ @- a A A: aI aU 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 * : ; b C C2 d D
dZ f g h j k l m dZ f g h j k l m


* : ; b c d dZ f * : ; b c d dZ f
g h j k l L m n 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 Dictionary hi_dict
g h j k l l^ m n g h j k l l^ m n
N n^ p Q r R r- s N n^ p Q r R r- s
S s# s; t T tS ts v S s# s; t T tS ts v
w w2 x z Z
w x z Z




Dictionary ro_dict Dictionary ro_dict
i i. i[ iou o o- ou u i i. i[ iou o o- ou u
uai y 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 Dictionary jbo_dict


Dictionary ja_dict 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
dictsource/en_list View File

_} A@breIs _} A@breIs
_~ tIld@ _~ 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 // numeric


then DEn $verbf then DEn $verbf


// these should be stressed at the start of a sentence // 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 whose ,hu:z $pause $only
what ,w0t $strend2 $onlys what ,w0t $strend2 $onlys
how ,haU $strend2 $onlys how ,haU $strend2 $onlys

+ 1
- 19
dictsource/en_rules View File

ë E ë E
ï i: ï i:
ö 3: ö 3:
?5 ö VR
ü u: ü u:
ç s ç s
ß s ß s
?3 \\ bakslaS ?3 \\ bakslaS
?3 / slaS ?3 / slaS
' '
£ paUnd
! _:Ekskl@meIS@n_: ! _:Ekskl@meIS@n_:
!) ! !) !
? (? kwEstS@nmA@ks ? (? kwEstS@nmA@ks
%) % (% %) % (%
%%) % (_ _:: %%) % (_ _::


// extra symbols
¥ jEn
§ sEkS@n
// extra symbols (mostly in en_list)
¶ par@graf ¶ par@graf
¶¶ par@grafs ¶¶ 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
dictsource/es_list View File

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


// letters // 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 // numbers
x Ekis x Ekis
_y ,ig@-*'iEQa _y ,ig@-*'iEQa
y ,ig@-*'iEQa $atend 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







+ 0
- 6
dictsource/es_rules View File

_)ñ (_ En^e _)ñ (_ En^e


$ d'olar $ d'olar
€ eU*o
% porTj'Ento
& ampErs'ant
@ a*R'oBa
/ b'a*Ra
© k,opi*R'aIt


+ m'as + m'as
_) ++ (_ masm'as _) ++ (_ masm'as

+ 5
- 3
dictsource/fr_list View File

// character names // 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 _" gijmE
_# djEz _# djEz

+ 9
- 5
dictsource/fr_rules View File



// 2006-11-18 Gilles Casse <[email protected]> // 2006-11-18 Gilles Casse <[email protected]>
// //
// Updated: 2008-01-29 Michel Such <[email protected]>
// Updated: 2008-02-04 Michel Such <[email protected]>
// //
// * The rules are based on Cicero TTS. // * The rules are based on Cicero TTS.
// //
em (b A~ // décembre em (b A~ // décembre
em (m A~ // emmancher em (m A~ // emmancher
em (p A~ em (p A~
en (_ A~ // en
en (_ A~n2 // en
en (hA A~n // enharmonique en (hA A~n // enharmonique
en (A A~n // enivrer en (A A~n // enivrer
en (_A A~n // en avion


C) en (d_ A~ // comprend dépend C) en (d_ A~ // comprend dépend
C) en (ds_ A~ C) en (ds_ A~
_) h (ac _! // hache _) h (ac _! // hache
_) h (ai _! // haine haillon _) h (ai _! // haine haillon
_) h (al _! // halte _) h (al _! // halte
_) h (amea _! // hameau
_) h (amp _! // hampe _) h (amp _! // hampe
_) h (an _! // hanche _) h (an _! // hanche
_) h (app _! // happer _) h (app _! // happer
_) h (au _! // haut _) h (au _! // haut
_) h (av _! // havre _) h (av _! // havre
_) h (ern _! // hernie _) h (ern _! // hernie
_) h (éro _! // héros, héron
_) h (ers _! // herse _) h (ers _! // herse
_) h (eurt _! // heurter _) h (eurt _! // heurter
_) h (ibo _! // hibou _) h (ibo _! // hibou
A) s (oft s // microsoft A) s (oft s // microsoft
y) s (A z // paysage y) s (A z // paysage
CCan) s (A z // transition CCan) s (A z // transition
xpan) s (A s // expansion




ibu) s (_ s ibu) s (_ s
um (b W~ // humble um (b W~ // humble
um (p W~ um (p W~
un (C W~ // emprunt lundi 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 (A // fatigue
g) u (ï y // ambiguïté g) u (ï y // ambiguïté








+ 1
- 1
dictsource/no_list View File

n En n En
p pe: p pe:
q ku-: q ku-:
r Err
r E:R
s Es s Es
t te: t te:
v ve: v ve:

+ 71
- 0
dictsource/tr_list View File


// 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


+ 108
- 0
dictsource/tr_rules View File


// 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
docs/phonemes.html View File

<tr><td><code>[aU]</code><td>m<b>ou</b>th <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>[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> </tbody>
</table> </table>



+ 1
- 0
espeak-data/voices/no View File

language nb language nb
gender male gender male


intonation 4

+ 4
- 0
espeak-data/voices/tr View File

name turkish-test
language tr
gender male


+ 62
- 47
phsource/compile_report View File

46 phoneme tables
47 phoneme tables
new total 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 Data file Used by
b/b [b] base b/b [b] base
[n;] ro [n;] ro
[n] zh [n] zh
n/n_ [n] base n/n_ [n] base
[n2] fr
[n;] ro [n;] ro
n/n@ [(@)] base n/n@ [(@)] base
n/n#_ [n#] is n/n#_ [n#] is
[a] la [a] la
[a] sv [a] sv
[a] sw [a] sw
[a] tr
vowel/aa [a] fi vowel/aa [a] fi
[A] fr_ca [A] fr_ca
[A] no [A] no
[E] is [E] is
[E] id [E] id
[E2] id [E2] id
[E] tr
[e] ja [e] ja
vowel/e_mid2 [E] af vowel/e_mid2 [E] af
[E] de [E] de
[e] ro [e] ro
[e] el [e] el
[e] sw [e] sw
[e] tr
vowel/@_fnt [@] en_wi vowel/@_fnt [@] en_wi
[@2] en_wi [@2] en_wi
[@2] hr [@2] hr
[i] ta [i] ta
[i] hr [i] hr
[i] id [i] id
[i] tr
vowel/i#_7 [i[] zh vowel/i#_7 [i[] zh
vowel/i_en [i:] en vowel/i_en [i:] en
[i:] fr [i:] fr
[I] hr [I] hr
[I] sv [I] sv
[I] no [I] no
[I] tr
vowel/ii_4 [I] en vowel/ii_4 [I] en
[I2] en [I2] en
[I] en_n [I] en_n
[W] af [W] af
[W] de [W] de
vowel/oe_2 [W] no vowel/oe_2 [W] no
[W] tr
vowel/oe_4 [W] sv vowel/oe_4 [W] sv
vowel/o_mid [O] fr vowel/o_mid [O] fr
[o] hu [o] hu
[o] tr
vowel/oo [O:] en_sc vowel/oo [O:] en_sc
[O] en_wi [O] en_wi
[O:] en_wi [O:] en_wi
[O] th [O] th
[O:] th [O:] th
[O] id [O] id
[O] tr
[o] ja [o] ja
vowel/oo_1 [O:] en_n vowel/oo_1 [O:] en_n
[O:] en_rp [O:] en_rp
[u] id [u] id
vowel/u# [u-] en vowel/u# [u-] en
[u:] en_sc [u:] en_sc
[Y] tr
vowel/u_2 [u1] fi vowel/u_2 [u1] fi
[u] sk [u] sk
[U] hr [U] hr
[u] ro [u] ro
[u] tr
vowel/u#_2 [u-] ta vowel/u#_2 [u-] ta
[u-] sv [u-] sv
vowel/u_3 [yU] ro vowel/u_3 [yU] ro
[u] pt_pt [u] pt_pt
vowel/u#_6 [u:] en_us vowel/u#_6 [u:] en_us
vowel/u_7 [u] vi vowel/u_7 [u] vi
vowel/u#_7 [u#] tr
vowel/u_bck [u] base2 vowel/u_bck [u] base2
[U] cy [U] cy
[u] fi [u] fi
vowel/uu_2 [U] base2 vowel/uu_2 [U] base2
[U] de [U] de
[U] ta [U] ta
[U] tr
vowel/uu_3 [u] af vowel/uu_3 [u] af
vowel/uu_4 [U] fi vowel/uu_4 [U] fi
[U] sv [U] sv
vowel/y#_3 [W] is vowel/y#_3 [W] is
vowel/y_4 [y:] no vowel/y_4 [y:] no
vowel/y_5 [y:] sv vowel/y_5 [y:] sv
[y] tr
vowel/yy [y"] fr_ca vowel/yy [y"] fr_ca
[y] no [y] no
vowel/yy_3 [y] sv vowel/yy_3 [y] sv

+ 1
- 1
phsource/ph_english_us View File

vowelout f1=2 f2=1700 -300 300 f3=-100 80 vowelout f1=2 f2=1700 -300 300 f3=-100 80
formants d/tap2+x/d%70 formants d/tap2+x/d%70
after @ d/x_tap after @ d/x_tap
lengthmod 2
lengthmod 5
endphoneme endphoneme



+ 11
- 0
phsource/ph_french View File

endphoneme 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 phoneme p
vls blb stop vls blb stop
vowelin f1=0 f2=1000 -50 -100 f3=-200 80 amp=11 vowelin f1=0 f2=1000 -50 -100 f3=-200 80 amp=11

+ 0
- 1
phsource/ph_norwegian View File

phoneme Yy phoneme Yy
vowel starttype (@) endtype (u) vowel starttype (@) endtype (u)
length 270 length 270
long
formants vwl_no/y#y formants vwl_no/y#y
endphoneme endphoneme



+ 93
- 0
phsource/ph_turkish View File



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


+ 11
- 0
phsource/phonemes View File

phonemenumber 25 t# // reduced version of [t] phonemenumber 25 t# // reduced version of [t]
phonemenumber 26 '! // stress - emphasized phonemenumber 26 '! // stress - emphasized
phonemenumber 27 _;_ // clause pause phonemenumber 27 _;_ // clause pause
phonemenumber 28 _^^ // Change language + phoneme table number


// The base phoneme table contains the utility phonemes, the consonants, // The base phoneme table contains the utility phonemes, the consonants,
// and a schwa. The vowels are defined in the language specific phoneme // and a schwa. The vowels are defined in the language specific phoneme
lengthmod 1 lengthmod 1
endphoneme endphoneme


phoneme _^^ // Change phoneme table (followed by phoneme table number)
pause
starttype _ endtype _
length 1
lengthmod 1
endphoneme

phoneme _X1 // a language specific action phoneme _X1 // a language specific action
pause pause
starttype _ endtype _ starttype _ endtype _
phonemetable id base2 phonemetable id base2
include ph_indonesian include ph_indonesian


phonemetable tr base2
include ph_turkish

phonemetable ja base phonemetable ja base
include ph_japanese include ph_japanese

BIN
phsource/vowel/oe_2 View File


BIN
phsource/vowel/u# View File


BIN
phsource/vowel/u#_7 View File


BIN
phsource/vowel/uu_2 View File


BIN
phsource/vowel/vowelchart.png View File


BIN
phsource/vwl_en_us/3_us View File


+ 26
- 26
src/compiledata.cpp View File

#define tOLDNAME 14 #define tOLDNAME 14
#define tREDUCETO 15 #define tREDUCETO 15
#define tFIXEDCODE 16 #define tFIXEDCODE 16

#define tBEFOREVOWEL 17 #define tBEFOREVOWEL 17
#define tBEFOREVOWELPAUSE 18 #define tBEFOREVOWELPAUSE 18
#define tBEFORENOTVOWEL 19 #define tBEFORENOTVOWEL 19
#define tLINKOUT 20
#define tBEFORENOTVOWEL2 20
#define tSWITCHVOICING 21 #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 tPHONEMENUMBER 29
#define tPHONEMETABLE 30 #define tPHONEMETABLE 30
#define tINCLUDE 31 #define tINCLUDE 31


static const int flags_alternative[] = {phBEFOREVOWEL,phBEFOREVOWELPAUSE,phBEFORENOTVOWEL,phBEFORENOTVOWEL2,phSWITCHVOICING};

extern void Write4Bytes(FILE *f, int value); extern void Write4Bytes(FILE *f, int value);
extern int Read4Bytes(FILE *f); extern int Read4Bytes(FILE *f);
extern void MakeVowelLists(void); extern void MakeVowelLists(void);
{"length", 12}, {"length", 12},
{"longlength", 13}, {"longlength", 13},
{"reduceto", 15}, {"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 // flags
{"wavef", 0x2000000+phWAVE}, {"wavef", 0x2000000+phWAVE},
ph->phflags = (ph->phflags & 0xfffffff) + (value << 28); ph->phflags = (ph->phflags & 0xfffffff) + (value << 28);
break; break;


case tBEFORENOTVOWEL:
ph->phflags |= phBEFORENOTVOWEL; // and drop through to tBEFOREVOWEL
case tBEFOREVOWELPAUSE:
ph->phflags |= phBEFOREVOWELPAUSE;
case tBEFOREVOWEL: 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: case tSWITCHVOICING:
ph->phflags |= phSWITCHVOICING;
ph->phflags |= flags_alternative[item - tBEFOREVOWEL];
if((phcode = NextItem(tPHONEMEMNEM)) == -1) if((phcode = NextItem(tPHONEMEMNEM)) == -1)
phcode = LookupPhoneme(item_string,1); phcode = LookupPhoneme(item_string,1);
ph->alternative_ph = phcode; ph->alternative_ph = phcode;

+ 17
- 0
src/dictionary.cpp View File

} }
break; 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 case 9: // mark all as stressed
for(ix=1; ix<vowel_count; ix++) for(ix=1; ix<vowel_count; ix++)
{ {

+ 3
- 3
src/extras.cpp View File







const char* text1 = "Hello, World2 <mark name=\"mark2\"/>. This is the second sentence";
const char* text1 = "Hello world. Testing.";


void TestTest(int control) void TestTest(int control)
{//======================= {//=======================


f_wavtest = OpenWaveFile3("/home/jsd1/speechdata/text/test.wav"); f_wavtest = OpenWaveFile3("/home/jsd1/speechdata/text/test.wav");
f_events = fopen("/home/jsd1/speechdata/text/events","w"); 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); fclose(f_events);


espeak_Initialize(AUDIO_OUTPUT_PLAYBACK,1000,NULL,0);
espeak_Initialize(AUDIO_OUTPUT_RETRIEVAL,1000,NULL,1);
espeak_SetSynthCallback(TestSynthCallback); espeak_SetSynthCallback(TestSynthCallback);
espeak_SetUriCallback(TestUriCallback); espeak_SetUriCallback(TestUriCallback);



+ 29
- 14
src/numbers.cpp View File

#include "speech.h" #include "speech.h"
#include "phoneme.h" #include "phoneme.h"
#include "synthesize.h" #include "synthesize.h"
#include "voice.h"
#include "translate.h" #include "translate.h"




char ph_stress[2]; char ph_stress[2];
char ph_buf3[30]; 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]); len = utf8_out(letter,&single_letter[2]);
single_letter[len+2] = ' '; single_letter[len+2] = ' ';


int n_bytes; int n_bytes;
int letter; int letter;
int len; int len;
int phoneme_tab_en;
char *p2; char *p2;
char *pbuf; char *pbuf;
char capital[20]; 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]; char hexbuf[6];
static char single_letter[10] = {0,0}; static char single_letter[10] = {0,0};


} }
letter = towlower(letter); 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); LookupLetter(letter, word[n_bytes], ph_buf);


if(ph_buf[0] == phonSWITCH) if(ph_buf[0] == phonSWITCH)
strcpy(phonemes,ph_buf); strcpy(phonemes,ph_buf);
return(0); 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) if(ph_buf[0] == 0)
{ {
// character name not found // character name not found






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. // Individual letter names, reduce the stress of some.
int ix; int ix;
unsigned int c; unsigned int c;
count = 0; count = 0;
for(ix=0; (c = buf[ix]) != 0; ix++) for(ix=0; (c = buf[ix]) != 0; ix++)
{ {
if(c == phonSTRESS_P)
if((c == phonSTRESS_P) && (n_chars > 1))
{ {
count++; count++;



+ 5
- 2
src/phoneme.h View File

#define phTRILL 0x80 #define phTRILL 0x80
#define phVOWEL2 0x100 // liquid that is considered a vowel #define phVOWEL2 0x100 // liquid that is considered a vowel
#define phPALATAL 0x200 #define phPALATAL 0x200
#define phLONG 0x1000
#define phAPPENDPH 0x2000 // always insert another phoneme (link_out) after this one #define phAPPENDPH 0x2000 // always insert another phoneme (link_out) after this one
#define phBRKAFTER 0x4000 // [*] add a post-pause #define phBRKAFTER 0x4000 // [*] add a post-pause
#define phBEFOREPAUSE 0x8000 // replace with the link_out phoneme if the next phoneme is a 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 phBEFOREVOWEL 0x0000
#define phBEFOREVOWELPAUSE 0x0400 #define phBEFOREVOWELPAUSE 0x0400
#define phBEFORENOTVOWEL 0x0c00 #define phBEFORENOTVOWEL 0x0c00
#define phBEFORENOTVOWEL2 0x1000
#define phSWITCHVOICING 0x0800 #define phSWITCHVOICING 0x0800


#define phNONSYLLABIC 0x100000 // don't count this vowel as a syllable when finding the stress position #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 // fixed phoneme code numbers, these can be used from the program code
#define phonCONTROL 1 #define phonCONTROL 1
#define phonT_REDUCED 25 #define phonT_REDUCED 25
#define phonSTRESS_TONIC 26 #define phonSTRESS_TONIC 26
#define phonPAUSE_CLAUSE 27 #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 extern const unsigned char pause_phonemes[8]; // 0, vshort, short, pause, long, glottalstop



+ 8
- 0
src/phonemelist.cpp View File

alternative = ph->alternative_ph; alternative = ph->alternative_ph;
break; 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: case phBEFOREVOWELPAUSE:
if((next->type == phVOWEL) || (next->type == phPAUSE)) if((next->type == phVOWEL) || (next->type == phPAUSE))
alternative = ph->alternative_ph; alternative = ph->alternative_ph;

+ 1
- 0
src/speech.h View File

#endif #endif


#ifdef _ESPEAKEDIT #ifdef _ESPEAKEDIT
#define USE_PORTAUDIO
#define USE_ASYNC #define USE_ASYNC
#define LOG_FRAMES // write keyframe info to log-espeakedit #define LOG_FRAMES // write keyframe info to log-espeakedit
#endif #endif

+ 2
- 2
src/synthdata.cpp View File

#include "translate.h" #include "translate.h"
#include "wave.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; int option_device_number = -1;



+ 3
- 3
src/tr_languages.cpp View File

case L('t','r'): // Turkish case L('t','r'): // Turkish
{ {
static const unsigned char stress_amps_tr[8] = {16,16, 20,20, 20,24, 24,22 }; 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(); tr = new Translator();
SetupTranslator(tr,stress_lengths_tr,stress_amps_tr); SetupTranslator(tr,stress_lengths_tr,stress_amps_tr);
tr->charset_a0 = charsets[9]; // ISO-8859-9 - Latin5 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; tr->langopts.max_initial_consonants = 2;
} }
break; break;

+ 67
- 41
src/translate.cpp View File





Translator *translator = NULL; // the main translator 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}; static char translator2_language[20] = {0};


FILE *f_trans = NULL; // phoneme output text FILE *f_trans = NULL; // phoneme output text
while(*wordx != ' ') while(*wordx != ' ')
{ {
wordx += TranslateLetter(wordx, phonemes,spell_word); wordx += TranslateLetter(wordx, phonemes,spell_word);
posn++;
if(phonemes[0] == phonSWITCH) if(phonemes[0] == phonSWITCH)
{ {
// change to another language in order to translate this word // change to another language in order to translate this word
return(0); return(0);
} }
} }
SetSpellingStress(phonemes,spell_word);
SetSpellingStress(phonemes,spell_word,posn);
} }
else else
if(found == 0) if(found == 0)
// find a remainder that we can pronounce. // find a remainder that we can pronounce.
emphasize_allcaps = 0; emphasize_allcaps = 0;
wordx += TranslateLetter(wordx,phonemes,0); wordx += TranslateLetter(wordx,phonemes,0);
posn++;
if(phonemes[0] == phonSWITCH) if(phonemes[0] == phonSWITCH)
{ {
// change to another language in order to translate this word // change to another language in order to translate this word
if(length > 0) if(length > 0)
wordx[-1] = ' '; // prevent this affecting the pronunciation of the pronuncable part wordx[-1] = ' '; // prevent this affecting the pronunciation of the pronuncable part
} }
SetSpellingStress(phonemes,0);
SetSpellingStress(phonemes,0,posn);


// anything left ? // anything left ?
if(*wordx != ' ') if(*wordx != ' ')
return(count); 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 Translator::TranslateWord2(char *word, WORD_TAB *wtab, int pre_pause, int next_pause)
{//====================================================================================== {//======================================================================================
int flags=0; int flags=0;
if(word_flags & FLAG_EMBEDDED) if(word_flags & FLAG_EMBEDDED)
{ {
embedded_flag = SFLAG_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;

case EMBED_F:
option_emphasis = value;
break;
embedded_cmd = embedded_list[embedded_read++];
value = embedded_cmd >> 8;


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) if(word[0] == 0)
new_language = (char *)(&p[1]); new_language = (char *)(&p[1]);
if(new_language[0]==0) if(new_language[0]==0)
new_language = "en"; 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) if(switch_phonemes >= 0)
{ {
// re-translate the word using the new translator // re-translate the word using the new translator
srcix = source_ix+1; srcix = source_ix+1;
} }
else 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) if(ph_code == phonX1)
{ {
// a language specific action // a language specific action

+ 3
- 1
src/translate.h View File

private: private:
int TranslateWord2(char *word, WORD_TAB *wtab, int pre_pause, int next_pause); int TranslateWord2(char *word, WORD_TAB *wtab, int pre_pause, int next_pause);
int TranslateLetter(char *letter, char *phonemes, int control); 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 WriteMnemonic(int *ix, int mnem);
void MakePhonemeList(int post_pause, int new_sentence); void MakePhonemeList(int post_pause, int new_sentence);
int SubstitutePhonemes(PHONEME_LIST2 *plist_out); int SubstitutePhonemes(PHONEME_LIST2 *plist_out);
extern int speech_parameters[]; extern int speech_parameters[];


extern Translator *translator; extern Translator *translator;
extern Translator *translator2;
extern const unsigned short *charsets[N_CHARSETS]; extern const unsigned short *charsets[N_CHARSETS];
extern char dictionary_name[40]; extern char dictionary_name[40];
extern char ctrl_embedded; // to allow an alternative CTRL for embedded commands extern char ctrl_embedded; // to allow an alternative CTRL for embedded commands
extern void SetLengthMods(Translator *tr, int value); extern void SetLengthMods(Translator *tr, int value);


Translator *SelectTranslator(const char *name); 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); int CompileDictionary(const char *dsource, const char *dict_name, FILE *log, char *err_name,int flags);
void LoadConfig(void); void LoadConfig(void);
int PhonemeCode(unsigned int mnem); int PhonemeCode(unsigned int mnem);

Loading…
Cancel
Save