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-fd96e6ae7743master
th v w x z | 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 | 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 | Dictionary it_dict | ||||
p ph R R2 R3 s s. S; | p ph R R2 R3 s s. S; | ||||
t th ts ts. ts. tS; tS; tsh | t th ts ts. ts. tS; tS; tsh | ||||
v w x z z. | 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 |
naif naI'i:f | naif naI'i:f | ||||
naïve naI'i:v | naïve naI'i:v | ||||
nasa nasa2 | |||||
nascent neIs@nt | nascent neIs@nt | ||||
nativity $2 | nativity $2 | ||||
natural natS@r@L | natural natS@r@L |
as (tern a2s | as (tern a2s | ||||
as (thm as | as (thm as | ||||
as (tral as | as (tral as | ||||
as (tro aas | |||||
as (tro as | |||||
as (trolog a2s | as (trolog a2s | ||||
as (trono a2s | as (trono a2s | ||||
ass (ym as | ass (ym as |
?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 // τάς | |||||
// 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: | |||||
// "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 |
// translation rules for Croatian | |||||
// "hbs" is the ISO 639-3 code for Serbian/Croatian/Bosnian macrolanguage | |||||
// This file is UTF-8 encoded | // 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: | // Conditional rules: | ||||
// ?1 Croatian | // ?1 Croatian | ||||
// ?2 Bosnian (Bosna and Hercegovina) | |||||
// ?2 Serbian | |||||
// ?3 Bosnian (Bosna and Hercegovina) | |||||
// ?4 Serbian & Bosnian | |||||
.group a | .group a | ||||
a a | a a | ||||
e E | e E | ||||
j) e e | j) e e | ||||
e (j e | e (j e | ||||
._) exe %ekse // filetype | |||||
_) exe %ekse // filetype | |||||
?2 _) exe %eikse // filetype | |||||
.group f | .group f | ||||
f f | f f | ||||
.group q | .group q | ||||
q k | q k | ||||
qu kv | qu kv | ||||
?2 qu ku | |||||
.group r | .group r | ||||
r R | r R | ||||
A) r (A R | A) r (A R | ||||
K) r (A @-* | |||||
K) r (A r* // this phoneme expands to [@-*] | |||||
rr R | rr R | ||||
r (_ R | r (_ R | ||||
$ d'ol&R | $ d'ol&R | ||||
. totSk& | . totSk& | ||||
?2 . tatSk& | |||||
?4 . tatSk& | |||||
. (. _: | . (. _: | ||||
\.) . | \.) . | ||||
μ m'i | μ m'i | ||||
ν n'i | ν n'i | ||||
ξ ks'i | ξ ks'i | ||||
ο 'omIk@-*on_ | |||||
ο 'omIkr*on_ | |||||
.group 0xcf // Greek letters | .group 0xcf // Greek letters | ||||
ψ ps'i | ψ ps'i | ||||
ω 'omeg& | ω 'omeg& | ||||
ώ 'omeg&||t'onos | ώ 'omeg&||t'onos | ||||
ό 'omIk@-*on||t'onos | |||||
ό 'omIkr*on||t'onos | |||||
// 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: | |||||
name bosnian | name bosnian | ||||
language bs | language bs | ||||
phonemes hr | phonemes hr | ||||
dictionary hr | |||||
dictionary hbs | |||||
gender male | gender male | ||||
pitch 81 120 | pitch 81 120 |
name greek-ancient | |||||
language grc | |||||
gender male | |||||
stressLength 170 170 190 190 0 0 230 240 | |||||
dictrules 1 | |||||
words 1 | |||||
name croatian | name croatian | ||||
language hr | language hr | ||||
language hbs | |||||
gender male | gender male | ||||
dictionary hbs | |||||
// attributes towards !variant3 | // attributes towards !variant3 | ||||
pitch 81 120 | pitch 81 120 | ||||
formant 0 100 100 100 | formant 0 100 100 100 |
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 |
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 |
pl 15 107 | pl 15 107 | ||||
sk 29 125 | sk 29 125 | ||||
cs 6 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 | ru 38 126 | ||||
it 17 118 | it 17 118 | ||||
la 21 114 | la 21 114 | ||||
[d;] ro | [d;] ro | ||||
[d] el | [d] el | ||||
[d] sw | [d] sw | ||||
d/d_dnt [d] sr | |||||
d/dr [*] base | d/dr [*] base | ||||
[d] base | [d] base | ||||
[d[] base | [d[] base | ||||
[dz;] base | [dz;] base | ||||
[J] hi | [J] hi | ||||
[dZ;] mk | [dZ;] mk | ||||
[dZ] sr | |||||
[dZ;] sr | |||||
[dZ;] ru | [dZ;] ru | ||||
dzh/dzh_ [dZ] base | dzh/dzh_ [dZ] base | ||||
[dZ;] base | [dZ;] base | ||||
g/xg [g] base | g/xg [g] base | ||||
[g] cy | [g] cy | ||||
[g] es | [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/j2@ [(@)] base | j2/j2@ [(@)] base | ||||
j2/j2a [(a)] base | j2/j2a [(a)] base | ||||
[(o)] base | [(o)] base | ||||
[(u)] base | [(u)] base | ||||
m/_m [m] base | m/_m [m] base | ||||
[m] sr | |||||
[m;] ru | [m;] ru | ||||
[m;] ro | [m;] ro | ||||
[m] zh | [m] zh | ||||
m/m_ [m] base | m/m_ [m] base | ||||
[m] sr | |||||
[m;] ru | [m;] ru | ||||
[m;] ro | [m;] ro | ||||
m/m@ [(@)] base | m/m@ [(@)] base | ||||
m/me [(e)] base | m/me [(e)] base | ||||
m/mi [(i)] base | m/mi [(i)] base | ||||
m/mj [m] base | m/mj [m] base | ||||
[m] sr | |||||
[m;] ru | [m;] ru | ||||
[m;] ro | [m;] ro | ||||
m/mo [(o)] base | m/mo [(o)] base | ||||
m/m_sr.wav [m] sr | |||||
m/mu [(u)] base | m/mu [(u)] base | ||||
n^/_n^ [n^] base | n^/_n^ [n^] base | ||||
[n^] sr | |||||
n^/n^_ [n^] base | n^/n^_ [n^] base | ||||
[n^] sr | |||||
n^/n^@ [(@)] base | n^/n^@ [(@)] base | ||||
n^/n^#_ [n^#] is | n^/n^#_ [n^#] is | ||||
n/_n [n] base | n/_n [n] base | ||||
[n] sr | |||||
[n;] ro | [n;] ro | ||||
[n] zh | [n] zh | ||||
n/n_ [n] base | n/n_ [n] base | ||||
[n] sr | |||||
[n;] ro | [n;] ro | ||||
[n] zh | [n] zh | ||||
n/n@ [(@)] base | n/n@ [(@)] base | ||||
n/nj [n] base | n/nj [n] base | ||||
[n.] base | [n.] base | ||||
[n^] base | [n^] base | ||||
[n] sr | |||||
[n^] sr | |||||
[n;] ro | [n;] ro | ||||
n^/nj_sr.wav [N] sr | |||||
[n^] sr | |||||
nn/_nn [N] base | nn/_nn [N] base | ||||
[N] en | [N] en | ||||
[N] sr | |||||
[N] zh | [N] zh | ||||
nn/nn_ [N] base | nn/nn_ [N] base | ||||
[N] en | [N] en | ||||
[N] sr | |||||
[N] zh | [N] zh | ||||
nn/nn@ [(@)] base | nn/nn@ [(@)] base | ||||
nn/nn#_ [N#] is | nn/nn#_ [N#] is | ||||
nn/nne [(e)] base | nn/nne [(e)] base | ||||
nn/nni [(i)] base | nn/nni [(i)] base | ||||
nn/nnj [N] base | nn/nnj [N] base | ||||
[N] sr | |||||
nn/nno [(o)] base | nn/nno [(o)] base | ||||
nn/nnu [(u)] base | nn/nnu [(u)] base | ||||
n^/n^o [(o)] base | n^/n^o [(o)] base | ||||
n/no [(o)] base | n/no [(o)] base | ||||
n/_nr [n.] base | n/_nr [n.] base | ||||
n/nr_ [n.] base | n/nr_ [n.] base | ||||
n/n_sr.wav [N] sr | |||||
[n] sr | |||||
n^/n^u [(u)] base | n^/n^u [(u)] base | ||||
n/nu [(u)] base | n/nu [(u)] base | ||||
r2/_r2 [r-] base | r2/_r2 [r-] base | ||||
r3/r_n [r/] base | r3/r_n [r/] base | ||||
[r/] ru | [r/] ru | ||||
r3/r_o [(o)] base | r3/r_o [(o)] base | ||||
r3/r_sr.wav [R] sr | |||||
[r*] sr | |||||
[r-] sr | |||||
r3/r_trill [R2] base | r3/r_trill [R2] base | ||||
[R3] base | [R3] base | ||||
[r] af | [r] af | ||||
[r] cy | [r] cy | ||||
[r] nl | [r] nl | ||||
[R] sk | [R] sk | ||||
[R] sr | |||||
[r*] sr | |||||
[r-] sr | |||||
[x] pt | [x] pt | ||||
r3/r_trill2 [R] base | r3/r_trill2 [R] base | ||||
[R] hr | [R] hr | ||||
[(u)] base | [(u)] base | ||||
ufric/ch [C] base | ufric/ch [C] base | ||||
[C2] de | [C2] de | ||||
ufric/ch_sr [h] sr | |||||
[x] sr | |||||
ufric/f [f] base | ufric/f [f] base | ||||
[pF] de | [pF] de | ||||
[f;] ro | [f;] ro | ||||
[f] zh | [f] zh | ||||
ufric/f_ [f] base | ufric/f_ [f] base | ||||
[f;] ro | [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 | ufric/ll [L] base | ||||
[l#] is | [l#] is | ||||
ufric/s [s] base | ufric/s [s] base | ||||
ufric/sh_pzd_ [S;] base | ufric/sh_pzd_ [S;] base | ||||
[Z;] base | [Z;] base | ||||
ufric/sh_rfx [s.] base | ufric/sh_rfx [s.] base | ||||
ufric/sh_sr.wav [S] sr | |||||
[Z] sr | |||||
[dZ] sr | |||||
ufric/s_pzd [s;] base | ufric/s_pzd [s;] base | ||||
[z;] base | [z;] base | ||||
[s;] ro | [s;] ro | ||||
[x2] nl | [x2] nl | ||||
[x2] pt | [x2] pt | ||||
ufric/x_hr [x] hr | ufric/x_hr [x] hr | ||||
ufric/x_sr [h] sr | |||||
[x] sr | |||||
ustop/c [c] base | ustop/c [c] base | ||||
ustop/k [k] base | ustop/k [k] base | ||||
[k] en | [k] en | ||||
[t] el | [t] el | ||||
ustop/tsh_pzd [tS;] zh | ustop/tsh_pzd [tS;] zh | ||||
ustop/tsh_pzd_unasp [tS;] zh | ustop/tsh_pzd_unasp [tS;] zh | ||||
ustop/tsh_sr.wav [tS] sr | |||||
ustop/ts_pzd [tS;] base | ustop/ts_pzd [tS;] base | ||||
[ts;] base | [ts;] base | ||||
[ch] hi | [ch] hi | ||||
[c] hu | [c] hu | ||||
ustop/ts_pzd2 [c] hi | ustop/ts_pzd2 [c] hi | ||||
[c] hu | [c] hu | ||||
ustop/t_sr [d] sr | |||||
[t] sr | |||||
ustop/ts_rfx [ts.] zh | ustop/ts_rfx [ts.] zh | ||||
ustop/ts_rfx_unasp [ts.] zh | ustop/ts_rfx_unasp [ts.] zh | ||||
ustop/ts_sr.wav [tS;] sr | |||||
[dZ;] sr | |||||
ustop/ts_unasp [ts] zh | ustop/ts_unasp [ts] zh | ||||
ustop/t_unasp [t] zh | ustop/t_unasp [t] zh | ||||
vdiph/0i [OI] pt | vdiph/0i [OI] pt | ||||
voc/zh [Z] base | voc/zh [Z] base | ||||
[z.] base | [z.] base | ||||
[R^] sk | [R^] sk | ||||
[Z] sr | |||||
[Z;] ro | [Z;] ro | ||||
voc/zh_ [Z] base | voc/zh_ [Z] base | ||||
[z.] base | [z.] base | ||||
[@4] hi | [@4] hi | ||||
[@] hr | [@] hr | ||||
vowel/@- [@-] base | vowel/@- [@-] base | ||||
[r*] hr | |||||
vowel/& [a] en_rp | vowel/& [a] en_rp | ||||
[&] fi | [&] fi | ||||
[&:] hi | [&:] hi | ||||
[a:] sk | [a:] sk | ||||
[A] hr | [A] hr | ||||
[a] hr | [a] hr | ||||
[a] sr | |||||
[a] it | [a] it | ||||
[a:] la | [a:] la | ||||
[a] zh | [a] zh |
lengthmod 6 | lengthmod 6 | ||||
endphoneme | endphoneme | ||||
phoneme r* | |||||
vowel nonsyllabic | |||||
starttype (@) endtype (@) | |||||
formants vowel/@- | |||||
unstressed | |||||
appendph * | |||||
length 50 | |||||
endphoneme | |||||
vls glt apr | vls glt apr | ||||
length 100 | length 100 | ||||
lengthmod 3 | 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 | endphoneme | ||||
vls glt apr | vls glt apr | ||||
length 100 | length 100 | ||||
lengthmod 3 | 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 | endphoneme | ||||
phoneme H // use for full "h" | phoneme H // use for full "h" | ||||
vls glt apr | vls glt apr | ||||
length 100 | length 100 | ||||
lengthmod 3 | 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 | endphoneme | ||||
vowelin f1=0 f2=1500 -300 300 f3=-100 80 | vowelin f1=0 f2=1500 -300 300 f3=-100 80 | ||||
vowelout f1=0 f2=1500 -300 250 f3=-100 80 rms=20 | vowelout f1=0 f2=1500 -300 250 f3=-100 80 rms=20 | ||||
lengthmod 2 | lengthmod 2 | ||||
wave ustop/t_hi%50+ufric/h@ | |||||
wave ustop/t_hi%50+h/h@ | |||||
switchvoicing d | switchvoicing d | ||||
endphoneme | endphoneme | ||||
vls glt apr | vls glt apr | ||||
length 50 | length 50 | ||||
lengthmod 3 | 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 | endphoneme | ||||
// 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 | endphoneme |
phonemenumber 21 _^_ // Change language | phonemenumber 21 _^_ // Change language | ||||
phonemenumber 22 _X1 // a language specific action | phonemenumber 22 _X1 // a language specific action | ||||
phonemenumber 23 _| // very short pause | 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, | // 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 | ||||
starttype _ endtype _ | starttype _ endtype _ | ||||
length 45 | length 45 | ||||
lengthmod 5 // ?? | lengthmod 5 // ?? | ||||
beforenotvowel _ // change to pause_short | |||||
nolink | nolink | ||||
endphoneme | endphoneme | ||||
vls glt apr | vls glt apr | ||||
length 100 | length 100 | ||||
lengthmod 3 | 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 | endphoneme | ||||
int err; | int err; | ||||
int errors = 0; | int errors = 0; | ||||
int dict_count = 0; | int dict_count = 0; | ||||
FILE *f_in; | |||||
FILE *log; | FILE *log; | ||||
FILE *f_phused; | FILE *f_phused; | ||||
char dictname[80]; | char dictname[80]; | ||||
char fname_log[sizeof(path_dsource)+20]; | char fname_log[sizeof(path_dsource)+20]; | ||||
char save_voice_name[80]; | char save_voice_name[80]; | ||||
char path[sizeof(path_home)+40]; // path_dsource+20 | |||||
char buf[200]; | |||||
char voicename[80]; | |||||
if(!wxDirExists(path_dictsource)) | if(!wxDirExists(path_dictsource)) | ||||
{ | { | ||||
dictstr = fname.GetName().BeforeLast('_'); | dictstr = fname.GetName().BeforeLast('_'); | ||||
strcpy(dictname,dictstr.mb_str(wxConvLocal)); | strcpy(dictname,dictstr.mb_str(wxConvLocal)); | ||||
dict_count++; | 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) | if((err = CompileDictionary(path_dsource, dictname,log,NULL)) > 0) | ||||
{ | { |
//#define OPT_FORMAT // format the text and write formatted copy to Log file | //#define OPT_FORMAT // format the text and write formatted copy to Log file | ||||
//#define OUTPUT_FORMAT | //#define OUTPUT_FORMAT | ||||
extern void Write4Bytes(FILE *f, int value); | |||||
int HashDictionary(const char *string); | int HashDictionary(const char *string); | ||||
static FILE *f_log = NULL; | static FILE *f_log = NULL; | ||||
} | } | ||||
if(replace1 != 0) | 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; | break; |
to[size-1] = 0; | 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) | int LookupMnem(MNEM_TAB *table, char *string) | ||||
pw += 2; // find the end of the replacement list, each entry is 2 words. | pw += 2; // find the end of the replacement list, each entry is 2 words. | ||||
} | } | ||||
p = (char *)(pw+1); | p = (char *)(pw+1); | ||||
#ifdef ARCH_BIG | |||||
pw = (unsigned int *)langopts.replace_chars; | |||||
while(*pw != 0) | |||||
{ | |||||
*pw = reverse_word_bytes(*pw); | |||||
pw++; | |||||
} | |||||
#endif | |||||
continue; | continue; | ||||
} | } | ||||
if((ph = phoneme_tab[*p]) != NULL) | if((ph = phoneme_tab[*p]) != NULL) | ||||
{ | { | ||||
int gap = langopts.word_gap & 0xf00; | |||||
if(ph->type == phSTRESS) | if(ph->type == phSTRESS) | ||||
ph = phoneme_tab[p[1]]; | 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 */ | /* 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 | else | ||||
#endif | |||||
if((langopts.vowel_pause & 0x30) && (ph->type == phVOWEL)) | if((langopts.vowel_pause & 0x30) && (ph->type == phVOWEL)) | ||||
{ | { | ||||
// word starts with a vowel | // word starts with a vowel |
#define phonSWITCH 21 | #define phonSWITCH 21 | ||||
#define phonX1 22 // a language specific action | #define phonX1 22 // a language specific action | ||||
#define phonPAUSE_VSHORT 23 | #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 | // place of articulation | ||||
#define phPLACE 0xf0000 | #define phPLACE 0xf0000 |
#include "translate.h" | #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) | int Translator::ChangePhonemes(PHONEME_LIST2 *phlist, int n_ph, int index, PHONEME_TAB *ph, CHANGEPH *ch) | ||||
{ | { | ||||
int x; | 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 && (ph->type != phPAUSE) && (next->type == phVOWEL)) | ||||
{ | { | ||||
if(langopts.vowel_pause & 0x04) | if(langopts.vowel_pause & 0x04) | ||||
insert_ph = phonPAUSE_SHORT; | insert_ph = phonPAUSE_SHORT; | ||||
} | } | ||||
} | } | ||||
if((x = (langopts.word_gap & 0x7)) != 0) | |||||
{ | |||||
insert_ph = pause_phonemes[x]; | |||||
} | |||||
} | } | ||||
next2 = phoneme_tab[(plist2+2)->phcode]; | next2 = phoneme_tab[(plist2+2)->phcode]; | ||||
} | } | ||||
} | } | ||||
else | 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 | // This phoneme can be linked to a following vowel by inserting a linking phoneme | ||||
if(next->type == phVOWEL) | if(next->type == phVOWEL) |
{ | { | ||||
len = langopts.length_mods0[next2->ph->length_mod *10+ next->ph->length_mod]; | 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 | // consider as a pause + first phoneme of the next word | ||||
length_mod = (len + langopts.length_mods0[next->ph->length_mod *10+ 1])/2; | length_mod = (len + langopts.length_mods0[next->ph->length_mod *10+ 1])/2; |
static void init_path(void) | |||||
{//======================== | |||||
static void init_path(char *argv0) | |||||
{//=============================== | |||||
#ifdef PLATFORM_WINDOWS | #ifdef PLATFORM_WINDOWS | ||||
HKEY RegKey; | HKEY RegKey; | ||||
unsigned long size; | unsigned long size; | ||||
unsigned long var_type; | unsigned long var_type; | ||||
char *p; | |||||
char *env; | char *env; | ||||
unsigned char buf[sizeof(path_home)-12]; | unsigned char buf[sizeof(path_home)-12]; | ||||
{ | { | ||||
sprintf(path_home,"%s\\espeak-data",env); | sprintf(path_home,"%s\\espeak-data",env); | ||||
if(GetFileLength(path_home) == -2) | 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; | buf[0] = 0; | ||||
RegOpenKeyEx(HKEY_LOCAL_MACHINE, "Software\\Microsoft\\Speech\\Voices\\Tokens\\eSpeak", 0, KEY_READ, &RegKey); | RegOpenKeyEx(HKEY_LOCAL_MACHINE, "Software\\Microsoft\\Speech\\Voices\\Tokens\\eSpeak", 0, KEY_READ, &RegKey); | ||||
size = sizeof(buf); | size = sizeof(buf); | ||||
option_multibyte = espeakCHARS_AUTO; // auto | option_multibyte = espeakCHARS_AUTO; // auto | ||||
f_trans = stdout; | f_trans = stdout; | ||||
init_path(); | |||||
init_path(argv[0]); | |||||
#ifdef NEED_GETOPT | #ifdef NEED_GETOPT | ||||
optind = 1; | optind = 1; |
int LookupMnem(MNEM_TAB *table, char *string); | 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 char path_home[N_PATH_HOME]; // this is the espeak-data directory | ||||
extern void strncpy0(char *to,const char *from, int size); | extern void strncpy0(char *to,const char *from, int size); |
#include "translate.h" | #include "translate.h" | ||||
#include "wave.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; | const int version_phdata = 0x012901; | ||||
int option_device_number = -1; | int option_device_number = -1; |
DoMarker(espeakEVENT_WORD, (p->sourceix & 0x7ff) + clause_start_char, p->sourceix >> 11, clause_start_word + word_count++); | 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(); | EndAmplitude(); | ||||
if(p->prepause > 0) | if(p->prepause > 0) |
static const short stress_lengths2[8] = {182,140, 220,220, 0,0, 248,275}; | static const short stress_lengths2[8] = {182,140, 220,220, 0,0, 248,275}; | ||||
memcpy(stress_lengths,stress_lengths2,sizeof(stress_lengths)); | memcpy(stress_lengths,stress_lengths2,sizeof(stress_lengths)); | ||||
langopts.vowel_pause = 0; | |||||
langopts.stress_rule = 0; | langopts.stress_rule = 0; | ||||
langopts.word_gap = 0; | |||||
langopts.numbers = 0x41 + NUM_ROMAN; | langopts.numbers = 0x41 + NUM_ROMAN; | ||||
} | } |
// 'diminished' is an unstressed final syllable | // 'diminished' is an unstressed final syllable | ||||
tr->langopts.stress_flags = 0x6 | 0x10; | tr->langopts.stress_flags = 0x6 | 0x10; | ||||
tr->langopts.word_gap = 0; | |||||
tr->langopts.vowel_pause = 0; | |||||
tr->langopts.unstressed_wd1 = 0; | tr->langopts.unstressed_wd1 = 0; | ||||
tr->langopts.unstressed_wd2 = 2; | tr->langopts.unstressed_wd2 = 2; | ||||
tr->langopts.param[LOPT_SONORANT_MIN] = 120; // limit the shortening of sonorants before short vowels | tr->langopts.param[LOPT_SONORANT_MIN] = 120; // limit the shortening of sonorants before short vowels | ||||
static const short stress_lengths_de[8] = {150,130, 190,190, 0, 0, 260,275}; | static const short stress_lengths_de[8] = {150,130, 190,190, 0, 0, 260,275}; | ||||
tr = new Translator(); | tr = new Translator(); | ||||
tr->langopts.stress_rule = 0; | 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.vowel_pause = 0x30; | ||||
tr->langopts.param[LOPT_PREFIXES] = 1; | tr->langopts.param[LOPT_PREFIXES] = 1; | ||||
memcpy(tr->stress_lengths,stress_lengths_de,sizeof(tr->stress_lengths)); | memcpy(tr->stress_lengths,stress_lengths_de,sizeof(tr->stress_lengths)); | ||||
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 = 2; | tr->langopts.stress_rule = 2; | ||||
tr->langopts.stress_flags = 0x6; // mark unstressed final syllables as diminished | 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_wd1 = 0; | ||||
tr->langopts.unstressed_wd2 = 2; | tr->langopts.unstressed_wd2 = 2; | ||||
tr->langopts.param[LOPT_SONORANT_MIN] = 130; // limit the shortening of sonorants before short vowels | tr->langopts.param[LOPT_SONORANT_MIN] = 130; // limit the shortening of sonorants before short vowels | ||||
// stress last syllable if it doesn't end in vowel or "s" or "n" | // stress last syllable if it doesn't end in vowel or "s" or "n" | ||||
// 'diminished' is an unstressed final syllable | // 'diminished' is an unstressed final syllable | ||||
tr->langopts.stress_flags = 0x200 | 0x6 | 0x10; | 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_wd1 = 0; | ||||
tr->langopts.unstressed_wd2 = 2; | tr->langopts.unstressed_wd2 = 2; | ||||
tr->langopts.param[LOPT_SONORANT_MIN] = 120; // limit the shortening of sonorants before short vowels | tr->langopts.param[LOPT_SONORANT_MIN] = 120; // limit the shortening of sonorants before short vowels | ||||
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 = 2; | tr->langopts.stress_rule = 2; | ||||
tr->langopts.word_gap = 0; | |||||
tr->langopts.vowel_pause = 1; | tr->langopts.vowel_pause = 1; | ||||
tr->langopts.unstressed_wd1 = 2; | tr->langopts.unstressed_wd1 = 2; | ||||
tr->langopts.unstressed_wd2 = 2; | tr->langopts.unstressed_wd2 = 2; | ||||
tr = new Translator(); | tr = new Translator(); | ||||
tr->langopts.stress_rule = 0; | tr->langopts.stress_rule = 0; | ||||
tr->langopts.word_gap = 0; | |||||
tr->langopts.vowel_pause = 1; | tr->langopts.vowel_pause = 1; | ||||
tr->langopts.param[LOPT_DIERESES] = 1; | tr->langopts.param[LOPT_DIERESES] = 1; | ||||
tr->langopts.param[LOPT_PREFIXES] = 1; | tr->langopts.param[LOPT_PREFIXES] = 1; | ||||
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 = 0; | 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->langopts.vowel_pause = 4; | ||||
tr->letter_groups[0] = vowels_vi; | tr->letter_groups[0] = vowels_vi; | ||||
// tr->langopts.param[LOPT_UNPRONOUNCABLE] = 1; // disable check for unpronouncable words | // tr->langopts.param[LOPT_UNPRONOUNCABLE] = 1; // disable check for unpronouncable words | ||||
case L('z','h'): | case L('z','h'): | ||||
case L_zhy: | 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 }; | static const unsigned char stress_amps_zh[] = {22,16, 22,22, 22,22, 22,22 }; | ||||
tr = new Translator; | tr = new Translator; | ||||
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.tone_numbers = 1; // a number after letters indicates a tone number (eg. pinyin or jyutping) | tr->langopts.tone_numbers = 1; // a number after letters indicates a tone number (eg. pinyin or jyutping) | ||||
tr->langopts.ideographs = 1; | 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')) | if(name2 == L('z','h')) | ||||
{ | { | ||||
tr->langopts.textmode = 1; | tr->langopts.textmode = 1; | ||||
static const short stress_lengths2[8] = {170,140, 220,220, 0, 0, 250,270}; | static const short stress_lengths2[8] = {170,140, 220,220, 0, 0, 250,270}; | ||||
langopts.stress_rule = 0; | langopts.stress_rule = 0; | ||||
langopts.word_gap = 0; | |||||
langopts.vowel_pause = 0x30; | langopts.vowel_pause = 0x30; | ||||
langopts.param[LOPT_DIERESES] = 1; | langopts.param[LOPT_DIERESES] = 1; | ||||
langopts.param[LOPT_PREFIXES] = 1; | langopts.param[LOPT_PREFIXES] = 1; |
typedef struct { | 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 | // 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 word_gap; | ||||
int vowel_pause; | int vowel_pause; | ||||
int stress_rule; // 1=first syllable, 2=penultimate, 3=last | int stress_rule; // 1=first syllable, 2=penultimate, 3=last |