Browse Source

[1.44.13]

Speed increase.  Added the "sonic" routines by Bill Cox to reduce the length of eSpeak's sound output data, so as to make the speaking speed faster.

Ordinal numbers: Some languages (el,es) use the ordinal form of hundreds and tens part of a number, as well as the units part.  Added language option NUM2_MULTIPLE_ORDINAL.


git-svn-id: https://espeak.svn.sourceforge.net/svnroot/espeak/trunk@254 d46cf337-b52f-0410-862d-fd96e6ae7743
master
jonsd 14 years ago
parent
commit
1649824b33
44 changed files with 3659 additions and 1124 deletions
  1. 308
    58
      dictsource/da_list
  2. 1261
    412
      dictsource/da_rules
  3. 24
    21
      dictsource/dict_phonemes
  4. 47
    2
      dictsource/el_list
  5. 11
    8
      dictsource/en_list
  6. 29
    13
      dictsource/en_rules
  7. 37
    0
      dictsource/es_list
  8. 24
    8
      dictsource/fr_list
  9. 9
    3
      dictsource/fr_rules
  10. 39
    5
      dictsource/hu_list
  11. 134
    77
      dictsource/hu_rules
  12. 1
    0
      dictsource/it_rules
  13. 446
    0
      dictsource/nl_list
  14. 68
    9
      dictsource/nl_rules
  15. 34
    34
      dictsource/no_list
  16. 146
    140
      dictsource/no_rules
  17. 49
    5
      dictsource/ta_list
  18. 558
    153
      dictsource/ta_rules
  19. 30
    15
      phsource/compile_report
  20. 1
    1
      phsource/ph_norwegian
  21. 18
    0
      phsource/phonemes
  22. BIN
      phsource/vowel/i#_2
  23. 91
    41
      platforms/big_endian/espeak-phoneme-data.c
  24. 8
    0
      platforms/windows/espeakedit/espeakedit.dsp
  25. 1
    0
      platforms/windows/espeakedit/src/speech.h
  26. 1
    0
      platforms/windows/espeakedit/src_copy/speech.h
  27. 8
    0
      platforms/windows/windows_cmd/espeak.dsp
  28. 1
    0
      platforms/windows/windows_cmd/src/speech.h
  29. 66
    57
      platforms/windows/windows_dll/src/speak_lib.h
  30. 1
    0
      platforms/windows/windows_dll/src/speech.h
  31. 1
    0
      platforms/windows/windows_sapi/src/speech.h
  32. 8
    0
      platforms/windows/windows_sapi/ttseng.dsp
  33. 2
    2
      platforms/windows/windows_sapi/ttsengobj.cpp
  34. 5
    4
      src/Makefile
  35. 2
    1
      src/compiledata.cpp
  36. 34
    13
      src/numbers.cpp
  37. 16
    12
      src/setlengths.cpp
  38. 1
    1
      src/speak.cpp
  39. 14
    1
      src/synthdata.cpp
  40. 2
    0
      src/synthesize.h
  41. 16
    6
      src/tr_languages.cpp
  42. 2
    0
      src/translate.h
  43. 5
    2
      src/voices.cpp
  44. 100
    20
      src/wavegen.cpp

+ 308
- 58
dictsource/da_list View File

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

// This file is UTF8 encoded
// Spelling-to-phoneme words for Danish
@@ -103,7 +103,7 @@ _11 'Elv@
_12 t'Vl
_13 tR'&#d@-n // PB & changed to &#
_14 fj'ord@-n
_15 f'Emd@-n
_15 f'emt@n
_16 s'ajsd@-n
_17 s'Wd@-n // PP Y changed to W
_18 '&d@-n // PB a changed to &
@@ -153,7 +153,7 @@ _3Xo tr'&#ft@ //36.
_4Xo fWV'tyv@n@ // 42.
_5Xo halt*'Esenstyv@n@ // 52.
_6Xo tr'Esenstyv@n@ // 62.
_7Xo halfj'&rsenstyv@n@ // 72.
_7Xo h&lfj'&rsenstyv@n@ // 72.
_8Xo firsenstyv@n@ // 82.
_9Xo half'Emsenstyv@n@ // 95.

@@ -161,7 +161,7 @@ _9Xo half'Emsenstyv@n@ // 95.

den dEn $u
en e:n $u
et ed $u
et et $u
her $u
kun $u
vel $u+
@@ -175,9 +175,9 @@ mens $pause // while
for fV
fordi fVd'i $pause // because - PB: changed stress
når nVr $pause // while
der d&r $u+ $u // PB changed from [d]A
der dEr $u+ $u // PB changed from [dA]
hvor v'Vr // where
hvorfor vVf'V // why - firan r deleted
hvorfor vVf'V // why - final r deleted

// prepositions
på pO $u
@@ -205,7 +205,7 @@ dét de
vi vi $u
i _i $u+
mig maj $u // me
dig daj $u
dig daj $u+
dem $u
ham $u
hende $u
@@ -240,16 +240,16 @@ jeres $u+


// auxillary verbs
er //$u // is
var vAr $u+ // was
har hAr $u+ // has
er Er $u // is/are
var vAr $u+ // was/were
har hAr $u+ // has/have
havde h&:D@ $u+ // had
vil $u+ // will
skal $u+ // shall
kan $u+ // can
skulle $u+ // should
må $u+ // may
bør $u+ // ought
bør $u+ // ought to

// letter names
b be
@@ -297,14 +297,13 @@ apple _^_EN
beachbuggy _^_EN
beachvolley _^_EN
browser _^_EN
byte _^_EN
chart _^_EN
coach _^_EN
coke _^_EN
cool _^_EN
couch _^_EN
cursor _^_EN
cowboy _^_EN
//cowboy _^_EN
debugger _^_EN
ensemble _^_FR
event _^_EN
@@ -371,7 +370,8 @@ window _^_EN
word _^_EN
warrior _^_EN

// PB English names
// PB names
august awgOsd $capital
austin _^_EN $alt
bailey _^_EN $alt
barry _^_EN $alt
@@ -384,7 +384,6 @@ cyrus _^_EN
cia _^_EN $alt
fbi _^_EN $alt
fox _^_EN
jean _^_EN $alt
jones _^_EN
larry _^_EN $alt
leroy _^_EN $alt
@@ -393,12 +392,12 @@ mansfield _^_EN $alt
mahoney _^_EN $alt
montreal _^_EN $alt
oregon _^_EN $alt
paul _^_EN $alt
piccadilly _^_EN
reynolds _^_EN $alt
purvis _^_EN
washington _^_EN $alt
white _^_EN $alt
chicago _^_EN $alt
//chicago _^_EN $alt

// PB French words
croquis _^_FR
@@ -454,6 +453,7 @@ personage $alt
plamage $alt
plantage $alt
platmenage $alt
potage $alt
ravage $alt
reportage $alt
sabotage $alt
@@ -466,6 +466,71 @@ takkelage $alt
tonnage $alt
trikotage $alt

// PB final -abel - stressed a
acceptabel $alt
affabel $alt
aimabel $alt
amortisabel $alt
analysabel $alt
appellabel $alt
applikabel $alt
deklinabel $alt
demontabel $alt
differentiabel $alt
diskutabel $alt
disputabel $alt
durabel $alt
fashionabel $alt
favorabel $alt
formidabel $alt
inacceptabel $alt
inkommensurabel $alt
irritabel $alt
kapabel $alt
kassabel $alt
komfortabel $alt
kommensurabel $alt
kommutabel $alt
komparabel $alt
kondemnabel $alt
konfiskabel $alt
konstabel $alt
kontrollabel $alt
konvenabel $alt
konversabel $alt
kritisabel $alt
kurabel $alt
//mirabel $alt
miserabel $alt
mutabel $alt
navigabel $alt
negligeabel $alt
negotiabel $alt
notabel $alt
operabel $alt
parabel $alt
passabel $alt
portabel $alt
praktikabel $alt
praktisabel $alt
profitabel $alt
præsentabel $alt
realisabel $alt
remarkabel $alt
rentabel $alt
reparabel $alt
respektabel $alt
risikabel $alt
ræsonnabel $alt
spendabel $alt
tolerabel $alt
trafikabel $alt
transportabel $alt
variabel $alt
venerabel $alt
veritabel $alt
vulnerabel $alt

// PB adjectives and nouns with final -ant - stressed a
acceptant $alt
adjudant $alt
@@ -1496,6 +1561,84 @@ valens $alt
virulens $alt
ækvivalens $alt

// PB final -eret: stressed e ['er@D]
affekteret $alt
alkoholiseret $alt
altereret $alt
antikveret $alt
assorteret $alt
avanceret $alt
balanceret $alt
beneficeret $alt
blaseret $alt
bomberet $alt
civiliseret $alt
decideret $alt
delegeret $alt
demineraliseret $alt
deprimeret $alt
depriveret $alt
deputeret $alt
derangeret $alt
detaljeret $alt
determineret $alt
diplomeret $alt
dissemineret $alt
distingveret $alt
distraheret $alt
domicileret $alt
echaufferet $alt
eksalteret $alt
eloxeret $alt
emanciperet $alt
facetteret $alt
faconneret $alt
falleret $alt
fashioneret $alt
filipenseret $alt
forceret $alt
hasarderet $alt
indigneret $alt
inkarneret $alt
interesseret $alt
kommitteret $alt
kompliceret $alt
konfedereret $alt
konfødereret $alt
kongestioneret $alt
konsterneret $alt
korsetteret $alt
kreneleret $alt
kultiveret $alt
kuperet $alt
kæfereret $alt
lamelleret $alt
maniereret $alt
manieret $alt
markeret $alt
meleret $alt
outreret $alt
passioneret $alt
perialiseret $alt
pikeret $alt
prostitueret $alt
raffineret $alt
reflekteret $alt
reglementeret $alt
renommeret $alt
reserveret $alt
resigneret $alt
retarderet $alt
retsineret $alt
rutineret $alt
selvcentreret $alt
situeret $alt
sofistikeret $alt
sordineret $alt
taljeret $alt
tekstureret $alt
tempereret $alt

// PB words with final -ent - stressed e
abonnement $alt
abonnent $alt
@@ -1855,6 +1998,46 @@ venezuelan $alt
victorian $alt
århusian $alt

// PB nouns with final -enser - next to last syllable is strtessed
athenienser $alt
bergenser $alt
bogenser $alt
cistercienser $alt
dispenser $alt
esbjergenser $alt
fåborgenser $alt
grenåenser $alt
grenågenser $alt
herningenser $alt
hjørringenser $alt
hobrogenser $alt
kalundborgenser $alt
kartaginienser $alt
koldingenser $alt
kretenser $alt
køgenser $alt
lundenser $alt
mariagergenser $alt
nyborgenser $alt
nykøbingenser $alt
palæstinenser $alt
ringkøbingenser $alt
ripenser $alt
roskildenser $alt
rudkøbingenser $alt
sakskøbingenser $alt
silkeborgenser $alt
skanderborgenser $alt
stegenser $alt
stubbekøbingenser $alt
svendborgenser $alt
sønderborgenser $alt
vardenser $alt
vejlenser $alt
viborgenser $alt
vordingborgenser $alt
ålborgenser $alt

// PB country names with final -ien - stress on previous syllable
abessinien $alt
abkhasien $alt
@@ -1948,6 +2131,7 @@ falkeblik $alt
folkloristik $alt
fonetik $alt
fysik $alt
metafysik $alt
fysiognomik $alt
genetik $alt
germanistik $alt
@@ -2842,7 +3026,7 @@ rubin $alt
ruin $alt
sakkarin $alt
sardin $alt
satin s&t'EN $alt
satin $alt
serpentin $alt
sordin $alt
(stand-in) st&nd'in $alt
@@ -4817,6 +5001,7 @@ delagtig $alt
diskontinuerlig $alt
drikfældig $alt
drilagtig $alt
uduelig $alt // PB uduelig
dumdristig $alt
dværgagtig $alt
dybsindig $alt
@@ -4918,6 +5103,7 @@ godvillig $alt
grangivelig $alt
grinagtig $alt
guddommelig $alt
gudelig $alt // PB for "ugudelig"
gudfrygtig $alt
gudsbespottelig $alt
gudsjammerlig $alt
@@ -5187,6 +5373,7 @@ binderi $alt
biometri $alt
bizarreri $alt
broderi $alt
bogholderi $alt
bryderi $alt
bryggeri $alt
brænderi $alt
@@ -5555,7 +5742,7 @@ analysere $alt
angliser $alt
animer $alt
annekter $alt
annoncer $alt
annoncere $alt
annoter $alt
annuller $alt
anodiser $alt
@@ -5593,7 +5780,7 @@ atomiser $alt
atrofier $alt
attacher $alt
attaker $alt
attester $alt
attestere $alt
attraher $alt
attraper $alt
attribuer $alt
@@ -5632,7 +5819,7 @@ benedicer $alt
bestialiser $alt
bibliografer $alt
billettere $alt
biografer $alt
biografere $alt
biopter $alt
bivuaker $alt
blamer $alt
@@ -5792,7 +5979,7 @@ divisionere $alt
docer $alt
dogmatiser $alt
doktorere $alt
dokumenter $alt
dokumentere $alt
dollere $alt
domesticer $alt
dominer $alt
@@ -5905,7 +6092,7 @@ ferniser $alt
fertiliser $alt
feter $alt
figurere $alt
fikser $alt
fiksere $alt
fiktionaliser $alt
filere $alt
filetere $alt
@@ -5913,7 +6100,6 @@ filmatiser $alt
filosofer $alt
filtrer $alt
finansier $alt
finere $alt
fingere $alt
fingerer $alt
finjuster $alt
@@ -5937,15 +6123,15 @@ formuler $alt
fortificer $alt
fosfatere $alt
fosforescer $alt
fotografer $alt
fotokopier $alt
fotografere $alt
fotokopiere $alt
fourager $alt
fragmenter $alt
fraktioner $alt
fragmentere $alt
fraktionere $alt
franker $alt
frapper $alt
frasere $alt
ffraterniser $alt
fraterniser $alt
frekventer $alt
frisere $alt
friter $alt
@@ -6005,7 +6191,7 @@ omgruppere $alt
gruyere gryj'E:r $alt
græciser $alt
grønlandiser $alt
guillotiner $alt
guillotinere $alt
gummiere $alt
gymnasticer $alt
gæsterer $alt
@@ -6277,7 +6463,7 @@ konstater $alt
konstituer $alt
konstringer $alt
konstruer $alt
konsuler $alt
konsulere $alt
konsulter $alt
konsumer $alt
kontaminer $alt
@@ -6390,16 +6576,16 @@ manifester $alt
manipuler $alt
mankere $alt
manuducer $alt
manøvrer $alt
marcher $alt
manøvrere $alt
marchere $alt
marginaliser $alt
marginer $alt
mariner $alt
marginere $alt
marinere $alt
markere $alt
marmorer $alt
maroder $alt
martyriser $alt
masker $alt
maskere $alt
maskiniser $alt
maskuliniser $alt
massakrer $alt
@@ -6462,6 +6648,7 @@ mystificer $alt
mytologiser $alt
mæandrer $alt
møblere $alt
ommøbler $alt
narkotiser $alt
nasalere $alt
nationaliser $alt
@@ -6573,7 +6760,7 @@ piker $alt
pilotere $alt
pioner $alt
pipetter $alt
pirater $alt
piratere $alt
piruetter $alt
pivoter $alt
pizziker $alt
@@ -6642,7 +6829,7 @@ proskriber $alt
prospekter $alt
prostituer $alt
proteger $alt
protester $alt
protestere $alt
protokollere $alt
provianter $alt
provoker $alt
@@ -6850,9 +7037,9 @@ skamfer $alt
skandaliser $alt
skandere $alt
skandinaviser $alt
skeletter $alt
skelettere $alt
skematiser $alt
skitser $alt
skitsere $alt
skolemesterer $alt
skraver $alt
skrædderer $alt
@@ -6864,11 +7051,11 @@ snedkerer $alt
socialiser $alt
soigner $alt
solidariser $alt
sonder $alt
sorter $alt
sondere $alt
sortere $alt
soupere $alt
spadser $alt
spalier $alt
spaliere $alt
spankuler $alt
spatier $alt
specialiser $alt
@@ -7002,14 +7189,14 @@ trivialiser $alt
trompeter $alt
trunker $alt
//trænere $alt
tunneler $alt
tunnelere $alt
turner $alt
tuscher $alt
typificer $alt
typiser $alt
typografer $alt
tyranniser $alt
uniformer $alt
uniformere $alt
urbaniser $alt
urger $alt
uriner $alt
@@ -7088,6 +7275,7 @@ konventionel $alt
kornel $alt
kriminel $alt
kriminal $alt // PB as in "kriminalroman"
kulturel $alt
maskinel $alt
model $alt
nominel $alt
@@ -7124,6 +7312,46 @@ sportel $alt
tarantel $alt
karamel $alt

// PB final -iel - stressed e
adverbiel $alt
arteriel $alt
artificiel $alt
bakteriel $alt
ceremoniel $alt
differentiel $alt
eksistentiel $alt
eksponentiel $alt
essentiel $alt
finansiel $alt
industriel $alt
judiciel $alt
klimakteriel $alt
kommerciel $alt
konfidentiel $alt
kontroversiel $alt
materiel $alt
mikrobiel $alt
ministeriel $alt
notariel $alt
officiel $alt
partiel $alt
potentiel $alt
principiel $alt
provinsiel $alt
præferentiel $alt
præsidentiel $alt
referentiel $alt
sektoriel $alt
sekventiel $alt
seriel $alt
speciel $alt
substantiel $alt
tangentiel $alt
tendentiel $alt
territoriel $alt
triviel $alt
vektoriel $alt

// PB nouns ending with -ering - stressed e
abandonnering $alt
abdicering $alt
@@ -7251,7 +7479,6 @@ bureaukratisering $alt
cadmiering $alt
camouflering $alt
campering $alt
catering keiteriN $alt
celebrering $alt
cementering $alt
censurering $alt
@@ -9095,6 +9322,7 @@ refleksion $alt
reformation $alt
refraktion $alt
refusion $alt
relegion $alt
region $alt
regression $alt
reifikation $alt
@@ -9231,6 +9459,7 @@ vokalisation $alt
dodekafon $alt
frankofon $alt
grammofon $alt
grafofon $alt
homofon $alt
hydrofon $alt
kolofon $alt
@@ -9291,26 +9520,28 @@ teknonom $alt

// -on list
ballon b&l'VN $alt
beton bet'VN $alt
beton $alt
bouillon $alt
diakron $alt
interferon $alt
epsilon 'ebsilVn $alt
futon fut'VN $alt
futon $alt
føljeton fWljet'Vn $alt
facon f&s'Vn $alt
facon $alt
lazaron $alt
makron $alt
melon $alt
neuron $alt
kupon kup'VN $alt
kupon $alt
postillon p,Vsdilj'VN $alt
perron pER'VN
pompon $alt
progesteron $alt
salon s&l'VN $alt
sifon sif'VN $alt
sifon $alt
synkron $alt
talon t&l'VN $alt
tampon tAmp'VN $alt
talon $alt
tampon $alt
testosteron $alt

// -tron list (on)
@@ -9329,7 +9560,6 @@ synkrotron $alt
// -kon list (VN/Vn/on)
akrostikon akrVsdik'Vn $alt
balkon b&lk'Vn $alt
diakon $alt
distikon distik'Vn $alt
flakon fl&k'VN $alt
@@ -9802,7 +10032,6 @@ gabardine $alt
gelatine $alt
georgine $alt
grenadine $alt
guillotine gijut'i:n@ $alt
kabine $alt
kantine $alt
kavatine $alt
@@ -10768,7 +10997,7 @@ blegrød blajrWD
blegrøde blajrWD@
//blege blaj@
blegemiddel bl&#j@mid@l
//blegansigt bl&#jansegt
(rub og stub) R'Ob||V||sd'Ob
slags sl'ags // sort, type
tre tr'e // the number 3
//barber bAb'er // PB barber
@@ -10843,6 +11072,7 @@ billie bile // PB the name Billie
(coney island) 'kouni||'ajl3nd // PB
(union station) junj3n||steisj@n // PB
(secret service) sigred||s'Wvis
(happy hour) h&pi||'AuV
chevrolet sjEvrol'e
saigon sajg3-n // PB Saigon
managua m&n'&:gw&
@@ -10865,6 +11095,7 @@ emp $abbrev
hbo $abbrev // TV station
usa $abbrev
who $abbrev $allcaps // PB World Health Organization
ussr $abbrev $allcaps // Sovjet Union
vsop $abbrev
eu $abbrev
ekg $abbrev
@@ -10885,11 +11116,13 @@ pharm fA:rm? $hasdot // PB fx cand. pharm.
phil fil/3 $hasdot // PB fx cand. phil.
bh $abbrev
(bh'er) b,e:h'O:V
(l'chaim) l&kr'ajm
scsi skVsi // PB

// Try to catch errors

(et kvarter) et||kvA'ter // PB
(mit kvarter) met||kvA'ter // PB
(mit kvarter) mit||kvA'ter // PB
(vores kvarter) vV:s||kvA'ter // PB
(deres kvarter) de@s||kvA'ter // PB
(det kvarter) de||kvA'ter // PB
@@ -10918,11 +11151,12 @@ sig si $capital //PB Sig = si with capital S - Sig det med blom
(vi steg) vi||st'e
(de steg) di||st'e
(alle steg) &l3||st'e
(vandet steg) v&n@D||st'e
steg sdaj $atend $sentence
steget ste@d
// PB problem with noun "hav" = ocean and verb "hav(e)" = to have [hAu]/[h&v]
(et hav) ed||h'Au // PB "et hav" = an ocean - not "hav en god dag" - have a nice day
// PB problem with lyst = blond, light coloured and lyst = would like to, feel like
// PB problem with lyst - blond = light coloured; and lyst = would like to, feel like
(lyst hår) lYst||hOr
(lys farve) lYs||fArw@
(er lyst) &r||l'Ysd
@@ -10941,6 +11175,7 @@ legenderne leg'EndVn3s
(lige så) li@||sV
(en så) en||s'V
(mig så) maj||sV
(men så) men||sV
(så meget) sV||m'a:j@D
(så mange) sV||m'aN3
(så er) sV||'Er
@@ -10950,12 +11185,27 @@ legenderne leg'EndVn3s
(så højt) sV||h'Vjt
(så var) sV||v'Ar
(så længe) sV||l'EN3
(så være) sV||v'EV
(så må) sV||m'O
(så har) sV||har
(se så) se||sV
(så sent) sV||sent
(ville så) vil3||sV
så sV $sentence $atstart
(hvad så) v&||sV $atend // "Hvad så?"
(virkede så) v'irkeD@||sV
(kom så) kVm||sV
(koste med) kosd@||mED
(lige koste) li@||kosd@ // PB "lige koste fejer bedst"
(en kanoner) en||k&non'er
nå nV $atstart // PB Nå, der er du

// PB stress in word combinations
(dem her) d'Em||her
(dem der) d'Em||der
(den der) d'En||der
(den her) d'En||her
(det her) d'e||her
(det der) d'e||der
(de her) d'i||her
(de der) d'i||der

+ 1261
- 412
dictsource/da_rules
File diff suppressed because it is too large
View File


+ 24
- 21
dictsource/dict_phonemes View File

@@ -53,7 +53,7 @@ p r s S t T v w
x z


Dictionary da_dict 2010-08-26
Dictionary da_dict 2010-10-28

& &# 0 3 @ @- a A
e E i o O u V W
@@ -62,18 +62,19 @@ W# y Y
* - : ? b B d D
dZ f g h j J k l
l/2 l/3 m n N p r R
s S t T tS v w z
s S t T tS v w x
z


Dictionary hu_dict 2010-09-13
Dictionary hu_dict 2010-11-17

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

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


Dictionary de_dict 2010-08-25
@@ -89,7 +90,7 @@ n N p pF r s S t
tS ts v w x z Z


Dictionary el_dict 2010-08-26
Dictionary el_dict 2010-11-16

a aI e i o oI u

@@ -99,7 +100,7 @@ p Q r R s s; t T
ts v x z z;


Dictionary en_dict 2010-09-14
Dictionary en_dict 2010-11-04

0 3 3: @ @- @2 @5 @L
a a# A: A@ aa aI aI@ aU
@@ -126,7 +127,7 @@ s S t T tS ts v w
x z Z


Dictionary es_dict 2010-07-28
Dictionary es_dict 2010-11-16

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


Dictionary fr_dict 2010-09-04
Dictionary fr_dict 2010-11-15

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


Dictionary ta_dict 2010-09-14
Dictionary ta_dict 2010-11-15

a a: aI aU e E e: i
I i: o o: u U u2 u:
@@ -248,7 +249,7 @@ n^# p Q r R r# R2 s
S s2 t T tl# v x z


Dictionary it_dict 2009-04-03
Dictionary it_dict 2010-11-10

@- a a/ aI aU e E eI
i I o O u
@@ -324,7 +325,7 @@ k l m n p R s S
t tS v w x


Dictionary nl_dict 2010-09-13
Dictionary nl_dict 2010-11-10

8 @ @- a A a: A~ E
E2 e: EI eU i I o O
@@ -337,9 +338,9 @@ n^ p Q r s S t tS
v v# w x z Z


Dictionary no_dict 2010-01-20
Dictionary no_dict 2010-10-25

@ @2 a A a: A: AI aI
@ a A a# a: A: AI aI
aU E E: e: I i: O o:
OI U u- u-: u-I u: W y
y: Y: Yy
@@ -523,12 +524,14 @@ l m n N p r s t
tS v w z


Dictionary am_dict 2010-01-17
Dictionary am_dict 2010-10-02

@ a e i o u y

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


Dictionary ml_dict 2009-10-10

+ 47
- 2
dictsource/el_list View File

@@ -48,9 +48,54 @@ _1M2 'ena|ekatom'irio
_0M2 ekatom'iria
_1M3 'ena|Disekatom'irio
_0M3 Disekatom'iria
_dpt k'oma
_dpt _k'oma
_. tel'ia
_#ος %os // ordinal suffix

_#ος os // ordinal suffix
_#η i
_#ο o
_ord os // default ordinal suffix

// ordinal numbers
_0o miDenik'
_1o pr'ot
_2o D'efter
_3o tr'it
_4o t'etart
_5o p'empt
_6o 'ekt
_7o 'evDom
_8o 'oQDo
_9o 'enat
_10o D'ekat
_11o enD'ekat
_12o DoD'ekat
_1Xo D'ekat
_2Xo ikost'
_3Xo triakost'
_4Xo tessarakost'
_5Xo pedikost'
_6Xo eksikost'
_7Xo evDomikost'
_8Xo oQDoIkost'
_9Xo enenikost'
_1Co ekatost'
_2Co D;akos;ost'
_3Co tr;akos;ost'
_4Co tetrakos;ost'
_5Co pedakos;ost'
_6Co eksakos;ost'
_7Co eptakos;ost'
_8Co oktakos;ost'
_9Co eneakos;ost'
_0M1o Cil^ost'
_1M1o Cil^ost'
_2M1o DisCil^ost'
_3M1o trisCil^ost'


// symbols
% t'is||ekat'o

// articles
ο o $u // definate article

+ 11
- 8
dictsource/en_list View File

@@ -675,6 +675,7 @@ beryl bEr@L
basal beIs@L
best bEst
beta bi:t@
betake bI2teIk
beverage bEv@rI2dZ
bias baI@s
biased baI@st
@@ -811,6 +812,7 @@ closer kloUs3
closely kloUslI $verbf // not kloUzlI
closet kl0zI2t
cloth kloUD $verb
c'mon k@m0n
coauthor koU'O:T3
cobol koUb0l
cocoa koUkoU
@@ -1253,7 +1255,6 @@ hmmm h'@m
hmpf h'@mpf
holme hoUm
holster hoUlst3
holy hoUlI
homeowner hoUmoUn3
homepage hoUmpeIdZ
hominem h0mInEm
@@ -1351,13 +1352,11 @@ iron aI@n
irony aIr@nI
isosceles aIs'0s@li:z
itinerary aIt'In@r@rI
ivory aIv@rI

jagged dZagI2d
japan dZ@pan
jasmine dZazmIn
jesus dZi:z@s
joky dZoUkI
jour ZU@ // french
jukebox dZu:kb0ks
july dZu:l'aI
@@ -1508,7 +1507,7 @@ militia m@lIS@
minibus mInIbVs
mining maInI2N // not mini
minuet mInju:'Et
minutely maIn'ju:tlI
minute mInIt $onlys
mirage mIrA:Z
misery mIz@rI
misled mIsl'Ed
@@ -1708,7 +1707,7 @@ pharaoh fe@roU
philistine fIlI2staIn
philosophy fI2l0s@fI
phoenix fi:nIks
photograph foUt@graf
photographer f@t'0gr@f@
piano pI'anoU
piecemeal p'i:sm,i:l
pier pi@3
@@ -1728,10 +1727,9 @@ piteous pIti@s
pituitary $2
plaguing pleIgIN
plicate $2
plugin plVgIn
plumber plVm3
plus plVs
poky poUkI
poly p0lI
politer p@l'aIt3
politic p0l@tIk
poll poUl
@@ -1956,10 +1954,11 @@ saucepan sO:sp@n
saudi saUdI
saute sO:teI
says sEz
scaly skeIlI
salmon sam@n
scalpel skalp@L
scared ske@d
scaring ske@rI2N
scaring ske@rI2
scenic si:nIk
scald sk0ld
scepter sEpt3
@@ -2345,6 +2344,7 @@ Cheadle tSi:d@L
Cheshire tSES3
Chiswick tSIzIk
Clwyd klu:Id
Dagenham dag@n@m
Devon dEv@n
Dolgellau d0lg'EClaI
Dover doUv3
@@ -2605,6 +2605,7 @@ Alison alI2s@n
Amanda $2
Amy eImI
Andre 0ndreI
Anita a#ni:t@
Anthony ant@nI
Anton ant0n
Aoife i:f@
@@ -2711,6 +2712,7 @@ Leroy li:rOI
Liam li:@m
Lindsay lInzi
Llewellyn l#@w'ElIn
Llywelyn l#@w'ElIn
Lois loUIs
Louis lu:I
Louise lu:w'i:z
@@ -2806,6 +2808,7 @@ Chrysler kraIzl3
Disney dIznI
Dolce d0ltSeI
Dvorak d@-vo@Zak
Gibson gIbs@n
Hades heIdi:z
Patel pa#tEl
Primavera pri:m@v'e@r@

+ 29
- 13
dictsource/en_rules View File

@@ -564,6 +564,7 @@
al (ity 'al
p) al (et al
qu) al (@ 0l
c) all (K O:l
b) al (m A:
c) al (m A:
p) al (m A:
@@ -1152,7 +1153,7 @@
_) bug (le bju:g
@) bury (_S4i br%I
?3 @) bury (_S4i bEr%I
_) by baI
_) byte baIt


.group be
@@ -1187,6 +1188,8 @@
be (see bI2
be (sie bI2
_) be (sto bI2
_) beta b,i:t@
?3 _) beta b,eIt@
_) be (th bE
be (tray bI2
_) be (w bI2
@@ -1553,6 +1556,7 @@
delu (g dElju:
de (lv+ dE
de (ma dI2
de (magog dE
demea dI2m'i:
de (men dI2
de (mise dI2
@@ -2256,6 +2260,8 @@
&) erize (_ @raIz
&) eris (a @raIz
&) eriz (a @raIz
@) er (Cal_ '3:
@) er (Cic_ '3:
p) ermea (b 3:mi@
_f) erme (nt %3:mE
er (nal_ '3:
@@ -2507,6 +2513,7 @@
bo) g (Ey g
&) gia (_ dZ@
&) gia (C_ dZ@
go) g (ic_ g
&) giu (m dZ@
_) g (id g
_) g (im g
@@ -2522,6 +2529,7 @@
gue (_ g
_) gue gE
_) guer (n g3:
o) g (y_ g

.group h
h h
@@ -2529,7 +2537,7 @@
h (_
_B) h
@) hammed h'amId
A) han (_ h'an // places
A) han (_ han // places
ha (st heI
_) he' %hi:
@) head (_S4 hEd
@@ -2565,6 +2573,7 @@
i (Bee I
i (Bel_ I
i (Bet_ I
_) i (Bo aI
i (CCi_ 'I
XC) i (Ca_ i:
@) i (Cate_ =I
@@ -2932,7 +2941,7 @@
_) in (disP2 ,In
_) in (divP2 ,In
_) in (dol In
in (exP2 ,In
_) in (exP2 ,In
_) inex (or In'Eks
_) infa (l %Infa
_) in (fam In
@@ -3044,6 +3053,7 @@
in (ee In
c) in (e In
inc) in (e In
g) in (e In
bas) in (_ @n
@c) ine (_ i:n
&d) ine (_ i:n
@@ -3070,9 +3080,12 @@
infor (matio Inf3
ino (_ 'i:noU
_m) in (us aIn
_m) inu (te aIn'ju:
_m) inute (m InIt
_) intra Intr@
_) intra (CC %Intra


.group io
io (_ =I2oU
?7 io (_ =i:oU
@@ -3176,7 +3189,6 @@
an) ism (_S3d Iz@m
@iB) ism (_S3d Iz@m
@) ism (_S3de Iz@m
_) is (o aIs
is (o_ aIz
is (or_ aIz
issimo (_ 'IsImoU
@@ -3537,6 +3549,7 @@
o (Ba_ 'oU
_) o (Bal oU
XC) o (Bal oU
X) o (By oU
o (Be# oU
o (BeCo_ 0
o (BenC oU
@@ -3579,8 +3592,7 @@
_) obs (er %0bz
obso (l 0bs@
o (bstin 0
o (bt %0
o (bu %0
_) o (bt %0
o (by_ oU
f) o (cA oU
_l) o (cA oU
@@ -3601,6 +3613,7 @@
o (cre_ 'oU
_h) o (cu oU
cr) o (cu oU
_b) o (dy 0
cust) o (d @
k) o (dA oU
meth) o (d_ @
@@ -3643,6 +3656,7 @@
o (geny '0
r) o (ger 0
l) o (gies @
@) ographer '0graf@
r) ogue oUg
v) ogue oUg
@@) ogue 0g
@@ -3667,6 +3681,7 @@
oix (_ wa
o (ky_ oU
@) o (lo_ 0
@) ometer '0mIt@
?3 g) o (ng O
?3 r) o (ng O
?3 s) o (ng O
@@ -3731,7 +3746,6 @@
oy (A_ 'OI
d) o (zen V
_) o (zo oU
o (zy_ oU


.group ol
@@ -3875,7 +3889,6 @@
w) on (k 0n
w) on (t 0n
&) ony (_ @n%I
XC) ony oUnI
onymous '0nIm@s

.group oo
@@ -4045,7 +4058,7 @@
exp) ost 0st
hyp) ost 0st
osure 'oUZ3
_C) os (y oUz
X) os (y oUz

.group ou
ou aU
@@ -4289,8 +4302,7 @@
photo foUtoU
photon foUt0n
photocop foUt@k0p
photo (grapher f@t0
photo (graphy f@t0
phot (ograph foUt
photo (met foUt'0
_) phyco f,aIkoU
p (hole p
@@ -4358,6 +4370,7 @@
_) pre (diP3 pr%i
_) pre (dic pr%I
_) pre (emp pr%I
_) pre (fec pri:
_) pre (feren prE
pre (fix pri:
_) pre (gn prE
@@ -4870,7 +4883,7 @@
ther (_ D3
ther (er D3
th (erC D
there (_ D3 // thering
there (_ D3 // thering
th (est D
ea) th (er D
n) th (er+ T
@@ -4949,6 +4962,7 @@
u (ga_ 'u:
f) u (gal 'ju:
ug (er_ u:g
pl) ug Vg
s) ugge (st @dZE
h) ugh ju:
mp) ug (n ju:
@@ -5017,7 +5031,6 @@
?5 usurp ju:z'VRp
b) us (y Iz
b) u (tch U
min) u (te I
r) u (th u:
_) u (til ju:
u (tion 'ju:
@@ -5030,6 +5043,7 @@
l) uxur VgZu:3
uy aI
uy (A_ 'u:j
u (zzi_ 'u:


.group ue
@@ -5240,6 +5254,7 @@
_) y' (CP2 j@
y (C_ I
y (CC I
XoB) y (@+ I
_) y (C@ I
_) y (n@ V
_) y (s@ V
@@ -5482,6 +5497,7 @@
α 'alf@_
ά 'alf@_
β b'i:t@_
?3 β b'eIt@_
γ g'am@_
δ d'Elt@_
ε 'EpsIl0n_

+ 37
- 0
dictsource/es_list View File

@@ -118,6 +118,43 @@ _0and i
_dpt koma
//_roman Rom'ano

// ordinal numbers
_#º o
_#ª a
_ord o

_1o p**im'E**
_2o seQ'und
_3o tERT'E**
_4o kw'a**t
_5o kint
_6o s'Ekst
_7o s'Etim
_8o Okt'aB
_9o noB'en
_10o D'ETim
_11o und'ETim
_12o DwoD'ETim
_13o DeTimotERT'E**
_14o DeTimokw'a**t
_15o DeTimok'int
_16o DeTimos'Ekst
_17o DeTimos'Eptim
_18o DeTimOkt'aB
_19o DeTimonoB'en
_2Xo Bix'Esim
_3Xo t**ix'Esim
_4Xo kwaD**ax'Esim
_5Xo kinkwax'Esim
_6Xo seQsax'Esim
_7Xo sEptwax'Esim
_8Xo Oktox'Esim
_9Xo nonax'Esim
_0Co TEnt'Esim
_1Co TEnt'Esim
_0M1o mil'Esim


vi bi // not a Roman number



+ 24
- 8
dictsource/fr_list View File

@@ -24,7 +24,7 @@

// 2006-11-18 Gilles Casse <[email protected]>
//
// Updated 2010-07-25 Michel Such <[email protected]>
// Updated 2010-10-15 Michel Such <[email protected]>
//
// * Numbers, a few abbreviations and exceptions.
//
@@ -133,9 +133,6 @@ _` aks'A~_gr'av
_{ akOlad_goS
_| bar_vErtik'al
_} akOlad_drwat
² pyis'A~s||d'Y
_« uvre||gijm'E
_» fErme||gijm'E
_’ apostr'Of
_‘ apostr'Of
_µ mikr'o
@@ -151,16 +148,29 @@ _& _e_komErsi'al
~ tilde
€ @r'o $u+
¢ sEnt
¥ iEn
¥ jEn
£ livr
± pl'yz_'u_mw'E~
± pl'yzumw'E~
× myltipli'e_p'ar
÷ diviz'e_p'ar
¼ W~_k'ar
½ W~_d@m'i
¾ trwa_k'ar
© _^_EN
® mark||depoz'e
™ markd@fabrik
¬ tirE_fakyltatif
¦ separatWr||vEtikal
© _^_en
_« uvre||gijm'E
® markdepoz'e
¯ makrO~
² pyis'A~s||d'Y
³ pyisA~s||trwa
¶ paragraf
· pwE~
¸ sedij
º d@gre
_» fErme||gijm'E
¿ pwE~||dE~terogasjO~||E~vErse


// numeric
@@ -239,6 +249,7 @@ adn ad,eEn
adsl ad,eEsEl
alt _::alt
amd a,Emde
android A~droid
aol a,oEl
api ap,ei
ascii aski
@@ -645,6 +656,7 @@ alleluia alelui'a
alterego altErego
anis anis
armageddon armagedO~
aujourd'hui aujourdui $text
auvent ovA~
beta beta
bien biE~n2
@@ -662,11 +674,13 @@ canyon kanjOn
charles Sarl
(chef d'oeuvre) chédeuvre $text
(chef d'oeuvres) chédeuvres $text
chienlit SjA~li
choeur kWr
cinema sinema
cocus kOky
couscous kuskus
delete _^_en
dengue dE~g
dernier dErnjer2
doppler dOplEr
dot dOt
@@ -692,6 +706,7 @@ gus gys
gym Zim
han _|A~
hélas elas $u+
jackpot dZakpOt
jacques Zak
karaoke karaoke
kevin kevin
@@ -947,3 +962,4 @@ venezuela venezyEla
wallis walis
futuna futuna
zimbabwe zimbabwe


+ 9
- 3
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-09-04 Michel Such <[email protected]>
// Last update: 2010-10-15 Michel Such <[email protected]>
//

// Letter classes:
@@ -37,7 +37,7 @@
// K not a vowel (i.e. consonant, space, )

.replace
œ oe
œ oe


.L01 d e l n r t u
@@ -63,7 +63,7 @@
// When these diphtonges are after a consonant folllowing e, e is not mute
.L10 ia ie io ua ue ui uo
.L11 b p
.L12 é è al ib ie l om on ré
.L12 é è aï al ib ie l om on ré

// Words ending "son" pust sound english if preceded by L13
.L13 d g k l p er hn
@@ -138,6 +138,7 @@ _C) aud (_ od // Maud
ay Ej // paye
ay (ak aj // kayak
ay (_ E // display
bb) aye (_ aj // cobbaye layer
Xl) ayer (X EjWr // player, layer
h) am (_S2 am
w) an (_ an
@@ -169,6 +170,7 @@ _) be (L15A _^_en
_) c (d se
_) ch (arism k // charisme, charismatique
_) ch (irop k // chiroptère
_) coe (la se // coelacante
a) ch (_ k // almanach
ar) c (ti // arctique
e) ch (_ k // varech
@@ -617,6 +619,7 @@ gu) eu (ler Y // gueuler

.group ë
u) ë // ambiguë
no) ë (_ e // canoë
ë E // citroën noël


@@ -936,6 +939,7 @@ _re) name _^_en
oi wa // poil
oê (l wa // poêle
om (L11 O~ // bombe, pompe
om (t O~ // comte
n) om (X O~ // nom
om (_ Om // www.web.com

@@ -1217,6 +1221,7 @@ L13) ston (_ _^_en
t (_
peti) t (_ t2
th (L12++ t
th (ArA++ t
or) th (++ t
_) th (erm t
ts (_S1 z2 // silent at end of word unless next word starts with a vowel
@@ -1358,6 +1363,7 @@ g) ton (_ _^_en // try, country
g) u (A // fatigue
g) u (ï y // ambiguïté
g) u (ë y // ambiguë
p) u (tsch u // putsch
uz (z W

// group u: English section

+ 39
- 5
dictsource/hu_list View File

@@ -187,6 +187,7 @@ _#-ikának a:nAk
(1-ike) elseje $text $alt2
(1-ikei) elsejei $text $alt2
(1-éhez) elsejéhez $text $alt2
(1-jét) elsejét $text $alt2
(2-i) másodikai $text $alt2
(2-ig) másodikáig $text $alt2
(2-étől) másodikától $text $alt2 //this is not mistake, don't change!
@@ -236,6 +237,7 @@ _#-ikának a:nAk
(0-n) nul:a:n
(00-n) nul:Anul:a:n
(0-ról) nul:a:R2o:l
(0-st) nul:a:St
(1-gyet) EJ:Et
(1-gyes) EJ:ES
(2-őt) kEt:Y:t
@@ -282,6 +284,7 @@ _#-ikának a:nAk
(8-al) n^olts:Al
(9-el) kilEnts:El
(9-cel) kilEnts:El
(9-cet) kilEntsEt
_10e tiz
_20e hus
(10-szer) ti:s:ER2
@@ -302,6 +305,8 @@ _20e hus

//Special roman number suffixes and exceptions
(XVI-ig) tizEnhAtodikig //Special roman number suffix exception
//following roman number examples need defining, but this examples are not working for example bigger than 20.
//Very interesting, if I using normal numbers (for example 12-el, Espeak general sending tizEnkEt:Y:vEl phoneme right.
(II-el) kEt:Y:vEl
(III-al) ha:R2om:Al
(IV-el) ne:J:El
@@ -310,6 +315,19 @@ _20e hus
(VII-el) he:t:El
(VIII-al) n^olts:Al
(IX-el) kilEnts:El
(X-el) ti:zzEl //I don't no why, but this exception is not working.
(XII-el) tizEnkEt:Y:vEl
(XIII-al) tizEnha:R2om:Al
(XIV-el) tizEnne:J:El //this is the right phoneme, not tizEnE:JEl
(XV-el) tizEnYt:El //this is the right phoneme, not tizEnYtEl
(XVI-al) tizEnhAt:Al //this is the right phoneme, not tizEnhAtAl
(XVII-el) tizEnhe:t:El
(XVIII-al) tizEnn^olts:Al
(XIX-el) tizEnkilEnts:El
(XX-al) hu:s:Al
XXX-al) hAR2mints:al
//etc, need do general rule similar with normal number exceptions, please test for example 22-el, 32-el, 42-el, 52-el, 40-el, 50-el, 60-al, 70-el etc
//phonemes if this is possible.
(CD-ellenőrzést) tse:de:El:EnY:R2ze:St //this is not a mistake, default Espeak spokening roman number before the ellenőrzés word

// These words mean that a dot after number, immediately preceding, does not mean an ordinal number
@@ -368,7 +386,6 @@ végén $alt
elején $alt
folyamán $alt
úton $alt
út $alt

// accent names
_lig ligAtu:R2A
@@ -424,7 +441,7 @@ LST ElESte: $allcaps
BAR bAR2 $allcaps
//SS EsEs $allcaps

(a . m .) An^n^i||m'int
(a . m .) An^n^i||m'int $hasdot
ún u:JnEvEzEt: $hasdot
dr doktoR2 $hasdot
mr mistER2 $hasdot //in hungarian we not use, but lot of books contains this word.
@@ -444,9 +461,9 @@ pl pe:lda:ul $hasdot
stb SAtYb:i $hasdot
u.n u:JnEvEzEt: $hasdot
ú.n u:JnEvEzEt: $hasdot
vö v'EZd||_'Yss2E
vö v'EZd||_'Yss2E $hasdot
(u . i .) $abbrew
NVDA Enve:de:A $allcaps


// Articles
@@ -551,6 +568,7 @@ nekem $unstressend
közül $unstressend
közé $unstressend
között $u $alt3
környékén $alt3
an $u // so many persons
as $u
ba $unstressend // into
@@ -707,7 +725,7 @@ jut $unstressend
legyen $unstressend
azt $unstressend
ezt $unstressend
út $unstressend
út $alt $unstressend
tiszt $unstressend
vesz $unstressend
cég $unstressend
@@ -1190,6 +1208,7 @@ szerzett $unstressend
járni $unstressend
döntöttek $unstressend
írt $unstressend
méltó $unstressend

// word pairs

@@ -1309,6 +1328,7 @@ _. pont
~ tildE
° fokjEl
Ft foR2int
(Ft-tal) foR2int:Al
\ bEks2lES $max3
^ fYlfEle:n^i:l

@@ -1434,3 +1454,17 @@ CD-m) cédém
(USA-ban) usában
(USA-ba) usába
(pc-n) pécén
(PC-s) pécés
//following entries are NVDA screen reader suffixes in hungarian
//normal NVDA abbreviation is defined $allcaps attribute, but if this abbrewiation is containing a suffix, need pronounce another hungarian word.
(NVDA-ba) envédéába
(NVDA-ban) envédéában
(NVDA-ból) envédéából
(NVDA-hoz) envédéához
(NVDA-nak) envédéának
(NVDA-s) envédéás
(NVDA-t) envédéát
(NVDA-tól) envédéától
(NVDA-val) envédéával



+ 134
- 77
dictsource/hu_rules View File

@@ -1,6 +1,7 @@
// Hungarian translation rules
// This file is UTF-8 encoded

// ?1 change pronmunciation of foreign names, some users don't want these rules

.replace
// allow o,u-circumflex for o,u-double-acute
@@ -8,7 +9,6 @@
û ű



.group a
a A
_) a (_ %A
@@ -33,21 +33,22 @@
@) ben (_S3 bEn

biz (A biz, // bizalmas etc.
biedermeier bi:dER2ma:jER2
?1 biedermeier bi:dER2ma:jER2
_) batthiány bAc:a:n^i
tö) bb (ször b
tö) bb (ség b
tö) bb (nyire b
tö) bb (nek b
tová) bbr (a bR2
tö) bb (soro b
tö) bb (ny b
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
bb (f b //general rule if have two b and f letter, need spokening one b letter
bb (g b //if have two b and one g or gy letter, need spokening one b letter
bb (h b //if have two b and one h letter, need spokening one b letter
bb (j b //general rule if have two b and j letter, need spokening one b letter
bb (k b
bb (l b //general rule if have two b and l letter, need spokening one b letter
bb (m b //if have two b and one m letter, need spokening one b letter
bb (n b //general rule if have two b and n letter, need spokening one b letter
bbr bR2 //general rule if have two b and r letter, need spokening one b and one r letter
bb (s b //general rule if have two b and s or sz letter, need spokening one b letter
bb (t b //if have two b and one t letter, need spokening one b letter
bb (v b //general rule if have two b and v letter, need spokening one b letter
bb (w b //general rule if have two b and w letter, need spokening one b letter
bb (z b //general rule if have two b and z or zs letter, need spokening one b letter

.group c
c ts
@@ -66,12 +67,9 @@
pol) c (so ts
por) c (sé ts
por) c (sz ts
_sto) ck (holm k
?1 _sto) ck (holm k
har) c (csoport ts
lán) c (cs ts
_) colt kolt
_) coltt kolt:
_) coltj kolc
kudar) c (sorozat ts
gerin) c ts
tán) c (cs ts
@@ -98,7 +96,7 @@ hierar) ch (i h
te) ch h
pszi) ch h
pszy) ch h
mün) ch (en h
mün) ch (en C
maso) ch (istA h
monar) ch (i h
_pe) ch h:
@@ -122,6 +120,8 @@ oligar) ch h
dts tS:
dt t:
dtszé t:se:
dd (h d //if have two d and one h letter, need spokening one d letter
ddr dR2 //if have two d and one r letter, need spokening one d and one r letter
apró) d (sz d
dsz (_S3 ts:
beszé) d (szin d
@@ -158,7 +158,7 @@ oligar) ch h
min) dny n^
ná) d d
ná) dd d:
diesel di:zEl
?1 diesel di:zEl
hí) d (szerkezet d
dühvel dyvEl
epizó) d (szerep d
@@ -213,7 +213,6 @@ menetren) dsz (erű d|s
honvé) d (sereg d
va) d (szeder d
twee) d (sapk d
fe) dd (hetetlen d
ezre) d (segé d
erő) d (szerű d
csalá) d (szociol d
@@ -226,7 +225,16 @@ menetren) dsz (erű d|s
_hol) d (sarló d
mó) d (sor d
csalá) d (segít d

standar) d (jegy d
csen) d (sértés d
szaba) d (strand d
zöl) d (sáv d
csalá) d (jog d
szaba) d (szállás d
szaba) d (szombat d
ren) dsz (erintegráció ts
máso) d (szülött d
va) d (szój d

.group dz
fogó) dz (kod ts
@@ -268,6 +276,7 @@ pilóta) dzs (ek dZ
honvé) dz (ászló d|z
smarag) dz (öld d|z
kapáló) dz z
_ó) dz (ko ts

.group e
e E
@@ -304,20 +313,24 @@ kapáló) dz z
g g
gg g:
ggy J:

_) goethe gY:tE
_) goethé gY:te:
gg (b g //if have two g and one b letter, need spokening one g letter
gg (f g //if have two g and one f letter, need spokening one g letter
gg (h g //if have two g and one h letter, need spokening one g letter
gg (l g //if have two g and one l letter, need spokening one g letter
ggr gR2 //if have two g and r letter, need spokening one g and one r letter
gg (v g //if have two g and one v letter, need spokening one g letter
?1 _) goeth gY:tE
me) g (gy g
me) ggy (fa J
me) ggy (piros J
me) ggy (vörös J
me) ggy (es J:
me) ggy (et J:
me) ggy (el J:
me) ggy (_S3 J:
me) ggy (szín J
le) g (gy g
orszá) g (gyűlés g
fü) gg (vény g
fo) g (gyűrű g
fo) g (gyö g
kuplun) g (gyár g
@@ -335,11 +348,13 @@ ritkasá) g (gyűjt g
vilá) g (gyűlöl g
gk k:
é) gh (ajla kh
se) gg (fe g
se) gg (be g
pro) g (gyak g
se) ggr (e gR2
arcüre) g (gyulladás g
bete) g (gyógyász g
me) ggy (nek J:
szöve) g (gyűjt g
ta) g (gyűl g
gu) gg (ol g

.group gy
gy J
@@ -434,6 +449,13 @@ huszone) gy (edik J:
je) gy (ért J
harmince) gy (edik J:
étvá) gy (javít J
e) gy (ember J:
né) gy (jegy J
a) gy (sebész J
tár) gy (sorozat J
e) gy (jegyű J
tár) gy (jutal J


.group h
h h
@@ -444,7 +466,6 @@ harmince) gy (edik J:
i i
@) i (_S1 i
@) ig (_S2 ig
_) itthon ithon

.group í
í i:
@@ -499,11 +520,17 @@ harmince) gy (edik J:
kossutht koSu:t:
kossuthj koSu:c:
készségg ke:SSe:g:
_a) kk (reditál k
kk (b k //if have two k and b letter, need spokening one k letter
so) kk (b k: //an exception with need spokening longer k phoneme
kk (d k //if have two k and one d letter, need spokening one k letter
kk (f k //if have two k and f letter, need spokening one k letter
kk (h k k //if have two k and h letter, need spokening one k letter
kk (j k //if have two k and j letter, need spokening one k letter
kk (m k //if have two k and m letter, need spokening one k letter
kkr kR2 //if have two k and r letter, need spokening one k letter
kk (s k //if have two k and s or sz letter, need spokening one k letter
kk (t k //if have two k and t letter, need spokening one k letter
_) közt kYst
bara) kk (b k
bara) kk (f k
bara) kk (j k

.group l
l l
@@ -546,24 +573,23 @@ keresztü) l (j l
fe) l (javít l
fe) l (jogosít l
ökö) l (jog l:
ha) ll (gatom l
me) ll (kas l
inte) ll (ige l
e) ll (ipsz l
_) e) lj (ár lj
ha) ll (ga l
_ta) lj (án lj
_fé) l (jobb l


ll (b l //if have two l and b letter, need spokening one l letter
ll (d l //if have two l and d letter, need spokening one l letter
ll (g l //if have two l and a g or gy letter, need spokening one l letter
ll (h l //if have two l and h letter, need spokening one l letter
ll (k l //if have two l and k letter, need spokening one l letter
ll (n l //if have two l and n or ny letter, need spokening one l letter before the n or ny letter
ll (s l //if have two l letter and s or sz letter, need spokening one l letter
ll (t l //if have two l and a t letter, need spokening one l letter

.group m
m m
ko) mm (uni m
mauser mAuzER2
mosquito moskito:
mosquitó moskito:
messerschmitt mEs:ER2Smit:


.group n
@@ -574,22 +600,32 @@ keresztü) l (j l
ny n^
nny n^n^
nj n^n^
nny (cs n^ //if have two ny and cs letter, need spokening one ny letter
nny (d n^ //if have two nny and one d letter, need spokening one ny letter
nny (f n^ //if have two ny and one f letter, need spokening one ny letter
nny (g n^ //if have two ny and one g letter, need spokening one ny letter
nny (k n^ //if have two nny and one k letter, need spokening one ny letter
nny (t n^ //if have two nny and one t letter, need spokening one ny letter
nny (v n^ //if have two nny and one v letter, need spokening one n^ letter
nn (h n //if have two n and one h letter, need spokening one n letter
nn (k n //if have two n and one k letter, need spokening one k letter
nn (m n //if have two n and one m letter, need spokening one n letter
nn (l n //if have two n and one l letter, need spokening one l letter
nn (s n //if have two n and one s or sz letter, need spokening one n letter
nn (t n //if have two n and one t letter, need spokening one n letter


szí) n (ját n
szí) n (józan n
nyj n^n^

_) nem (- nEm // has $combine attribute in hu_list, combine with the next word
me) nny (ország n^
me) nny (d n^
me) nny (k n^
pihe) nj (_S2 n^
főbe) n (jár n

ingye) n n
_) nylon nEjlon


sze) nny (víz n^
?1 _) nylon nEjlon
ajá) nlj j:
i) nny (ekció n^
bű) n (jel n
@@ -613,8 +649,6 @@ tulajdo) n (jog n
fé) ny (jel n^
i) nj (ekció n^
elle) n (jegy n
fe) nn (tartás n
fe) nn (sík n
egye) n (jogú n
beto) n (járda n
verse) ny (jog n^
@@ -626,12 +660,16 @@ teljesítmé) ny (javu n^
_feddhetetle) n (jelle n
állomá) ny (jel n^
ingatla) n (jog n
nyeremé) ny (játék n^
botrá) ny (játék n^
magá) nny (ugdíj nn^ //the nny letter pair this word not mean the double n^ phoneme, need spokening single the first n and n^ phoneme with this
//word.
alkotmá) ny (jog n^

.group o
o o

otthon othon
oscar oska:R2

.group ó
ó o:
@@ -648,7 +686,7 @@ ingatla) n (jog n
pp (C p:
p (v p_

_) potsdam potsda:m
?1 _) potsdam potsda:m



@@ -666,33 +704,31 @@ ingatla) n (jog n
r (r R
r (cc R

_) richa (rd R2iCa:
?1 _) richa (rd R2iCa:
_) richá (rd R2iCa:
reichsmarschall R2EjsmAR2SAl:
i) rr (itá R2
ko) rr (epetá R2

.group s
s S
föld) s (ánc S
hel) s (inki z
?1 hel) s (inki z
ki) s (ebb SS
_munká) s S
_nyílá) s S
_o) slo slo:
_o) sló slo:
?1 _o) slo slo:
?1 _o) sló slo:
tojá) s S
_) semmelweiss sEmmElvEjs
_) semmelweis sEmmElvEjs
_) semmelweiß sEmmElvEjs
engel) s s
_) saar sa:R2
_wa) sh (ing S
?1 _) saar sa:R2
?1 _wa) sh (ing S
pénze) s S
robbaná) s S
schmeisser SmEjsER2
danubiu) s s //a radio station name
juventu) s s //a radio station name
?1 danubiu) s s //a radio station name
?1 juventu) s s //a radio station name
va) s (s S
óriá) s S
látá) s (zavar S
@@ -704,6 +740,8 @@ szennye) s (zsá S
magatartá) s (zavar S
erőforrá) s (zabál S
működé) s (zava S
viselkedé) s (zava S
alkalmazá) s (szerver S

.group ss
ssz ss2
@@ -878,6 +916,8 @@ hirdeté) ssz (erve Ss
páncélo) ssz Ss
hajtá) ssz (erű Ss
sorva) ssz (ák s:
rendelteté) ssz (er Ss
klien) ssz (oft Ss

.group sz
sz s
@@ -909,6 +949,7 @@ rongyo) szs (ák SZ
para) sztsz (ek st|s
rava) sz (ár s
_ka) sztsze st|sE
szemete) szs (ák SZ

.group t

@@ -917,19 +958,26 @@ rongyo) szs (ák SZ
t t
tc ts:
tt t:
ttk t:k
tth t:h
ttk tk //if have two t and k letter, need spokening tk letter pair.
tth th //if have two t and h letter, need spokening th letter pair.
ttg t:g
ttgy t:J
ttp t:p
@) tól (_S3q to:l
@) től (_S3q tY:l
tt (C t:
ttn t:n
ttm t:m
ttl t:l
ttr t:R2
ttv t:v
ttn tn //if have two t and n letter, need spokening one t and one n letter
képze) tt (nek t: //exception
terveze) tt (n t: //exception


ttm tm //if have two t letter and m letter, need spokening one t and one m letter
ttl tl //if have two t and l letter, need spokening one t and one l letter
sűríte) tt (le t: //special exception
o) tt (lét t: //special exception
ttr tR2 //if have two t and r letter, need spokening one t and one r letter
helyeze) tt (ről t:
ttv tv //if have two t and v letter, need spokening one t and one v letter
ty c
// s) ty c: //
// z) ty c: // keztyű
@@ -1025,7 +1073,6 @@ folyama) t (jel t
fron) t (jár t
á) t (söpör t
ala) tt (jár t:
fri) tz ts:
halo) tt (sápad t:
mi) t (se t
há) t (szél t
@@ -1135,7 +1182,13 @@ szerete) t (szolgálat t
ú) t (jelzés t
vizsgála) t (sor t
dagana) t (sej t
tábláza) t (sor t
tábláza) t (sor t
ben) t (szorul t
_á) t (jelentkez t
spor) t (szolgál t
üzle) t (sor t
tábláza) t (cell t


.group ts
ts (_S2 tS //general rule with word end of ts letters
@@ -1223,6 +1276,9 @@ indula) tsz (ó t|s
szemé) ts (ég tS:
ré) ts (ég tS:
já) tsz (ok ts:
álla) ts (ág tS:
köteleze) ts (ég tS:
kötö) ts (ég tS:

.group u
u u
@@ -1239,7 +1295,9 @@ szovjet) u (nió u:
ü y
ütt yt:
ütty yc:

egy) ütt (m yt
egy) ütt (l yt
egy) ütt (v yt

.group ű
ű y:
@@ -1250,11 +1308,10 @@ szovjet) u (nió u:
.group v
v v
_) v (_ ve:
_) versailles vER2sa:j
?1 _) versailles vER2sa:j

.group w
w v
wehrmacht vER2mAht

.group x
_) x (_ iks
@@ -1320,7 +1377,7 @@ _szára) zs (ág SS

_nehé) zs (ely zS

_) zürich tsyR2iC
_) zürich tsyR2i C
vigyá) zz (ba z
vigyá) zz (t z
tí) zsz (er s:

+ 1
- 0
dictsource/it_rules View File

@@ -27,6 +27,7 @@
@) a (ggine_ 'a

_) ae (r aI
@) ano (_ %ano //ByFilo
@) avano (_S5 'avano
a (tterA_ 'a


+ 446
- 0
dictsource/nl_list View File

@@ -8,6 +8,7 @@
b be:
c se:
d de:
e e:
f Ef
g Qe:
h ha:
@@ -407,6 +408,7 @@ inkader $alt
jakker $alt
jammer $alt
joeker $alt
jonger $alt
kader $alt
kaffer $alt
kalefater $alt
@@ -770,11 +772,446 @@ vedette v@d'Et@
violette $3
wasserette $3

// ending -el is stressed
isabel $3
libel $2
mirabel $3
tabel $2

// words ending in el, elt, elde, elden, elend, elende, eld, ele, elen
// with stress on the previous syllable
// adjectives
edel $alt
enkel $alt
gammel $alt
heikel $alt
ijdel $alt
jofel $alt
kregel $alt
kreupel $alt
luttel $alt
nobel $alt
nozel $alt
schamel $alt
sensibel $alt
simpel $alt
sjofel $alt
soepel $alt
troebel $alt
vermetel $alt
// nouns
amandel $alt
appel $alt
artikel $alt
beginsel $alt
discipel dIs'ip@l $alt
engel $alt
fabel $alt
gruwel $alt
heuvel $alt
letsel $alt
mazel $alt
meubel $alt
middel $alt
mirakel $alt
mossel $alt
parabel $alt
perikel pe:r'ik@l $alt
raadsel $alt
roersel $alt
schepsel $alt
schijnsel $alt
stoppel $alt
zemel $alt
// verbs
aarzel $alt
adel $alt
angel $alt
babbel $alt
barrel $alt
bazel $alt
bedel be:d@l $alt
beitel $alt
bengel $alt
beugel $alt
beuzel $alt
biggel $alt
bikkel $alt
bobbel $alt
bochel $alt
boemel $alt
borrel $alt
borstel $alt
bottel $alt
brabbel $alt
breidel $alt
broddel $alt
brokkel $alt
bubbel $alt
buffel $alt
buitel $alt
bundel $alt
bungel $alt
bussel $alt
cirkel $alt
dartel $alt
diggel $alt
dissel $alt
dobbel $alt
doezel $alt
dommel $alt
dompel $alt
dremmel $alt
drentel $alt
dreutel $alt
drevel $alt
dribbel $alt
droppel $alt
druppel $alt
dubbel $alt
duikel $alt
duimel $alt
duivel $alt
duizel $alt
duvel $alt
dwarrel $alt
eikel $alt
fakkel $alt
fezel $alt
fiedel $alt
foefel $alt
foezel $alt
fonkel $alt
friemel $alt
frommel $alt
frummel $alt
frutsel $alt
futsel $alt
gaffel $alt
gesel Qe:s@l $alt
giebel $alt
giechel $alt
gijzel $alt
gispel $alt
gniffel $alt
goochel $alt
gorgel $alt
grabbel $alt
grendel $alt
greppel $alt
griezel $alt
griffel $alt
gruizel $alt
guichel $alt
hachel $alt
hagel $alt
hakkel $alt
haksel $alt
handel $alt
haspel $alt
heibel $alt
hekel $alt
hemel $alt
hengel $alt
hevel $alt
hinkel $alt
hobbel $alt
hoepel $alt
hompel $alt
huichel $alt
huikel $alt
huppel $alt
hussel $alt
hutsel $alt
ijzel $alt
jengel $alt
jodel $alt
joekel $alt
jubel $alt
kabbel $alt
kabel $alt
kachel $alt
kakel $alt
kantel $alt
kapittel $alt
kapsel $alt
karbonkel $alt
kartel $alt
kavel $alt
kegel $alt
ketel $alt
keutel $alt
keuvel $alt
kevel $alt
kibbel $alt
kietel $alt
kinkel $alt
kittel $alt
klepel $alt
klingel $alt
klippel $alt
klungel $alt
knabbel $alt
kneukel $alt
knevel $alt
knibbel $alt
knobbel $alt
knokel $alt
knuffel $alt
knuppel $alt
knutsel $alt
koepel $alt
kogel $alt
konkel $alt
koppel $alt
korrel $alt
krabbel $alt
krauwel $alt
krengel $alt
kreukel $alt
kribbel $alt
kriebel $alt
kringel $alt
krinkel $alt
kroezel $alt
kronkel $alt
kruimel $alt
kukel $alt
kunstel $alt
kwabbel $alt
kwakkel $alt
kwansel $alt
kwartel $alt
kwebbel $alt
kwezel $alt
kwispel $alt
label le:b@l $alt
lepel $alt
lispel $alt
lummel $alt
mangel $alt
martel $alt
mazzel $alt
mengel $alt
mergel $alt
metsel $alt
mispel $alt
moffel $alt
mommel $alt
monkel $alt
morrel $alt
mummel $alt
murmel $alt
nachel $alt
nagel $alt
nestel $alt
netel $alt
neutel $alt
neuzel $alt
nevel $alt
nikkel $alt
orakel $alt
paddel pEd@l $alt
pantoffel $alt
parel $alt
pegel $alt
pekel $alt
pendel $alt
peuzel $alt
piemel $alt
piepel $alt
pimpel $alt
pingel $alt
pinkel $alt
poedel $alt
poekel $alt
popel $alt
prevel $alt
priegel $alt
prikkel $alt
pruttel $alt
puzzel $alt
rafel $alt
raffel $alt
rakel $alt
rammel $alt
ransel $alt
ratel $alt
rebbel $alt
regel $alt
reutel $alt
reuzel $alt
ribbel $alt
riffel $alt
rijmel $alt
rimpel $alt
ringel $alt
rinkel $alt
ritsel $alt
rochel $alt
roddel $alt
rodel $alt
roefel $alt
roffel $alt
rommel $alt
rompel $alt
ronsel $alt
sabbel $alt
sabel $alt
sappel $alt
schakel $alt
scharminkel $alt
scharrel $alt
schimmel $alt
schnabbel $alt
schoffel $alt
schommel $alt
schotel $alt
schrikkel $alt
schrompel $alt
schuifel $alt
scrabbel skrEb@l $alt
settel $alt
shuffel S8f@l
shuttel S8t@l
siepel $alt
sijpel $alt
sikkel $alt
singel $alt
sjoemel $alt
sleutel $alt
slungel $alt
smiespel $alt
smikkel $alt
smispel $alt
smoezel $alt
smokkel $alt
snabbel $alt
sneuvel $alt
snoezel $alt
snorkel $alt
snuffel $alt
spartel $alt
spiegel $alt
spijbel $alt
spikkel $alt
sprankel $alt
sprenkel $alt
sprokkel $alt
staffel $alt
stamel $alt
stapel $alt
stechel $alt
steggel $alt
stempel $alt
stiefel $alt
stijfsel $alt
stippel $alt
stommel $alt
strengel $alt
stribbel $alt
strompel $alt
strubbel $alt
struikel $alt
stuntel $alt
suizel $alt
sukkel $alt
swaffel $alt
tackel tEk@l
tafel $alt
takel $alt
tegel $alt
tempel $alt
teugel $alt
teutel $alt
tichel $alt
tingel $alt
tinkel $alt
tintel $alt
tippel $alt
titel $alt
tokkel $alt
tortel $alt
trappel $alt
treuzel $alt
trippel $alt
troetel $alt
troggel $alt
trommel $alt
tuimel $alt
tunnel $alt
tuttel $alt
twijfel $alt
twinkel $alt
vendel $alt
vezel $alt
vijzel $alt
vlegel $alt
vleugel $alt
vogel $alt
wafel $alt
waffel $alt
waggel $alt
wakkel $alt
wandel $alt
wankel $alt
warrel $alt
wauwel $alt
weifel $alt
wemel $alt
wentel $alt
wervel $alt
wichel $alt
wiebel $alt
wiegel $alt
wiemel $alt
wikkel $alt
wimpel $alt
winkel $alt
wissel $alt
worstel $alt
wortel $alt
wriemel $alt
zabbel $alt
zadel $alt
zamel $alt
zegel $alt
zetel $alt
zoedel $alt
zwachtel $alt
zwavel $alt
zwendel $alt
zwengel $alt
zwiebel $alt
zwijmel $alt


// -s is not plural
chaos xa:Os


beiaard b'EIa:rt
boomgaard $1
dronkaard $1
gierigaard $1
grijsaard $1
gulzigaard $1
lafaard $1
slechtaard $1
snoodaard $1
standaard $1
valsaard $1
woestaard $1


// pronunciation exceptions
aangrijpend $2
accessoires aksEsw'ar@s
actiepunt Aksip8nt
agenda $2
amino $1
amnestie $3
boudoir budv#'a:r
bourgondier burx'o:ndi:@r
circuit sIrku'i
chalet Sa:lE
@@ -797,6 +1234,9 @@ ingevolge $3
ingrediënt $4
ingenieur Inzj@nj'Y:r
journaal Surn'a:l
maxima $1
meteen mEt'e:n
minima $1
ongastvrij OnQAstv@-*'EI
ongelooflijk $3
ongemakkelijk $3
@@ -805,7 +1245,9 @@ ongerieflijk $3
ongrondwettig $3
proces $2
renaissance rEne:s'A~s@
reservoir re:zErvv#'a:r
sacristie $3
salomo $1
tegenaan $3
tegenin $3
tegenover $3
@@ -814,6 +1256,7 @@ tegennatuur $4
tegenstrijdig $3
tegenwoordig $3
travestie $3
verderop $3
waarschijnlijk $2


@@ -825,3 +1268,6 @@ Ingeborg INe:bOrx
Ingmar INmAr
Ingrid IN@-*It
kennedy kEn@dE

// places
canada $1

+ 68
- 9
dictsource/nl_rules View File

@@ -10,14 +10,19 @@
au VU
ay a:j

@@C) a (_ =a:
_) aan (@P3 'a:n
aa (rd_ 'a:
aa (t_ 'a:
aa (C_ 'a:
@) abel (_ 'a:bE2l
@) abele (_ 'a:b@l@
_) af (C@P2 'Af
age (_ 'a:Z@
ages (_S1 s
age (_$w_alt a:Q@
aire (_ 'E:r
air (_ 'Er
ale (_ 'a:l@
@) ant (_ 'Ant

@) a (de_ 'a:
@@ -33,12 +38,18 @@
_) be (@P2 b@
_) b (ee+ b
_) be (ren bI:
_) be (rm bE
_) be (stia bE
_) be (ter be:
_) be (ven_ be:
_) bever be:v@r
_) be (zem be:
_) bezig be:z@x
_) beu bY:
_) bij (C@P3 b'EI
_) bureau byr'o:
_) buurt (@@P5 b'yrt // buurtbewoner



.group c
@@ -68,6 +79,10 @@
_) ch (or x
_) ch (r x
&) che (_ =S
ci (a S
@) ci (eel S
@) ci (ë S
ci (o S
ck k
cieel S'e:l
ciële S'e:l@
@@ -104,9 +119,18 @@
@) ee (rde_ 'I:
@) ee (rden_ 'I:
it) eit (_ 'EIt
&) el (_ @l
&) el (_ E2l
&) eld (_ @ld
&) ele (_ 'e:l@

&) el (_$p_alt =@l
&) el (e_$p_alt =@l
&) el (en_$p_alt =@l
&) el (t_$p_alt =@l
&) el (de_$p_alt =@l
&) el (den_$p_alt =@l
&) el (end_$p_alt =@l

&) em (_ @m
&) en (_S2qd @n
&) ens (_S3q @ns
@@ -121,10 +145,11 @@
@) etten (_S3 @n
@) eur (_ 'Y:r

_) er (@P2 Er
@) e (raar_ @
&) e (nB@ E2
id) e (nt E
_) er (@P2 Er
&) era (_ @ra:
@) e (raar_ @
&) e (rC@ E2


@@ -142,6 +167,7 @@
_) gee Qe:
gener (aal Q,e:n@r
gelijk Q@lEIk
_) ge (rC QE
_) geu QY:
_) ge (ven Qe:
_) ge (ving Qe:
@@ -168,17 +194,23 @@
m) ie (_ 'i
p) ie (_ 'i

@) ibel (_ 'ib@l
@) ibele (_ 'ib@l@
&) ica (_ =ika:
&) ico (_ =iko:
ie (X 'i
ie (rd_ 'i
@) ig (_S2d @x
@) ig (_S2dq @x
@) ige (_ @Q@
@) ij (n_ 'EI
&) ika (_ =ika:
&) iko (_ =iko:
_) in (C@P2 'In
// _) in (gP2 'In
io (nage iO
@) isch (_ =is
@) ische (_ =is@
@) isme (_ 'Ism@
@) ist (_ 'Ist


@@ -203,11 +235,12 @@
@) loog (_ lo:x



.group m
m m
m) m

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


@@ -216,8 +249,10 @@
n) n
ng N
nj n^
n (kel N

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


.group o
@@ -233,10 +268,15 @@
ou VU
ou (rage u

@@C) o (_ =o:
oe (X_ 'u
oir (_ 'v#a:r
oo (X 'o:
telef) oo (n 'o:
_) op (@@P2 'Op
_) open (@P4 'o:p@n
_) op (era 'o:p
_) op (tion Op
_) over (@P4 'o:v@r


@@ -271,6 +311,9 @@
_) ph f
ph (K f

_) politie (@ po:l'itsi



.group q
q k
@@ -282,8 +325,8 @@

.group r
r r
A) r (A *
C) r (A @-*
A) r (A r
C) r (A r
rr *r

.group re
@@ -292,19 +335,28 @@
_) re (cent r@
_) re (cept r@
_) re (ceptief re:
_) re (clam r@
_) re (serve_ r@

.group s
s s
s) s
A) s (A z
sch sx
sch (_ s
sch (e_ s
_) sch (n S
_) sh S
sh (K S
sj S
@@) s (_S1 s

@) si (o S
A) si (o Z
@) ssi (o S

_) standaard (@P9 st'Anda:rt


.group t
t t
@@ -315,6 +367,12 @@
p) tie (_ =si
s) tie (_ =ti
cra) tie (_ ts'i
tiee (l_ S'e:
tië (le_ S'e:
@) ti (a S
@) ti (ë S
@) ti (on S
s) t (i++ t
tj t;
tsj tS
_) th t
@@ -325,6 +383,7 @@

_) team t'i:m
team (_ ti:m
_) train tre:n

.group te
_) tegen (P5 t'e:Q@n
@@ -368,7 +427,7 @@

_) ver (@P3 v@r
_) ver (sie_ vEr
_) ver (der_ vEr
_) verder vErd@r
_) voort (@P5 v'O:rt



+ 34
- 34
dictsource/no_list View File

@@ -42,10 +42,10 @@ _4 f'i:RE
_5 f'Em
_6 s'Eks
_7 S'u-:
_8 'Ot:@2
_8 'Ot:a#
_9 n'i:
_10 t'i:
_11 'Elv@2
_11 'Elva#
_12 t'Olv
_13 tR'Et:@n
_14 fj'URt@n
@@ -54,7 +54,7 @@ _16 s'Ekst@n
_17 s'yt:@n
_18 'At:@n
_19 n'It:@n
_2X s;'u-:@2
_2X s;'u-:a#
_3X tR'Et:i:
_4X f'Y:Rti:
_5X f'Emti:
@@ -62,8 +62,8 @@ _6X s'Eksti:
_7X s'yt:i:
_8X 'Ot:i:
_9X n'It:i:
_0C h'u-ndR@2
_1C 'Et||h'u-ndR@2
_0C h'u-ndRa#
_1C 'Et||h'u-ndRa#
_0M1 t'u-:s@n
_1M1 'Et||t'u-:s@n
_0M2 m'Illi:;,u:n@R
@@ -73,32 +73,32 @@ _0and u:g
_dpt kOmmA

// ordinal numbers
_ord @nd@2
_1o f'WRst@2
_2o 'AndR@2
_3o tR'Edj@2
_4o fj'a:R@2
_5o f'Emt@2
_6o S'Et:@2
_8o 'Ot:@nd@2
_11o 'EllEvt@2
_12o t'Olvt@2
_13o tR'Et:@nd@2
_14o fj'URt@md@2
_15o f'Emt@nd@2
_16o s'Ekst@nd@2
_17o s'yt:@nd@2
_18o 'At:@nd@2
_19o n'It:@nd@2
_2Xo s;'u-:@nd@2
_0Co h'u-ndR@d@2
_0M1o t'u-:s@nd@2
_ord @nda#
_1o f'WRsta#
_2o 'AndRa#
_3o tR'Edja#
_4o fj'a:Ra#
_5o f'Emta#
_6o S'Et:a#
_8o 'Ot:@nda#
_11o 'EllEvta#
_12o t'Olvta#
_13o tR'Et:@nda#
_14o fj'URt@mda#
_15o f'Emt@nda#
_16o s'Ekst@nda#
_17o s'yt:@nda#
_18o 'At:@nda#
_19o n'It:@nda#
_2Xo s;'u-:@nda#
_0Co h'u-ndR@da#
_0M1o t'u-:s@nda#


// punctuation and symbols
//========================

* ss;aRn@2 $max3
* ss;aRna# $max3
= aRli:k $max3
+ plu-s $max3
% pR'u:s'Ent $max3
@@ -113,20 +113,20 @@ _$ dOllA:R
_' ApUstR'u:f
_( paRaNt'e:s||b@j'ynn@R
_) paRaNt'e:s||Sl'u-t:
_* ss;aRn@2
_* ss;aRna#
_, kOmmA
_- stRe:k
_. pu-Nktu-:m
_: ku:lOn
_; se:mi:ku:lOn
_< mIndR@2||En
_< mIndRa#||En
_= aRli:k
_> stWR@||En
_? spWRSmOlstENn
@ kRWllAlfA
_[ v'EnstR@2||h'A:ke:paRaNt'e:s
_[ v'EnstRa#||h'A:ke:paRaNt'e:s
_\ OmvEndt||skROstR@k
_] h'YyR@2||h'A:ke:paRaNt'e:s
_] h'YyRa#||h'A:ke:paRaNt'e:s
^ sIRku-mflEks
__ u-ndaRStR@k
_` 'OmvEndt||ApUstR'u:f
@@ -135,11 +135,11 @@ _#09 tA:b
_#32 mEllOmRu:m

_acu A:'ku-t:
_ced s'e:dIll@2
_ced s'e:dIlla#
_cir s'IRku-mflEks
_dia tR'e:mA
_grv gR'A:vi:s
_tld t'Ild@2
_tld t'Ilda#

é $accent
ü $accent
@@ -296,7 +296,7 @@ reader _^_EN
cancel _^_EN
continue _^_EN
magnifier _^_EN
and @2nd $only
and a#nd $only


// MAIN WORD DICTIONARY
@@ -306,7 +306,7 @@ der dE:R
her hE:R
kom kOm
loe lu: $capital
noe nU:@2
noe nU:a#
noen nU:@n // no+en
office Offi:s
system syst'e:m

+ 146
- 140
dictsource/no_rules View File

@@ -1,221 +1,227 @@

// This file is UTF8 encoded
// Spelling-to-phoneme rules for Norwegian

// C% indicates a double consonant (same letter twice)
// First version by Jonathan Duddington
// October 2010 improvements by Eirini Florou <[email protected]>


.group a
a A:
a (CC A
a (_ A
a A:
a (CC A
a (C a
a (_ A
// X) a (CCK A // single syllable with >= 2 final consonants
// // or initial syllable with 3 consonants
ai AI
au aU
ai AI
au aU

aa o: // å
aa (CC O
ae a: // æ
ae (CC a
aa o: // å
aa (CC O
ae a: // æ
ae (CC a


.group b
b b
bb b:
b b
bb b:

_) be (@ b@
_) be (@ b@


.group c
c k
cc k:
_) c (e s
c (i s
c (y s
c (ei s
c (øy s
ch S
c k
cc k:
_) c (e s
c (i s
c (y s
c (ei s
c (øy s
ch S

.group d
d d
dd d:
r) d (_
&) det (_ d@2
d d
dd d:
r) d (_
&) det (_ da#

.group e
e e:
e (CC E
ei aI
e (rC a // ??
&) e (_ @2
&) e (C_ @
X) e (m_ E
&) en (_ @n
&) ene (_ En@2 // @n@2 ??
&) ens (_ @ns
&) es (_ @s
&) et (_ @t
e e:
e (CC E
ei aI
e (rC a // ??
&) e (_ a#
&) e (C_ @
X) e (m_ E
&) en (_ @n
&) ene (_ Ena# // @na# ??
&) ens (_ @ns
&) es (_ @s
&) et (_ @t

.group f
f f
f f

.group g
g g
gg g:
g (n N
gj j
g (i j
g (y j
g (ei j
g (øy j
g g
gg g:
g (n N
gj j
g (i j
g (y j
g (ei j
g (øy j

.group h
h h
hj j
hv v
h h
hj j
hv v

.group i
i i:
i (CC I
&) ig (_ I
i i:
i (CC I
&) ig (_ I

.group j
j j
j j

.group k
k k
kk k:
kj x
k (i x
k (y x
k (ei x
k (øy x
k k
kk k:
kj x
k (i x
k (y x
k (ei x
k (øy x

.group l
l l
ll (K l
lj j
l l
ll (K l
lj j
ld ll

.group m
m m
mm (K m
m m
mm (K m

.group n
n n
nn (K n
ng N
n (k N
n n
nn (K n
ng N
n (k N
nd nn

.group o
o u:
o (CC O
oi OI
o u:
o (CC O
oi OI

oe O@2
@b) oe (_ u:
oe Oa#
@b) oe (_ u:

o (nd U
o (rt U
b) o (rd u:
o (st U
o (nd U
o (rt U
b) o (rd u:
o (st U

.group p
p p
pp p:
p p
pp p:

.group q
q k
qq k:
qu kw
q k
qq k:
qu kw

.group r
r R
rs (_ S
r R
rs (_ S

.group s
s s
ss ss
ss (_ s
sch S
sj S
skj S
sk (i S
sk (y S
sk (ei S
sk (øy S
r) s S
s (l S
A) s (lA s
s s
ss ss
ss (_ s
sch S
sj S
skj S
sk (i S
sk (y S
sk (ei S
sk (øy S
r) s S
s (l S
A) s (lA s

.group t
t t
tt t:
ti (on S
tj s;
t t
tt t:
ti (on S
tj s;



.group u
u u-:
u (CC u-
ui u-I
u u-:
u (CC u-
ui u-I

.group v
v v
vv (_ v
v v
vv (_ v

.group w
w v
w v

.group x
x ks
x (x
x ks
x (x
_) x s

.group y
y y:
y (CC y
y y:
y (CC y

.group z
z s
zz z
zz (_ z
z s
zz z
zz (_ z

.group å
å o:
åe o:@2
å (CC O
å o:
åe o:a#
å (CC O

.group æ
æ E:
æ (r a:
æ (CC a
æ E:
æ (r a:
æ (CC a

.group ø
ø Y:
ø (CC W
øy Yy
ø Y:
ø (CC W
øy Yy

.group ä
ä E:
ä (CC E
ä E:
ä (CC E

.group ö
ö Y:
ö (CC W
ö Y:
ö (CC W

.group
é 'e:
ü y:
é 'e:
ü y:

$ dOllA:R
! _:'u-:tRu:pstENn_:
!) !
$ dOllA:R
! _:'u-:tRu:pstENn_:
!) !

. pu-Nktu-:m
. (. _:
\.) .
. pu-Nktu-:m
. (. _:
\.) .

__) - (_D mi:nu-:s
A_) - (_D _
C_) - (_D _
__) - (_D mi:nu-:s
A_) - (_D _
C_) - (_D _


+ 49
- 5
dictsource/ta_list View File

@@ -97,7 +97,7 @@ _- in.aIppUg // இணைப்புக்
\ p'in||s,a:jvU // பின் சாய்வு
! vijVppU // வியப்பு
_? ke:l.vi // கேள்வி
# en.||kuRi $max3 // எண் குறி
# ;en. $max3 // எண் குறி
= samVnpa:d.U $max3 // சமன்பாடு
+ ku:t.t.Vl $max3 // கூட்டல்
* perUkkVl $max3 // பெருக்கல்
@@ -105,6 +105,9 @@ _? ke:l.vi // கேள்வி
÷ vVgUttVl // வகுத்தல்
% viz.Ukka:d.U $max3 // விழுக்காடு
U+bf9 ru:ba:j
¼ ka:l
½ araI
¾ mukka:l

// abbreviations
ரூ ru:ba:j $dot $only
@@ -195,7 +198,6 @@ tamil தமிழ் $text
பாகம் $alt
பண்தம் $alt
பவனி $alt
பயில்வான் $alt
பாபா $alt
போண்டா $alt
பஜ்ஜி $alt
@@ -224,7 +226,6 @@ tamil தமிழ் $text
பால $alt
பாம்ப் $alt
பீராமண $alt
பிரதர் $alt
பால்ய $alt
பலு $alt
பில் $alt
@@ -255,6 +256,29 @@ tamil தமிழ் $text
பலத்தாலான $alt
பெஞ்ச் $alt
பெஞ்சு $alt
பார $alt
பாமா $alt
பென்ஸ் $alt
பாலிய $alt
புக்கு $alt
படுவா $alt
பீரும் $alt
பல்ப் $alt
பிரேக் bre:k
ப்ரேக் bre:k
பெட்ல $alt
பான $alt
பகத் $alt
பலிக் $alt
பலிக்கு $alt
பலிக்குத்தான் $alt
பவ $alt
புஸ் $alt
போஸின் $alt
போனி $alt
பிஸி $alt
பேஷ் $alt
பாவே $alt
(பி . ஏ) bije:


@@ -280,7 +304,6 @@ tamil தமிழ் $text
திட $alt
தேவ $alt
தோ $alt
தினசரி $alt
தரும $alt
தொப் $alt
தொப்பென்று $alt
@@ -301,6 +324,14 @@ tamil தமிழ் $text
திம் $alt
தேவதா $alt
தெனம் $alt
தெனமும் $alt
திடு $alt
தால் $alt
தவ $alt
திக்திக் digdig
தொப்புனு $alt
தருமம் $alt
தாவே $alt


// initial ட
@@ -316,6 +347,12 @@ tamil தமிழ் $text
சிட்டாய் $alt
சேச்சே $alt
சிரம் sirVm
சிலி $alt
சிக் tSik
சர்ச் $alt
டிக் t.ik
ரெட்டி red.d.i
செல்லம் $alt


கக $alt // initial க as [g]
@@ -349,10 +386,16 @@ tamil தமிழ் $text
கான $alt
கோத்திர $alt
கும்முன்னு $alt
கூகுல் $alt
கேட் $alt
கேட்டில் $alt
கின் $alt
கம $alt
குட் $alt
காண்டு $alt
கேட்டின் $alt
கேட்டுக்கு $alt
கம்முனு $alt
குஜால் $alt



@@ -383,3 +426,4 @@ tamil தமிழ் $text
ஓகோ o:Ho:
கப் kVp
செட் set.
திக் dik

+ 558
- 153
dictsource/ta_rules
File diff suppressed because it is too large
View File


+ 30
- 15
phsource/compile_report View File

@@ -1,4 +1,4 @@
66 phoneme tables
67 phoneme tables
new total
base 107 107
consonants 9 115
@@ -66,6 +66,7 @@ consonants 9 115
ht 11 140
az 10 127
ak 8 109
am 8 123

Data file Used by
b/b [b] base
@@ -338,27 +339,34 @@ l/_l [l] base
[l/] fr
[l] hu
[l] zh
l/l_ [l/] base
l/l_ [l] base
[l/] base
[l/3] base
[l/] fr
l/l_@ [l/3] base
[l/] fr
l/l@ [hæy] base
l/l@ [h}] base
[l#] base
[l] fr
[l/2] fr
[K] nso
l/L1_aL [l/] base
l/L1_aL [l] base
[l/] base
[l/] de
l/L1_eL [l/] base
l/L1_eL [l] base
[l/] base
[l/] de
l/L1_iL [l/] base
l/L1_iL [l] base
[l/] base
[l/] de
l/L1_@L [l/] base
l/L1_@L [l] base
[l/] base
[l/] de
l/L1_oL [l/] base
l/L1_oL [l] base
[l/] base
[l/] de
l/L1_uL [l/] base
l/L1_uL [l] base
[l/] base
[l/] de
l/L2_aL [l/2] base
l/L2_eL [l/2] base
@@ -370,14 +378,14 @@ 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æy] base
l/la [h}] base
[l#] base
[l] fr
[l/2] fr
[K] nso
l/l_a [l/3] base
[l/] fr
l/le [hæy] base
l/le [h}] base
[l#] base
[l] fr
[l/2] fr
@@ -388,7 +396,7 @@ l/L_eL_af [&] af
[&:] af
l/l_front [L] sq
l/l_front_ [l/4] sq
l/li [hæy] base
l/li [h}] base
[l#] base
[l] fr
[l/2] fr
@@ -401,7 +409,7 @@ ll/ll [L] bg
ll/_ll [L] bg
l/l_long [l] base
[l] fr
l/lo [hæy] base
l/lo [h}] base
[l#] base
[l] fr
[l/2] fr
@@ -409,7 +417,7 @@ l/lo [h
l/l_o [l/3] base
[l/] fr
l^/l_rfx [l.] base
l/lu [hæy] base
l/lu [h}] base
[l#] base
[l] fr
[l/2] fr
@@ -1285,6 +1293,7 @@ vowel/a [a] base
[a] id
[a] sl
[a] bg
[a] am
vowel/a# [a] base2
[a/] base2
[a#] en-sc
@@ -1521,6 +1530,7 @@ vowel/e_mid2 [E] af
[e] bg
[e] nso
[e] az
[e] am
vowel/@_fnt [@] en-wi
[@2] en-wi
[@2] hr
@@ -1553,12 +1563,14 @@ vowel/i [i] base
[i] prs
[i] nso
[i] ak
[i] am
vowel/i# [y:] cy
vowel/i_2 [i2] de
[i:] de
[i] nl
[i:] la
[i:] sv
vowel/i#_2 [y] am
vowel/i_3 [i] af
[i:] sk
vowel/i_4 [i] fi
@@ -1652,12 +1664,13 @@ vowel/@_low [@] en-rp
[V] hi
[@2] hi
[@] ro
[@2] no
[a#] no
[@] id
[V] ne
[@/] ne
[@] pa
[V] pa
[@] am
vowel/@_low2 [@/] en-us
[@2] en-us
vowel/o [o] base2
@@ -1697,6 +1710,7 @@ vowel/o-_2 [V] en-n
vowel/o_3 [oU] en-sc
vowel/o-_3 [U] en-rp
vowel/o-_4 [o] ro
[o] am
vowel/o_5 [O] nl
[O] da
vowel/o_6 [O:] nl
@@ -1808,6 +1822,7 @@ vowel/u_2 [u1] fi
[u] tr
[u] sl
[u] bg
[u] am
vowel/u#_2 [u-] sv
vowel/u#_3 [U] ta
[U:] ta

+ 1
- 1
phsource/ph_norwegian View File

@@ -15,7 +15,7 @@ phoneme @ // close schwa
FMT(vowel/@_4)
endphoneme

phoneme @2 // open schwa
phoneme a# // open schwa
vowel starttype #@ endtype #a
unstressed
length 120

+ 18
- 0
phsource/phonemes View File

@@ -423,6 +423,21 @@ phoneme l
ChangePhoneme(l/)
ENDIF

IF nextPh(isNotVowel) THEN
// in case the next phoneme is no longer a vowel, in pass=2
PrevVowelEndings
VowelEnding(l/L1_@L, -60)
VowelEnding(l/L1_aL, -40)
VowelEnding(l/L1_eL, -30)
VowelEnding(l/L1_iL, -30)
VowelEnding(l/L1_oL, -40)
VowelEnding(l/L1_uL, -40)
EndSwitch

FMT(l/l_)
RETURN
ENDIF

CALL vowelstart_l

IF prevPh(#@) THEN
@@ -1822,3 +1837,6 @@ include ph_azerbaijani

phonemetable ak base
include ph_akan

phonemetable am base2
include ph_amhari

BIN
phsource/vowel/i#_2 View File


+ 91
- 41
platforms/big_endian/espeak-phoneme-data.c View File

@@ -1,8 +1,9 @@


// 13.02.10 jonsd: Changed for eSpeak version 1.43
// 14.09.10 Recognize long and short frames in phondata
// 02.09.10 Fix: Q sections were omitted from the converted phondata
// 13.08.10 jonsd: Added Q lines. Use Address to set the displacement in phondata file.
// 13.02.10 jonsd: Changed for eSpeak version 1.43


#include <stdio.h>
@@ -10,6 +11,7 @@
#include <string.h>
#include <ctype.h>
#include <sys/types.h>
#include <sys/stat.h>

#if defined(BYTE_ORDER) && BYTE_ORDER == BIG_ENDIAN
#define IS_BIG_ENDIAN 1
@@ -57,7 +59,8 @@ typedef struct {


// This is a new format for eSpeak 1.41
typedef struct { // 44 bytes
#define FRFLAG_KLATT 0x01 // this frame includes extra data for Klatt synthesizer
typedef struct { // 64 bytes
short frflags;
short ffreq[7];
unsigned char length;
@@ -70,28 +73,29 @@ 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];
unsigned char length;
unsigned char rms;
unsigned char fheight[8];
unsigned char fwidth[6]; // width/4 f0-5
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;


#ifdef deleted
// This is the previous format for versions before 1.41
typedef struct {
short frflags;
unsigned char length;
unsigned char rms;
short ffreq[9];
unsigned char fheight[9];
unsigned char fwidth[6];
unsigned char fright[6];
} frame_t;
#endif

#define N_SEQ_FRAMES 25

typedef struct {
short length;
unsigned char n_frames;
unsigned char flags;
unsigned char sqflags;
frame_t frame[N_SEQ_FRAMES];
} SPECT_SEQ;

@@ -106,6 +110,23 @@ void usage (const char *program_name);
int xread; // prevent compiler warning from fread()


int GetFileLength(const char *filename)
{//====================================
struct stat statbuf;
if(stat(filename,&statbuf) != 0)
return(0);
if((statbuf.st_mode & S_IFMT) == S_IFDIR)
// if(S_ISDIR(statbuf.st_mode))
return(-2); // a directory
return(statbuf.st_size);
} // end of GetFileLength




int main (int argc, char *argv[])
{//==============================
const char *indir = "/usr/share/espeak-data";
@@ -147,6 +168,19 @@ int main (int argc, char *argv[])
printf ("Host seems to be little-endian ..\n");
#endif

sprintf (f1, "%s/phondata", indir);
sprintf (f2, "%s/temp_1", outdir);

printf ("Processing phondata ..\n");
swap_phondata (f1, f2, manifest);
if(GetFileLength(f1) != GetFileLength(f2))
{
fprintf(stderr, "Error: phondata length is different from the original\n");
exit(1);
}
sprintf (f1, "%s/phondata", outdir);
rename (f2, f1);

sprintf (f1, "%s/phontab", indir);
sprintf (f2, "%s/temp_1", outdir);

@@ -163,14 +197,6 @@ int main (int argc, char *argv[])
sprintf (f1, "%s/phonindex", outdir);
rename (f2, f1);

sprintf (f1, "%s/phondata", indir);
sprintf (f2, "%s/temp_1", outdir);

printf ("Processing phondata ..\n");
swap_phondata (f1, f2, manifest);
sprintf (f1, "%s/phondata", outdir);
rename (f2, f1);

free (f1);
free (f2);

@@ -218,34 +244,40 @@ void swap_phondata (const char *infile, const char *outfile,

if (line[0] == 'S') {
SPECT_SEQ buf_spect;
size_t ix;
size_t frame_start;
int n;

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;

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

xread = fread(&buf_spect, 4, 1, in);
buf_spect.length = (short) SWAP_USHORT (buf_spect.length);
fwrite(&buf_spect, 4, 1, out);

for (n = 0; n < buf_spect.n_frames; n++) {
int k;

buf_spect.frame[n].frflags = (short)
SWAP_USHORT (buf_spect.frame[n].frflags);
frame_start = ftell(in);
xread = fread(&buf_spect.frame[0], sizeof(frame_t), 1, in);

buf_spect.frame[0].frflags = (short)
SWAP_USHORT (buf_spect.frame[0].frflags);

// Changed for eSpeak 1.41
for (k = 0; k < 7; k++) {
buf_spect.frame[n].ffreq[k] = (short)
SWAP_USHORT (buf_spect.frame[n].ffreq[k]);
buf_spect.frame[0].ffreq[k] = (short)
SWAP_USHORT (buf_spect.frame[0].ffreq[k]);
}
}

fwrite (&buf_spect, ix, 1, out);
// is this a long or a short frame?
if(buf_spect.frame[0].frflags & FRFLAG_KLATT)
{
fwrite(&buf_spect.frame[0], sizeof(frame_t), 1, out);
fseek(in, frame_start + sizeof(frame_t), SEEK_SET);
}
else
{
fwrite(&buf_spect.frame[0], sizeof(frame_t2), 1, out);
fseek(in, frame_start + sizeof(frame_t2), SEEK_SET);
}
}
}
else if (line[0] == 'W') {
long pos;
@@ -286,6 +318,24 @@ void swap_phondata (const char *infile, const char *outfile,
xread = fread (env_buf, 1, 128, in);
fwrite (env_buf, 1, 128, out);
}
else if (line[0] == 'Q') {
unsigned char pb[4];
unsigned length;
char *buf;

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

length = (pb[2] << 8) + pb[3]; // size in words
length *= 4;

buf = (char *) malloc (length);

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

free (buf);
}
}

fclose (in);

+ 8
- 0
platforms/windows/espeakedit/espeakedit.dsp View File

@@ -609,6 +609,14 @@ SOURCE=.\src\sintab.h
# End Source File
# Begin Source File
SOURCE=.\src\sonic.cpp
# End Source File
# Begin Source File
SOURCE=.\src\sonic.h
# End Source File
# Begin Source File
SOURCE=.\src\speak_lib.cpp
# End Source File
# Begin Source File

+ 1
- 0
platforms/windows/espeakedit/src/speech.h View File

@@ -25,6 +25,7 @@
// comment this out when compiling the "speak" process
//#define SPECT_EDITOR
#define INCLUDE_KLATT
#define INCLUDE_MBROLA
#include <windows.h>
#define PLATFORM_WINDOWS

+ 1
- 0
platforms/windows/espeakedit/src_copy/speech.h View File

@@ -25,6 +25,7 @@
// comment this out when compiling the "speak" process
//#define SPECT_EDITOR
#define INCLUDE_KLATT
#define INCLUDE_MBROLA
#include <windows.h>
#define PLATFORM_WINDOWS

+ 8
- 0
platforms/windows/windows_cmd/espeak.dsp View File

@@ -118,6 +118,10 @@ SOURCE=.\src\setlengths.cpp
# End Source File
# Begin Source File
SOURCE=.\src\sonic.cpp
# End Source File
# Begin Source File
SOURCE=.\src\speak.cpp
# End Source File
# Begin Source File
@@ -171,6 +175,10 @@ SOURCE=.\src\sintab.h
# End Source File
# Begin Source File
SOURCE=.\src\sonic.h
# End Source File
# Begin Source File
SOURCE=.\src\speak_lib.h
# End Source File
# Begin Source File

+ 1
- 0
platforms/windows/windows_cmd/src/speech.h View File

@@ -33,6 +33,7 @@
#define NO_VARIADIC_MACROS
#define ESPEAK_API
#define INCLUDE_KLATT
#define INCLUDE_MBROLA
// will look for espeak_data directory here, and also in user's home directory
#define PATH_ESPEAK_DATA "/usr/share/espeak-data"

+ 66
- 57
platforms/windows/windows_dll/src/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 *
@@ -24,11 +24,11 @@
/* This is the header file for the library version of espeak */
/* */
/*************************************************************/
#define ESPEAK_API __declspec(dllexport)

#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.
@@ -74,7 +82,7 @@ typedef struct {
const char *name; // used for MARK and PLAY events. UTF8 string
} id;
} espeak_EVENT;
/*
/*
When a message is supplied to espeak_synth, the request is buffered and espeak_synth returns. When the message is really processed, the callback function will be repetedly called.


@@ -82,16 +90,16 @@ typedef struct {

In PLAYBACK mode, the callback function is called as soon as an event happens.

For example suppose that the following message is supplied to espeak_Synth:
For example suppose that the following message is supplied to espeak_Synth:
"hello, hello."


* Once processed in RETRIEVAL mode, it could lead to 3 calls of the callback function :

** Block 1:
<audio data> +
<audio data> +
List of events: SENTENCE + WORD + LIST_TERMINATED
** Block 2:
<audio data> +
List of events: WORD + END + LIST_TERMINATED
@@ -128,11 +136,11 @@ typedef enum {

typedef enum {
/* PLAYBACK mode: plays the audio data, supplies events to the calling program*/
AUDIO_OUTPUT_PLAYBACK,
AUDIO_OUTPUT_PLAYBACK,

/* RETRIEVAL mode: supplies audio data and events to the calling program */
AUDIO_OUTPUT_RETRIEVAL,
/* SYNCHRONOUS mode: as RETRIEVAL but doesn't return until synthesis is completed */
AUDIO_OUTPUT_SYNCHRONOUS,

@@ -153,7 +161,7 @@ typedef enum {
#ifdef __cplusplus
extern "C"
#endif
ESPEAK_API int espeak_Initialize(espeak_AUDIO_OUTPUT output, int buflength, const char *path, int options);
int espeak_Initialize(espeak_AUDIO_OUTPUT output, int buflength, const char *path, int options);
/* Must be called before any synthesis functions are called.
output: the audio data can either be played by eSpeak or passed back by the SynthCallback function.

@@ -172,10 +180,10 @@ typedef int (t_espeak_callback)(short*, int, espeak_EVENT*);
#ifdef __cplusplus
extern "C"
#endif
ESPEAK_API void espeak_SetSynthCallback(t_espeak_callback* SynthCallback);
void espeak_SetSynthCallback(t_espeak_callback* SynthCallback);
/* Must be called before any synthesis functions are called.
This specifies a function in the calling program which is called when a buffer of
speech sound data has been produced.
speech sound data has been produced.


The callback function is of the form:
@@ -200,7 +208,7 @@ int SynthCallback(short *wav, int numsamples, espeak_EVENT *events);
#ifdef __cplusplus
extern "C"
#endif
ESPEAK_API void espeak_SetUriCallback(int (*UriCallback)(int, const char*, const char*));
void espeak_SetUriCallback(int (*UriCallback)(int, const char*, const char*));
/* This function may be called before synthesis functions are used, in order to deal with
<audio> tags. It specifies a callback function which is called when an <audio> element is
encountered and allows the calling program to indicate whether the sound file which
@@ -241,7 +249,7 @@ int UriCallback(int type, const char *uri, const char *base);
#ifdef __cplusplus
extern "C"
#endif
ESPEAK_API espeak_ERROR espeak_Synth(const void *text,
espeak_ERROR espeak_Synth(const void *text,
size_t size,
unsigned int position,
espeak_POSITION_TYPE position_type,
@@ -264,7 +272,7 @@ ESPEAK_API espeak_ERROR espeak_Synth(const void *text,
start of the text.

position_type: Determines whether "position" is a number of characters, words, or sentences.
Values:
Values:

end_position: If set, this gives a character position at which speaking will stop. A value
of zero indicates no end position.
@@ -283,13 +291,13 @@ ESPEAK_API espeak_ERROR espeak_Synth(const void *text,
espeakENDPAUSE If set then a sentence pause is added at the end of the text. If not set then
this pause is suppressed.

unique_identifier: message identifier; helpful for identifying later
unique_identifier: message identifier; helpful for identifying later
data supplied to the callback.

user_data: pointer which will be passed to the callback function.

Return: EE_OK: operation achieved
EE_BUFFER_FULL: the command can not be buffered;
Return: EE_OK: operation achieved
EE_BUFFER_FULL: the command can not be buffered;
you may try after a while to call the function again.
EE_INTERNAL_ERROR.
*/
@@ -297,7 +305,7 @@ ESPEAK_API espeak_ERROR espeak_Synth(const void *text,
#ifdef __cplusplus
extern "C"
#endif
ESPEAK_API espeak_ERROR espeak_Synth_Mark(const void *text,
espeak_ERROR espeak_Synth_Mark(const void *text,
size_t size,
const char *index_mark,
unsigned int end_position,
@@ -312,8 +320,8 @@ ESPEAK_API espeak_ERROR espeak_Synth_Mark(const void *text,

For the other parameters, see espeak_Synth()

Return: EE_OK: operation achieved
EE_BUFFER_FULL: the command can not be buffered;
Return: EE_OK: operation achieved
EE_BUFFER_FULL: the command can not be buffered;
you may try after a while to call the function again.
EE_INTERNAL_ERROR.
*/
@@ -321,13 +329,13 @@ ESPEAK_API espeak_ERROR espeak_Synth_Mark(const void *text,
#ifdef __cplusplus
extern "C"
#endif
ESPEAK_API espeak_ERROR espeak_Key(const char *key_name);
espeak_ERROR espeak_Key(const char *key_name);
/* Speak the name of a keyboard key.
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;
Return: EE_OK: operation achieved
EE_BUFFER_FULL: the command can not be buffered;
you may try after a while to call the function again.
EE_INTERNAL_ERROR.
*/
@@ -335,11 +343,11 @@ ESPEAK_API espeak_ERROR espeak_Key(const char *key_name);
#ifdef __cplusplus
extern "C"
#endif
ESPEAK_API espeak_ERROR espeak_Char(wchar_t character);
/* Speak the name of the given character
espeak_ERROR espeak_Char(wchar_t character);
/* Speak the name of the given character

Return: EE_OK: operation achieved
EE_BUFFER_FULL: the command can not be buffered;
Return: EE_OK: operation achieved
EE_BUFFER_FULL: the command can not be buffered;
you may try after a while to call the function again.
EE_INTERNAL_ERROR.
*/
@@ -380,22 +388,23 @@ typedef enum {
#ifdef __cplusplus
extern "C"
#endif
ESPEAK_API espeak_ERROR espeak_SetParameter(espeak_PARAMETER parameter, int value, int relative);
espeak_ERROR espeak_SetParameter(espeak_PARAMETER parameter, int value, int relative);
/* Sets the value of the specified parameter.
relative=0 Sets the absolute value of the parameter.
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

espeakRANGE: pitch range, range 0-100. 0-monotone, 50=normal

espeakPUNCTUATION: which punctuation characters to announce:
value in espeak_PUNCT_TYPE (none, all, some),
value in espeak_PUNCT_TYPE (none, all, some),
see espeak_GetParameter() to specify which characters are announced.

espeakCAPITALS: announce capital letters by:
@@ -407,8 +416,8 @@ ESPEAK_API espeak_ERROR espeak_SetParameter(espeak_PARAMETER parameter, int valu

espeakWORDGAP: pause between words, units of 10mS (at the default speed)

Return: EE_OK: operation achieved
EE_BUFFER_FULL: the command can not be buffered;
Return: EE_OK: operation achieved
EE_BUFFER_FULL: the command can not be buffered;
you may try after a while to call the function again.
EE_INTERNAL_ERROR.
*/
@@ -416,7 +425,7 @@ ESPEAK_API espeak_ERROR espeak_SetParameter(espeak_PARAMETER parameter, int valu
#ifdef __cplusplus
extern "C"
#endif
ESPEAK_API int espeak_GetParameter(espeak_PARAMETER parameter, int current);
int espeak_GetParameter(espeak_PARAMETER parameter, int current);
/* current=0 Returns the default value of the specified parameter.
current=1 Returns the current value of the specified parameter, as set by SetParameter()
*/
@@ -424,14 +433,14 @@ ESPEAK_API int espeak_GetParameter(espeak_PARAMETER parameter, int current);
#ifdef __cplusplus
extern "C"
#endif
ESPEAK_API espeak_ERROR espeak_SetPunctuationList(const wchar_t *punctlist);
espeak_ERROR espeak_SetPunctuationList(const wchar_t *punctlist);
/* Specified a list of punctuation characters whose names are to be spoken when the
value of the Punctuation parameter is set to "some".

punctlist: A list of character codes, terminated by a zero character.

Return: EE_OK: operation achieved
EE_BUFFER_FULL: the command can not be buffered;
Return: EE_OK: operation achieved
EE_BUFFER_FULL: the command can not be buffered;
you may try after a while to call the function again.
EE_INTERNAL_ERROR.
*/
@@ -439,11 +448,12 @@ ESPEAK_API espeak_ERROR espeak_SetPunctuationList(const wchar_t *punctlist);
#ifdef __cplusplus
extern "C"
#endif
ESPEAK_API void espeak_SetPhonemeTrace(int value, FILE *stream);
void espeak_SetPhonemeTrace(int value, FILE *stream);
/* Controls the output of phoneme symbols for the text
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.
*/
@@ -451,7 +461,7 @@ ESPEAK_API void espeak_SetPhonemeTrace(int value, FILE *stream);
#ifdef __cplusplus
extern "C"
#endif
ESPEAK_API void espeak_CompileDictionary(const char *path, FILE *log, int flags);
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.

@@ -475,7 +485,7 @@ typedef struct {
unsigned char gender; // 0=none 1=male, 2=female,
unsigned char age; // 0=not specified, or age in years
unsigned char variant; // only used when passed as a parameter to espeak_SetVoiceByProperties
unsigned char xx1; // for internal use
unsigned char xx1; // for internal use
int score; // for internal use
void *spare; // for internal use
} espeak_VOICE;
@@ -504,24 +514,24 @@ typedef struct {
#ifdef __cplusplus
extern "C"
#endif
ESPEAK_API const espeak_VOICE **espeak_ListVoices(espeak_VOICE *voice_spec);
const espeak_VOICE **espeak_ListVoices(espeak_VOICE *voice_spec);
/* Reads the voice files from espeak-data/voices and creates an array of espeak_VOICE pointers.
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.
*/

#ifdef __cplusplus
extern "C"
#endif
ESPEAK_API espeak_ERROR espeak_SetVoiceByName(const char *name);
espeak_ERROR espeak_SetVoiceByName(const char *name);
/* Searches for a voice with a matching "name" field. Language is not considered.
"name" is a UTF8 string.

Return: EE_OK: operation achieved
EE_BUFFER_FULL: the command can not be buffered;
Return: EE_OK: operation achieved
EE_BUFFER_FULL: the command can not be buffered;
you may try after a while to call the function again.
EE_INTERNAL_ERROR.
*/
@@ -529,7 +539,7 @@ ESPEAK_API espeak_ERROR espeak_SetVoiceByName(const char *name);
#ifdef __cplusplus
extern "C"
#endif
ESPEAK_API espeak_ERROR espeak_SetVoiceByProperties(espeak_VOICE *voice_spec);
espeak_ERROR espeak_SetVoiceByProperties(espeak_VOICE *voice_spec);
/* An espeak_VOICE structure is used to pass criteria to select a voice. Any of the following
fields may be set:

@@ -549,7 +559,7 @@ ESPEAK_API espeak_ERROR espeak_SetVoiceByProperties(espeak_VOICE *voice_spec);
#ifdef __cplusplus
extern "C"
#endif
ESPEAK_API espeak_VOICE *espeak_GetCurrentVoice(void);
espeak_VOICE *espeak_GetCurrentVoice(void);
/* Returns the espeak_VOICE data for the currently selected voice.
This is not affected by temporary voice changes caused by SSML elements such as <voice> and <s>
*/
@@ -557,12 +567,12 @@ ESPEAK_API espeak_VOICE *espeak_GetCurrentVoice(void);
#ifdef __cplusplus
extern "C"
#endif
ESPEAK_API espeak_ERROR espeak_Cancel(void);
espeak_ERROR espeak_Cancel(void);
/* Stop immediately synthesis and audio output of the current text. When this
function returns, the audio output is fully stopped and the synthesizer is ready to
synthesize a new message.

Return: EE_OK: operation achieved
Return: EE_OK: operation achieved
EE_INTERNAL_ERROR.
*/

@@ -570,25 +580,25 @@ ESPEAK_API espeak_ERROR espeak_Cancel(void);
#ifdef __cplusplus
extern "C"
#endif
ESPEAK_API int espeak_IsPlaying(void);
int espeak_IsPlaying(void);
/* Returns 1 if audio is played, 0 otherwise.
*/

#ifdef __cplusplus
extern "C"
#endif
ESPEAK_API espeak_ERROR espeak_Synchronize(void);
espeak_ERROR espeak_Synchronize(void);
/* This function returns when all data have been spoken.
Return: EE_OK: operation achieved
Return: EE_OK: operation achieved
EE_INTERNAL_ERROR.
*/

#ifdef __cplusplus
extern "C"
#endif
ESPEAK_API espeak_ERROR espeak_Terminate(void);
espeak_ERROR espeak_Terminate(void);
/* last function to be called.
Return: EE_OK: operation achieved
Return: EE_OK: operation achieved
EE_INTERNAL_ERROR.
*/

@@ -596,9 +606,8 @@ ESPEAK_API espeak_ERROR espeak_Terminate(void);
#ifdef __cplusplus
extern "C"
#endif
ESPEAK_API const char *espeak_Info(void* ptr);
const char *espeak_Info(void* ptr);
/* Returns the version number string.
The parameter is for future use, and should be set to NULL
*/
#endif


+ 1
- 0
platforms/windows/windows_dll/src/speech.h View File

@@ -34,6 +34,7 @@
#define ESPEAK_API __declspec(dllexport)
#define LIBRARY
#define INCLUDE_KLATT
#define INCLUDE_MBROLA

// will look for espeak_data directory here, and also in user's home directory
#define PATH_ESPEAK_DATA "/usr/share/espeak-data"

+ 1
- 0
platforms/windows/windows_sapi/src/speech.h View File

@@ -37,6 +37,7 @@
//#define USE_PORTAUDIO
//#define USE_NANOSLEEP
#define INCLUDE_KLATT
#define INCLUDE_MBROLA
// will look for espeak_data directory here, and also in user's home directory
#define PATH_ESPEAK_DATA "/usr/share/espeak-data"

+ 8
- 0
platforms/windows/windows_sapi/ttseng.dsp View File

@@ -144,6 +144,10 @@ SOURCE=.\src\setlengths.cpp
# End Source File
# Begin Source File
SOURCE=.\src\sonic.cpp
# End Source File
# Begin Source File
SOURCE=.\src\speak_lib.cpp
# End Source File
# Begin Source File
@@ -237,6 +241,10 @@ SOURCE=.\src\sintab.h
# End Source File
# Begin Source File
SOURCE=.\src\sonic.h
# End Source File
# Begin Source File
SOURCE=.\src\speak_lib.h
# End Source File
# Begin Source File

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

@@ -261,8 +261,8 @@ static int ConvertRate(int new_rate)
int rate;
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 };
static int rate_table[21] = {80,110,124,135,145,155,165,173,180,187,196,
208,220,245,270,300,335,370,410,450,500 };
rate = new_rate + master_rate;
if(rate < -10) rate = -10;

+ 5
- 4
src/Makefile View File

@@ -6,7 +6,7 @@ INCDIR=$(PREFIX)/include/espeak
LIBDIR=$(PREFIX)/lib
DATADIR=$(PREFIX)/share/espeak-data

RELEASE = 1.43
RELEASE = 1.44
BIN_NAME = speak
BIN2_NAME = espeak
LIB_NAME = libespeak.so
@@ -80,10 +80,10 @@ all: $(BIN_NAME) $(LIB_NAME) $(STATIC_LIB_NAME) $(BIN2_NAME)
$(CXX) $(CXXFLAGS) $(USE_AUDIO) -D PATH_ESPEAK_DATA=\"$(DATADIR)\" -Wall -pedantic -I. -c -fno-exceptions $<

$(BIN_NAME): $(OBJS1)
$(CXX) -o $@ $(OBJS1) $(LIBS1)
$(CXX) $(LDFLAGS) -o $@ $(OBJS1) $(LIBS1)

$(BIN2_NAME): $(OBJS3) $(LIB_NAME)
$(CXX) -o $@ $(OBJS3) $(LIBS3)
$(CXX) $(LDFLAGS) -o $@ $(OBJS3) $(LIBS3)



@@ -92,7 +92,8 @@ x_%.o: %.cpp
-I. -D LIBRARY -c -fno-exceptions $< -o x_$*.o

$(LIB_NAME): $(OBJS2)
$(CXX) -shared $(SONAME_OPT)$(LIB_NAME).$(LIB_VERSION) -o $@ $(OBJS2) $(LIBS2)
$(CXX) $(LDFLAGS) -shared $(SONAME_OPT)$(LIB_NAME).$(LIB_VERSION) -o $@ \
$(OBJS2) $(LIBS2)

$(STATIC_LIB_NAME): $(OBJS2)
$(AR) cqs $(STATIC_LIB_NAME) $(OBJS2)

+ 2
- 1
src/compiledata.cpp View File

@@ -140,6 +140,7 @@ static keywtab_t k_properties[] = {
{"isNotVowel", 0, i_isNotVowel},
{"isFinalVowel", 0, i_isFinalVowel},
{"isVoiced", 0, i_isVoiced}, // voiced consonant, or vowel
{"isFirstVowel", 0, i_isFirstVowel},

{NULL, 0, 0}
};
@@ -3259,7 +3260,7 @@ static void CompileEquivalents()
}
*p_equivalence++ = 0;

p_equivalence = (char *)((int)(p_equivalence + 3) & ~0x3); // align to word boundary
p_equivalence = (char *)((long int)(p_equivalence + 3) & ~0x3); // align to word boundary
n_bytes = p_equivalence - p_start;
p_start[1] = remove_stress;
n_bytes = n_bytes / 4;

+ 34
- 13
src/numbers.cpp View File

@@ -1111,6 +1111,7 @@ static int LookupNum2(Translator *tr, int value, int control, char *ph_out)
char ph_tens[50];
char ph_digits[50];
char ph_and[12];
char ph_ord_suffix[20];

units = value % 10;
tens = value / 10;
@@ -1202,12 +1203,20 @@ static int LookupNum2(Translator *tr, int value, int control, char *ph_out)
else
{
if((control & 1) && ((units == 0) || (tr->langopts.numbers & NUM_SWAP_TENS)))
if((control & 1) &&
((units == 0) || (tr->langopts.numbers & NUM_SWAP_TENS) || (tr->langopts.numbers2 & NUM2_MULTIPLE_ORDINAL)))
{
sprintf(string,"_%dX%c", tens, ord_type);
if(Lookup(tr, string, ph_tens) != 0)
{
found_ordinal = 1;

if((units != 0) && (tr->langopts.numbers2 & NUM2_MULTIPLE_ORDINAL))
{
// Use the ordinal form of tens as well as units. Add the ordinal ending
Lookup(tr, "_ord", ph_ord_suffix);
strcat(ph_tens, ph_ord_suffix);
}
}
}
if(found_ordinal == 0)
@@ -1290,6 +1299,10 @@ static int LookupNum2(Translator *tr, int value, int control, char *ph_out)
if((tr->langopts.numbers & (NUM_SWAP_TENS | NUM_AND_UNITS)) && (ph_tens[0] != 0) && (ph_digits[0] != 0))
{
Lookup(tr, "_0and", ph_and);

if(tr->langopts.numbers2 & NUM2_MULTIPLE_ORDINAL)
ph_and[0] = 0;

if(tr->langopts.numbers & NUM_SWAP_TENS)
sprintf(ph_out,"%s%s%s%s",ph_digits, ph_and, ph_tens, ph_ordinal);
else
@@ -1355,7 +1368,8 @@ static int LookupNum3(Translator *tr, int value, char *ph_out, int suppress_null
char ph_thousands[50];
char ph_hundred_and[12];
char ph_thousand_and[12];
char ph_ord_suffix[20];

ordinal = control & 0x22;
hundreds = value / 100;
tensunits = value % 100;
@@ -1422,22 +1436,29 @@ static int LookupNum3(Translator *tr, int value, char *ph_out, int suppress_null
suppress_null = 1;

found = 0;
if(tensunits == 0)
if((ordinal)
&& ((tensunits == 0) || (tr->langopts.numbers2 & NUM2_MULTIPLE_ORDINAL)))
{
// is there a special pronunciation for exactly n00 ?
// ordinal number
sprintf(string, "_%dCo", hundreds);
found = Lookup(tr, string, ph_digits);

if(ordinal)
if((tr->langopts.numbers2 & NUM2_MULTIPLE_ORDINAL) && (tensunits > 0))
{
// ordinal number
sprintf(string, "_%dCo", hundreds);
found = Lookup(tr, string, ph_digits);
}
if(!found)
{
sprintf(string,"_%dC0",hundreds);
found = Lookup(tr, string, ph_digits);
// Use ordinal form of hundreds, as well as for tens and units
// Add ordinal suffix to the hundreds
Lookup(tr, "_ord", ph_ord_suffix);
strcat(ph_digits, ph_ord_suffix);
}
}

if((!found) && (tensunits == 0))
{
// is there a special pronunciation for exactly n00 ?
sprintf(string,"_%dC0",hundreds);
found = Lookup(tr, string, ph_digits);
}

if(!found)
{
sprintf(string,"_%dC",hundreds);

+ 16
- 12
src/setlengths.cpp View File

@@ -140,6 +140,7 @@ void SetSpeed(int control)
int s1;
int wpm;
int wpm2;
double wpm_inc;

speed.loud_consonants = 0;
speed.min_sample_len = 450;
@@ -150,6 +151,21 @@ void SetSpeed(int control)
if(control == 2)
wpm = embedded_value[EMBED_S2];

// fast_settings[0] wpm where speedup starts
// fast_settings[1] wpm for maximum espeak speed
// fast_settings[2] maximum espeak speed
sonicSpeed = 1.0;
if(wpm > speed.fast_settings[0])
{
wpm2 = wpm;
wpm_inc = (double)(speed.fast_settings[2] - speed.fast_settings[0]) / (double)(speed.fast_settings[1] - speed.fast_settings[0]);

wpm_inc = (wpm2 - speed.fast_settings[0]) * wpm_inc;
wpm = speed.fast_settings[0] + (int)wpm_inc;

sonicSpeed = ((double)wpm2)/wpm;
}

#ifdef TEST_SPEED
if(wpm > 1000)
{
@@ -262,18 +278,6 @@ void SetSpeed(int control)
if((speed.clause_pause_factor = speed.pause_factor) < 16)
speed.clause_pause_factor = 16;
}

if(wpm >= 370)
{
// TESTING
// use experimental fast settings if they have been specified in the Voice
if(speed.fast_settings[0] > 0)
speed.pause_factor = speed.fast_settings[0];
if(speed.fast_settings[1] > 0)
speed.wav_factor = speed.fast_settings[1];
if(speed.fast_settings[2] > 0)
speed.lenmod_factor = speed.lenmod2_factor = speed.fast_settings[2];
}
}

#ifdef TEST_SPEED

+ 1
- 1
src/speak.cpp View File

@@ -289,7 +289,7 @@ void MarkerEvent(int type, unsigned int char_position, int value, unsigned char
static int WavegenFile(void)
{//=========================
int finished;
unsigned char wav_outbuf[512];
unsigned char wav_outbuf[1024];
char fname[210];

out_ptr = out_start = wav_outbuf;

+ 14
- 1
src/synthdata.cpp View File

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

const char *version_string = "1.44.04 14.Sep.10";
const char *version_string = "1.44.13 17.Nov.10";
const int version_phdata = 0x014404;

int option_device_number = -1;
@@ -593,6 +593,7 @@ static bool InterpretCondition(Translator *tr, int control, PHONEME_LIST *plist,
int which;
unsigned int data;
int instn2;
int count;
PHONEME_TAB *ph;
PHONEME_LIST *plist_this;
static int ph_position[8] = {0, 1, 2, 3, 2, 0, 1, 3}; // prevPh, thisPh, nextPh, next2Ph, nextPhW, prevPhW, nextVowel, next2PhW
@@ -737,6 +738,18 @@ static bool InterpretCondition(Translator *tr, int control, PHONEME_LIST *plist,
case 12: // isVoiced
return((ph->type == phVOWEL) || (ph->type == phLIQUID) || (ph->phflags & phVOICED));
}

case 13: // isFirstVowel
count = 0;
for(;;)
{
if(plist->ph->type == phVOWEL)
count++;
if(plist->sourceix != 0)
break;
plist--;
}
return(count==1);
break;

}

+ 2
- 0
src/synthesize.h View File

@@ -326,6 +326,7 @@ typedef struct {
#define i_isNotVowel 0x8a
#define i_isFinalVowel 0x8b
#define i_isVoiced 0x8c
#define i_isFirstVowel 0x8d

// place of articulation
#define i_isVel 0x28
@@ -535,6 +536,7 @@ extern t_espeak_callback* synth_callback;
extern int option_log_frames;
extern const char *version_string;
extern const int version_phdata;
extern double sonicSpeed;

#define N_SOUNDICON_TAB 80 // total entries in soundicon_tab
#define N_SOUNDICON_SLOTS 4 // number of slots reserved for dynamic loading of audio files

+ 16
- 6
src/tr_languages.cpp View File

@@ -328,6 +328,9 @@ Translator *SelectTranslator(const char *name)
int name2 = 0;
Translator *tr;

static const short stress_lengths_fr[8] = {190, 170, 190, 200, 0, 0, 190, 240};
static const unsigned char stress_amps_fr[8] = {18,16, 18,18, 18,18, 18,18 };

static const unsigned char stress_amps_sk[8] = {17,17, 20,20, 20,22, 22,21 };
static const short stress_lengths_sk[8] = {190,190, 210,210, 0,0, 210,210};

@@ -355,6 +358,17 @@ Translator *SelectTranslator(const char *name)
}
break;

case L('a','m'): // Amharic, Ethiopia
{
SetupTranslator(tr,stress_lengths_fr,stress_amps_fr);
tr->langopts.stress_rule = STRESSPOSN_1L;
tr->langopts.stress_flags = 0x0024; // don't use secondary stress
tr->langopts.length_mods0 = tr->langopts.length_mods; // don't lengthen vowels in the last syllable
tr->langopts.param[LOPT_UNPRONOUNCABLE] = 1; // disable check for unpronouncable words
}
break;


case L('a','r'): // Arabic
tr->letter_bits_offset = OFFSET_ARABIC;
tr->langopts.param[LOPT_UNPRONOUNCABLE] = 1; // disable check for unpronouncable words
@@ -496,7 +510,7 @@ Translator *SelectTranslator(const char *name)
tr->langopts.param[LOPT_SONORANT_MIN] = 130; // limit the shortening of sonorants before short vowels

tr->langopts.numbers = NUM_SINGLE_STRESS | NUM_DECIMAL_COMMA;
tr->langopts.numbers2 = 0x2; // variant form of numbers before thousands
tr->langopts.numbers2 = 0x2 | NUM2_MULTIPLE_ORDINAL; // variant form of numbers before thousands

if(name2 == L_grc)
{
@@ -550,6 +564,7 @@ Translator *SelectTranslator(const char *name)
tr->langopts.param[LOPT_SONORANT_MIN] = 120; // limit the shortening of sonorants before short vowels

tr->langopts.numbers = NUM_SINGLE_STRESS | NUM_DECIMAL_COMMA | NUM_AND_UNITS | NUM_OMIT_1_HUNDRED | NUM_OMIT_1_THOUSAND | NUM_ROMAN | NUM_ROMAN_AFTER;
tr->langopts.numbers2 = NUM2_MULTIPLE_ORDINAL;

if(name2 == L('c','a'))
{
@@ -611,16 +626,12 @@ Translator *SelectTranslator(const char *name)

case L('f','r'): // french
{
static const short stress_lengths_fr[8] = {190, 170, 190, 200, 0, 0, 190, 240};
static const unsigned char stress_amps_fr[8] = {18,16, 20,20, 20,22, 18,18 };

SetupTranslator(tr,stress_lengths_fr,stress_amps_fr);
tr->langopts.stress_rule = STRESSPOSN_1R; // stress on final syllable
tr->langopts.stress_flags = 0x0024; // don't use secondary stress
tr->langopts.param[LOPT_IT_LENGTHEN] = 1; // remove lengthen indicator from unstressed syllables
tr->langopts.length_mods0 = tr->langopts.length_mods; // don't lengthen vowels in the last syllable
tr->langopts.accents = 2; // Say "Capital" after the letter.
tr->langopts.vowel_pause = 0;

tr->langopts.numbers = NUM_SINGLE_STRESS | NUM_DECIMAL_COMMA | NUM_ALLOW_SPACE | NUM_OMIT_1_HUNDRED | NUM_NOPAUSE | NUM_ROMAN | NUM_ROMAN_CAPITALS | NUM_ROMAN_AFTER | NUM_VIGESIMAL | NUM_DFRACTION_4;
SetLetterVowel(tr,'y');
@@ -685,7 +696,6 @@ Translator *SelectTranslator(const char *name)


case L('h','t'): // Haitian Creole
// static const short stress_lengths_fr[8] = {190, 170, 190, 200, 0, 0, 235, 240};
// memcpy(tr->stress_lengths,stress_lengths_fr,sizeof(tr->stress_lengths));
tr->langopts.stress_rule = STRESSPOSN_1R; // stress on final syllable
tr->langopts.stress_flags = 0x0024; // don't use secondary stress

+ 2
- 0
src/translate.h View File

@@ -427,11 +427,13 @@ typedef struct {
// bit27= Roman numbers are ordinal numbers
int numbers;

#define NUM2_MULTIPLE_ORDINAL 0x1000
// bits 1-4 use variant form of numbers before thousands,millions,etc.
// bit6=(LANG=pl) two forms of plural, M or MA
// bit7=(LANG-ru) use MB for 1 thousand, million, etc
// bit8=(LANG=cs,sk) two forms of plural, M or MA
// bit9=(LANG=rw) say "thousand" and "million" before its number, not after
// bit12=(LANG=el,es) use ordinal form of hundreds and tens as well as units
int numbers2;

#define BREAK_THOUSANDS 0x49249248

+ 5
- 2
src/voices.cpp View File

@@ -152,7 +152,7 @@ static MNEM_TAB keyword_tab[] = {
{"mbrola", V_MBROLA},
{"consonants", V_CONSONANTS},
{"klatt", V_KLATT},
{"fast_test", V_FAST},
{"fast_test2", V_FAST},
{"speed", V_SPEED},

// these just set a value in langopts.param[]
@@ -410,7 +410,10 @@ void VoiceReset(int tone_only)
voice->consonant_ampv = 100;
voice->samplerate = 22050;
memset(voice->klattv,0,sizeof(voice->klattv));
memset(speed.fast_settings,0,sizeof(speed.fast_settings));

speed.fast_settings[0] = 250;
speed.fast_settings[1] = 600;
speed.fast_settings[2] = 300;

#ifdef PLATFORM_RISCOS
voice->roughness = 1;

+ 100
- 20
src/wavegen.cpp View File

@@ -28,11 +28,13 @@
#include <math.h>



#include "speak_lib.h"
#include "speech.h"
#include "phoneme.h"
#include "synthesize.h"
#include "voice.h"
#include "sonic.h"

//#undef INCLUDE_KLATT

@@ -134,7 +136,7 @@ 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};
static int embedded_max[N_EMBEDDED_VALUES] = {0,0x7fff,600,300,99,99,99, 0,600,0,0,0,0,4,0};
static int embedded_max[N_EMBEDDED_VALUES] = {0,0x7fff,750,300,99,99,99, 0,750,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
int current_source_index=0;
@@ -148,7 +150,8 @@ static PortAudioStream *pa_stream=NULL;
static PaStream *pa_stream=NULL;
#endif


static sonicStream sonicSpeedupStream = NULL;
double sonicSpeed = 1.0;

// 1st index=roughness
// 2nd index=modulation_type
@@ -256,8 +259,6 @@ unsigned char pitch_adjust_tab[MAX_PITCH_VALUE+1] = {
217,220,223,226,229,232,236,239,
242,246,249,252, 254,255 };

int WavegenFill(int fill_zeros);


#ifdef LOG_FRAMES
static void LogMarker(int type, int value)
@@ -413,6 +414,10 @@ static int userdata[4];
static PaError pa_init_err=0;
static int out_channels=1;

unsigned char *outbuffer = NULL;
int outbuffer_size = 0;


#if USE_PORTAUDIO == 18
static int WaveCallback(void *inputBuffer, void *outputBuffer,
unsigned long framesPerBuffer, PaTimestamp outTime, void *userData )
@@ -425,9 +430,26 @@ static int WaveCallback(const void *inputBuffer, void *outputBuffer,
int ix;
int result;
unsigned char *p;
unsigned char *out_buf;
unsigned char *out_end2;
int pa_size;

out_ptr = out_start = (unsigned char *)outputBuffer;
out_end = out_ptr + framesPerBuffer*2;
pa_size = framesPerBuffer*2;

// make a buffer 3x size of the portaudio output
ix = pa_size*3;
if(ix > outbuffer_size)
{
outbuffer = (unsigned char *)realloc(outbuffer, ix);
if(outbuffer == NULL)
{
fprintf(stderr, "espeak: out of memory\n");
}
outbuffer_size = ix;
out_ptr = out_start = outbuffer;
out_end = out_start + outbuffer_size;
}
out_end2 = &outbuffer[pa_size]; // top of data needed for the portaudio buffer

#ifdef LIBRARY
event_list_ix = 0;
@@ -435,6 +457,24 @@ static int WaveCallback(const void *inputBuffer, void *outputBuffer,

result = WavegenFill(1);

// copy from the outbut buffer into the portaudio buffer
if(result && (out_ptr > out_end2))
{
result = 0; // don't end yet, there is more data in the buffer than can fit in portaudio
}

while(out_ptr < out_end2)
*out_ptr++ = 0; // fill with zeros up to the size of the portaudio buffer

memcpy(outputBuffer, outbuffer, pa_size);

// move the remaining contents of the start of the output buffer
for(p = out_end2; p < out_end; p++)
{
p[-pa_size] = p[0];
}
out_ptr -= pa_size;

#ifdef LIBRARY
count_samples += framesPerBuffer;
if(synth_callback)
@@ -455,14 +495,15 @@ static int WaveCallback(const void *inputBuffer, void *outputBuffer,
{
// swap the order of bytes in each sound sample in the portaudio buffer
int c;
out_ptr = (unsigned char *)outputBuffer;
out_end = out_ptr + framesPerBuffer*2;
while(out_ptr < out_end)
unsigned char *buf_end;
out_buf = (unsigned char *)outputBuffer;
buf_end = out_buf + framesPerBuffer*2;
while(out_buf < buf_end)
{
c = out_ptr[0];
out_ptr[0] = out_ptr[1];
out_ptr[1] = c;
out_ptr += 2;
c = out_buf[0];
out_buf[0] = out_buf[1];
out_buf[1] = c;
out_buf += 2;
}
}
#endif
@@ -471,12 +512,12 @@ static int WaveCallback(const void *inputBuffer, void *outputBuffer,
{
// sound output can only do stereo, not mono. Duplicate each sound sample to
// produce 2 channels.
out_ptr = (unsigned char *)outputBuffer;
out_buf = (unsigned char *)outputBuffer;
for(ix=framesPerBuffer-1; ix>=0; ix--)
{
p = &out_ptr[ix*4];
p[3] = p[1] = out_ptr[ix*2 + 1];
p[2] = p[0] = out_ptr[ix*2];
p = &out_buf[ix*4];
p[3] = p[1] = out_buf[ix*2 + 1];
p[2] = p[0] = out_buf[ix*2];
}
}

@@ -1791,8 +1832,7 @@ void Write4Bytes(FILE *f, int value)




int WavegenFill(int fill_zeros)
int WavegenFill2(int fill_zeros)
{//============================
// Pick up next wavegen commands from the queue
// return: 0 output buffer has been filled
@@ -1930,6 +1970,46 @@ int WavegenFill(int fill_zeros)
}

return(0);
} // end of WavegenFill
} // end of WavegenFill2


/* Speed up the audio samples with libsonic. */
static int SpeedUp(short *outbuf, int length, int end_of_text)
{//===========================================================
if(sonicSpeedupStream != NULL && sonicGetSpeed(sonicSpeedupStream) != sonicSpeed)
{
sonicDestroyStream(sonicSpeedupStream);
sonicSpeedupStream = NULL;
}
if(sonicSpeedupStream == NULL)
{
sonicSpeedupStream = sonicCreateStream(sonicSpeed, 22050);
}

sonicWriteShortToStream(sonicSpeedupStream, outbuf, length);

if(end_of_text)
{
sonicFlushStream(sonicSpeedupStream);
}
return sonicReadShortFromStream(sonicSpeedupStream, outbuf, length);
} // end of SpeedUp


/* Call WavegenFill2, and then speed up the output samples. */
int WavegenFill(int fill_zeros)
{//============================
int finished;
unsigned char *p_start;

p_start = out_ptr;

// fill_zeros is ignored. It is now done in the portaudio cakkback
finished = WavegenFill2(0);

if(sonicSpeed > 1.0 && out_ptr > p_start)
{
out_ptr = p_start + 2*SpeedUp((short *)p_start, (out_ptr-p_start)/2, finished);
}
return finished;
} // end of WavegenFill

Loading…
Cancel
Save