Browse Source

Merge branch 'master' into build

master
Reece Dunn 14 years ago
parent
commit
8c9fab6ebb
65 changed files with 2742 additions and 684 deletions
  1. 15
    2
      dictsource/af_list
  2. 9
    1
      dictsource/af_rules
  3. 514
    40
      dictsource/da_list
  4. 539
    123
      dictsource/da_rules
  5. 2
    1
      dictsource/de_list
  6. 2
    2
      dictsource/de_rules
  7. 54
    42
      dictsource/dict_phonemes
  8. 55
    43
      dictsource/el_list
  9. 13
    11
      dictsource/el_rules
  10. 20
    16
      dictsource/en_list
  11. 10
    4
      dictsource/en_rules
  12. 12
    10
      dictsource/eo_list
  13. 7
    2
      dictsource/fr_rules
  14. 144
    7
      dictsource/hu_list
  15. 22
    0
      dictsource/hu_rules
  16. 354
    1
      dictsource/nl_list
  17. 79
    26
      dictsource/nl_rules
  18. 4
    3
      dictsource/pt_list
  19. 4
    0
      dictsource/pt_rules
  20. 63
    61
      dictsource/sv_rules
  21. 18
    5
      dictsource/ta_list
  22. 201
    33
      dictsource/ta_rules
  23. 2
    2
      dictsource/zh_list
  24. 1
    1
      docs/add_language.html
  25. 15
    7
      docs/commands.html
  26. 19
    7
      docs/dictionary.html
  27. 3
    1
      docs/docindex.html
  28. 101
    0
      docs/intonation.html
  29. 12
    17
      docs/mbrola.html
  30. 9
    3
      docs/phontab.html
  31. 27
    13
      docs/speak_lib.h
  32. 5
    0
      docs/ssml.html
  33. 53
    28
      phsource/compile_report
  34. 53
    0
      phsource/ph_danish
  35. 6
    0
      phsource/ph_dutch
  36. 19
    31
      phsource/ph_german
  37. 19
    5
      phsource/ph_greek
  38. 14
    1
      phsource/ph_polish
  39. 3
    0
      phsource/ph_pt_brazil
  40. 3
    3
      phsource/ph_tamil
  41. 7
    2
      phsource/phonemes
  42. 24
    14
      platforms/big_endian/espeak-phoneme-data.c
  43. 15
    9
      platforms/windows/make_espeak.iss
  44. 4
    1
      platforms/windows/make_espeakedit.iss
  45. 3
    2
      platforms/windows/windows_sapi/ttsengobj.cpp
  46. 5
    5
      platforms/windows/windows_sapi/version.rc2
  47. 9
    6
      src/compiledata.cpp
  48. 6
    4
      src/dictionary.cpp
  49. 3
    1
      src/espeakedit.cpp
  50. 5
    0
      src/mbrowrap.cpp
  51. 12
    1
      src/numbers.cpp
  52. 5
    6
      src/readclause.cpp
  53. 1
    1
      src/setlengths.cpp
  54. 12
    3
      src/speak_lib.h
  55. 1
    0
      src/speech.h
  56. 39
    3
      src/synth_mbrola.cpp
  57. 2
    2
      src/synthdata.cpp
  58. 7
    2
      src/synthesize.cpp
  59. 8
    30
      src/synthesize.h
  60. 13
    12
      src/tr_languages.cpp
  61. 34
    11
      src/translate.cpp
  62. 14
    12
      src/translate.h
  63. 6
    3
      src/voices.cpp
  64. 1
    1
      src/vowelchart.cpp
  65. 1
    1
      src/wavegen.cpp

+ 15
- 2
dictsource/af_list View File

@@ -207,7 +207,7 @@ _3o d'&:r
_7o s'e@v@n
_8o _'ax2
_9o ne@x2@n
_0Co h'On@rtst@
//_0Co h'On@rtst@


// Place names
@@ -222,6 +222,7 @@ antwerpen antv&rp@n
avignon _^_FR
babilon babilOn
babilonië babil'o@ni;@
bainskloof beInsklo@f
bangladesj baNglad'ES
barcelona bars@l'o@na
barkly _^_EN
@@ -314,6 +315,7 @@ mpumalanga mpu:mal'aNga
montagu mOnt@ky
moreletapark mOr@l,Etap'ark
moorreesburg mur'e@sbWrx2
mouillepunt mulipWnt
(thaba nchu) tab'A:||ntSu
europa Y@r'o@pa
nigel _^_EN
@@ -363,6 +365,7 @@ wimbledon _^_EN
wolseley wulsli
uganda ug'anda
uruguay urugwaI
wakloof vA:klo@f
zimbabwe zI:mb'ab_wE
zulu zulu // Kwazulu-Natal

@@ -409,6 +412,7 @@ beyers beI@rs
blignault blIx2n@Ut
blomerus blum'e@rWs
blum blum
borodin bOrud'in
botha bo@ta
bouwer b@U@r
braham brA:m
@@ -477,6 +481,7 @@ duncan daNk@-n
(du toit) d@||toI
dustin _^_EN
duvenage dyv@nA:x2@
dvorak d@-v'O:Zak
einstein aInstaI:n
eksteen $1
elana il'A:na
@@ -519,6 +524,7 @@ gordon _^_EN
grange x2rA:nsi
gregory _^_EN
greta gre@ta
grieg gri:g
grové x2ruv'e@
gulliver _^_EN
gustav gustaf
@@ -548,6 +554,7 @@ james _^_EN
jane _^_EN
Jean ZA~n $capital
jesebel je@s@b&l
jessica _^_EN
jimmy _^_EN
joachim juw'A:x2@m
joan _^_EN
@@ -592,6 +599,7 @@ lukas lukas
lulu lulu
mabalêl mabal'&l
mabel _^_EN
macgill m@gjil
mackintosh _^_EN
madelene mad@l'e@n
mbeki mbE:ki
@@ -639,7 +647,6 @@ mouton mut'On
mozart mo@tsart
myburgh meIbWrx2
naomi na_'o@mi
napoleon nap'o@liOn
natasha n%at'aSa
naudé nOd'e@
nefertiti nEf@rt'iti
@@ -675,6 +682,7 @@ renée r@neI
retha re@ta
retief r@tif
rhodes _^_EN
richard _^_EN
riekert rik@rt
robert _^_EN
robin _^_EN
@@ -1131,6 +1139,7 @@ jupiter jupit@r
kafee kaf'e@
kaliefa kal'ifa
kameraderie kam@rA:d@r'i
kapittel kap'It@l
katswink katsv@nk
kaviaar kavi'A:r
kennisvaardig $1
@@ -1255,6 +1264,7 @@ onvermoë $1
oorkom $2
oorle o@rl@
oorleef $2
oorry o@reI
oorsee $2
oorsese $2
oorval $2 $verb
@@ -1282,6 +1292,7 @@ pirouette p@ru:'Et
plaasjaap plA:sjA:p
plasenta plas'Enta
poinsettia pOIns'Etia
pond po~nt
potpourri pOtpur'i
primate $2
profetes prOf@t'Es
@@ -1408,6 +1419,7 @@ voluit fOl_Yyt
voorgee fo@rx2e@
voorkeer $1
voorkom $2 $only
voorlente $1
voormalige fo@rm'A:l@x2@
voornemens fo@rne@m@ns
//voorsien $2
@@ -1428,5 +1440,6 @@ weggewens v&x2@v'E:ns
welaf v&l_af
weleer v&l_'e@r
wentaktiek $1
willens vIl@ns
wysgere veIsx2e@r@


+ 9
- 1
dictsource/af_rules View File

@@ -430,6 +430,7 @@
bonde (C bOnd@ // verbondenheid/bondeldraer/gebondene/saambondelend
boos (aardig b%o@s_ // move default stress: boosaardig/-e/-heid
_) bor (dA@ b%Or // geborduur/bordeel/bordele
borde (r bOrd@ // fix stress and e sound: borderak/-ke
bos (A@ bOs? // bosaap/bosoorlog/bosuil
bo (v bo@ // fix o sound: bovlak/-e and similar
bowen bo@v@n' // bowenal/bowendien
@@ -587,6 +588,7 @@
bene (dy b%e@n@ // fix stress and e sounds: gebenedy/-de
_) ben (ga b%EN // fix stress and n/g sounds: Bengaalse/Bengale
beni (g be@n@ // fix stress and e sound: (swaar/twee/vier)benig, etc.
_) ben (Cien b%En // fix 1st e sound: bensien/benzien and compounds
ber (lyn b%&r // move default stress: Berlyn/-er/-se
ber (serk b@r // fix stress and 1st e sound: berserk/-er
C) be (rsie b'&: //kombersie etc.
@@ -718,6 +720,7 @@
d (d
dd d // gladde/midde/kudde/opskudding
ddh d // Boeddha/boeddhisme
@) d (raam t // fix d sound: draad-/skilpad-/standaardraam and compounds
daad (werk d%A:t // move default stress: daadwerklik/-e
daaren (te d%A:r@n // fix stress and e sound: daarenteen/daarenteë
daarop (v d%A:r%Op // move default stress: daaropvolgend/-e
@@ -727,6 +730,7 @@
dani (gh d'A:n@ // -hoedanigheid/hoedanighede/onderdanigheid
@) dant d'ant // dant takes stress: kommandant/pruimedant
@) dderd (_ d@rt // ontredderd, se rule: dd d
@) d (einde_ t_ // fix d sound: maand-/noord-/suideinde
@) d (eis t_ // fix d sound, insert pause: skuldeiser/grondeise and many compounds
dge (_ _^_EN // words ending in -dge are English: Cambridge/Hambidge...
dia (C d%i%a // diabeet/diafragma/diagnose/dialek/dialoog/diamant
@@ -1756,7 +1760,7 @@
geldi x2&ld@
geld (inC x2&lt_ // fix d sound, pause: geldinkomste/-insamelaar/-insameling, etc.
geld (ing x2&ld // but: ver-/ontgelding and similar
geldjie x2'&lci
geldjie x2&lci // spaargeldjies
_) gelykeni (s x2@l'eIk@n@ // gelykenis/se
gemmer x2'Em@r
ge (ogra x2i //geografie etc.
@@ -2947,12 +2951,14 @@
_) na (latig n%A: // move default stress: nalatig/-e/-heid
names nA:m@s // fix e sound: afnames/opnames
napole (ont n%ap%o@l%i // fix stress and vowel sounds: Napoleonties/-e
napo (leon n%apo@ // fix stress and a sound: Napoleon(magte/-troepe...)
_) na (rC na // nartjie/nardus/narsing
_) na (rk n%a // narkose/narkotiseer/narkoties/narkotika
_) na (skeer n''A: // restore default stress: naskeermiddel/-room
_) na (speur n%A: // fix stress and a sound: (on)naspeurbaar/-lik/-e
_) na (speur_N nA: // but default stress: naspeur
_) na (tC na // many compounds beginning with nat
_) na (trekK nA: // fix stress and a sound: natrek/-ke
na (trium nA: // lengthen a sound: natrium and compounds
na (trosK nA: // lengthen a sound: natros/-se/-sies
na (tuur n%a // natuur and compounds and derivatives
@@ -3053,6 +3059,7 @@
o (terap u // psigo-/fisioterapeut
_) ob (s %Op // obskuur/obskure/obskuriteit/obsessie/obseen
obser (veer %Ops%&r // fix stress, b sound: (ge)observeer(d/-e)
obsti (na %Opst@ // fix stress and i sound: obstinaat/-nate/-naatheid
C) o (dium o@ // fix stress and o sound: jodium/podium/rodium and their compounds
oe u
oe (r u: //long oe sound before r in most cases, but see flg. exceptions:
@@ -3603,6 +3610,7 @@
pa (trA p%a // patrollie/patroon/patrys
patri (@ p%atr%i // move default stress: patriarg/patriot/-te and derivatives
patriar (ga p%atr%i%ar // move default stress: patriargaal/-gale
patro (lle p%atr%u // fix stress and o sound: patrolleer and compounds
paté p%ate@ // fix stress and vowel sounds: (lewer)paté, etc.
pavil (joe p%av@l // fix stress and v sound: paviljoen and compounds
pawil (joe p%av@l // fix stress: pawiljoen and compounds

+ 514
- 40
dictsource/da_list View File

@@ -1,7 +1,5 @@
// PB = Peter Bjarkov - [email protected]

iv $abbrev

// This file is UTF8 encoded
// Spelling-to-phoneme words for Danish

@@ -92,15 +90,15 @@ __ b'Onsdrai
// numbers
_0 'nOl
_1 'e:n
_2 t'o:
_3 tR'&:
_2 t'o
_3 tR'e
_4 f'i:V
_5 f'Em
_6 s'Egs
_7 s'yw
_8 'O:d@
_9 n'i:
_10 t'i:
_9 n'i
_10 t'i
_11 'Elv@
_12 t'Vl
_13 tR'&#d@-n // PB & changed to &#
@@ -119,6 +117,7 @@ _7X h&lfj'&rs // PV a changed to &
_8X f'irs
_9X h&lf'Ems // PB a changed to &
_0C h'un*@:D
_1C ed||h'unR@:D // PB addet 'et hundrede'
_0M1 t'u:s@-n
_1M1 ed||t'u:s@-n // PB added 'et' to tusind
_1M2 'e:n||milij'o:n
@@ -130,8 +129,6 @@ _0M4 bilij'o:n3

_0and 3
_dpt _k,Vm&:
_roman d%En


// PB a number followed by dot
// ordinals are followed by a dot in Danish
@@ -173,12 +170,11 @@ da $u
// conjunctions
og V $u+ $pause // and
men $pause // but
eller $u+ $pause $only // or
eller // or
mens $pause // while
for fV
fordi fVd'i $pause // because - PB: changed stress
når nVr $pause // while
som $u+ $pause // who (relative)
der d&r $u+ $u // PB changed from [d]A
hvor v'Vr // where
hvorfor vVf'V // why - firan r deleted
@@ -196,7 +192,7 @@ ad &: // PB added 'ad'
ad &D $atend $sentence // PB "Det må ikke skille os ad."
at &: $u // PB changed from [at] to [&:]
hos // at - PB: removed [$u+]
som sVm // which / that - PB: removed [$u+]
som sVm $u // which / that - PB: removed [$u+]

// pronouns
jeg jai $u+ // I
@@ -206,7 +202,7 @@ han $u
hun $u
det de $u
dét de
vi $u
vi vi $u
i _i $u+
mig maj $u // me
dig daj $u
@@ -214,8 +210,8 @@ dem $u
ham $u
hende $u
sig $u
os Vs $u
jer
os Vs $u+
jer $u
denne $u+ // this
dette $u+
disse $u+ // these
@@ -256,12 +252,12 @@ må $u+ // may
bør $u+ // ought

// letter names
b be:
c se:
d de:
b be
c se
d de
_e e:
f Ef
g ge:
g ge
h hO:
_i i:
j jVD // PB changed from [o]
@@ -270,13 +266,13 @@ l El
m Em
n En
o o
p pe:
q ku:
p pe
q ku
r Er
s es
//t te: mooved to da_rules because of clash with T-shirt
u u?
v ve:
v ve
w d'Vbeltve:
x Eks
y Y?
@@ -286,7 +282,6 @@ z sEt
// PB English words
bacon _^_EN
bondage _^_EN
baseball _^_EN
volleyball _^_EN
dj _^_EN
deadline _^_EN
@@ -401,13 +396,11 @@ oregon _^_EN $alt
paul _^_EN $alt
reynolds _^_EN $alt
purvis _^_EN
sally _^_EN $alt
washington _^_EN $alt
white _^_EN $alt
chicago _^_EN $alt

// PB French words
croissant _^_FR
croquis _^_FR
crouton _^_FR
jugement _^_FR
@@ -970,6 +963,7 @@ inventar $alt
jaguar $alt
janitshar $alt
jubilar $alt
kommentar $alt
korsar $alt
laminar $alt
legatar $alt
@@ -1593,6 +1587,7 @@ opponent $alt
opulent $alt
orient $alt
patent $alt
patient $alt
piment $alt
permanent $alt
potent $alt
@@ -2199,6 +2194,357 @@ vestalinde $alt
violinistinde $alt
værtinde $alt

// PB nouns with final -isme - stressed i
absolutisme $alt
absurdisme $alt
aforisme $alt
afværgemekanisme $alt
agnosticisme $alt
akademisme $alt
aktivisme $alt
albinisme $alt
alkoholisme $alt
alpinisme $alt
altruisme $alt
amatørisme $alt
amerikanisme $alt
anakronisme $alt
analfabetisme $alt
anarkisme $alt
anarkosyndikalisme $alt
anglicisme $alt
animisme $alt
antagonisme $alt
antropomorfisme $alt
aristokratisme $alt
arkaisme $alt
astigmatisme $alt
atavisme $alt
ateisme $alt
atomisme $alt
autisme $alt
avantgardisme $alt
baptisme $alt
barbarisme $alt
barthianisme $alt
behaviorisme $alt
bilisme $alt
bolsjevisme $alt
bonapartisme $alt
botulisme $alt
brahmanisme $alt
brandesianisme $alt
brutalisme $alt
buddhisme $alt
bureaukratisme $alt
calvinisme $alt
centralisme $alt
chauvinisme $alt
cyklisme $alt
cæsarisme $alt
dadaisme $alt
danisme $alt
darwinisme $alt
decentralisme $alt
defaitisme $alt
deisme $alt
dekonstruktivisme $alt
demokratisme $alt
despotisme $alt
determinisme $alt
dilettantisme $alt
dirigisme $alt
dogmatisme $alt
doktrinarisme $alt
dokumentarisme $alt
dramadokumentarisme $alt
dualisme $alt
egoisme $alt
eklekticisme $alt
ekshibitionisme $alt
eksistentialisme $alt
eksorcisme $alt
eksotisme $alt
ekspansionisme $alt
ekspressionisme $alt
ekstremisme $alt
ekvilibrisme $alt
elitisme $alt
empirisme $alt
epikuræisme $alt
erotisme $alt
eskapisme $alt
etnocentrisme $alt
eudaimonisme $alt
eufemisme $alt
evolutionisme $alt
fanatisme $alt
farisæisme $alt
fascisme $alt
fatalisme $alt
fauvisme $alt
federalisme $alt
feminisme $alt
fetichisme $alt
feudalisme $alt
flagellantisme $alt
forbrugerisme $alt
formalisme $alt
freudianisme $alt
fundamentalisme $alt
funktionalisme $alt
futurisme $alt
føderalisme $alt
gallicisme $alt
gaullisme $alt
georgisme $alt
germanisme $alt
gigantisme $alt
gnosticisme $alt
grundtvigianisme $alt
græcisme $alt
hedonisme $alt
hegemonisme $alt
hellenisme $alt
hermafroditisme $alt
heroisme $alt
hinduisme $alt
historicisme $alt
historisme $alt
holisme $alt
hooliganisme $alt
humanisme $alt
hypnotisme $alt
idealisme $alt
idiotisme $alt
imperialisme $alt
impressionisme $alt
indeterminisme $alt
individualisme $alt
industrialisme $alt
infantilisme $alt
intellektualisme $alt
internationalisme $alt
interventionisme $alt
irrationalisme $alt
islamisme $alt
isolationisme $alt
isomorfisme $alt
jesuitisme $alt
judaisme $alt
kannibalisme $alt
kapitalisme $alt
katolicisme $alt
klassicisme $alt
klerikalisme $alt
kokainisme $alt
kollektivisme $alt
kolonialisme $alt
kolorisme $alt
kommercialisme $alt
kommunisme $alt
kommunitarisme $alt
komparatisme $alt
konformisme $alt
konfucianisme $alt
konkretisme $alt
konservatisme $alt
konsonantisme $alt
konstruktivisme $alt
korporatisme $alt
korporativisme $alt
kosmopolitisme $alt
kreationisme $alt
kretinisme $alt
kubisme $alt
kulturisme $alt
kvietisme $alt
kynisme $alt
lakonisme $alt
lamaisme $alt
lamarckisme $alt
latinisme $alt
leninisme $alt
lesbianisme $alt
liberalisme $alt
lobbyisme $alt
lutheranisme $alt
lyrisme $alt
machiavellisme $alt
magnetisme $alt
malthusianisme $alt
manierisme $alt
maoisme $alt
markedsmekanisme $alt
marxisme $alt
maskulinisme $alt
masochisme $alt
materialisme $alt
mccarthyisme $alt
mekanisme $alt
merkantilisme $alt
messianisme $alt
metabolisme $alt
metodisme $alt
militarisme $alt
minimalisme $alt
modernisme $alt
monarkisme $alt
monetarisme $alt
mongolisme $alt
monisme $alt
monopolisme $alt
monoteisme $alt
moralisme $alt
morfinisme $alt
mormonisme $alt
muhamedanisme $alt
mutisme $alt
mysticisme $alt
naivisme $alt
narcissisme $alt
nationalisme $alt
naturalisme $alt
naturisme $alt
nazisme $alt
negativisme $alt
neologisme $alt
nepotisme $alt
neutralisme $alt
nihilisme $alt
nomadisme $alt
nordisme $alt
norvagisme $alt
nudisme $alt
objektivisme $alt
obskurantisme $alt
okkultisme $alt
opportunisme $alt
optimisme $alt
organisme $alt
ostrakisme $alt
pacifisme $alt
panteisme $alt
papisme $alt
parallelisme $alt
parkinsonisme $alt
parlamentarisme $alt
partikularisme $alt
paternalisme $alt
patriarkalisme $alt
patriotisme $alt
pennalisme $alt
perfektionisme $alt
perspektivisme $alt
pessimisme $alt
pietisme $alt
platonisme $alt
pluralisme $alt
pointillisme $alt
polycentrisme $alt
polyteisme $alt
populisme $alt
positivisme $alt
pragmatisme $alt
primitivisme $alt
privatisme $alt
professionalisme $alt
protektionisme $alt
protestantisme $alt
provinsialisme $alt
psykologisme $alt
purisme $alt
puritanisme $alt
racisme $alt
radikalisme $alt
rationalisme $alt
realisme $alt
reformisme $alt
regionalisme $alt
relativisme $alt
reumatisme $alt
revanchisme $alt
revisionisme $alt
rigorisme $alt
romantisme $alt
royalisme $alt
sadisme $alt
sadomasochisme $alt
satanisme $alt
seksualisme $alt
sekterisme $alt
sekularisme $alt
seminarisme $alt
sensationalisme $alt
sensualisme $alt
sentimentalisme $alt
separatisme $alt
serialisme $alt
sexisme $alt
shamanisme $alt
shiisme $alt
shintoisme $alt
skandinavisme $alt
skepticisme $alt
slavisme $alt
snobbisme $alt
socialisme $alt
sofisme $alt
solipsisme $alt
somnambulisme $alt
spiritisme $alt
spiritualisme $alt
spontanisme $alt
stalinisme $alt
stoicisme $alt
strukturalisme $alt
subjektivisme $alt
supranaturalisme $alt
surrealisme $alt
svecisme $alt
syllogisme $alt
symbolisme $alt
syndikalisme $alt
synkretisme $alt
synkronisme $alt
tachisme $alt
taoisme $alt
teisme $alt
terrorisme $alt
thomisme $alt
totalitarisme $alt
totemisme $alt
traditionalisme $alt
transvestisme $alt
transvestitisme $alt
tropisme $alt
trotskisme $alt
truisme $alt
tsarisme $alt
turisme $alt
uniformisme $alt
unionisme $alt
unitarisme $alt
universalisme $alt
urbanisme $alt
utilitarisme $alt
utopisme $alt
vandalisme $alt
vegetarianisme $alt
vegetarisme $alt
verisme $alt
victorianisme $alt
vitalisme $alt
vokalisme $alt
voyeurisme $alt
vulgarisme $alt
vulkanisme $alt
zarisme $alt
zenbuddhisme $alt
zionisme $alt
ækvilibrisme $alt
æsteticisme $alt

// PB words with final -ni - stressed i
agoni $alt
androgyni $alt
@@ -2297,7 +2643,6 @@ metonymi $alt
monogami $alt
origami oreg'ami $alt
pandemi $alt
pastrami p&stR'Ami $alt
polygami $alt
salami sal'&mi $alt
socionomi $alt
@@ -2309,6 +2654,59 @@ uræmi $alt
vasektomi $alt
økonomi $alt

// PB stressed second syllable in words with initial ge
gebet $alt
gebis $alt
gebommerlig $alt
gebrokken $alt
gebrækkelig $alt
gebyr $alt
gebærde $alt
gedigen $alt
gedulgt $alt
gehalt $alt
gehejmeråd $alt
gehenna $alt
gehæng $alt
gehør $alt
gelassen $alt
geled $alt
gelejde $alt
gelinde $alt
gelænder $alt
gemak $alt
gemal $alt
gemen $alt
gemyse $alt
gemyt $alt
gemytlig $alt
genom $alt
gentil $alt
genuin $alt
gepard $alt
geranie $alt
geranium $alt
geråde $alt
gesandt $alt
gesandtskab $alt
gesims $alt
gesjæft $alt
geskæftig $alt
gespenst $alt
gestagen $alt
gestalt $alt
gestik $alt
gesvejsning $alt
gesvindt $alt
gevaldig $alt
gevalt $alt
gevandt $alt
gevind $alt
gevinst $alt
gevir $alt
gevækst $alt
gevær $alt

// words with final "in" - stressed i
aborigin $alt
adrenalin $alt
@@ -2761,6 +3159,52 @@ vanadium $alt
vivarium $alt
vokabularium $alt

// PB nouns with final -um - stress on previous syllable
basilikum $alt
curriculum $alt
dekorum $alt
depositum $alt
desideratum $alt
epicentrum $alt
erratum $alt
faktotum $alt
filosofikum $alt
futurum $alt
gummiarabicum $alt
interregnum $alt
jubilæum $alt
karakteristikum $alt
karbolineum $alt
karborundum $alt
kemoterapeutikum $alt
kompositum $alt
konsum $alt
kuriosum $alt
linoleum $alt
mausoleum $alt
memorandum $alt
momentum $alt
museum $alt
narkotikum $alt
neolitikum $alt
opossum $alt
palæolitikum $alt
perfektum $alt
perikum $alt
periodikum $alt
petitum $alt
petroleum $alt
postscriptum $alt
præteritum $alt
psykofarmakum $alt
pædagogikum $alt
referendum $alt
responsum $alt
supinum $alt
tedeum $alt
ultimatum $alt
vademecum $alt

// PB nouns with final -ie - stress on previous syllable
// unofficial suffix for the "ium" words above
adverbie $alt
@@ -2935,6 +3379,24 @@ rimesse $alt
stewardesse $alt
tristesse $alt

final -ese - stressed e
anamnese $alt
askese $alt
diatese $alt
diurese $alt
eksegese $alt
fylogenese $alt
genese $alt
hypotese $alt
katakrese $alt
kinese $alt
ontogenese $alt
parese $alt
partenogenese $alt
patogenese $alt
protese $alt
syntese $alt

PB final -id - stressed i
adenoid $alt
alkaloid $alt
@@ -5176,7 +5638,7 @@ bivuaker $alt
blamer $alt
blancher $alt
bloker $alt
bogstaver $alt
bogstavere $alt
bombarder $alt
bonbonniere bVNbVNj'E:r $alt
boniter $alt
@@ -5836,7 +6298,7 @@ konvojere $alt
konvoluter $alt
kooperer $alt
koordiner $alt
kopier $alt
kopiere $alt
kopuler $alt
koreografer $alt
korreler $alt
@@ -5872,7 +6334,7 @@ kurer $alt
kursere $alt
kursiver $alt
kurtiser $alt
kuverter $alt
kuvertere $alt
kvadrer $alt
kvaksalverer $alt
kvalificer $alt
@@ -5959,7 +6421,7 @@ meriter $alt
merkantiliser $alt
metalliser $alt
metamorfoser $alt
metastaser $alt
metastasere $alt
migrer $alt
mikroskoper $alt
militariser $alt
@@ -6090,7 +6552,7 @@ patruljere $alt
pausere $alt
pelleter $alt
pendulere $alt
pensioner $alt
pensionere $alt
perciper $alt
perfektioner $alt
perforer $alt
@@ -6108,7 +6570,7 @@ perverter $alt
petitioner $alt
pigmenter $alt
piker $alt
piloter $alt
pilotere $alt
pioner $alt
pipetter $alt
pirater $alt
@@ -6247,6 +6709,7 @@ refuser $alt
regaler $alt
regenerer $alt
reger $alt
ureger $alt // PB uregerlig
regionaliser $alt
registrer $alt
regreder $alt
@@ -6264,7 +6727,7 @@ rekommander $alt
rekompenser $alt
rekonvalescer $alt
rekreer $alt
rekrutter $alt
rekruttere $alt
rektificer $alt
rektoskoper $alt
rekurrer $alt
@@ -6538,7 +7001,7 @@ triumfere $alt
trivialiser $alt
trompeter $alt
trunker $alt
trænere $alt
//trænere $alt
tunneler $alt
turner $alt
tuscher $alt
@@ -6550,7 +7013,6 @@ uniformer $alt
urbaniser $alt
urger $alt
uriner $alt
urpremier $alt
usurper $alt
vacciner $alt
vagabonder $alt
@@ -10385,10 +10847,10 @@ chevrolet sjEvrol'e
saigon sajg3-n // PB Saigon
managua m&n'&:gw&
(deja-vu) deSja||'vy
(il duce) il||d'u:tSj@ // PB Italian faschist
(il duce) il||d'u:tSj@ // PB Italian Fascist

// Abbreviations
pga pOgR'O?n'a? $hasdot // PB short for 'på grund af'
pga pO||gR'O?n||& $hasdot // PB short for 'på grund af'
hr h&r $hasdot // PB hr. - short for mister (Mr) in Danish
mr mestV $hasdot // PB mister
mrs meses $hasdot // PB Mrs.
@@ -10397,14 +10859,24 @@ fx fVegsemp@l // PB "fx" is short for 'for eksempel'
(f.eks) fVegsemp@l $hasdot // PB "f.eks" is short for 'for eksempel'
(dj'en) di:'dje:j3n // *PB dj'en - the dj
(dj'er) di:'dje:jV // *PB dj'er
(tv'et) te:ve:@d // PB
(tv'er) te:ve:V // PB
(cd'en) se:de:3n // PB
(cd'er) se:de:V // PB
emp $abbrev
hbo $abbrev // TV station
usa $abbrev
who $abbrev $allcaps // PB World Health Organization
vsop $abbrev
eu $abbrev
ekg $abbrev
co $abbrev $allcaps // PB for CO2-kvote
ngo $abbrev
edb $abbrev
mri $abbrev
wc v'ese // w is pronounces as v in Danish
(wc'et) v'ese@d
(wc'er) v'eseV
(wc'erne) v'eseVn@
(wc'ernes) v'eseVn@s
it $abbrev
id $abbrev
dna $abbrev
@@ -10476,12 +10948,14 @@ legenderne leg'EndVn3s
(så langt) sV||l'ANt
(så vil) sV||v'el
(så højt) sV||h'Vjt
(så var) sV||v'Ar
(så var) sV||v'Ar
(så længe) sV||l'EN3
(så må) sV||m'O
(så har) sV||har
(ville så) vil3||sV
så sV $sentence $atstart
(virkede så) v'irkeD@||sV
(kom så) kVm||sV
(koste med) kosd@||mED
(en kanoner) en||k&non'er
(en kanoner) en||k&non'er
nå nV $atstart // PB Nå, der er du

+ 539
- 123
dictsource/da_rules
File diff suppressed because it is too large
View File


+ 2
- 1
dictsource/de_list View File

@@ -34,7 +34,7 @@ _| paIp
_: d'Op@lp,UNkt
_; Str'ICpUNkt
__ ,Unt3Str'IC
_- b'IndEstr,IC
_- b'Ind@str,IC
_! 'aUs_|r,u:f@ts,aIC@n
_? fr'Ag@ts,aIC@n
_' ,apo:str'Of
@@ -424,6 +424,7 @@ beat _^_EN
browser _^_EN
byte _^_EN
camcorder _^_EN
change _^_EN
chart _^_EN
chat _^_EN
coach _^_EN

+ 2
- 2
dictsource/de_rules View File

@@ -482,7 +482,7 @@
B) gn (A g@-n

i) gt (_ Ct
zei) gt (_ kt
ei) gt (_ kt
gtet (_ kt@t
gtest kt@st

@@ -1150,6 +1150,7 @@ formal) ie =I@
v v
v) v
v (_N f
_) v (A v

_) v (lad v
_) v (lies f
@@ -1159,7 +1160,6 @@ formal) ie =I@
_) vi (CC vI
_) vi vi:

_) v v
vater fA:t3
väter fE:t3
_) v (ät f

+ 54
- 42
dictsource/dict_phonemes View File

@@ -1,7 +1,7 @@
Phonemes which are used in the *_rules and *_list files


Dictionary af_dict 2010-05-24
Dictionary af_dict 2010-08-26

& &: 3: @ @- @L @U a
A: aI AI aU A~ E e: e@
@@ -53,7 +53,7 @@ p r s S t T v w
x z


Dictionary da_dict 2010-07-29
Dictionary da_dict 2010-08-26

& &# 0 3 @ @- a A
e E i o O u V W
@@ -65,7 +65,7 @@ l/2 l/3 m n N p r R
s S t T tS v w z


Dictionary hu_dict 2010-08-02
Dictionary hu_dict 2010-09-13

A a: E e: i i: o o:
u u: Y y y: Y:
@@ -76,7 +76,7 @@ n^ p r R R2 s S s2
t tS ts v z Z


Dictionary de_dict 2010-07-27
Dictionary de_dict 2010-08-25

3 3: @ @- a A A: aI
aU E E2 E: e: EI i I
@@ -89,18 +89,17 @@ n N p pF r s S t
tS ts v w x z Z


Dictionary el_dict 2008-12-16
Dictionary el_dict 2010-08-26

@ @- a aI e i o oI
u
a aI e i o oI u

* ; b c C d D f
g j k l l^ m n N
n^ p Q r R s s; t
T ts v x z z;
; b c C d D f g
j k l l^ m n N n^
p Q r R s s; t T
ts v x z z;


Dictionary en_dict 2010-07-30
Dictionary en_dict 2010-09-14

0 3 3: @ @- @2 @5 @L
a a# A: A@ aa aI aI@ aU
@@ -116,7 +115,7 @@ S t T t2 tS v w x
z Z


Dictionary eo_dict 2010-05-19
Dictionary eo_dict 2010-08-27

@- a aI aU e eI eU i
o oI u uI
@@ -150,7 +149,7 @@ l m n N p r s S
s2 t v w Z


Dictionary fr_dict 2010-07-30
Dictionary fr_dict 2010-09-04

@ @- a A~ e E E: E~
i I o O O~ u u: w
@@ -200,7 +199,7 @@ q r r. s S s. t T
t. th th. v w x z


Dictionary ta_dict 2010-07-30
Dictionary ta_dict 2010-09-14

a a: aI aU e E e: i
I i: o o: u U u2 u:
@@ -325,16 +324,17 @@ k l m n p R s S
t tS v w x


Dictionary nl_dict 2010-07-27
Dictionary nl_dict 2010-09-13

8 @ @- A a: A~ E e:
EI eU i I O O: o: u
VU Wy y Y: yU
8 @ @- a A a: A~ E
E2 e: EI eU i I o O
O: o: O~ u VU Wy y Y:
yU

* : ; b d D f g
h j k l m n N n^
p Q r s S t tS v
v# w x z Z
* : ; b d D dZ f
g h j k l m n N
n^ p Q r s S t tS
v v# w x z Z


Dictionary no_dict 2010-01-20
@@ -366,13 +366,13 @@ a E E# E~ i O O~ u
y

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


Dictionary pt_dict 2010-07-03
Dictionary pt_dict 2010-09-04

& &/ &U~ &~ @ @- a A
aI aU e E eI EI eU EU
@@ -441,7 +441,7 @@ R2 s S t T tS ts v
w z Z


Dictionary sv_dict 2010-05-28
Dictionary sv_dict 2010-09-08

8 @ a A: E E- e: E:
I i: O o: U u- u: W
@@ -463,7 +463,7 @@ p Q R s S t T tS
v w x z


Dictionary sl_dict 2010-07-14
Dictionary sl_dict 2010-08-14

@ a a: e E e: i i:
o O o: u u: y
@@ -498,7 +498,7 @@ p Q r s s. t t[ tS;
v w x z Z z.


Dictionary zh_dict 2010-06-29
Dictionary zh_dict 2010-09-13

@ @r a A ai Au E ei
i i. i[ iA iE io iou N-
@@ -611,21 +611,23 @@ Dictionary bg_dict 2010-05-19

@ a e i o u

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


Dictionary nso_dict 2010-05-26
Dictionary nso_dict 2010-08-27

@ a e i m- n- N- o
u
@ a e E i m- n- N-
o u U

- : b d D dZ f g
h j J k l l# m n
N n^ p Q r R R3 s
S t T tS v w x z
- : ; b B d D dZ
f h j J k K l l#
m n N n^ p Q R3 s
S t tS v w x X x2
z


Dictionary ht_dict 2010-06-29
@@ -638,6 +640,16 @@ m n N p r s S t
tS v z Z


Dictionary ak_dict 2010-08-11

a e E i o O u

: b C d dZ dZ; f g
h j k l m n N n^
p R s t tS; v w z
z;


Dictionary az_dict 2010-07-27

& @ a e E i o u

+ 55
- 43
dictsource/el_list View File

@@ -8,49 +8,49 @@


// numbers
_0 miD'en
_1 'ena
_2 D'io
_3 t@-@'ia
_3f t@-@'is
_4 t'esera
_4f t'eseris
_5 p'ente
_6 'eksi
_7 ept'a
_8 okt'o
_9 en'ea
_1X D'eka
_11 'enDeka
_12 D'oDeka
_2X 'ikosi
_3X t@-*i'anda
_4X sar'anda
_5X pen'inda
_6X eks'inda
_7X ebdom'inda
_8X ogd'onda
_9X enen'inda
_0C ekat'on_
_1C0 ekat'o
_1C ekat'on_
_2C D;ak'os;a_
_3C t@-*iak'os;a_
_4C tet@-*ak'os;a_
_5C pendak'os;a_
_6C eksak'os;a_
_7C eptak'os;a_
_8C oktak'os;a_
_9C en^ak'os;a_
_0M1 Cil^'aDes
_1M1 C'il^a // no '1' before thousand
_1M2 'ena|ekatom'irio
_0M2 ekatom'iria
_1M3 'ena|Disekatom'irio
_0M3 Disekatom'iria
_dpt k'oma
_. tel'ia
_0 miD'en
_1 'ena
_2 D'io
_3 tr'ia
_3f tr'is
_4 t'esera
_4f t'eseris
_5 p'ente
_6 'eksi
_7 ept'a
_8 okt'o
_9 en'ea
_1X D'eka
_11 'enDeka
_12 D'oDeka
_2X 'ikosi
_3X tri'anda
_4X sar'anda
_5X pen'inda
_6X eks'inda
_7X ebdom'inda
_8X ogd'onda
_9X enen'inda
_0C ekat'on_
_1C0 ekat'o
_1C ekat'on_
_2C D;ak'os;a_
_3C triak'os;a_
_4C tetrak'os;a_
_5C pendak'os;a_
_6C eksak'os;a_
_7C eptak'os;a_
_8C oktak'os;a_
_9C en^ak'os;a_
_0M1 Cil^'aDes
_1M1 C'il^a // no '1' before thousand
_1M2 'ena|ekatom'irio
_0M2 ekatom'iria
_1M3 'ena|Disekatom'irio
_0M3 Disekatom'iria
_dpt k'oma
_. tel'ia
_#ος %os // ordinal suffix

// articles
ο o $u // definate article
@@ -85,6 +85,8 @@ _. tel'ia


// verbs
θα $u // future

είμαι $u // to be
είσαι $u
είναι $u
@@ -165,6 +167,8 @@ _. tel'ia
προς $brk // towards
μέχρι $brk // until
κοντά $brk // beside
επί $u


// conjunctions

@@ -180,7 +184,15 @@ _. tel'ia
επειδή $pause // because
γιατί $pause // because, why
διότι $pause // because, for
για $pause
ότι $pause


// Pronunciation exceptions



(για να) jan'a

// Letters
// If a letter has a "word" pronunciation which is different from its

+ 13
- 11
dictsource/el_rules View File

@@ -86,6 +86,8 @@
ι i
C) ι (A ;
ρ) ι (A i
δ) ι (α_ i
ι (ε i

.group κ
κ k
@@ -157,17 +159,17 @@
ν_) π b

.group ρ
ρ R
ρρ R
A) ρ (A *
C) ρ @-*
αυ) ρ @-* // υ becomes consionant [v]
αύ) ρ @-*
ευ) ρ @-*
εύ) ρ @-*
ηυ) ρ @-*
ηύ) ρ @-*
ρ r
ρρ r
A) ρ (A r
C) ρ r
αυ) ρ r // υ becomes consionant [v]
αύ) ρ r
ευ) ρ r
εύ) ρ r
ηυ) ρ r
ηύ) ρ r


.group σ

+ 20
- 16
dictsource/en_list View File

@@ -223,6 +223,7 @@ _₠ jU@roU
≠ n0t'i:kw@LtU
№ nju:m@roU
। dVnda#
● bl,aks'3:k@L

ß S,A@p'Es
ə SwA:
@@ -291,16 +292,16 @@ _17 s'Ev@nti:n
?7 _17 s'@v@nti:n
_18 'eIti:n
_19 n'aInti:n
_2X tw'EntI
_3X T'3:tI
?5 _3X T'IRtI
_4X f'o@tI
_5X f'IftI
_6X s'IkstI
_7X s'Ev@ntI
?7 _7X s'@v@ntI
_8X 'eItI
_9X n'aIntI
_2X tw'Enti
_3X T'3:ti
?5 _3X T'IRti
_4X f'o@ti
_5X f'Ifti
_6X s'Iksti
_7X s'Ev@nti
?7 _7X s'@v@nti
_8X 'eIti
_9X n'aInti
_0C h'Vndr@d
_0M1 T'aUz@nd
_0M2 m'Ili@n
@@ -326,8 +327,8 @@ _60o s'Iksti@
_70o s'Ev@nti@
_80o 'eIti@
_90o n'aInti@
_0Co h'Vndr@dT
_0M1o T'aUz@ndT
//_0Co h'Vndr@dT
//_0M1o T'aUz@ndT


// ABBREVIATIONS
@@ -2090,6 +2091,7 @@ supplier s@plaI3
suppose $2
suprise $2 // misspell
surest SU@@st
surplus s3:pl@s
surrogate sVr@geIt
?3 surrogate s3:@geIt
survey s3:veI $onlys
@@ -2440,6 +2442,7 @@ Dahomey $2
Damascus da#mask@s
Danish deInIS
Delhi dElI
Dhabi dA:bi
Djibouti dZIb'u:tI
Donegal d0nI2g'O:l
Durham dVr@m
@@ -2615,6 +2618,7 @@ Barack ba#rA:k
Barbara bA@b@r@
Betsy bEtsI
Bjorn bjO@n
Bjørn bj3:n
Boris b0rIs
Brien braI@n
Candace kandIs
@@ -2646,8 +2650,9 @@ Dmitri d@mi:tri
Dominic d0mI2nIk
Donaghy d0n'hi:
Doris d0rIs
Dorothy dO@r@Ti
Dorothy d0r@Ti
Dougall du:g@L
Duncan dVnk@n
Dvina d@vi:n@
Dylan dIl@n
Edith i:dIT
@@ -2784,7 +2789,7 @@ Theresa t@ri:z@
Therese t@ri:z
Thomas t0m@s
Tina ti:n@
Tracy treIsI
Tracy treIsi
Tricia trIS@
Vanessa va#nEs@
Wally w0lI
@@ -2910,7 +2915,7 @@ through Tru: $u $strend2
toward tUwO@d $2
over oUv3 $u $strend2 $only
under Vnd3 $u $strend2 $only
within wIDIn $u2
within wIDIn $u2 $strend2 $brk
without wIDaUt $u2 $strend2
above @bVv $u2 $strend2
about a#baUt $u2 $strend2
@@ -3155,7 +3160,6 @@ since sIns $pause
thus DVs $pause
though ,DoU
whenever wEnEv3 $u2 $pause
within $u $pause
whoever hu:Ev3 $2
whatever w0tEv3 $2 $pause
?3 whatever wVtEv3 $2 $pause

+ 10
- 4
dictsource/en_rules View File

@@ -253,7 +253,7 @@
accu (ra akjU
accus (A a#kju:z
ace (_ eIs
sp) ac (e eIs
sp) ac (e# eIs
_r) ac (e eIs
_) ac (e a#s
_r) ac (is eIs
@@ -1173,7 +1173,7 @@
_) be (sC bI2
_) be (stia bE
_) be (tC bI2
_) be (v bE
_) be (vA bE
be (gA bI2
be (gr bI2
be (lat bI2
@@ -1489,6 +1489,7 @@
_) dj (Y dZ
_) d (nie d
_) d (wY d // allow _dw
_) d (h@@ d

d (d
_) d' (AP2 d
@@ -2608,6 +2609,8 @@
&) i (c_ =I
&) i (ca_ =I
&) i (cal =I
&) i (cism_ =I
&) i (cist_ =I
pr) i (ce aI
adv) i (ce aI
dev) i (ce aI
@@ -2815,7 +2818,7 @@
ie (ve i:
s) ie (ve I
ie (z i:
_t) ie aI
_t) ie (B aI

.group ig
am) ig (a_ i:g
@@ -3283,6 +3286,7 @@
_) k (L01Y k
_) k (hY k
_) k (wY k
_) kj (e@ kj
_) kn (Y n
kn (if n
kn (iv n
@@ -4197,6 +4201,7 @@
l) ov (e Vv
_l) ove Vv
cl) ov (e oUv
_sl) ov (enA oUv
pl) ov oUv
pull) ov oUv
m) ov (A u:v
@@ -4346,6 +4351,7 @@
_) pre (C@ pr%I
_) prea (ch pri:
_) pre (am pri:
_) pre (cinc pri:
pre (cio prE
preda (to prEd@
prede (ces pri:dI
@@ -5465,7 +5471,7 @@
6_) 's (_ I2z
16_) 's (_ z
're (_S3 @
've (_S3 v
've (_S3 @v
'd (_S2 d
'll (_S3 @L


+ 12
- 10
dictsource/eo_list View File

@@ -30,14 +30,14 @@ _0M4 duili'ono
_dpt _komo_

// ordinal numbers
_#a a
_#aj aI
_#an an
_#ajn aIn
_#-a a
_#-aj aI
_#-an an
_#-ajn aIn
_#a %a
_#aj %aI
_#an %an
_#ajn %aIn
_#-a %a
_#-aj %aI
_#-an %an
_#-ajn %aIn

// accent names
_lig ligat'uRa
@@ -69,6 +69,8 @@ _? demandosigno
_! _k@-*isigno_
_- dividost@-*eko
__ subst@-*eko
_' apost@-*'ofo
_" tsito
~ tildo
° gradoI
% p@-*otsento $max3
@@ -80,8 +82,8 @@ __ subst@-*eko
| duktosigno
* asteRisko $max3
© kopiRaIto
_( R'ondak@-*'ampo
_) f'eRmaRondak@-*'ampo
_( parentezo
_) f'eRmaparent'ezo
_[ R'ektak@-*'ampo
_] f'eRmaRektak@-*'ampo
_{ k'uRbak@-*'ampo

+ 7
- 2
dictsource/fr_rules View File

@@ -27,7 +27,7 @@
// http://www.fluxnic.net/cicero
//
// Rules are now maintained by Michel Such <[email protected]>
// Last update: 2010-07-30 Michel Such <[email protected]>
// Last update: 2010-09-04 Michel Such <[email protected]>
//

// Letter classes:
@@ -70,6 +70,7 @@

// For english words ending "side"
.L14 be in up ut
.L15 c f g h l s



@@ -135,6 +136,7 @@ _C) aud (_ od // Maud
bb) aye (X ei // abbaye
ay (C E // aymé
ay Ej // paye
ay (ak aj // kayak
ay (_ E // display
Xl) ayer (X EjWr // player, layer
h) am (_S2 am
@@ -153,6 +155,7 @@ _C) aud (_ od // Maud

// group b: English section
back _^_en
_) be (L15A _^_en
board _^_en // board, keyboard
box (_ _^_en // box, inbox, outbox
bugg _^_en // debugger
@@ -204,6 +207,7 @@ _C) aud (_ od // Maud
toma) c (_
se) c (ond g // seconde secondaire
c k // recoin donc
zin) c (_ g // zinc

cient (_ sit2 // ils appr�ient, remercient.
effi) cient sjA~ // coefficient
@@ -576,6 +580,7 @@ gu) eu (ler Y // gueuler
_y) en (_ En
iew) er (X er2
_m) e (ga e
app) en (di E~ // appendice


// group e: English section
@@ -1462,7 +1467,7 @@ C) ult (_ _^_en
_C) y (_ _^_en
C) y (e_ _^_en
%C) y (_ _^_en
//@CAC) y (_ _^_en
@CeC) y (_ _^_en
nC) y (_ _^_en
yze _^_en


+ 144
- 7
dictsource/hu_list View File

@@ -156,6 +156,8 @@ _#-ika A
_#-ikai Ai
_#-éhez e:hEz
_#-ához a:hoz
_#-ikének e:nEk
_#-ikának a:nAk
(1-e) elseje $text $alt2
(1-én) elsején $text $alt2
(1-jén) elsején $text $alt2
@@ -233,6 +235,7 @@ _#-ához a:hoz
(00-tól) nul:Anul:a:to:l
(0-n) nul:a:n
(00-n) nul:Anul:a:n
(0-ról) nul:a:R2o:l
(1-gyet) EJ:Et
(1-gyes) EJ:ES
(2-őt) kEt:Y:t
@@ -263,6 +266,7 @@ _#-ához a:hoz
(5-től) Yt:Y:l
(5-től) YtYdike:tY:l $alt2
(5-t) YtYt
(5-ször) Yts:YR2
(6-al) hAt:Al
(6-tal) hAt:Al
(6-tól) hAt:o:l
@@ -282,7 +286,7 @@ _10e tiz
_20e hus
(10-szer) ti:s:ER2
(10-szeres) ti:s:ER2ES
(10-t) tizEt


//special number exceptions
@@ -362,6 +366,9 @@ nyári $alt
téli $alt
végén $alt
elején $alt
folyamán $alt
úton $alt
út $alt

// accent names
_lig ligAtu:R2A
@@ -595,7 +602,7 @@ vel $unstressend

ellen $unstressend // against
//elé $u // before
óta $alt $alt3 // since. Not a bug both $alt $alt3 attribute,
óta $unstressend $alt $alt3 // since. Not a bug both $alt $alt3 attribute,
//because if only a year is present, need spokening normal number, not
//ordinal number. For example:
//2004. óta meaning since 2004 and need spokening normal number.
@@ -865,7 +872,7 @@ látszik $unstressend
látszott $unstressend
látszanak $unstressend
látszotok $unstressend
körül $unstressend $alt3
körül $unstressend $alt $alt3
dőlt $unstressend
vér $unstressend
sót $unstressend
@@ -1052,7 +1059,137 @@ ház $unstressend
állnak $unstressend
idején $unstressend
néznek $unstressend
érezte $unstressend
sért $unstressend
adózású $unstressend
kötelezni $unstressend
lehetőség $unstressend
mondtuk $unstressend
kellene $unstressend
szerte $unstressend
hozta $unstressend
kezdte $unstressend
lökte $unstressend
benne $unstressend
fenn $unstressend
elő $unstressend
javasolták $unstressend
kezdjen $unstressend
látta $unstressend
látták $unstressend
nyomát $unstressend
került $unstressend
várták $unstressend
közbe $unstressend
látott $unstressend
tartanak $unstressend
ejt $unstressend
önnek $unstressend
álljon $unstressend
szálljon $unstressend
üljön $unstressend
jónak $unstressend
hisz $unstressend
elől $unstressend
vágy $unstressend
vitték $unstressend
küldött $unstressend
mentén $unstressend
venni $unstressend
múlik $unstressend
indít $unstressend
nála $unstressend
vizsgálata $unstressend
vizsgálatot $unstressend
indítottak $unstressend
vizsgált $unstressend
javult $unstressend
része $unstressend
írni $unstressend
téren $unstressend
terén $unstressend
menni $unstressend
fogja $unstressend
teszik $unstressend
tömni $unstressend
nyel $unstressend
érzi $unstressend
annak $unstressend
dolog $unstressend
számít $unstressend
aránya $unstressend
helyzetük $unstressend
kifogásolták $unstressend
kifogásolta $unstressend
fogalmaz $unstressend
szóló $unstressend
gyártott $unstressend
írta $unstressend
rúgták $unstressend
esett $unstressend
marad $unstressend
tulajdonú $unstressend
KFT $unstressend
folytatja $unstressend
államokban $unstressend
című $unstressend
senkit $unstressend
abban $unstressend
tegyük $unstressend
szar $unstressend
gond $unstressend
megy $unstressend
ebből $unstressend
abból $unstressend
ebben $unstressend
mondom $unstressend
akar $unstressend
akarsz $unstressend
távra $unstressend
jog $unstressend
járunk $unstressend
szólni $unstressend
ró $unstressend
kérni $unstressend
építést $unstressend
adni $unstressend
részén $unstressend
érni $unstressend
lap $unstressend
írja $unstressend
írtak $unstressend
stressz $unstressend
nyújtózni $unstressend
éve $unstressend
tartott $unstressend
attól $unstressend
utast $unstressend
szint $unstressend
minőségű $unstressend
beszélt $unstressend
kerületben $unstressend
gáz $unstressend
épült $unstressend
építésű $unstressend
együttes $unstressend
távon $unstressend
híg $unstressend
szőr $unstressend
diagnosztizálható $unstressend
működik $unstressend
hat $unstressend
mutatnak $unstressend
rés $unstressend
szélén $unstressend
lógott $unstressend
tűnő $unstressend
kötni $unstressend
lopni $unstressend
döntöttem $unstressend
szerzett $unstressend
érted $unstressend
járni $unstressend
döntöttek $unstressend
írt $unstressend

// word pairs

@@ -1074,10 +1211,10 @@ vannak $unstressend

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

leszek $u // to be, future
leszel $u
@@ -1296,4 +1433,4 @@ CD-m) cédém
(hu-n) hun
(USA-ban) usában
(USA-ba) usába
(pc-n) pécén

+ 22
- 0
dictsource/hu_rules View File

@@ -45,6 +45,9 @@
tö) bb (féle b
jo) bbr (a bR2
tö) bbr (e bR2
kise) bb (ség b
tö) bb (száz b
tö) bb (száz b

.group c
c ts
@@ -220,6 +223,10 @@ menetren) dsz (erű d|s
cselé) ds (ég tS:
föl) d (szegély d
stran) d (szezon d
_hol) d (sarló d
mó) d (sor d
csalá) d (segít d


.group dz
fogó) dz (kod ts
@@ -332,6 +339,7 @@ ritkasá) g (gyűjt g
se) gg (be g
pro) g (gyak g
se) ggr (e gR2
arcüre) g (gyulladás g

.group gy
gy J
@@ -425,6 +433,7 @@ tizene) gy (en J:
huszone) gy (edik J:
je) gy (ért J
harmince) gy (edik J:
étvá) gy (javít J

.group h
h h
@@ -451,6 +460,9 @@ harmince) gy (edik J:
t) í (zes i
sz) í (vel i:
_t) í (zük i
_sz) í (vattak i
_sz) í (vattákk i
_sz) í (vató i

.group j
j j
@@ -690,6 +702,8 @@ gyalogo) s (zászló S
szennye) s (zsá S
alvá) s (zavar S
magatartá) s (zavar S
erőforrá) s (zabál S
működé) s (zava S

.group ss
ssz ss2
@@ -863,6 +877,7 @@ kitöré) ssz (erű Ss
hirdeté) ssz (erve Ss
páncélo) ssz Ss
hajtá) ssz (erű Ss
sorva) ssz (ák s:

.group sz
sz s
@@ -1114,6 +1129,13 @@ művele) t (sáv t
ö) t (jegyű t
ha) t (jegyű t
hé) t (jegyű t
zár) t (sorú t
skó) t (juhász t
szerete) t (szolgálat t
ú) t (jelzés t
vizsgála) t (sor t
dagana) t (sej t
tábláza) t (sor t

.group ts
ts (_S2 tS //general rule with word end of ts letters

+ 354
- 1
dictsource/nl_list View File

@@ -317,10 +317,12 @@ anker $alt
badder $alt
bagger $alt
baker $alt
baster $alt
beender $alt
belemmer $alt
beter $alt
bibber $alt
bitter $alt
bladder $alt
blader $alt
blaker $alt
@@ -330,84 +332,297 @@ blunder $alt
bolder $alt
bolster $alt
boter $alt
broeder $alt
buffer $alt
bulder $alt
bulldozer $alt
bumper $alt
bunker $alt
charter $alt
cijfer $alt
cluster $alt
computer kOmpj'ut@r $alt // ?? "$2 $alt" doesn't work
consuminder $alt
counter $alt
cover k8v@r $alt
dabber $alt
daver $alt
deemstar $alt
dender $alt
dobber $alt
dokter $alt
donder $alt
donker $alt
dotter $alt
duister $alt
dwater $alt
eergister $alt
eier $alt
emmer $alt
ender $alt
enter $alt
erger $alt
etter $alt
filter $alt
fladder $alt
flakker $alt
flikker $alt
flipper $alt
flodder $alt
flonker $alt
flotter $alt
fluister $alt
foeter $alt
folder $alt
folter $alt
gabber $alt
gader $alt
geester $alt
gemoeder $alt
gibber $alt
gister $alt
glibber $alt
glimmer $alt
glinster $alt
glitter $alt
glunder $alt
goeder $alt
halter $alt
hamer $alt
hamster $alt
haper $alt
helder $alt
herinner $alt
herover $alt
hinder $alt
hoender $alt
honger $alt
huiver $alt
hunker $alt
ijver $alt
ijzer $alt
imker $alt
inburger $alt
inkader $alt
jakker $alt
jammer $alt
joeker $alt
kader $alt
kaffer $alt
kalefater $alt
kalver $alt
kamfer $alt
kanker $alt
kaper $alt
kaver $alt
keilder $alt
kenter $alt
keper $alt
kerker $alt
ketter $alt
keuter $alt
kicker $alt
kieper $alt
kinder $alt
kladder $alt
klapper $alt
klater $alt
klauter $alt
klaver $alt
kledder $alt
klepper $alt
kletter $alt
kleuter $alt
klieder $alt
klinker $alt
klodder $alt
kluister $alt
knapper $alt
knetter $alt
kneuter $alt
knikker $alt
knipper $alt
knisper $alt
knister $alt
koekeloer $alt
koester $alt
koeter $alt
koffer $alt
koker $alt
kolder $alt
kommer $alt
koper $alt
kuier $alt
kwetter $alt
labber $alt
lager $alt
lammer $alt
laser $alt
laster $alt
lauwer $alt
lazer $alt
lebber $alt
leder $alt // gelederen
leger $alt
lekker $alt
lemmer $alt
lepper $alt
ler $alt
letter $alt
leuter $alt
lever $alt
lieder $alt
lobber $alt
lodder $alt
lommer $alt
louter $alt
lubber $alt
luier $alt
luimer $alt
luister $alt
mager $alt
marmer $alt
meander $alt
meerder $alt
meester $alt
meier $alt
mekker $alt
mieter $alt
mijmer $alt
millimeter $alt
minder $alt
modder $alt
moeder $alt
moker $alt
monster $alt
mopper $alt
nader $alt
neder $alt
nuchter $alt
nummer $alt
ober $alt
offer $alt
onder $alt
orber $alt
ouder $alt
over $alt
palaver $alt
pantser $alt
pauper $alt
peiger $alt
peper $alt
peuter $alt
pieker $alt
pieter $alt
pinkster $alt
pleister $alt
pletter $alt
ploeter $alt
plunder $alt
poeder $alt
poeier $alt
poker $alt
polder $alt
puber $alt
pulver $alt
purper $alt
rader $alt
raster $alt
redder $alt
ridder $alt
rooster $alt
rubber $alt
ruiter $alt
runder $alt
sakker $alt
schamper $alt
schater $alt
schemer $alt
schetter $alt
schilder $alt
schipper $alt
schitter $alt
schouder $alt
schutter $alt
sidder $alt
sjacher $alt
skeeler $alt
skelter $alt
slechter $alt
slenter $alt
slidder $alt
slinger $alt
slobber $alt
slodder $alt
sloeber $alt
sluier $alt
sluimer $alt
snater $alt
snipper $alt
snotter $alt
snuister $alt
sober $alt
sodemieter $alt
somber $alt
spetter $alt
spijker $alt
splinter $alt
sputter $alt
steiger $alt
stekker $alt
stotter $alt
stuiter $alt
stumper $alt
sudder $alt
suiker $alt
supporter $alt
tater $alt
teder $alt
teister $alt
temper $alt
tetter $alt
teuter $alt
timmer $alt
tover $alt
treiter $alt
trompetter $alt
tuier $alt
tutter $alt
twitter $alt
uier $alt
vinger $alt
vlieger $alt
vlinder $alt
vlotter $alt
voeder $alt
volker $alt
vorder $alt
waaier $alt
wakker $alt
wapper $alt
water $alt
wedijver $alt
wegwijzer $alt
wester $alt
wijder $alt
wilder $alt
winter $alt
wipper $alt
woeker $alt
wonder $alt
zeker $alt
zever $alt
zilver $alt
zinder $alt
zolder $alt
zomer $alt
zonder $alt
zuiver $alt
zwabber $alt
zwakker $alt
zwanger $alt


// words where -age is [a:Q@] not French ['a:Z@]
drage $alt
hedentendage $alt
@@ -432,14 +647,149 @@ metrage me:tr'a:Z@
outillage utij'a:Z@
vrijage vre:j'a:Z@

// stress on final -et
facet $2
pincet $2
cachet kAS'E
crochet krOS'E
manchet mAnS'Et
planchet plAnS'Et
pochet pOS'Et
cadet $2
kadet $2
biljet $2
sajet $2
sujet syZ'Et
banket $2
boeket $2
briket $2
etiket $3
klinket klINk'Et
koket $2
kroket $2
loket $2
musket $2
pakket $2
parket $2
piket $2
raket $2
winket $2
amulet $3
ballet $2
cabriolet ka:briol'Et
corselet $3
couplet kupl'Et
doublet dubl'Et
epaulet e:po:l'Et
filet fil'e:
gilet Zil'Et
kotelet $3
omelet $3
palet $2
pamflet $2
pistolet pisto:l'Et
poulet pul'Et
reglet re:Ql'Et
skelet sk@l'Et
tablet $2
toilet tv#Al'Et
violet $3
bajonet $3
cabinet $3
carnet $2
castagnet kAstAn^'Et
kabinet $3
klarinet $3
kornet $2
marionet $4
sonnet $2
spinet $2
vignet vIn^'Et
karpet $2
lampet $2
pipet $2
toupet tup'Et
trompet $2
baret $2
cabaret ka:ba:r'Et
floret $2
lazaret $3
minaret $3
portret $2
sigaret $3
closet klo:z'Et
corset $2
falset $2
kwartet $2
kwintet $2
motet $2
nonet $2
octet $2
septet $2
sextet $2
brevet br@v'Et
corvet $2
servet $2
buffet byf'Et
budget b8dZ'Et
rozet $2
sorbet $2
duet dy'Et
jacquet Zak'Et
menuet me:ny'Et
silhouet silu'Et
tourniquet turnik'Et

amorette $3
amourette a:mu*'Et@
anisette a:niz'Et@
brunette $2
cassette $2
chambrette Sambr'Et@
coquette ko:k'Et@
couchette kuS'Et
courgette kurZ'Et
diskette $2
estafette $3
etiquette e:tik'Et@
kokette $2
maisonnette mEzOn'Et@
majorette $3
maquette ma:k'Et@
modinette $3
musette $2
pirouette pi*uv#'Et@
pochette pOS'Et
operette o:p@r'Et@
raclette $2
roulette rul'Et@
soubrette subr'Et@
suffragette syfra:Z'Et@
ultraviolette 8ltra:vio:l'Et@
vedette v@d'Et@
violette $3
wasserette $3


// pronunciation exceptions
aangrijpend $2
agenda $2
amnestie $3
bourgondier burx'o:ndi:@r
circuit sIrku'i
computer $2
chalet Sa:lE
champagne SAmp'An^@
champignon SAmpij'On
chanson SA~s'O~
chapiter $2
charade $2 // ?? what is plural
chassis SAs'i
chat tSEt
check tSEk
chiffon Sif'On
contour ko:nt'ur
dynastie $3
eucharistie $4
ingewikkeld $3
ingrijpend $2
ingeval $3
@@ -455,6 +805,7 @@ ongerieflijk $3
ongrondwettig $3
proces $2
renaissance rEne:s'A~s@
sacristie $3
tegenaan $3
tegenin $3
tegenover $3
@@ -462,11 +813,13 @@ tegendraads $3
tegennatuur $4
tegenstrijdig $3
tegenwoordig $3
travestie $3
waarschijnlijk $2



// names
charlotte $2
Inge IN@
Ingeborg INe:bOrx
Ingmar INmAr

+ 79
- 26
dictsource/nl_rules View File

@@ -18,11 +18,15 @@
ages (_S1 s
age (_$w_alt a:Q@
aire (_ 'E:r
@) ant (_ 'Ant

@) a (de_ 'a:
@) a (ta_ 'a:


.group b
b b // auto-devoice at end-of-word
bb b
b) b
bs (_N ps

&) baar (_ =ba:r
@@ -44,18 +48,35 @@
c k
ch x
_) ch S
_) ch (arit x
_) ch (ador tS
_) ch (ao x
_) chang (e SA~Z
_) chaperon S,Ap@rO~n
_) charg (@ SArZ
_) ch (ari x
_) ch (arter tS
_) chau (ffe S%o:
_) chau (vin S,o:
_) ch (emi x
_) cheque SEk
_) cherry tSEri
_) chi (cane S%i
_) ch (ip tS
_) ch (olest x
_) ch (lo x
_) ch (ole x
_) cho (que SO
_) ch (or x
_) ch (r x
&) che (_ =S
ck k
cieel S'e:l
ciële S'e:l@
coach ko:tS


.group d
d d // auto-devoice at end-of-word
dd d
d) d
dt t
ds (_N ts

@@ -73,8 +94,10 @@
ee e:
eeuw eU
eu Y:
@) ee (l_ 'e:
@) ee (m_ 'e:

eau o: //words with French origin
@) ee (_ 'e:
@) ee (X_ 'e:
@) ee (r_ 'I:
@) ee (rt_ 'I:
@) ee (rd_ 'I:
@@ -83,31 +106,32 @@
it) eit (_ 'EIt
&) el (_ @l
&) eld (_ @ld
&) ele (_ @l@
&) ele (_ 'e:l@
&) em (_ @m
&) en (_S2q @n
&) en (_S2qd @n
&) ens (_S3q @ns
&) end (_ @nd
&) ende (_ @nd@
@) ent (_ 'Ent
&) er (_ @r
&) ere (_ @r@
&) er (en_$p_alt @r // where 'eren' is not a verb ending
eren (_ 'I:r@n
&) es (_ @s
eau o: //words with French origin
@) etten (_S3 @n
@) eur (_ 'Y:r

_) er (@P2 Er
@) e (raar_ @

&) e (nB@ @
&) e (nB@ E2
id) e (nt E
&) e (rC@ @
&) e (rC@ E2



.group f
f f
ff f
f) f


.group g
@@ -116,6 +140,7 @@

_) ge (@P2 Q@
_) gee Qe:
gener (aal Q,e:n@r
gelijk Q@lEIk
_) geu QY:
_) ge (ven Qe:
@@ -127,6 +152,7 @@
C) h (K

_) her (@P3 hEr
_) her (en hI:r


.group i
@@ -142,15 +168,18 @@
m) ie (_ 'i
p) ie (_ 'i

ie (f_ 'i
ie (r_ 'i
&) ica (_ =ika:
ie (X 'i
ie (rd_ 'i
@) ig (_S2d @x
@) ige (_ @Q@
_) in (gP2 'In
@) ij (n_ 'EI
_) in (C@P2 'In
// _) in (gP2 'In
io (nage iO
@) isch (_ =is
@) ische (_ =is@
@) ist (_ 'Ist


.group j
@@ -159,7 +188,7 @@

.group k
k k
kk k
k) k

_) koning k'o:nIN // in compounds
_) koningin ko:nIQ'In
@@ -167,7 +196,7 @@

.group l
l l
ll l
l) l
&) lijk (_S4 l@k
&) lijke (_S5 l@k@
&) laan (_S4 la:n
@@ -176,15 +205,20 @@

.group m
m m
mm m
m) m

manage (ment ma:nIdZ
_) mee (@P3 m'e:


.group n
n n
nn n
n) n
ng N
nj n^

_) na (C@@P2 n'a:


.group o
o o:
@@ -199,7 +233,11 @@
ou VU
ou (rage u

oo (X 'o:
telef) oo (n 'o:
_) op (@@P2 'Op
_) open (@P4 'o:p@n
_) over (@P4 'o:v@r


.group on
@@ -226,9 +264,10 @@
_) onge (val OnQ@



.group p
p p
pp p
p) p
_) ph f
ph (K f

@@ -238,6 +277,7 @@
qu kv
@) qu (eer k
@) qu (eren_ k
@) que (_ k


.group r
@@ -256,7 +296,7 @@

.group s
s s
ss s
s) s
sch sx
sch (_ s
sch (e_ s
@@ -268,9 +308,13 @@

.group t
t t
tt t
tie (_ tsi
c) tie (_ si
t) t
tie (_ =tsi
c) tie (_ =si
k) tie (_ =si
p) tie (_ =si
s) tie (_ =ti
cra) tie (_ ts'i
tj t;
tsj tS
_) th t
@@ -279,6 +323,8 @@
t (hav t
_) toe (@P3 t'u

_) team t'i:m
team (_ ti:m

.group te
_) tegen (P5 t'e:Q@n
@@ -314,6 +360,8 @@
uw yU
uw (_ yU

_) uit (@P3 'Wyt


.group v
v v
@@ -321,6 +369,7 @@
_) ver (@P3 v@r
_) ver (sie_ vEr
_) ver (der_ vEr
_) voort (@P5 v'O:rt


.group w
@@ -328,6 +377,8 @@
w (X w
w (CK w

_) weg (@P3 v#'Ex


.group x
x ks
@@ -335,6 +386,8 @@

.group y
y i
y (CK I
y (x I


.group z

+ 4
- 3
dictsource/pt_list View File

@@ -309,8 +309,7 @@ aquele &k'ely $u+ $nounf // that
aquela $u+
daquele d&k'ely $u+ $nounf

?1 que ky $u
?2 que ke $u
que $u // pronunciation is in pt_rules

// possessive adjectives
meu $u+ $nounf
@@ -325,7 +324,7 @@ seu $u+ $nounf
sua $u+
seus $u+
suas $u+
?2 nosso $u+ n'OsU
?2 nosso $u+ // n'OsU
?2 nossa $u+ n'Os&
?2 nossos $u+ n'OsUs
?2 nossas $u+ n'Os&s
@@ -738,7 +737,9 @@ elixir eliSir
page p'eIdZ
?2 pior pi'Or
?2 piores pi'O*is
preço $alt2
python p'aIT&~N
queda $alt
?1 readme r'i:dmi:
?1 sapi s,ap'i
?1 scanner sk'En&r

+ 4
- 0
dictsource/pt_rules View File

@@ -169,6 +169,8 @@
e (co_ E
e (ctA_ E
e (ctAm_ E
e (çA_ E
e (çAm_ E

e (de_ E
e (dem_ E
@@ -656,6 +658,8 @@
qü kw
qu (Y k
qu (K ku
?2 _) que (_K ke
_) que (_ ky
?1 _) qua kwa // quatro, etc.
?1 _) que ke // quente, etc.
?1 _) quei (C k'eI // queira, queima, etc

+ 63
- 61
dictsource/sv_rules View File

@@ -338,8 +338,7 @@
garant g%aR'ant
gata gA:ta
glöm glWm
guide g'aId
guider g'aIdER
guid (e g'ajd
group _^_EN

.group h
@@ -463,82 +462,85 @@

.group o
o u:
o (CC O

//sort
o (C% U
o (CC O
pr) o (b %O
o (bb O
o (dd O
o (mm O
o (pp O
o (ss O
o (tt O
o (ff O
o (rC u:
o (rr O
o (ll O
o (m_ O
d) o (k O
o (rk O
o (rg O
o (ck O
f) o (n 'o:
pr) o (c %U
pr) o (cent %O
och 'Ok
s) o (ci %U
o (ck O
g) o (d u:
k) o (d o:
bl) o (d 'u:
pr) o (d %O
o (dd O
o (ff O
l) o (g 'o:
l) o (v 'o:
kr) o (g u:
l) o (gg 'O
b) o (x 'O
s) o (r 'O
k) o (pi 'O
f) o (rm 'O
_) o (j O
pr) oj Osx'
o (ns U
b) o (k u:
d) o (k O
k) o (k 'u:
l) o (k %U
g) o (r U
nn) o (ns O
kr) o (k u:
p) o (lis %O
o (ll O
k) o (lu %O
o (m_ O
o (mm O
d) o (n O
f) o (n 'o:
g) o (n O
l) o (n O
kr) o (n u:
ss) o (n O
C) o (rs O
k) o (rt O
b) o (rt O
o (ni 'o:
o (ns U
k) o (ns O
nn) o (ns O
operat OpERat
k) o (pi 'O
o (pp O
p) o (pu O
g) o (r U
s) o (r 'O
lk) o (r o:
o (rC u:
n) o (r_ O
t) o (r_ O
s) o (r_ O
t) o (r_ O
rs) o (rd u:
o (rde o:
b) o (st u:
b) o (k u:
kr) o (k u:
kr) o (g u:
kr) o (n u:
f) o (tb u:
pr) o (v u:
osparat u:spA:Rat
och 'Ok
k) o (ns O
pr) o (cent %O
p) o (lis %O
p) o (pu O
g) o (n O
sp) o (rt O
o (rg O
o (rk O
f) o (rm 'O
st) o (rm O
inf) o (rmati %O
o (rr O
C) o (rs O
b) o (rt O
k) o (rt O
pp) o (rt O
sp) o (rt O
upp) o (rt o:
l) o (n O
d) o (n O
pr) o (b %O
pr) o (d %O
k) o (lu %O
inf) o (rmati %O
k) o (d o:
lk) o (r o:
g) o (d u:
_) o (j O
o (ni 'o:
m) o (t 'u:
k) o (k 'u:
bl) o (d 'u:
k) o (rv O
osparat u:spA:Rat
o (ss O
b) o (st u:
m) o (t 'u:
f) o (tb u:
o (tt O
l) o (v 'o:
pr) o (v u:
n) o (vell %O
st) o (rm O
operat OpERat
b) o (x 'O
//endsort

.group p
p p

+ 18
- 5
dictsource/ta_list View File

@@ -186,7 +186,6 @@ tamil தமிழ் $text

// exceptions
பாபு $alt // initial ப as [b]
பகவதி $alt
பானம் $alt
பாணம் $alt
பாறம் $alt
@@ -247,6 +246,15 @@ tamil தமிழ் $text
பலத்தின் $alt
பைக்ல $alt
பாவ்லா $alt
பீச்சில் $alt
பீல் fi:l
பலத்தால் $alt
புக் $alt
பீர் $alt
போயிங் $alt
பலத்தாலான $alt
பெஞ்ச் $alt
பெஞ்சு $alt
(பி . ஏ) bije:


@@ -284,15 +292,15 @@ tamil தமிழ் $text
தீரமுள்ள $alt
தீரமற்ற $alt
தலாய் $alt
தேசிங்கு $alt
தேச $alt
தேசப் $alt
தானம் $alt
தீரமும் $alt
தீரத்தோடு $alt
தவத்தில் $alt
தவத்தின் $alt
தவத்தினால் $alt
திம் $alt
தேவதா $alt
தெனம் $alt


// initial ட
@@ -316,7 +324,6 @@ tamil தமிழ் $text
கில்லி $alt
காந்தி $alt
கிரி $alt
கோமதி $alt
கயா $alt
காயத்ரி $alt
கட $alt
@@ -341,6 +348,12 @@ tamil தமிழ் $text
காந்தம் $alt
கான $alt
கோத்திர $alt
கும்முன்னு $alt
கூகுல் $alt
கேட் $alt
கேட்டில் $alt
கின் $alt



// p as [f]

+ 201
- 33
dictsource/ta_rules View File

@@ -27,7 +27,7 @@
.L01 ஷ் ஸ் ட்

// ப is p when preceded by these
.L02 ட் ற் ல் ஷ் ஸ்
.L02 ட் ற் ஷ் ஸ்


// consonants
@@ -57,6 +57,7 @@

//sort
_) க (ங்கா gV
_) க (ங்காரு kV
_) க (ங்கை gV
_) க (டகட gV
_) க (டப்பாரை gV
@@ -76,6 +77,7 @@
_) க (ந்தர்வ gV
_) க (னத் gV
_) க (னம gV
_) க (ப்பெ gV
_) க (ப்பென்ர gV
_) க (மகம gV
_) க (ம்பீர gV
@@ -102,8 +104,12 @@
க (ாரன k
க (ாரர k
_) க (ிடுகிடு g
_) க (ின்னென்ற g
_) க (ிரிஜா g
_) க (ிரிதர g
_) க (ிருகஸ்தர g
_) க (ிருஹஸ்தர g
_) கி (ரேக்க g
_) க (ீதல k
_) க (ீத்த k
_) க (ுகன g
@@ -112,8 +118,10 @@
_) க (ுடியாத்த g
_) க (ுணங் g
_) க (ுணத் g
_) க (ுணநல g
_) க (ுணப்பட g
_) க (ுணம g
_) க (ுணவான g
_) க (ுணாதிசய g
_) க (ுண்டடி g
_) க (ுண்டன g
@@ -123,6 +131,7 @@
_) குண்டாந்த (டி gun.d.a:ntV
_) க (ுண்டாய g
_) க (ுண்டு g
_) க (ுண்டை g
_) க (ுதிக் g
_) க (ுதிச் g
_) க (ுதித் g
@@ -136,9 +145,11 @@
_) க (ும்பல g
_) க (ும்மிடிப்பூண் g
_) க (ும்மிருட்ட g
_) க (ும்மெ g
_) க (ுருக்கள g
_) க (ுருதேவ g
_) க (ுருநா g
_) க (ுருபூஜை g
_) க (ுருமார g
_) க (ுருரா g
_) க (ுருவா g
@@ -152,7 +163,12 @@
_) க (ூர்க்கா g
_) க (ெட்டி g
_) க (ெட்டிரு k
_) கெள gaU
_) கெள (ம்ப kel.V
_) க (ேட்டிலிருந்த g
_) க (ேட்டுக்கு g
_) க (ேலி g
_) கோக (ிலா go:k
_) க (ோகுல g
_) க (ோதாவரி g
_) க (ோதுமை g
@@ -170,6 +186,7 @@
_) க (ோபிநா g
_) க (ோபிய g
_) க (ோபுர g
_) க (ோமதி g
_) க (ோர_ g
_) க (ோர_மாட்ட k
_) க (ோர_முடிய k
@@ -187,17 +204,21 @@
_) க (ௌ g
_) கௌட (ில்ய kaUt.
_) க (ௌட்டில்ய k
_) க் (ரூப g
//endsort

//sort
அலை) க (டல kV
சமையல்) க (ட் kV
_கால) க (ட்ட kV
_கல்) க (ண்ட kV
_நற்) க (தி gV
வீண்) க (தை kV
_கல்) க (த்தா kV
கொல்) க (த்தா kV
மோ) க (ன HV
_வீண்) க (னவ kV
_வெல்) க (ம kV
தின) க (ர kV
மது) க (ர kV
திவா) க (ர kV
@@ -215,11 +236,15 @@
வீண்) க (ஷ்ட kV
ம) க (ா H
_தாலு) க (ா k
_நேர்) க (ாணல k
_வலை) க (ாப் k
தொல்) க (ாப்பி k
மூல) க (ாரண k
_சம) க (ால k
அந்திம) க (ால k
கோயில்) க (ாளை k
_கல்) க (ி k
வால்மீ) க (ி k
_ம) க (ிந்த H
மோ) க (ினி H
_ம) க (ிமை H
@@ -232,9 +257,12 @@
_) கி (ராதக k
_) கி (ராம g
_) கி (ரீட k
_) கி (ரீன்லாந்த g
ங்) க (ிரு g
கிரு (ஷ் kri
_) கி (ரைண்டர g
_) கி (ரௌண்ட g
இங்) கி (லீஷ் g
கி (லேச k
_) கி (ளாஸ g
_வட) க (ிழ k
@@ -250,6 +278,7 @@
க (ுல k
_அங்) க (ுல g
_) குல்க (ந்த gulkV
_ஓ) க (ே k
நீல) க (ேசி k
புலி) க (ேசி k
குண்டல) க (ேசி k
@@ -263,6 +292,7 @@
க (ொண்ட k
க (ொள் k
வீண்) க (ோப k
_ஷா) க் (_ k
துர்) க்க ggV#
மார்) க்க ggV#
மூர்) க்க ggV#
@@ -276,13 +306,15 @@
வைரா) க்க (ிய gg
_வி) க்க (ிரக gg
கு) க்கி (ராம gg
அணு) க்க (ுண்ட gg
ஜன) க்க (ும்பல gg
_எல) க்டிரானிக் (ஸ kt.ira:nik
அ) க (்டோபர k
வி) க்ட (ோரியா kt. // victoria
_எலெ) க்ட்ரிக (ல kt.rikV
வி) க (்ரம k
ஆ) க (்ரோஷ k
_கால) க (ட்ட kV
_வலை) க (ாப் k
கோபா) க்க (ினி gg
//endsort


@@ -315,16 +347,25 @@
//sort
_) ச (க்கரவர்த்தி tSV
சங்க (ர s.VNkV
_) ச (ட்னி tSV
ச (ண்பக s.V
ச (ண்மு s.V
_) ச (துர் tSV
_) ச (த்ரு tSV
ச (ந்திர tSV
_) ச (ப்பாத்தி tSV
_) சரசு (வதி sVrVs
அருணா) ச (ல tSV
ச (ாந்தி s.
_தே) ச (ாந்திர s
_) ச (ான்ஸ tS
_) ச (ாமுண்ட tS
_) ச (ாய்ஸ tS
சமா) ச (ார tS
_) ச (ார்ஜை tS
_) ச (ார்ஜ்_ tS
_) ச (ாளுக்கிய tS
_) சிக (ாகோ tSik
_) ச (ிட்டாக tS
_) ச (ிட்டாட்ட tS
_) ச (ிட்டி tS
@@ -333,7 +374,10 @@
_) ச (ிதம்பர tS
_) ச (ித்தப்ப tS
_) ச (ித்தப்பிரமை s
_) ச (ித்திர tS
வி) ச (ித்திர tS
_) ச (ித்திரவதை tS
_) ச (ித்ரவதை tS
_) ச (ித்ரா tS
சு) சித (்ரா tSit
_) சி (நே s
@@ -341,17 +385,23 @@
_) ச (ின் tS
சி (ரம s
_) சிரு (ஷ்டி sri
_) ச (ீன tS
_) ச (ீன_ tS
_) ச (ீனத்து tS
_) ச (ீனப் tS
_) ச (ீனா tS
_) ச (ீனாவ tS
_) ச (ீனிவா s
சீ (னிவாச sri:
_) ச (ீன்_ s
_ஈ) சு s
_) ச (ுடிதார tS
_) சு (லோக s
கே) சு (வ s
மே) சு (வ s
வி) சு (வ s
_சனீ) சு (வர s
இராவணே) சு (வர s
ராவணே) சு (வர s
_) சுவர்க்க svVrggV#
_) சு (வாச s
சு (வாதீன s
சு (வாமி s
@@ -360,9 +410,14 @@
_) ச (ெட்டியார tS
ச (ெண்பக s.
_) ச (ென்னை tS
_) ச (ெல்லக்குட்டி tS
_) ச (ெல்லத்துக்கு tS
_) ச (ெல்லத்தை tS
_) ச (ெல்லம tS
_) ச (ெஸ் tS
_) ச (ேரி tS
_) ச (ைனாவ tS
_) ச (ௌதரி tS
//endsort


@@ -385,28 +440,42 @@
ட்ட (B t.t.
ஷ்) ட t.V
ஷ்) ட (B t.
_) டாக்ட (ர d.a:kt.V
_) ட (ோக்கியோ t.
//sort
ிங்) ட (ன் t.V // -ington
_) ட (ாக்க t. // talkies
_) டிராக்ட (ர t.ira:gt.V
_) ட (ைம்_ t.
டெலிப (ோன t.elif
_) ட (ம்ப்ளர t.V
_) ட (யரில t.V
_) ட (யர் t.V
_) ட (வர t.V
_) ட (வல t.V
_) ட (வுன t.V
_) ட (ாக்க t. // talkies
_) டாக்ட (ர d.a:kt.V
_) டாக (்ஸி t.a:k
_) ட (ிஃபன t.
_) ட (ிக்க t.
_) டி (யூசன t.
_) டி (யூஷன t.
_) டிராக்ட (ர t.ira:gt.V
_) ட (ிராம t.
_) ட (வுன t.V
_) டென்டுல்க (ர t.ent.UlkV
_) டி (ராவல t.
_) டி (ராவெல t.
_) டிரேயின (ை t.re:jn
_) ட (ியூஷன t.
_) ட (ிவிய t.
_) ட (வல t.V
_) ட (வர t.V
_) டென்டுல்க (ர t.ent.UlkV
_) டெம்ப (ர t.empV
டெலிப (ோன t.elif
_) ட (ெலிவிஷன t.
_) ட (ேப t.
_) டாக (்ஸி t.a:k
_) ட (ேஸ்ட t.
_) ட (ைம்_ t.
_) ட (ோக்கியோ t.
_ல) ட்ட d.d.V#
_) ட (யர் t.V
_) ட (யரில t.V
_) ட் (ராவல t.
_) ட் (ராவெல t.
_பெ) ட் (ரோ t.
_ஹி) ட் (லர t.
//endsort


.group ண
@@ -438,6 +507,7 @@
_) த (க்க்ஷிண dV
_) த (க்ஷிணா dV
_) த (சகண்ட dV
_) த (சரத dV
_) த (சரதர dV
_) த (சரா dV
_) த (சை dV
@@ -450,6 +520,7 @@
_) த (டிJ_மாட dV
_) த (டிக்க dV
_) த (டித்த dV
_) த (டிமாட dV
_) த (டியன dV
_) த (டியர dV
_) த (ட்சன dV
@@ -465,6 +536,8 @@
_) த (ண்டிப்ப dV
_) த (ண்டிப்பா dV
_) த (ண்டியுங்கள dV
_) த (ண்டோரா dV
_) தத்த (ியா dVdd
_) த (னகோடி dV
_) த (னசேகரன dV
_) த (னன்ஜெயன dV
@@ -475,6 +548,7 @@
_) த (னுஷ dV
_) த (ன்மந்திரி dV
_) த (ன்ராஜ dV
_) தபதப dVbVdVbV#
_) த (மயந்தி dV
_) த (ம்பதி dV
_) த (ம்பிடி dV
@@ -489,6 +563,7 @@
_) த (ருமி dV
_) த (ர்க dV
_) த (ர்பார dV
_) த (ர்பூச dV
_) த (ர்பை dV
_) த (ர்ம dV
_) த (லித் dV
@@ -506,6 +581,7 @@
_) த (ானத் d
_) த (ானிய d
_) த (ானுவ d
_) த (ாமோதர d
_) த (ாம்_தூம d
_) த (ாயாதி d
_) த (ாரணி d
@@ -515,6 +591,7 @@
_) த (ாவணி d
_) த (ாவா d
_) த (ிகில d
_) த (ிகுதிகு d
_) த (ிக்கில d
_) த (ிக்கு d
_) த (ிக்கு_முக்க t
@@ -525,6 +602,7 @@
_) திக்பி (ரமை digb
_) த (ிக்விஜய d
_) த (ிசை d
_) திடசங்கல்ப did.VsVNgVlpV#
_) த (ிடப d
_) த (ிடம d
_) த (ிடீ d
@@ -540,16 +618,20 @@
_) த (ினம d
_) த (ினுச d
_) த (ினேஷ d
_) த (ிம்ம d
_) தி (யான dj
_) த (ிரவ d
_) த (ிரவிய d
_) தி (ராவிட d
_) த (ிரௌபதி d
_) த (ில்லி d
_) த (ில்லு_ d
_) த (ில்லு_முல்லு t
_) த (ிவச d
_) த (ிவாகர d
_) த (ிவான d
_) த (ிவ்ய d
_) த (ீட்சித d
_) த (ீட்சை d
_) த (ீப d
_) த (ீப்ப t
@@ -568,31 +650,37 @@
_) த (ுச்சாதனன d
_) த (ுட்ட d
_) த (ுபாய d
_) த (ுரதிருஷ்ட d
_) த (ுரதிர்ஷ்ட d
_) த (ுராசை d
_) த (ுரியோதனன d
_) த (ுரியோதனா d
_) த (ுருவங் d
_) த (ுருவத் d
_) த (ுரை d
_) த (ுரோண d
_) த (ுர் d
_) து (வந்த_ d
_) து (வார d
_) துவாப (ர dva:pV
_) துவ (ார dv
_) த (ுஷ் d
_) த (ூசி d
_) த (ூப d
_) த (ூம d
_) த (ூர d
_) த (ூரிகை t
_) த (ூர்_ t
_) த (ூர்ந் t
_) த (ூர்வ t
_) த (ூஷணை d
_) த (ூஷித்த d
_) த (ெய்வ d
_) த (ேக d
_) த (ேக்க t
_) த (ேசத்தார d
_) த (ேசத்தில d
_) த (ேசாந்திர d
_) த (ேச d
_) த (ேவகான d
_) த (ேவகி d
_) த (ேவக் d
_) த (ேவதை d
_) த (ேவன d
_) த (ேவராட்டி d
@@ -609,6 +697,7 @@
_) த (ேவேந் d
_) த (ைரிய d
_) த (ொனி d
_) த (ொபதொப d
_) த (ொபுக் d
_) த (ொம் d
_) த (ோசை d
@@ -622,6 +711,7 @@
_கீழ்) த (ட்ட tV
_மேல்) த (ட்ட tV
முட்டாள்) த (ன tV
_கௌ) த (மி tV
_கீ) த (ா t
_சீ) த (ா t
_ல) த (ா t
@@ -634,6 +724,7 @@
_வினி) த (ா t
_புஷ்பல) த (ா t
பிரேமல) த (ா t
_மும்) த (ாஜ t
_சும) த (ி t
_சாந்) த (ி t
_சுகந்) த (ி t
@@ -659,6 +750,8 @@ _பார்வ) த (ி t
யு) த்த ddV#
பு) த்த (ன ddV
பு) த்த (ர ddV
_விரு) த்தாச (ல dda:tSV
அ) த்த (ாசி dd
பு) த்த (ி dd
அயோ) த்த (ி dd
சில) த்த (ினங் dd
@@ -671,8 +764,12 @@ _பார்வ) த (ி t
உ) த்த (ியோக dd
பு) த்த (ிர tt
சமு) த்த (ிர dd
_உப) த்த (ிர dd
_சுப) த்த (ிர dd
_ரு) த்த (ிர dd
_ரௌ) த்த (ிர dd
_தேச) த்து (ரோகி td
_வி) த்து (வான d
_முக) த்து (வார dd
அ) த்த (ெய்வ dd
குல) த்த (ெய்வ dd
@@ -688,7 +785,6 @@ _பார்வ) த (ி t
ச) த (்ரு t
த) த (்ரூப t
பா) த (்ரூம t
_கௌ) த (மி tV
//endsort


@@ -713,8 +809,7 @@ _பார்வ) த (ி t
ப் (ப p
ப்) ப pV
ப்) ப (B p
L02) ப pV
L02) ப (B p
L02) ப pV#
குஷ்) ப (ு b

ம) ப pV
@@ -733,29 +828,37 @@ _பார்வ) த (ி t

//sort

_) ப (கவதி bV
_) ப (கவன bV
_) ப (கவான bV
_) ப (காசுர bV
_) ப (கிரங்க bV
_) ப (கிஷ்க bV
_) ப (கீர bV
_) ப (க்கெட் bV
_) ப (க்கென்ற bV
_) பக் (த bVk
_) ப (ங்கம bV
_) ப (ங்களா bV
_) ப (ங்கார bV
_) ப (சவகல்யாண bV
_) ப (ஜ bV
_) ப (ட்சண bV
_) ப (ட்சிக்க bV
_) ப (ட்சிப்ப bV
_) ப (ட்ஜெட் bV
_) ப (ட்டன bV
_) ப (ட்டன_ pV
_) ப (தில bV
_) பத்த (ிரகாளி bVdd
_) ப (த்திரப் bV
_) ப (த்திரமா bV
_) ப (ந்தங்கள bV
_) ப (ந்தத் bV
_) ப (ந்தப் bV
_) ப (ந்தம bV
_) ப (ந்துக்கள bV
_) பந்த (ுலு bVnt
_) ப (ந்துவ bV
_) ப (ந்தோபஸ்த bV
_) ப (னியன bV
@@ -794,6 +897,7 @@ _பார்வ) த (ி t
_) ப (லிபீட bV
_) ப (லிய bV
_) ப (லூன bV
_) பல்ட (ி bVlt.
_) ப (வாணி bV
_) ப (வானி bV
_) பவுண்ட (ன faUn.t.V
@@ -803,6 +907,7 @@ _பார்வ) த (ி t
_) ப (ாகத b
_) ப (ாகம b
_) ப (ாக்கிய b
_) பாக்த (ாத ba:gd
_) ப (ாங்க் b
_) ப (ாசு b
_) ப (ாசுர p
@@ -829,8 +934,7 @@ _பார்வ) த (ி t
_) ப (ாரம b
_) ப (ாரம்பரிய p
_) ப (ார்கவி b
_) ப (ார்மசி f
_) ப (ார்மஸி f
_) ப (ார்ம f
_) ப (ாலக b
_) ப (ாலக்காட p
_) ப (ாலச b
@@ -864,6 +968,7 @@ _முகத்தின்_) ப (ாவ b
_) ப (ாவனை b
_) ப (ாவிக்கிற b
_) ப (ாவித்த b
_) ப (ாவிப்பத b
_) ப (ாவிப்பதா b
_) ப (ாவிப்பதி b
_) ப (ாவிப்பது b
@@ -874,16 +979,21 @@ _முகத்தின்_) ப (ாவ b
_) ப (ிக்கு b
_) ப (ிக்ஷு b
_) ப (ிக்ஷூ b
_) ப (ிசினஸ b
_) ப (ின்லாந்த f
_) ப (ிம்ப b
_) ப (ிரகதீ b
_) ப (ிரகஸ்பதி b
_) ப (ிரம்ம b
_) ப (ிரம்மை b
_) பி (ரான்ஸ f
_) ப (ிரித்தானி b
_) ப (ிரியாணி b
_) ப (ில்டிங் b
_) ப (ிஸினஸ b
_) ப (ிஸ்கோத் b
_) ப (ீகார b
_) ப (ீச்சு b
_) ப (ீஜிங b
_) ப (ீடி b
_) ப (ீடிகை p
@@ -891,7 +1001,10 @@ _முகத்தின்_) ப (ாவ b
_) ப (ீம b
_) ப (ீரங்கி b
_) ப (ீராமணர b
_) ப (ீஹார b
_) ப (ுக்கென்ற b
_) ப (ுக்தி b
_) ப (ுக்ல b
_) ப (ுஜ b
_) ப (ுட்டி b
_) ப (ுதன b
@@ -911,15 +1024,22 @@ _முகத்தின்_) ப (ாவ b
_) ப (ூதகணங்க b
_) ப (ூதங் b
_) ப (ூதத் b
_) ப (ூதபாண்டிய b
_) ப (ூதம b
_) ப (ூதவுடம்ப b
_) ப (ூதாகார b
_) ப (ூதேவி b
_) பூப (தி bu:pV
_) ப (ூபாள b
_) ப (ூமாதேவி b
_) ப (ூமி b
_) ப (ூலோக b
_) ப (ெங்களூர b
_) ப (ெஞ்சா b
_) ப (ெஞ்சி b
_) ப (ெட்ரூம b
_) ப (ெர்னார்ட b
_) ப (ெர்முடா b
_) ப (ெர்லிங b
_) ப (ெல் b
_) ப (ெஸ்ட் b
@@ -942,10 +1062,13 @@ _முகத்தின்_) ப (ாவ b
_) ப (ோபால b
_) ப (ௌதிக b
_) ப (ௌத்த b
_) ப் (ராவ b
//endsort

//sort
இயல்) ப (+ bV#
சங்கல்) ப pV#
_விகல்) ப pV#
அநுதா) ப (+ bV#
பரிதா) ப (+ bV#
அனுதா) ப (+ bV#
நன்) ப (கல pV
@@ -954,6 +1077,7 @@ _முகத்தின்_) ப (ாவ b
வட) ப (குதி pV
தென்) ப (குதி pV
ப (க்கK pV
பரம) ப (க்த bV
க) ப (ட bV
கரம்) ப (ட pV
ப (டி pV
@@ -961,6 +1085,7 @@ _முகத்தின்_) ப (ாவ b
@) ப (ட்ச+ pV
ப (ண pV
_சிவ) ப (த pV
_கல்) ப (தரு pV
கஜ) பதி pVti
கண) பதி pVti
பசு) பத (ி pVt
@@ -977,12 +1102,15 @@ _முகத்தின்_) ப (ாவ b
அம்பிகா) பதி pVti
வளையா) பதி pVti
வேங்கட) பதி pVti
_புகு) ப (திகை pV
மின்) ப (திப்ப+ pV
காண்) பத (ில bVd
_முன்) ப (திவ pV
பதை) ப (தை pV
_க) ப (த் bV
வீர) ப (த்தினி pV
கல்) ப (னா pV
_கம்) ப (னி pV
நிரு) ப (மா pV
அனு) ப (மா pV
_க) ப (ம்_ bV
@@ -996,21 +1124,31 @@ _முகத்தின்_) ப (ாவ b
வட) ப (ழ pV
வீண்) ப (ழி pV
_தீ) ப (ா p
முதற்) ப (ாக b
உ) ப (ாசனை p
சமன்) ப (ாட p
முரன்) ப (ாட p
தண்ட) ப (ாணி p
ப (ாண்டி p
ப (ாதை p
ச) பாபதி ba:pVti
_டீ) ப (ாய் p
எதிர்) ப (ார p
_சிவ) ப (ாலன b
_கா) ப (ாலி b
தொடர்) ப (ால் b
முக) ப (ாவ b
அட) ப (ாவ p
வீண்) ப (ாவ p
அடி) ப (ாவி p
_நவ) ப (ாஷ p
வாதா) ப (ி p
கோ) ப (ி p
_பசி) ப (ிக் f
_முன்) ப (ின்_ p
_) ப (ிப்ரவரி f
ஆ) ப (ிரிக்க f
போஜனப்) பி (ரியர p
உடன்) ப (ிற p
ப (ிறகு+ p
தேய்) ப (ிறை p
@@ -1018,6 +1156,10 @@ _முகத்தின்_) ப (ாவ b
சிறு) ப (ிள்ளை p
ஆண்) ப (ிள்ளை p
பெண்) ப (ிள்ளை p
_திம்) ப (ு p
_அன்) ப (ுட b
_மார்) ப (ுட b
வில்லி) ப (ுத்தூர p
ம்) ப (ுரா b
இன்) ப (ுற b
_துன்) ப (ுற b
@@ -1030,9 +1172,16 @@ _முகத்தின்_) ப (ாவ b
இளம்) ப (ெண் p
ப (ெருமான p
ப (ெற p // ?? end-of-word + suffix ??
_கை) ப (ேசி p
_செல்) ப (ேசி p
அலை) ப (ேசி p
தொலை) ப (ேசி p
வீண்) ப (ேச்ச p
_வெல்) ப (ேர f
ப (ேரில்_ p
ப (ேர்_ p
வன்) ப (ொருள் p
மென்) ப (ொருள் p
வீண்) ப (ொழுத p
ப (ோக_ p
ப (ோகவில்லை_ p
@@ -1040,6 +1189,7 @@ _முகத்தின்_) ப (ாவ b
ப (ோகிற p
ப (ோகும்_ p
_வீண்) ப (ோக்க p
_மார்) ப (ோட b
_சத்தம்) ப (ோட p
ப (ோதிலும்+ p
ப (ோது+ p
@@ -1070,8 +1220,7 @@ _முகத்தின்_) ப (ாவ b
மன) ப்பி (ரமை bb
துர்) ப்ப (ோதனை bb
கம்) ப்யூட (ர pjU:t.V
மென்) ப (ொருள் p
வன்) ப (ொருள் p
அருள்) ப (ாலி b
//endsort

// If ப+ appearing in the middle of a word is followed by ட+
@@ -1106,6 +1255,7 @@ _முகத்தின்_) ப (ாவ b
_) பி (ரச்சனை p
_) பிரச (்னை prVtS
_) பி (ரஜ p
_) பிர (ண்ட்ஸ fre
பி (ரத p
_) பி (ரதம p
_) பி (ரதர்_ b
@@ -1140,7 +1290,9 @@ _முகத்தின்_) ப (ாவ b
_) பி (ரஸ்தா p
_) பி (ரஹலாத p
_) பி (ராகார p
_) பி (ராகிருத p
_) பி (ராக்கள b
_) பி (ராட்வே b
_) பி (ராண_ p
_) பி (ராணன p
_) பி (ராணி p
@@ -1180,6 +1332,8 @@ _முகத்தின்_) ப (ாவ b
_) பி (ரியாவை p
_) பிரு (கன்நளை bri
_) பிரு (ந்தா bri
_) பி (ரெஞ்சு f
_) பி (ரெண்ட்ஸ f
_) பி (ரே p
_) பி (ரோகிதர p
_) பி (ளாட்பார p
@@ -1192,7 +1346,7 @@ _முகத்தின்_) ப (ாவ b

// musical notes
சா) ப (ா p
ரி) ப (K pV
// ரி) ப (K pV
ரீ) ப (K pV
ரி) ப (ா p
ரீ) ப (ா p
@@ -1224,7 +1378,7 @@ _முகத்தின்_) ப (ாவ b
_க) ப (ால b
_கா) ப (ந்து bV
சு) ப்ப bbV#
மகா) ப (ாரத b

_) ப (ோனை f
_) ப (ோட்டோ f
@@ -1315,15 +1469,20 @@ _முகத்தின்_) ப (ாவ b
.group இ
//sort
இ i
_) இ (யேச
_) இ (ரகசிய // silent
_) இ (ரசாயன
_) இ (ரசிக்க
_) இ (ரத்த
_) இ (ராக
_) இ (ராஜ
_) இ (ராணி
_) இ (ராணுவ
_) இ (ராத்த
_) இ (ராம
_) இ (ராயபுர
_) இ (ராவண
_) இ (ராஷ்டிர
_) இ (லகுவாக
_) இ (லட்சண
_) இ (லட்சிய // silent
@@ -1355,10 +1514,14 @@ _முகத்தின்_) ப (ாவ b
ஐ aI

ஒ o
ஒள (வை aU // bad scanning
ஒள (ஷத aU
ஒள (டத aU

ஓ o:

ஔ aU
ஔி ol.i // for bad scanning of books


// combining vowels
@@ -1375,6 +1538,10 @@ _முகத்தின்_) ப (ாவ b
ூ u:

ெ e
_ம) ெள (ன aU // bad scanning
_ம) ெள (ஸ aU // bad scanning
_ச) ெள aU
_ப) ெள aU

ே e:

@@ -1385,6 +1552,7 @@ _முகத்தின்_) ப (ாவ b
ோ o:

ௌ aU
_த) ௌி el.i // for bad scanning


் // virama

+ 2
- 2
dictsource/zh_list View File

@@ -314,7 +314,7 @@ $textmode
罪 zui4
衰 shuai1
暄 xuan1
個 ge4
個 ge5
頻 pin2
嗎 ma5
也 ye3
@@ -440,7 +440,7 @@ $textmode
注 zhu4
问 wen4
质 zhi4
个 ge4
个 ge5
猬 wei5
便 bian4
烁 shuo4

+ 1
- 1
docs/add_language.html View File

@@ -14,7 +14,7 @@ awareness of its features, patience and attention to detail. Wikipedia is a goo
<a href="http://en.wikipedia.org/wiki/Vowel">http://en.wikipedia.org/wiki/Vowel</a>
<P>
In many cases it should be fairly easy to add a rough implementation of a new language, hopefully
enough to be intelligible.<br>
enough to be intelligible.<p>
After that it's a gradual process of improvement to:
<ul>
<li>Make the spelling-to-phoneme translation rules more accurate, including the position of stressed

+ 15
- 7
docs/commands.html View File

@@ -89,8 +89,8 @@ If neither -f nor --stdin is given, then the text input is taken from "text word
<p>
<dt>
<strong>-s &lt;integer&gt;</strong><br>
<dd>Sets the speed in words-per-minute (approximate values for the default English voice, others may differ slightly). The default value is 170. I generally use a faster speed
of 190. Range 80 to 390. Larger value are rounded down to the maximum.
<dd>Sets the speed in words-per-minute (approximate values for the default English voice, others may differ slightly). The default value is 175. I generally use a faster speed
of 200. Range 80 to 450. Larger value are rounded down to the maximum.
<p>
<dt>
<strong>-b &lt;integer&gt;</strong><br>
@@ -128,7 +128,7 @@ others.
<p>
<dt>
<strong>-q</strong><br><dd>
Quiet. No sound is generated. This may be useful with the -x option.
Quiet. No sound is generated. This may be useful with options such as -x and --pho.
<p>
<dt>
<strong>-v &lt;voice filename&gt;[+&lt;variant&gt;]</strong><br>
@@ -152,7 +152,7 @@ Some languages may need additional dictionary data, see <a href="languages.html"
<dt>
<strong>-x</strong><br>
<dd>The phoneme mnemonics, into which the input text is translated, are
shown on stdout.
written to stdout.
<p>
<dt>
<strong>-X</strong><br>
@@ -174,19 +174,27 @@ Compile the pronunciation rule and dictionary lookup data from their source file
<dd>
The same as <strong>--compile</strong>, but source line numbers from the *_rules file are included. These are included in the rules trace when the <strong>-X</strong> option is used.
<p>
<dt><strong>--ipa</strong><br>
<dd>
Writes phonemes to stdout, using the International Phonetic Alphabet (IPA).
<p>
<dt><strong>--path [="&lt;directory path&gt;"]</strong><br>
<dd>
Specifies the directory which contains the espeak-data directory.
<p>
<dt><strong>--pho</strong><br>
<dd>
When used with an mbrola voice (eg. -v mb-en1), it writes mbrola phoneme data (.pho file format) to stdout. This includes the mbrola phoneme names with duration and pitch information, in a form which is suitable as input to this mbrola voice. The --phonout option can be used to write this data to a file.
<p>
<dt><strong>--phonout [="&lt;filename&gt;"]</strong><br>
<dd>
If specified, mbrola phoneme data, and also the output from -x and -X options is written to this file, rather than stdout.
If specified, the output from -x, -X, --ipa, and --pho options is written to this file, rather than to stdout.
<p>
<dt><strong>--punct [="&lt;characters&gt;"]</strong><br>
<dd>
Speaks the names of punctuation characters when they are encountered in the text. If &lt;characters&gt; are given, then only those listed punctuation characters are spoken, eg. <code> --punct=".,;?"</code>
<p>
<dt><strong>--split [="&lt;minutes&gt;"]</strong><br>
<dt><strong>--split [=&lt;minutes&gt;]</strong><br>
<dd>
Used with <strong>-w</strong>, it starts a new WAV file every <code>&lt;minutes&gt;</code> minutes, at the next sentence boundary.
<p>
@@ -195,7 +203,7 @@ Used with <strong>-w</strong>, it starts a new WAV file every <code>&lt;minutes&
<dd>Lists the available voices.<br>
If =&lt;language code&gt; is present then only those voices which are suitable for that language are listed.<br>
<code>--voices=mbrola</code> lists the voices which use mbrola diphone voices. These are not included in the default <code>--voices</code> list<br>
<code>--voices=variant</code> lists the voice variants (voice modifiers).<br>
<code>--voices=variant</code> lists the available voice variants (voice modifiers).<br>

</dl>
<p>&nbsp;<hr>

+ 19
- 7
docs/dictionary.html View File

@@ -251,14 +251,18 @@ Note, that matching characters in the &lt;pre&gt; part do not affect the syllabl
<td><strong>N</strong></td>
<td>Only use this rule if the word is not a retranslation after removing a suffix.</td>
</tr>
<tr>
<td><strong>T</strong></td>
<td>Only use this rule if the word in found in the *_list file with the <b>$alt</b> attribute.</td>
</tr>
<tr>
<td><strong>#</strong></td>
<td>(English specific) change the next "e" into a special character "E"</td>
</tr>
<tr>
<td><strong>$w_alt<br>$w_alt2<br>$w_alt3</strong></td>
<td>Only use this rule if the word is found in the *_list file with the <b>$alt</b>, <b>$alt2</b> or <b>$alt3</b> attribute respectively.</td>
</tr>
<tr>
<td><strong>$p_alt<br>$p_alt2<br>$p_alt3</strong></td>
<td>Only use this rule if the part-word, up to and including the pre and match parts of this rule, is found in the *_list file with the <b>$alt</b>, <b>$alt2</b> or <b>$alt3</b> attribute respectively.</td>
</tr>
</tbody>
</table>
</ul>
@@ -275,7 +279,7 @@ eg.
</pre>
S and P must be at the end of the &lt;post&gt; string.
<p>
S&lt;number&gt; may be followed by additonal letters (eg. S2ei ). Some of these are probably specific to English, but similar functions could be used for other languages.
S&lt;number&gt; may be followed by additonal letters (eg. S2ei ). Some of these are probably specific to English, but similar functions could be made for other languages.

<ul><table>
<tbody>
@@ -488,9 +492,13 @@ A word (or group of words) may be given one or more flags, either instead of, or
<td>$hasdot</td>
<td>Use this pronunciation if the word is followed by a dot. (This attribute also implies $dot).</td>
</tr>
<tr>
<td>$sentence</td>
<td>The rule only applies if the clause includes end-of-sentence (i.e. it is not terminated by a comma). For example, "$atend $sentence" means that the rule only applies at the end of a sentence.</td>
</tr>
<tr>
<td>$abbrev</td>
<td>This has two meanings.<br> 1. If there is no phoneme string: Speak the word as individual letters, even if it contains a vowel (eg. "abc" should be spoken as "a" "b" "c").<br>2. If there is a phoneme string: This word is capitalized because it is an abbreviation and capitalization does indicate emphasis (if the "emphasize all-caps" is on).</td>
<td>This has two meanings.<br> 1. If there is no phoneme string: Speak the word as individual letters, even if it contains a vowel (eg. "abc" should be spoken as "a" "b" "c").<br>2. If there is a phoneme string: This word is capitalized because it is an abbreviation and capitalization does not indicate emphasis (if the "emphasize all-caps" is on).</td>
</tr>
<tr>
<td>&nbsp;</td>
@@ -499,9 +507,13 @@ A word (or group of words) may be given one or more flags, either instead of, or
<tr>
<td>$accent</td>
<td>Used for the pronunciation of a single alphabetic character. The character name is spoken as the base-letter name plus the accent (diacritic) name. eg. It can be used to specify that "&#xe2;" is spoken as "a" "circumflex".</td>
</tr>
<tr>
<td>$combine</td>
<td>This word is treated as though it is combined with the following word with a hyphen. This may be subject to fuither conditions for certain languages.</td>
</tr>
<tr>
<td>$alt &nbsp; $alt2</td>
<td>$alt &nbsp; $alt2 &nbsp; $alt3</td>
<td>These are language specific. Their use should be described in the language's **_list file</td>
</tr>
<tr>

+ 3
- 1
docs/docindex.html View File

@@ -41,9 +41,11 @@ eSpeak can be used as a front-end for Mbrola diphone voices.
<h3><A href="add_language.html">Adding a Language</A></h3>
How to add or improve a language.
<h3><A href="phonemes.html">Phonemes</A></h3>
The list of phoneme mnemonics, for use in the Pronunciation Dictionary.
The list of phoneme mnemonics for English, for use in the Pronunciation Dictionary.
<h3><A href="phontab.html">Phoneme Tables</A></h3>
The tables of the phonemes used by each language, with their properties and sound production.
<h3><A href="intonation.html">Intonation</A></h3>
Different intonation "tunes" may be defined for different languages for clauses which end in full-stop, comma, question-mark, and exclamation-mark.
<h3><A href="speak_lib.h">eSpeak Libary API</A></h3>
API definition and header file for a shared library version of eSpeak.
<h3><A href="ssml.html">Markup tags</A></h3>

+ 101
- 0
docs/intonation.html View File

@@ -0,0 +1,101 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>

<head>
<title>eSpeak: Phoneme tables</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
</head>
<body>
<A href="docindex.html">Back</A>
<hr>
<h2>INTONATION</h2>
<hr>
In eSpeak's standard intonation model, a "tune" is applied to each clause depending on its punctuation. Other intonation models may be used for some languages, such as tone languages.
<p>
Named tunes are defined in the text file: <b><code>phsource/intonation</code></b>. This file must be compiled for use by eSpeak by using the espeakedit program, using the menu option: <b><code>Compile -> Compile intonation data</code></b>.
<h3>Clauses</h3>
The tunes which are used for a language can be specified by using a <b><code>tunes</code></b> statement in a voice file in <b><code>espeak-data/voices</code></b>. eg:
<p>
<code>tunes &nbsp; s1 &nbsp;c1 &nbsp;q1 &nbsp;e1</code>
<p>
It's parameters are four tune names which are used for clauses which end in:
<ol>
<li>Full-stop.
<li>Comma.
<li>Question mark.
<li>Exclamation mark.
</ol>
<p>
A clause consists of the following parts:
<ul>
<li>Pre-head.<br>These are any unstressed syllables before the first stressed syllable.
<p>
<li>Head.<br>This is the part from the first stressed syllable up to the last syllable before the nucleus.
<p>
<li>Nucleus.<br>This is stressed syllable which is the focus of the clause. eSpeak chooses the last stressed syllable of the clause.
<p>
<li>Tail.<br>These are the syllables after the nucleus.
</ul>
<p>
<h3>Tune definitions</h3>
Here is an example tune definition from the file <b><code>phsource/intonation</code></b>.
<p>
<pre>
tune s1
prehead 46 57
headenv fall 16
head 4 80 55 -8 -5
headextend 0 63 38 13 0
nucleus fall 70 18 24 12
nucleus0 fall 64 8
endtune
</pre>
<p>
It contains:
<dl>
<dt><strong>tune</strong> &lt;tune name&gt;
<dd>
Starts the definition of a tune. The <b><code>tune name</code></b> can be used in a <b><code>tunes</code></b> statements in voice files.
<p>
<dt><strong>endtune</strong> &lt;tune name&gt;
<dd>
Ends the definition of a tune.
<p>
<dt><strong>prehead</strong> &lt;start pitch&gt; &lt;end pitch&gt;
<dd>
Gives the pitch path for any series of unstressed syllables before the first stressed syllable.
<p>
<dt><strong>headenv</strong> &lt;envelope&gt; &lt;height&gt;
<dd>
Gives the pitch envelope which is used for stressed syllables in the head (before the nucleus), including <b><code>onset</code></b> and <b><code>headlast</code></b> syllables if these are specified. <b><code>height</code></b> gives a pitch range for the envelope.
<p>
<dt><strong>head</strong> &lt;steps&gt; &lt;start pitch&gt; &lt;end pitch&gt; &lt;unstressed start&gt; &lt;unstressed end&gt;
<dd>
<b><code>start pitch</code></b> and <b><code>end pitch</code></b> give a pitch path for the stressed syllables of the head. <b><code>steps</code></b> is the maximum number of stressed syllables for which this applies. If there are additional stressed syllables, then the <b><code>headextend</code></b> statement is used for them.<p>
<b><code>unstressed start</code></b> and <b><code>unstressed end</code></b> give a pitch path for unstressed syllables between two stressed syllables. Their values are relative to the pitch of the previous stressed syllable. Values are usually negative, meaning that the unstressed syllables have lower pitch than the previous stressed syllable.

<p>
<dt><strong>headextend</strong> &lt;percentage list&gt;
<dd>
If the head contains more stressed syllables than is specified by <b><code>steps</code></b>, then <b><code>percentage list</code></b> is used. It contains up to 8 numbers which are used repeatedly for the additional stressed syllables. A value of 0 corresponds to the lower the <b><code>start pitch</code></b> and <b><code>end pitch</code></b> values of the <b><code>head</code></b> statement. 100 corresponds to the higher value. Negative values and values greater than 100 are allowed.
<p>
<dt><strong>nucleus</strong> &lt;envelope&gt; &lt;top pitch&gt; &lt;bottom pitch&gt; &lt;tail start&gt; &lt;tail end&gt;
<dd>
This gives the pitch envelope and pitch range of the last stressed syllable of the clause. <b><code>tail start</code></b> and <b><code>tail end</code></b> give a pitch path for the unstressed syllables which are after the last stressed syllable.
<p>
<dt><strong>nucleus0</strong> &lt;envelope&gt; &lt;top pitch&gt; &lt;bottom pitch&gt;
<dd>
This is used instead of <b><code>nucleus</code></b> if there are no unstressed syllables after the last stressed syllable. In this case, the pitch changes of the nucleus and the tail and both included in the nucleus.
</dl>
<p>
The following attributes may also be included:
<dl>
<dt><strong>onset</strong> &lt;pitch&gt; &lt;unstressed start&gt; &lt;unstressed end&gt;
<dd>
This specifies the pitch for the first stressed syllable of the head. If the <b><code>onset</code></b> statement is present, then the <b><code>head</code></b> statement used for the stressed syllables after the first.
<p>
<dt><strong>headlast</strong> &lt;pitch&gt; &lt;unstressed start&gt; &lt;unstressed end&gt;
<dd>
This specifies the pitch for the last stressed syllable of the head (i.e. the stressed syllable before the nucleus).
<p>
</dl>

+ 12
- 17
docs/mbrola.html View File

@@ -49,32 +49,27 @@ directory) into
</ol>
<h3>Linux Installation</h3>

I don't think there's a Linux shared library version of Mbrola (equivalent to mbrola.dll), so eSpeak has to pipe phoneme data to the command-line Mbrola.
From eSpeak version 1.44 onwards, eSpeak calls the mbrola program directly, rather than passing phoneme data to it using a pipe.
<ol>
<li>To install the Linux Mbrola binary, download:
<a href="http://www.tcts.fpms.ac.be/synthesis/mbrola/bin/pclinux/mbr301h.zip"> http://www.tcts.fpms.ac.be/synthesis/mbrola/bin/pclinux/mbr301h.zip</a>.
Unpack the archive, and copy and rename the file: <code>mbrola-linux-i386</code> to
Unpack the archive, and copy and rename the file from: <code>mbrola-linux-i386</code> to
<code>mbrola</code> somewhere in your executable path (eg. <code>/usr/bin/mbrola</code> ).
<p>
<li>Get the en1 voice from:
<a href="http://www.tcts.fpms.ac.be/synthesis/mbrola/mbrcopybin.html"> http://www.tcts.fpms.ac.be/synthesis/mbrola/mbrcopybin.html</a>.
Unpack the archive, and copy the "<b>en1</b>" data file (not the whole "en1"
directory) somewhere convenient (eg. <code>/usr/share/mbrola/en1</code> ).
directory) to <code>/usr/share/mbrola/en1</code>.<p>eSpeak will look for mbrola voices firstly in <code>espeak-data/mbrola</code> and then in <code>/usr/share/mbrola</code>
<p>
<li>If you use the eSpeak voice "<b>mb-en1</b>" then eSpeak will generate
Mbrola phoneme data on its stdout. You can pipe this into Mbrola.
<p>
<code>espeak -v mb-en1 -f textfile | mbrola -e /usr/share/mbrola/en1 -
test.wav</code>
<p>
will put the Mbrola speech output into a WAV file. Or you can pipe the output from Mbrola through aplay:
<p>
<code>espeak -v mb-en1 -f textfile | mbrola -e /usr/share/mbrola/en1 - - | aplay -r16000 -fS16</code>
<p>
The -e option prevents Mbrola from stopping if it finds a combination
of phonemes which it doesn't recognise.
<p>
Some mbrola voices (de5, de6) use a sample rate of 22050 Hz. These need -r22050 rather than -r16000.
<li>If you use the eSpeak voice such as "<b>mb-en1</b>" then eSpeak will use the mbrola "en1" voice, eg:<br>
<code>espeak -v mb-en1 "Hello world"
</code>
<p><p>
To generate mbrola phoneme data (.pho file) you can use:<br>
<code>espeak -v mb-en1 -q --pho "Hello world"</code>
<br>or<br>
<code>espeak -v mb-en1 -q --pho --phonout=out.pho "Hello world"</code>

</ol>
<h3>Mbrola Voice Files</h3>


+ 9
- 3
docs/phontab.html View File

@@ -3,6 +3,7 @@

<head>
<title>eSpeak: Phoneme tables</title>
<meta name="GENERATOR" content="Quanta Plus">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
</head>
<body>
@@ -102,6 +103,7 @@ Within the phoneme definition the following lines may occur: ( (V) indicates on
<tr><TD><b>rhotic</b></TD><td>(C) An "r" type consonant.</td></tr>
<tr><TD><b>unstressed</b></TD><td>(V) This vowel is always unstressed, unless explicitly marked otherwise.</td></tr>
<tr><TD><b>nolink</b></TD><td>Prevent any linking from the previous phoneme.</td></tr>
<tr><TD><b>nopause</b></TD><td>Used in a <code>liquid</code> or <code>nasal</code> phoneme to prevent eSpeak inserting a short pause if a word starts with this phoneme and the previous word ends with a vowel.</td></tr>
<tr><TD><b>trill</b></TD><td>(C) Apply trill to the voicing.</td></tr>
</table>
</dl>
@@ -151,14 +153,18 @@ During the first phase of phoneme interpretation, an instruction which causes a
<dt><strong>length</strong> &lt;length&gt;
<dd>The relative length of the phoneme, typically about 140 for a short vowel and from 200 to 300 for a long vowel or diphong. A length() instruction is needed for vowels. It is optional for consonants.
<p>
<dt><strong>ipa</strong> &lt;ipa string&gt;
<dd>In many cases, eSpeak makes IPA (International Phonetic Alpbabet) phoneme names automatically from eSpeak phoneme names. If this is not correct, then the phoneme definition can include an <b>ipa</b> instruction to specify the correct IPA name. IPA strings may include non-ascii characters. They may also include characters specified by their character codes in the form U+ followed by 4 hexadecimal digits. For example a string: aU+0303 indicates 'a' with a 'combining tilde'.
<p>
<dt><strong>WAV</strong>(&lt;wav file&gt;, &lt;amplitude&gt;)
<dd>&nbsp;&lt;wav file&gt; is a path to a WAV file (22 kHz, 16 bits, mono) within <code>phsource/</code> which will be played to produce the sound. This method is used for unvoiced consonants. &lt;wavefile&gt; does not include a .WAV filename extension, although the file to which it refers may or may not have one.<br>
&lt;amplitude&gt; is optional. It is a percentage change to the amplitude of the WAV file. So, <code>WAV(ufric/s, 50)</code> means: play file 'ufric/s.wav' at 50% amplitude.
<p>
<dt><strong>FMT</strong>(&lt;vowel file&gt;)
<dd>&lt;vowel file&gt; is a path to a file (within <code>phsource/</code>) which defines how to generate the sound (a vowel or voiced consonant) from a sequence of formant values. Vowel files are made using the espeakedit program.
<dt><strong>FMT</strong>(&lt;vowel file&gt;, &lt;amplitude&gt;)
<dd>&lt;vowel file&gt; is a path to a file (within <code>phsource/</code>) which defines how to generate the sound (a vowel or voiced consonant) from a sequence of formant values. Vowel files are made using the espeakedit program.<br>
&lt;amplitude&gt; is optional. It is a percentage change to the amplitude of the sound which is synthesized from the FMT() instruction.
<p>
<dt><strong>FMT</strong>(&lt;vowel file&gt;) <strong>addWav</strong>(&lt;wav file&gt;, &lt;amplitude&gt;)
<dt><strong>FMT</strong>(&lt;vowel file&gt;, &lt;amplitude&gt;) <strong>addWav</strong>(&lt;wav file&gt;, &lt;amplitude&gt;)
<dd>For voiced consonants, a FMT() instruction may be followed by an addWav() instruction. addWav() has the same format as a WAV() instruction, but the WAV file is mixed with the sound which is synthesized from the FMT() instruction.
<p>
<dt><strong>VowelStart</strong>(&lt;vowel file&gt;, &lt;length adjust&gt;)

+ 27
- 13
docs/speak_lib.h View File

@@ -1,7 +1,7 @@
#ifndef SPEAK_LIB_H
#define SPEAK_LIB_H
/***************************************************************************
* Copyright (C) 2005 to 2007 by Jonathan Duddington *
* Copyright (C) 2005 to 2010 by Jonathan Duddington *
* email: [email protected] *
* *
* This program is free software; you can redistribute it and/or modify *
@@ -26,8 +26,9 @@
/*************************************************************/

#include <stdio.h>
#include <stddef.h>

#define ESPEAK_API_REVISION 3
#define ESPEAK_API_REVISION 5
/*
Revision 2
Added parameter "options" to eSpeakInitialize()
@@ -35,6 +36,11 @@ Revision 2
Revision 3
Added espeakWORDGAP to espeak_PARAMETER

Revision 4
Added flags parameter to espeak_CompileDictionary()

Revision 5
Added espeakCHARS_16BIT
*/
/********************/
/* Initialization */
@@ -44,12 +50,13 @@ Revision 3
typedef enum {
espeakEVENT_LIST_TERMINATED = 0, // Retrieval mode: terminates the event list.
espeakEVENT_WORD = 1, // Start of word
espeakEVENT_SENTENCE, // Start of sentence
espeakEVENT_MARK, // Mark
espeakEVENT_PLAY, // Audio element
espeakEVENT_END, // End of sentence
espeakEVENT_MSG_TERMINATED, // End of message
espeakEVENT_PHONEME // Phoneme, if enabled in espeak_Initialize()
espeakEVENT_SENTENCE = 2, // Start of sentence
espeakEVENT_MARK = 3, // Mark
espeakEVENT_PLAY = 4, // Audio element
espeakEVENT_END = 5, // End of sentence or clause
espeakEVENT_MSG_TERMINATED = 6, // End of message
espeakEVENT_PHONEME = 7, // Phoneme, if enabled in espeak_Initialize()
espeakEVENT_SAMPLERATE = 8 // internal use, set sample rate
} espeak_EVENT_TYPE;


@@ -224,6 +231,7 @@ int UriCallback(int type, const char *uri, const char *base);
#define espeakCHARS_UTF8 1
#define espeakCHARS_8BIT 2
#define espeakCHARS_WCHAR 3
#define espeakCHARS_16BIT 4

#define espeakSSML 0x10
#define espeakPHONEMES 0x100
@@ -315,7 +323,8 @@ extern "C"
#endif
espeak_ERROR espeak_Key(const char *key_name);
/* Speak the name of a keyboard key.
Currently this just speaks the "key_name" as given
If key_name is a single character, it speaks the name of the character.
Otherwise, it speaks key_name as a text string.

Return: EE_OK: operation achieved
EE_BUFFER_FULL: the command can not be buffered;
@@ -377,9 +386,10 @@ espeak_ERROR espeak_SetParameter(espeak_PARAMETER parameter, int value, int rela
relative=1 Sets a relative value of the parameter.

parameter:
espeakRATE: speaking speed in word per minute.
espeakRATE: speaking speed in word per minute. Values 80 to 450.

espeakVOLUME: volume in range 0-100 0=silence
espeakVOLUME: volume in range 0-200 or more.
0=silence, 100=normal full volume, greater values may produce amplitude compression or distortion

espeakPITCH: base pitch, range 0-100. 50=normal

@@ -435,6 +445,7 @@ void espeak_SetPhonemeTrace(int value, FILE *stream);
value=0 No phoneme output (default)
value=1 Output the translated phoneme symbols for the text
value=2 as (1), but also output a trace of how the translation was done (matching rules and list entries)
value=3 as (1), but produces IPA rather than ascii phoneme names

stream output stream for the phoneme symbols (and trace). If stream=NULL then it uses stdout.
*/
@@ -442,13 +453,16 @@ void espeak_SetPhonemeTrace(int value, FILE *stream);
#ifdef __cplusplus
extern "C"
#endif
void espeak_CompileDictionary(const char *path, FILE *log);
void espeak_CompileDictionary(const char *path, FILE *log, int flags);
/* Compile pronunciation dictionary for a language which corresponds to the currently
selected voice. The required voice should be selected before calling this function.

path: The directory which contains the language's '_rules' and '_list' files.
'path' should end with a path separator character ('/').
log: Stream for error reports and statistics information. If log=NULL then stderr will be used.

flags: Bit 0: include source line information for debug purposes (This is displayed with the
-X command line option).
*/
/***********************/
/* Voice Selection */
@@ -497,7 +511,7 @@ const espeak_VOICE **espeak_ListVoices(espeak_VOICE *voice_spec);
The list is terminated by a NULL pointer

If voice_spec is NULL then all voices are listed.
If voice spec is give, then only the voices which are compatible with the voice_spec
If voice spec is given, then only the voices which are compatible with the voice_spec
are listed, and they are listed in preference order.
*/


+ 5
- 0
docs/ssml.html View File

@@ -74,6 +74,7 @@ eSpeak can speak HTML text directly, or text containing both SSML and HTML marku
Any unrecognised tags are ignored.<p>
The following tags case a sentence break.<br>
<b>&lt;br&gt; &nbsp;
&lt;dd&gt; &nbsp;
&lt;li&gt; &nbsp;
&lt;img&gt; &nbsp;
&lt;td&gt; &nbsp;
@@ -85,5 +86,9 @@ The following tags case a paragraph break.<br>
&lt;h4&gt; &nbsp;
&lt;hr&gt; &nbsp;
</b><p>
Text between the following tags is ignored.<br>
<b>&lt;script&gt; &nbsp; ... &nbsp; &lt;/script&gt; &nbsp;<br>
&lt;style&gt; &nbsp; ... &nbsp; &lt;/style&gt; &nbsp;<br>
</b><p>
</body>
</html>

+ 53
- 28
phsource/compile_report View File

@@ -1,4 +1,4 @@
65 phoneme tables
66 phoneme tables
new total
base 107 107
consonants 9 115
@@ -12,7 +12,7 @@ consonants 9 115
en-wi 30 148
af 39 136
cy 29 132
de 38 139
de 37 138
eo 13 114
jbo 2 114
nci 3 123
@@ -23,13 +23,13 @@ consonants 9 115
ta 21 153
hu 24 121
lv 29 125
nl 24 125
pl 20 118
sk 28 133
cs 6 133
hr 25 138
mk 3 139
sr 14 138
nl 25 126
pl 22 120
sk 28 135
cs 6 135
hr 25 140
mk 3 141
sr 14 140
it 18 126
la 21 124
es 10 123
@@ -38,7 +38,7 @@ consonants 9 115
pt 29 138
pt-pt 20 138
ro 36 146
el 8 123
el 9 123
grc 12 127
sv 22 127
no 28 132
@@ -53,18 +53,19 @@ consonants 9 115
id 15 125
sq 33 126
hy 23 117
da 24 120
da 27 120
rw 15 130
ml 13 151
ne 18 157
pa 14 151
prs 8 111
sl 7 133
sl 10 135
gd 6 107
bg 10 119
nso 8 107
bg 10 121
nso 12 111
ht 11 140
az 10 127
ak 8 109

Data file Used by
b/b [b] base
@@ -342,10 +343,11 @@ l/l_ [l/] base
[l/] fr
l/l_@ [l/3] base
[l/] fr
l/l@ [h&w] base
l/l@ [hæy] base
[l#] base
[l] fr
[l/2] fr
[K] nso
l/L1_aL [l/] base
[l/] de
l/L1_eL [l/] base
@@ -368,27 +370,30 @@ l/L2_oL [l/2] base
l/L2_uL [l/2] base
l/l_3 [l/] de
l/l_4 [ll] sq
l/la [h&w] base
l/la [hæy] base
[l#] base
[l] fr
[l/2] fr
[K] nso
l/l_a [l/3] base
[l/] fr
l/le [h&w] base
l/le [hæy] base
[l#] base
[l] fr
[l/2] fr
[K] nso
l/l_e [l/3] base
[l/] fr
l/L_eL_af [&] af
[&:] af
l/l_front [L] sq
l/l_front_ [l/4] sq
l/li [h&w] base
l/li [hæy] base
[l#] base
[l] fr
[l/2] fr
[l] zh
[K] nso
l/l_i [l/3] base
[l/] fr
[i] sq
@@ -396,17 +401,19 @@ ll/ll [L] bg
ll/_ll [L] bg
l/l_long [l] base
[l] fr
l/lo [h&w] base
l/lo [hæy] base
[l#] base
[l] fr
[l/2] fr
[K] nso
l/l_o [l/3] base
[l/] fr
l^/l_rfx [l.] base
l/lu [h&w] base
l/lu [hæy] base
[l#] base
[l] fr
[l/2] fr
[K] nso
l/l_u [l/3] base
[l/] fr
l/l_vi [l] vi
@@ -422,6 +429,7 @@ l/xl [l] base
[l] fr
[l] hu
[ll] sq
[K] nso
m/_m [m] base
m/m_ [m] base
m/m@ [m] base
@@ -504,7 +512,6 @@ n/nu [n] base
[n#] is
[n] zh
r/@_ [V#] de
[V3#] de
r2/r2@ [r-] en
r2/r2a [r-] en
r2/r2e [r-] en
@@ -600,9 +607,7 @@ r/trr [r/] base
[r] ro
[r] ru
r/V_ [V#] de
[V1#] de
r/V_2_ [V#] de
[V2#] de
r/xr [r] base
[R3] base
[r-] en
@@ -629,6 +634,7 @@ ufric/s [s] base
[z2] fr
[s] es
[z] sq
[s] da
ufric/s_ [s] base
[z] base
[s2] consonants
@@ -640,6 +646,7 @@ ufric/s_ [s] base
ufric/s! [s] base
[s] fr
[s] es
[s] da
ufric/s_continue [s2] consonants
[s2] lv
ufric/sh [S] base
@@ -668,6 +675,7 @@ ufric/sx_sv [sx] sv
ufric/th [T] base
ufric/th_ [T] base
ufric/tl# [tl#] is
ufric/tlh [K] nso
ufric/x [x] base
[kh] vi
ufric/x2 [x2] af
@@ -725,6 +733,7 @@ ustop/null [?] base
ustop/p [p] base
[p2] fr
[p] zhy
[p] da
ustop/p_ [p] base
[ph] consonants
[p] fr
@@ -742,10 +751,12 @@ ustop/pl [p] base
[p] lv
[p] sk
[p] sq
[p] da
ustop/pr [p] base
[p-] consonants
[ph] consonants
[p] base2
[p] da
ustop/p_unasp [p] base
[p-] consonants
[p] base2
@@ -754,6 +765,7 @@ ustop/p_unasp [p] base
[p] sk
[p] zh
[p] sq
[p] da
ustop/p_unasp_ [p-] consonants
[p] base2
[p] fr
@@ -766,12 +778,12 @@ ustop/t [t] base
[dh.] hi
[th.] hi
[t] zhy
[t] da
ustop/t_ [t] base
[t] en-us
[t] fr
[t] lv
[t] sk
[t] el
[th] zh
ustop/t_dnt [t] base
[t[] base
@@ -788,6 +800,7 @@ ustop/t_pzd [c] base
[t;] pl
ustop/tr [t] base
[t] en-us
[t] da
ustop/ts [ts] consonants
[dz] consonants
[ts] hu
@@ -809,7 +822,6 @@ ustop/t_short [t] fr
[t.] hi
[t] lv
[t] sk
[t] el
ustop/t_short_ [t] fr
ustop/tsh_pzd [tS;] zh
ustop/tsh_pzd_unasp [tS;] zh
@@ -829,7 +841,8 @@ ustop/ts_rfx_unasp [ts.] zh
ustop/ts_sr [tS;] sr
[dZ;] sr
ustop/ts_unasp [ts] zh
ustop/t_unasp2 [t] zh
ustop/t_unasp2 [t] el
[t] zh
vdiph/0i [OI] pt
[OI] grc
[OI] vi
@@ -913,7 +926,6 @@ vdiph/aau_2 [aU] en-wi
[aU] la
[aau] zhy
vdiph/aau_3 [aU] hi
[aU] ta
[aU] ne
vdiph/aau_4 [aU] vi
vdiph/aau_6 [aU] de
@@ -947,6 +959,7 @@ vdiph/ai_8 [aI] ta
vdiph/aoo [aU] en-us
vdiph/au [aU] en
[aU] af
[aU] ta
[a:U] vi
[aU] prs
vdiph/au# [aU] en-sc
@@ -1109,6 +1122,7 @@ vnasal/o_n2 [o~] af
[O~] fr
vnasal/oo_n2 [O~] en
[O~] hi
[O~] nl
[o] zh
vnasal/oo_n3 [O~] pl
vnasal/u_n [U~] hi
@@ -1269,6 +1283,7 @@ vowel/a [a] base
[a] it
[a] zh
[a] id
[a] sl
[a] bg
vowel/a# [a] base2
[a/] base2
@@ -1286,6 +1301,7 @@ vowel/a_2 [a] base2
[A] pt
[a] pt-pt
[a] ro
[a] el
[a] da
[a] rw
vowel/a#_2 [A] nl
@@ -1326,7 +1342,7 @@ vowel/a#_3 [a#] en
[a/] sq
[3] da
[a] ml
vowel/a_4 [a/] el
vowel/a_4 [a] el
[a] vi
vowel/a#_4 [a:] nl
[a] tr
@@ -1375,6 +1391,7 @@ vowel/aa_9 [a] fi
[a:] hi
[a] ne
[a] pa
[a] ak
vowel/@_bck [@] hi
[@/] hi
[@] zh
@@ -1425,6 +1442,7 @@ vowel/e_3 [i] en-n
[e] ku
vowel/e_5 [i] en-sc
vowel/e_6 [e] ht
[e] ak
vowel/e_8 [E:] de
[e] fr
vowel/ee [E] en-n
@@ -1455,6 +1473,7 @@ vowel/ee_3 [&] af
[E] vi
vowel/ee_4 [E] sq
vowel/ee_5 [E] en
[E] ak
vowel/ee_6 [&] sk
[E3] sv
[E] ku
@@ -1533,6 +1552,7 @@ vowel/i [i] base
[i] ne
[i] prs
[i] nso
[i] ak
vowel/i# [y:] cy
vowel/i_2 [i2] de
[i:] de
@@ -1603,6 +1623,7 @@ vowel/ii_3 [I] cy
[I] no
[I] tr
[I] pa
[i] sl
vowel/ii#_3 [I2] en-us
vowel/ii_4 [I2] en
[I] en-us
@@ -1663,6 +1684,7 @@ vowel/o [o] base2
[o:] ml
[o:] pa
[o] sl
[o] ak
vowel/o_2 [o:] cy
[o:] hi
[o:] hu
@@ -1731,6 +1753,7 @@ vowel/oo_2 [0] en-sc
[O] cy
[o] cs
[0] da
[O] ak
vowel/oo_3 [O] af
vowel/oo_4 [O] base2
[0] en-wm
@@ -1774,6 +1797,7 @@ vowel/u [u] base
[u] ml
[u:] ml
[u] prs
[u] ak
vowel/u# [u:] en-sc
[Y] tr
vowel/u_2 [u1] fi
@@ -1782,6 +1806,7 @@ vowel/u_2 [u1] fi
[u] ro
[u] is
[u] tr
[u] sl
[u] bg
vowel/u#_2 [u-] sv
vowel/u#_3 [U] ta

+ 53
- 0
phsource/ph_danish View File

@@ -154,3 +154,56 @@ phoneme R
endphoneme



// don't weaken consonants at end of word or before a stop

phoneme s
vls alv frc sibilant
voicingswitch z
lengthmod 3
Vowelin f1=0 f2=1700 -300 300 f3=-100 80
Vowelout f1=0 f2=1700 -300 250 f3=-100 80 rms=20

IF nextPh(p) OR nextPh(t) OR nextPh(k) THEN
WAV(ufric/s!)
ENDIF
WAV(ufric/s)
endphoneme


phoneme p
vls blb stop
voicingswitch b
lengthmod 2
Vowelin f1=0 f2=1000 -50 -100 f3=-200 80 amp=11
Vowelout f1=0 f2=1000 -500 -350 f3=-300 80 rms=22

IF nextPh(isPause2) THEN
WAV(ustop/p_unasp)
ELIF nextPh(r) THEN
WAV(ustop/pr, 70)
ELIF nextPh(R) OR nextPh(R2) THEN
WAV(ustop/pr)
ELIF nextPh(@-) THEN
WAV(ustop/p_unasp)
ELIF nextPh(l) THEN
WAV(ustop/pl)
ENDIF
WAV(ustop/p)
endphoneme



phoneme t
vls alv stop
voicingswitch d
lengthmod 2
Vowelin f1=0 f2=1700 -300 300 f3=-100 80
Vowelout f1=0 f2=1700 -300 250 f3=-100 80 rms=20

IF nextPh(r) OR nextPh(R) OR nextPh(R2) THEN
WAV(ustop/tr)
ENDIF
WAV(ustop/t, 90)
endphoneme


+ 6
- 0
phsource/ph_dutch View File

@@ -96,6 +96,12 @@ phoneme A~
import_phoneme fr/A~
endphoneme

phoneme O~
vowel starttype #o endtype #o
length 190
FMT(vnasal/oo_n2)
endphoneme


// Diphthongs
//===========

+ 19
- 31
phsource/ph_german View File

@@ -339,35 +339,6 @@ phoneme V# // used for 'r' after a vowel (to create a diphthong)
endphoneme


// TESTING

phoneme V1#
liquid
lengthmod 7
IF nextPhW(isVowel) THEN
ChangePhoneme(r")
ENDIF
FMT(r/V_)
endphoneme

phoneme V2# // used for 'r' after a vowel (to create a diphthong)
liquid
lengthmod 7
IF nextPhW(isVowel) THEN
ChangePhoneme(r")
ENDIF
FMT(r/V_2_)
endphoneme

phoneme V3#
liquid
lengthmod 7
IF nextPhW(isVowel) THEN
ChangePhoneme(r")
ENDIF
FMT(r/@_)
endphoneme

phoneme UR
vowel starttype #u endtype #@
ipa ʊɐ
@@ -377,6 +348,23 @@ phoneme UR
endphoneme


phoneme r2
vcd alv flp

IF prevPhW(isVowel) THEN
ChangePhoneme(*)
ENDIF

InsertPhoneme(@-)
ChangePhoneme(*)
endphoneme



phoneme oU // for English words
import_phoneme en-us/oU
endphoneme



// translate from English to German phonemes
@@ -402,7 +390,7 @@ A~ O n
E E
e: e:
e@ E: r
eI e:
eI e j
i I
I I
I2 I
@@ -415,7 +403,7 @@ o: o:
O@ O : r
o@ O : r
OI OY
oU o:
oU oU
O~ O n
U U
u: u:

+ 19
- 5
phsource/ph_greek View File

@@ -4,12 +4,21 @@
//====================================================


phoneme a/
vowel starttype #@ endtype #@
phoneme a
vowel starttype #a endtype #a
length 180
FMT(vowel/a_4)

IF thisPh(isWordEnd) AND thisPh(isNotStressed) AND nextPh(a) THEN
ChangePhoneme(NULL)
ENDIF

IF thisPh(isDiminished) THEN
FMT(vowel/a_4)
ENDIF
FMT(vowel/a_2)
endphoneme


phoneme e
vowel starttype #e endtype #e
length 180
@@ -40,9 +49,9 @@ phoneme t // revert to alveolar /t/
Vowelin f1=1 f2=1600 -300 300 f3=-100 80 amp=11
Vowelout f1=0 f2=1600 -300 250 f3=-100 80 rms=20
IF nextPh(isPause2) THEN
WAV(ustop/t_)
WAV(ustop/t_unasp2)
ENDIF
WAV(ustop/t_short, 80)
WAV(ustop/t_unasp2)
endphoneme


@@ -69,3 +78,8 @@ phoneme k
WAV(ustop/k_unasp, 70)
endphoneme


phoneme r
import_phoneme base/R2
endphoneme


+ 14
- 1
phsource/ph_polish View File

@@ -170,8 +170,21 @@ endphoneme


phoneme dz
import_phoneme consonants/dz
CALL consonants/dz
voicingswitch ts
ipa dʑ
endphoneme

phoneme ts;
CALL base/tS;
voicingswitch dz;
ipa tɕ
endphoneme


phoneme dz;
import_phoneme base/dZ;
voicingswitch ts;
endphoneme



+ 3
- 0
phsource/ph_pt_brazil View File

@@ -132,6 +132,9 @@ endphoneme
phoneme U
vowel starttype #u endtype #u
length 140
IF thisPh(isWordEnd) AND nextPh(isVowel) THEN
ChangePhoneme(w)
ENDIF
FMT(vowel/uu_bck)
endphoneme


+ 3
- 3
phsource/ph_tamil View File

@@ -118,14 +118,14 @@ endphoneme

phoneme aI
vowel starttype #a endtype #i
length 230
length 280
FMT(vdiph/ai_8)
endphoneme

phoneme aU
vowel starttype #a endtype #u
length 200
FMT(vdiph/aau_3)
length 260
FMT(vdiph/au)
endphoneme



+ 7
- 2
phsource/phonemes View File

@@ -475,6 +475,8 @@ phoneme l/2 // 'dark' [l] after a vowel
ChangePhoneme(l)
ENDIF

CALL vowelstart_l

PrevVowelEndings
VowelEnding(l/L2_@L, -60)
VowelEnding(l/L2_aL, -50)
@@ -1125,9 +1127,9 @@ phoneme z
ENDIF

IF nextPh(isPause2) THEN
FMT(voc/z_) addWav(ufric/s_, 85)
FMT(voc/z_) addWav(ufric/s_, 70)
ENDIF
FMT(voc/z) addWav(ufric/s_)
FMT(voc/z) addWav(ufric/s_, 85)
endphoneme


@@ -1817,3 +1819,6 @@ include ph_haitian

phonemetable az tr
include ph_azerbaijani

phonemetable ak base
include ph_akan

+ 24
- 14
platforms/big_endian/espeak-phoneme-data.c View File

@@ -2,11 +2,13 @@


// 13.02.10 jonsd: Changed for eSpeak version 1.43
// 13.08.10 jonsd: Added Q lines. Use Address to set the displacement in phondata file.


#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
#include <sys/types.h>

#if defined(BYTE_ORDER) && BYTE_ORDER == BIG_ENDIAN
@@ -101,6 +103,7 @@ void swap_phontab (const char *infile, const char *outfile);

void usage (const char *program_name);

int xread; // prevent compiler warning from fread()


int main (int argc, char *argv[])
@@ -181,6 +184,7 @@ void swap_phondata (const char *infile, const char *outfile,
const char *manifest)
{//==========================================================
FILE *in, *mfest, *out;
int displ;
char line[1024];
unsigned char buf_4[4];

@@ -202,24 +206,30 @@ void swap_phondata (const char *infile, const char *outfile,
exit (1);
}

fread (buf_4, 4, 1, in);
fwrite (buf_4, 4, 1, out);
xread = fread(buf_4, 4, 1, in);
fwrite(buf_4, 4, 1, out);

while (fgets (line, sizeof(line), mfest))
{
if(!isupper(line[0])) continue;

sscanf(&line[2],"%x",&displ);
fseek(in, displ, SEEK_SET);

while (fgets (line, 1024, mfest)) {
if (line[0] == 'S') {
SPECT_SEQ buf_spect;
size_t ix;
int n;

fread (&buf_spect.length, 2, 1, in);
fread (&buf_spect.n_frames, 1, 1, in);
xread = fread (&buf_spect.length, 2, 1, in);
xread = fread (&buf_spect.n_frames, 1, 1, in);
fseek (in, -3, SEEK_CUR);

ix = (char *)(&buf_spect.frame[buf_spect.n_frames]) -
(char *)(&buf_spect);
ix = (ix+3) & 0xfffc;

fread (&buf_spect, ix, 1, in);
xread = fread (&buf_spect, ix, 1, in);

buf_spect.length = (short) SWAP_USHORT (buf_spect.length);
for (n = 0; n < buf_spect.n_frames; n++) {
@@ -242,7 +252,7 @@ void swap_phondata (const char *infile, const char *outfile,
int length;
char *wave_data;

fread (buf_4, 4, 1, in);
xread = fread (buf_4, 4, 1, in);
fwrite (buf_4, 4, 1, out);

length = buf_4[1] * 256 + buf_4[0];
@@ -253,7 +263,7 @@ void swap_phondata (const char *infile, const char *outfile,
exit (1);
}

fread (wave_data, 1, length, in);
xread = fread (wave_data, 1, length, in);
fwrite (wave_data, 1, length, out);

pos = ftell (in);
@@ -273,7 +283,7 @@ void swap_phondata (const char *infile, const char *outfile,
else if (line[0] == 'E') {
char env_buf[128];

fread (env_buf, 1, 128, in);
xread = fread (env_buf, 1, 128, in);
fwrite (env_buf, 1, 128, out);
}
}
@@ -302,7 +312,7 @@ void swap_phonindex (const char *infile, const char *outfile)
exit (1);
}

fread (buf_4, 4, 1, in); // skip first 4 bytes
xread = fread (buf_4, 4, 1, in); // skip first 4 bytes
fwrite(buf_4, 4, 1, out);

while (! feof (in)) {
@@ -339,7 +349,7 @@ void swap_phontab (const char *infile, const char *outfile)
exit (1);
}

fread (buf_8, 4, 1, in);
xread = fread (buf_8, 4, 1, in);
fwrite (buf_8, 4, 1, out);
n_phoneme_tables = buf_8[0];

@@ -347,18 +357,18 @@ void swap_phontab (const char *infile, const char *outfile)
int n_phonemes, j;
char tab_name[N_PHONEME_TAB_NAME];

fread (buf_8, 8, 1, in);
xread = fread (buf_8, 8, 1, in);
fwrite (buf_8, 8, 1, out);

n_phonemes = buf_8[0];

fread (tab_name, N_PHONEME_TAB_NAME, 1, in);
xread = fread (tab_name, N_PHONEME_TAB_NAME, 1, in);
fwrite (tab_name, N_PHONEME_TAB_NAME, 1, out);

for (j = 0; j < n_phonemes; j++) {
PHONEME_TAB table;

fread (&table, sizeof (PHONEME_TAB), 1, in);
xread = fread (&table, sizeof (PHONEME_TAB), 1, in);

table.mnemonic = SWAP_UINT (table.mnemonic);
table.phflags = SWAP_UINT (table.phflags);

+ 15
- 9
platforms/windows/make_espeak.iss View File

@@ -2,7 +2,7 @@
[Setup]
AppName=eSpeak
AppVerName=eSpeak version 1.43.24
AppVerName=eSpeak version 1.44.01
AppCopyright=Licensed under GNU General Public License version 3. (See file License.txt for details).
WindowVisible=yes
@@ -32,7 +32,6 @@ Source: "Readme.txt"; DestDir: "{app}"; Flags: isreadme
Source: "License.txt"; DestDir: "{app}";
[Registry]
;Root: HKLM; Subkey: "Software\Microsoft\Speech\Voices\Tokens\eSpeak_5"; Flags: deletekey uninsdeletekey
Root: HKLM; Subkey: "Software\Microsoft\Speech\PhoneConverters\Tokens\eSpeak"; Flags: deletekey uninsdeletekey
@@ -111,8 +110,10 @@ begin
lang_main := language and $3ff;
Result := 'en';
// translation from microsoft codes to language codes
// Translation from microsoft codes to language codes
// Used to set default voices for inatallation.
case lang_main of
//$02: Result := 'bg';
$03: Result := 'ca';
$04: Result := 'zh';
$05: Result := 'cs';
@@ -126,7 +127,7 @@ begin
$0e: Result := 'hu';
$0f: Result := 'is';
$10: Result := 'it';
$12: Result := 'ko';
//$12: Result := 'ko';
$13: Result := 'nl';
$14: Result := 'no';
$15: Result := 'pl';
@@ -142,17 +143,18 @@ begin
$26: Result := 'lv';
$2a: Result := 'vi';
$2b: Result := 'hy';
$2d: Result := 'eu';
//$2c: Result := 'az';
//$2d: Result := 'eu';
$2f: Result := 'mk';
$36: Result := 'af';
$39: Result := 'hi';
$41: Result := 'sw';
$49: Result := 'ta';
$4b: Result := 'kn';
$50: Result := 'mn';
//$4b: Result := 'kn';
//$50: Result := 'mn';
$52: Result := 'cy';
$61: Result := 'ne';
$87: Result := 'rw';
//$61: Result := 'ne';
//$87: Result := 'rw';
end;
// is there a match on the full language code?
@@ -185,8 +187,12 @@ begin
lang1 := Copy(voice,8,6); // eg. mb-de4-en, return 'en'
end;
// Used to set the correct Microsoft language code in the registry
// when a SAPI5 voice is installed.
case lang1 of
'af': value := $436;
'az': value := $42c;
'bg': value := $402;
'bs': value := $41a; // should be $141a but Jaws crashes on startup
'ca': value := $403;
'cs': value := $405;

+ 4
- 1
platforms/windows/make_espeakedit.iss View File

@@ -1,7 +1,7 @@
[Setup]
AppName=eSpeakEdit
AppVerName=eSpeakEdit version 1.43.24
AppVerName=eSpeakEdit version 1.44.01
DefaultDirName={pf}\eSpeak
DefaultGroupName=eSpeak
OutputBaseFilename=setup_espeakedit
@@ -14,6 +14,9 @@ ShowLanguageDialog=auto
Name: "{group}\espeakedit"; Filename: "{app}\espeakedit.exe"; WorkingDir: "{app}"; Flags: runmaximized
Name: "{group}\Uninstall espeakedit"; Filename: "{uninstallexe}"
[InstallDelete]
Type: filesandordirs; Name: "{app}\phsource\vowelcharts"
[Files]
Source: "espeakedit.exe"; DestDir: "{app}"

+ 3
- 2
platforms/windows/windows_sapi/ttsengobj.cpp View File

@@ -178,6 +178,7 @@ int SynthCallback(short *wav, int numsamples, espeak_EVENT *events)
// return the events
for(event=events; (event->type != 0) && (n_Events < N_EVENTS); event++)
{
audio_latest = event->audio_position + audio_offset;
if((event->type == espeakEVENT_WORD) && (event->length > 0))
@@ -260,8 +261,8 @@ static int ConvertRate(int new_rate)
int rate;
static int rate_table[21] = {80,100,115,124,133,142,151,159,168,174,180,
187,196,208,220,240,270,300,335,369,390 };
static int rate_table[21] = {80,110,124,133,142,151,159,168,174,180,187,
196,208,220,240,270,300,335,369,390,450 };
rate = new_rate + master_rate;
if(rate < -10) rate = -10;

+ 5
- 5
platforms/windows/windows_sapi/version.rc2 View File

@@ -5,8 +5,8 @@
//
VS_VERSION_INFO VERSIONINFO
FILEVERSION 1,0,42,00
PRODUCTVERSION 1,0,42,00
FILEVERSION 1,0,44,00
PRODUCTVERSION 1,0,44,00
FILEFLAGSMASK 0x3fL
#ifdef _DEBUG
FILEFLAGS 0x1L
@@ -24,14 +24,14 @@ BEGIN
VALUE "Comments", "\0"
VALUE "CompanyName", "Jonathan Duddington\0"
VALUE "FileDescription", "Text to Speech\0"
VALUE "FileVersion", "1, 0,42,00\0"
VALUE "InternalName", "espeak1.42\0"
VALUE "FileVersion", "1, 0,44,00\0"
VALUE "InternalName", "espeak1.44\0"
VALUE "LegalCopyright", "Copyright (c) Jonathan Duddington\0"
VALUE "LegalTrademarks", "\0"
VALUE "OriginalFilename", "espeak_sapi.dll\0"
VALUE "PrivateBuild", "\0"
VALUE "ProductName", "espeak TTS\0"
VALUE "ProductVersion", "1, 0, 42, 00\0"
VALUE "ProductVersion", "1, 0, 44, 00\0"
VALUE "SpecialBuild", "\0"
END
END

+ 9
- 6
src/compiledata.cpp View File

@@ -1605,7 +1605,7 @@ int LoadSpect(const char *path, int control)
displ = ftell(f_phdata);

seq_out.n_frames=0;
seq_out.flags=0;
seq_out.sqflags=0;
seq_out.length_total=0;

total = 0;
@@ -1752,7 +1752,7 @@ for(ix=0; ix<8; ix++)
if(klatt_flag)
{
seqk_out.n_frames = seq_out.n_frames;
seqk_out.flags = seq_out.flags;
seqk_out.sqflags = seq_out.sqflags;
seqk_out.length_total = seq_out.length_total;

ix = (char *)(&seqk_out.frame[seqk_out.n_frames]) - (char *)(&seqk_out);
@@ -1925,8 +1925,11 @@ static int LoadEnvelope(FILE *f, const char *fname)
displ = ftell(f_phdata);

fseek(f,12,SEEK_SET);
fread(buf,1,128,f);
fwrite(buf,1,128,f_phdata);
if(fread(buf,128,1,f) == 0)
{
error("Failed to read envelope: %s",fname);
}
fwrite(buf,128,1,f_phdata);

if(n_envelopes < N_ENVELOPES)
{
@@ -3576,7 +3579,7 @@ void CompileMbrola()
wxFileName filename = wxFileName(filepath);
strcpy(mbrola_voice,filename.GetName().mb_str(wxConvLocal));
sprintf(buf,"%s/mbrola_ph/%s_phtrans",path_home,mbrola_voice);
if((f_out = fopen(buf,"w")) == NULL)
if((f_out = fopen(buf,"wb")) == NULL)
{
wxLogError(_T("Can't write to: ")+wxString(buf,wxConvLocal));
return;
@@ -3610,7 +3613,7 @@ static const TUNE default_tune = {
PITCHfall, 64, 8,
PITCHfall, 70, 18, 24, 12,
PITCHfall, 70, 18, 24, 12, 0,
{0,0,0,0,0,0,0,0,0,0}
{0,0,0,0,0,0,0,0}, 0
};

#define N_TUNE_NAMES 100

+ 6
- 4
src/dictionary.cpp View File

@@ -273,7 +273,7 @@ int LoadDictionary(Translator *tr, const char *name, int no_error)
}

tr->data_dictlist = Alloc(size);
fread(tr->data_dictlist,size,1,f);
size = fread(tr->data_dictlist,1,size,f);
fclose(f);


@@ -516,7 +516,7 @@ unsigned short ipa1[96] = {
0x252,0x31,0x32,0x25c,0x34,0x35,0x36,0x37,0x275,0x39,0x2d0,0x2b2,0x3c,0x3d,0x3e,0x294,
0x259,0x251,0x3b2,0xe7,0xf0,0x25b,0x46,0x262,0x127,0x26a,0x25f,0x4b,0x4c,0x271,0x14b,0x254,
0x3a6,0x263,0x280,0x283,0x3b8,0x28a,0x28c,0x153,0x3c7,0xf8,0x292,0x32a,0x5c,0x5d,0x5e,0x5f,
0x60,0x61,0x62,0x63,0x64,0x65,0x66,0x67,0x68,0x69,0x6a,0x6b,0x6c,0x6d,0x6e,0x6f,
0x60,0x61,0x62,0x63,0x64,0x65,0x66,0x261,0x68,0x69,0x6a,0x6b,0x6c,0x6d,0x6e,0x6f,
0x70,0x71,0x72,0x73,0x74,0x75,0x76,0x77,0x78,0x79,0x7a,0x7b,0x7c,0x7d,0x303,0x7f
};

@@ -1639,6 +1639,7 @@ void SetWordStress(Translator *tr, char *output, unsigned int *dictionary_flags,
}
*output++ = 0;

return;
} /* end of SetWordStress */


@@ -2620,6 +2621,9 @@ int TranslateRules(Translator *tr, char *p_start, char *phonemes, int ph_size, c
if(match1.points > 0)
{
if(word_flags & FLAG_UNPRON_TEST)
return(match1.end_type | 1);

if((match1.phonemes[0] == phonSWITCH) && ((word_flags & FLAG_DONT_SWITCH_TRANSLATOR)==0))
{
// an instruction to switch language, return immediately so we can re-translate
@@ -2627,8 +2631,6 @@ int TranslateRules(Translator *tr, char *p_start, char *phonemes, int ph_size, c
return(0);
}

if(word_flags & FLAG_UNPRON_TEST)
return(match1.end_type | 1);
match1.end_type &= ~SUFX_UNPRON;

if((match1.end_type != 0) && (end_phonemes != NULL))

+ 3
- 1
src/espeakedit.cpp View File

@@ -247,6 +247,8 @@ END_EVENT_TABLE()

MyFrame::~MyFrame(void)
{//====================
myframe->Show(false);
myframe->Iconize(false); // os=Windows, get the non-iconsized size
myframe->GetPosition(&frame_x, &frame_y);
myframe->GetSize(&frame_w, &frame_h);
}
@@ -566,7 +568,7 @@ void DisplayErrorFile(const char *fname)
if(msg != NULL)
{
f = fopen(fname,"r");
fread(msg,len,1,f);
len = fread(msg,1, len, f);
fclose(f);
msg[len] = 0;
msg_string = wxString(msg,wxConvUTF8);

+ 5
- 0
src/mbrowrap.cpp View File

@@ -15,6 +15,9 @@
* GNU General Public License for more details.
*/

#include "speech.h"
#ifdef INCLUDE_MBROLA

#include <stdarg.h>
#include <stdio.h>
#include <unistd.h>
@@ -603,3 +606,5 @@ void resetError_MBR(void)
{
mbr_errorbuf[0] = 0;
}

#endif // INCLUDE_MBROLA

+ 12
- 1
src/numbers.cpp View File

@@ -1343,6 +1343,7 @@ static int LookupNum3(Translator *tr, int value, char *ph_out, int suppress_null
int hundreds;
int tensunits;
int x;
int ix;
int exact;
int ordinal;
char string[12]; // for looking up entries in **_list
@@ -1500,6 +1501,16 @@ static int LookupNum3(Translator *tr, int value, char *ph_out, int suppress_null
ph_hundred_and[0] = 0; // don't put 'and' after 'hundred' if there's 'and' between tens and units
}
}
else
{
if(ph_ordinal2[0] != 0)
{
ix = strlen(buf1);
if((ix > 0) && (buf1[ix-1] == phonPAUSE_SHORT))
buf1[ix-1] = 0; // remove pause before addding ordinal suffix
strcpy(buf2, ph_ordinal2);
}
}

sprintf(ph_out,"%s%s%s",buf1,ph_hundred_and,buf2);

@@ -1883,7 +1894,7 @@ static int TranslateNumber_1(Translator *tr, char *word, char *ph_out, unsigned

int TranslateNumber(Translator *tr, char *word1, char *ph_out, unsigned int *flags, WORD_TAB *wtab, int control)
{//=============================================================================================================
if(option_sayas == SAYAS_DIGITS1)
if((option_sayas == SAYAS_DIGITS1) || (wtab[0].flags & FLAG_INDIVIDUAL_DIGITS))
return(0); // speak digits individually

if(tr->langopts.numbers != 0)

+ 5
- 6
src/readclause.cpp View File

@@ -774,7 +774,7 @@ static int LoadSoundFile(const char *fname, int index)
fclose(f);
return(4);
}
fread(p,length,1,f);
length = fread(p,1,length,f);
fclose(f);
remove(fname_temp);

@@ -889,13 +889,13 @@ static int AnnouncePunctuation(Translator *tr, int c1, int *c2_ptr, char *output
else
if(punct_count < 4)
{
sprintf(buf,"\001+15S");
sprintf(buf,"\001+10S");
while(punct_count-- > 0)
{
sprintf(buf2," %s",punctname);
strcat(buf, buf2);
}
sprintf(buf2," \001-15S");
sprintf(buf2," \001-10S");
strcat(buf, buf2);
}
else
@@ -1482,8 +1482,8 @@ static void SetProsodyParameter(int param_type, wchar_t *attr1, PARAM_STACK *sp)
{"x-slow",60},
{"slow",80},
{"medium",100},
{"fast",120},
{"x-fast",150},
{"fast",125},
{"x-fast",160},
{NULL, -1}};

static const MNEM_TAB mnem_pitch[] = {
@@ -2032,7 +2032,6 @@ int ReadClause(Translator *tr, FILE *f_in, char *buf, short *charix, int *charix
int stressed_word = 0;
int end_clause_after_tag = 0;
int end_clause_index = 0;
const char *p;
wchar_t xml_buf[N_XML_BUF+1];

#define N_XML_BUF2 20

+ 1
- 1
src/setlengths.cpp View File

@@ -154,7 +154,7 @@ void SetSpeed(int control)
if(wpm > 1000)
{
// TESTING
test = wpm / 1000;
// test = wpm / 1000;
wpm = wpm % 1000;
}
#endif

+ 12
- 3
src/speak_lib.h View File

@@ -28,7 +28,7 @@
#include <stdio.h>
#include <stddef.h>

#define ESPEAK_API_REVISION 5
#define ESPEAK_API_REVISION 6
/*
Revision 2
Added parameter "options" to eSpeakInitialize()
@@ -41,11 +41,19 @@ Revision 4

Revision 5
Added espeakCHARS_16BIT

Revision 6
Added macros: espeakRATE_MINIMUM, espeakRATE_MAXIMUM, espeakRATE_NORMAL
*/
/********************/
/* Initialization */
/********************/

// values for 'value' in espeak_SetParameter(espeakRATE, value, 0), nominally in words-per-minute
#define espeakRATE_MINIMUM 80
#define espeakRATE_MAXIMUM 450
#define espeakRATE_NORMAL 175


typedef enum {
espeakEVENT_LIST_TERMINATED = 0, // Retrieval mode: terminates the event list.
@@ -386,9 +394,10 @@ espeak_ERROR espeak_SetParameter(espeak_PARAMETER parameter, int value, int rela
relative=1 Sets a relative value of the parameter.

parameter:
espeakRATE: speaking speed in word per minute.
espeakRATE: speaking speed in word per minute. Values 80 to 450.

espeakVOLUME: volume in range 0-100 0=silence
espeakVOLUME: volume in range 0-200 or more.
0=silence, 100=normal full volume, greater values may produce amplitude compression or distortion

espeakPITCH: base pitch, range 0-100. 50=normal


+ 1
- 0
src/speech.h View File

@@ -22,6 +22,7 @@

// conditional compilation options
#define INCLUDE_KLATT
#define INCLUDE_MBROLA

#if defined(BYTE_ORDER) && BYTE_ORDER == BIG_ENDIAN
#define ARCH_BIG

+ 39
- 3
src/synth_mbrola.cpp View File

@@ -17,6 +17,8 @@
* <http://www.gnu.org/licenses/>. *
***************************************************************************/



#include "StdAfx.h"

#include <stdio.h>
@@ -33,6 +35,10 @@
#include "translate.h"
#include "voice.h"

int option_mbrola_phonemes;

#ifdef INCLUDE_MBROLA

extern int Read4Bytes(FILE *f);
extern void SetPitch2(voice_t *voice, int pitch1, int pitch2, int *pitch_base, int *pitch_range);
extern unsigned char *outbuf;
@@ -103,7 +109,6 @@ void unload_MBR()

static MBROLA_TAB *mbrola_tab = NULL;
static int mbrola_control = 0;
int option_mbrola_phonemes;


espeak_ERROR LoadMbrolaTable(const char *mbrola_voice, const char *phtrans, int srate)
@@ -133,6 +138,11 @@ espeak_ERROR LoadMbrolaTable(const char *mbrola_voice, const char *phtrans, int
// mbrola voice file not found, look in /usr/share
sprintf(path,"/usr/share/mbrola/%s",mbrola_voice);
}
if(GetFileLength(path) <= 0)
{
// mbrola voice file not found, look in /usr/share
sprintf(path,"/usr/share/mbrola/voices/%s",mbrola_voice);
}
#endif
#ifdef PLATFORM_WINDOWS
if(load_MBR() == FALSE) // load mbrola.dll
@@ -147,7 +157,7 @@ espeak_ERROR LoadMbrolaTable(const char *mbrola_voice, const char *phtrans, int
// read eSpeak's mbrola phoneme translation data, eg. en1_phtrans
sprintf(path,"%s/mbrola_ph/%s",path_home,phtrans);
size = GetFileLength(path);
if((f_in = fopen(path,"r")) == NULL) {
if((f_in = fopen(path,"rb")) == NULL) {
close_MBR();
return(EE_NOT_FOUND);
}
@@ -165,7 +175,7 @@ espeak_ERROR LoadMbrolaTable(const char *mbrola_voice, const char *phtrans, int
{
*pw++ = Read4Bytes(f_in);
}
fread(mbrola_tab,size,1,f_in);
size = fread(mbrola_tab,1,size,f_in);
fclose(f_in);

setVolumeRatio_MBR((float)(mbrola_control & 0xff) /16.0f);
@@ -639,3 +649,29 @@ void MbrolaReset(void)

reset_MBR();
}

#else // INCLUDE_MBROLA

// mbrola interface is not compiled, provide dummy functions.

espeak_ERROR LoadMbrolaTable(const char *mbrola_voice, const char *phtrans, int srate)
{
return(EE_INTERNAL_ERROR);
}

int MbrolaGenerate(PHONEME_LIST *phoneme_list, int *n_ph, int resume)
{
return(0);
}

int MbrolaFill(int length, int resume)
{
return(0);
}

void MbrolaReset(void)
{
}


#endif // INCLUDE_MBROLA

+ 2
- 2
src/synthdata.cpp View File

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

const char *version_string = "1.43.63 02.Aug.10";
const int version_phdata = 0x014361;
const char *version_string = "1.44.04 14.Sep.10";
const int version_phdata = 0x014404;

int option_device_number = -1;
FILE *f_logespeak = NULL;

+ 7
- 2
src/synthesize.cpp View File

@@ -1236,10 +1236,15 @@ void DoEmbedded(int *embix, int sourceix)
int command;

do {
word = embedded_list[(*embix)++];
word = embedded_list[*embix];
value = word >> 8;
command = word & 0x7f;

if(command == 0)
return; // error

(*embix)++;

switch(command & 0x1f)
{
case EMBED_S: // speed
@@ -1464,7 +1469,7 @@ int Generate(PHONEME_LIST *phoneme_list, int *n_ph, int resume)
DoSpect2(ph, 0, &fmtp, p, 0);
if(p->synthflags & SFLAG_LENGTHEN)
{
DoPause(20,0);
DoPause(25,1);
DoSpect2(ph, 0, &fmtp, p, 0);
}
}

+ 8
- 30
src/synthesize.h View File

@@ -89,7 +89,7 @@ extern int embedded_default[N_EMBEDDED_VALUES];



typedef struct { // 44 bytes
typedef struct { // 64 bytes
short frflags;
short ffreq[7];
unsigned char length;
@@ -102,8 +102,10 @@ typedef struct { // 44 bytes
unsigned char klattp2[5]; // continuation of klattp[], Avp, Fric, FricBP, Turb
unsigned char klatt_ap[7]; // Klatt parallel amplitude
unsigned char klatt_bp[7]; // Klatt parallel bandwidth /2
unsigned char spare; // pad to multiple of 4 bytes
} frame_t; // with extra Klatt parameters for parallel resonators


typedef struct { // 44 bytes
short frflags;
short ffreq[7];
@@ -114,32 +116,7 @@ typedef struct { // 44 bytes
unsigned char fright[3]; // width/4 f0-2
unsigned char bw[4]; // Klatt bandwidth BNZ /2, f1,f2,f3
unsigned char klattp[5]; // AV, FNZ, Tilt, Aspr, Skew
} frame_t2; // TESTING


#ifdef deleted
typedef struct {
short frflags;
unsigned char length;
unsigned char rms;
short ffreq[9];
unsigned char fheight[9];
unsigned char fwidth[6]; // width/4
unsigned char fright[6]; // width/4
unsigned char fwidth6, fright6;
unsigned char klattp[N_KLATTP];
} frame_t;

typedef struct { // 43 bytes
short frflags;
unsigned char length;
unsigned char rms;
short ffreq[9];
unsigned char fheight[9];
unsigned char fwidth[6]; // width/4
unsigned char fright[6]; // width/4
} frame_t2; // the original, without Klatt additions, used for file "phondata"
#endif
} frame_t2; // without the extra Klatt parameters



@@ -193,14 +170,14 @@ typedef struct {
typedef struct {
short length_total; // not used
unsigned char n_frames;
unsigned char flags;
unsigned char sqflags;
frame_t2 frame[N_SEQ_FRAMES]; // max. frames in a spectrum sequence
} SPECT_SEQ; // sequence of espeak formant frames

typedef struct {
short length_total; // not used
unsigned char n_frames;
unsigned char flags;
unsigned char sqflags;
frame_t frame[N_SEQ_FRAMES]; // max. frames in a spectrum sequence
} SPECT_SEQK; // sequence of klatt formants frames

@@ -433,7 +410,8 @@ typedef struct {
unsigned char split_tail_end;
unsigned char split_tune;
unsigned char spare[10];
unsigned char spare[8];
int spare2; // the struct length should be a multiple of 4 bytes
} TUNE;

extern int n_tunes;

+ 13
- 12
src/tr_languages.cpp View File

@@ -122,7 +122,8 @@ static Translator* NewTranslator(void)
tr->data_dictrules = NULL; // language_1 translation rules file
tr->data_dictlist = NULL; // language_2 dictionary lookup file

tr->transpose_min = 0;
tr->transpose_min = 'a';
tr->transpose_max = 'z';
tr->frequent_pairs = NULL;

// only need lower case
@@ -167,6 +168,7 @@ static Translator* NewTranslator(void)
tr->langopts.replace_chars = NULL;
tr->langopts.ascii_language = ""; // Non-Latin alphabet languages, use this language to speak Latin words, default is English


SetLengthMods(tr,201);
// tr->langopts.length_mods = length_mods_en;
// tr->langopts.length_mods0 = length_mods_en0;
@@ -178,6 +180,7 @@ static Translator* NewTranslator(void)
tr->langopts.thousands_sep = ',';
tr->langopts.decimal_sep = '.';
tr->langopts.break_numbers = BREAK_THOUSANDS; // 1000, 1000,000 1,000,000 etc
tr->langopts.max_digits = 14;

memcpy(tr->punct_to_tone, punctuation_to_tone, sizeof(tr->punct_to_tone));

@@ -278,14 +281,14 @@ static void SetCyrillicLetters(Translator *tr)

tr->letter_bits_offset = OFFSET_CYRILLIC;
memset(tr->letter_bits,0,sizeof(tr->letter_bits));
SetLetterBits(tr,0,ru_vowels);
SetLetterBits(tr,LETTERGP_A,ru_vowels);
SetLetterBits(tr,1,ru_soft);
SetLetterBits(tr,2,ru_consonants);
SetLetterBits(tr,3,ru_hard);
SetLetterBits(tr,4,ru_nothard);
SetLetterBits(tr,5,ru_voiced);
SetLetterBits(tr,6,ru_ivowels);
SetLetterBits(tr,7,ru_vowels);
SetLetterBits(tr,LETTERGP_VOWEL2,ru_vowels);
} // end of SetCyrillicLetters


@@ -419,10 +422,8 @@ Translator *SelectTranslator(const char *name)
static const short stress_lengths_da[8] = {160,140, 200,200, 0,0, 220,230};
SetupTranslator(tr,stress_lengths_da,NULL);

tr->transpose_min = 'a';
tr->transpose_max = 'z';

tr->langopts.stress_rule = STRESSPOSN_1L;
tr->langopts.param[LOPT_PREFIXES] = 1;
SetLetterVowel(tr,'y');
tr->langopts.numbers = NUM_DECIMAL_COMMA | NUM_SWAP_TENS | NUM_HUNDRED_AND | NUM_OMIT_1_HUNDRED | NUM_ORDINAL_DOT | NUM_1900 | NUM_ROMAN | NUM_ROMAN_CAPITALS | NUM_ROMAN_ORDINAL;
}
@@ -451,9 +452,6 @@ Translator *SelectTranslator(const char *name)
static const short stress_lengths_en[8] = {182,140, 220,220, 0,0, 248,275};
SetupTranslator(tr,stress_lengths_en,NULL);

tr->transpose_min = 'a';
tr->transpose_max = 'z';

tr->langopts.stress_rule = STRESSPOSN_1L;
tr->langopts.stress_flags = 0x08;
tr->langopts.numbers = NUM_HUNDRED_AND | NUM_ROMAN | NUM_1900;
@@ -485,6 +483,7 @@ Translator *SelectTranslator(const char *name)
tr->letter_bits_offset = OFFSET_GREEK;
memset(tr->letter_bits,0,sizeof(tr->letter_bits));
SetLetterBits(tr,LETTERGP_A,el_vowels);
SetLetterBits(tr,LETTERGP_VOWEL2,el_vowels);
SetLetterBits(tr,LETTERGP_B,el_voiceless);
SetLetterBits(tr,LETTERGP_C,el_consonants);
SetLetterBits(tr,LETTERGP_Y,el_fvowels); // front vowels: ε η ι υ
@@ -733,6 +732,7 @@ SetLengthMods(tr,3); // all equal
tr->letter_bits_offset = OFFSET_ARMENIAN;
memset(tr->letter_bits,0,sizeof(tr->letter_bits));
SetLetterBits(tr,LETTERGP_A,hy_vowels);
SetLetterBits(tr,LETTERGP_VOWEL2,hy_vowels);
SetLetterBits(tr,LETTERGP_C,hy_consonants);
tr->langopts.max_initial_consonants = 6;
tr->langopts.numbers = NUM_DECIMAL_COMMA | NUM_OMIT_1_HUNDRED;
@@ -883,7 +883,7 @@ SetLengthMods(tr,3); // all equal

SetupTranslator(tr,stress_lengths_mk,stress_amps_mk);
tr->charset_a0 = charsets[5]; // ISO-8859-5
tr->letter_groups[0] = vowels_cyrillic;
tr->letter_groups[0] = tr->letter_groups[7] = vowels_cyrillic;

tr->langopts.stress_rule = STRESSPOSN_3R; // antipenultimate
tr->langopts.numbers = NUM_DECIMAL_COMMA | NUM_AND_UNITS | NUM_OMIT_1_HUNDRED | NUM_OMIT_1_THOUSAND | NUM_DFRACTION_2;
@@ -902,7 +902,7 @@ SetLengthMods(tr,3); // all equal
tr->langopts.param[LOPT_PREFIXES] = 1;
tr->langopts.param[LOPT_REGRESSIVE_VOICING] = 0x10; // devoice at end of word
SetLetterVowel(tr,'y');
tr->langopts.numbers = NUM_DECIMAL_COMMA | NUM_SWAP_TENS | NUM_OMIT_1_HUNDRED | NUM_ALLOW_SPACE | NUM_1900 | NUM_ORDINAL_DOT;
tr->langopts.ordinal_indicator = "e";
memcpy(tr->stress_lengths,stress_lengths_nl,sizeof(tr->stress_lengths));
@@ -1037,6 +1037,7 @@ SetLengthMods(tr,3); // all equal
tr->langopts.stress_flags = 0x20;
tr->langopts.param[LOPT_REGRESSIVE_VOICING] = 0x13;
tr->langopts.numbers = NUM_DECIMAL_COMMA | NUM_ALLOW_SPACE | NUM_SWAP_TENS | NUM_OMIT_1_HUNDRED | NUM_DFRACTION_2 | NUM_ORDINAL_DOT | NUM_ROMAN;
tr->langopts.numbers2 = 0x100; // plural forms of millions etc
tr->langopts.thousands_sep = ' '; // don't allow dot as thousands separator
SetLetterVowel(tr,'r');
break;
@@ -1192,7 +1193,7 @@ SetLengthMods(tr,3); // all equal
tr->langopts.stress_rule = STRESSPOSN_1L;
tr->langopts.word_gap = 0x21; // length of a final vowel is less dependent on the next consonant, don't merge consonant with next word
// tr->langopts.vowel_pause = 4;
tr->letter_groups[0] = vowels_vi;
tr->letter_groups[0] = tr->letter_groups[7] = vowels_vi;
tr->langopts.tone_language = 1; // Tone language, use CalcPitches_Tone() rather than CalcPitches()
tr->langopts.unstressed_wd1 = 2;
tr->langopts.numbers = NUM_DECIMAL_COMMA | NUM_HUNDRED_AND | NUM_DFRACTION_4;

+ 34
- 11
src/translate.cpp View File

@@ -766,12 +766,14 @@ int TranslateWord(Translator *tr, char *word1, int next_pause, WORD_TAB *wtab)

int word_length;
int ix;
char *p;
int pfix;
int n_chars;
unsigned int dictionary_flags[2];
unsigned int dictionary_flags2[2];
int end_type=0;
int prefix_type=0;
int prefix_stress;
char *wordx;
char phonemes[N_WORD_PHONEMES];
char *ph_limit;
@@ -1007,7 +1009,6 @@ if((wmark > 0) && (wmark < 8))

while(((length < 3) && (length > 0))|| (word_length > 1 && Unpronouncable(tr,wordx)))
{
char *p;
// This word looks "unpronouncable", so speak letters individually until we
// find a remainder that we can pronounce.
emphasize_allcaps = 0;
@@ -1311,9 +1312,15 @@ if(dictionary_flags2[0] & FLAG_ABBREV)

/* determine stress pattern for this word */
/******************************************/
/* NOTE: this also adds a single PAUSE if the previous word ended
in a primary stress, and this one starts with one */
if(prefix_flags || (strchr(prefix_phonemes,phonSTRESS_P)!=NULL))
prefix_stress = 0;
for(p = prefix_phonemes; *p != 0; p++)
{
if((*p == phonSTRESS_P) || (*p == phonSTRESS_P2))
{
prefix_stress = *p;
}
}
if(prefix_flags || (prefix_stress != 0))
{
if((tr->langopts.param[LOPT_PREFIXES]) || (prefix_type & SUFX_T))
{
@@ -1698,7 +1705,7 @@ static int TranslateWord2(Translator *tr, char *word, WORD_TAB *wtab, int pre_pa
return(flags);
}

if(flags & FLAG_COMBINE)
if((flags & FLAG_COMBINE) && !(wtab[1].flags & FLAG_PHONEMES))
{
char *p2;
int ok = 1;
@@ -1800,6 +1807,7 @@ static int TranslateWord2(Translator *tr, char *word, WORD_TAB *wtab, int pre_pa
// ?? Option to set the word-stress according to language1 rules eg. lang=fr)
if(ChangeEquivalentPhonemes(tr, switch_phonemes, (char *)p))
{
// Phonemes have been converted from the foreign language to the native language
switch_phonemes = -1;
}

@@ -1807,6 +1815,10 @@ static int TranslateWord2(Translator *tr, char *word, WORD_TAB *wtab, int pre_pa
{
strcpy(dictionary_name, old_dictionary_name);
SelectPhonemeTable(voice->phoneme_tab_ix);

// leave switch_phonemes set, but use the original phoneme table number.
// This will suppress LOPT_REGRESSIVE_VOICING
switch_phonemes = voice->phoneme_tab_ix; // original phoneme table
}
}

@@ -2303,6 +2315,7 @@ void *TranslateClause(Translator *tr, FILE *f_text, const void *vp_input, int *t
char *p;
int j, k;
int n_digits;
int individual_digits;
int charix_top=0;

short charix[N_TR_SOURCE+4];
@@ -2338,7 +2351,9 @@ void *TranslateClause(Translator *tr, FILE *f_text, const void *vp_input, int *t
for(p=source; *p != 0; p++)
fputc(*p, f_logespeak);
fprintf(f_logespeak,"ENDCLAUSE\n");
fflush(f_logespeak);
}
p = source;

charix[charix_top+1] = 0;
charix[charix_top+2] = 0x7fff;
@@ -2947,7 +2962,11 @@ if((c == '/') && (tr->langopts.testing & 2) && IsDigit09(next_in) && IsAlpha(pre
words[word_count].pre_pause = 8;
if(word_count > 0)
{
words[word_count-1].flags |= FLAG_LAST_WORD;
ix = word_count-1;
while((ix > 0) && (IsBracket(sbuf[words[ix].start])))
ix--; // the last word is a bracket, mark the previous word as last
words[ix].flags |= FLAG_LAST_WORD;

// FLAG_NOSPACE check to avoid recognizing .mr -mr
if((terminator & CLAUSE_DOT) && !(words[word_count-1].flags & FLAG_NOSPACE))
words[word_count-1].flags |= FLAG_HAS_DOT;
@@ -2962,8 +2981,8 @@ if((c == '/') && (tr->langopts.testing & 2) && IsDigit09(next_in) && IsAlpha(pre
char *pn;
char *pw;
int nw;
char number_buf[60];
WORD_TAB num_wtab[15]; // copy of 'words', when splitting numbers into parts
char number_buf[150];
WORD_TAB num_wtab[50]; // copy of 'words', when splitting numbers into parts

// start speaking at a specified word position in the text?
count_words++;
@@ -2984,7 +3003,7 @@ if((c == '/') && (tr->langopts.testing & 2) && IsDigit09(next_in) && IsAlpha(pre
{
// Languages with 100000 numbers. Remove thousands separators so that we can insert them again later
pn = number_buf;
while(pn < &number_buf[sizeof(number_buf)-3])
while(pn < &number_buf[sizeof(number_buf)-20])
{
if(iswdigit(*pw))
{
@@ -3010,15 +3029,19 @@ if((c == '/') && (tr->langopts.testing & 2) && IsDigit09(next_in) && IsAlpha(pre

for(n_digits=0; iswdigit(word[n_digits]); n_digits++); // count consecutive digits

if((n_digits > 4) && (word[0] != '0'))
if(n_digits > 4)
{
// word is entirely digits, insert commas and break into 3 digit "words"
number_buf[0] = ' ';
pn = &number_buf[1];
nx = n_digits;
nw = 0;
individual_digits = 0;

if((n_digits > tr->langopts.max_digits) || (word[0] == '0'))
words[ix].flags |= FLAG_INDIVIDUAL_DIGITS;

while(pn < &number_buf[sizeof(number_buf)-3])
while(pn < &number_buf[sizeof(number_buf)-20])
{
if(!isdigit(c = *pw++) && (c != tr->langopts.decimal_sep))
break;

+ 14
- 12
src/translate.h View File

@@ -108,6 +108,7 @@
#define FLAG_HAS_DOT 0x10000 // dot after this word
#define FLAG_COMMA_AFTER 0x20000 // comma after this word
#define FLAG_MULTIPLE_SPACES 0x40000 // word is preceded by multiple spaces, newline, or tab
#define FLAG_INDIVIDUAL_DIGITS 0x80000 // speak number as individual digits

#define FLAG_SUFFIX_VOWEL 0x08000000 // remember an initial vowel from the suffix
#define FLAG_NO_TRACE 0x10000000 // passed to TranslateRules() to suppress dictionary lookup printout
@@ -194,18 +195,18 @@
#define PUNCT_SAY_NAME 0x200000
#define CLAUSE_DOT 0x400000

#define CLAUSE_NONE 0 + 0x04000
#define CLAUSE_PARAGRAPH 70 + 0x80000
#define CLAUSE_EOF 40 + 0x90000
#define CLAUSE_VOICE 0 + 0x24000
#define CLAUSE_PERIOD 40 + 0x80000
#define CLAUSE_COMMA 20 + 0x41000
#define CLAUSE_SHORTCOMMA 4 + 0x41000
#define CLAUSE_SHORTFALL 4 + 0x40000
#define CLAUSE_QUESTION 40 + 0x82000
#define CLAUSE_EXCLAMATION 45 + 0x83000
#define CLAUSE_COLON 30 + 0x40000
#define CLAUSE_SEMICOLON 30 + 0x41000
#define CLAUSE_NONE ( 0 + 0x04000)
#define CLAUSE_PARAGRAPH (70 + 0x80000)
#define CLAUSE_EOF (40 + 0x90000)
#define CLAUSE_VOICE ( 0 + 0x24000)
#define CLAUSE_PERIOD (40 + 0x80000)
#define CLAUSE_COMMA (20 + 0x41000)
#define CLAUSE_SHORTCOMMA ( 4 + 0x41000)
#define CLAUSE_SHORTFALL ( 4 + 0x40000)
#define CLAUSE_QUESTION (40 + 0x82000)
#define CLAUSE_EXCLAMATION (45 + 0x83000)
#define CLAUSE_COLON (30 + 0x40000)
#define CLAUSE_SEMICOLON (30 + 0x41000)

#define SAYAS_CHARS 0x12
#define SAYAS_GLYPHS 0x13
@@ -439,6 +440,7 @@ typedef struct {
int min_roman;
int thousands_sep;
int decimal_sep;
int max_digits; // max number of digits which can be spoken as an integer number (rather than individual digits)
const char *ordinal_indicator; // UTF-8 string

// bit 0, accent name before the letter name, bit 1 "capital" after letter name

+ 6
- 3
src/voices.cpp View File

@@ -921,7 +921,10 @@ voice_t *LoadVoice(const char *vname, int control)

phtrans[0] = 0;
sscanf(p,"%s %s %d",name,phtrans,&srate);
LoadMbrolaTable(name,phtrans,srate);
if(LoadMbrolaTable(name,phtrans,srate) != EE_OK)
{
fprintf(stderr,"mbrola voice not found\n");
}
voice->samplerate = srate;
}
break;
@@ -934,7 +937,7 @@ voice_t *LoadVoice(const char *vname, int control)

case V_FAST:
Read8Numbers(p,speed.fast_settings);
SetSpeed(2);
SetSpeed(3);
break;

default:
@@ -958,7 +961,7 @@ voice_t *LoadVoice(const char *vname, int control)
new_translator = SelectTranslator(translator_name);
}

SetSpeed(1); // for speed_percent
SetSpeed(3); // for speed_percent

for(ix=0; ix<N_PEAKS; ix++)
{

+ 1
- 1
src/vowelchart.cpp View File

@@ -611,7 +611,7 @@ void MakeVowelLists(void)
prog_log_table = (PHONEME_PROG_LOG *)malloc(ix);
if(prog_log_table == NULL)
return;
fread(prog_log_table, 1, ix, f_prog_log);
ix = fread(prog_log_table, 1, ix, f_prog_log);
fclose(f_prog_log);
prog_log_end = prog_log_table + ix;
n_prog_log = ix / sizeof(PHONEME_PROG_LOG);

+ 1
- 1
src/wavegen.cpp View File

@@ -133,7 +133,7 @@ int wcmdq_head=0;
int wcmdq_tail=0;

// pitch,speed,
int embedded_default[N_EMBEDDED_VALUES] = {0,50,175,100,50, 0,0, 0,175,0,0,0,0,0,0};
int embedded_default[N_EMBEDDED_VALUES] = {0, 50,175,100,50, 0, 0, 0,175,0,0,0,0,0,0};
static int embedded_max[N_EMBEDDED_VALUES] = {0,0x7fff,600,300,99,99,99, 0,600,0,0,0,0,4,0};

#define N_CALLBACK_IX N_WAV_BUF-2 // adjust this delay to match display with the currently spoken word

Loading…
Cancel
Save