Browse Source

[1.48.11]

Command-line: added options --sep --tie.

API, changed the meaning of the "phonememode" parameter in espeak_SetPhonemeTrace() and espeak_TextToPhonemes().

Language changes to:  en, eu, pt.


git-svn-id: https://espeak.svn.sourceforge.net/svnroot/espeak/trunk@385 d46cf337-b52f-0410-862d-fd96e6ae7743
master
jonsd 10 years ago
parent
commit
b27f69bb5a

+ 9
- 9
dictsource/dict_phonemes View File

@@ -85,7 +85,7 @@ p r R R2 s S t tS
v w x X z


Dictionary en_dict 2014-08-09
Dictionary en_dict 2014-08-31

0 3 3: @ @- @L a a#
A: A@ aa aI aI3 aI@ aU aU@
@@ -115,7 +115,7 @@ s S t tS ts v x z
Z


Dictionary ta_dict 2014-08-10
Dictionary ta_dict 2014-08-31

a a: aI aU e E e: i
I i: o o: u U u2 u:
@@ -238,7 +238,7 @@ r r. s S s. t t# t.
t.# v w x z


Dictionary pl_dict 2013-05-03
Dictionary pl_dict 2014-08-20

a E E# E~ i O O~ u
y
@@ -292,7 +292,7 @@ n^ p r R R2 s S t
tS ts v z Z


Dictionary pt_dict 2014-08-09
Dictionary pt_dict 2014-08-31

& &/ &U~ &~ @ @- a A
aI aU e E eI EI eU EU
@@ -846,15 +846,15 @@ k l m n N p r R2
s S t tS v w z Z


Dictionary eu_dict 2014-05-22
Dictionary eu_dict 2014-08-31

a a2 aI aU e eI eU i
a aI aU e eI eU i iU
o oI u Y

; b B c d D f g
h j J k l l^ m n
** b B c d D f g
j J k l l^ m n n2
n^ p Q r R2 s S t
tS ts tz v w x z
T tS ts tz w x z


Dictionary ia_dict 2014-07-10

+ 74
- 23
dictsource/en_list View File

@@ -18,7 +18,7 @@
// ?8 Use full vowel, not schwa in some word endings


// $alt1 use strong ending (-age, -an, -ance, -ative, -table, -ed, -eria, -et, -inal, -ier -mouth -on -or -ored, -ose, -s)
// $alt1 use strong ending (-age, -an, -ance, -ate, -ative, -table, -ed, -eria, -et, -inal, -ier -mouth -on -or -ored, -ose, -s)
// $alt2 use weak ending (ace, ain, an, ar*, ard, ate, ath, ell, ery, ess, et, ie, ile, ine, men, on, ot)
// $alt3 use weak first vowel, a->[a#], e->[@], o->[0#]
// $alt4 separate 'h', not 'th' 'ph' 'sh'; [t2] not [t]
@@ -570,6 +570,7 @@ asap $abbrev
ati $abbrev
atk $abbrev
atm $abbrev
atv $abbrev
avc $abbrev
avg $abbrev
awol eIw0l
@@ -894,6 +895,7 @@ anchovy antSoUvi
anemone a#nEm@ni
anemometer anIm'0mI2t3
anesthetize $alt3
antacid $2
anew a#nju:
?3 anew a#nu:
anime anImeI
@@ -1026,6 +1028,7 @@ axon aks0n
ayuh a#j'@
ayup a#jVp

backdate $2
backend bak'End
backstory baksto@ri
badmouth $alt1
@@ -1065,6 +1068,7 @@ batman batman
battalion $alt3
bazaar $alt3
bazooka ba#zu:k@
beating bi:tIN
bedouin bEdu:I#n
beige beIZ
belisha b@l'i:S@
@@ -1085,6 +1089,7 @@ bias baI@s
biased baI@st
bible baIb@L
bidet bi:deI
bifurcate $1
bigot bIg@t // -ed
bijou bi:Zu:
bikini bIk'i:ni
@@ -1196,6 +1201,7 @@ caldera k0ld'e@r@
caliche ka#li:tSi
caliph $alt6
calix $alt6
callous kal@s // -ed
calv kA:v // for calved, calving
?3 calv kav // for calved, calving
calve kA:v
@@ -1240,6 +1246,7 @@ cashmere kaSmi@3
?3 cashmere kaZmi@3
casino $alt3
cassette $alt3
castrate $2
catastrophe $alt3
catastrophic kat@str'0fIk
catarrh k@tA@
@@ -1264,7 +1271,7 @@ centurion sEntS'U@ri@n
ceres si@ri:z
cerise s@ri:z
?3 certain s3:?n-
certificate s3tIfIk@t
certificate s3tIfIk@t $onlys
cerulean $alt3
c'est seI $u
chagrin SagrIn
@@ -1436,6 +1443,7 @@ conker $1
coquina koUk'i:n@
conquistador k0nk'i:st@do@
conscience k0nS@ns
console k@nsoUl $verb
consort $1
consort $verb
construct $1 $onlys
@@ -1450,6 +1458,7 @@ contest $verb
context $1
contract $1 $onlys
contract $verb
contrail k0ntreIl
contralto k@ntr'altoU
contraption k@ntr'apS@n
contrary k0ntr@ri
@@ -1552,6 +1561,7 @@ debut deIbju:
début debut $text
decade dEkeId
decaf di:kaf
decane dEkeIn
decedent dI#si:d@nt
decent di:s@nt
decibel dEsI#b@L
@@ -1571,6 +1581,7 @@ defens dI2fEns // for defensible
deficit dEfI2sIt
definitive dI2fInI2tIv
?!3 defragment di:fragm'Ent
degas di:g'as
degenerate $alt2 $noun
dego deIgoU
deice di:'aIs
@@ -1602,9 +1613,9 @@ derogative $2
descant dEskant
descry dI2skreI
desert dI2z3:t
desert dEs3t $only
desert dI2z3:t $verb
desolate dEs@l@t
desert dEs3t $only
desert dI2z3:t $verb
desolate dEs@l@t $only
desperate $alt2
?3 detail $2
detante deIt'0nt
@@ -1660,6 +1671,7 @@ dishy dISi
dismal dIzm@l
disparate dIsp@r@t
disreputable $2
dissipate $1
distributor $2
distro dIstroU
disuse dIs'ju:s
@@ -1691,6 +1703,8 @@ drier draI3
driest draI|@st
duet dju:'Et
dugout dVgaUt
dumber dVm3
dumbest dVm@st
dungaree dVNga#r'i:
?!3 dupe dju:p
duress $2
@@ -1724,13 +1738,10 @@ eh eI
eid i:d
eke i:k
el ,El $only
electricity I2lEktr'IsI2ti
electrode I2lEktroUd
electron I2lEktr0n
electrocute $2
elicit I2lIsI2t
electrode I#lEktroUd
elicit I#lIsI#t
élite Il'i:t
elixir I2lIks3
elixir I#lIks3
embed Emb'Ed
ember Emb3
embole $1 // embolism
@@ -1746,6 +1757,7 @@ enroute 0nr'u:t
ensemble 0ns'0mb@L
entendre 0nt'0ndr@-
entente 0nt'0nt
entirity Ent'aI3I#ti
entourage 0nt2UrA:Z
entrail $1
entrance $1 $onlys
@@ -1763,6 +1775,7 @@ epitome I2pIt@mI
epub $alt6
equal i:kw@L
equation I2kweIZ@n
equilibrate $2
equipage EkwIpIdZ
equivocal I2kwIv@k@L
erase I2reIz // erasing erases
@@ -1793,7 +1806,7 @@ ethernet $alt1
etiquette $1
?3 etiquette EtI#k@t
euclidean ju:kl'Idi:|@n
eunuch ju:m@k
eunuch ju:n@k
euphemism ju:f@mIz@m
eureka ju:'ri:ka#
europa jU@r'oUp@
@@ -1807,6 +1820,7 @@ evenings i:vnINz
evit EvI2t // inevitable
exactement Egzakt@m'A~
exalt Egz'0lt
exculpate $1
excuses Ekskj'u:sI#z
execute EksI2kju:t // not $2
executable $3
@@ -1819,12 +1833,15 @@ expert Eksp3:t
expertise Eksp3t'i:z
expletive Ekspl'i:tIv
?3 expletive EksplI#tIv
explicate $1
exploit $1 $onlys
exploit $verb
expo $1
exponential Eksp@n'EnS@L
export $1 $onlys
export $verb
expurgate $1
extirpate $1
extract $1 $onlys
extract $1 $only
extract $2 $verb
@@ -1858,6 +1875,7 @@ favourite feIv@-rI2t
favourites feIv@-rI2ts
fedora fI2d'o@r@
feisty faIsti
fellate $2
feline fi:laIn
felon $alt2
feminine fEm@nIn
@@ -1872,6 +1890,7 @@ ficus faIk@s
fiery faI3ri
?3 filet fI2leI
?3 fillet fI2leI
filtrate $2 $verb
finale fI2nA:li
finance faInans $only
finance $verb
@@ -1894,6 +1913,7 @@ flyby flaIbaI
foothold fUthoUld
forage f0rI2dZ
force fo@s
forearmed $2
foreknowledge $2
forensic f@rEnsIk
foreshadow $2
@@ -2018,6 +2038,7 @@ gucci gu:tSi
gui gu:i $onlys
guinea gIni
gurus gu:ru:z
?!3 gyrate $2

habitual $alt3
hacienda hA:sI'End@
@@ -2109,6 +2130,7 @@ huevo hweIvoU
hula hu:l@
hullabaloo hVl@b@lu:
humane $2
hundred hVndr@d
hunger hVNg3
hungover $2
hurrah h@rA:
@@ -2119,6 +2141,7 @@ hussar hVz'A@
huzza h@z'A:
huzzah h@z'A:
hydrangea haIdr'eIndZ@
hydrate $2 $verb
hyperbola haIp'3:b@l@
hyperbole haIp'3:b@li
hypercube $1
@@ -2142,6 +2165,7 @@ imagery ImIdZri
imagine I2madZI2n
imbecile ImbI2si:l
?3 imbecile Imb@s@L
immolate $1
impedance Imp'i:d@ns
imperative Imp'Er@tIv
imperfect Imp'3:fEkt
@@ -2180,6 +2204,7 @@ ingenuity IndZI2n'ju:I2ti
inherit Inh'ErIt // inherited
innard In3d
inner In3
innervate In3:veIt
innovative In@veItIv
impetus Imp@t@s
?3 inquiry Inkw@ri
@@ -2290,6 +2315,7 @@ laboratory la#b'0r@tri
laborious $alt3
labyrinth lab3InT
labyrinthine lab3'InTi:n
lactate $2 $verb
lascivious $alt3
lager lA:g3
lagoon $alt3
@@ -2304,6 +2330,7 @@ lasagne lasagna $text
laser $alt6
lasso las'u:
?3 lasso lasoU
latex $alt4
latrine $alt3
latte lA:t2eI
?3 launch lA:ntS
@@ -2335,7 +2362,8 @@ lichen laIk@n
lidar laIdA@
lien li:@n
lier laI3 // outlier
ligate li:geIt
ligate $2
?3 ligate laIgeIt
lightning laItnIN
lilac laIl@k
lily lIli
@@ -2672,6 +2700,7 @@ oppose @poUz
opposer @poUz3
opus oUp@s
orange 0rI2ndZ
orate $2
ordeal O@d'i@l
oregano 0rIg'A:noU
organelle O@g@n'El
@@ -2738,6 +2767,7 @@ panache $alt3
panchakarma $alt3 $3
panchayat pa#ntSaI@t
pancreas pankri@s
palpate $2
papaya pa#paI;@
papyrus pa#paIr@s
parabola p@rab@l@
@@ -2843,7 +2873,8 @@ pizzeria $alt1
plaid plad
?3 plateau $2
platoon $alt3
playtest pleItEst
playa plaI@
playtest $alt1
plaza plA:z@
plebeian pl@b'i:@n
plethora plET3r@
@@ -2851,13 +2882,14 @@ plicate $2
plumber plVm3
plus plVs
pois pwA: $only
poly p0lI
poleaxe poUlaks
politer p@l'aIt3
politic p0l@tIk $onlys
poll poUl
poly p0lI
polyamide p0lI'eImaId
polyester p0lI'Est3
polygon $alt1
?3 polygon $alt1
polythene $1
porcelain $alt2
populace $alt2
@@ -2866,6 +2898,7 @@ portend po@t'End
poseidon p@saId@n
posse p0si
postage poUstI2dZ
postdate $2
practise praktI2s
prayer pre@
precedence prEsI2d@ns
@@ -2925,6 +2958,8 @@ project pr0dZEkt $onlys
project $verb
promenade pr0m@n'A:d
pronoun proUnaUn
propranolol proUpr'an@l0l
prostrate $2 $verb
protege pr0t@ZeI
?3 protege proUt@ZeI
protegé protege $text
@@ -2955,6 +2990,7 @@ pythagoras paIT'ag@r@s
python paIT@n
pyramidal pI2r'amId@L

qua kwA:
qaeda kaId@
quadrilateral $3
quash kw0S
@@ -3186,6 +3222,7 @@ sciatica saI'atIk@
sclera skli@r
scourge sk3:dZ
?5 scourge skVRdZ
scrapheap $alt4
scrotum skroUt@m
scuba sku:b@
seabed si:bEd
@@ -3347,16 +3384,18 @@ stygian stIdZi@n
suave swA:v
subcategory $2 // U.S ?
subcontinent $2
subject sVbdZ'Ekt $verb
// subject sVbdZ'Ekt $verb
sublevel sVblEv@L
sublime $2
submenu s'Vbm,Enju:
subordinate $2
subordinate $alt1 $verb
subpoena su:p'i:n@
subsequent sVbsI2kw@nt
subside s@bsaId
subtly sVt@lI $verbf
subvocal sVbv'oUk@L
succinct s@ksINkt
succumb s@kVm
sucrose su:kroUs
suede sweId
suerte swe@rteI // -ed, -es
@@ -3371,6 +3410,7 @@ suntan sVntan
suite swi:t $onlys
superb su:p'3:b
superfluous su:p'3:flu:@s
superheat $3
supernal su:p'3:n@L
superstructure $1
supplier s@plaI3
@@ -3414,6 +3454,7 @@ tangerine tandZ@r'i:n
taoiseach ti:S@x
tapestry tap@stri
tarantula t@rantS@l@
tardis $alt1
tariff tarIf
tase teIz
taskforce t'askf,o@s
@@ -3520,6 +3561,7 @@ tricycle traIsIk@L
trilogy trIl@dZi
trio tri:oU
triplicate $alt2
triplicate $verb
trisquel trIsk'El
triumphant $2
trois twA:
@@ -3597,6 +3639,7 @@ useful ju:sf@L
utan u:t'an
utensil ju:t'Ens@L

?!3 vacate $2
vaccine $2
valet valeI
?3 valet val'eI
@@ -3687,8 +3730,8 @@ whate're w02t'e@
whatsoe're w02tsoU'e@
wheelbarrow w'i:l_b,aroU
?2 wheelbarrow w#'i:l_b,aroU
whereas we@'az
?2 whereas w#e@'az
whereas we@az
?2 whereas w#e@az
wherewithal we@wIDO:l
?2 wherewithal w#e@wIDO:l
whew fju:
@@ -3976,6 +4019,7 @@ Eyjafjalla eIja#fjatla#
Faroe fe@roU
Faroes fe@roUz
Fermanagh f3:m'an@
Flores flo@rIz
Folkestone foUkstoUn
Fuego fweIgoU
Gabon gab0n
@@ -4522,6 +4566,7 @@ Jesus dZi:z@s
Joachim dZoU@kIm
Johann joUhA#n
Jonah dZoUn@
Jolene $alt3
Jorge ho@heI
José hoUs'eI
Jose hoUs'eI
@@ -4735,7 +4780,6 @@ Zoë zoUi
Acura akjUr@
Advil advIl
Allgemeine alg@maIm@
Andagakavi anda#ga#kka#v%i // a Tamil keyboard
Andromeda andr'0mId@
Aquino a#ki:noU
Asimov azI#m0f
@@ -4772,6 +4816,7 @@ Damocles dam@kli:z
(da vinci) da#vIntSi
Dante dA:nt2eI
?3 Datsun dA:ts@n
Degas deIgA: $capital
Desiree dI2zi@reI
?3 Desiree dEz@r'eI
Deslauriers dI2lo@rIeI
@@ -4807,6 +4852,8 @@ Ghandhi gA:ndi
Gibson gIbs@n
Godzilla g0dz'Il@
Goliath $alt3
Gogh g0x
?3 Gogh goU
Grigio gri:Z'oU
Guinness gInIs
Gutierrez gu:tj'ErEz
@@ -4833,7 +4880,8 @@ Jimenez hIm'EnEz
Jonese dZoUnz // Joneses
Kapoor $2
Kawasaki kaU|@s'A:ki
Kendell kEnd@L
Kendall $alt2
Kendell $alt2
Khrushchev kru:stSEf
Khruschev kru:stSEf
Kroger kroUg3
@@ -4932,6 +4980,7 @@ Urquhart 3:kA@t
Versace v3sA:tSi
Vicodin vaIk@dI#n
Volkswagen v'oUlksv,A:g@n
Vries vri:s
Wegener veIg@n3
Wii wi::
Wiimote wi:moUt
@@ -5160,6 +5209,7 @@ haves havz
has %ha#z $pastf $only
has haz $only $atend
(has been) %ha#z%bIn $pastf
(has-been) hazbi:n
(has to) haztu: $atend
(has not) h@zn%0t $pastf
(has not) ha#zn0t $pastf $atend
@@ -5174,7 +5224,7 @@ had ,had $atend
(had it) h,adI2t
(had them) h,adDEm
(had one) hadwVn $atend
(had any) h,ad||Eni
(had any) h,ad||,Eni
(had some) h,ad||sVm
having ,havIN $strend2 $pastf $only
haven't hav@-nt $pastf
@@ -5276,6 +5326,7 @@ thee Di: $u+
thou DaU
thy ,DaI
thine DaIn $u+
thyself DaIs'Elf

(i had) aI||h'ad $atend
(he had) hi:||h'ad $atend

+ 79
- 45
dictsource/en_rules View File

@@ -279,7 +279,7 @@
v) ac (a eIk
ac (cent ak
ac (centu %ak
accessi aks'Es@
accessib aks'Es@b
acci (_ 'A:tSi
ac (cid ak
acc (ol ak
@@ -332,6 +332,7 @@
ach (rom ak
ac (id_ as
_) ac (i a#s
acial eIS@L
acious 'eIS@s
_) ack ak
_) ack (n a#k
@@ -417,6 +418,7 @@
ad (vert_ ad
ad (vert a#d
_) advo adv@
_gr) ad (a eId
hex) ad (e ad
torn) ad eId
_r) ad (L03 eId
@@ -555,6 +557,7 @@
_) ai (z aI

.group al
&) al (X$w_alt2++ @L
_) ale (C_ alI2
@ic) al (_S2 @L
_) al (@ a#l
@@ -622,6 +625,7 @@
al (mig %0l
_) al (ms A:
&) alo (_ @loU
h) alo (gena a#l0
&) al (ous_ @l
_) al (p al
alpha alf@
@@ -993,6 +997,7 @@ propag) an (d 'an
_n) arr (at a#r
_) arr (o ar
_) arro (g ar@
arr (o_ A@
ar (i_ 'A@r
?3 @) ar (io_ 'ar
_b) ar (L02t ar
@@ -1006,6 +1011,7 @@ calend) ar 3
&l) ar (_ 3
&l) ar (ist 3
&m) ar (_ 3
an) ar (_ 3
lun) ar (_ =3
_sep) ara (b 3r@
_p) ara ar@
@@ -1019,7 +1025,7 @@ calend) ar 3
&) ar (diz 3
%C) ar (d_ 3
&d) ar (d_ 3
&h) ar (d_ 3
// &h) ar (d_ 3
&ch) ar (d 3
&k) ar (d_ 3
ll) ar (d_ A@
@@ -1104,6 +1110,7 @@ calend) ar 3
_p) arlia A@l@
@) ar (ol @r
arom (at a#roUm
&) ar (ous_ 3
arre (_ A@
arred (_ A@d
arring (_ A@I2N
@@ -1120,7 +1127,7 @@ calend) ar 3
?3 ion) ary (_ Er%i
XC) ary (_ e@r%i
w) ar O@
wh) ar O@
_wh) ar O@
w) ar (r 0
w) ar (i e@
w) ar (y e@
@@ -1228,8 +1235,10 @@ calend) ar 3
w) atch 0tS
_s) ata (n eIt@
_g) ator eIt3
&) ate (_$w_alt2 @t
&) ate (_$w_alt1+ eIt
&) ate (_$w_alt2+ @t
der) ated (_ eItI#d
der) ating (_ eItIN
pal) ate (_ @t
consul) ate (_ @t
macul) ate (_ @t
@@ -1244,14 +1253,11 @@ consul) ate (_ @t
_it_separ) ate (_ @t
par) ates (_ eIt|s
ct) ate (_ =eIt
@) ated (++_ eItI#d
_s) ate (ll at@
@) ati (_ 'A:ti
at (im_ 'eIt
@) ating (++_ eItIN
&) at (ive @t
&) at (ive_$w_alt1 eIt
// &) ately (_ @tli
ul) at (ory 'eIt
sen) at @t
pl) at (ea at
@@ -1325,6 +1331,7 @@ _it_separ) ate (_ @t
st) atus eIt@s
?3 st) atus at@s
_) at (y eIt
&) at (y_ @t

.group au
au O:
@@ -1737,7 +1744,8 @@ _it_separ) ate (_ @t
co (mprehen k0
co (mprom k0
_) comp (tr k%0m
compu (t k%0#mpju:
co (mput k%0#
co (mputat k0
_) co (mr k0
_) con (@ k%0#n
_) conce (ntra k0ns@
@@ -1778,6 +1786,7 @@ _it_separ) ate (_ @t
_) co (nstip k0
_) co (nstitut k0
_) co (nsole k0
_) co (nstel k0
_) co (nsul k0
_) co (nsult k%0#
_) co (ntact k0
@@ -1785,7 +1794,7 @@ _it_separ) ate (_ @t
co (ntine k0
_) co (ntour k0
_) co (ntrA k0#
_) contra (C@P6 k,0ntr@
_) contra (@P6 k,0ntr@
_) contrast k0#ntraast
contrac (t k%0#ntrak
contrar k%0#ntre@
@@ -1870,15 +1879,16 @@ _it_separ) ate (_ @t
_) de (ba dI2
_) de (bil dI#
_) de (c@ dI#
deca (den dEk@
_) decaffei d%i:kafI
_) deca dEk@
_) deca ((ff d%i:ka
_) deca (nt d%Ika
_) de (cL05 dE
de (cenc di:
de (cib dE
de (cil dE
de (cim dE
_) de (com d,i:
_) de (con d,i:
_) de (conP2 d,i:
de (cor dE
de (coru dI2
de (creas di:
@@ -1886,6 +1896,8 @@ _it_separ) ate (_ @t
de (du dI2
_) de (emp d%i:
_) de (f@ dI2
_) de (falc di:
_) de (feca dE
de (finit dE
de (flat d%i:
de (feren dE
@@ -1895,6 +1907,8 @@ _it_separ) ate (_ @t
_) de (g@ dI2
_) de (hAP2 d,i:
_) de (hyd ,di:
_) de (ifL02 deI
?3 _) de (ifL02 di:
_) de (ist deI
_) de (j dI2
_) de (l@ dI2
@@ -1906,6 +1920,7 @@ _it_separ) ate (_ @t
de (lv+ dE
de (ma dI2
de (magog dE
?!3 _) de (marca di:
demea dI2m'i:
de (men dI2
_) de (milit d%i:
@@ -1922,9 +1937,11 @@ _it_separ) ate (_ @t
deni (tri d%i:naI
_) de (no dI2
_) de (nu dI2
_) de (nuda d,i:
_) de (o d%i:
_) de (p@ dI2
de (per d%i:
_) de (pila dE
de (pol d%i:
de (pop d%i:
depo (siti dEp@
@@ -2022,7 +2039,7 @@ _it_separ) ate (_ @t
di (scov dI2
_) dis (eP3 ,dIs
di (sh_ dI
di (shC dI
_) di (shC dI
_) di (shev+ dI2
_) dis (hAP3 dI2s
_) dis (inP3 ,dIs
@@ -2037,7 +2054,7 @@ _it_separ) ate (_ @t
_) diss (@ dI2s
dis (sect daI
dis (sid dI
di (ssip dI
_) dis (sip dI
dis (solu dI
dis (son dI
di (stan dI
@@ -2295,6 +2312,7 @@ _it_separ) ate (_ @t
cl) ed (_S1v d
@p) ed (_S2vdei t
@@er) ed (_S2v d
our) ed (_S2v d
@ss) ed (_S2dv t
@t) ed (_S2vdei I#d
?8 @t) ed (_S2vdei Ed
@@ -2374,11 +2392,12 @@ _it_separ) ate (_ @t
_w) eigh eI

.group el
_) el (A %Il
_) el (A I#l
_) electro %Il,EktroU
_) elect (rocu I2lEkt
_) elect (rol %ElEkt
_) elect (ron I2lE2kt
_) elect (rici I#lE2kt
_) elect (rocu I#lE2kt
_) elect (rol I#lE2kt
_) elect (ron I#lE2kt
_) ele (g ElI
_) elem ElIm
_) ele (p ElI
@@ -2440,6 +2459,7 @@ _it_separ) ate (_ @t
em (ana Em
emba (s Emb@
em (blem Em
_) em (broc Em
em (bry Em
em (eral Em
_) em (e I2m
@@ -2505,6 +2525,7 @@ _it_separ) ate (_ @t
_) ener En3
g) ener (i @nEr
@@th) enes (_ =@ni:z
_) en (gel En
g) en (etic I2n
&) en (ger In
eng (lA INg
@@ -2771,6 +2792,7 @@ _it_separ) ate (_ @t

.group es
ess (_$w_alt2 @s
&) es (X$w_alt1+ Es
&) es (_S1i z
&es) es (_ i:z
ese (_ i:z
@@ -2778,7 +2800,7 @@ _it_separ) ate (_ @t
&f) es (_S1 s
&k) es (_S1 s
&p) es (_S1 s
&t) es (_S1 s
&t) es (_S1 z#
&c) es (_S1 %Iz
&g) es (_S1 %Iz
&ch) es (_S1 %Iz
@@ -2851,9 +2873,10 @@ _it_separ) ate (_ @t
eth (ic ET
_) ethno (@ ETnoU#
eth (ra 'i:T
eth (yl i:T
eth (ylen ET
eth (ylK i:T
?3 ethyl (K ET@L
@C) eth (_S3e @T
_) etio i:tI@
etta (_ 'Et@
ette (_ 'Et
pal) ett (e @t
@@ -2945,6 +2968,7 @@ _it_separ) ate (_ @t
excav Eksk@v
_) exc (e %Eks
exc (i %Eks
_) ex (ecra Eks
_) ex (crem Eks
exce (llen Eks@
C) ex (e Eks
@@ -2962,6 +2986,7 @@ _it_separ) ate (_ @t
exped (it Eksp@d
ex (pert Eks
experim %EkspErIm
_) ex (piat Eks
@) ex (ia 'Eks
_) exi (gen EksI
ss) ex (_ Iks
@@ -3184,7 +3209,7 @@ _it_separ) ate (_ @t
scr) i (ber aI
i (ber_ aI
t) ibe (t Ib'E
i (bilit I
i (bilit @
b) i (ble_ aI
@) ible (_S4ev @b@L
@) ibles (_S5ev @b@Lz
@@ -3248,7 +3273,7 @@ _it_separ) ate (_ @t
ifier (_ IfaI3
r) i (fl aI
st) i (fl aI
&) ify (_ =I2faI
&) ify (_ =I#faI
i (genous 'I
n) ihi aI|@
_) i (h aI
@@ -3300,8 +3325,8 @@ _it_separ) ate (_ @t
?8 C) iar aIa#
iar (iC i@3
iar (ity Iar
&) iary =j@r%I
&l) iary =i@r%I
&) iary =j@ri
&l) iary =i@ri
_) ian i@n
&) ia (_N =i|@
&) ia (_ =i@
@@ -3455,7 +3480,6 @@ _it_separ) ate (_ @t
igno (ran Ign3
ig (na Ig
_m) ig (ra aIg
_m) ig (rati %aIg
igu (e 'i:g
igu (_ 'i:g

@@ -3643,7 +3667,9 @@ _it_separ) ate (_ @t
_) in (tegri %In
inte (llec Int@
_) inter (@P5 ,Int3 // prefix
_) inter (- ,Int3
_) inter (AP5 ,Int@r
_) inter (cal %Int3:
_) inter (est Intr
interfer Int@f'i@3
_) int (erio+ %Int
@@ -3988,7 +4014,7 @@ _it_separ) ate (_ @t
_) jes (ui dZEz
_) jh (A@ dZ
_) jiha (d dZI2hA:
_) joa (n@ dZoU'a
_) joa (nn dZoU'a
n) j (a_ j
j (ü j

@@ -4063,12 +4089,11 @@ _it_separ) ate (_ @t
&t) ling (_ _lIN
&l) ling (_S4vd IN
linux lInVks
listen lIs@n
?3 _) lo (gK lO
@) lo (gous =l@
lu (na lu:
@) ly (_S2i l%i
@l) ly (_S2 i
&) ly (_S2i l%i
&l) ly (_S2 i
f) ly (_ laI
ief) ly (_S2 l%i
ff) ly (_S2 l%i
@@ -4079,7 +4104,7 @@ multip) ly laI
&p) ly (_S2 l%i
p) ly (_ laI
_) ly (d lI
@) lEss (_S4i l@s
&) lEss (_S4i l@s
@) lEssly (_S6i l@sl%i

.group le
@@ -4140,8 +4165,8 @@ multip) ly laI
mbly mbl%I
o) mb (e m
_bo) mb (K m
_du) mb m
_) mc (C@ m@k
_du) mb (K m
_) mc (C@P2 m@k
_) mc (_C m@k
_) mc (_L05 m@ // c,g,k
_) mc (L05@ m@
@@ -4332,6 +4357,7 @@ multip) ly laI
@@C) o (_ =oU
oa oU
oa (_ 'oU@
oa (b oUa
g) oa (n_ oU@
z) oa (n_ 'oU@
br) oa (d O:
@@ -4432,6 +4458,7 @@ multip) ly laI
@l) oge (_ 0g
&) o (gen_ @
ogeni (c oUdZ'EnI
o (genat '0
o (genous '0
o (geny '0
r) o (ger 0
@@ -4468,7 +4495,7 @@ multip) ly laI
orp) oise @s
o (ism oU
@) o (ist oU
oix (_ wa
oix (_ wA:
tr) o (jan oU
o (ku oU
o (ky_ oU
@@ -4594,7 +4621,7 @@ multip) ly laI
&) om (ise_ =@m
&) om (ize_ =@m
@) om (ist_ =@m
_s) om (n %0m
_s) om (na %0m
_) omni (@@P4 ,0mnI2
_) omni 0mnI
_) omnipo 0mn'Ip@
@@ -4830,7 +4857,7 @@ multip) ly laI
_f) ore (tel %o@
@) or (iti 0r
@) or (ity 0r
_fav) orit 3I#t
_fav) orit @-rI#t
_) or (iC 0r
@t) ore (_ 3
st) ore (_ o@
@@ -4932,11 +4959,11 @@ multip) ly laI
&g) ot (_ @t
&rr) ot (_ @t
&) ot (_$w_alt2 @t
n) ot (a oUt
r) ot (a oUt
t) ot (a oUt
c) ot (an oUt
ot (at oUt
nn) ot (at @t
h) ote (l %oUtE
p) ot (enti @t
b) oth oUT
@@ -5027,7 +5054,6 @@ multip) ly laI
c) ou (pl V
&) our (_ 3
np) our (_ o@
&) oured 3d
ev) our (ed aU@
our (n 3:
?5 our (n VR
@@ -5256,6 +5282,7 @@ multip) ly laI
_) peregrin pEr@grIn
per (fec p3
_) per (iC@@ p,Er
_) per (igr pEr
_) perini pErIn'i:
_) per (iph p3r
_) per (isc pEr
@@ -5390,6 +5417,7 @@ multip) ly laI
_) pro (sa pr@
_) pro (sc pr@
pro (spectA pr@
_) pro (stra pr0
_) pro (sumer pr%oU
pro (tec pr@
pro (test pr@
@@ -5500,6 +5528,7 @@ multip) ly laI
_) re (arm %ri:
_) re (au@P2 ,ri:
re (ck rE
_) re (clina rE
reco (g rEk@
_) re (comP2 r,i:
_) re (conP2 ,ri:
@@ -5562,6 +5591,7 @@ multip) ly laI
repe (titiv rI2pE
re (pli rE
re (prim rE
_) re (prob rE
re (pt rE
_) re (puta rE
re (quis rE
@@ -5749,6 +5779,7 @@ multip) ly laI
1_) st (_
_) st (_ s@nt
stein staIn
i) st (en_ s
_) s (u s
&) s (u_ =s
ssue Su:
@@ -5760,7 +5791,7 @@ multip) ly laI
Ai) s (y z
s (_N z
@) s (_NS1m z
@) s (_$w_alt1S1 s
@) s (_$w_alt1 s
_BA) s (_N s
&se) s (_S1 I#z
&sse) s (_S2 I#z
@@ -5806,8 +5837,8 @@ multip) ly laI
su (burba s@
su (bv s@
substa (nt s@bsta
su (ccA s@
su (ccul sV
su (cce s@
su (cci s@
su (ffic s@
sugar SUg3
re) su (mA zju:
@@ -5856,6 +5887,7 @@ multip) ly laI
_) tz (ar ts
t (h$w_alt4 t
t (A$w_alt4 t2
t (E$w_alt4 t2

t (ap_ t2
ie) t (ary_ t2
@@ -5875,6 +5907,7 @@ multip) ly laI
t (op_ t2
@) town (_S4 t2aUn
tow (er t2aU
_) trans (migP5 trans
_) trans (nP5 trans
_) tri (A traI
_) trie traI
@@ -5969,12 +6002,12 @@ multip) ly laI
theo (logy TI'0
theo (logis TI'0
_) th (eC% T
_) th (us D


.group ti
&) tia (_ S@
&s) tia (_ tS@
propi) ti (a tI
ti (ac tI
&) tian (_ =S@n
&s) ti (an_ tS
@@ -5998,6 +6031,7 @@ multip) ly laI
tion (ality S@n
&) tious S=@s
AC) tive (_ =tIv
_) ti (trat t%aI


.group tu
@@ -6116,7 +6150,7 @@ contin) u ju:
_) u (lA u:
&f) ul (_ @L
?8 &f) ul (_ Vl
s) ul (_ @L
&s) ul (_ @L
@) u (la_ =jU
@) u (lar =jU
@) u (late =jU
@@ -6369,6 +6403,7 @@ contin) u ju:
v v
v (v
_) v (la v
_) vr (A vr

@) va (len veI
_) vehem vi@m
@@ -6444,8 +6479,7 @@ contin) u ju:
xis (_ =ksIs
xus (_ =ks@s
xu (a =kSu:
lu) x (ur gZ
?3 lu) xu (r gZU@
lu) xu (r gZU@
xure (_ kS%U@

.group y

+ 190
- 132
dictsource/eu_list View File

@@ -1,132 +1,190 @@
// This file is UTF8 encoded
// Spelling-to-phoneme words for Basque

b be
c ze
d de
f efe
g ge
h atSe
j xota
k ka
l ele
m eme
n ene
ñ en^e
p pe
q ku
r eR2e
s ese
t te
v uBe
w uBe||bikoitza
x iSa
y i||grekoa
z zeta

_a a
_e e
_i i
_o o
_u u


// numbers
_0 zer'o
_1 b'at
_2 b'i
_3 hir'u
_4 l'aU
_5 b'ost
_6 s'eI
_7 zazp'i
_8 zort'i
_9 beD'eratzi
_10 am'aR2
_11 am'aIka
_12 amaB'i
_13 ama'ir,u
_14 amal'aU
_15 amaB'ost
_16 amas'eI
_17 amazazp'i
_18 emezort'i
_19 emeretz'i
_20 hoQ'eI
_2X hoQ'eIta
_40 b'eR2oQeI
_4X b'eR2oQeIta2
_60 ir'uroQeI
_6X ir'uroQeIta2
_80 l'aUroQeI
_8X l'aUroQeIta2
_1C e'un
_2C b'eR2eun
_0C R2e,un
_0M1 mil'a
_0M2 mil^'i;oI
_0and eta
_dpt _koma


// names of punctuation and symbol characters



// functuion words
// conjunctions
eta $u+ $pause // and
bainan $pause


// pronouns
ni $u+
zu $u+
hura $u+
gu $u+
zuek $u+
haiek $u+

nire $u+ // possessive
zure $u+
haren $u+
bere $u+
gure $u+
zuen $u+
haien $u+
beren $u+

hau $u+ // this
hori $u+ // that
hura $u+ // that (further)

// auxillary verbs
izan $u // to be
naiz $u
zara $u
da $u
gara $u
zarete $u
dira $u

egon $u // to be
nago $u
zaude $u
gaude $u
zaudete $u
daute $u


// gramatical suffixes which can appear as words appended to numbers etc.
// Should these be in eu_rules ??
a $u
an $u
ean $u
eko $u
era $u
ko $u


etxe $1 $only

// This file is UTF8 encoded
// Spelling-to-phoneme words for Basque
b be
c ze
d de
f 'efe
g ge
h 'atSe
j J'ota
k ka
l 'ele
m 'eme
n 'ene
ñ 'en^e
p pe
q ku
r 'eR2e
s 'ese
t 'te
v 'uBe
w 'uBe||bikoitza
x 'iSa
y i||gr'ekoa
z 'z'eta
_a a
_e e
_i i
_o o
_u u
// numbers
_0 zer'o
_1 b'at
_2 b'i
_3 'iru
_4 l'aU
_5 b'ost
_6 s'eI
_7 z'azpi
_8 z'ortzi
_9 beD'eratzi
_10 am'aR2
_11 am'aIka
_12 am'aBi
_13 am'aIru
_14 am'alaU
_15 am'aBost
_16 am'aseI
_17 am'azazpi
_18 em'ezortzi
_19 em'eretzi
_20 oQ'eI
_2X oQeIta
_40 beR2oQ'eI
_4X beR2oQeIta
_60 iruroQ'eI
_6X iruroQeIta
_80 laUroQ'eI
_8X laUroQeIta
_1C e'un
_2C beR2'eun
_3C ir'ureun
_4C laur'eun
_5C bost'eun
_6C sei'eun
_7C zazp'ieun
_8C zortz'ieun
_9c bederatz'ieun
_0C e,un
_0M1 m'il^a
_0M2 mil^'ioI
_1M2 mil^'ioI||bat
_0and eta
_dpt _koma
// names of punctuation and symbol characters
_. p'untu
_, k'oma
_- gid'oI
_! arr'idura
_? gald'era
_: b'i||p'untu
_; p'untu||eta||k'oma
// functuion words
// conjunctions
eta $u+ $pause // and
baina $u+ $pause
// pronouns
ni $1
zu $1
hura $1
gu $1
zuek $1
haiek $1
nire $u+
zure $u+
haren $u+
bere $u+
gure $u+
zuen $u+
haien $u+
beren $u+
hau $1 // this
honen $1
hauen $1
hori $1 // that
horren $1 // genitive
hura $1 // that (further)
haien $1 // genitive
// Some auxiliary verbs
gara $2
zara $2
dira $2
// gramatical suffixes which can appear as words appended to numbers etc.
// Should these be in eu_rules ??
a $u
ak $u
an $u
ean $u
etan $u
eko $u
etarako $u
ko $u
era $u
ra $u
etara $u
// Other words (mostly nouns)
// Bisillabic words which have the stres always in the first syllable
kaixo $1
testu $1
lehia $1
patu $1
// Bisillabic words whitch get misspronounced with the suffix list
etxe $1 $only
kale $1 $only
aste $1 $only
urte $1 $only
// j as [x]
jipoi x'ipoi
// other
aerobiko $3
aerodinamiko $5
aerodinamika $5
aerodromo $3
aerometro $3
aeromodelismo $6
aeronauta $4
aeronautika $4
aeronautiko9 $4
aerosol $4
aerostatika $4
aerostato $4
adrenalina adrenalin2a
aharraus $2
aharrausika $2
ahur aur $only
ahurr auR2
// Abbreviations
adib ad'ibidez $hasdot
// proper names and surnames
juan xw'an
jorge x'orxe
jose x'ose
josé x'os'e
joaquín xoak'in
san $u
santo $u
aristoteles $3
hume x'iUm
nietztsche n'itSe
abako $1

+ 250
- 147
dictsource/eu_rules View File

@@ -1,147 +1,250 @@

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


.group a
a a
ai aI
au aU


.group b
b b


.group c
c k
c (e s
c (i s


.group d
d d
Ki) d (A J
dd J
A) d (A D // ??




.group e
e e
ei eI
eu eU

&) ek (_S2 ek

.group f
f f


.group g
g g
A) g (A Q // ??


.group h
h // silent


.group i
i i


.group j
j J // try [x] [J] [j] [J^] [Z] [S]


.group k
k k


.group l
l l
ll l^
Ki) l (A l^


.group m
m m


.group n
n n
Ki) n (A n^


.group ñ
ñ n^


.group o
o o
oi oI


.group p
p p


.group q
q k
qu kw
que (_ k


.group r
r r
_) r R2
r (_ R2
rr R2


.group s
s s


.group t
t t
Ki) t (A c
ts ts
tt c
tx tS
tz tz


.group u
u u


.group v
v v


.group w
w w


.group x
x S


.group y
y j
K) y (K i


.group z
z z



.group
ç s
ü Y

// This file is UTF8 encoded
// Spelling-to-phoneme rules for Basque
.L01 b d g
.L02 e i
.group a
a a
ai aI
ahi aI
au aU
ahu aU
a (_S1t a
ak (_S2t ak
ari (_S3t ari
aren (_S4t a**en
arekin (_S6t a**ekin
arentzat (_S8t a**entzat
arentzako (_S9t arentzako
an (_S2t an
atik (_S4t atik
ara (_S3t a**a
arat (_S4t arat
atatik (_S6t atatik
atara (_S5t ata**a
atarat (_S5t atarat
ako (_S3t ako
atako (_S5t atako
araino (_S6t a**ain^o
ataraino (_S8t ata**an^o
arantz (_S6t a**antz
atarantz (_S8t a**antz
agana (_S5t agana
arengana (_S8t a**engana
arenganaino (_s11 a**enganain^o
arengatik (_S9t a**engatik
atzat (_S5t atzat

.group b
b b
_ez_) b (A p'

.group c
c k
c (L02 T

.group d
d d
dd J
A) d (A D // ??
_ez_) d (A t'

.group e
e e
ei eI
ehi eI
l) ehi (A eI
eu eU
ek (_S2t ek
ei (_S2t eI
en (_S2t en
ean (_S3t ean
etan (_S4t etan
etatik (_S6t etatik
etara (_S5t eta**a
erat (_S4t erat
etako (_S5t etako
eko (_S3t eko
etarako (_S7t etarako
etarantz (_S8t eta**antz
etaraino (_S8t eta**aino
engana (_S6t engana
entzat (_S6t entzat
entzako (_S7t entzako
engatik (S7 engatik
ekin (_S4t ekin
ekiko (_S5t ekiko
ez (_S2t ez
etaz (_S4t etaz

.group f
f f

.group g
g g
A) g (A Q // ??
_ez_) g (A k'
gana (_S4t gana
go (_S2t go

.group h
h // silent
zi) h (o x

.group i
i i
K) i (_S1t i
ad) i (eraz j
le) i (h j
arraz) i (on j

.group j
j J // try [x] [J] [j] [J^] [Z] [S]
ad) j (udika x

.group k
k k
ko (_S2t ko

.group l
l l
ll l^
_ez_) l (A l'

.group m
m m

.group n
n n
n (_S1t n
adrenali) n n2
admi) n (istr n2

.group o
o o
oi oI

.group p
p p

.group q
q k

.group r
r r
_) r R2
rr R2
A) ri (_S2t ri
ren (_S3t ren
ra (_S2t ra
rat (_S3 t rat
rantz (_S5t rantz
raino (_S5t raino
rako (_S4t rako
rentzat (_S7t rentzat
rentzako (_S8t rentzako
rekin (_S5t rekin
rengan (_S6t rengan
rengana (_S7t rengana
rengandik (_S9t rengandik
rengatik (_S8t rengatik

.group s
s s

.group t
t t
ts ts
tt c
tx tS
tz tz
tan (_S3t tan
tara (_S4 t tara
tarat (_S5t tarat
tik (_S3t tik
tatik (_S5t tatik
taz (_S3t taz
tu (_S2t tu
tuko (_S4t tuko
tzen (_S4t tzen
ten (_S3t ten

.group u
u u

.group v
v b

.group w
w u

.group x
x S

.group y
y jj

.group z
z z
_e) z (_L01 %z
_e) z (_l
z (_S1t z

.group
á ''a
é ''e
í ''i
ó ''o
ú ''u
ç s
ü Y
ñ n^

+ 1
- 1
dictsource/pl_rules View File

@@ -81,7 +81,7 @@
.group c

c ts
ch h
ch x
ch (i C
chi (A hj
psy) chi (a hi

+ 47
- 17
dictsource/pt_list View File

@@ -120,6 +120,11 @@ _− m'enUs
½ m'eIU
¾ tRes#kw'a*@-tUs#
® xeZistR'adU
↑ s'Et&as'im&
↓ s'Et&ab'aISU
← s'Et&aes#k'e*@-d&
?2 → s'Et&adZi*eIt&

?1 ™ m'a*@-k&xeZiSt'ad&
?2 ™ m'a*@-k&xeZistR'ad&
_, v'irgul&
@@ -694,14 +699,18 @@ ampola $alt2
ampulheta $alt2
anchova $alt2
andorra $alt2
andrea $alt
andreia $alt
antonieta $alt2
apego $alt2 $noun
apelo $alt2 $noun
apelos $alt2
aposto $alt $verb
aperto $alt2 $noun
apertos $alt2
apneia $alt
apoio $alt $verb
aqueia $alt
arredores $alt
arremesso $alt2 $noun
arrocho $alt2 $noun
@@ -722,9 +731,12 @@ açores $alt2
bairro b'aIxU
baitola $alt2
balancete $alt2
bangladesh $alt
banquete $alt2
barreto $alt2
basileia $alt
bastonete $alt2
baviera $alt
beco $alt2
besta $alt2
beça $alt
@@ -753,14 +765,17 @@ broto $alt2 $noun
buceta $alt2
cabresto $alt2
cacete $alt2
cacoete $alt2
caderneta $alt2
cadete $alt2
caibro k'aIbRU
cãibra k'&~IbR&
caixeta $alt2
caldeia $alt
camelha $alt
camiseta $alt2
canaleta $alt2
cananeia $alt
canhoto $alt2
capacete $alt2
caractere $alt
@@ -775,18 +790,16 @@ catequeses $alt
catorze $alt2
cavalete $alt2
cebola $alt2
cedro $alt
cefaleia $alt
centopeia $alt
cerebelo $alt2
cerca $alt $verb
cerco $alt $verb
cetro $alt
chamego $alt2 $verb
chamegos $alt2
chamego $alt2
chamego $alt $verb
chapeleta $alt2
chaveta $alt2
chefe $alt
choco $alt2 $noun
choça $alt
chofer $alt
@@ -823,7 +836,6 @@ controles $alt2
controles $alt $verb
controlo $alt2 $noun
conveses $alt
copta $alt
coreia $alt
cores $alt2
cores $alt $verb
@@ -835,8 +847,10 @@ coro $alt $verb
corpete $alt2
corpos $alt
corto $alt
corveia $alt
corveta $alt2
corvos $alt
cosme $alt
costeleta $alt2
coto $alt2
cotovelo $alt2
@@ -844,11 +858,14 @@ cozem $alt
cratera $alt
crede $alt2
credo $alt
crimeia $alt
decoreba $alt
decoro $alt2 $noun
degelo $alt2
desaforo $alt2
desamores $alt2
desapego $alt2 $noun
desapego $alt2
desapego $alt $verb
desassossego $alt2 $noun
desconfortos $alt2
desconsolo $alt2 $noun
@@ -857,6 +874,7 @@ descordo $alt
descorno $alt
desemprego $alt2
desemprego $alt $verb
desenvolto $alt2
desespero $alt2
desespero $alt $verb
desfecho $alt2
@@ -869,6 +887,8 @@ desse $alt2
desse $alt $verb
deste $alt2
deste $alt $verb
destempero $alt2 $noun
destemperos $alt2
desterro $alt2
destroem $alt
deteriore $alt
@@ -892,7 +912,8 @@ doso $alt
doze $alt2
dueto $alt2
edson $alt
elixir eliSir
egeia $alt
eleia $alt
emborco $alt
emprego $alt2
emprego $alt2 $noun
@@ -900,6 +921,7 @@ encasqueta $alt
encosto $alt $verb
endereço $alt $verb
endoide $alt2
eneias $alt
enforco $alt
engodo $alt2
engordo $alt
@@ -976,6 +998,7 @@ força $alt $verb
forço $alt
formos $alt2
forro $alt $verb
fosso $alt2
frescores $alt2
frevo $alt2
fulgores $alt2
@@ -993,7 +1016,6 @@ gesso $alt2
gloso $alt
gonorreia $alt
gol gow
golpe $alt
gorda $alt2
gorjeta $alt2
gororoba $alt
@@ -1003,6 +1025,7 @@ gota $alt2
governo $alt2
governo $alt $verb
gozo $alt2 $noun
gozos $alt2
graveto $alt2
groselha $alt
grosso $alt2
@@ -1028,6 +1051,7 @@ jogo $alt $verb
jogos $alt
joguete $alt2
judeia $alt
jurubeba $alt
lacerda $alt
lagosta $alt2
lambreta $alt2
@@ -1043,13 +1067,11 @@ lopes $alt
lutero $alt
macete $alt2
maioneses $alt
manopla $alt
maniçoba $alt
marieta $alt2
mariposa $alt2
megera $alt
melhor $alt
menor $alt
meta $alt $noun
metro $alt
minueto $alt2
@@ -1064,7 +1086,6 @@ moem $alt
mofo $alt $verb
mogno $alt
molho $alt2 $noun
monera $alt
montenegro $alt2
mor $alt
morcego $alt2
@@ -1077,6 +1098,7 @@ namoro $alt2 $noun
naquela $nounf
naquele $alt2 $nounf
nervo $alt2
niceia $alt
ninfeta $alt2
nitreto $alt2
nojo $alt2
@@ -1097,8 +1119,11 @@ pacheco $alt2
paexa paeSa
paella pa'el^&
palacete $alt2
palermo $alt
palimpsesto $alt2
palheta $alt2
palhoça $alt
panaceia $alt
pangeia $alt
pantera $alt
papoco $alt2 $noun
@@ -1106,7 +1131,7 @@ paradoxo $alt
parede $alt2
pateta $alt
peba $alt
pedra $alt
pedro $alt2
peixoto $alt2
pela $alt2
pelo $alt2
@@ -1120,6 +1145,7 @@ pesadelo $alt2
peses $alt
peseta $alt2
peso $alt $verb
pigmeia $alt
piloto $alt2 $noun
pilotos $alt2
pior $alt
@@ -1130,6 +1156,7 @@ plebeia $alt
poderem $alt2
polca $alt
pompeia $alt
popa $alt2
porcos $alt
porque $alt2
porra $alt2
@@ -1153,6 +1180,7 @@ quitinete $alt
quinteto $alt2
ramalhete $alt2
rancores $alt2
ranheta $alt2
raposa $alt2
recomeço $alt $verb
reconstroem $alt
@@ -1228,10 +1256,10 @@ sulfureto $alt2
super s'Uper
suporto $alt
suor suOr
tabefe $alt
tambores $alt2
tapera $alt
tapete $alt2
tebas $alt
temores $alt2
tempero $alt2 $noun
tenores $alt2
@@ -1249,6 +1277,7 @@ torno $alt $verb
tornozelo $alt2
torre $alt2 $noun
torres $alt2
torreta $alt2
torro $alt
toso $alt
totens $alt
@@ -1264,6 +1293,7 @@ tropa $alt
tropeço $alt2 $noun
trombeta $alt2
ureia $alt
uretra $alt
vanessa $alt2
vareta $alt2
vera $alt
@@ -1277,7 +1307,6 @@ voga $alt
voice $alt
xarope $alt
xereta $alt2
xerox S'E*Oks
xeroxes $alt
zelo $alt2 $noun
zorra $alt2
@@ -1314,7 +1343,7 @@ doc d'Ok
?2 designer dez'aIner
?2 designers dez'aIners
?2 desktops deskt'Ops
dj d,i:dZ'eI
?1 dj d,i:dZ'eI
?2 diesel dZ'izEU
?2 doha d'ox&
?1 down d'a,wn
@@ -1349,6 +1378,7 @@ get gEt
?1 hardware 'ard,w'Er-
?2 hardware h'ardwe@-
happy x'Epy
?2 haxixe xaS'iSy
?1 home 'omy
?2 home h'owmi
hot xOt
@@ -1424,9 +1454,10 @@ upgrade &pgR'eId
upload &pl'oud
?2 web w'Eb
writer r'aIter
xerox S'E*Oks
?1 yahoo 'i,ah'u
?2 yahoo iah'u
?1 yes j'Es
yes j'Es


// common person names
@@ -1470,7 +1501,6 @@ mac mEk
?2 microsoft m'aIkRows'Oft
?1 movie m'uvi
?1 nero n'Eru
?2 nero n'ErU
?2 netbooks nEtbUks
?2 notebook nowtbUk
?2 notebooks nowtbUks

+ 59
- 76
dictsource/pt_rules View File

@@ -1,4 +1,4 @@
// translation rules Brazilian
// translation rules Brazilian
// This file is UTF-8 encoded

// Options
@@ -22,6 +22,7 @@
.L05 r ra ram re rem rde rmo
.L06 r ra ram ste sse ssem re rem rmo
.L07 sse ssem ste
.L08 a o


.group a
@@ -201,7 +202,7 @@

e (dL02_ E

e (fa_ E
e (fL04_ E

e (gL04_ E

@@ -218,16 +219,16 @@

ib) e (rL04_ E
d) e (rL04_ E
eb) e (L07_ e // recebeste, etc.
ed) e (rL04_ e
eg) e (L07_ e // elegeste, etc.
_@o) e (L07_ e // doeste, etc.
iv) e (rL04_ E
pod) e (rA_ e

@s) e (L05_ E

p) e (rL04_ E

f) e (rL04_ E

n) e (rL04_ E
p) e (rL04_ E
e (quL02_ E
e (rbL04_ E
e (rgL04_ E
@@ -241,19 +242,12 @@
?2 ee (C_ i
?2 C) e (em_ e
e (stL04_ E

e (strL04_ E

e (rme_ E

e (rnL04_ E

e (rtL04_ E

e (rrL04_ E

e (rvL04_ E

e (tL04_ E
m) e (tL03_ e
An) e (tA_ e
@@ -345,6 +339,7 @@

ef) e (tuL02_ e
t) e (tra E
e (drL04_ E

âC) e (C@ e
âCC) e (C@ e
@@ -357,6 +352,7 @@
éCC) e (CA_ e
éCCC) e (C@ e
?2 íC) el (_ eU
í) e (C@ e
íC) e (C@ e
íCC) e (C@ e
óC) e (C@ e
@@ -375,6 +371,8 @@
_pud) e (L05_ E
_exag) e (L05_ E
_mulh) e (L05_ E
_chancel) e (L05_ E
vi) e (L05_ E
_talh) e (L05_ E
_troux) e (L05_ E
@m) e (L06_ e // temeram, etc.
@@ -384,19 +382,15 @@ _troux) e (L05_ E
diss) e (L06_ E // contra-
romp) e (L06_ e // cor- inter-
_houv) e (L06_ E
_escond) e (L06_ e
respond) e (L06_ e
sCond) e (L06_ e // esconderam, etc.
constrang) e (L07_ e
eb) e (L07_ e // recebeste, etc.
eg) e (L07_ e // elegeste, etc.
_@o) e (L07_ e // doeste, etc.
_cr) e (L07_ e
_dev) e (L07_ e
bat) e (L07_ e // re- com-
ced) e (L07_ e // pro- con- su-
met) e (L07_ e // meteste, cometeste, etc.
mex) e (L07_ e
_requer) e (L07_ e
_requer) e (L07_ e
prouv) e (L07_ e
mov) e (L07_ e // re- co-
olv) e (L07_ e // devolveste, etc.
@@ -408,8 +402,8 @@ precav) e (L07_ e
_coz) e (L07_ e
_val) e (L07_ e
colh) e (L07_ e // & es-
_lamb) e (L07_ e
_prov) e (L07_ e
_lamb) e (L07_ e
_prov) e (L07_ e
ench) e (L07_ e // pre-
vert) e (L07_ e // in- re- con-
ergu) e (L07_ e
@@ -427,11 +421,12 @@ _troux) e (L07_ E
_amanc) e (bL03_ E
qu) e (brL04_ E
_perp) e (trL04_ E
_assev) e (rL04_ E
sev) e (rL04_ E
_imp) e (trL04_ E
cel) e (brL04_ E
_sop) e (sL04_ E
_C) e (bre_ E
_barb) e (tA_ e
_boch) e (chL04_ e
_ex) e (crL04_ E
impr) e (gnL04_ E
@@ -440,56 +435,47 @@ _amanc) e (bL03_ E
_sob) e (rbL03_ e
_pr) e (dL03_ E
_arr) e (dL03_ E
_emp) e (drL03_ E
_enc) e (dL03_ E
_api) e (dL03_ E
_enc) e (dL03_ E
_api) e (dL03_ E
_depr) e (dL03_ E
_hosp) e (dL03_ E
_enver) e (dL03_ E
_) e (dnL03_ E
_gr) e (gL03_ e
_gal) e (gL03_ e
_alvin) e (grL03_ e
_) e (dnL08_ E
_gr) e (gL08_ e
_gal) e (gL08_ e
_lanc) e (tA_ e
menorr) ei (a_ EI
_pel) e (gL03_ e
_n) e (grL03_ e
_pel) e (gL08_ e
n) e (grL08_ e
estr) ei (L04_ EI
_confed) e (rL04_ E
_r) e (jL03_ E
_inv) e (jL04_ E
_panfl) e (tL04_ e
_v) e (lhL03_ E
_v) e (lhL08_ E
_gr) e (lhL04_ E
_tataran) e (tA_ E
_tetran) e (tA_ E
_trin) e (tA_ E
_tataran) e (tL08_ E
_tetran) e (tL08_ E
_trin) e (tL08_ E
_caC) e (lo_ e
_porr) e (tA_ e
_porr) e (tA_ e
_livr) e (tA_ e
?2 el (ton_ 'EU
ad) e (quL04_ E
_ing) e (rL02_ E
_dig) e (rL02_ E
_m) e (rL03_ E
_sev) e (rL03_ E
_reit) e (rL04_ E
_sinc) e (rL03_ E
_sinc) e (rL08_ E
_g) e (rL04_ E
_z) e (rL04_ E
qu) e (rL04_ E // re-
_on) e (rL04_ E
gen) e (rL04_ E // de- re-
_alt) e (rL04_ E
_enc) e (rL04_ E
_esm) e (rL04_ E
_esm) e (rL04_ E
_min) e (rL04_ E
_sug) e (rL04_ E
_tol) e (rL04_ E
_ven) e (rL04_ E
acel) e (rL04_ E // des-
eson) e (rL04_ E
_apod) e (rL04_ E
_enum) e (rL04_ E
_exub) e (rL04_ E
@@ -497,23 +483,21 @@ _adult) e (rL04_ E
_aglom) e (rL04_ E
_dilac) e (rL04_ E
_encarc) e (rL04_ E
_incin) e (rL04_ E
_persev) e (rL04_ E
_refrig) e (rL04_ E
_c) e (rcL02_ E
_ex) e (rcL02_ E
_alic) e (rcL02_ E
_esqu) e (rdL03_ e
_esqu) e (rdL08_ e
_C) e (rdL04_ E
_des) e (rdL04_ E
_oblit) e (rL04_ E
_oblit) e (rL04_ E
s_colh) e (res_ E
_) e (rgL03_ e
_re) e (rgL03_ e
_so) e (rgL03_ e
sp) e (rma_ E
e (rquL02_ E
_bez) e (rrL03_ e
_beC) e (rrL08_ e
v) e (rtL03_ e // con- re- in-
_f) e (rvL03_ e
_alic) e (rçL03_ E
@@ -525,7 +509,7 @@ s_colh) e (res_ E
_p) e (scL03_ E
_m) e (sclL04 E
dioc) e (ses_ E
_aust) e (rA_ E
_aust) e (rL08_ E
_d) e (spL02_ E
proc) e (ssL02_ E
_p) e (squL02_ E
@@ -535,20 +519,20 @@ s_colh) e (res_ E
_ac) e (ssL02_ E
_esp) e (ssL03_ e
_c) e (stL03_ e
_pr) e (tL03_ e
_pr) e (tL08_ e
_rem) e (tL03_ e
_derr) e (tL03_ e
_obsol) e (tL03_ e
_obsol) e (tL08_ e
_bol) e (tL04_ e
_CaC) e (ta_ e
_minu) e (tA_ e
_terc) e (tA_ e
viol) e (ta_ e
_Carr) e (ta_ e
_Gur) e (ta_ e
_Gur) e (ta_ e
_pen) e (trL04_ E
_sol) e (trL04_ E
_n) eu (trL03_ 'eU
_n) eu (trL08_ 'eU
_d) e (vL03_ e
scr) e (vL03_ e // e- in- pre- ree- de-
_atr) e (vL03_ e
@@ -632,7 +616,7 @@ _redar) gu (A gw
san) gu (ín gw
san) gu (in gw
stin) gu (A gw
_un) gu (ento_ gw
_un) gu (ento_ gw
xtin) gu (A gw
?1 n) gu (A gw // eg: língua, etc.
?1 man) gu (ei g // mangueira
@@ -891,6 +875,7 @@ _redar) gu (A gw
b) o (rL04_ O
o (p_ O
C) o (pL04_ O
o (pCL04_ O
?1 _) o (C O // eg: olá, orla, opção, etc...
?1 _C) o (CACAC u // Documento, documentação, localizar, etc.
?1 f) o (rmat u // formatar, formato.
@@ -920,16 +905,16 @@ _redar) gu (A gw
//sort
_f) o (L05_ o
_red) o (L05_ O
_pormen) o (L05_ O
men) o (L05_ O
_f) o (L07_ o
_s) o (bL02_ O
_af) o (bL04_ O
_esn) o (bL04_ O
_engl) o (bL04_ O
_sal) o (brL03_ o
_) o (cL03_ o
_barr) o (cL03_ o
_ch) o (chA_ o
_sal) o (brL08_ o
_) o (cL08_ o
_barr) o (cL08_ o
_ch) o (chL08_ o
_m) o (chA_ o
_f) o (dL01_s o
_ecl) o (dL03_ o
@@ -944,7 +929,7 @@ _pormen) o (L05_ O
_ap) oi (L02_ OI
_b) oi (L04_ OI
_C) oi (ce_ oI
_t) o (lL03_ o
_t) o (lL08_ o
_f) o (lgL04_ O
_emp) o (lgL04_ O
_arr) o (lhL03_ O
@@ -953,13 +938,10 @@ _pormen) o (L05_ O
_) o (bstL04_ O
m) o (lhL04_ O
emb) o (lsL04_ O
_env) o (ltL03_ o
_env) o (ltL08_ o
_esC) o (pA_ o
antr) o (pL03_ o
_s) o (prL04_ O
_al) o (prL04_ O
_ass) o (prL04_ O
_) o (ptL04_ O
g) ol (pe_ Ow
antr) o (pL08_ o
flex) o (rA_
p) o (rL02_ o
_dev) o (rL02_ O
@@ -1004,13 +986,14 @@ _pormen) o (L05_ O
?1 ovos (_G Ov=UZ novos, povos, etc.
?2 ovos (_G Ov=Uz novos, povos, etc.
ortos (_ O*@-t=Us# // tortos, mortos, etc.
_Gar) o (tL03_ o
_escr) o (tL03_ o
_Gar) o (tL08_ o
_escr) o (tL08_ o
zig) o (to_ o
_ch) o (vL01_ o
pr) o (vL03_ O
_Com) o (do_ o
_ortod) o (xL03_ O
_ortod) o (xL08_ O
_arr) ox (A OS
_g) o (zL04_ O
_alm) o (çL01_ O
_esb) o (çL01_ O
@@ -1019,7 +1002,7 @@ _ortod) o (xL03_ O
_ad) o (çL03_ O
_emp) o (çL03_ O
_end) o (çL03_ O
_c) o (çL03_ O
_c) o (çL03_ O
//endsort

.group ô
@@ -1229,11 +1212,9 @@ _ortod) o (xL03_ O
.group x
x (A S
A) x (A ks
e) x (A ks
_e) x (A z
_ê) x (A z
_ine) x (A z
_ine) x (orAC ks
e) x (A ks
?1 e) x (CA S
ai) x (A S
ei) x (A S
@@ -1254,7 +1235,6 @@ _ortod) o (xL03_ O
xA) x (A S
_abaca) x (i S
ale) x (a S
_arro) x (e S
_ave) x (A S
bau) x (A S
brA) x (A S
@@ -1263,6 +1243,7 @@ _abaca) x (i S
_ca) x (A S
_co) x (A S
_coe) x (A z
_eli) x (ir S
_esdrA) x (ul S
_e) x (u_ S
_fa) x (i S
@@ -1270,6 +1251,8 @@ _esdrA) x (ul S
gra) x (A S
_he) x (A z
?2 _he) x (A ks
_ine) x (A z
_ine) x (orAC ks
_lagarti) x (A S
_li) x (A S
_lu) x (A S

+ 1
- 0
dictsource/ta_list View File

@@ -304,6 +304,7 @@ _#-லும் ilUm

// English words
tamil தமிழ் $text
andagakavi அந்தகக்கவி $text


// exceptions

+ 6
- 1
dictsource/ta_rules View File

@@ -3966,7 +3966,6 @@ _பெனசீர்_) ப (ுட்டோ b


//sort
_மனோ) ப்ப (ல bbV
_குங்) ப fV#
_நீர்) ப pV#
_ப்ரூ) ப fV#
@@ -4677,6 +4676,7 @@ _மைக்ரோசா) ப் (ட f
_ஹ) ப்ப (ர்ட bbV
_துர்) ப்ப (ல bbV
_முழு) ப்ப (ல bbV
_மனோ) ப்ப (ல bbV
உ) ப்ப (லா bbV
உ) ப்ப (லாக bbV
உ) ப்ப (லான bbV
@@ -4719,6 +4719,7 @@ _வெளி) ப்பி (ரகார pp
_சுக) ப்பி (ரச pp
அதிக) ப்பி (ரசங்க pp
_மலை) ப்பி (ரசங்க pp
_மலை) ப்பி (ரசங்க pp
_சண்ட) ப்பி (ரசண்ட pp
L03) ப்பிரச (ார pprVtS
_கை) ப்பி (ரசுர pp
@@ -4746,6 +4747,7 @@ _சத்திய) ப்பி (ரமா pp
இரத்த) ப்பி (ரவாக pp
_ஒL10ி) ப்பி (ரவாக pp
_மணி) ப்பி (ரவாள pp
_மணி) ப்பி (ரவாள pp
தேச) ப்பி (ரஷ்ட pp
_ஜாதி) ப்பி (ரஷ்ட pp
_வான) ப்பி (ரஸ்த pp
@@ -4757,6 +4759,8 @@ _கூட்டு) ப்பி (ரார்த்தனை pp
_வடை) ப்பி (ரிய pp
_கஜ) ப்ப (ிருஷ்ட bb
L03) ப்பி (ரேத pp
L03) ப்பி (ரேத pp
L03) ப்பி (ரேத pp
L03) ப்பி (ரேரணை pp
_ஹ) ப்ப (ிள bb
_க்ள) ப்ப (ுகள bb
@@ -4771,6 +4775,7 @@ _சந்தேக) ப்ப (ுத்தி bb
_ல) ப்ப (ை bb
_தர்) ப்ப (ை bb
_மர) ப்ப (ொம்மை bb
ரா) ப்ப (ோஜன bb
_ரா) ப்ப (ோஜன bb
துர்) ப்ப (ோதனை bb
_கே) ப் (மாரி p

+ 13
- 8
docs/commands.html View File

@@ -80,7 +80,7 @@ If neither -f nor --stdin is given, then the text input is taken from "text word
<dt>
<strong>-s &lt;integer&gt;</strong><br>
<dd>Sets the speed in words-per-minute (approximate values for the default English voice, others may differ slightly). The default value is 175. I generally use a faster speed
of 200. Range 80 to 450. Larger value are rounded down to the maximum.
of 260. The lower limit is 80. There is no upper limit, but about 500 is probably a practical maximum.
<p>
<dt>
<strong>-b &lt;integer&gt;</strong><br>
@@ -141,8 +141,9 @@ Some languages may need additional dictionary data, see <a href="languages.html"
<p>
<dt>
<strong>-x</strong><br>
<dd>The phoneme mnemonics, into which the input text is translated, are
written to stdout.
<dd>The phoneme mnemonics, into which the input text is translated, are written to stdout.
If a phoneme name contains more than one letter (eg. [tS]), the --sep or --tie option can be used to distinguish
this from separate phonemes.
<p>
<dt>
<strong>-X</strong><br>
@@ -167,12 +168,8 @@ The same as <strong>--compile</strong>, but source line numbers from the *_rules
<dt><strong>--ipa</strong><br>
<dd>
Writes phonemes to stdout, using the International Phonetic Alphabet (IPA).<br>
If a phoneme name contains more than one letter (eg. [tS]) an optional parameter can be used to distinguish
If a phoneme name contains more than one letter (eg. [tS]), the --sep or --tie option can be used to distinguish
this from separate phonemes.
<br>
<code>--pho=1 </code> Use a tie character (U+0361) before subsequence letters.
<br>
<code>--pho=2 </code> Use a zero-width-joiner (U+200D) before subsequent letters.
<p>
<dt><strong>--path [="&lt;directory path&gt;"]</strong><br>
<dd>
@@ -190,10 +187,18 @@ If specified, the output from -x, -X, --ipa, and --pho options is written to thi
<dd>
Speaks the names of punctuation characters when they are encountered in the text. If &lt;characters&gt; are given, then only those listed punctuation characters are spoken, eg. <code> --punct=".,;?"</code>
<p>
<dt><strong>--sep [=&lt;character&gt;]</strong><br>
<dd>
The character is used to separate individual phonemes in the output which is produced by the -x or --ipa options. The default is a space character. The character z means use a ZWNJ character (U+200c).
<p>
<dt><strong>--split [=&lt;minutes&gt;]</strong><br>
<dd>
Used with <strong>-w</strong>, it starts a new WAV file every <code>&lt;minutes&gt;</code> minutes, at the next sentence boundary.
<p>
<dt><strong>--tie [=&lt;character&gt;]</strong><br>
<dd>
The character is used within multi-letter phonemes in the output which is produced by the -x or --ipa options. The default is the tie character&nbsp; &#x361; &nbsp;U+361. The character z means use a ZWJ character (U+200d).
<p>
<dt>
<strong>--voices [=&lt;language code&gt;]</strong><br>
<dd>Lists the available voices.<br>

+ 3
- 0
espeak-data/voices/europe/eu View File

@@ -0,0 +1,3 @@
name basque-test
language eu


+ 5
- 8
phsource/compile_report View File

@@ -49,7 +49,7 @@ consonants 11 119
es-la 2 125
ca 11 127
an 5 126
eu 18 127
eu 21 129
pt 29 140
pt-pt 20 140
ro 36 148
@@ -875,7 +875,6 @@ ufric/s [s] base
[z2] fr
[s] ru
[s] es
[z] eu
[z] sq
[s] da
[s] ar
@@ -885,7 +884,6 @@ ufric/s_ [s] base
[s] fr
[z] fr
[s] es
[z] eu
[z;] ro
[s] sw
[z] sq
@@ -914,7 +912,6 @@ ufric/sh_pzd2 [S] sr
[dZ] sr
[S;] zh
ufric/sh_rfx [s.] base
[s] eu
[s.] zh
ufric/s_pal [s^] et
ufric/s_pzd [s;] base
@@ -932,6 +929,8 @@ ufric/tl# [tl#] is
[tl#] kl
ufric/tlh [K] nso
[K] tn
ufric/ts_eu [ts] eu
ufric/tz_eu [tz] eu
ufric/x_ [x] base
ufric/x2 [x2] af
[x] ku
@@ -945,6 +944,7 @@ ufric/x_sr [h#] sr
ufric/xx [X] base
[Q"] base
[Q] ka
ufric/z_eu [z] eu
ustop/c [c] base
ustop/k [k] base
[k] fr
@@ -1123,8 +1123,6 @@ ustop/tr [t] base
ustop/ts [ts] consonants
[dz] consonants
[ts] hu
[ts] eu
[tz] eu
[z] zhy
[tsh] zh
[ts] tn
@@ -1133,8 +1131,6 @@ ustop/ts [ts] consonants
ustop/ts_ [ts] consonants
[dz] consonants
[ts] lv
[ts] eu
[tz] eu
[ts] tn
[ts#] bo
[dz#] bo
@@ -1865,6 +1861,7 @@ vowel/a#_3 [a#] en
vowel/a_4 [a] ga
[a] es
[a] eu
[a2] eu
[a] el
[a] vi
vowel/a#_4 [a:] nl

+ 167
- 186
phsource/ph_basque View File

@@ -1,186 +1,167 @@

//====================================================
// Basque - based on Base2
//====================================================

phoneme a
vowel starttype #a endtype #a
length 200
FMT(vowel/a_4)
endphoneme


phoneme a2 // delete if the next vowel is 'a'. Used for numbers.
vowel starttype #a endtype #a
length 200

IF nextPh(#a) THEN
ChangePhoneme(NULL) // merge consecutive 'a'
ELSE
ChangePhoneme(a)
ENDIF
endphoneme


phoneme e
vowel starttype #e endtype #e
length 200
FMT(vowel/e_mid2)
endphoneme


phoneme i
vowel starttype #i endtype #i
length 190
IfNextVowelAppend(;)
FMT(vowel/i)
endphoneme


phoneme o
vowel starttype #o endtype #o
length 200
FMT(vowel/oo)
endphoneme


phoneme u
vowel starttype #u endtype #u
length 200
FMT(vowel/u_bck2)
endphoneme


phoneme Y
vowel starttype #@ endtype #@
length 200
FMT(vowel/y#)
endphoneme



// Note: I have made [s] and [z] the same, and similarly [ts] and [tz]
// These should be changed to the correct "s", "z", "ts" and "tz" sounds fo Basque.

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

IF nextPh(isPause) THEN
WAV(ufric/sh_rfx, 60)
ENDIF
WAV(ufric/sh_rfx, 90) // different from s but probably not correct
endphoneme


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

// z+z=tz, z+g=zk, z+g=zt, z+b=zp
IF nextPh(z) THEN
ChangeNextPhoneme(tz)
ChangePhoneme(NULL)
ELSEIF nextPh(g) THEN
ChangeNextPhoneme(k)
ELSEIF nextPh(d) THEN
ChangeNextPhoneme(t)
ELSEIF nextPh(b) THEN
ChangeNextPhoneme(p)
ENDIF
IF nextPh(isPause) THEN
WAV(ufric/s_, 60)
ENDIF
WAV(ufric/s, 80)
endphoneme


phoneme ts
vls alv afr sibilant
ipa tʂ
lengthmod 2
Vowelin f1=0 f2=1700 -300 300 f3=-100 80
Vowelout f1=0 f2=1700 -300 250 f3=-100 80 rms=20
IF nextPh(isPause2) THEN
WAV(ustop/ts_)
ENDIF
WAV(ustop/ts)
endphoneme


phoneme tz
vls alv afr sibilant
ipa ts
lengthmod 2
Vowelin f1=0 f2=1700 -300 300 f3=-100 80
Vowelout f1=0 f2=1700 -300 250 f3=-100 80 rms=20
IF nextPh(isPause2) THEN
WAV(ustop/ts_)
ENDIF
WAV(ustop/ts)
endphoneme


phoneme t
vls dnt stop
lengthmod 2
// t+g=k, t+d=t, t+z=tz
IF nextPh(g) THEN
ChangeNextPhoneme(k)
ChangePhoneme(NULL)
ELSEIF nextPh(d) THEN
ChangeNextPhoneme(t)
ChangePhoneme(NULL)
ELSEIF nextPh(z) THEN
ChangeNextPhoneme(tz)
ChangePhoneme(NULL)
ENDIF
CALL base2/t
endphoneme


phoneme r
vcd alv flp rhotic
brkafter
ipa ɾ
lengthmod 3

IF nextPhW(isVowel) THEN
ChangePhoneme(**)
ENDIF

CALL base/*
endphoneme


phoneme b
import_phoneme es/b
endphoneme

phoneme d
import_phoneme es/d
endphoneme

phoneme g
import_phoneme es/g
endphoneme

phoneme n
vcd alv nasal
lengthmod 4

IF prevPhW(i) AND nextPhW(isVowel) THEN
ChangePhoneme(n^)
ENDIF
CALL base/n
endphoneme
//====================================================
// Basque - based on Base2
//====================================================
phoneme a
vowel starttype #a endtype #a
length 200
FMT(vowel/a_4)
endphoneme
phoneme a2 // delete if the next vowel is 'a'. Used for numbers.
vowel starttype #a endtype #a
length 200
IF nextPh(#a) THEN
ChangePhoneme(NULL) // merge consecutive 'a'
ENDIF
FMT(vowel/a_4)
endphoneme
phoneme e
vowel starttype #e endtype #e
length 200
FMT(vowel/e_mid2)
endphoneme
phoneme i
vowel starttype #i endtype #i
length 190
IfNextVowelAppend(;)
FMT(vowel/i)
endphoneme
phoneme o
vowel starttype #o endtype #o
length 200
FMT(vowel/oo)
endphoneme
phoneme u
vowel starttype #u endtype #u
length 200
FMT(vowel/u_bck2)
endphoneme
phoneme Y
vowel starttype #@ endtype #@
length 200
FMT(vowel/y#)
endphoneme
phoneme s
import_phoneme es/s
endphoneme
phoneme z
vls alv frc sibilant
ipa s
lengthmod 3
Vowelin f1=0 f2=1700 -300 300 f3=-100 80
Vowelout f1=0 f2=1700 -300 250 f3=-100 80 rms=20
IF nextPh(isPause) THEN
WAV(ufric/z_eu, 60)
ENDIF
WAV(ufric/z_eu, 90)
endphoneme
phoneme ts
vls alv afr sibilant
ipa t?
lengthmod 2
Vowelin f1=0 f2=1700 -300 300 f3=-100 80
Vowelout f1=0 f2=1700 -300 250 f3=-100 80 rms=20
IF nextPh(isPause2) THEN
WAV(ufric/ts_eu, 60)
ENDIF
WAV(ufric/ts_eu, 90)
endphoneme
phoneme tz
vls alv afr sibilant
ipa ts
lengthmod 2
Vowelin f1=0 f2=1700 -300 300 f3=-100 80
Vowelout f1=0 f2=1700 -300 250 f3=-100 80 rms=20
IF nextPh(isPause2) THEN
WAV(ufric/tz_eu, 90)
ENDIF
WAV(ufric/tz_eu, 60)
endphoneme
phoneme t
vls dnt stop
lengthmod 2
CALL base2/t
endphoneme
phoneme r
vcd alv flp rhotic
brkafter
ipa ?
lengthmod 3
IF nextPhW(isVowel) THEN
ChangePhoneme(**)
ENDIF
CALL base/*
endphoneme
phoneme b
import_phoneme es/b
endphoneme
phoneme d
import_phoneme es/d
endphoneme
phoneme g
import_phoneme es/g
endphoneme
phoneme n
vcd alv nasal
lengthmod 4
IF prevPhW(#i) AND nextPhW(isVowel) THEN
ChangePhoneme(n^)
ENDIF
CALL base/n
endphoneme
phoneme n2 // doesn't palatalise, used for exceptions
vcd alv nasal
lengthmod 4
CALL base/n
endphoneme
phoneme l
liquid
IF prevPhW(#i) AND nextPhW(isVowel) THEN
ChangePhoneme(l^)
ENDIF
CALL base/l
endphoneme
phoneme l2 // same as l2
liquid
CALL base/l
endphoneme

+ 4
- 3
phsource/ph_english View File

@@ -279,13 +279,14 @@ endphoneme

phoneme i // optional variant of [I] for end of words
vowel starttype #i endtype #i
unstressed
ipa i
length 150
IfNextVowelAppend(;)
IF NOT thisPh(isFinalVowel) THEN
ChangePhoneme(I)
ENDIF
// IF NOT thisPh(isFinalVowel) THEN
// ChangePhoneme(I)
// ENDIF
FMT(vowel/ii_7)
endphoneme

+ 2
- 2
phsource/ph_english_us View File

@@ -48,8 +48,8 @@ phoneme a

IF nextPh(isNasal) THEN
FMT(vnasal/ee_n2)
ELSEIF nextPh(r) THEN
length 230
ELSEIF nextPh(r) AND thisPh(isStressed) THEN
length 190
FMT(vwl_en_us/ar)
ENDIF
FMT(vwl_en_us/a)

+ 0
- 1
phsource/ph_tamil View File

@@ -168,4 +168,3 @@ phoneme r
import_phoneme base/r
endphoneme



+ 2
- 1
phsource/phonemes View File

@@ -1978,5 +1978,6 @@ phonemetable kl base
include ph_greenlandic


//phonemetable en2 en
//phonemetable en-test base
//include ph_english_test


BIN
phsource/ufric/ts_eu.wav View File


BIN
phsource/ufric/tz_eu.wav View File


BIN
phsource/ufric/z_eu.wav View File


+ 54
- 45
src/dictionary.cpp View File

@@ -637,8 +637,11 @@ const char *GetTranslatedPhonemeString(int phoneme_mode)
/* Called after a clause has been translated into phonemes, in order
to display the clause in phoneme mnemonic form.

phoneme_mode bits 0-3: 0=only phoneme names, 1=ties, 2=ZWJ, 3=underscore separator
bit 4: 0=eSpeak phoneme names, 1=IPA
phoneme_mode
bit 1: use IPA phoneme names
bit 7: use tie between letters in multi-character phoneme names
bits 8-23 tie or separator character

*/

int ix;
@@ -652,16 +655,12 @@ const char *GetTranslatedPhonemeString(int phoneme_mode)
int flags;
int use_ipa;
int use_tie;
int separate_phonemes = 0;
int separate_phonemes;
char phon_buf[30];
char phon_buf2[30];
PHONEME_LIST *plist;

static const char *stress_chars = "==,,''";
static const int char_tie[] = {0x0361, 0x200d}; // combining-double-inverted-breve, zero-width-joiner

use_ipa = phoneme_mode & 0x10;
use_tie = phoneme_mode & 0x0f;

if(phon_out_buf == NULL)
{
@@ -673,10 +672,15 @@ const char *GetTranslatedPhonemeString(int phoneme_mode)
}
}

if(use_tie >= 3)
use_ipa = phoneme_mode & espeakPHONEMES_IPA;
if(phoneme_mode & espeakPHONEMES_TIE)
{
use_tie = phoneme_mode >> 8;
separate_phonemes = 0;
}
else
{
// separate individual phonemes with underscores
separate_phonemes = '_';
separate_phonemes = phoneme_mode >> 8;
use_tie = 0;
}

@@ -690,14 +694,15 @@ const char *GetTranslatedPhonemeString(int phoneme_mode)
WritePhMnemonic(phon_buf2, plist->ph, plist, use_ipa, &flags);
if(plist->newword)
*buf++ = ' ';
else

if((!plist->newword) || (separate_phonemes == ' '))
{
if((separate_phonemes != 0) && (ix > 1))
{
utf8_in(&c, phon_buf2);
if((c < 0x2b0) || (c > 0x36f)) // not if the phoneme starts with a superscript letter
{
*buf++ = separate_phonemes;
buf += utf8_out(separate_phonemes, buf);
}
}
}
@@ -734,12 +739,12 @@ const char *GetTranslatedPhonemeString(int phoneme_mode)
for(p=phon_buf2; *p != 0;)
{
p += utf8_in(&c, p);
if(use_tie > 0)
if(use_tie != 0)
{
// look for non-inital alphabetic character, but not diacritic, superscript etc.
if((count>0) && !(flags & (1 << (count-1))) && ((c < 0x2b0) || (c > 0x36f)) && iswalpha2(c))
{
buf += utf8_out(char_tie[use_tie-1], buf);
buf += utf8_out(use_tie, buf);
}
}
buf += utf8_out(c, buf);
@@ -1193,6 +1198,7 @@ void SetWordStress(Translator *tr, char *output, unsigned int *dictionary_flags,
PHONEME_TAB *ph;
int stress;
int max_stress;
int max_stress_input; // any stress specified in the input?
int vowel_count; // num of vowels + 1
int ix;
int v;
@@ -1257,7 +1263,7 @@ void SetWordStress(Translator *tr, char *output, unsigned int *dictionary_flags,
unstressed_word = 1;
}

max_stress = GetVowelStress(tr, phonetic, vowel_stress, &vowel_count, &stressed_syllable, 1);
max_stress = max_stress_input = GetVowelStress(tr, phonetic, vowel_stress, &vowel_count, &stressed_syllable, 1);
if((max_stress < 0) && dictionary_flags)
{
max_stress = 0;
@@ -1338,40 +1344,33 @@ void SetWordStress(Translator *tr, char *output, unsigned int *dictionary_flags,
{
stressed_syllable = vowel_count - 2;

if(stressflags & (S_FINAL_SPANISH | S_FINAL_STRESS_C))
if(stressflags & S_FINAL_SPANISH)
{
// LANG=Spanish, stress on last vowel if the word ends in a consonant other than 'n' or 's'
if(phoneme_tab[final_ph]->type != phVOWEL)
{
if(stressflags & S_FINAL_STRESS_C)
mnem = phoneme_tab[final_ph]->mnemonic;

if(tr->translator_name == L('a','n'))
{
stressed_syllable = vowel_count - 1;
if(((mnem != 's') && (mnem !='n')) || phoneme_tab[final_ph2]->type != phVOWEL)
stressed_syllable = vowel_count - 1; // stress on last syllable
}
else
if(tr->translator_name == L('i','a'))
{
mnem = phoneme_tab[final_ph]->mnemonic;

if(tr->translator_name == L('a','n'))
{
if(((mnem != 's') && (mnem !='n')) || phoneme_tab[final_ph2]->type != phVOWEL)
stressed_syllable = vowel_count - 1; // stress on last syllable
}
else
if(tr->translator_name == L('i','a'))
if((mnem != 's') || phoneme_tab[final_ph2]->type != phVOWEL)
stressed_syllable = vowel_count - 1; // stress on last syllable
}
else
{
if((mnem == 's') && (phoneme_tab[final_ph2]->type == phNASAL))
{
if((mnem != 's') || phoneme_tab[final_ph2]->type != phVOWEL)
stressed_syllable = vowel_count - 1; // stress on last syllable
// -ns stress remains on penultimate syllable
}
else
else if(((phoneme_tab[final_ph]->type != phNASAL) && (mnem != 's')) || (phoneme_tab[final_ph2]->type != phVOWEL))
{
if((mnem == 's') && (phoneme_tab[final_ph2]->type == phNASAL))
{
// -ns stress remains on penultimate syllable
}
else if(((phoneme_tab[final_ph]->type != phNASAL) && (mnem != 's')) || (phoneme_tab[final_ph2]->type != phVOWEL))
{
stressed_syllable = vowel_count - 1;
}
stressed_syllable = vowel_count - 1;
}
}
}
@@ -1578,6 +1577,16 @@ void SetWordStress(Translator *tr, char *output, unsigned int *dictionary_flags,
break;
}

if((stressflags & S_FINAL_VOWEL_UNSTRESSED) && (vowel_count > 2) && (max_stress_input < 3) && (vowel_stress[vowel_count - 1] == 4))
{
if(phoneme_tab[final_ph]->type == phVOWEL)
{
// don't allow stress on a word-final vowel
vowel_stress[vowel_count - 1] = 1;
vowel_stress[vowel_count - 2] = 4;
}
}

/* now guess the complete stress pattern */
if(max_stress < 4)
stress = 4; /* no primary stress marked, use for 1st syllable */
@@ -2551,7 +2560,7 @@ static void MatchRule(Translator *tr, char *word[], char *word_start, int group_
total_consumed = consumed;
}

if((option_phonemes == 2) && (match.points > 0) && ((word_flags & FLAG_NO_TRACE) == 0))
if((option_phonemes & espeakPHONEMES_TRACE) && (match.points > 0) && ((word_flags & FLAG_NO_TRACE) == 0))
{
// show each rule that matches, and it's points score
int pts;
@@ -2628,7 +2637,7 @@ int TranslateRules(Translator *tr, char *p_start, char *phonemes, int ph_size, c
word_copy[ix] = 0;


if((option_phonemes == 2) && ((word_flags & FLAG_NO_TRACE)==0))
if((option_phonemes & espeakPHONEMES_TRACE) && ((word_flags & FLAG_NO_TRACE)==0))
{
char wordbuf[120];
unsigned int ix;
@@ -2866,7 +2875,7 @@ int TranslateRules(Translator *tr, char *p_start, char *phonemes, int ph_size, c
return(0);
}

if((option_phonemes == 2) && ((word_flags & FLAG_NO_TRACE)==0))
if((option_phonemes & espeakPHONEMES_TRACE) && ((word_flags & FLAG_NO_TRACE)==0))
{
fprintf(f_trans,"\n");
}
@@ -3367,7 +3376,7 @@ static const char *LookupDict2(Translator *tr, const char *word, const char *wor

if(phoneme_len == 0)
{
if(option_phonemes == 2)
if(option_phonemes & espeakPHONEMES_TRACE)
{
print_dictionary_flags(flags, dict_flags_buf, sizeof(dict_flags_buf));
fprintf(f_trans,"Flags: %s %s\n", word1, dict_flags_buf);
@@ -3378,7 +3387,7 @@ static const char *LookupDict2(Translator *tr, const char *word, const char *wor
if(flags != NULL)
flags[0] |= FLAG_FOUND; // this flag indicates word was found in dictionary

if(option_phonemes == 2)
if(option_phonemes & espeakPHONEMES_TRACE)
{
char ph_decoded[N_WORD_PHONEMES];
int textmode;
@@ -3560,7 +3569,7 @@ int LookupDictList(Translator *tr, char **wordptr, char *ph_out, unsigned int *f
word1 = *wordptr;
*wordptr = &word_replacement[2];

if(option_phonemes == 2)
if(option_phonemes & espeakPHONEMES_TRACE)
{
len = found - word1;
memcpy(word,word1,len); // include multiple matching words
@@ -3759,7 +3768,7 @@ int RemoveEnding(Translator *tr, char *word, int end_type, char *word_copy)
{
utf8_out(tr->langopts.suffix_add_e, &word_end[1]);

if(option_phonemes == 2)
if(option_phonemes & espeakPHONEMES_TRACE)
{
fprintf(f_trans,"add e\n");
}

+ 86
- 17
src/espeak.cpp View File

@@ -53,7 +53,7 @@ static const char *help_text =
"-p <integer>\n"
"\t Pitch adjustment, 0 to 99, default is 50\n"
"-s <integer>\n"
"\t Speed in words per minute, 80 to 450, default is 175\n"
"\t Speed in approximate words per minute. The default is 175\n"
"-v <voice name>\n"
"\t Use voice file of this name from espeak-data/voices\n"
"-w <wave file name>\n"
@@ -68,7 +68,6 @@ static const char *help_text =
"\t Compile pronunciation rules and dictionary from the current\n"
"\t directory. <voice name> specifies the language\n"
"--ipa Write phonemes to stdout using International Phonetic Alphabet\n"
"\t --ipa=1 Use ties, --ipa=2 Use ZWJ, --ipa=3 Separate with _\n"
"--path=\"<path>\"\n"
"\t Specifies the directory containing the espeak-data directory\n"
"--pho Write mbrola phoneme data (.pho) to stdout or to the file in --phonout\n"
@@ -77,9 +76,15 @@ static const char *help_text =
"--punct=\"<characters>\"\n"
"\t Speak the names of punctuation characters during speaking. If\n"
"\t =<characters> is omitted, all punctuation is spoken.\n"
"--split=\"<minutes>\"\n"
"--sep=<character>\n"
"\t Separate phonemes (from -x --ipa) with <character>.\n"
"\t Default is space, z means ZWJN character.\n"
"--split=<minutes>\n"
"\t Starts a new WAV file every <minutes>. Used with -w\n"
"--stdout Write speech output to stdout\n"
"--tie=<character>\n"
"\t Use a tie character within multi-letter phoneme names.\n"
"\t Default is U+361, z means ZWJ character.\n"
"--version Shows version number and date, and location of espeak-data\n"
"--voices=<language>\n"
"\t List the available voices for the specified language.\n"
@@ -123,6 +128,37 @@ void strncpy0(char *dest, const char *source, int size)
}
}

int utf8_in(int *c, const char *buf)
{//=================================
// Read a unicode characater from a UTF8 string
// Returns the number of UTF8 bytes used.
// backwards: set if we are moving backwards through the UTF8 string
int c1;
int n_bytes;
int ix;
static const unsigned char mask[4] = {0xff,0x1f,0x0f,0x07};

n_bytes = 0;

if((c1 = *buf++) & 0x80)
{
if((c1 & 0xe0) == 0xc0)
n_bytes = 1;
else if((c1 & 0xf0) == 0xe0)
n_bytes = 2;
else if((c1 & 0xf8) == 0xf0)
n_bytes = 3;

c1 &= mask[n_bytes];
for(ix=0; ix<n_bytes; ix++)
{
c1 = (c1 << 6) + (*buf++ & 0x3f);
}
}
*c = c1;
return(n_bytes+1);
}


void DisplayVoices(FILE *f_out, char *language)
{//============================================
@@ -381,6 +417,8 @@ int main (int argc, char **argv)
{"pho", no_argument, 0, 0x109},
{"ipa", optional_argument, 0, 0x10a},
{"version", no_argument, 0, 0x10b},
{"sep", optional_argument, 0, 0x10c},
{"tie", optional_argument, 0, 0x10d},
{0, 0, 0, 0}
};

@@ -408,8 +446,8 @@ int main (int argc, char **argv)
int wordgap = -1;
int option_capitals = -1;
int option_punctuation = -1;
int option_phonemes = 0;
int option_mbrola_phonemes = 0;
int phonemes_separator = 0;
int phoneme_options = 0;
int option_linelength = 0;
int option_waveout = 0;

@@ -513,11 +551,11 @@ int main (int argc, char **argv)
break;

case 'x':
option_phonemes = 1;
phoneme_options |= espeakPHONEMES_SHOW;
break;

case 'X':
option_phonemes = 2;
phoneme_options |= espeakPHONEMES_TRACE;
break;

case 'm':
@@ -616,27 +654,56 @@ int main (int argc, char **argv)
break;

case 0x109: // --pho
option_mbrola_phonemes = 16;
phoneme_options |= espeakPHONEMES_MBROLA;
break;

case 0x10a: // --ipa
option_phonemes = 3;
phoneme_options |= espeakPHONEMES_IPA;
if(optarg2 != NULL)
{
value = -1;
sscanf(optarg2,"%d",&value);
if((value<0) || (value>3))
// deprecated and obsolete
switch(atoi(optarg2))
{
fprintf(stderr,"Bad value for -ipa=\n");
value = 0;
case 1:
phonemes_separator = '_';
break;
case 2:
phonemes_separator = 0x0361;
phoneme_options |= espeakPHONEMES_TIE;
break;
case 3:
phonemes_separator = 0x200d; // ZWJ
phoneme_options |= espeakPHONEMES_TIE;
break;
}
option_phonemes += value;
}
break;

case 0x10b: // -version
case 0x10b: // --version
PrintVersion();
exit(0);
case 0x10c: // --sep
phoneme_options |= espeakPHONEMES_SHOW;
if(optarg2 == 0)
phonemes_separator = ' ';
else
utf8_in(&phonemes_separator, optarg2);
if(phonemes_separator == 'z')
phonemes_separator = 0x200c; // ZWNJ
break;

case 0x10d: // --tie
phoneme_options |= (espeakPHONEMES_SHOW | espeakPHONEMES_TIE);
if(optarg2 == 0)
phonemes_separator = 0x0361; // default: combining-double-inverted-breve
else
utf8_in(&phonemes_separator, optarg2);
if(phonemes_separator == 'z')
phonemes_separator = 0x200d; // ZWJ
break;


default:
exit(0);
@@ -707,7 +774,9 @@ int main (int argc, char **argv)
espeak_SetParameter(espeakLINELENGTH,option_linelength,0);
if(option_punctuation == 2)
espeak_SetPunctuationList(option_punctlist);
espeak_SetPhonemeTrace(option_phonemes | option_mbrola_phonemes,f_phonemes_out);

espeak_SetPhonemeTrace(phoneme_options | (phonemes_separator << 8), f_phonemes_out);

if(filename[0]==0)
{

+ 52
- 13
src/speak.cpp View File

@@ -87,7 +87,7 @@ static const char *help_text =
"-p <integer>\n"
"\t Pitch adjustment, 0 to 99, default is 50\n"
"-s <integer>\n"
"\t Speed in words per minute, 80 to 450, default is 175\n"
"\t Speed in approximate words per minute. The default is 175\n"
"-v <voice name>\n"
"\t Use voice file of this name from espeak-data/voices\n"
"-w <wave file name>\n"
@@ -102,7 +102,6 @@ static const char *help_text =
"\t Compile pronunciation rules and dictionary from the current\n"
"\t directory. <voice name> specifies the language\n"
"--ipa Write phonemes to stdout using International Phonetic Alphabet\n"
"\t --ipa=1 Use ties, --ipa=2 Use ZWJ, --ipa=3 Separate with _\n"
"--path=\"<path>\"\n"
"\t Specifies the directory containing the espeak-data directory\n"
"--pho Write mbrola phoneme data (.pho) to stdout or to the file in --phonout\n"
@@ -111,9 +110,15 @@ static const char *help_text =
"--punct=\"<characters>\"\n"
"\t Speak the names of punctuation characters during speaking. If\n"
"\t =<characters> is omitted, all punctuation is spoken.\n"
"--split=\"<minutes>\"\n"
"--sep=<character>\n"
"\t Separate phonemes (from -x --ipa) with <character>.\n"
"\t Default is space, z means ZWJN character.\n"
"--split=<minutes>\n"
"\t Starts a new WAV file every <minutes>. Used with -w\n"
"--stdout Write speech output to stdout\n"
"--tie=<character>\n"
"\t Use a tie character within multi-letter phoneme names.\n"
"\t Default is U+361, z means ZWJ character.\n"
"--version Shows version number and date, and location of espeak-data\n"
"--voices=<language>\n"
"\t List the available voices for the specified language.\n"
@@ -496,6 +501,8 @@ int main (int argc, char **argv)
{"pho", no_argument, 0, 0x109},
{"ipa", optional_argument, 0, 0x10a},
{"version", no_argument, 0, 0x10b},
{"sep", optional_argument, 0, 0x10c},
{"tie", optional_argument, 0, 0x10d},
{0, 0, 0, 0}
};

@@ -516,6 +523,8 @@ int main (int argc, char **argv)
int flag_stdin = 0;
int flag_compile = 0;
int pitch_adjustment = 50;
int phoneme_options = 0;
int phonemes_separator = 0;
espeak_VOICE voice_select;
char filename[200];
char voicename[40];
@@ -622,11 +631,11 @@ int main (int argc, char **argv)
break;

case 'x':
option_phonemes = 1;
phoneme_options |= espeakPHONEMES_SHOW;
break;

case 'X':
option_phonemes = 2;
phoneme_options |= espeakPHONEMES_TRACE;
break;

case 'm':
@@ -729,21 +738,29 @@ int main (int argc, char **argv)
break;

case 0x109: // --pho
option_mbrola_phonemes = 16;
phoneme_options |= espeakPHONEMES_MBROLA;
break;

case 0x10a: // --ipa
option_phonemes = 3;
phoneme_options |= espeakPHONEMES_IPA;
if(optarg2 != NULL)
{
value = -1;
sscanf(optarg2,"%d",&value);
if((value<0) || (value>3))
// deprecated and obsolete
switch(atoi(optarg2))
{
fprintf(stderr,"Bad value for -ipa=\n");
value = 0;
case 1:
phonemes_separator = '_';
break;
case 2:
phonemes_separator = 0x0361;
phoneme_options |= espeakPHONEMES_TIE;
break;
case 3:
phonemes_separator = 0x200d; // ZWJ
phoneme_options |= espeakPHONEMES_TIE;
break;
}
option_phonemes += value;
}
break;

@@ -751,6 +768,26 @@ int main (int argc, char **argv)
init_path(argv[0],data_path);
printf("speak text-to-speech: %s Data at: %s\n",version_string,path_home);
exit(0);
case 0x10c: // --sep
phoneme_options |= espeakPHONEMES_SHOW;
if(optarg2 == 0)
phonemes_separator = ' ';
else
utf8_in(&phonemes_separator, optarg2);
if(phonemes_separator == 'z')
phonemes_separator = 0x200c; // ZWNJ
break;

case 0x10d: // --tie
phoneme_options |= (espeakPHONEMES_SHOW | espeakPHONEMES_TIE);
if(optarg2 == 0)
phonemes_separator = 0x0361; // default: combining-double-inverted-breve
else
utf8_in(&phonemes_separator, optarg2);
if(phonemes_separator == 'z')
phonemes_separator = 0x200d; // ZWJ
break;

default:
exit(0);
@@ -803,6 +840,8 @@ int main (int argc, char **argv)
SetParameter(espeakPUNCTUATION,option_punctuation,0);
SetParameter(espeakWORDGAP,wordgap,0);

option_phonemes = phoneme_options | (phonemes_separator << 8);

if(pitch_adjustment != 50)
{
SetParameter(espeakPITCH,pitch_adjustment,0);

+ 19
- 15
src/speak_lib.cpp View File

@@ -811,7 +811,6 @@ ENTER("espeak_Initialize");
return(EE_INTERNAL_ERROR);

option_phonemes = 0;
option_mbrola_phonemes = 0;
option_phoneme_events = (options & (espeakINITIALIZE_PHONEME_EVENTS | espeakINITIALIZE_PHONEME_IPA));

VoiceReset(0);
@@ -1159,19 +1158,22 @@ ESPEAK_API espeak_ERROR espeak_SetPunctuationList(const wchar_t *punctlist)
} // end of espeak_SetPunctuationList


ESPEAK_API void espeak_SetPhonemeTrace(int value, FILE *stream)
{//============================================================
ESPEAK_API void espeak_SetPhonemeTrace(int phonememode, FILE *stream)
{//===================================================================
ENTER("espeak_SetPhonemes");
/* Controls the output of phoneme symbols for the text
bits 0-3:
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 phoneme names rather than ascii
bit 4: produce mbrola pho data
*/
option_phonemes = value & 7;
option_mbrola_phonemes = value & 16;
/* phonememode: Controls the output of phoneme symbols for the text
bits 0-2:
value=0 No phoneme output (default)
value=1 Output the translated phoneme symbols for the text
value=2 as (1), but produces IPA phoneme names rather than ascii
bit 3: output a trace of how the translation was done (showing the matching rules and list entries)
bit 4: produce pho data for mbrola
bit 7: use (bits 8-23) as a tie within multi-letter phonemes names
bits 8-23: separator character, between phoneme names

stream output stream for the phoneme symbols (and trace). If stream=NULL then it uses stdout.
*/
option_phonemes = phonememode;
f_trans = stream;
if(stream == NULL)
f_trans = stderr;
@@ -1181,8 +1183,10 @@ ESPEAK_API void espeak_SetPhonemeTrace(int value, FILE *stream)

ESPEAK_API const char *espeak_TextToPhonemes(const void **textptr, int textmode, int phonememode)
{//=================================================================================================
/* phoneme_mode bits 0-3: 0=only phoneme names, 1=ties, 2=ZWJ, 3=underscore separator
bits 4-7: 0=eSpeak phoneme names, 1=IPA
/* phoneme_mode
bit 1: 0=eSpeak's ascii phoneme names, 1= International Phonetic Alphabet (as UTF-8 characters).
bit 7: use (bits 8-23) as a tie within multi-letter phonemes names
bits 8-23: separator character, between phoneme names
*/

option_multibyte = textmode & 7;

+ 24
- 15
src/speak_lib.h View File

@@ -34,7 +34,7 @@
#define ESPEAK_API
#endif

#define ESPEAK_API_REVISION 9
#define ESPEAK_API_REVISION 10
/*
Revision 2
Added parameter "options" to eSpeakInitialize()
@@ -61,6 +61,9 @@ Revision 8 26.Apr.2013
Revision 9 30.May.2013
Changed function espeak_TextToPhonemes().

Revision 10 29.Aug.2014
Changed phonememode parameter to espeak_TextToPhonemes() and espeak_SetPhonemeTrace

*/
/********************/
/* Initialization */
@@ -473,15 +476,25 @@ ESPEAK_API espeak_ERROR espeak_SetPunctuationList(const wchar_t *punctlist);
EE_INTERNAL_ERROR.
*/

#define espeakPHONEMES_SHOW 0x01
#define espeakPHONEMES_IPA 0x02
#define espeakPHONEMES_TRACE 0x08
#define espeakPHONEMES_MBROLA 0x10
#define espeakPHONEMES_TIE 0x80

#ifdef __cplusplus
extern "C"
#endif
ESPEAK_API 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
ESPEAK_API void espeak_SetPhonemeTrace(int phonememode, FILE *stream);
/* phonememode: Controls the output of phoneme symbols for the text
bits 0-2:
value=0 No phoneme output (default)
value=1 Output the translated phoneme symbols for the text
value=2 as (1), but produces IPA phoneme names rather than ascii
bit 3: output a trace of how the translation was done (showing the matching rules and list entries)
bit 4: produce pho data for mbrola
bit 7: use (bits 8-23) as a tie within multi-letter phonemes names
bits 8-23: separator character, between phoneme names

stream output stream for the phoneme symbols (and trace). If stream=NULL then it uses stdout.
*/
@@ -506,15 +519,11 @@ ESPEAK_API const char *espeak_TextToPhonemes(const void **textptr, int textmode,
espeakCHARS_WCHAR Wide characters (wchar_t)
espeakCHARS_16BIT 16 bit characters.

phonememode: bits0-3:
0= just phonemes.
1= include ties (U+361) for phoneme names of more than one letter.
2= include zero-width-joiner for phoneme names of more than one letter.
3= separate phonemes with underscore characters.
phoneme_mode
bit 1: 0=eSpeak's ascii phoneme names, 1= International Phonetic Alphabet (as UTF-8 characters).
bit 7: use (bits 8-23) as a tie within multi-letter phonemes names
bits 8-23: separator character, between phoneme names

bits 4-7:
0= eSpeak's ascii phoneme names.
1= International Phonetic Alphabet (as UTF-8 characters).
*/

#ifdef __cplusplus

+ 1
- 2
src/synth_mbrola.cpp View File

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

int option_mbrola_phonemes;

#ifdef INCLUDE_MBROLA

@@ -646,7 +645,7 @@ int MbrolaGenerate(PHONEME_LIST *phoneme_list, int *n_ph, int resume)
if(*n_ph == 0)
return(0);

if(option_mbrola_phonemes)
if(option_phonemes & espeakPHONEMES_MBROLA)
{
// send mbrola data to a file, not to the mbrola library
f_mbrola = f_trans;

+ 8
- 2
src/synthdata.cpp View File

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

const char *version_string = "1.48.10 09.Aug.14";
const char *version_string = "1.48.11 31.Aug.14";
const int version_phdata = 0x014801;

int option_device_number = -1;
@@ -620,6 +620,7 @@ static bool InterpretCondition(Translator *tr, int control, PHONEME_LIST *plist,
int instn;
int instn2;
int count;
int check_endtype = 0;
PHONEME_TAB *ph;
PHONEME_LIST *plist_this;

@@ -672,6 +673,7 @@ static bool InterpretCondition(Translator *tr, int control, PHONEME_LIST *plist,
case 0: // prevPh
case 5: // prevPhW
plist--;
check_endtype = 1;
break;

case 1: // thisPh
@@ -705,6 +707,7 @@ static bool InterpretCondition(Translator *tr, int control, PHONEME_LIST *plist,
if((worddata==NULL) || (worddata->prev_vowel.ph == NULL))
return(false); // no previous vowel
plist = &(worddata->prev_vowel);
check_endtype = 1;
break;

case 9: // next3PhW
@@ -720,6 +723,7 @@ static bool InterpretCondition(Translator *tr, int control, PHONEME_LIST *plist,
if((plist[0].sourceix) || (plist[-1].sourceix))
return(false);
plist-=2;
check_endtype = 1;
break;
}

@@ -744,7 +748,9 @@ static bool InterpretCondition(Translator *tr, int control, PHONEME_LIST *plist,
// 'data' is a phoneme number
if((phoneme_tab[data]->mnemonic == ph->mnemonic) == true)
return(true);
if((which == 0) && (ph->type == phVOWEL))

// not an exact match, check for a vowel type (eg. #i )
if((check_endtype) && (ph->type == phVOWEL))
return(data == ph->end_type); // prevPh() match on end_type
return(data == ph->start_type); // thisPh() or nextPh(), match on start_type
}

+ 3
- 7
src/synthesize.cpp View File

@@ -1980,14 +1980,10 @@ int SpeakNextClause(FILE *f_in, const void *text_in, int control)
CalcPitches(translator, clause_tone);
CalcLengths(translator);

if((option_phonemes > 0) || (phoneme_callback != NULL))
if((option_phonemes & 0xf) || (phoneme_callback != NULL))
{
int phoneme_mode = 0;
if(option_phonemes >= 3)
phoneme_mode = 0x10 + option_phonemes-3; // 0x10=ipa, 0x11=ipa with tie, 0x12=ipa with ZWJ, 0x13=ipa with separators

phon_out = GetTranslatedPhonemeString(phoneme_mode);
if(option_phonemes > 0)
phon_out = GetTranslatedPhonemeString(option_phonemes);
if(option_phonemes & 0xf)
{
fprintf(f_trans,"%s\n",phon_out);
}

+ 8
- 6
src/tr_languages.cpp View File

@@ -779,7 +779,8 @@ Translator *SelectTranslator(const char *name)
if(name2 == L_pap)
{
// stress last syllable unless word ends with a vowel
tr->langopts.stress_flags = S_FINAL_STRESS_C | S_FINAL_DIM_ONLY | S_FINAL_NO_2 | S_NO_AUTO_2;
tr->langopts.stress_rule = STRESSPOSN_1R;
tr->langopts.stress_flags = S_FINAL_VOWEL_UNSTRESSED | S_FINAL_DIM_ONLY | S_FINAL_NO_2 | S_NO_AUTO_2;
}
else
{
@@ -793,7 +794,8 @@ Translator *SelectTranslator(const char *name)
static const short stress_lengths_eu[8] = {200, 200, 200, 200, 0, 0, 210, 230}; // very weak stress
static const unsigned char stress_amps_eu[8] = {16,16, 18,18, 18,18, 18,18 };
SetupTranslator(tr,stress_lengths_eu,stress_amps_eu);
tr->langopts.stress_rule = STRESSPOSN_2L; // ?? second syllable ??
tr->langopts.stress_rule = STRESSPOSN_2L; // ?? second syllable, but not on a word-final vowel
tr->langopts.stress_flags = S_FINAL_VOWEL_UNSTRESSED;
tr->langopts.param[LOPT_SUFFIX] = 1;
tr->langopts.numbers = NUM_SINGLE_STRESS | NUM_DECIMAL_COMMA | NUM_HUNDRED_AND | NUM_OMIT_1_HUNDRED | NUM_OMIT_1_THOUSAND | NUM_VIGESIMAL;
}
@@ -1345,8 +1347,8 @@ SetLengthMods(tr,3); // all equal

SetupTranslator(tr,stress_lengths_ro,stress_amps_ro);

tr->langopts.stress_rule = STRESSPOSN_2R;
tr->langopts.stress_flags = S_FINAL_STRESS_C + S_FINAL_DIM_ONLY;
tr->langopts.stress_rule = STRESSPOSN_1R;
tr->langopts.stress_flags = S_FINAL_VOWEL_UNSTRESSED | S_FINAL_DIM_ONLY;

tr->charset_a0 = charsets[2]; // ISO-8859-2
tr->langopts.numbers = NUM_DECIMAL_COMMA | NUM_ALLOW_SPACE | NUM_DFRACTION_3 | NUM_AND_UNITS | NUM_ROMAN;
@@ -1449,8 +1451,8 @@ SetLengthMods(tr,3); // all equal

SetupTranslator(tr,stress_lengths_sq,stress_amps_sq);

tr->langopts.stress_rule = STRESSPOSN_2R;
tr->langopts.stress_flags = S_FINAL_DIM_ONLY | S_FINAL_NO_2 | S_FINAL_STRESS_C;
tr->langopts.stress_rule = STRESSPOSN_1R;
tr->langopts.stress_flags = S_FINAL_DIM_ONLY | S_FINAL_NO_2 | S_FINAL_VOWEL_UNSTRESSED;
SetLetterVowel(tr,'y');
tr->langopts.numbers = NUM_DECIMAL_COMMA | NUM_HUNDRED_AND | NUM_AND_UNITS | NUM_DFRACTION_4;
tr->langopts.accents = 2; // "capital" after letter name

+ 3
- 3
src/translate.cpp View File

@@ -763,7 +763,7 @@ int ChangeEquivalentPhonemes(Translator *tr, int lang2, char *phonemes)
}
remove_stress = pb[1];

if(option_phonemes == 2)
if(option_phonemes & espeakPHONEMES_TRACE)
{
DecodePhonemes(phonemes, phonbuf);
fprintf(f_trans,"(%s) %s -> (%s) ", phoneme_tab_list[lang2].name, phonbuf, phoneme_tab_list[tr->phoneme_tab_ix].name);
@@ -806,7 +806,7 @@ int ChangeEquivalentPhonemes(Translator *tr, int lang2, char *phonemes)

strcpy(phonemes, phonbuf);

if(option_phonemes == 2)
if(option_phonemes & espeakPHONEMES_TRACE)
{
SelectPhonemeTable(tr->phoneme_tab_ix);
DecodePhonemes(phonemes, phonbuf);
@@ -1220,7 +1220,7 @@ if(end_type & SUFX_UNPRON)
end_type = end2;
strcpy(phonemes,phonemes2);
strcpy(end_phonemes,end_phonemes2);
if(option_phonemes == 2)
if(option_phonemes & espeakPHONEMES_TRACE)
{
DecodePhonemes(end_phonemes,end_phonemes2);
fprintf(f_trans," suffix [%s]\n\n",end_phonemes2);

+ 2
- 3
src/translate.h View File

@@ -408,8 +408,8 @@ typedef struct {
#define S_FIRST_PRIMARY 0x80
// bit7=if more than one primary stress, make the subsequent primaries to secondary stress

#define S_FINAL_STRESS_C 0x100
// bit8=stress last syllable if it doesn't end in a vowel
#define S_FINAL_VOWEL_UNSTRESSED 0x100
// bit8=don't apply default stress to a word-final vowel

#define S_FINAL_SPANISH 0x200
// bit9=stress last syllable if it doesn't end in vowel or "s" or "n" LANG=Spanish
@@ -673,7 +673,6 @@ extern int option_tone_flags;
extern int option_waveout;
extern int option_quiet;
extern int option_phonemes;
extern int option_mbrola_phonemes;
extern int option_phoneme_events;
extern int option_linelength; // treat lines shorter than this as end-of-clause
extern int option_multibyte;

+ 5
- 7
src/transldlg.cpp View File

@@ -409,7 +409,6 @@ void TranslDlg::OnCommand(wxCommandEvent& event)
const char *phon_out2;
int clause_tone;
int clause_count;
int use_ipa = 0;
FILE *f;
int fd_temp;
char fname_temp[100];
@@ -447,21 +446,20 @@ void TranslDlg::OnCommand(wxCommandEvent& event)
}
#endif
t_phonetic->SetDefaultStyle(style_phonetic);
translate_text = 2;
translate_text = espeakPHONEMES_TRACE;
break;

case T_TRANSLATE:
case MENU_SPEAK_TRANSLATE:
t_phonetic->SetDefaultStyle(style_phonetic);
translate_text = 1;
translate_text = espeakPHONEMES_SHOW;
break;

case T_TRANSLATE_IPA:
case MENU_SPEAK_IPA:
t_phonetic->SetDefaultStyle(style_phonetic_large);

translate_text = 3;
use_ipa = 0x10;
translate_text = espeakPHONEMES_IPA;
break;

case T_PROCESS:
@@ -496,7 +494,7 @@ void TranslDlg::OnCommand(wxCommandEvent& event)
CalcPitches(translator,clause_tone);
CalcLengths(translator);

phon_out2 = GetTranslatedPhonemeString(use_ipa);
phon_out2 = GetTranslatedPhonemeString(option_phonemes);
if(clause_count++ > 0)
strcat(phon_out," ||");
strcat(phon_out, phon_out2);
@@ -514,7 +512,7 @@ void TranslDlg::OnCommand(wxCommandEvent& event)
ph_list[N_PH_LIST].ph = NULL; // to recognize overrun off list (in Generate() )

t_phonetic->Clear();
if(option_phonemes == 2)
if(option_phonemes & espeakPHONEMES_TRACE)
{
option_phonemes=0;
rewind(f_trans);

Loading…
Cancel
Save