Indicate unrecognized letters within a word by clicks. lang-tr: Non-standard lower case conversion for "I". Tone languages: indicate emphasis by increasing the pitch range. git-svn-id: https://espeak.svn.sourceforge.net/svnroot/espeak/trunk@151 d46cf337-b52f-0410-862d-fd96e6ae7743master
potchefstroom pOtSIfstr'o@m | potchefstroom pOtSIfstr'o@m | ||||
pretoria prit'o@ria | pretoria prit'o@ria | ||||
stellenbosch st%&l@mbOs | stellenbosch st%&l@mbOs | ||||
swellendam $3 | |||||
tunisië $2 | tunisië $2 | ||||
turkye $2 | turkye $2 | ||||
upington apiNt@n | upington apiNt@n | ||||
debora d@bo@ra | debora d@bo@ra | ||||
debussy d@bus'i: | debussy d@bus'i: | ||||
der d@r | der d@r | ||||
derick dErik | |||||
deventer d'e@v@nt@r | deventer d'e@v@nt@r | ||||
du $u | du $u | ||||
(du pisanie) du||pis'A:ni | (du pisanie) du||pis'A:ni | ||||
stephan ste@fan | stephan ste@fan | ||||
stephanus st@fA:nWs | stephanus st@fA:nWs | ||||
strauss straUs | strauss straUs | ||||
suzanne suz'A:n | |||||
suzette suz'Et | |||||
tania tanja | tania tanja | ||||
telemann te@l@man | telemann te@l@man | ||||
terblanche t@rblA:nS | terblanche t@rblA:nS | ||||
ekstra Ekstra | ekstra Ekstra | ||||
elders &ld@rs | elders &ld@rs | ||||
elite il'i:t | elite il'i:t | ||||
encore A~NkO:r | |||||
enige e@nIx2@ | enige e@nIx2@ | ||||
eone $2 | eone $2 | ||||
era e@ra | era e@ra | ||||
finaliste $3 | finaliste $3 | ||||
fort fOrt | fort fOrt | ||||
forte fOrt@ | forte fOrt@ | ||||
frontaal $2 | |||||
frontale $2 | |||||
g'n x2In | g'n x2In | ||||
gaandeweg x2A:nd@v&x2 | gaandeweg x2A:nd@v&x2 | ||||
onmin $1 | onmin $1 | ||||
oorleg $2 | oorleg $2 | ||||
oorstroom $2 | oorstroom $2 | ||||
oorwaai $1 | |||||
oplaas $2 | oplaas $2 | ||||
onraad $1 | onraad $1 | ||||
onrus $1 | onrus $1 |
ara (bi %arA: // fix 1st a sound and stress: Arabië/Arabies/-e | ara (bi %arA: // fix 1st a sound and stress: Arabië/Arabies/-e | ||||
ara (bier %ar%a // Stress and a sounds: Arabier/-e | ara (bier %ar%a // Stress and a sounds: Arabier/-e | ||||
C) are (CA A:r@ // e sound: amptenaredom/blaredak/garebiltong/haredos/jarelange | C) are (CA A:r@ // e sound: amptenaredom/blaredak/garebiltong/haredos/jarelange | ||||
amarula %am%arul%a // fix stress and a sounds: amarula and compounds | |||||
a (riA 'A: // akwarium/barium/estuarium/herbarium/seminaria | a (riA 'A: // akwarium/barium/estuarium/herbarium/seminaria | ||||
a (ristokr %a // shorten 1st a: aristokrasie/-kraat/-krate/-kraties | a (ristokr %a // shorten 1st a: aristokrasie/-kraat/-krate/-kraties | ||||
@C) as (_ as // shorten final a of words ending in -as: rigtingvas/jonkmanskas, etc. | @C) as (_ as // shorten final a of words ending in -as: rigtingvas/jonkmanskas, etc. | ||||
bota (nie_N b%o@t%a // stress on 3rd slb.: botanie | bota (nie_N b%o@t%a // stress on 3rd slb.: botanie | ||||
_) bowe b''o@v@ // fix e sound in compounds: boweaards/bowemaans/bowetoon | _) bowe b''o@v@ // fix e sound in compounds: boweaards/bowemaans/bowetoon | ||||
_) breda br@dA: // move default stress: (van )Breda/Bredasdorp | _) breda br@dA: // move default stress: (van )Breda/Bredasdorp | ||||
bril (jant br@l // move default stress: briljant/-e/-heid/-ste | |||||
bru (ta br%y // move default stress: brutaal/brutale/brutaliteit | bru (ta br%y // move default stress: brutaal/brutale/brutaliteit | ||||
buffe (t b%WfE // fix stress and e sound: buffet/-te/buffetete, etc. | buffe (t b%WfE // fix stress and e sound: buffet/-te/buffetete, etc. | ||||
buiten (ge b'Yyt@n // buitengewoon/s/buitengewone/buitengemeen | buiten (ge b'Yyt@n // buitengewoon/s/buitengewone/buitengemeen | ||||
di (ploma d@ // move default stress: diploma/-s and compounds/diplomaat | di (ploma d@ // move default stress: diploma/-s and compounds/diplomaat | ||||
direk d%irEk // direk/-sie/-te/-theid/indirek... | direk d%irEk // direk/-sie/-te/-theid/indirek... | ||||
dirig (e d@r@x2 // fix stress and i sounds: dirigeer/dirigent and compounds | dirig (e d@r@x2 // fix stress and i sounds: dirigeer/dirigent and compounds | ||||
_) dis (inP3 d@s // disintegrasie/disinvestering and similar | |||||
dis (koers d@s // move default stress: diskoers/-e | dis (koers d@s // move default stress: diskoers/-e | ||||
diskre (s d@skrE // fix stress and e sound: diskresie/diskresionêre | diskre (s d@skrE // fix stress and e sound: diskresie/diskresionêre | ||||
_) dis (kre d@s // move default stress: diskreet/-heid/-ste/diskrete | _) dis (kre d@s // move default stress: diskreet/-heid/-ste/diskrete | ||||
_) dis (oP3 d@s // disorganisasie/disoriënteer | |||||
divide (nd d@v@dE //dividende etc. | divide (nd d@v@dE //dividende etc. | ||||
d (_N t // | d (_N t // | ||||
dj c // palatal stop | dj c // palatal stop | ||||
gel) eer e@r // words containing geleer take default stress: regsgeleerde | gel) eer e@r // words containing geleer take default stress: regsgeleerde | ||||
@k) eer e@r // words containing keer take default stress, except for: | @k) eer e@r // words containing keer take default stress, except for: | ||||
ik) eer 'e@r // abdikeer/kommunikeer, etc. | ik) eer 'e@r // abdikeer/kommunikeer, etc. | ||||
oriënt) eer e@r // default stress: beroepsgeoriënteerd and similar | |||||
Cm) eer e@r // words containing meer preceded by consonant take default stress: bergmeer/strandmeer, etc. | Cm) eer e@r // words containing meer preceded by consonant take default stress: bergmeer/strandmeer, etc. | ||||
rm) eer 'e@r // but not words like: alarmeer/gereformeerd/transformeer | rm) eer 'e@r // but not words like: alarmeer/gereformeerd/transformeer | ||||
sf) eer e@r // sfeer at end of compounds does not take stress: atmosfeer, etc. | sf) eer e@r // sfeer at end of compounds does not take stress: atmosfeer, etc. | ||||
C) ensies 'Ensis // forensiese | C) ensies 'Ensis // forensiese | ||||
@) enswaar (dig @nsv'A:r // noemenswaardige/bejammerenswaardig | @) enswaar (dig @nsv'A:r // noemenswaardige/bejammerenswaardig | ||||
@C) ent (K 'Ent // orent/student/presidentsrede | @C) ent (K 'Ent // orent/student/presidentsrede | ||||
@C) ent (e_ 'Ent // plurals of some of the above### | |||||
@C) ent (e_ 'Ent // plurals of some of the above | |||||
en) ent (_ Ent // restore default stress: koppenent/voetenent | en) ent (_ Ent // restore default stress: koppenent/voetenent | ||||
pr) ent (+ Ent // default stress for compounds of prent | pr) ent (+ Ent // default stress for compounds of prent | ||||
@s) ent (rA Ent // winkelsentrum/studentesentrum, etc. | @s) ent (rA Ent // winkelsentrum/studentesentrum, etc. | ||||
feite feIt@ // fix 2nd e sound: feitebepaling/-bevinding/-bron/-fout/-kennis/-lik | feite feIt@ // fix 2nd e sound: feitebepaling/-bevinding/-bron/-fout/-kennis/-lik | ||||
@) fel (end f@l // betwyfelend/skuifelend/weifelend | @) fel (end f@l // betwyfelend/skuifelend/weifelend | ||||
@) fel (ing f@l // betwyfeling/skuifeling/weifeling | @) fel (ing f@l // betwyfeling/skuifeling/weifeling | ||||
fenom (e f@n%Om // fix stress and vowel sounds: fenomeen/-ene | |||||
fenomen (A@ f@n%Om@n // fix stress and vowel sounds: fenomenaal/-ale/fenomeneel/-ele | |||||
fero (mo f%Er%u // fix stress and vowel sounds: feromoon/feromone | fero (mo f%Er%u // fix stress and vowel sounds: feromoon/feromone | ||||
fer (weel f@r // fix stress and 1st e sound: ferweel and many compounds | fer (weel f@r // fix stress and 1st e sound: ferweel and many compounds | ||||
fessor fEs@r // fix last o sound: professor and compounds like universiteitsprofessor | fessor fEs@r // fix last o sound: professor and compounds like universiteitsprofessor | ||||
foto fo@tu | foto fo@tu | ||||
fo (togra fo@ // move default stress: fotograaf and similar | fo (togra fo@ // move default stress: fotograaf and similar | ||||
_) fran (CisCA fr%an // fix stress and a sound: Fransiskus/Franciscus/Francisca | _) fran (CisCA fr%an // fix stress and a sound: Fransiskus/Franciscus/Francisca | ||||
front (A fr%Ont // fix stress and e sound: konfronterend/-e/konfrontering | |||||
fru (str fr%W // move default stress: frustrerend/-e | fru (str fr%W // move default stress: frustrerend/-e | ||||
fung (e f%WNx2 // fungeer/fungerende/fungering | fung (e f%WNx2 // fungeer/fungerende/fungering | ||||
fungus fWNgWs_ // fix g sound: fungus and 2nd us sound in compounds: fungusinfeksie | fungus fWNgWs_ // fix g sound: fungus and 2nd us sound in compounds: fungusinfeksie | ||||
gra (niet x2r%a // move default stress and fix a sound: graniet and compounds | gra (niet x2r%a // move default stress and fix a sound: graniet and compounds | ||||
gra (sieu x2r%a // fix stress and shorten a sound: grasieus/-e | gra (sieu x2r%a // fix stress and shorten a sound: grasieus/-e | ||||
_) gras (A x2ras_ // fix stress and a sound: graseter/grasoppervlakte/grasuie | _) gras (A x2ras_ // fix stress and a sound: graseter/grasoppervlakte/grasuie | ||||
gra (sie x2rA: // but restore default stress and long a: grasie | |||||
_) gra (sie x2rA: // but restore default stress and long a: grasie | |||||
_) gri (mA x2r@ // grimas/grimeer/-middel and other compounds/grimering | _) gri (mA x2r@ // grimas/grimeer/-middel and other compounds/grimering | ||||
grotere x2ro@t@r@ // fix vowel sounds and stress: grotere/-s | grotere x2ro@t@r@ // fix vowel sounds and stress: grotere/-s | ||||
guerrilla g@r'Ila | guerrilla g@r'Ila | ||||
_) in (aCemP2 'In_ //inasem/inademing, etc. | _) in (aCemP2 'In_ //inasem/inademing, etc. | ||||
self) in (C@ _@n // selfingenome/-nheid/selfinkeer, etc. | self) in (C@ _@n // selfingenome/-nheid/selfinkeer, etc. | ||||
_) in (a@P2 In // inakkuraat/inaktief/inaktiwiteit | _) in (a@P2 In // inakkuraat/inaktief/inaktiwiteit | ||||
invest (@ @nv%Est // fix stress, v and e sounds: investeer/-erende/-ering | |||||
_) iese (C ,is@ // iesegrimmig and derivitives | _) iese (C ,is@ // iesegrimmig and derivitives | ||||
ieterma (g %it@rm%a // fix stress and a sound: ietermagô | ieterma (g %it@rm%a // fix stress and a sound: ietermagô | ||||
ieus i'Y@s // this ending always takes stress | ieus i'Y@s // this ending always takes stress | ||||
_em) i (r @ | _em) i (r @ | ||||
ië e@:@- // i followed by "deelteken e" | ië e@:@- // i followed by "deelteken e" | ||||
iën i'En //i deelteken e n | iën i'En //i deelteken e n | ||||
or) iën i;En // default stress: (beroeps)georiënteerd, etc. | |||||
iëteit %i@t'eIt // fix stress: (imk)piëteit/variëteit | iëteit %i@t'eIt // fix stress: (imk)piëteit/variëteit | ||||
iee (C i'e@ // distansieer/finansieer/finansieel/prieel | iee (C i'e@ // distansieer/finansieer/finansieel/prieel | ||||
_) meege (@P5 m'e@x2@ | _) meege (@P5 m'e@x2@ | ||||
me (juf m@ // move default stress and shorten e sound | me (juf m@ // move default stress and shorten e sound | ||||
me (laats m@ // fix stress and e sound: melaats/-e/-heid | me (laats m@ // fix stress and e sound: melaats/-e/-heid | ||||
melancholie (_N m%El%aNk%o@li // fix stress and 1st e sound: melankolie | |||||
melancholie (_N m%El%aNk%o@li // fix stress and 1st e sound: melancholie | |||||
melanch m%El%aNk // stress and 1st e sound: melancholies/melancholiek/-e/melancholikus/-ci | melanch m%El%aNk // stress and 1st e sound: melancholies/melancholiek/-e/melancholikus/-ci | ||||
melankolie (_N m%El%aNk%o@li // fix stress and 1st e sound: melankolie | |||||
melank m%El%aNk // stress and 1st e sound: melankolies/melankoliek/-e/melankolikus/-ci | |||||
mem (bra m%Em // move default stress: membraan/membrane | mem (bra m%Em // move default stress: membraan/membrane | ||||
memo (ran m%Em%u // fix stress and vowel sounds: memorandum/memoranda and compounds | memo (ran m%Em%u // fix stress and vowel sounds: memorandum/memoranda and compounds | ||||
meneer m@n'e@r // meneer/meneertjie | meneer m@n'e@r // meneer/meneertjie | ||||
orgi (de %Orx2@ // move default stress: orgidee/orgideë and compounds | orgi (de %Orx2@ // move default stress: orgidee/orgideë and compounds | ||||
orie o@ri | orie o@ri | ||||
oriu 'o@riW | oriu 'o@riW | ||||
oriënt (@ %o@r%ij%Ent // disoriëntering/(beroeps)georiënteerd | |||||
_) or (ka %Or // move default stress: orkaan/orkane/orkaanwaarskuwing... | _) or (ka %Or // move default stress: orkaan/orkane/orkaanwaarskuwing... | ||||
orkes %OrkEs // orkes and compounds | orkes %OrkEs // orkes and compounds | ||||
_) os (moC %Os // move default stress: osmose/osmoties/-e | _) os (moC %Os // move default stress: osmose/osmoties/-e | ||||
oor (reed %o@r // move default stress | oor (reed %o@r // move default stress | ||||
oorre (dA %o@re@ // move default stress: oorreding/-skrag/-vermoë | oorre (dA %o@re@ // move default stress: oorreding/-skrag/-vermoë | ||||
oor (rompel %o@r // move default stress | oor (rompel %o@r // move default stress | ||||
oorsaaklik %o@rsA:kl@k // fix stress: oorsaaklik/-e/-heid | |||||
_) oor (skadu %o@r // move default stress: oorskadu/-wing | _) oor (skadu %o@r // move default stress: oorskadu/-wing | ||||
_) oor (skat %o@r // move default stress: oorskat/-te/-ting | _) oor (skat %o@r // move default stress: oorskat/-te/-ting | ||||
oor (skrei %o@r // stress: oorskrei/-ding snd compounds | oor (skrei %o@r // stress: oorskrei/-ding snd compounds | ||||
oor (tuig %o@r // oortuig/oortuiging/oortuigende | oor (tuig %o@r // oortuig/oortuiging/oortuigende | ||||
_) oor (vleuel %o@r // move default stress: oorvleuel/-ing | _) oor (vleuel %o@r // move default stress: oorvleuel/-ing | ||||
_) oor (vloedig %o@r // move default stress: oorvloedig/-e vs. oorvloed | _) oor (vloedig %o@r // move default stress: oorvloedig/-e vs. oorvloed | ||||
_) oor (w o@r' // oorwin/oorweeg/oorweging/oorweldig/end... | |||||
_) oor (w %o@r // oorwin/oorweeg/oorweging/oorweldig/end... | |||||
oor (wig 'o@r // stress | oor (wig 'o@r // stress | ||||
oot (moedig %o@t // move default stress: ootmoedig/-e/-heid | oot (moedig %o@t // move default stress: ootmoedig/-e/-heid | ||||
parme (saan p%arm@ // move default stress: parmesaan(kaas) and compounds | parme (saan p%arm@ // move default stress: parmesaan(kaas) and compounds | ||||
paro (di p%ar%u // fix stress and vowel sounds: parodie and compounds | paro (di p%ar%u // fix stress and vowel sounds: parodie and compounds | ||||
parti (tu p%art@ // fix stress and i sound: partituur/partiture and compounds | parti (tu p%art@ // fix stress and i sound: partituur/partiture and compounds | ||||
pa (stel p%a // move default stress: pastel(kleur) and similar compounds | |||||
pa (tat p@ // patat/warmpatat/wurgpatat | pa (tat p@ // patat/warmpatat/wurgpatat | ||||
patie (KN p%at'i //words ending in patie has stress at end + a sound/simpatiek | patie (KN p%at'i //words ending in patie has stress at end + a sound/simpatiek | ||||
@) paties p'A:tis // fix stress and a sound: simpaties/-e | @) paties p'A:tis // fix stress and a sound: simpaties/-e | ||||
teleks t&lEks // fix stress and vowel sounds: teleks and compounds | teleks t&lEks // fix stress and vowel sounds: teleks and compounds | ||||
_) teler te@l@r // fix stress and vowel sounds: teler/-s/-y/-svereniging, etc. | _) teler te@l@r // fix stress and vowel sounds: teler/-s/-y/-svereniging, etc. | ||||
@C) te (nk t& ++ //tenk and friends | @C) te (nk t& ++ //tenk and friends | ||||
_) te (no t@ //tenoor, tenore etc. | |||||
@C) te (C t@ /// | @C) te (C t@ /// | ||||
s) te (king te@ //ontsteking in compounds | s) te (king te@ //ontsteking in compounds | ||||
te (kkie+ tE // fix e sound: tekkie/-s/staptekkies and similar | te (kkie+ tE // fix e sound: tekkie/-s/staptekkies and similar | ||||
ek) terende (_ t'e@r@nd@ //reflekterende respekterende | ek) terende (_ t'e@r@nd@ //reflekterende respekterende | ||||
k) te (ring t'e@ //selektering, reflektering etc. | k) te (ring t'e@ //selektering, reflektering etc. | ||||
n) terende (_ t'e@r@nd@ //konfronterende mensonterende | |||||
pe) terende (_ t'e@r@nd@ //kompeterende | pe) terende (_ t'e@r@nd@ //kompeterende | ||||
i) terende (_ t'e@r@nd@ //presipiterende moniterende | i) terende (_ t'e@r@nd@ //presipiterende moniterende | ||||
ul) terende (_ t'e@r@nd@ //konsulterende resulterende | ul) terende (_ t'e@r@nd@ //konsulterende resulterende |
k l m n p q r R | k l m n p q r R | ||||
s S t tS v w x z | s S t tS v w x z | ||||
Z | Z | ||||
Dictionary rw_dict | |||||
a e i o u | |||||
* b B c d dZ f g | |||||
h j J k l m n N | |||||
n^ p q s S S; t tS | |||||
w x z |
__) - (_D m'aIn@s | __) - (_D m'aIn@s | ||||
A_) - (_D _ | A_) - (_D _ | ||||
C_) - (_D _ | C_) - (_D _ | ||||
--) - | |||||
+ plVs | + plVs | ||||
_) ++ (_ plVspl'Vs | _) ++ (_ plVspl'Vs |
_) e (_ e | _) e (_ e | ||||
e e | e e | ||||
e (CK E | e (CK E | ||||
e (Ch e | |||||
ei eI | ei eI | ||||
ey (K eI | ey (K eI | ||||
ey (_ 'eI | ey (_ 'eI | ||||
_) o (_ o | _) o (_ o | ||||
o o | o o | ||||
o (CK O | o (CK O | ||||
o (Ch o | |||||
oi oI | oi oI | ||||
oy (K oI | oy (K oI | ||||
oy (_ 'oI | oy (_ 'oI | ||||
.group r | .group r | ||||
_) r (_ E*e | |||||
_) r (_ E**e | |||||
r R | r R | ||||
_) r R | _) r R | ||||
A) r (A ** | A) r (A ** |
.group | .group | ||||
$ dolar | $ dolar | ||||
' (Pb // split a word at ' and translate the first part separately. | |||||
' (Pb % // split a word at ' and translate the first part separately. | |||||
举 ju3 | 举 ju3 | ||||
乎 hu1 | 乎 hu1 | ||||
乐 le4 | 乐 le4 | ||||
了 liao3 | |||||
了 le5 // more common than liao3 | |||||
事 shi4 | 事 shi4 | ||||
亮 liang4 | 亮 liang4 | ||||
亲 qin1 | 亲 qin1 | ||||
當 dang1 | 當 dang1 | ||||
發 fa1 | 發 fa1 | ||||
白 bai2 | 白 bai2 | ||||
的 di4 | |||||
的 de5 // more common than di4 | |||||
盖 gai4 | 盖 gai4 | ||||
盘 pan2 | 盘 pan2 | ||||
盛 sheng4 | 盛 sheng4 |
.group b | .group b | ||||
b p | b p | ||||
@) b (K _^_EN | |||||
.group c | .group c | ||||
c tsh | c tsh | ||||
ch ts.h | ch ts.h | ||||
@) c (K _^_EN | |||||
.group d | .group d | ||||
d t | d t | ||||
@) d (K _^_EN | |||||
.group e | .group e | ||||
e o- | e o- | ||||
.group f | .group f | ||||
f f | f f | ||||
@) f (K _^_EN | |||||
.group g | .group g | ||||
g k | g k | ||||
@) g (K _^_EN | |||||
.group h | .group h | ||||
h x | h x | ||||
@) h (K _^_EN | |||||
.group i | .group i | ||||
i i //i in ing | i i //i in ing | ||||
.group j | .group j | ||||
j tS; | j tS; | ||||
@) j (K _^_EN | |||||
.group k | .group k | ||||
k kh | k kh | ||||
@) k (K _^_EN | |||||
.group l | .group l | ||||
l l | l l | ||||
@) l (K _^_EN | |||||
.group m | .group m | ||||
m m | m m | ||||
@) m (K _^_EN | |||||
.group n | .group n | ||||
n n | n n | ||||
.group p | .group p | ||||
p ph | p ph | ||||
@) p (K _^_EN | |||||
.group q | .group q | ||||
q tS;h | q tS;h | ||||
@) q (K _^_EN | |||||
.group r | .group r | ||||
r z. | r z. | ||||
.group s | .group s | ||||
s s | s s | ||||
sh s. | sh s. | ||||
@) s (K _^_EN | |||||
.group t | .group t | ||||
t th | t th | ||||
@) t (K _^_EN | |||||
.group u | .group u | ||||
u u | u u | ||||
n) ve yE //üe | n) ve yE //üe | ||||
.group w | .group w | ||||
// @) w (K _^_EN | |||||
wa wA //wa wan wang | wa wA //wa wan wang | ||||
wai wai | wai wai | ||||
wa1i wai55 | wa1i wai55 | ||||
.group x | .group x | ||||
x S; | x S; | ||||
@) x (K _^_EN | |||||
.group y | .group y | ||||
y j //before a o e i | y j //before a o e i | ||||
y (uDn ; | y (uDn ; | ||||
yo (DngK yu | yo (DngK yu | ||||
y (K i // foreign words | y (K i // foreign words | ||||
@) y (K _^_EN | |||||
.group z | .group z | ||||
z ts | z ts | ||||
zh ts. | zh ts. | ||||
@) z (K _^_EN | |||||
//tone number | //tone number | ||||
.group | .group |
49 phoneme tables | |||||
50 phoneme tables | |||||
new total | new total | ||||
base 99 99 | base 99 99 | ||||
base2 24 118 | base2 24 118 | ||||
tr 18 123 | tr 18 123 | ||||
ku 13 120 | ku 13 120 | ||||
ja 7 104 | ja 7 104 | ||||
rw 12 123 | |||||
Data file Used by | Data file Used by | ||||
b/b [b] base | b/b [b] base | ||||
[&] sr | [&] sr | ||||
[&] pt | [&] pt | ||||
[&/] pt | [&/] pt | ||||
[a#] rw | |||||
[a/] rw | |||||
vowel/a_2 [a] base2 | vowel/a_2 [a] base2 | ||||
[a] en_wi | [a] en_wi | ||||
[A:] en_wi | [A:] en_wi | ||||
[a] pt_pt | [a] pt_pt | ||||
[a] ro | [a] ro | ||||
[a:] vi | [a:] vi | ||||
[a] rw | |||||
vowel/a#_2 [&] hr | vowel/a#_2 [&] hr | ||||
[a2] sv | [a2] sv | ||||
[&] is | [&] is | ||||
[e] th | [e] th | ||||
[e:] th | [e:] th | ||||
[e] id | [e] id | ||||
[e] rw | |||||
[e#] rw | |||||
vowel/e# [I] en_sc | vowel/e# [I] en_sc | ||||
[I2] en_sc | [I2] en_sc | ||||
vowel/e_2 [eI] en_sc | vowel/e_2 [eI] en_sc | ||||
[i] th | [i] th | ||||
[i:] th | [i:] th | ||||
[i] ja | [i] ja | ||||
[i] rw | |||||
[i#] rw | |||||
vowel/i# [i] en_us | vowel/i# [i] en_us | ||||
[i] en_rp | [i] en_rp | ||||
[y:] cy | [y:] cy | ||||
[o] th | [o] th | ||||
[o:] th | [o:] th | ||||
[o] id | [o] id | ||||
[o] rw | |||||
[o#] rw | |||||
vowel/o_2 [o:] cy | vowel/o_2 [o:] cy | ||||
[o:] hi | [o:] hi | ||||
[o:] hu | [o:] hu | ||||
[u] is | [u] is | ||||
[u] zhy | [u] zhy | ||||
[u] zh | [u] zh | ||||
[u] rw | |||||
[u#] rw | |||||
vowel/u_bck2 [u:] la | vowel/u_bck2 [u:] la | ||||
vowel/u_fnt [u:] en_rp | vowel/u_fnt [u:] en_rp | ||||
vowel/uu [U] en | vowel/uu [U] en |
phonemetable ja base | phonemetable ja base | ||||
include ph_japanese | include ph_japanese | ||||
phonemetable rw base2 | |||||
include ph_kinyarwanda |
if(stressed_syllable == 0) | if(stressed_syllable == 0) | ||||
{ | { | ||||
stressed_syllable = vowel_count - 1; | stressed_syllable = vowel_count - 1; | ||||
for(ix=2; ix < vowel_count; ix++) | |||||
for(ix=1; ix < vowel_count; ix++) | |||||
{ | { | ||||
if(vowel_stress[ix] == 1) | if(vowel_stress[ix] == 1) | ||||
{ | { | ||||
while(((c = *p) != ' ') && (c != 0)) | while(((c = *p) != ' ') && (c != 0)) | ||||
{ | { | ||||
if(IsAlpha(wc)) | if(IsAlpha(wc)) | ||||
any_alpha = wc; | |||||
any_alpha++; | |||||
wc_prev = wc; | wc_prev = wc; | ||||
wc_bytes = utf8_in(&wc,p,0); | wc_bytes = utf8_in(&wc,p,0); | ||||
} | } | ||||
} | } | ||||
} | } | ||||
if(match1.points == 0) | |||||
{ | |||||
static const char str_unknown[4] = {phonCAPITAL,phonCAPITAL,phonCAPITAL,0}; | |||||
if(((any_alpha > 0) || (p[wc_bytes-1] > ' ')) && !iswpunct(wc)) | |||||
{ | |||||
// an unrecognised character in a word, indicate with clicks | |||||
match1.phonemes = str_unknown; | |||||
match1.points = 1; | |||||
} | |||||
p += (wc_bytes-1); | |||||
} | |||||
} | } | ||||
} | } | ||||
int n_bytes; | int n_bytes; | ||||
int letter; | int letter; | ||||
int len; | int len; | ||||
int phoneme_tab_en; | |||||
char *p2; | char *p2; | ||||
char *pbuf; | char *pbuf; | ||||
char capital[20]; | char capital[20]; | ||||
char ph_buf[60]; | char ph_buf[60]; | ||||
char ph_buf2[60]; | char ph_buf2[60]; | ||||
char ph_buf_en[60]; | |||||
char hexbuf[6]; | char hexbuf[6]; | ||||
static char single_letter[10] = {0,0}; | |||||
ph_buf[0] = 0; | ph_buf[0] = 0; | ||||
capital[0] = 0; | capital[0] = 0; | ||||
Lookup("_cap",capital); | Lookup("_cap",capital); | ||||
} | } | ||||
} | } | ||||
letter = towlower(letter); | |||||
letter = towlower2(letter); | |||||
LookupLetter(letter, word[n_bytes], ph_buf); | LookupLetter(letter, word[n_bytes], ph_buf); | ||||
if(ph_buf[0] == 0) | if(ph_buf[0] == 0) | ||||
{ | { | ||||
phoneme_tab_en = SetTranslator2("en"); | |||||
translator2->LookupLetter(letter, word[n_bytes], ph_buf_en); | |||||
if(ph_buf_en[0] != 0) | |||||
{ | |||||
sprintf(ph_buf,"%c%c%s%c%c",phonSWITCH2, phoneme_tab_en + phonTOP, ph_buf_en, phonSWITCH2, voice->phoneme_tab_ix + phonTOP); | |||||
} | |||||
SelectPhonemeTable(voice->phoneme_tab_ix); // revert to original phoneme table | |||||
// ?? speak as English ?? | |||||
sprintf(phonemes,"%c",phonSWITCH); | |||||
return(0); | |||||
} | } | ||||
if(ph_buf[0] == 0) | if(ph_buf[0] == 0) |
#define phonT_REDUCED 25 | #define phonT_REDUCED 25 | ||||
#define phonSTRESS_TONIC 26 | #define phonSTRESS_TONIC 26 | ||||
#define phonPAUSE_CLAUSE 27 | #define phonPAUSE_CLAUSE 27 | ||||
#define phonSWITCH2 28 | |||||
#define phonTOP 28 // highest pre-defined phoneme number | |||||
extern const unsigned char pause_phonemes[8]; // 0, vshort, short, pause, long, glottalstop | extern const unsigned char pause_phonemes[8]; // 0, vshort, short, pause, long, glottalstop | ||||
} | } | ||||
#endif | #endif | ||||
int towlower2(unsigned int c) | |||||
{ | |||||
// check for non-standard upper to lower case conversions | |||||
if(c == 'I') | |||||
{ | |||||
if(translator->translator_name == L('t','r')) | |||||
{ | |||||
c = 0x131; // I -> ı | |||||
} | |||||
} | |||||
return(towlower(c)); | |||||
} | |||||
static void GetC_unget(int c) | static void GetC_unget(int c) | ||||
{//========================== | {//========================== | ||||
{ | { | ||||
value = attrlookup(attr1,mnem_emphasis); | value = attrlookup(attr1,mnem_emphasis); | ||||
} | } | ||||
sp->parameter[espeakEMPHASIS] = value; | |||||
if(translator->langopts.tone_language == 1) | |||||
{ | |||||
static unsigned char emphasis_to_pitch_range[] = {50,50,40,70,90,90}; | |||||
static unsigned char emphasis_to_volume[] = {100,100,70,110,140,140}; | |||||
// tone language (eg.Chinese) do emphasis by increasing the pitch range. | |||||
sp->parameter[espeakRANGE] = emphasis_to_pitch_range[value]; | |||||
sp->parameter[espeakVOLUME] = emphasis_to_volume[value]; | |||||
} | |||||
else | |||||
{ | |||||
sp->parameter[espeakEMPHASIS] = value; | |||||
} | |||||
ProcessParamStack(outbuf, outix); | ProcessParamStack(outbuf, outix); | ||||
break; | break; | ||||
#include "translate.h" | #include "translate.h" | ||||
#include "wave.h" | #include "wave.h" | ||||
const char *version_string = "1.31.17 24.Feb.08"; | |||||
const char *version_string = "1.31.18 25.Feb.08"; | |||||
const int version_phdata = 0x013105; | const int version_phdata = 0x013105; | ||||
int option_device_number = -1; | int option_device_number = -1; |
This function is language specific. | This function is language specific. | ||||
*/ | */ | ||||
unsigned char c; | |||||
int c; | |||||
int vowel_posn=9; | int vowel_posn=9; | ||||
int index; | int index; | ||||
int count; | |||||
int ix; | int ix; | ||||
int apostrophe=0; | int apostrophe=0; | ||||
} | } | ||||
index=0; | index=0; | ||||
while(((c = word[index++]) != 0) && !isspace(c)) | |||||
count=0; | |||||
for(;;) | |||||
{ | { | ||||
index += utf8_in(&c,&word[index],0); | |||||
count++; | |||||
if((c==0) || (c==' ')) | |||||
break; | |||||
if(IsVowel(c) || (c == 'y')) | if(IsVowel(c) || (c == 'y')) | ||||
{ | { | ||||
vowel_posn = index; | |||||
vowel_posn = count; | |||||
break; | break; | ||||
} | } | ||||
if(c == '\'') | if(c == '\'') | ||||
apostrophe = 1; | apostrophe = 1; | ||||
else | else | ||||
if((c < 'a') || (c > 'z')) | |||||
return(0); // letter (not vowel) outside a-z range or apostrophe, abort test | |||||
if((c < 'a') || (c > 0x241)) | |||||
return(0); // letter (not vowel) outside Latin character range or apostrophe, abort test | |||||
} | } | ||||
if((vowel_posn > 5) || ((word[0]!='s') && (vowel_posn > 4))) | if((vowel_posn > 5) || ((word[0]!='s') && (vowel_posn > 4))) | ||||
return(1); // no vowel, or no vowel in first four letters | return(1); // no vowel, or no vowel in first four letters |
tr = new Translator_Russian(); | tr = new Translator_Russian(); | ||||
break; | break; | ||||
case L('r','w'): // Kiryarwanda | |||||
{ | |||||
tr = new Translator(); | |||||
tr->langopts.stress_rule = 2; | |||||
tr->langopts.stress_flags = 0x16; | |||||
tr->langopts.length_mods0 = tr->langopts.length_mods; // don't lengthen vowels in the last syllable | |||||
} | |||||
break; | |||||
case L('s','k'): // Slovak | case L('s','k'): // Slovak | ||||
case L('c','s'): // Czech | case L('c','s'): // Czech | ||||
{ | { |
return(0); | return(0); | ||||
} | } | ||||
p = &wordx[word_length-3]; | |||||
p = &wordx[word_length-3]; // this looks wrong. Doesn't consider multi-byte chars. | |||||
if(memcmp(p,"'s ",3) == 0) | if(memcmp(p,"'s ",3) == 0) | ||||
{ | { | ||||
// remove a 's suffix and pronounce this separately (not as an individual letter) | // remove a 's suffix and pronounce this separately (not as an individual letter) | ||||
return(0); | return(0); | ||||
} | } | ||||
if((phonemes[0] == 0) && (end_phonemes[0] == 0)) | |||||
{ | |||||
int wc; | |||||
// characters not recognised, speak them individually | |||||
utf8_in(&wc, wordx, 0); | |||||
if(!iswpunct(wc)) | |||||
{ | |||||
posn = 0; | |||||
while(*wordx != ' ') | |||||
{ | |||||
wordx += TranslateLetter(wordx, phonemes, 4); | |||||
posn++; | |||||
if(phonemes[0] == phonSWITCH) | |||||
{ | |||||
// change to another language in order to translate this word | |||||
strcpy(word_phonemes,phonemes); | |||||
return(0); | |||||
} | |||||
} | |||||
SetSpellingStress(phonemes,spell_word,posn); | |||||
} | |||||
} | |||||
c_temp = wordx[-1]; | c_temp = wordx[-1]; | ||||
found = 0; | found = 0; | ||||
prefix_chars[0] = 0; | prefix_chars[0] = 0; | ||||
n_chars = prefix_type & 0x3f; | n_chars = prefix_type & 0x3f; | ||||
for(ix=0; ix < n_chars; ix++) // num. of characters to remove | |||||
for(ix=0; ix < n_chars; ix++) // num. of bytes to remove | |||||
{ | { | ||||
prefix_chars[pfix++] = *wordx++; | prefix_chars[pfix++] = *wordx++; | ||||
{ | { | ||||
prefix_chars[pfix-1] = 0; // discard the last character of the prefix, this is the separator character | prefix_chars[pfix-1] = 0; // discard the last character of the prefix, this is the separator character | ||||
} | } | ||||
while((*wordx & 0xc0) == 0x80) | |||||
{ | |||||
prefix_chars[pfix++] = *wordx++; // for multibyte characters | |||||
} | |||||
} | } | ||||
prefix_chars[pfix] = 0; | prefix_chars[pfix] = 0; | ||||
c_temp = wordx[-1]; | c_temp = wordx[-1]; | ||||
{ | { | ||||
// retranslate the prefix part | // retranslate the prefix part | ||||
char *wordpf; | char *wordpf; | ||||
char prefix_phonemes2[12]; | |||||
strncpy0(prefix_phonemes2,end_phonemes,sizeof(prefix_phonemes2)); | |||||
wordpf = &prefix_chars[1]; | wordpf = &prefix_chars[1]; | ||||
found = LookupDictList(&wordpf, phonemes, dictionary_flags, SUFX_P, wtab); // without prefix | found = LookupDictList(&wordpf, phonemes, dictionary_flags, SUFX_P, wtab); // without prefix | ||||
if(found == 0) | if(found == 0) | ||||
{ | { | ||||
end_type = TranslateRules(wordpf, phonemes, N_WORD_PHONEMES, end_phonemes, 0, dictionary_flags[0]); | end_type = TranslateRules(wordpf, phonemes, N_WORD_PHONEMES, end_phonemes, 0, dictionary_flags[0]); | ||||
strcat(prefix_phonemes, phonemes); | |||||
sprintf(prefix_phonemes,"%s%s%s",phonemes,end_phonemes,prefix_phonemes2); | |||||
} | } | ||||
prefix_flags = 1; | |||||
} | |||||
else | |||||
{ | |||||
strcat(prefix_phonemes,end_phonemes); | |||||
} | } | ||||
strcat(prefix_phonemes,end_phonemes); | |||||
end_phonemes[0] = 0; | end_phonemes[0] = 0; | ||||
end_type = 0; | end_type = 0; | ||||
srcix = source_ix+1; | srcix = source_ix+1; | ||||
} | } | ||||
else | else | ||||
if(ph_code == phonSWITCH2) | |||||
{ | |||||
SetPlist2(&ph_list2[n_ph_list2],phonSWITCH); | |||||
ph_list2[n_ph_list2++].tone_number = *p++ - phonTOP; // phoneme table number (phonTOP is added to avoid confusion with special phoneme numbers) | |||||
} | |||||
else | |||||
if(ph_code == phonX1) | if(ph_code == phonX1) | ||||
{ | { | ||||
// a language specific action | // a language specific action | ||||
{ | { | ||||
c = ' '; | c = ' '; | ||||
} | } | ||||
c = towlower(c); | |||||
c = towlower2(c); | |||||
} | } | ||||
if(phoneme_mode) | if(phoneme_mode) | ||||
if(iswupper(c)) | if(iswupper(c)) | ||||
{ | { | ||||
c = towlower(c); | |||||
c = towlower2(c); | |||||
if(langopts.param[LOPT_SYLLABLE_CAPS]) | if(langopts.param[LOPT_SYLLABLE_CAPS]) | ||||
{ | { |
int IsDigit(unsigned int c); | int IsDigit(unsigned int c); | ||||
int IsAlpha(unsigned int c); | int IsAlpha(unsigned int c); | ||||
int isspace2(unsigned int c); | int isspace2(unsigned int c); | ||||
int towlower2(unsigned int c); | |||||
void SetVoiceStack(espeak_VOICE *v); | void SetVoiceStack(espeak_VOICE *v); | ||||
extern FILE *f_trans; // for logging | extern FILE *f_trans; // for logging |