Browse Source

[1.29.18] Add data for Serbian voice ("sr").

Moved Croatian/Bosnian/Serbian dictionary source data to hbs_rules, hbs_list.
Added data for Ancient Greek voice ("grc").
In voice files, the attribute: word n  adds a short pause between words. n = 1 to 4 for increasing pause length.


git-svn-id: https://espeak.svn.sourceforge.net/svnroot/espeak/trunk@103 d46cf337-b52f-0410-862d-fd96e6ae7743
master
jonsd 17 years ago
parent
commit
f9725f9f64
51 changed files with 1513 additions and 504 deletions
  1. 13
    20
      dictsource/dict_phonemes
  2. 1
    0
      dictsource/en_list
  3. 1
    1
      dictsource/en_rules
  4. 29
    0
      dictsource/grc_list
  5. 344
    0
      dictsource/grc_rules
  6. 603
    0
      dictsource/hbs_list
  7. 15
    7
      dictsource/hbs_rules
  8. 0
    336
      dictsource/hu_list
  9. 1
    1
      espeak-data/voices/bs
  10. 8
    0
      espeak-data/voices/grc
  11. 3
    0
      espeak-data/voices/hr
  12. 14
    0
      espeak-data/voices/sr
  13. 29
    0
      espeak-data/voices/zh
  14. 79
    39
      phsource/compile_report
  15. 8
    0
      phsource/ph_croatian
  16. 7
    7
      phsource/ph_finnish
  17. 15
    15
      phsource/ph_hindi
  18. 7
    7
      phsource/ph_latin
  19. 221
    8
      phsource/ph_serbian
  20. 10
    8
      phsource/phonemes
  21. BIN
      phsource/ufric/ch_sr.wav
  22. BIN
      phsource/ufric/[email protected]
  23. BIN
      phsource/ufric/h_.wav
  24. BIN
      phsource/ufric/ha.wav
  25. BIN
      phsource/ufric/he.wav
  26. BIN
      phsource/ufric/hi.wav
  27. BIN
      phsource/ufric/ho.wav
  28. BIN
      phsource/ufric/hu.wav
  29. BIN
      phsource/ufric/hu_fi.wav
  30. BIN
      phsource/ufric/sh_sr.wav
  31. BIN
      phsource/ufric/x_sr.wav
  32. BIN
      phsource/ustop/t_sr.wav
  33. BIN
      phsource/ustop/ts_sr.wav
  34. BIN
      phsource/ustop/tsh_sr.wav
  35. BIN
      phsource/vdiph2/ei_4
  36. BIN
      phsource/vdiph2/vowelchart.png
  37. BIN
      phsource/vowel/u_7
  38. BIN
      phsource/vwl_en_us/a
  39. 35
    1
      src/compiledata.cpp
  40. 3
    2
      src/compiledict.cpp
  41. 29
    9
      src/dictionary.cpp
  42. 3
    2
      src/phoneme.h
  43. 7
    5
      src/phonemelist.cpp
  44. 1
    1
      src/setlengths.cpp
  45. 14
    4
      src/speak.cpp
  46. 5
    1
      src/speech.h
  47. 1
    1
      src/synthdata.cpp
  48. 0
    10
      src/synthesize.cpp
  49. 0
    2
      src/tr_english.cpp
  50. 4
    13
      src/tr_languages.cpp
  51. 3
    4
      src/translate.h

+ 13
- 20
dictsource/dict_phonemes View File

@@ -134,28 +134,8 @@ r s S s. t T t. t.h
th v w x z


Dictionary hr_dict

& @ @- @2 a A a: aI
aU E e e: E~ i I i:
l- O o o: oU r- u U
u: y

* b d dZ dZ; f g h
j k l l^ m n N n^
p r R s S t tS ts
tS; v x z Z


Dictionary hu_dict

A a: E e: i i: o o:
u u: Y Y:

: b c d dZ f g h
j J k l m n n^ p
R R2 s S s2 t tS ts
v z Z


Dictionary it_dict
@@ -354,3 +334,16 @@ f j k kh l m n N
p ph R R2 R3 s s. S;
t th ts ts. ts. tS; tS; tsh
v w x z z.


Dictionary hbs_dict

& @ @2 a A a: aI aU
E e e: E~ i I i: l-
O o o: oU r* r- u U
u: y

* b d dZ dZ; f g h
j k l L l^ m n N
n^ p r R s S t tS
ts tS; v x z Z

+ 1
- 0
dictsource/en_list View File

@@ -1229,6 +1229,7 @@ myrrh m3:

naif naI'i:f
naïve naI'i:v
nasa nasa2
nascent neIs@nt
nativity $2
natural natS@r@L

+ 1
- 1
dictsource/en_rules View File

@@ -944,7 +944,7 @@
as (tern a2s
as (thm as
as (tral as
as (tro aas
as (tro as
as (trolog a2s
as (trono a2s
ass (ym as

+ 29
- 0
dictsource/grc_list View File

@@ -0,0 +1,29 @@

?1 _0lang _^_EN // speak numbers in English

// articles
hο $u // ὁ
τὼ $u // τώ
οhι $u // οἱ
hη $u // ἡ
τὰ $u // τά
αhι $u // αἱ
τὸ $u // τό

τοὺ $u // τοῦ
τοὶν $u // τοῖν
τὴς $u // τῆς
ταὶν $u // ταῖν
τὼν $u // τῶν

τῲ $u // τῷ
τοὶς $u // τοῖς
τῂ $u // τῇ
ταὶν $u // ταῖν
ταὶς $u // ταῖς

τὸν $u // τόν
τοὺς $u // τούς
τὴν $u // τήν
τὰς $u // τάς


+ 344
- 0
dictsource/grc_rules View File

@@ -0,0 +1,344 @@
// Spelling to Phoneme rules for: Ancient Greek

// Preliminary character substitution:
// Convert tonos, oxia and perispomeni to varia
// Remove psili (soft breathing)
// Convert dasia accent to a separate prefix character ("h")
// Remove iota subscripts
// Replace Latin characters by same-shape Greek characters

.replace
a α // Latin->Greek
o ο
v ν
A Α
B Β
E Ε
Z Ζ
H Η
I Ι
K Κ
M Μ
N Ν
O Ο
P Ρ
T Τ
Y Υ
X Χ

// alpha
ά ὰ // tonos
ά ὰ // oxia
ᾴ ᾲ
ᾶ ὰ
ᾷ ᾲ

ἀ α
ἁ hα
ἂ ὰ
ἃ hὰ
ἄ ὰ
ἅ hὰ
ἆ ὰ
ἇ hὰ

ᾀ ᾳ
ᾁ hᾳ
ᾂ ᾲ
ᾃ hᾲ
ᾄ ᾲ
ᾅ hᾲ
ᾆ ᾲ
ᾇ hᾲ

// epsilon
έ ὲ
έ ὲ
ἐ ε
ἑ hε
ἒ ὲ
ἓ hὲ
ἔ ὲ
ἕ hὲ

// eta
ή ὴ
ή ὴ
ῄ ῂ
ῆ ὴ
ῇ ῂ

ἠ η
ἡ hη
ἢ ὴ
ἣ hὴ
ἤ ὴ
ἥ hὴ
ἦ ὴ
ἧ hὴ

ᾐ ῃ
ᾑ hῃ
ᾒ ῂ
ᾓ hῂ
ᾔ ῂ
ᾕ hῂ
ᾖ ῂ
ᾗ hῂ

//iota
ί ὶ
ί ὶ
ῖ ὶ

ἰ ι
ἱ hι
ἲ ὶ
ἳ hὶ
ἴ ὶ
ἵ hὶ
ἶ ὶ
ἷ hὶ

ΐ ῒ
ῗ ῒ

// omicron
ό ὸ
ό ὸ
ὀ ο
ὁ hο
ὂ ὸ
ὃ hὸ
ὄ ὸ
ὅ hὸ

// upsilon
ύ ὺ
ύ ὺ
ῦ ὺ

ὐ υ
ὑ hυ
ὒ ὺ
ὓ hὺ
ὔ ὺ
ὕ hὺ
ὖ ὺ
ὗ hὺ

ΰ ῢ
ῧ ῢ

// omega
ώ ὼ
ώ ὼ
ῴ ῲ
ῶ ὼ
ῷ ῲ

ὠ ω
ὡ hω
ὢ ὼ
ὣ hὼ
ὤ ὼ
ὥ hὼ
ὦ ὼ
ὧ hὼ

ᾠ ῳ
ᾡ hῳ
ᾢ ῲ
ᾣ hῲ
ᾤ ῲ
ᾥ hῲ
ᾦ ῲ
ᾧ hῲ

// rho
ῤ ρ
ῥ hρ


.group α
α a
αι aI
αὶ 'aI
αυ aU
αὺ 'aU
αhι haI
αhὶ 'haI
αhυ haU
αhὺ 'haU

.group β
β b


.group γ
γ g
γγ Ng

.group δ
δ d


.group ε
ε e
ει e:
εὶ 'e:
ευ eU
εὺ 'eU
εhι he:
εhὶ 'he:
εhυ heU
εhὺ 'heU

.group ζ
ζ z


.group η
η E:
ηι EI:
ηὶ 'EI:
ηυ EU:
ηὺ 'EU:
ηhι hEI:
ηhὶ 'hEI:
ηhυ hEU:
ηhὺ 'hEU:

.group θ
θ T


.group ι
ι i


.group ϊ
ϊ i


.group κ
κ k


.group λ
λ l


.group μ
μ m


.group ν
ν n


.group ξ
ξ ks


.group ο
ο o
οι oI
οὶ 'oI
ου u:
οὺ 'u:
οhι hoI
οhὶ 'hoI
οhυ hu:
οhὺ 'hu:

.group π
π p


.group ρ
ρ R


.group ς
ς s


.group σ
σ s


.group τ
τ t


.group υ
υ y
υι yI
υὶ 'yI
υhι hyI
υhὶ 'hyI

.group ϋ
ϋ y
ϋι yI
ϋὶ 'yI
ϋhι hyI
ϋhὶ 'hyI

.group φ
φ f


.group χ
χ x


.group ψ
ψ ps


.group ω
ω O:
ωι OI:
ωὶ 'OI:
ωυ OU:
ωὺ 'OU:
ωhι hOI:
ωhὶ 'hOI:
ωhυ hOU:
ωhὺ 'hOU:



.group h // dasia (rough breathing)
h h


.group
ὰ 'a
ᾳ aI:
ᾲ 'aI:
ὲ 'e
ὴ 'E:
ῃ EI:
ῂ 'EI:
ὶ 'i
ῒ 'i
ὸ 'o
ὺ 'y
ῢ 'y
ὼ 'O:
ῳ OI:
ῲ 'OI:












+ 603
- 0
dictsource/hbs_list View File

@@ -0,0 +1,603 @@

// "hbs" is the ISO 639-3 code for Serbian/Croatian/Bosnian macrolanguage
// This file is UTF-8 encoded

// Conditional rules:
// ?1 Croatian
// ?2 Serbian
// ?3 Bosnian (Bosna and Hercegovina)
// ?4 Serbian & Bosnian


// Letters
b b@
c ts@
č tS@
ć tS;@2
d d@
dž dZ@
đ dZ;@2
f f@
g g@
h x@
j j@2
k k@
l l@
lj l^@
m m@
n n@
nj n^@
p p@
q kv@
r R@
_s s@
š S@
t t@
v v@
w dvostr*uko||v@
?2 w duplo||v@
x iks
y ipsilon
z z@
ž Z@

// symbols
_?? znak // unknown symbol
_?A slovo // unknown letter
© 'aUtoRsk&||pr*av&
% p'osto
+ plus
€ 'euRo
?4 € 'evr*o
@ _'at
?2 @ tRgovatSkoi
& _'end
! 'usklItSnIk
?2 ! 'uzvItSnIk
: dv'ototSk&
?4 : dv'ot&tSk&
# br*'oj_
/ kr*'oz_
\\ b'EkslES
^ ts'iRkumfleks
~ t'ild&
¤ v'alut&
§ 'odlom&k
µ m'ikr*o
¶ tSl'an&k
° st'up&n^
?4 ° st'epen
_" n'avodnIk
?2 _" n'avod
_‚ 'otvoReni||n'avodnIk
_„ sp'uSteni||n'avodnIk
?2 _„ z&tvoReni||n'avodnIk
… tr*'i||t'otSke
?4 … tr*'i||t'atSke
† kr*'iZ
?2 † kr-'st
‡ dv'ostr*Uki||kr*'iZ
?2 ‡ dv'ostRUki||kR'st
‰ pr*'omil
_‹ 'otvoReni||n'avodnIk
_‘ 'otvoReni||n'avodnIk
_’ j'ednostr*'uki||n'avodnIk
_“ 'otvoReni||n'avodnIk
_” z'atvoReni||n'avodnIk
• kr*'upna||t'otSk&
?4 • kr*'upna||t'atSk&
_– En||ts'r-t&
_— Em||ts'r-t&
™ pr*'o'izvodZ&tS
˘ br*'evis
¨ pr*'ijegl&s
?2 ¨ pr*'egl&s
_« 'otvoReni||n'avodnIk
_­ pr*'ivr*emen&||ts'r-t'its&
· p'ut&
¸ sed'il&
_» z'atvoReni||n'avodnIk
® R'egistr*atsIj&
ł l@||s&||ts'r-t'itsom
× p'ut&
÷ p'odijel^,eno
?2 ÷ p'odel^,eno

_$ d'ol&R
_- m'inus
_* zvj'ezdits&
?2 _* zv'ezdits&
_= j'edn&ko
_@ t'r-g'ov&tSko||'a
?2 _@ et

_( 'otvoRen&||z'agr*ad&
_) z'atvoRen&||z'agr*ad&
_' 'apostr*of
_, z'aRez
?2 _, z'apeta
_- ts'r-t'its&
_. t'otSk&
?4 _. t'atSk&
_; t'otSk&z,a*Ez
?2 _; t'atSk&z,apeta
?3 _; t'atSk&z,a*Ez
_< m'an^i||'od
_= j'edn&ko
_> v'etSi||'od
_? 'upitnIk
_& t'r-g'ov&tSko||'i
_[ 'otvoRen&||'ugl&t&
?2 _[ 'otvoRen&||'ugl&st&
_] z'atvoRen&||'ugl&t&
?2 _] z'atvoRen&||'ugl&st&
__ ts'r-t&
_` gr*'avis
_{ 'otvoRen&||v'ititS&st&
_| 'okomits&
?2 _| 'uspR&vn&
_} z'atvoRen&||v'ititS&st&


// Numbers
_0 n'ul&
_1 j'ed&n
_2 dv'a
_2f dv'ije
?2 _2f dv'E
_3 tr*'i
_4 tS'EtIRI
_5 p'Et
_6 S'Est
_7 s'Ed&m
_8 'os&m
_9 d'EvEt
_10 d'EsEt
_11 j'ed&naIst
_12 dv'anaIst
_13 tr*'inaIst
_14 tS'Etr-naIst
_15 p'EtnaIst
_16 S'EsnaIst
_17 s'Ed&mnaIst
_18 'os&mnaIst
_19 d'EvEtnaIst
?2 _11 j'ed&naEst
?2 _12 dv'anaEst
?2 _13 tr*'inaEst
?2 _14 tS'Etr-naEst
?2 _15 p'EtnaEst
?2 _16 S'EsnaEst
?2 _17 s'Ed&mnaEst
?2 _18 'os&mnaEst
?2 _19 d'EvEtnaEst
_2X dv'adEsEt
_3X tr*'idEsEt
_4X tS'Etr-dEsEt
_5X p'EdEsEt
_6X S'EzdEsEt
_7X s'Ed&mdEsEt
_8X 'os&mdEsEt
_9X d'EvEdEsEt
_0C st'o_
?2 _0C st'O_
_2C dvj'est'o
?2 _2C dv'est'a_
?2 _3C tR'ist'a_
?2 _4C tSetR'ist'o_
_6C S'Est'o
_0M1 t'isUtS;&
_0MA1 t'isUtS;e
_1M1 t'isUtS;U
?2 _0M1 h'il^,&d&
?2 _0MA1 h'il^,&de
?2 _1M1 h'il^,&dU
?2 _1MA1 jedn&||hiL&d&
?3 _0M1 h'il^ad&
?3 _0MA1 h'il^ade
?3 _1M1 h'il^adU
_0M2 m'ilijUna
_0MA2 m'ilijUna
_1M2 m'ilijUn
?4 _0M2 m'ilijOna
?4 _0MA2 m'ilijOna
?4 _1M2 m'ilijOn
_0M3 m'iliaRdI
_0MA3 m'iliaRde
_1M3 m'iliaRdU
?2 _0M3 milijArdI
?2 _0MA3 milijArde
?2 _1M3 milijArdU
_0M4 b'ilijUna
_1M4 b'ilijUn
?4 _0M4 b'ilijOna
?4 _1M4 b'ilijOn
_dpt _:z'a*Ez_
_roman r*'imsko

// not Roman numerals
// vi vi // not needed if only all-capitals are spoken as Roman numbers


// Abbreviations
aaa $abbrev
aac $abbrev
ab $only $abbrev $capital
abc $abbrev
abk $only $abbrev
abs $abbrev
acc $only $abbrev
acf $only $abbrev
acfm $abbrev
acg $only $abbrev
acgm $abbrev
acl $only $abbrev
acm $only $abbrev
acw $only $abbrev
add $only $abbrev
adn $only $abbrev
adp $only $abbrev
adsl $abbrev
agm $abbrev
ahk $only $abbrev
aif $only $abbrev
aip $only $abbrev
alg $only $abbrev
alm $only $abbrev
amd $only $abbrev
amf $only $abbrev
amg $only $abbrev
aph $only $abbrev
apj $only $abbrev
apl $only $abbrev
apm $only $abbrev
app $only $abbrev
arg $only $abbrev
arj $only $abbrev
asc $only $abbrev
asf $only $abbrev
asm $only $abbrev
asn $only $abbrev
asp $only $abbrev
asx $only $abbrev
atf $only $abbrev
atp $abbrev
av $only $abbrev
avg $abbrev
avr $only $abbrev
awb $only $abbrev
awt $only $abbrev
brf $abbrev
brl $abbrev
brx $abbrev
cca $abbrev
cda $only $abbrev
cdr $abbrev
cdrw $abbrev
cgi $abbrev
clr $abbrev
cpe $only $abbrev
cpu $only $abbrev
cr $only $abbrev
crt $only $abbrev
ctrl $abbrev
daa $only $abbrev
doo $abbrev
dox $only $abbrev
dqy $abbrev
dsr $only $abbrev
ear $only $abbrev
ecdl $only $abbrev
ecp $only $abbrev
ecs $only $abbrev
elm $only $abbrev
emf $only $abbrev
emh $only $abbrev
eml $only $abbrev
ems $only $abbrev
epf $only $abbrev
eq $only $abbrev
esc $only $abbrev
etd $only $abbrev
eu $only $abbrev
eur $only $abbrev
exc $only $abbrev
faq $abbrev
fbi $abbrev
ffa $only $abbrev
fr $only $abbrev
frm $abbrev
frt $only $abbrev
frx $abbrev
gho $only $abbrev
gr $only $abbrev
grr $abbrev
grrr $abbrev
grp $abbrev
grps $abbrev
grs $only $abbrev
grx $only $abbrev
gui $only $abbrev
hho $abbrev
hr $only $abbrev
hrk $only $abbrev
hrt $only $abbrev $capital
hrv $only $abbrev
hta $only $abbrev
hzzo $abbrev
ibm $abbrev
icc $only $abbrev
icm $only $abbrev
ics $only $abbrev
idb $only $abbrev
idc $only $abbrev
idm $only $abbrev
iff $only $abbrev
ifu $only $abbrev
ilk $only $abbrev
img $only $abbrev
iml $only $abbrev
isdn $abbrev
isl $only $abbrev
isp $only $abbrev
iss $only $abbrev
iq $only $abbrev
iqy $only $abbrev
itw $only $abbrev
itz $only $abbrev
ivf $only $abbrev
jpi $only $abbrev
jrr $abbrev
jse $only $abbrev
lha $abbrev
liq $only $abbrev
maq $only $abbrev
maw $only $abbrev
mda $only $abbrev
mde $only $abbrev
mdi $only $abbrev
mga $only $abbrev
mge $only $abbrev
mgi $only $abbrev
mpa $only $abbrev
mpe $only $abbrev
mpr $only $abbrev
msi $only $abbrev
mup $abbrev $capital
nco $only $abbrev
nfo $only $abbrev
nji $only $abbrev
nr $only $abbrev
nra $only $abbrev
nrb $only $abbrev
nrc $only $abbrev
nre $only $abbrev
nrf $only $abbrev
nrg $abbrev
nrh $only $abbrev
nri $only $abbrev
nrm $only $abbrev
nrq $only $abbrev
nrs $only $abbrev
nru $only $abbrev
nrw $only $abbrev
nsa $only $abbrev
nsi $only $abbrev
nvda $abbrev
obd $only $abbrev
obj $only $abbrev
obt $only $abbrev
obz $only $abbrev
ocr $only $abbrev
ocx $only $abbrev
oem $abbrev
off $only $abbrev
oft $only $abbrev
ofx $only $abbrev
ogc $only $abbrev
ogg $only $abbrev
ogl $only $abbrev
omw $abbrev
oqy $only $abbrev
os $only $abbrev $capital
oss $only $abbrev
otf $only $abbrev
otm $only $abbrev
pda $abbrev
pdi $only $abbrev
pgi $only $abbrev
pho $only $abbrev
pko $only $abbrev
pma $only $abbrev
ppa $only $abbrev
pr $only $abbrev
prf $only $abbrev
prg $only $abbrev
prn $abbrev
prt $only $abbrev
qbr $abbrev
qpr $abbrev
raw $only $abbrev
rb $abbrev
rba $abbrev
rc $only $abbrev
rcc $abbrev
rcd $abbrev
rcs $abbrev
rd $only $abbrev
rds $abbrev
rgb $abbrev
rh $only $abbrev
rk $only $abbrev
rm $only $abbrev
rma $only $abbrev
rme $only $abbrev
rmf $only $abbrev
rmi $only $abbrev
rmt $only $abbrev
rmx $abbrev
rn $only $abbrev
rnk $only $abbrev
rp $only $abbrev
rqy $only $abbrev
rs $abbrev
rss $abbrev
rta $abbrev
rtf $abbrev
rtl $abbrev
rttl $abbrev
rtv $abbrev
rw $abbrev
rwo $only $abbrev
rx $abbrev
sbr $only $abbrev
scr $only $abbrev
sr $only $abbrev
srd $only $abbrev
ssa $only $abbrev
sys $only $abbrev
tpu $only $abbrev
udf $only $abbrev
udl $only $abbrev
udt $abbrev
uhh $abbrev
uif $only $abbrev
uip $only $abbrev
url $only $abbrev
usd $only $abbrev
usr $only $abbrev
uss $only $abbrev
uu $only $abbrev
uue $only $abbrev
uup $only $abbrev
uxd $only $abbrev
vba $only $abbrev
vbe $only $abbrev
vbr $abbrev
vga $abbrev
wax $only $abbrev
wbr $abbrev
wiz $only $abbrev
wma $only $abbrev
wri $only $abbrev
wta $abbrev
xam $only $abbrev
xba $only $abbrev
xiw $only $abbrev
xla $only $abbrev
xpa $only $abbrev
xpi $only $abbrev
xsi $only $abbrev
xxa $only $abbrev
xxe $only $abbrev
xy $abbrev
xyz $abbrev
yu $only $abbrev
zaa $only $abbrev
zoo $only $abbrev

br $dot $abbrev
dr $dot $abbrev
mr $dot $abbrev
mrs $dot $abbrev
itd $dot $abbrev
npr $dot $abbrev
str $only $dot $abbrev

inc $dot
prof $dot
sl $dot
tj $dot
tzv $dot

// Demonstratives
tko $u+
?4 šta $u+
što $u+
koga $pause
čega $pause


// Pronouns


// Prepositions
o $u $brk
u $u $brk
s s_ $brk


// Conjunctions
a $u $pause // and
i $u $pause // and
ali $pause // but
nego $pause // but
ili $u $pause // or




// Auxillary verbs
li $u // question

sam $u // to be, short form
si $u
je $u
smo $u
ste $u
su $u

bio $u // to be, past tense
bila $u
bilo $u
bili $u

nisam $u+ // to be, negative
nisi $u+
nije $u+
nismo $u+
niste $u+
nisu $u+

imam $u+ // to have
imaš $u+
ima $u+
imamo $u+
imate $u+
imaju $u+

nemam $u+ // to have, negative
nemaš $u+
nema $u+
nemamo $u+
nemate $u+
nemaju $u+





// treat as letters if at the end of the clause
a a $atend // letter-a
i i $atend // letter-i
o o $atend // letter-o
s s@ $atend
u u $atend


// Exceptions

ctrl tsontRo:l
control tsontRo:l
docx d'ots||'iks
jpeg j@2||p'eg
macx m'ats||'iks
potx p'ot||'iks
sisx s'is||'iks
start st'aRt
utf u||te||ef

?2 ra R&
?2 re Re
?2 ar &R
?2 er eR

dictsource/hr_rules → dictsource/hbs_rules View File

@@ -1,9 +1,15 @@
// translation rules for Croatian

// "hbs" is the ISO 639-3 code for Serbian/Croatian/Bosnian macrolanguage
// This file is UTF-8 encoded

//The next line gives a voice which is used to find a phoneme table to use to compile this dictionary
//voice=hr

// Conditional rules:
// ?1 Croatian
// ?2 Bosnian (Bosna and Hercegovina)
// ?2 Serbian
// ?3 Bosnian (Bosna and Hercegovina)
// ?4 Serbian & Bosnian

.group a
a a
@@ -34,7 +40,8 @@
e E
j) e e
e (j e
._) exe %ekse // filetype
_) exe %ekse // filetype
?2 _) exe %eikse // filetype

.group f
f f
@@ -82,11 +89,12 @@
.group q
q k
qu kv
?2 qu ku

.group r
r R
A) r (A R
K) r (A @-*
K) r (A r* // this phoneme expands to [@-*]
rr R
r (_ R

@@ -140,7 +148,7 @@
$ d'ol&R

. totSk&
?2 . tatSk&
?4 . tatSk&
. (. _:
\.) .

@@ -179,7 +187,7 @@
μ m'i
ν n'i
ξ ks'i
ο 'omIk@-*on_
ο 'omIkr*on_

.group 0xcf // Greek letters

@@ -195,6 +203,6 @@
ψ ps'i
ω 'omeg&
ώ 'omeg&||t'onos
ό 'omIk@-*on||t'onos
ό 'omIkr*on||t'onos



+ 0
- 336
dictsource/hu_list View File

@@ -1,336 +0,0 @@
// Translations for Hungarian words
// This file is UTF-8 encoded.

// Conditional rules:
// ?1 speak "i" as Roman number


// Numbers

_0 nullA
_1 EJ
_2 kEttY:
_3 ha:R2om
_4 ne:J
_5 Yt
_6 hAt
_7 he:t
_8 n^olts
_9 kilEnts
_10 ti:z
_1X tizEn
_20 hu:s
_2X huson
_3X hAR2mints
_4X nEJvEn
_5X YtvEn
_6X hAtvAn
_7X hEtvEn
_8X n^oltsvAn
_9X kilEntsvEn
_0C sa:z
_1C sa:z

_0M1 EzER2
_1M1 EzER2
_2M1 ke:tEzER2
_0M2 millio:
_1M2 millio:
_2M2 ke:tmillio:
_0M3 millia:R2d
_1M3 millia:R2d
_1M3 ke:tmillia:R2d
_0M4 billio:
_1M4 billio:
_2M4 ke:tbillio:
_dpt ||_vEss2Y:_


// Abbreviations
km kilo:me:tER2
mm milime:tER2

a.m An^n^i||m'int $dot
dr doktoR2 $dot
gpu $abbrev
id idY:SEb: $dot
ill illEdvE $dot
ifj ifjAb: $dot
mta $abbrev
pl pe:lda:ul $dot
stb SAtYb:i $dot
u.n u:JnEvEzEt: $dot
ú.n u:JnEvEzEt: $dot
vö v'EZd||_'Yss2E

?1 i EJ $abbrev // option for Roman number


// Articles
a $u // the
az $u
aki $u+ // that

ez $u+ // this


// Pronouns

// If these are only used for emphasis then then don't need $u
// én $u
// te $u
// ő $u
// mi $u
// ti $u
// ők $u
// maga $u
// maguk $u


// Conjunctions
és $u $strend2 // and
de $u+ $pause // but
vagy $u+ $pause // or

mert $u $pause // because
miatt $u // because
bár $u $pause // although
habár $u $pause // although

ha $u $pause // if
noha $u $pause // even thought


// Prepositions etc.


// Negative
nem $alt2 $strend
ne $u+

e $u // "-e" question
e $atend // stressed at end of sentence

// Unstressed adverbs prepositions etc.
néhány $u+
is $u // also

elöl $u // in front of
elől $u
elé $u
előtt $u

mögül $u // behind
mögött $u
mögé $u

kívül $u
után $u // after

alól $u
alá $u
alatt $u // below

felől $u // above
felé $u
fölé $u
felett $u // above
fölött $u

mellől $u // besides
mellé $u
mellett $u

közül $u
közé $u
között $u

an $u // so many persons
as $u
ba $u // into
ban $u // in
be $u
ben $u
ból $u // from inside
ből $u
e $u // in query, his/her
ei $u // his her multiole
en $u
es $u
hez $u
hoz $u // to
höz $u
ig $u // up to
ik $u // -th
nak $u // of, him/her
nek $u
nál $u // by
nél $u
on $u // on
en $u // on
os $u
ra $u // onto
re $u
ról $u // from top of, about
röl $u
ről $u
szer $u
szor $u // times
szór $u
ször $u
tól $u // from
töl $u
től $u
val $u // with
vel $u
án $u // on that day
é $u // his, her
éi $u // his, her multiple
én $u
ón $u
ós $u
ön $u
ös $u

ellen $u // against
elé $u // before
óta $u // since

sok $u // many
kevés $u // few
se $u // neither
sem $u // nor


be $u //into
ki $u // out of
le $u // down
fel $u // up
föl $u // up
meg $u // finish an action
el $u // away
át $u //through
rá $u //onto
ide $u // here
oda $u // there
szét $u //apart
össze $u //connect with
vissza $u //back
ellen $u //against

volna $u // would
részén $u //on ... part of

nélkül $u // without
folytán $u // because of
úgy $u // like that
így $u // like this
egyaránt $u // alike
minden $u // all
részben $u // partly

egyik $u // one of
másik $u // the other


// word pairs

(hogy a) h,oJ,A
(hogy az) h,oJ,Az
(hogy aki) h,oJ,Aki


// Verbs

vagyok $u // to be, present
vagy $u
van $u
vagyunk $u
vagytok $u
vannak $u

voltam $u // to be, past
voltál $u
volt $u
voltunk $u
voltatok $u
voltak $u

leszek $u // to be, future
leszel $u
lesz $u
leszünk $u
lesztek $u
lesznek $u


kell $u+ // should

szabad $u+ // can (allowed)

fog $u+ // going to
fogok $u+
fogsz $u+
fogunk $u+
fogtok $u+
fognak $u+

tud $u+ // can
tudok $u+
tudsz $u+
tudunk $u+
tudtok $u+
tudnak $u+

// Letters
_a A:
a A: $atend // letter "a"
b be:
c tse:
d de:
_e E
f Eff
g ge:
h ha:
j je:
k ka:
l Ell
m Emm
n Enn
p pe:
q ku
r ERR
s S_
s ES $atend
_s ES
v ve:
w duplAve:
x iks
y ipsilon
z ze:

_é e:
é $atend

cs tSe:
dz dze:
dzs dZe:
sz Es
zs Ze:
gy Je:
ty ce:
ly Ellipsilon
ny En^

_. pont
Ft foR2int



// Main Exceptions List
//=====================

nato na:to:




+ 1
- 1
espeak-data/voices/bs View File

@@ -1,7 +1,7 @@
name bosnian
language bs
phonemes hr
dictionary hr
dictionary hbs
gender male

pitch 81 120

+ 8
- 0
espeak-data/voices/grc View File

@@ -0,0 +1,8 @@
name greek-ancient
language grc
gender male

stressLength 170 170 190 190 0 0 230 240
dictrules 1
words 1


+ 3
- 0
espeak-data/voices/hr View File

@@ -1,7 +1,10 @@
name croatian
language hr
language hbs
gender male

dictionary hbs

// attributes towards !variant3
pitch 81 120
formant 0 100 100 100

+ 14
- 0
espeak-data/voices/sr View File

@@ -0,0 +1,14 @@
name serbian
language sr
gender male
dictionary hbs

// attributes towards !variant3 pitch 80 120
formant 0 100 100 100
formant 1 97 97 100
formant 2 97 97 100
formant 3 97 102 100
formant 4 97 102 100
formant 5 97 102 100

stressAdd 10 10 0 0 0 0 -30 -30

+ 29
- 0
espeak-data/voices/zh View File

@@ -0,0 +1,29 @@
name Mandarin test
language zh
gender male
words 1

//for some dialects

//[en]: replace ng with n
//[zh]: 无后鼻音,ng读成n
//replace 0 N n

//[en]: replace rfx consonants
//[zh]: 无卷舌音,r读成l或z,er读成e
//replace 0 ts.h tsh
//replace 0 ts. ts
//replace 0 s. s
//replace 0 i. i[
//replace 0 z. l
//replace 0 z. z
//replace 0 @r @

//[en]: replace beginning n or l
//[zh]: 不分nl,n读成l或l读成n
//replace 2 n l
//replace 2 l n

//[en]: replace beginning w with v
//[zh]: w读成v
//replace 0 w v

+ 79
- 39
phsource/compile_report View File

@@ -21,9 +21,9 @@
pl 15 107
sk 29 125
cs 6 125
hr 19 129
mk 3 130
sr 2 129
hr 20 130
mk 3 131
sr 18 130
ru 38 126
it 17 118
la 21 114
@@ -95,6 +95,7 @@ d/d_ [d] base
[d;] ro
[d] el
[d] sw
d/d_dnt [d] sr
d/dr [*] base
[d] base
[d[] base
@@ -137,6 +138,8 @@ dzh/dzh [dZ] base
[dz;] base
[J] hi
[dZ;] mk
[dZ] sr
[dZ;] sr
[dZ;] ru
dzh/dzh_ [dZ] base
[dZ;] base
@@ -197,6 +200,42 @@ g/g_ [g] base
g/xg [g] base
[g] cy
[g] es
h/h_ [h] base
[h] fi
[H] hi
[h] hi
[<h>] la
h/h@ [h] base
[h] fi
[H] hi
[h] hi
[th] hi
[h] sr
[<h>] la
h/ha [h] base
[h] fi
[H] hi
[h] hi
[<h>] la
h/he [h] base
[h] fi
[H] hi
[h] hi
[<h>] la
h/hi [h] base
[h] fi
[H] hi
[h] hi
[<h>] la
h/ho [h] base
[H] hi
[h] hi
[<h>] la
h/hu [h] base
[H] hi
[h] hi
[<h>] la
h/hu_fi [h] fi
j2/_j2 [;] base
j2/j2@ [(@)] base
j2/j2a [(a)] base
@@ -302,10 +341,12 @@ l/xl [(@)] base
[(o)] base
[(u)] base
m/_m [m] base
[m] sr
[m;] ru
[m;] ro
[m] zh
m/m_ [m] base
[m] sr
[m;] ru
[m;] ro
m/m@ [(@)] base
@@ -314,18 +355,24 @@ m/ma [(a)] base
m/me [(e)] base
m/mi [(i)] base
m/mj [m] base
[m] sr
[m;] ru
[m;] ro
m/mo [(o)] base
m/m_sr.wav [m] sr
m/mu [(u)] base
n^/_n^ [n^] base
[n^] sr
n^/n^_ [n^] base
[n^] sr
n^/n^@ [(@)] base
n^/n^#_ [n^#] is
n/_n [n] base
[n] sr
[n;] ro
[n] zh
n/n_ [n] base
[n] sr
[n;] ro
[n] zh
n/n@ [(@)] base
@@ -342,12 +389,18 @@ nn/inn [(i)] base
n/nj [n] base
[n.] base
[n^] base
[n] sr
[n^] sr
[n;] ro
n^/nj_sr.wav [N] sr
[n^] sr
nn/_nn [N] base
[N] en
[N] sr
[N] zh
nn/nn_ [N] base
[N] en
[N] sr
[N] zh
nn/nn@ [(@)] base
nn/nn#_ [N#] is
@@ -355,12 +408,15 @@ nn/nna [(a)] base
nn/nne [(e)] base
nn/nni [(i)] base
nn/nnj [N] base
[N] sr
nn/nno [(o)] base
nn/nnu [(u)] base
n^/n^o [(o)] base
n/no [(o)] base
n/_nr [n.] base
n/nr_ [n.] base
n/n_sr.wav [N] sr
[n] sr
n^/n^u [(u)] base
n/nu [(u)] base
r2/_r2 [r-] base
@@ -382,12 +438,18 @@ r3/r_i [(i)] base
r3/r_n [r/] base
[r/] ru
r3/r_o [(o)] base
r3/r_sr.wav [R] sr
[r*] sr
[r-] sr
r3/r_trill [R2] base
[R3] base
[r] af
[r] cy
[r] nl
[R] sk
[R] sr
[r*] sr
[r-] sr
[x] pt
r3/r_trill2 [R] base
[R] hr
@@ -467,6 +529,8 @@ r/xr [(@)] base
[(u)] base
ufric/ch [C] base
[C2] de
ufric/ch_sr [h] sr
[x] sr
ufric/f [f] base
[pF] de
[f;] ro
@@ -474,41 +538,6 @@ ufric/f [f] base
[f] zh
ufric/f_ [f] base
[f;] ro
ufric/h_ [h] base
[h] fi
[H] hi
[h] hi
[<h>] la
ufric/h@ [h] base
[h] fi
[H] hi
[h] hi
[th] hi
[<h>] la
ufric/ha [h] base
[h] fi
[H] hi
[h] hi
[<h>] la
ufric/he [h] base
[h] fi
[H] hi
[h] hi
[<h>] la
ufric/hi [h] base
[h] fi
[H] hi
[h] hi
[<h>] la
ufric/ho [h] base
[H] hi
[h] hi
[<h>] la
ufric/hu [h] base
[H] hi
[h] hi
[<h>] la
ufric/hu_fi [h] fi
ufric/ll [L] base
[l#] is
ufric/s [s] base
@@ -539,6 +568,9 @@ ufric/sh_pzd [S;] base
ufric/sh_pzd_ [S;] base
[Z;] base
ufric/sh_rfx [s.] base
ufric/sh_sr.wav [S] sr
[Z] sr
[dZ] sr
ufric/s_pzd [s;] base
[z;] base
[s;] ro
@@ -554,6 +586,8 @@ ufric/x2 [x2] af
[x2] nl
[x2] pt
ufric/x_hr [x] hr
ufric/x_sr [h] sr
[x] sr
ustop/c [c] base
ustop/k [k] base
[k] en
@@ -720,6 +754,7 @@ ustop/t_short [t.] hi
[t] el
ustop/tsh_pzd [tS;] zh
ustop/tsh_pzd_unasp [tS;] zh
ustop/tsh_sr.wav [tS] sr
ustop/ts_pzd [tS;] base
[ts;] base
[ch] hi
@@ -728,8 +763,12 @@ ustop/ts_pzd_ [c] hi
[c] hu
ustop/ts_pzd2 [c] hi
[c] hu
ustop/t_sr [d] sr
[t] sr
ustop/ts_rfx [ts.] zh
ustop/ts_rfx_unasp [ts.] zh
ustop/ts_sr.wav [tS;] sr
[dZ;] sr
ustop/ts_unasp [ts] zh
ustop/t_unasp [t] zh
vdiph/0i [OI] pt
@@ -1016,6 +1055,7 @@ voc/z_ [z] base
voc/zh [Z] base
[z.] base
[R^] sk
[Z] sr
[Z;] ro
voc/zh_ [Z] base
[z.] base
@@ -1036,6 +1076,7 @@ vowel/@ [@] base
[@4] hi
[@] hr
vowel/@- [@-] base
[r*] hr
vowel/& [a] en_rp
[&] fi
[&:] hi
@@ -1083,7 +1124,6 @@ vowel/a [a] en_n
[a:] sk
[A] hr
[a] hr
[a] sr
[a] it
[a:] la
[a] zh

+ 8
- 0
phsource/ph_croatian View File

@@ -146,4 +146,12 @@ phoneme R
lengthmod 6
endphoneme

phoneme r*
vowel nonsyllabic
starttype (@) endtype (@)
formants vowel/@-
unstressed
appendph *
length 50
endphoneme


+ 7
- 7
phsource/ph_finnish View File

@@ -337,12 +337,12 @@ phoneme h
vls glt apr
length 100
lengthmod 3
wave ufric/h_%70 // no vowel following
before (@) ufric/h@
before (a) ufric/ha
before (e) ufric/he
before (i) ufric/hi
before (o) ufric/hu_fi%70
before (u) ufric/hu_fi%80
wave h/h_%70 // no vowel following
before (@) h/h@
before (a) h/ha
before (e) h/he
before (i) h/hi
before (o) h/hu_fi%70
before (u) h/hu_fi%80
endphoneme


+ 15
- 15
phsource/ph_hindi View File

@@ -233,26 +233,26 @@ phoneme h // use with voiced aspirated conants [bh] [dh] etc
vls glt apr
length 100
lengthmod 3
wave ufric/h_%70 // no vowel following
before (@) ufric/h@+35
before (a) ufric/ha+35
before (e) ufric/he+35
before (i) ufric/hi+35
before (o) ufric/ho+35
before (u) ufric/hu+35
wave h/h_%70 // no vowel following
before (@) h/h@+35
before (a) h/ha+35
before (e) h/he+35
before (i) h/hi+35
before (o) h/ho+35
before (u) h/hu+35
endphoneme

phoneme H // use for full "h"
vls glt apr
length 100
lengthmod 3
wave ufric/h_%70 // no vowel following
before (@) ufric/h@
before (a) ufric/ha
before (e) ufric/he
before (i) ufric/hi
before (o) ufric/ho
before (u) ufric/hu
wave h/h_%70 // no vowel following
before (@) h/h@
before (a) h/ha
before (e) h/he
before (i) h/hi
before (o) h/ho
before (u) h/hu
endphoneme


@@ -345,7 +345,7 @@ phoneme th // dental variant of /t/ Same as [t] for now
vowelin f1=0 f2=1500 -300 300 f3=-100 80
vowelout f1=0 f2=1500 -300 250 f3=-100 80 rms=20
lengthmod 2
wave ustop/t_hi%50+ufric/h@
wave ustop/t_hi%50+h/h@
switchvoicing d
endphoneme


+ 7
- 7
phsource/ph_latin View File

@@ -149,13 +149,13 @@ phoneme <h>
vls glt apr
length 50
lengthmod 3
wave ufric/h_%70 // no vowel following
before (@) ufric/h@
before (a) ufric/ha
before (e) ufric/he
before (i) ufric/hi
before (o) ufric/ho
before (u) ufric/hu
wave h/h_%70 // no vowel following
before (@) h/h@
before (a) h/ha
before (e) h/he
before (i) h/hi
before (o) h/ho
before (u) h/hu
endphoneme



+ 221
- 8
phsource/ph_serbian View File

@@ -1,9 +1,222 @@
// include any phonemes which are different from those
// which are inherited from the base language(s)

phoneme a
vowel starttype (a) endtype (a)
length 160
formants vowel/a
reduceto & 4
// ufric/x_sr
// ufric/ch_sr
// ufric/sh_sr
// ustop/t_sr
// ustop/ts_sr
// ustop/tsh_sr
// r3/r_sr
// m/m_sr
// n/n_sr
// n^/nj_sr

// This file inherits phonemes from ph_croatian
// Only phonemes which differ from the inherited phonemes need
// to be included here.


phoneme t // dental variant of /t/
vls dnt stop
vowelin f1=0 f2=1600 -300 300 f3=-100 80
vowelout f1=0 f2=1600 -300 250 f3=-100 80 rms=20
lengthmod 2
wave ustop/t_sr%50
before _ ustop/t_sr%35
switchvoicing d
endphoneme


phoneme d
vcd alv stop
vowelin f1=2 f2=1700 -300 300 f3=-100 80 amp=16
vowelout f1=2 f2=1700 -300 300 f3=-100 80
formants d/d_dnt+ustop/t_sr%50
before _ d/d_dnt+ustop/t_sr
before r d/d_dnt+ustop/t_sr%50
after _ d/d_dnt+ustop/t_sr
after @ d/d_dnt+ustop/t_sr
lengthmod 5
switchvoicing t
endphoneme


// This is for letter "h" at the beginning of a word
phoneme x
vls vel frc
lengthmod 3
wave ufric/x_sr%70 // no vowel following
before (a) ufric/x_sr
before (e) ufric/ch_sr
before (i) ufric/ch_sr
before (o) ufric/x_sr
before (u) ufric/x_sr
endphoneme


// This is for letter "h" not at the beginning of word
phoneme h
vls vel frc
lengthmod 3
wave ufric/x_sr%70 // no vowel following
before (@) h/h@
before (a) ufric/x_sr
before (e) ufric/ch_sr
before (i) ufric/ch_sr
before (o) ufric/x_sr
before (u) ufric/x_sr
endphoneme



phoneme R
liquid
vowelin f1=0 f2=1600 -300 300 f3=-200 80
vowelout f1=2 f2=1600 -300 300 f3=-200 80 brk
formants r3/r_trill+r3/r_sr.wav%65
after & r3/r_trill+r3/r_sr.wav
after e r3/r_trill+r3/r_sr.wav
after i r3/r_trill+r3/r_sr.wav
after o r3/r_trill+r3/r_sr.wav
after u r3/r_trill+r3/r_sr.wav
after y r3/r_trill+r3/r_sr.wav
trill
lengthmod 6
endphoneme

// This is "r" which doesn't follow a vowel
phoneme r*
liquid
vowelin f1=0 f2=1600 -300 300 f3=-200 80
vowelout f1=2 f2=1600 -300 300 f3=-200 80 brk
formants r3/r_trill+r3/r_sr.wav%65
trill
lengthmod 6
endphoneme

// This is "r" which doesn't have a vowel before or after it
phoneme r-
liquid
vowelin f1=0 f2=1600 -300 300 f3=-200 80
vowelout f1=2 f2=1600 -300 300 f3=-200 80 brk
formants r3/r_trill+r3/r_sr.wav%65
trill
lengthmod 6
endphoneme



phoneme dZ
vcd pla afr sibilant
vowelin f1=2 f2=2300 200 400 f3=100 80
vowelout f1=2 f2=2300 250 300 f3=100 80 brk
formants dzh/dzh+ufric/sh_sr.wav
before _ dzh/dzh+ufric/sh_sr.wav
after _ NULL
after @ dzh/dzh+ufric/sh_sr.wav
lengthmod 5
switchvoicing tS
endphoneme


phoneme dZ;
vcd pla afr sibilant palatal
vowelin f1=2 f2=2700 400 600 f3=300 80 rate len=70
formants dzh/dzh+ustop/ts_sr.wav
before _ dzh/dzh+ustop/ts_sr.wav
after _ NULL
after @ dzh/dzh+ustop/ts_sr.wav
lengthmod 5
switchvoicing tS;
endphoneme


phoneme tS
vls pla afr sibilant
vowelin f1=0 f2=2300 200 400 f3=-100 80
lengthmod 2
wave ustop/tsh_sr.wav
before _ ustop/tsh_sr.wav
switchvoicing dZ
endphoneme


phoneme tS;
vls pal afr sibilant palatal
vowelin f1=0 f2=2700 400 600 f3=300 80 rate len=70
lengthmod 2
wave ustop/ts_sr.wav
before _ ustop/ts_sr.wav
switchvoicing dZ;
endphoneme


phoneme Z
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/sh_sr.wav
before _ voc/zh+ufric/sh_sr.wav
lengthmod 6
switchvoicing S
endphoneme


phoneme S
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 100
lengthmod 3
wave ufric/sh_sr.wav
before _ ufric/sh_sr.wav
switchvoicing Z
endphoneme


phoneme m
vcd blb nasal
vowelout f1=2 f2=1000 -500 -350 f3=-200 80 brk
length 100
lengthmod 4
formants NULL
after _ m/_m+m/m_sr.wav
before _ m/m_+m/m_sr.wav
before (r) m/mj+m/m_sr.wav
endphoneme


phoneme n
vcd alv nasal
vowelout f1=2 f2=1700 -300 250 f3=-100 80 rms=20 brk
length 100
lengthmod 4
formants NULL
after _ n/_n+n/n_sr.wav
after n n/_n+n/n_sr.wav // lengthen [nn]
before _ n/n_+n/n_sr.wav
before (r) n/nj+n/n_sr.wav
endphoneme


phoneme n^
vcd pal nasal palatal
vowelout f1=3 f2=2500 300 500 f3=100 80 len=45 brk rate
length 100
lengthmod 4
formants NULL
after _ n^/_n^+n^/nj_sr.wav
before _ n^/n^_+n^/nj_sr.wav
before (r) n/nj+n^/nj_sr.wav
endphoneme


phoneme N
vcd vel nasal
// vowelout brk
vowelout f1=3 f2=2300 300 400 f3=-200 80 len=40 rms=20 brk
length 100
formants NULL
after _ nn/_nn+n/n_sr.wav
before _ nn/nn_+n/n_sr.wav
before (r) nn/nnj+n^/nj_sr.wav
lengthmod 8 // longer than 'n'
endphoneme

+ 10
- 8
phsource/phonemes View File

@@ -27,7 +27,8 @@ phonemenumber 20 - // syllabic consonant
phonemenumber 21 _^_ // Change language
phonemenumber 22 _X1 // a language specific action
phonemenumber 23 _| // very short pause
phonemenumber 24 t# // reduced version of [t]
phonemenumber 24 _:: // long pause
phonemenumber 25 t# // reduced version of [t]

// The base phoneme table contains the utility phonemes, the consonants,
// and a schwa. The vowels are defined in the language specific phoneme
@@ -148,6 +149,7 @@ phoneme ? // glottal stop
starttype _ endtype _
length 45
lengthmod 5 // ??
beforenotvowel _ // change to pause_short
nolink
endphoneme

@@ -1109,13 +1111,13 @@ phoneme h
vls glt apr
length 100
lengthmod 3
wave ufric/h_%70 // no vowel following
before (@) ufric/h@
before (a) ufric/ha
before (e) ufric/he
before (i) ufric/hi
before (o) ufric/ho
before (u) ufric/hu
wave h/h_%70 // no vowel following
before (@) h/h@
before (a) h/ha
before (e) h/he
before (i) h/hi
before (o) h/ho
before (u) h/hu
endphoneme



BIN
phsource/ufric/ch_sr.wav View File


BIN
phsource/ufric/[email protected] View File


BIN
phsource/ufric/h_.wav View File


BIN
phsource/ufric/ha.wav View File


BIN
phsource/ufric/he.wav View File


BIN
phsource/ufric/hi.wav View File


BIN
phsource/ufric/ho.wav View File


BIN
phsource/ufric/hu.wav View File


BIN
phsource/ufric/hu_fi.wav View File


BIN
phsource/ufric/sh_sr.wav View File


BIN
phsource/ufric/x_sr.wav View File


BIN
phsource/ustop/t_sr.wav View File


BIN
phsource/ustop/ts_sr.wav View File


BIN
phsource/ustop/tsh_sr.wav View File


BIN
phsource/vdiph2/ei_4 View File


BIN
phsource/vdiph2/vowelchart.png View File


BIN
phsource/vowel/u_7 View File


BIN
phsource/vwl_en_us/a View File


+ 35
- 1
src/compiledata.cpp View File

@@ -2072,11 +2072,15 @@ wxString CompileAllDictionaries()
int err;
int errors = 0;
int dict_count = 0;
FILE *f_in;
FILE *log;
FILE *f_phused;
char dictname[80];
char fname_log[sizeof(path_dsource)+20];
char save_voice_name[80];
char path[sizeof(path_home)+40]; // path_dsource+20
char buf[200];
char voicename[80];

if(!wxDirExists(path_dictsource))
{
@@ -2121,8 +2125,38 @@ wxString CompileAllDictionaries()
dictstr = fname.GetName().BeforeLast('_');
strcpy(dictname,dictstr.mb_str(wxConvLocal));
dict_count++;
strcpy(voicename,dictname);

// read the *_rules file to see if a phoneme table is specified though a voice name
sprintf(path,"%s%s_rules",path_dsource,dictname);
if((f_in = fopen(path,"r")) != NULL)
{
unsigned int ix;
unsigned int c;

for(ix=0; ix<20; ix++)
{
if(fgets(buf,sizeof(buf),f_in) == NULL)
break;

if(memcmp(buf,"//voice=",8)==0)
{
for(ix=0; ix<sizeof(voicename); ix++)
{
if(isspace(c = buf[ix+8]))
{
break;
}
voicename[ix] = c;
}
voicename[ix] = 0;
break;
}
}
fclose(f_in);
}

LoadVoice(dictname,0);
LoadVoice(voicename,0);

if((err = CompileDictionary(path_dsource, dictname,log,NULL)) > 0)
{

+ 3
- 2
src/compiledict.cpp View File

@@ -34,6 +34,7 @@
//#define OPT_FORMAT // format the text and write formatted copy to Log file
//#define OUTPUT_FORMAT

extern void Write4Bytes(FILE *f, int value);
int HashDictionary(const char *string);

static FILE *f_log = NULL;
@@ -1378,8 +1379,8 @@ static int compile_dictrules(FILE *f_in, FILE *f_out, char *fname_temp)
}
if(replace1 != 0)
{
fwrite(&replace1,1,4,f_out);
fwrite(&replace2,1,4,f_out);
Write4Bytes(f_out,replace1); // write as little-endian
Write4Bytes(f_out,replace2); // if big-endian, reverse the bytes in LoadDictionary()
}
}
break;

+ 29
- 9
src/dictionary.cpp View File

@@ -86,6 +86,21 @@ void strncpy0(char *to,const char *from, int size)
to[size-1] = 0;
}

#ifdef ARCH_BIG
int reverse_word_bytes(int word)
{//=============================
// reverse the order of bytes from little-endian to big-endian
int ix;
int word2 = 0;

for(ix=24; ix>=0; ix -= 8)
{
word2 |= (word >> ix) & 0xff;
word2 = word2 << 8;
}
return(word2);
}
#endif


int LookupMnem(MNEM_TAB *table, char *string)
@@ -237,6 +252,15 @@ void Translator::InitGroups(void)
pw += 2; // find the end of the replacement list, each entry is 2 words.
}
p = (char *)(pw+1);

#ifdef ARCH_BIG
pw = (unsigned int *)langopts.replace_chars;
while(*pw != 0)
{
*pw = reverse_word_bytes(*pw);
pw++;
}
#endif
continue;
}

@@ -1280,23 +1304,19 @@ void Translator::SetWordStress(char *output, unsigned int dictionary_flags, int

if((ph = phoneme_tab[*p]) != NULL)
{
int gap = langopts.word_gap & 0xf00;

if(ph->type == phSTRESS)
ph = phoneme_tab[p[1]];

if(((gap) && (vowel_stress[1] >= 4) && (prev_stress >= 4)) || (langopts.word_gap & 0x8))
#ifdef deleted
int gap = langopts.word_gap & 0x700;
if((gap) && (vowel_stress[1] >= 4) && (prev_stress >= 4))
{
/* two primary stresses together, insert a short pause */
if(gap == 0x0300)
*output++ = phonPAUSE;
else
if((gap == 0x0200) && (ph->type == phVOWEL))
*output++ = phonGLOTTALSTOP;
else
*output++ = phonPAUSE_SHORT;
*output++ = pause_phonemes[gap >> 8];
}
else
#endif
if((langopts.vowel_pause & 0x30) && (ph->type == phVOWEL))
{
// word starts with a vowel

+ 3
- 2
src/phoneme.h View File

@@ -81,8 +81,9 @@
#define phonSWITCH 21
#define phonX1 22 // a language specific action
#define phonPAUSE_VSHORT 23
#define phonT_REDUCED 24

#define phonPAUSE_LONG 24
#define phonT_REDUCED 25
extern const unsigned char pause_phonemes[8]; // 0, vshort, short, pause, long, glottalstop

// place of articulation
#define phPLACE 0xf0000

+ 7
- 5
src/phonemelist.cpp View File

@@ -30,6 +30,7 @@
#include "translate.h"


const unsigned char pause_phonemes[8] = {0, phonPAUSE_VSHORT, phonPAUSE_SHORT, phonPAUSE, phonPAUSE_LONG, phonGLOTTALSTOP, phonPAUSE_LONG, phonPAUSE_LONG};


int Translator::ChangePhonemes(PHONEME_LIST2 *phlist, int n_ph, int index, PHONEME_TAB *ph, CHANGEPH *ch)
@@ -497,10 +498,6 @@ void Translator::MakePhonemeList(int post_pause, int start_sentence)
{
int x;

if(langopts.word_gap & 1)
{
insert_ph = phonPAUSE_VSHORT;
}
if(langopts.vowel_pause && (ph->type != phPAUSE) && (next->type == phVOWEL))
{
if(langopts.vowel_pause & 0x04)
@@ -524,6 +521,11 @@ void Translator::MakePhonemeList(int post_pause, int start_sentence)
insert_ph = phonPAUSE_SHORT;
}
}

if((x = (langopts.word_gap & 0x7)) != 0)
{
insert_ph = pause_phonemes[x];
}
}

next2 = phoneme_tab[(plist2+2)->phcode];
@@ -540,7 +542,7 @@ void Translator::MakePhonemeList(int post_pause, int start_sentence)
}
}
else
if(((langopts.word_gap & 2)==0) || ((plist2+1)->sourceix == 0))
if(((langopts.word_gap & 8)==0) || ((plist2+1)->sourceix == 0))
{
// This phoneme can be linked to a following vowel by inserting a linking phoneme
if(next->type == phVOWEL)

+ 1
- 1
src/setlengths.cpp View File

@@ -455,7 +455,7 @@ void Translator::CalcLengths()
{
len = langopts.length_mods0[next2->ph->length_mod *10+ next->ph->length_mod];

if((next->newword) && (langopts.word_gap & 0x4))
if((next->newword) && (langopts.word_gap & 0x20))
{
// consider as a pause + first phoneme of the next word
length_mod = (len + langopts.length_mods0[next->ph->length_mod *10+ 1])/2;

+ 14
- 4
src/speak.cpp View File

@@ -221,12 +221,13 @@ void MarkerEvent(int type, unsigned int char_position, int value, unsigned char



static void init_path(void)
{//========================
static void init_path(char *argv0)
{//===============================
#ifdef PLATFORM_WINDOWS
HKEY RegKey;
unsigned long size;
unsigned long var_type;
char *p;
char *env;
unsigned char buf[sizeof(path_home)-12];

@@ -234,9 +235,18 @@ static void init_path(void)
{
sprintf(path_home,"%s\\espeak-data",env);
if(GetFileLength(path_home) == -2)
return; // an espeak-data directory exists
return; // an espeak-data directory exists in the directory specified by environment variable
}

strcpy(path_home,argv0);
if((p = strrchr(path_home,'\\')) != NULL)
{
strcpy(&p[1],"espeak-data");
if(GetFileLength(path_home) == -2)
return; // an espeak-data directory exists in the same directory as the espeak program
}

// otherwise, look in the Windows Registry
buf[0] = 0;
RegOpenKeyEx(HKEY_LOCAL_MACHINE, "Software\\Microsoft\\Speech\\Voices\\Tokens\\eSpeak", 0, KEY_READ, &RegKey);
size = sizeof(buf);
@@ -383,7 +393,7 @@ int main (int argc, char **argv)
option_multibyte = espeakCHARS_AUTO; // auto
f_trans = stdout;

init_path();
init_path(argv[0]);

#ifdef NEED_GETOPT
optind = 1;

+ 5
- 1
src/speech.h View File

@@ -63,8 +63,12 @@ typedef struct {
int LookupMnem(MNEM_TAB *table, char *string);


#ifdef PLATFORM_WINDOWS
#define N_PATH_HOME 220
#else
#define N_PATH_HOME 150
#endif

#define N_PATH_HOME 120
extern char path_home[N_PATH_HOME]; // this is the espeak-data directory

extern void strncpy0(char *to,const char *from, int size);

+ 1
- 1
src/synthdata.cpp View File

@@ -35,7 +35,7 @@
#include "translate.h"
#include "wave.h"

const char *version_string = "1.29.17 08.Nov.07";
const char *version_string = "1.29.18 10.Nov.07";
const int version_phdata = 0x012901;

int option_device_number = -1;

+ 0
- 10
src/synthesize.cpp View File

@@ -1142,16 +1142,6 @@ int Generate(PHONEME_LIST *phoneme_list, int *n_ph, int resume)
DoMarker(espeakEVENT_WORD, (p->sourceix & 0x7ff) + clause_start_char, p->sourceix >> 11, clause_start_word + word_count++);
}

if((translator->langopts.word_gap & 1) || (translator->langopts.vowel_pause && (next->type == phVOWEL)))
{
// prevent word merging into next, make it look as though next is a pause
if((next->newword) && (next->type != phPAUSE))
{
// next_pause.ph = phoneme_tab[phonPAUSE];
// next = &next_pause;
}
}

EndAmplitude();

if(p->prepause > 0)

+ 0
- 2
src/tr_english.cpp View File

@@ -40,9 +40,7 @@ Translator_English::Translator_English() : Translator()
static const short stress_lengths2[8] = {182,140, 220,220, 0,0, 248,275};

memcpy(stress_lengths,stress_lengths2,sizeof(stress_lengths));
langopts.vowel_pause = 0;
langopts.stress_rule = 0;
langopts.word_gap = 0;

langopts.numbers = 0x41 + NUM_ROMAN;
}

+ 4
- 13
src/tr_languages.cpp View File

@@ -123,8 +123,6 @@ Translator *SelectTranslator(const char *name)

// 'diminished' is an unstressed final syllable
tr->langopts.stress_flags = 0x6 | 0x10;
tr->langopts.word_gap = 0;
tr->langopts.vowel_pause = 0;
tr->langopts.unstressed_wd1 = 0;
tr->langopts.unstressed_wd2 = 2;
tr->langopts.param[LOPT_SONORANT_MIN] = 120; // limit the shortening of sonorants before short vowels
@@ -141,7 +139,7 @@ Translator *SelectTranslator(const char *name)
static const short stress_lengths_de[8] = {150,130, 190,190, 0, 0, 260,275};
tr = new Translator();
tr->langopts.stress_rule = 0;
tr->langopts.word_gap = 0x2; // don't use linking phonemes
tr->langopts.word_gap = 0x8; // don't use linking phonemes
tr->langopts.vowel_pause = 0x30;
tr->langopts.param[LOPT_PREFIXES] = 1;
memcpy(tr->stress_lengths,stress_lengths_de,sizeof(tr->stress_lengths));
@@ -184,8 +182,6 @@ Translator *SelectTranslator(const char *name)
tr->langopts.length_mods0 = tr->langopts.length_mods; // don't lengthen vowels in the last syllable
tr->langopts.stress_rule = 2;
tr->langopts.stress_flags = 0x6; // mark unstressed final syllables as diminished
tr->langopts.word_gap = 0;
tr->langopts.vowel_pause = 0;
tr->langopts.unstressed_wd1 = 0;
tr->langopts.unstressed_wd2 = 2;
tr->langopts.param[LOPT_SONORANT_MIN] = 130; // limit the shortening of sonorants before short vowels
@@ -238,8 +234,6 @@ Translator *SelectTranslator(const char *name)
// stress last syllable if it doesn't end in vowel or "s" or "n"
// 'diminished' is an unstressed final syllable
tr->langopts.stress_flags = 0x200 | 0x6 | 0x10;
tr->langopts.word_gap = 0;
tr->langopts.vowel_pause = 0;
tr->langopts.unstressed_wd1 = 0;
tr->langopts.unstressed_wd2 = 2;
tr->langopts.param[LOPT_SONORANT_MIN] = 120; // limit the shortening of sonorants before short vowels
@@ -398,7 +392,6 @@ SetLengthMods(tr,3); // all equal

tr->langopts.length_mods0 = tr->langopts.length_mods; // don't lengthen vowels in the last syllable
tr->langopts.stress_rule = 2;
tr->langopts.word_gap = 0;
tr->langopts.vowel_pause = 1;
tr->langopts.unstressed_wd1 = 2;
tr->langopts.unstressed_wd2 = 2;
@@ -449,7 +442,6 @@ SetLengthMods(tr,3); // all equal
tr = new Translator();

tr->langopts.stress_rule = 0;
tr->langopts.word_gap = 0;
tr->langopts.vowel_pause = 1;
tr->langopts.param[LOPT_DIERESES] = 1;
tr->langopts.param[LOPT_PREFIXES] = 1;
@@ -637,7 +629,7 @@ SetLengthMods(tr,3); // all equal
tr->langopts.length_mods0 = tr->langopts.length_mods; // don't lengthen vowels in the last syllable

tr->langopts.stress_rule = 0;
tr->langopts.word_gap = 0x4; // length of a final vowel is less dependent on the next consonant
tr->langopts.word_gap = 0x20; // length of a final vowel is less dependent on the next consonant
tr->langopts.vowel_pause = 4;
tr->letter_groups[0] = vowels_vi;
// tr->langopts.param[LOPT_UNPRONOUNCABLE] = 1; // disable check for unpronouncable words
@@ -650,7 +642,7 @@ SetLengthMods(tr,3); // all equal
case L('z','h'):
case L_zhy:
{
static const short stress_lengths_zh[8] = {220,150, 230,230, 230,0, 230,250};
static const short stress_lengths_zh[8] = {230,150, 230,230, 230,0, 230,250};
static const unsigned char stress_amps_zh[] = {22,16, 22,22, 22,22, 22,22 };

tr = new Translator;
@@ -663,7 +655,7 @@ SetLengthMods(tr,3); // all equal
tr->langopts.length_mods0 = tr->langopts.length_mods; // don't lengthen vowels in the last syllable
tr->langopts.tone_numbers = 1; // a number after letters indicates a tone number (eg. pinyin or jyutping)
tr->langopts.ideographs = 1;
tr->langopts.word_gap = 0x5; // length of a final vowel is less dependent on the next consonant, don't merge consonant with next word
tr->langopts.word_gap = 0x21; // length of a final vowel is less dependent on the next consonant, don't merge consonant with next word
if(name2 == L('z','h'))
{
tr->langopts.textmode = 1;
@@ -955,7 +947,6 @@ Translator_Afrikaans::Translator_Afrikaans() : Translator()

static const short stress_lengths2[8] = {170,140, 220,220, 0, 0, 250,270};
langopts.stress_rule = 0;
langopts.word_gap = 0;
langopts.vowel_pause = 0x30;
langopts.param[LOPT_DIERESES] = 1;
langopts.param[LOPT_PREFIXES] = 1;

+ 3
- 4
src/translate.h View File

@@ -254,11 +254,10 @@ extern const int param_defaults[N_SPEECH_PARAM];


typedef struct {
// bit0=don't link consonants with the next word
// bit1=don't add linking phonemes
// bit2=length of a final vowel doesn't depend on the next phoneme
// bits0-2 separate words with (1=pause_vshort, 2=pause_short, 3=pause, 4=pause_long 5=[?] phonemme)
// bit 3=don't use linking phoneme
// bit4=longer pause before STOP, VSTOP,FRIC
// bit8-11=separate words with adjacent stressed syllables with (1=pause, 2=long pausem 3=[?] phoneme)
// bit5=length of a final vowel doesn't depend on the next phoneme
int word_gap;
int vowel_pause;
int stress_rule; // 1=first syllable, 2=penultimate, 3=last

Loading…
Cancel
Save