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 |