Browse Source

[1.36.12]

lang=hr: adjust phonemes [S tS tS; Z dZ dZ;]


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

+ 1
- 1
dictsource/de_list View File

_! 'aUs_|@-*,u:fe:ts,aIC@n _! 'aUs_|@-*,u:fe:ts,aIC@n
_? f@-*'Age:ts,aIC@n _? f@-*'Age:ts,aIC@n
_' 'apOst@-*,Of _' 'apOst@-*,Of
_" 'anf,y:*UNsts,aIC@n
_" tsi:t'A:t
_/ S@-*'Egst@-*IC _/ S@-*'Egst@-*IC
_( kl'am3||_|'aUf _( kl'am3||_|'aUf
_) kl'am3||ts'u: _) kl'am3||ts'u:

+ 10
- 11
dictsource/dict_phonemes View File



Dictionary ro_dict Dictionary ro_dict


@ @- @I a aI aU e ea
eI eU i I^ iI o Oa oI
oU u uI y
@ @- @I @U a aI aU e
ea eI eU i I^ iI iU o
Oa oI oU u uI y


* *; b c d dZ f g * *; b c d dZ f g
h j k l m m; n p h j k l m m; n p


Dictionary ko_dict Dictionary ko_dict


a aI@ aU@ E e e: i i@3
IR ji o O~ u u- U@ V
y:
a e E i ji o u u-
V


b d dZ g h j k k`
l m n N p p` r s
s` t t` tS tS` w
b c C c` ch d dZ g
h j J k k` kh l m
n N p p` ph r s S;
s` t t` th w




Dictionary hbs_dict Dictionary hbs_dict


Dictionary rw_dict Dictionary rw_dict


a a# e e# i i# o u
u#
a e i o u


* : b B c d dZ f * : b B c d dZ f
g h j J k l m n g h j J k l m n

+ 4
- 2
dictsource/en_list View File

disconsolate dIsk'0ns@l@t disconsolate dIsk'0ns@l@t
disc dIsk // for discs disc dIsk // for discs
disciple dIs'aIp@L disciple dIs'aIp@L
discourse $1
discounted $2 discounted $2
disease dIz'i:z disease dIz'i:z
dishes dISIz dishes dISIz
donor doUn3 donor doUn3
dont doUnt $only dont doUnt $only
dose doUs dose doUs
dosage doUsIdZ
dramatic dr@matIk dramatic dr@matIk
drawer drO@ drawer drO@
drier draI3 drier draI3
live laIv $onlys live laIv $onlys
live lIv $verb live lIv $verb
livestock l'aIvst,0k livestock l'aIvst,0k
liver lIv3
lively laIvlI2 lively laIvlI2
llama lA:m@ llama lA:m@
loch l0x loch l0x
piteous pIti@s piteous pIti@s
pituitary $2 pituitary $2
plaguing pleIgIN plaguing pleIgIN
plugin plVgIn
plunging plVndZIN plunging plVndZIN
plus plVs plus plVs
poky poUkI2 poky poUkI2
settee $2 settee $2
severe sIv'i@3 $only severe sIv'i@3 $only
severely sIv'i@3lI2 $verbf severely sIv'i@3lI2 $verbf
sex sEks // sexism
several sEvr@L several sEvr@L
shampoo $2 shampoo $2
sheriff S'ErIf sheriff S'ErIf
trilogy trIl@dZI2 trilogy trIl@dZI2
trio tri:oU trio tri:oU
trojan troUdZ@n trojan troUdZ@n
trolley tr0lI2
trophy troUfI2 trophy troUfI2
truely tru:lI2 $verbf truely tru:lI2 $verbf
truest tru:@st truest tru:@st

+ 13
- 4
dictsource/en_rules View File

ann (eal a2n ann (eal a2n
ann (ih a2n ann (ih a2n
ann (oun a2n ann (oun a2n
ann (oy a2n
_) ann (oy a2n
ann (ui a2n ann (ui a2n
ann (ul a2n ann (ul a2n
ann (un a2n ann (un a2n
&) ella (_ 'El@ &) ella (_ 'El@
&v) eller (_ @l@ &v) eller (_ @l@
@) elli (_ 'ElI2 @) elli (_ 'ElI2
&) elling @lI2N
&) ell (ous @l &) ell (ous @l
cib) el (_ El cib) el (_ El
xc) el (_ 'El xc) el (_ 'El
gg g gg g
g (e dZ g (e dZ
_) gaol dZeIl _) gaol dZeIl
g) ged (_ gId
g (eek g g (eek g
geous dZ=@s geous dZ=@s
g (E dZ g (E dZ
K) hl L K) hl L
&) hold (_$4 hoUld &) hold (_$4 hoUld
holme hoUm holme hoUm
&) hood (_S4 hUd
&) hoods (_S5 hUdz
_) h (our _) h (our
_) h (onor _) h (onor
_) h (onou _) h (onou
XC) iv (el Iv XC) iv (el Iv
_g) iv (e Iv _g) iv (e Iv
_l) iv (e Iv _l) iv (e Iv
l) iv (er Iv
r) iv (er Iv r) iv (er Iv
dr) iv (er aIv dr) iv (er aIv
sh) iv (er Iv sh) iv (er Iv
y) ol (k oU y) ol (k oU
p) oll (u @l p) oll (u @l
r) oll oUl r) oll oUl
tr) oll (A 0l
car) oll @l car) oll @l
br) oll 0l br) oll 0l
t) oll oUl t) oll oUl
rea (C% r,i:@ rea (C% r,i:@
_) rea (dC r,i:@ _) rea (dC r,i:@
rea (gen rI2eI rea (gen rI2eI
_) re (ali ,ri:
_) re (all ,ri:
_) re (au@P2 ,ri: _) re (au@P2 ,ri:
re (ck rE re (ck rE
reckon rEk@n reckon rEk@n
rea (l ri@ rea (l ri@
?3 rea (l ri: ?3 rea (l ri:
rea (lit rI2a rea (lit rI2a
rea (lloc rI2a
_) rea (lloP2 ,ri:
rea (lm rE rea (lm rE
rea (lte rI20 rea (lte rI20
re (ment r@ re (ment r@
_) tele tElI2 _) tele tElI2
r) tga (g gI r) tga (g gI
&) tia (_ S@ &) tia (_ S@
&s) tia (_ tS@
@) t (ia S @) t (ia S
pi) t (ia t pi) t (ia t
is) t (ian+ t is) t (ian+ t
@) u (ctive 'V @) u (ctive 'V
u (guC V u (guC V
f) u (gal 'ju: f) u (gal 'ju:
pl) ug Vg
ug (er_ u:g ug (er_ u:g
s) ugge (st @dZE s) ugge (st @dZE
mp) ug (n ju: mp) ug (n ju:
y j y j
y (C_ I y (C_ I
y (CC I y (CC I
_) y (C@ I
_) y (n@ V
_) y (s@ V
C) y (abl I2 C) y (abl I2
y (y y (y
y (C I y (C I

+ 2
- 1
dictsource/hbs_rules View File

l l l l
K) l (K l- K) l (K l-
lj (+ l^ lj (+ l^
v) lj lj


.group m .group m
m m m m
rr R rr R
r (_ R r (_ R


K) r (K 'r-
K) r (K R // ??




.group s .group s

+ 250
- 35
dictsource/ro_list
File diff suppressed because it is too large
View File


+ 43
- 47
dictsource/ro_rules View File

.group a .group a
a a a a
ai aI ai aI
ai (_ 'aI
ai (a aj
ai (_ 'aI
au aU // ?? only at end of word ?? au aU // ?? only at end of word ??
c) au (t au
au (_ 'aU au (_ 'aU
a (AAA a a (AAA a
&) a (_S1q a &) a (_S1q a


gi) a (_S1q 'a
gi) a (_S1q a
V@) a (N_ 'a V@) a (N_ 'a
ăi) a (_ 'a ăi) a (_ 'a
@) abil (_ 'abil @) abil (_ 'abil
ă @ ă @
ăi (_ @I ăi (_ @I
ău @U // ?? only at end of word ?? ău @U // ?? only at end of word ??
c) ău (t @u
ău (_ '@U ău (_ '@U
@) ăte (_S3t @te @) ăte (_S3t @te
@) ătă (_S3t @t@ @) ătă (_S3t @t@
@) cnea (_ kne'a @) cnea (_ kne'a





.group d .group d
d d d d
dd d dd d
ei (_ eI ei (_ eI
// eu eU // only at end of word ?? // eu eU // only at end of word ??
// eu e[u // ?? // eu e[u // ??
eu (_ 'eU
@) eu (l_ 'eu
@) eu (_ eu
@) eu (_N 'eU
ea ea ea ea
&) ea (_S2q ea &) ea (_S2q ea
&) eSi eaj &) eSi eaj
@) eşului (_ =eSuluI @) eşului (_ =eSuluI
@) eşilor (_ =eSilor @) eşilor (_ =eSilor


@) ec (a_ =ek
@) ec (ă_ =ek
@) ec (ii_ =ek
@) ec (ile_ =ek
@) ec (ilor_ =ek
@At) ec (i@_ etS
@At) ec (A_ ek
@At) ec (ii_ eTtS
//@) ec (a_ =ek
//@) ec (ă_ =ek
//@) ec (ii_ =etS
//@) ec (i_ =etS
//@) ec (ilor_ =etS
//@At) ec (i@_ etS
//@At) ec (A_ ek
@At) ec (ii_ etS
// &) es (_S1q e // &) es (_S1q e
&C) e (re_ %e &C) e (re_ %e
_ac) ee (a eI _ac) ee (a eI


r) ei (er_ 'eI r) ei (er_ 'eI

@) e (re_ =e @) e (re_ =e
@) e (ri_ =e @) e (ri_ =e
@) e (rea_ =e @) e (rea_ =e
@) e (rii_ =e @) e (rii_ =e
@) e (rei_ =e
i) e (re_ e i) e (re_ e
i) e (ri_ e i) e (ri_ e
i) e (rii_ e i) e (rii_ e
g (i dZ g (i dZ
gii dZiI gii dZiI
gh g gh g
&) gii (_ dZ'iI
&) gi (A_ dZi





.group h .group h
&) icile (_ =itSile &) icile (_ =itSile
&) icilor (_ =itSilor &) icilor (_ =itSilor
@) icii (_ =itSiI @) icii (_ =itSiI
@) icei (_ =itSeI


scr) i (e 'i scr) i (e 'i
&) ing (_ %iNg // foreign words &) ing (_ %iNg // foreign words
&) le (_S2t le &) le (_S2t le
&) lor (_S3t lor &) lor (_S3t lor
&) lui (_S3t luI &) lui (_S3t luI
&) logi (A_ lodZ'i
&) logii (_ lodZ'iI




.group m .group m
_) oi oI _) oi oI
oi (_ 'oI oi (_ 'oI
ou oU ou oU
ou (_ 'oU
ou (_N 'oU
ou (_ ou
o (AAA o o (AAA o








.group u .group u
u u
u (A w
_) ui uI
ui (_ uI
ui (e wi
V&) ui (_N u'i

u u
u (A w
_) ui uI
ui (_ 'uI
r) ui (n ui
ui (e wi
V&) ui (_N u'i

dest) ul ul
&) ul (_S2t ul &) ul (_S2t ul
@ic) ul (_S2t ul @ic) ul (_S2t ul
@ic) ule (_S3t ule @ic) ule (_S3t ule




.group x .group x
x ks
A) x (A gz
ma) x (i ks
cone) x (iu ks
i) x (e ks
o) x (e ks // boxele
u) x (a ks
a) x (a ks
a) x (ă ks
a) x (e ks
i) x (a ks
o) x (a ks
A) x (â ks
@) x (ibil ks
o) x (i ks // oxigen
a) x (ia ks // axial
ale) x ks
ta) x ks
x ks
e) x (a gz
e) x (e gz
e) x (i gz
me) x (ic ks
e) x (iA_ ks
e) x (iu ks
e) x (Ag ks
le) x ks




.group y .group y
D_) % la_sut@ D_) % la_sut@
% p@-*otSent % p@-*otSent
$ dolar $ dolar
+ plus
& ampersand
© k'apiraIt
@ a*'ond
/ sleS
€ 'eU*o
° g@-*ade


, (D v'irgul@ , (D v'irgul@


**) * (_ _:: **) * (_ _::






+ 5
- 5
dictsource/zh_rules View File



e (Dn @ //en eng e (Dn @ //en eng


er @r
e1r @r55
e2r @r35
e3r @r214
e4r @r51
er (K @r
e1r (K @r55
e2r (K @r35
e3r (K @r214
e4r (K @r51


.group f .group f
f f f f

+ 21
- 4
phsource/compile_report View File

pl 15 109 pl 15 109
sk 29 127 sk 29 127
cs 6 127 cs 6 127
hr 20 132
hr 26 132
mk 3 133 mk 3 133
sr 14 132 sr 14 132
ru 39 129 ru 39 129
tr 18 122 tr 18 122
ku 17 121 ku 17 121
id 15 119 id 15 119
rw 12 122
ko 18 114
rw 15 124
ko 18 145


Data file Used by Data file Used by
b/b [b] base b/b [b] base
[dZ;] base [dZ;] base
[dz;] base [dz;] base
[J] hi [J] hi
[dZ] hr
[dZ;] hr
[dZ;] mk [dZ;] mk
[dZ;] ru [dZ;] ru
dzh/dzh2 [dZ] hr
[dZ;] hr
dzh/dz_pzd [J] base dzh/dz_pzd [J] base
[J2] hi [J2] hi
[J] tr [J] tr
[dZ;] base [dZ;] base
[dz;] base [dz;] base
[J] hi [J] hi
[dZ] hr
[dZ;] hr
[dZ;] mk [dZ;] mk
[dZ;] ru [dZ;] ru
dzh/xdz_pzd [J] base dzh/xdz_pzd [J] base
[J2] hi [J2] hi
envelope/i_risefall [11] zh envelope/i_risefall [11] zh
envelope/i_risefall2 [+2] rw
envelope/p_214 [214] zh envelope/p_214 [214] zh
envelope/p_512 [8] vi envelope/p_512 [8] vi
envelope/p_fall [2] vi envelope/p_fall [2] vi
[22] zh [22] zh
[33] zh [33] zh
[53] zh [53] zh
[+] rw
envelope/p_fallrise [4] vi envelope/p_fallrise [4] vi
envelope/p_level [1] vi envelope/p_level [1] vi
[3] zhy [3] zhy
ufric/sh_ [S] base ufric/sh_ [S] base
[S] fr [S] fr
[s#] pt_pt [s#] pt_pt
ufric/sh3 [S] hr
[Z] hr
ufric/sh_pzd [S;] base ufric/sh_pzd [S;] base
[S;] ro [S;] ro
[s`] ko
ufric/sh_pzd_ [S;] base ufric/sh_pzd_ [S;] base
[Z;] base [Z;] base
ufric/sh_pzd2 [S] sr ufric/sh_pzd2 [S] sr
[c] zhy [c] zhy
ustop/tsh_ [tS] base ustop/tsh_ [tS] base
[c] zhy [c] zhy
ustop/tsh2 [tS] hr
[dZ] hr
ustop/t_short [t.] hi ustop/t_short [t.] hi
[t] sk [t] sk
[t] el [t] el
[ts;] base [ts;] base
[ch] hi [ch] hi
[tS;] ru [tS;] ru
[tS`] ko
ustop/ts_pzd_ [c] hi ustop/ts_pzd_ [c] hi
[c] hu [c] hu
ustop/ts_pzd2 [c] hi ustop/ts_pzd2 [c] hi
[c] hu [c] hu
[c`] ko
ustop/ts_pzd3 [tS;] hr
[dZ;] hr
ustop/t_sr [d] sr ustop/t_sr [d] sr
[t] sr [t] sr
ustop/ts_rfx [ts.] zh ustop/ts_rfx [ts.] zh
voc/zh [Z] base voc/zh [Z] base
[z.] base [z.] base
[R^] sk [R^] sk
[Z] hr
[Z] sr [Z] sr
[Z;] ro [Z;] ro
voc/zh_ [Z] base voc/zh_ [Z] base
[z.] base [z.] base
[Z] hr
[Z;] ro [Z;] ro
voc/zh_2 [R^/] sk voc/zh_2 [R^/] sk
voc/z_pzd [Z;] base voc/z_pzd [Z;] base

BIN
phsource/dzh/dzh View File


+ 2
- 0
phsource/mbrola/en1 View File

0 aI@ NULL 60 aI @ 0 aI@ NULL 60 aI @
0 aU@ NULL 75 aU @ 0 aU@ NULL 75 aU @
0 x NULL 0 k 0 x NULL 0 k
0 t2 NULL 0 t


+ 1
- 0
phsource/mbrola/ro1 View File

0 a e 15 a _ 0 a e 15 a _
0 a NULL 0 a 0 a NULL 0 a
0 @- NULL 0 NULL 0 @- NULL 0 NULL
0 j NULL 0 i
0 j/ NULL 0 j 0 j/ NULL 0 j
0 I^ _ 0 I 0 I^ _ 0 I
0 I^ NULL 20 I _ 0 I^ NULL 20 I _

+ 1
- 0
phsource/mbrola/us View File

0 p NULL 0 p_h 0 p NULL 0 p_h
0 t NULL 0 t_h 0 t NULL 0 t_h
0 k NULL 0 k_h 0 k NULL 0 k_h
0 t2 NULL 0 t

+ 1
- 0
phsource/mbrola/us3 View File

0 U@ NULL 50 U r 0 U@ NULL 50 U r
0 i@ NULL 50 I @ 0 i@ NULL 50 I @
0 i@3 NULL 60 i r 0 i@3 NULL 60 i r
0 t2 NULL 0 t





+ 72
- 0
phsource/ph_croatian View File



phoneme S // this is letter š
vls pla frc sibilant
vowelin f1=0 f2=2100 100 300 f3=-100 80
vowelout f1=0 f2=2100 100 300 f3=-100 80
length 30
lengthmod 3
wave ufric/sh3%220
before _ ufric/sh3%160
switchvoicing Z
endphoneme

phoneme tS // this is letter č
vls pla afr sibilant
vowelin f1=0 f2=1900 100 200 f3=-100 80
length 90
lengthmod 2
wave ustop/tsh2
before _ ustop/tsh2%70
switchvoicing dZ
endphoneme

phoneme tS; // this is letter ć
vls pal afr sibilant palatal
vowelin f1=0 f2=2500 300 500 f3=300 80 rate len=70
lengthmod 2
wave ustop/ts_pzd3
before _ ustop/ts_pzd3%80
switchvoicing dZ;
endphoneme


phoneme Z // letter ž
vcd pla frc sibilant
vowelin f1=0 f2=2000 0 300 f3=-200 80
vowelout f1=2 f2=2000 0 300 f3=-200 80 brk
formants voc/zh+ufric/sh3%240
before _ voc/zh_+ufric/sh3%170
lengthmod 6
switchvoicing S
endphoneme

phoneme dZ //letter dž
vcd pla afr sibilant
vowelin f1=2 f2=1900 100 300 f3=100 80
vowelout f1=2 f2=1900 100 300 f3=100 80 brk
formants dzh/dzh2+ustop/tsh2%140
before _ dzh/dzh_+ustop/tsh2%100
after _ NULL
after @ dzh/xdzh
lengthmod 5
switchvoicing tS
endphoneme

phoneme dZ; // letter đ
vcd pla afr sibilant palatal
vowelin f1=2 f2=2500 300 500 f3=300 80 rate len=70
formants dzh/dzh2+ustop/ts_pzd3%140
before _ dzh/dzh_+ustop/ts_pzd3%80
after _ NULL
after @ dzh/xdzh
lengthmod 5
switchvoicing tS;
endphoneme






phoneme @ // Schwa phoneme @ // Schwa
vowel starttype (@) endtype (@) vowel starttype (@) endtype (@)
formants vowel/@_hgh formants vowel/@_hgh
length 50 length 50
endphoneme endphoneme




+ 115
- 0
phsource/ph_kinyarwanda View File


//******************************
// Phonemes for Kinyarwanda (rw), inherits "base2"
//******************************
phoneme a
vowel starttype (a) endtype (a)
length 180
formants vowel/a_2
reduceto a/ 4
beforepause a#
beforevowel NULL
endphoneme


phoneme a/
vowel starttype (@) endtype (@)
length 180
formants vowel/a#
beforepause a#
beforevowel NULL
endphoneme


phoneme e
vowel starttype (e) endtype (e)
length 170
formants vowel/e
beforepause e#
beforevowel NULL
endphoneme


phoneme i
vowel starttype (i) endtype (i)
length 150
formants vowel/i
beforepause i#
beforevowel NULL
endphoneme


phoneme o
vowel starttype (o) endtype (o)
length 170
formants vowel/o
beforepause o#
beforevowel NULL
endphoneme


phoneme u
vowel starttype (u) endtype (u)
length 160
formants vowel/u_bck
beforepause u#
beforevowel NULL
endphoneme


phoneme a#
vowel starttype (@) endtype (@)
length 100
formants vowel/a#
beforevowel NULL
endphoneme

phoneme e#
vowel starttype (e) endtype (e)
length 100
formants vowel/e
beforevowel NULL
endphoneme


phoneme i#
vowel starttype (i) endtype (i)
length 100
formants vowel/i
linkout ;
beforevowel NULL
endphoneme


phoneme o#
vowel starttype (o) endtype (o)
length 170
formants vowel/o
beforevowel NULL
endphoneme


phoneme u#
vowel starttype (u) endtype (u)
length 100
formants vowel/u_bck
beforevowel NULL
endphoneme


phoneme : // Lengthen previous vowel by "length"
virtual
length 120
endphoneme

phoneme + // high tone, use after a vowel
stress
tone 0 30 envelope/p_fall NULL
endphoneme

phoneme +2 // high tone, use after a vowel
stress
tone 0 30 envelope/i_risefall2 NULL
endphoneme


+ 129
- 0
phsource/ph_korean View File

phoneme a
vowel starttype (a) endtype (a)
length 190
formants vowel/a
endphoneme
phoneme E
vowel starttype (e) endtype (e)
length 180
formants vowel/e_mid2
endphoneme
phoneme e
vowel starttype (e) endtype (e)
length 180
formants vowel/e
endphoneme
phoneme i
vowel starttype (i) endtype (i)
length 160
formants vowel/i
endphoneme
phoneme o
vowel starttype (o) endtype (o)
length 180
formants vowel/o_2
endphoneme
phoneme V
vowel starttype (a) endtype (a)
length 180
formants vowel/aa_8
endphoneme
phoneme Y
vowel starttype (@) endtype (@)
length 180
formants vowel/y#
endphoneme
phoneme u
vowel starttype (u) endtype (u)
length 180
formants vowel/u_bck
endphoneme

phoneme y
vowel starttype (i) endtype (u)
length 180
formants vowel/u#_6
endphoneme

phoneme u-
vowel starttype (u) endtype (u)
length 180
formants vowel/u_unr
endphoneme


phoneme ji
vowel starttype (i) endtype (i)
length 220
formants vdiph/yi_fr
endphoneme


phoneme p`
vls blb stop
vowelin f1=0 f2=1000 -50 -100 f3=-200 80 amp=31
vowelout f1=0 f2=1000 -500 -350 f3=-300 80 rms=30
lengthmod 2
wave ustop/p_unasp%130
endphoneme


phoneme t` // dental variant of /t/
vls dnt stop
vowelin f1=0 f2=1600 -300 300 f3=-100 80 amp=31
vowelout f1=0 f2=1600 -300 250 f3=-100 80 rms=20
lengthmod 2
wave ustop/t_dnt
switchvoicing d
endphoneme

phoneme c`
vls pal afr sibilant palatal
vowelin f1=0 f2=2700 400 600 f3=300 80 rate len=70 amp=31
lengthmod 2
wave ustop/ts_pzd2%120
switchvoicing dZ;
endphoneme


phoneme k`
vls vel stop
vowelin f1=0 f2=2300 200 400 f3=-100 80 amp=31
vowelout f1=0 f2=2300 300 400 f3=-100 80 rms=20
lengthmod 2
wave ustop/k_unasp%130
endphoneme


phoneme s`
vls alv frc sibilant
vowelin f1=0 f2=1700 -300 300 f3=-100 80 amp=31
vowelout f1=0 f2=1700 -300 250 f3=-100 80 rms=20
lengthmod 3
wave ufric/s%120
before j ufric/sh_pzd%120
before i ufric/sh_pzd%120
endphoneme


phoneme r // flap [**]
liquid alv
beforenotvowel l
vowelout f1=3 f2=1600 -300 300 f3=-300 80 rms=35 len=15
vowelin f1=2 f2=1600 -300 300 f3=-100 80 len=20
formants r3/@tap
after (e) r3/@tap2
after (i) r3/@tap2
lengthmod 3
endphoneme



+ 1
- 1
phsource/phonemes View File

phonemetable rw base2 phonemetable rw base2
include ph_kinyarwanda include ph_kinyarwanda


phonemetable ko base
phonemetable ko hi
include ph_korean include ph_korean

BIN
phsource/ufric/sh3.wav View File


BIN
phsource/ustop/ts_pzd3.wav View File


BIN
phsource/ustop/tsh2.wav View File


+ 12
- 7
src/Makefile View File

# remove -fno-exceptions if it causes problems with stdio library on some platforms (ARM) # remove -fno-exceptions if it causes problems with stdio library on some platforms (ARM)


PREFIX=/
BINDIR=$(PREFIX)/usr/bin
INCDIR=$(PREFIX)/usr/include/espeak
LIBDIR=$(PREFIX)/usr/lib
DATADIR=$(PREFIX)/usr/share/espeak-data
PREFIX=/usr
BINDIR=$(PREFIX)/bin
INCDIR=$(PREFIX)/include/espeak
LIBDIR=$(PREFIX)/lib
DATADIR=$(PREFIX)/share/espeak-data


RELEASE = 1.36 RELEASE = 1.36
BIN_NAME = speak BIN_NAME = speak
LN_SF = /bin/ln -sf LN_SF = /bin/ln -sf
MKDIR = mkdir -p MKDIR = mkdir -p


#AUDIO = pulseaudio
AUDIO = portaudio AUDIO = portaudio

#AUDIO = pulseaudio
#AUDIO = sada


ifeq ($(AUDIO),pulseaudio) ifeq ($(AUDIO),pulseaudio)
WAVE=wave_pulse.cpp WAVE=wave_pulse.cpp
LIB_AUDIO=-lportaudio LIB_AUDIO=-lportaudio
USE_AUDIO=-DUSE_PORTAUDIO USE_AUDIO=-DUSE_PORTAUDIO
else else
ifeq ($(AUDIO),sada)
WAVE=wave_sada.cpp
USE_AUDIO=-DUSE_SADA
else
WAVE=wave.cpp WAVE=wave.cpp
endif endif
endif endif
endif


speak_SOURCES = speak.cpp compiledict.cpp dictionary.cpp intonation.cpp \ speak_SOURCES = speak.cpp compiledict.cpp dictionary.cpp intonation.cpp \
readclause.cpp setlengths.cpp numbers.cpp synth_mbrola.cpp \ readclause.cpp setlengths.cpp numbers.cpp synth_mbrola.cpp \

+ 18
- 0
src/dictionary.cpp View File

switch(langopts.stress_rule) switch(langopts.stress_rule)
{ {
case 8:
// stress on first syllable, unless it is a light syllable
if(syllable_weight[1] > 0)
break;
// else drop through to case 1
case 1:
// stress on second syllable
if((stressed_syllable == 0) && (vowel_count > 2))
{
stressed_syllable = 2;
if(max_stress == 0)
{
vowel_stress[stressed_syllable] = 4;
}
max_stress = 4;
}
break;

case 2: case 2:
// a language with stress on penultimate vowel // a language with stress on penultimate vowel



+ 8
- 0
src/intonation.cpp View File

int count; int count;
int n_primary; int n_primary;
int count_primary; int count_primary;
PHONEME_TAB *ph;
int ph_end=n_phoneme_list; int ph_end=n_phoneme_list;


SYLLABLE syllable_tab2[N_PHONEME_LIST]; SYLLABLE syllable_tab2[N_PHONEME_LIST];
p->pitch2 = x; p->pitch2 = x;
} }


if(p->tone_ph)
{
ph = phoneme_tab[p->tone_ph];
x = (p->pitch1 + p->pitch2)/2;
p->pitch2 = x + ph->end_type;
p->pitch1 = x + ph->start_type;
}


if(syl->flags & SYL_EMPHASIS) if(syl->flags & SYL_EMPHASIS)
{ {

+ 1
- 1
src/synthdata.cpp View File

#include "translate.h" #include "translate.h"
#include "wave.h" #include "wave.h"


const char *version_string = "1.36.07 25.Mar.08";
const char *version_string = "1.36.12 10.Apr.08";
const int version_phdata = 0x013400; const int version_phdata = 0x013400;


int option_device_number = -1; int option_device_number = -1;

+ 15
- 1
src/tr_languages.cpp View File

#define OFFSET_CYRILLIC 0x420 #define OFFSET_CYRILLIC 0x420
#define OFFSET_DEVANAGARI 0x900 #define OFFSET_DEVANAGARI 0x900
#define OFFSET_TAMIL 0xb80 #define OFFSET_TAMIL 0xb80
#define OFFSET_KOREAN 0x1100




static const unsigned int replace_cyrillic_latin[] = static const unsigned int replace_cyrillic_latin[] =
break; break;


case L('k','o'): // Korean, TEST case L('k','o'): // Korean, TEST
{
static const char ko_ivowels[] = {0x63,0x64,0x67,0x68,0x6d,0x72,0x74,0x75,0}; // y and i vowels
static const char ko_voiced[] = {0x02,0x05,0x06,0xab,0xaf,0xb7,0xbc,0}; // voiced consonants, l,m,n,N
tr = new Translator(); tr = new Translator();

tr->letter_bits_offset = OFFSET_KOREAN;
memset(tr->letter_bits,0,sizeof(tr->letter_bits));
SetLetterBitsRange(tr,LETTERGP_A,0x61,0x75);
SetLetterBits(tr,LETTERGP_Y,ko_ivowels);
SetLetterBits(tr,LETTERGP_G,ko_voiced);

tr->langopts.stress_rule = 8; // ?? 1st syllable if it is heavy, else 2nd syllable
tr->langopts.param[LOPT_UNPRONOUNCABLE] = 1; // disable check for unpronouncable words tr->langopts.param[LOPT_UNPRONOUNCABLE] = 1; // disable check for unpronouncable words
tr->langopts.numbers = 0x0401;
}
break; break;


case L('k','u'): // Kurdish case L('k','u'): // Kurdish
SetupTranslator(tr,stress_lengths_ta,stress_amps_ta); SetupTranslator(tr,stress_lengths_ta,stress_amps_ta);
tr->langopts.length_mods0 = tr->langopts.length_mods; // don't lengthen vowels in the last syllable tr->langopts.length_mods0 = tr->langopts.length_mods; // don't lengthen vowels in the last syllable


tr->langopts.stress_rule = 1;
tr->langopts.stress_rule = 0;
tr->langopts.stress_flags = 0x10004; // use 'diminished' for unstressed final syllable tr->langopts.stress_flags = 0x10004; // use 'diminished' for unstressed final syllable
tr->letter_bits_offset = OFFSET_TAMIL; tr->letter_bits_offset = OFFSET_TAMIL;
tr->langopts.param[LOPT_WORD_MERGE] = 1; // don't break vowels betwen words tr->langopts.param[LOPT_WORD_MERGE] = 1; // don't break vowels betwen words

+ 576
- 0
src/wave_sada.cpp View File

/***************************************************************************
* Copyright (C) 2008, Sun Microsystems, Inc. *
* eSpeak driver for Solaris Audio Device Architecture (SADA) *
* Written by Willie Walker, based on the eSpeak PulseAudio driver *
* from Gilles Casse *
* *
* This program is free software; you can redistribute it and/or modify *
* it under the terms of the GNU General Public License as published by *
* the Free Software Foundation; either version 3 of the License, or *
* (at your option) any later version. *
* *
* This program is distributed in the hope that it will be useful, *
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
* GNU General Public License for more details. *
* *
* You should have received a copy of the GNU General Public License *
* along with this program; if not, write to the *
* Free Software Foundation, Inc., *
* 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
***************************************************************************/

#include "speech.h"

#ifdef USE_ASYNC
// This source file is only used for asynchronious modes

#include <errno.h>
#include <string.h>
#include <stropts.h>
#include <assert.h>
#include <stdlib.h>
#include <unistd.h>
#include <fcntl.h>
#include <sys/audioio.h>

#include "wave.h"
#include "debug.h"

enum {ONE_BILLION=1000000000};
#define SAMPLE_RATE 22050
#define SAMPLE_SIZE 16

#ifdef USE_SADA

static t_wave_callback* my_callback_is_output_enabled=NULL;

static const char *sun_audio_device = "/dev/audio";
static int sun_audio_fd = -1;

// The total number of 16-bit samples sent to be played via the
// wave_write method.
//
static uint32_t total_samples_sent;

// The total number of samples sent to be played via the wave_write
// method, but which were never played because of a call to
// wave_close.
//
static uint32_t total_samples_skipped;

// The last known playing index after a call to wave_close.
//
static uint32_t last_play_position=0;

//>
// wave_init
//
// DESCRIPTION:
//
// initializes the audio subsytem.
//
// GLOBALS USED/MODIFIED:
//
// sun_audio_fd: modified to hold the file descriptor of the opened
// audio device.
//
//<wave_init

void wave_init() {
ENTER("wave_init");

audio_info_t ainfo;
char *audio_device = NULL;

audio_device = getenv("AUDIODEV");
if (audio_device != NULL) {
if ((sun_audio_fd = open(audio_device, O_WRONLY)) < 0) {
SHOW("wave_init() could not open: %s (%d)\n",
audio_device, sun_audio_fd);
}
}

if (sun_audio_fd < 0) {
if ((sun_audio_fd = open(sun_audio_device, O_WRONLY)) < 0) {
SHOW("wave_init() could not open: %s (%d)\n",
sun_audio_device, sun_audio_fd);
}
}

SHOW("wave_init() sun_audio_fd: %d\n", sun_audio_fd);

if (sun_audio_fd < 0) {
return;
}

ioctl(sun_audio_fd, AUDIO_GETINFO, &ainfo);
SHOW("wave_init() play buffer size: %d\n", ainfo.play.buffer_size);
ainfo.play.encoding = AUDIO_ENCODING_LINEAR;
ainfo.play.channels = 1;
ainfo.play.sample_rate = SAMPLE_RATE;
ainfo.play.precision = SAMPLE_SIZE;

if (ioctl(sun_audio_fd, AUDIO_SETINFO, &ainfo) == -1) {
SHOW("wave_init() failed to set audio params: %s\n", strerror(errno));
close(sun_audio_fd);
return;
}
}

//>
// wave_open
//
// DESCRIPTION:
//
// opens the audio subsystem given a specific API (e.g., "alsa",
// "oss", ...). We ignore the_api and just return the sun_audio_fd we
// opened in wave_init. This return value will be passed in as the
// theHandler parameter in all other methods.
//
// PARAMETERS:
//
// the_api: "alsa", "oss" (ignored)
//
// GLOBALS USED/MODIFIED:
//
// sun_audio_fd: used as return value
//
// RETURNS:
//
// sun_audio_fd opened in wave_init, which is passed in as theHandler
// parameter in all other methods
//
//<wave_open

void* wave_open(const char* the_api)
{
ENTER("wave_open");
return((void*) sun_audio_fd);
}

//>
// wave_write
//
// DESCRIPTION:
//
// Meant to be asynchronous, it supplies the wave sample to the lower
// audio layer and returns. The sample is played later on. [[[WDW -
// we purposely do not open the audio device as non-blocking because
// managing that would be a pain. So, we rely a lot upon fifo.cpp and
// event.cpp to not overload us, allowing us to get away with a
// blocking write. event.cpp:polling_thread in particular appears to
// use get_remaining_time to prevent flooding.]]]
//
// PARAMETERS:
//
// theHandler: the audio device file descriptor
// theMono16BitsWaveBuffer: the audio data
// theSize: the number of bytes (not 16-bit samples)
//
// GLOBALS USED/MODIFIED:
//
// total_samples_sent: modified based upon 16-bit samples sent
//
// RETURNS:
//
// the number of bytes (not 16-bit samples) sent
//
//<wave_write

size_t wave_write(void* theHandler,
char* theMono16BitsWaveBuffer,
size_t theSize)
{
size_t num;
ENTER("wave_write");
if (my_callback_is_output_enabled && (0==my_callback_is_output_enabled())) {
SHOW_TIME("wave_write > my_callback_is_output_enabled: no!");
return 0;
}
num = write((int) theHandler, theMono16BitsWaveBuffer, theSize);

// Keep track of the total number of samples sent -- we use this in
// wave_get_read_position and also use it to help calculate the
// total_samples_skipped in wave_close.
//
total_samples_sent += num / 2;

if (num < theSize) {
SHOW("ERROR: wave_write only wrote %d of %d bytes\n", num, theSize);
} else {
SHOW("wave_write wrote %d bytes\n", theSize);
}

SHOW_TIME("wave_write > LEAVE");
return num;
}

//>
// wave_close
//
// DESCRIPTION:
//
// Does what SADA normally would call a flush, which means to cease
// all audio production in progress and throw any remaining audio
// away. [[[WDW - see comment in wave_flush.]]]
//
// PARAMETERS:
//
// theHandler: the audio device file descriptor
//
// GLOBALS USED/MODIFIED:
//
// last_play_position: modified to reflect play position the last time
// this method was called
// total_samples_sent: used to help calculate total_samples_skipped
// total_samples_skipped: modified to hold the total number of 16-bit
// samples sent to wave_write, but which were
// never played
// sun_audio_fd: used because some calls to wave_close seem to
// pass a NULL for theHandler for some odd reason
//
// RETURNS:
//
// The result of the ioctl call (non-0 means failure)
//
//<wave_close

int wave_close(void* theHandler)
{
int ret;
audio_info_t ainfo;
int audio_fd = (int) theHandler;
if (!audio_fd) {
audio_fd = sun_audio_fd;
}
ENTER("wave_close");
// [[[WDW: maybe do a pause/resume ioctl???]]]
ret = ioctl(audio_fd, I_FLUSH, FLUSHRW);
ioctl(audio_fd, AUDIO_GETINFO, &ainfo);

// Calculate the number of samples that won't get
// played. We also keep track of the last_play_position
// because wave_close can be called multiple times
// before another call to wave_write.
//
if (last_play_position != ainfo.play.samples) {
last_play_position = ainfo.play.samples;
total_samples_skipped = total_samples_sent - last_play_position;
}
SHOW_TIME("wave_close > LEAVE");
return ret;
}

//>
// wave_is_busy
//
// DESCRIPTION:
//
// Returns a non-0 value if audio is being played.
//
// PARAMETERS:
//
// theHandler: the audio device file descriptor
//
// GLOBALS USED/MODIFIED:
//
// sun_audio_fd: used because some calls to wave_is_busy seem to
// pass a NULL for theHandler for some odd reason
//
// RETURNS:
//
// A non-0 value if audio is being played
//
//<wave_is_busy

int wave_is_busy(void* theHandler)
{
audio_info_t ainfo;
int audio_fd = (int) theHandler;
if (!audio_fd) {
audio_fd = sun_audio_fd;
}
ENTER("wave_is_busy");
ioctl(audio_fd, AUDIO_GETINFO, &ainfo);
SHOW("wave_is_busy: active=%d", ainfo.play.active);
SHOW_TIME("wave_is_busy > LEAVE");
return ainfo.play.active;
}

//>
// wave_terminate
//
// DESCRIPTION:
//
// Used to end our session with eSpeak.
//
// GLOBALS USED/MODIFIED:
//
// sun_audio_fd: modified - closed and set to -1
//
//<wave_terminate

void wave_terminate()
{
ENTER("wave_terminate");
close(sun_audio_fd);
sun_audio_fd = -1;
SHOW_TIME("wave_terminate > LEAVE");
}

//>
// wave_flush
//
// DESCRIPTION:
//
// Appears to want to tell the audio subsystem to make sure it plays
// the audio. In our case, the system is already doing this, so this
// is basically a no-op. [[[WDW - if you do a drain, you block, so
// don't do that. In addition the typical SADA notion of flush is
// currently handled by wave_close. I think this is most likely just
// terminology conflict between eSpeak and SADA.]]]
//
// PARAMETERS:
//
// theHandler: the audio device file descriptor
//
//<wave_flush

void wave_flush(void* theHandler)
{
ENTER("wave_flush");
//ioctl((int) theHandler, AUDIO_DRAIN, 0);
SHOW_TIME("wave_flush > LEAVE");
}

//>
// wave_set_callback_is_output_enabled
//
// DESCRIPTION:
//
// Sets the callback to call from wave_write before it sends data to
// be played. It helps wave_write determine if the data should be
// thrown away or not.
//
// PARAMETERS:
//
// cb: the callback to call from wave_write
//
//<wave_set_callback_is_output_enabled

void wave_set_callback_is_output_enabled(t_wave_callback* cb)
{
my_callback_is_output_enabled = cb;
}

//>
// wave_test_get_write_buffer
//
// DESCRIPTION:
//
// Unnecessary and is used for debug output from
// speak_lib.cpp:dispatch_audio.
//
// RETURNS:
//
// NULL
//
//<wave_test_get_write_buffer

void *wave_test_get_write_buffer()
{
return NULL;
}

//>
// wave_get_read_position
//
// DESCRIPTION:
//
// Concerns the sample which is currently played by the audio layer,
// where 'sample' is a small buffer of synthesized wave data,
// identified so that the user callback could be called when the
// 'sample' is really played. The identifier is returned by
// wave_get_write_position. This method is unused.
//
// PARAMETERS:
//
// theHandler: the audio device file descriptor
//
// RETURNS:
//
// The total number of 16-bit samples played by the audio system
// so far.
//
//<wave_get_read_position

uint32_t wave_get_read_position(void* theHandler)
{
audio_info_t ainfo;
ENTER("wave_get_read_position");
ioctl((int) theHandler, AUDIO_GETINFO, &ainfo);
SHOW("wave_get_read_position: %d\n", ainfo.play.samples);
SHOW_TIME("wave_get_read_position > LEAVE");
return ainfo.play.samples;
}

//>
// wave_get_write_position
//
// DESCRIPTION:
//
// Returns an identifier for a new sample, where 'sample' is a small
// buffer of synthesized wave data, identified so that the user
// callback could be called when the 'sample' is really played. This
// implementation views the audio as one long continuous stream of
// 16-bit samples.
//
// PARAMETERS:
//
// theHandler: the audio device file descriptor
//
// GLOBALS USED/MODIFIED:
//
// total_samples_sent: used as the return value
//
// RETURNS:
//
// total_samples_sent, which is the index for the end of this long
// continuous stream. [[[WDW: with a unit32_t managing 16-bit
// samples at 22050Hz, we have about 54 hours of play time before
// the index wraps back to 0. We don't handle that wrapping, so
// the behavior after 54 hours of play time is undefined.]]]
//
//<wave_get_write_position

uint32_t wave_get_write_position(void* theHandler)
{
ENTER("wave_get_write_position");
SHOW("wave_get_write_position: %d\n", total_samples_sent);
SHOW_TIME("wave_get_write_position > LEAVE");
return total_samples_sent;
}

//>
// wave_get_remaining_time
//
// DESCRIPTION:
//
// Returns the remaining time (in ms) before the sample is played.
// The sample in this case is a return value from a previous call to
// wave_get_write_position.
//
// PARAMETERS:
//
// sample: an index returned from wave_get_write_position representing
// an index into the long continuous stream of 16-bit samples
// time: a return value representing the delay in milliseconds until
// sample is played. A value of 0 means the sample is either
// currently being played or it has already been played.
//
// GLOBALS USED/MODIFIED:
//
// sun_audio_fd: used to determine total number of samples played by
// the audio system
// total_samples_skipped: used in remaining time calculation
//
// RETURNS:
//
// Time in milliseconds before the sample is played or 0 if the sample
// is currently playing or has already been played.
//
//<wave_get_remaining_time

int wave_get_remaining_time(uint32_t sample, uint32_t* time)
{
uint32_t a_time=0;
uint32_t actual_index;

audio_info_t ainfo;
ENTER("wave_get_remaining_time");
if (!time) {
return(-1);
SHOW_TIME("wave_get_remaining_time > LEAVE");
}

ioctl(sun_audio_fd, AUDIO_GETINFO, &ainfo);

// See if this sample has already been played or is currently
// playing.
//
actual_index = sample - total_samples_skipped;
if ((sample < total_samples_skipped) ||
(actual_index <= ainfo.play.samples)) {
*time = 0;
} else {
a_time = ((actual_index - ainfo.play.samples) * 1000) / SAMPLE_RATE;
*time = (uint32_t) a_time;
}
SHOW("wave_get_remaining_time for %d: %d\n", sample, *time);
SHOW_TIME("wave_get_remaining_time > LEAVE");
return 0;
}

#else
// notdef USE_SADA

void wave_init() {}
void* wave_open(const char* the_api) {return (void *)1;}
size_t wave_write(void* theHandler, char* theMono16BitsWaveBuffer, size_t theSize) {return theSize;}
int wave_close(void* theHandler) {return 0;}
int wave_is_busy(void* theHandler) {return 0;}
void wave_terminate() {}
uint32_t wave_get_read_position(void* theHandler) {return 0;}
uint32_t wave_get_write_position(void* theHandler) {return 0;}
void wave_flush(void* theHandler) {}
typedef int (t_wave_callback)(void);
void wave_set_callback_is_output_enabled(t_wave_callback* cb) {}
extern void* wave_test_get_write_buffer() {return NULL;}

int wave_get_remaining_time(uint32_t sample, uint32_t* time)
{
if (!time) return(-1);
*time = (uint32_t)0;
return 0;
}

#endif // of USE_PORTAUDIO

//>
//<clock_gettime2, add_time_in_ms

void clock_gettime2(struct timespec *ts)
{
struct timeval tv;

if (!ts)
{
return;
}

assert (gettimeofday(&tv, NULL) != -1);
ts->tv_sec = tv.tv_sec;
ts->tv_nsec = tv.tv_usec*1000;
}

void add_time_in_ms(struct timespec *ts, int time_in_ms)
{
if (!ts)
{
return;
}

uint64_t t_ns = (uint64_t)ts->tv_nsec + 1000000 * (uint64_t)time_in_ms;
while(t_ns >= ONE_BILLION)
{
SHOW("event > add_time_in_ms ns: %d sec %Lu nsec \n", ts->tv_sec, t_ns);
ts->tv_sec += 1;
t_ns -= ONE_BILLION;
}
ts->tv_nsec = (long int)t_ns;
}

#endif // USE_ASYNC

//>

Loading…
Cancel
Save