Browse Source

[1.29.02] lang=af: updated af_rules and af_dict

Changes to voice selection code to accept  voice+variant  voice names in SSML tags.
Changes to voice change code to use function DoVoiceChange().
lang=pt: Don't reduce phoneme [&~] to the more open [&] in unstressed syllables.


git-svn-id: https://espeak.svn.sourceforge.net/svnroot/espeak/trunk@83 d46cf337-b52f-0410-862d-fd96e6ae7743
master
jonsd 17 years ago
parent
commit
40d4adadbf

+ 12
- 7
dictsource/af_list View File

@@ -90,13 +90,11 @@ bethlehem bEt_liEm
brittanje $2
ceylon s@lOn
china S'ina
engeland 'EN@lant
jerusalem j@r'ysalEm
kanada kanad%a
kongo kONgu
mesopotamië mEsuput'A:mi@
mosambiek musamb'ik
thaba tA:ba
(thaba nchu) tab'A:||ntSu
europa Y@r'o@pa
portugal $1
@@ -110,6 +108,7 @@ worcester v'ust@r
// People names
Abiméleg abin'e@lEx2
abraham A:bram
adrie A:dri
alida al'ida
allah %alA:
André 'andreI
@@ -119,7 +118,6 @@ aucamp @Ukamp
benjamin bEndZ@m@n
bester b'Est@r
botha bo@ta
bothma bOtma
breytenbach breIt@nbax2
carl kA:r@L
charles _^_EN
@@ -154,15 +152,16 @@ george _^_EN
gerhard x2&rart
grange x2rA:nsi
gustav gustaf
havenga hA:f@Nx2a
haydn hAId@n
helena hil'e@na
hilde hild@
ilse 'ilz@
isabel is@b&l
jacques ZA:k
james _^_EN
jane _^_EN
jean ZA~n
jesus ji:sWs
joey dZ@Ui
john _^_EN
jordaan $2
@@ -177,6 +176,7 @@ levi le@fi
louis luI
louise luw'i:z
louw l'@U
mbeki mbE:ki
marie mA:ri
marius mA:riWs
martha marta
@@ -422,6 +422,7 @@ euro Y@ru
exodus Eks'o@dWs

figuur f@x2yr
filippense f@l@pEns@
finalis $3
finaliste $3
frontaal $2
@@ -461,7 +462,6 @@ idee $2
ietwat itvat
ignoreer ix2no@r'e@r
inagneming @nax2ne@m@N
ingang Inx2aN
inkluis $2
intens @nt'Ens
intensiteit $4
@@ -489,6 +489,7 @@ macaroni makar'o@ni
madame mad'A:m
makabere m%ak'A:b@r@
meegee me@x2e@
memoriam mEm'o@riam
merlot m&rl'o@
militêre mIl@t'&:r@
minister m@nIst@r
@@ -542,6 +543,9 @@ oorsee $2
oorsese $2
oorspronklike $2

pandemonium pand@m'o@niWm
parke park@
parkie $1
patriotisme patri|ut'Ism@
penorent pEno@rEnt
per pIr
@@ -561,9 +565,11 @@ rukkerig rWk@r@x2
samelewing sA:m@l,e@v@N
sedert se@d@rt
sektore $2
singenot sInx2@nOt
skares skA:r@s
skepsele skEps@l@
s'n s@n $u
spaghetti sp%agEt%i
sobere s'o@b@r@
sombere s'Omb@r@
sodra so@dr'A:
@@ -599,7 +605,6 @@ verafgeleë f&rafx2@le@@
verantwoordelikheid f@rantv'o@rd@l@keIt
verby f@rbeI
verdere f&rd@r@
vere fe@r@
vererger f@r&rg@r
ver f'&:r
verg f&rx2
@@ -621,7 +626,7 @@ voorgee fo@rx2e@
voorkeer $1
voorkom $2
voormalige fo@rm'A:l@x2@
voorsien $2
//voorsien $2
voorwaar $2
vorendag $3
vorige fo@r@x2@

+ 156
- 32
dictsource/af_rules View File

@@ -1,4 +1,4 @@
//maintainer: Willem van der Walt
//maintainer: Willem van der Walt
// email: [email protected]
// tel: +27 12 8413996
// Meraka Institute, CSIR
@@ -30,7 +30,7 @@
_) a (bba a // restore default stress: (ge)abba/abbamandjie, etc.
abse (s %apsE // fix stress and e sound: abses/-se
@) adig 'A:d@x2 // misdadiger/gewelddadigheid/kragdadigheid
C) adium A:diWm // compounds of stadium/radium
C) adiu (K A:diW // compounds of stadium/radium/radius
C) a (Cia_ A: // stadia and compounds/Nadia and similar
admi (r %atm%i // move default stress: admiraal and compounds

@@ -162,6 +162,7 @@
asem A:s@m // asemgehaal/asemhaling/asemteug/ontwaseming
_) as (ke %as // move default stress: askeet/askete/asketies/askese
assist %as@st // assistent/e/assisteer
assiste (_ %as'Ist@ // rassiste
atten (C at'En // attent/heid/onattent/attensies
@) ator (K 'A:tOr // katalisator/diktatorskap and many similar
augustus Ox2'WstWs
@@ -217,6 +218,7 @@
angl (A %A~Nx2l% // anglikaans/anglisisme/anglofiel
angola A~Nx2'o@la //Angola, Angolabos etc.
angol (e %A~Nx2%ul //Angolese etc.
C) anette (_ %anEt // Janette/Sanette
an (tjie aIN
_) ana ,ana // words starting with ana starts destressed
// The following are experimental nasalisation of ans
@@ -256,6 +258,9 @@
badjie baIci

baba bA:ba
baba (tjie bA:baI // fix 2nd a sound: babatjie/-s
baklei b@kl'eI // baklei/er
_) bak (o bak_ // fix a sound and stress: bakoor/bakore
ba (lans b%a // move default stress
balan (seer b%al%an // move stress to -eer
ba (ldadig b%a // move default stress: baldadig and derivitives
@@ -272,7 +277,7 @@
balsem bals@m // correct e sound in derivitives like balseming
bara (k bar'a
bar (bA b%ar // barbaar/barbare and derivitives/barbier and compounds
baklei b@kl'eI // baklei/er
batte (ry b%at@ // move default stress: battery/-e and compounds: batterysuur...

bibli (oC b@bl%i:% // biblioteek and compounds/biblioteke/bibliofiel/bibliografie...
bidd b'Id // biddag/aanbidding
@@ -283,6 +288,8 @@
@) ble (_ _^_EN // words ending in ble is English
bloe (ddors@ bl%u // bloeddorstig and derivitives, but bloeddors
bloed (stol bl%ut // move default stress: bloedstollend/-e
_) blo (kka bl%O // move default stress: blokkade/-s and compounds
_) blo (kkeer bl%O // move default stress: (ge)blokkeer/-der, etc.
blon (dine bl%On // move default stress: blondine/-s
bly (moed bl%eI // move default stress: blymoedig/-e/-heid
bo (botie b%u // fix stress and 1st o sound: bobotie and compounds
@@ -296,6 +303,7 @@
bota (nie_N b%o@t%a // stress on 3rd slb.: botanie
_) bowe b''o@v@ // fix e sound in compounds: boweaards/bowemaans/bowetoon
buiten (ge b'Yyt@n // buitengewoon/s/buitengewone/buitengemeen
buiten (ste bYyt@n // restore default stress: buitenste/-s
buiten (t bYyt@n // restore default stress: buitentoe/buitentyds
buiten bYyt@n' // buitendien/buitensporig
buite b'Yyt@ // buitelandse/buitestander/buitew�eld
@@ -310,7 +318,7 @@
be (amp b@? // fix e sound in compounds ending in beampte
beau b@U //Beaufortwes and others
@) beeldig b'e@ld@x2 // denkbeeldig/voorbeeldig
bei beI // beier/beitel
bei (+ beI // beier/beitel
_) be (@P2 b@
@) be (C b@
C) be (rsie b'&: //kombersie etc.
@@ -320,6 +328,8 @@
_) be (Cy b@ // bely/beny/betyds
bes (ie_ be@s //sonbesie duinebesie etc.
bes (ies_ be@s //sonbesies duinebesies etc.
son) be (sie be@ // fix e sound in compounds with sonbesie: sonbesiebos, etc.
bed (h bEt // fix stress, e sound and d sound: bedhoek/bedhok, etc.
bedjie bE:ici // (ge)bedjie/-s/bababedjie
bed (k bEt // bedkassie/bedkaartjie/bedkatel/bedkussing
bed (l bEt // bedlamp/bedliggie/dubbelbedlaken
@@ -337,6 +347,8 @@
beken b@kEn // 2nd e sound: oorbekend/welbekende
@) beker (_ be@k@r // compounds ending with -beker
r) bel b&l // fix e sound: deurbel/oorbel
C) bel (_ b&l // fix e sound: inbel/rondbel/uitbel
b) bel (_ b@l // fix e sound: babbel/dobbel/dubbel/kabbel
bell (+ b&l // inbeller/oorbelle/seepbelle
_) bel (C b&l // Belgies/belhamel
bere (_ be@r@ //tediebere pandabere etc.
@@ -366,6 +378,7 @@
besem be@s@m
besering =b@se@r@N // besering/s/kniebesering...
beter b'e@t@r
bewe (rasie be@v@ // fix e sounds: bewerasie/-siekte


.group c
@@ -411,6 +424,7 @@
@) dend (er d@nd // beduidender/behoudender
@) dend (ste d@nt // beduidendste/behoudendste
_) denim d''En@m // fix e sound in denim and compounds
&) denis d@n@s // geskiedenisboek/kultuurgeskiedenis/belydenis/beduidenis
@) dente (@ dEnt@ // fix connecting e in compounds like studenteoptog/-opvoering
de (press d%i // depressie/depressief/depressiewe
@@ -421,6 +435,7 @@
desibel dEsib&l // fix vowel sounds: desibel/-s
deur (bo d%Y@r // move default stress: deurboor/deurborende
deur (dring@ d%y@r // move default stress: deurdringend/-e
deur (leef d%y@r // move default stress: deurleef/-de
deur (lop@ d%y@r // move default stress: deurlopend/-e
deur (priem d%Y@r // move default stress: deurpriem/-de
deur (sigt d%y@r // move default stress: deursigtig/-e
@@ -482,11 +497,13 @@
@) d (eteC_ t // aand-/oggendetes/grondeter
djie ci // bokbaardjie/bordjie/boordjie/perdjie/tydjie
@) d (r d // but oordrewe/oordrom
san) d (r t // fix d sound: sandrif/-randjie/-rivier/-ruiter
han) d (r t // fix d sound: handreiking/-reling/-rug
oe) d (r t // bloedrooi/bloedryk/hoedrand/invloedryk
toe) d (r d // but: toedrag/toedraai
dril (A drIl // fix i sound when vowel follows dril: driloefening/-opleiding
@C) dwerk tv&rk // handwerk/naaldwerk
@) d (t // drop d: breedte/handtekening/rondte/rondtrek...
@n) d (uit t_ // fix d sound and insert short break: enduit/handuit and similar
@) dwes tv'Es // noordwes/te/lik/e suidwes/te/lik/e
@) dwese tve@s@ // leedwese/vakbondwese
@) dwillig tv'Il@x2 // d sound and stress: kwaadwillig/bereidwillig
@@ -501,6 +518,7 @@
CAC) e (CC @ // fix e sound: nalatenskap/wapenstilstand
CAC) e (C% E // beesfilette/nougesette/onderbesette/voortgesette
CAC) e (rkK & // fix e sound: deurgewerk; exception to: CAC) e (CC
@p) e (rtjie @ // fix e sound: helpertjies/wegkruipertjie
C) e (mm++ E // geelkoperemmer/wateremmer
CAnn) e (CA @ // banneling/sinnebeeld/spinnekop/-rak
Aw) e (bA @ // fix e sound: briewebesteller/diewebende/newebedoeling/skewebek/stywebeen
@@ -517,7 +535,9 @@
mp) e (lde_ @ // fix e sound: gemompelde/oorrompelde/verskrompelde and similar
@C) e (lk_ & // fix e sound: many compounds ending in kelk/melk
@C) e (lke_ & // fix e sound: many compounds ending in -elke: blomkelke, etc.
uiC) e (l @ // fix e sound in wrds like: buideldier/druipeling/skuifelpassie/struikelend/tuimelaar
ng) e (nd @ // fix e sound: dringends/dwingends/deurdringender
enge (l EN@ // Engeland/Engelsman/Engelssprekend/hengelklub/mengeldrankie/-moes
C) e (pan @ //fix e sound: instrumentepaneel/kolepan/liefdepand
@k) e (tt@+ E // menseketting/etikette
sp) e (lonk @ // spelonk/rowerspelonk/spelonkagtig etc.
@@ -541,6 +561,7 @@
e (CA e@
CCan) e (CA @ // swanepoel/swanesang/tranedal
XCier) e (@ @ // dieresorg/-lewe..., many compounds/PIEREWAAI/-ER
kund) e (@ @ // fix e sound in many compounds of kunde
luuks) e @ // luukses/luukse and compounds
midd) e (@ @ // compounds starting with midde: middedorp/middeooste/middestad/middeweg
reus) e (@ @ // correct 2nd e in compounds starting with reuse
@@ -549,6 +570,8 @@
C) edes (_ e@d@s // lofredes/hoofredes
j) e (k E // fix e sound: tjek and compounds/windjekker, etc.
C) e (kamp+ @ // fix e sound: (krygs)gevangenekamp/soldatekamp and similar
@d) e (klas @ // fix e sound: tweede/derdeklas and compounds
@d) e (kr @ // fix e sound: vriendekring/-e
e (kono@ %E // 1st e: ekonome/ekonomie/ekonomies/ekonoom
e (mosi %i // emosie/emosioneel, etc.
hal) e (rC@ @ // uithalerperd/-skut/-speler and similar
@@ -593,6 +616,7 @@
_) enkel ENk@l // enkelbaan/enkelbed; many compounds
@C) eny (_ @n'eI // words ending in eny have stress on y
d) e (fi E
 &w) e (f @ // fix e sound: wolwefluite/krewefuik
C) e (kant @ // buitekant/noordekant
ee e@
eetjie e@ici // tweetjies/hanetreetjie
@@ -661,7 +685,6 @@
_) ellende e@l'End@
_) ellendig e@l'End@x2
emalje %e@malj@ // fix stress and e sounds: emalje and compounds
engels EN@ls // engelssprekend/engelstalige/engelsman
enig (ma %EnIx2 // stress and e sound: enigma/-ties/-e
lei) er (s @r // leierskap/leiersgroep/leierskursus/leiersposisie...
in) er (A 'e@r // kombinering/verkleinering...
@@ -678,7 +701,7 @@
&) e (nC_ @
&) e (nde_ @ // fix penultimate e sound: sinkende/drinkende/klinkende
&) e (ng_ E
erf) e (nis @ //erfenis/kultuurerfenis/verderfenis
@f) e (nis @ //erfenis/kultuurerfenis/verderfenis
ooi) e (ns @ // fix e sound: compounds starting with nooiens
ooi) e (ntjie // drop e in nooientjie/-s and compounds

@@ -687,6 +710,7 @@
&) erei (_ @reI
e (r &
Ank) e (r@ @ // ankerpaal/kankerlyer/donkerbril
uik) e (rC @ // fix e sound: many compounds with duiker/gebruiker/suiker

lew) e (ns @
&d) e (r@ @ // not initial or final syllable
@@ -723,12 +747,13 @@
&) ere (_S3 @r@
@l) ere (_ e@r@ // fix e sound: staanlere/toonlere
@) ery (_ @reI
@) ery (e_ @reI // fix 2nd e sound: delwerye and similar
eti (ket %Et%i // shorten e sound and move stress: etiket/-te

ewig (du %e@v@x2 // move default stress: ewigdurend/-e/-heid
ewigheid 'e@v@x2,eIt // ewigheid/hewigheid/stewigheid
evolus EvOl'ys // evolusie/devolusie/revolusie
C) ewyn @veIn // alewyn/compounds of brandewyn
C) ewy (C @veI // alewyn/compounds of brandewyn/sekondewyser
_op) e (n @
C) ensie (_ 'Ensi // many words ending in stressed ensie(s)
C) ensies 'Ensis // forensiese
@@ -781,7 +806,7 @@
will) e (C @ //willem, willemse etc./willekeur
pp) e (C@+ @ // flapperend/snippermandjie/dopperkerk/poppekas...
&) e (nk_ E // but kersgeskenk/verjaardaggeskenk
@ks) e (ms @ // bliksems and compounds
@ks) e (mC @ // bliksems and compounds/bebliksemde/boksemdais
@) e (spel_ @ //gebarespel/kleurespel/klokkespel/parespel/poppespel/samespel/snarespel
ar) e (sse_ 'E // bibliotekaresse/sekretaresse
Ks) e (na @ //senator and friends/watsenaam
@@ -814,7 +839,7 @@
f (f
fa (briek f%a // move default stress: fabriek and many compounds/fabriseer
fak (tore f%ak // move default stress: faktore and compounds
familie fam'ili
familie f%amil%i
fanta (sA f%ant%a // fantaseer/fantasie
fasiliteit fasilit'eIt // fasiliteit/e/aftrekorderfasiliteit
februarie f'e@bry,A:ri
@@ -871,8 +896,13 @@
A) goog (_ x2'o@x2 // demagoog/pedagoog
gor (dyn x2%Or // move default stress: gordyn and compounds
A) goë x2'u@ // demagoë/pedagoë
ouCa) gr (ootjie x2r' // move default stress: ouma/oupagrootjie/-s
_) graad (e x2r%A:t_ // fix stress and d sound: graadeen(tjies)/-elfs
_) graadse (s x2r%A:tsE // fix stress and e sound: graadsesse/-sessies/-sesklas
_) graad (vyf x2r%A:t // move default stress: graadvyfs/graadvyfklas, etc.
gra (niet x2r%a // move default stress and fix a sound: graniet and compounds
_) gri (mA x2r@ // grimas/grimeer/-middel and other compounds/grimering
grotere x2ro@t@r@ // fix vowel sounds and stress: grotere/-s
guerrilla g@r'Ila

.group ge
@@ -926,11 +956,24 @@
ge (olo x2i //geoloog etc.
ge (ome x2i //geometries etc.
gesels x2@s'&ls
@C) gewens x2@ve~ns


.group h
h h
h (h
half (een h%alf_ // move default stress in this and following time expressions: halfeen/-vergadering
half (twee h%alf
half (drie h%alf
half (vier h%al
half (vyf h%al
halfse (s h%alfsE
half (sewe h%alf
half (agt h%alf_
half (nege h%alf
half (tien h%alf
half (elf h%alf_
half (twaalf h%alf
halleluja h%al@lyj%a // move stress and fix vowel sounds: halleluja/-boek/-lied
halo (ge h%al%u // fix stress and vowel sounds: halogeen/-lamp/-verbinding/halogene
@C) hal (sA h'al // reikhalsend/waaghalsig
@@ -942,9 +985,12 @@
hard (heid hart // restore default stress: (ge)hardheid
hard (lo hart // restore default stress: hardloop/hardloper
hard (ste hart // restore default stress: (ge)hardste/-s
_) hare (C hA:r@ // fix e sound: haredos/haregroei/harekam/harewasmiddel
@) hartig h'art@x2 // barmhartig/lighartigheid/lighartig...
hart (stogte_ h%art // move default stress: hartstogtelik
hart (stogte_N hart // restore default stress: hartstogte
he (bre h%i // fix stress and 1st e sound: Hebreër/-s
heeren (grac he@r@n // fix eng sounds: Heerengracht/-straat
heiden heId@n // heidene/heidense/heidendom
hekse (C hEks@ // fix 2nd e sound in compounds starting with hekse: heksebrousel, etc.
_) hele (K he@l@ // hele/helend/heler
@@ -969,6 +1015,7 @@
g) heid eIt // traagheid/leegheid/droogheid/stugheid
herinner h&r'In@r // herinner/-ing/-e|s
_) hi (bis h%i // move default stress: hibiskus/-se and compounds
hinke (pink h@Nk@ // fix e sound and stress: (ge)hinkepink/hinkepinkend/-e
hip (noCA h%ip // hipnose/hipnoties/hipnotiseer
hister (e hist@r // histerektomie
hister (i hist'e@r // histerie/histeries
@@ -977,6 +1024,7 @@
hitler hitl@r // Hitler in compounds like Hitlersnorretjie
hoog (dra h%o@x2 // stress: hoogdrawend and derivitives
hor (los h%Or // horlosie and compounds
hor (mo h%Or // move default stress: hormoon/hormone and compounds
ho (tel h%u // fix stress and o sound: hotel and compounds
huis (houd_ h%Yys // move default stress: huishoudelik/-e/-heid
hu (meur h%y // stress: humeur/-ig
@@ -988,6 +1036,7 @@
iaal (_K i'A:l // aal normally stressed in words like bilabiaal/koloniaal, etc.
iale (_ i'A:l@ // al normally stressed in words like bilabiale/koloniale, etc.
iber (i@ %ibe@r // Liberië/Siberië/Liberiese/Siberiese/Iberiese
@) ic (_ _^_EN // Words ending in -ic are English
ie i
ieë (K i:@ // knieë/vlieë/spieël/-tjie
h) i (dro i //hidro in compounds
@@ -1053,6 +1102,7 @@
@C) inge (_ @N@
ing (s IN // begrotingsrede/ontvangslokaal/geringste
_) ing (@ 'Inx2 // ingaan/ingang/ingiet/ingly/ingroei/ingreep...
ingang _Inx2aN // ingang/hoofingang/ingangsprotaal
&) ige (_ Ix2@
@C) iger (CA @x2@r // twintiger-/dertiger-/veertigerjare, etc.
&) iges (_ Ix2@s
@@ -1066,7 +1116,7 @@
@C) igende @x2@nd@ // bevredigende/beangstigende...
C) iging @x2@N
m) i (nister @ //fix first i sound in minister in some compounds
indjie 'IiNci
indjie IiNci
intjie IiNci
idjie Iici
itjie Iici
@@ -1096,7 +1146,7 @@
en) is (K @s // stress: beduidenis/bekentenis/gevangenis, etc.
kris) is @s // fix stress: krisis and compounds
pol) is (_ @s // polis and compounds
ar) is (_ =@s // but sekretaris/argivaris/kommissaris
ar) is (K =@s // but sekretaris/argivaris/kommissaris/inventarislys/sekretarisvoël
litar) is 'Is // but militaris
vuil) is @s // stress: vuilis/tuinvuilis
AC) iste (_ 'Ist@ // aktiviste/humaniste/kommuniste/pianiste/soliste/violiste
@@ -1139,9 +1189,11 @@
jakaranda j%ak%ar'anda //jakaranda and compounds
jaloe (sie j%al%u // stress: jaloesie/beroepsjaloesie
januarie j'any,A:ri
japo (n j%apO // fix stress and shorten a sound: japon/-ne and compounds/japonika
jeans _^_EN
jeep _^_EN // English pronunciation
jellie dZ'Eli
jesus ji:sWs // Jesus also used as part of compounds: Jesusbaard/Jesusklong
joer (na j%ur // move default stress: joernaal/joernale/ compounds: joernaalinskrywing, etc.
johan juh'an
johannes juh'an@s
@@ -1185,12 +1237,14 @@
@) keurig k'Y@r@x2 // kieskeurig/noukeurig/(on)willekeurig and derivitives
_) ki (ta k%i // move default stress: kitaar and compounds
klere kle@r@
kli (niek kl@ // fix stress and i sound: kliniek and compounds
kklere =kl'e@r@
knip (A knIp? // knipogie/geknipoog/
kre (diet kr@ // move default stress: krediet/-kaart/-balans, etc.
kre (dit kr%E // fix e sound: krediteer/akkreditasie
krimi (nA kr@m@' // krimineel/kriminele/diskrimineer
kri (oel kr%i // move default stress: krioel and derivitives
kristal kr@stal // move default stress: kristal and many compounds
krit (A kr@t // kriteria/-ium/kritiseer and derivitives
krieket krik@t //krieket e sound and stress
krieketw krik@tv //krieket followed by w in compounds always v
@@ -1219,6 +1273,7 @@
kake (C kA:k@ // kakebeen/skakelaar/skakelbord/skakelfunksie
kalahari kalah'A:ri // stress: Kalahari/-sand/-woestyn
ka (lAnC k%a // kalender and compounds/kalant/kalander and compounds
kalender k%alEnd@r // fix stress and vowel sounds: kalender/-s and compounds
kali (b k%ali // kaliber/kalibrasie/kalibreer
kalmeer kalm'e@r // kalmeer/gekalmeer
kalmer (A kalm'e@r // kalmerend/e/kalmering
@@ -1233,6 +1288,7 @@
ka (pabel k%a // move default stress and shorten 1st a sound: kapabel/-e
kape (l k%ap& // move default stress and fix e sound: kapel and compounds
kape (la@ k%ap@ // fix e sound: kapelaan/kapelane and compounds
ka (pok k%a // move default stress and shorten a: kapok and compounds
kap (tein k%ap // kaptein/kapteinskap/skeepskaptein
kapsule k%apsyl@ // stress and e sound: kapsule/-fabriek/-vorm, etc.
kar (does k%ar // move default stress: kardoes and compounds
@@ -1241,6 +1297,7 @@
kar (wei k%ar // move default stress: karwei and derivitives
kaserne k%as&rn@ // move default stress, fix 1st e sound: kaserne and compounds
_) ka (ste@ k%a // move default stress: kasteel/kastele and compounds
kasse (t k%asE // fix stress and e sound: kasset/-te and compounds
ka (strol k%a // move default stress: kastrol/-le and compounds
_) kata ,kata
katalo (gus k%atalu // fix stress and vowel sounds: katalogus and compounds
@@ -1256,12 +1313,12 @@
kommando k%umandu // move stress, fix o sounds: kommando and compounds
ko (pie@ k%u // kopiereg/kopie
koe (rA k%u // koerier/koerasie/koerant and compounds
korrek k%urEk //korrek and derivitives
kort (stond k%Ort // move default stress: kortstondig/-e/-heid
koever (t k%uf&r // koevert/-e/-jie and compounds
kollege k'OlidZ // kollege/onderwyskollege
kolleges (_ k'OlidZ@s // kolleges/onderwyskolleges
@) kollek kulEk // straatkollekte/straatkolleksie/deurkollekte
_) kollek kul'Ek // kollekte/kollektebord/kolleksie
kollek k%ulEk // straatkollekte/straatkolleksie/deurkollekte
kollekteer kulEkt'e@r // kollekteer/gekollekteer
koeël kul
kollega k%ule@x2%a // kollega/-s and compounds
@@ -1283,8 +1340,11 @@
konfer (e k%Onf@r // fix e sound: (ge)konfereer/konferering
kongo (K k,ONgu // stress: kongolees/-lese
koning (in k%o@n@N // fix stress: koningin/-ne and compounds
_) konka (K kONka // fix stress: konka/-s/-vure
konnekteer kOnEkt'e@r // (ge)konnekteer
konnek k%unEk // fix stress and vowel sounds: konneksie/-s and compounds
konkel kONk@l // restore default stress and fix [N] sound: konkelaar/konkelwerk, etc.
konside (rA k%Ons@d@ // fix vowel sounds: konsiderasie/konsidereer
konsist k%Ons@st // konsistorie and compounds/konsistensie
konsul (A k%Ons%Wl // konsulaat/konsulate/konsulêr
kon (sul kOn // restore default stress: konsul and compounds
@@ -1295,6 +1355,7 @@
ko (rrup k%u // fix stress and 1st o sound: korrup/-sie/-te/-teer
kosme (tiek k%Osm@ // move default stress: kosmetiek and compounds
kos (met k%Os // move default stress: kosmeties/-e
kos (tu k%Os // move default stress: kostuum and compounds
koö k%o@O // koördinasie/koöpsie, etc.


@@ -1324,6 +1385,7 @@
leli (k le@l@ // fix e sound and stress: lelik and derivitives
_) lende lEnd@ // lendelam/lendene/compounds of lende
lening le@n@N // banklening/sorgverlening/hulpverlening...
lepe (ll le@p@ // fix 2nd e sound in compounds: lepellê, etc.
@C) les (K lEs // aanvangsles/geskiedenislesse/musiekles/koffiefles
leuen lY@:n // leuen/leuntaal and many other compounds
leuen (tjie lY@iN // leuentjie/witleuentjie
@@ -1343,6 +1405,7 @@
liter (A l@t@r //literatuur and others, but literbottel
_) li (mi l@ // fix stress and 1st i sound: limiet/-e/limitasie/limiteer
linker lINk@r // blinkertjies/many compounds with linker and klinker
lino (leum l@no@ // fix stress and i sound: linoleum and compounds, e.g. linoleumvloere
@) ll (_N _^_EN // Words ending in -ll are English
_) losge (@P5 l'Osx2@
_) losies l%us'is //losies at start always means "to stay"
@@ -1351,6 +1414,7 @@
lisensie l@s'E:nsi
lering (_ l'e@r@N //isolering distilering correct @ to e@ and force stress
lokomo ,lukumu' //lokomotief and friends
losbandi (g l%Osband@ // fix stress and d sound: losbandig/-e/-er
lug (A lWx2? // lugaanval/lugafweer/lugopname
luid (rugt l%Yyd // move default stress: luidrugtig/-e/-heid
luite (nant l%Yyt@ // fix e sound and move default stress: luitenant and compounds
@@ -1368,16 +1432,20 @@
maga (syn m%ax2%a // magasyn and many compounds
magi (stra m%ax2%i // magistraat and many compounds
ma (ho m%a // mahoniehout/-lessenaar and similar
@) makie (sie mak'i // fix a sound and stress: bol(le)makiesie/-slanery
&) mal (_S3 mal
malaria mal'A:ria;
_) malte (sA m%alte@ // move default stress and fix e sound: maltese/maltesies
man (da m%an //mandaat and compounds
mane (wale m%an@ // fix stress and shorten a sound: manewale/-s and compounds
manier m@ni:r //manier and compounds
manu (sk ,many
_) ma (rA m%a // short, unstressed a: Marietjie/Marina/Marinda/Marita/Maree/marog
marine m%arin@ // marine and compounds
mario (net m%ar%i%u // fix stress and vowel sounds: marionet/-te and compounds
ma (ritz m%a' // fix stress: Maritz/Pietermaritsburg
marmelade m%arm@lA:d@ // fix stress and e sounds: marmelade and compounds
marmer marm@r_ // fix e sound: marmerbeeld/-blad and many others
mar (sje m%ar // move default stress: marsjeer and derivitives
mas (biek m%as // move default stress: masbieker/-s
masjien m@Sin // masjien and many compounds
@@ -1408,6 +1476,7 @@
miske (n m@skE // misken/ning/onmiskenbaar
mis (l m@s // misluk/mislei
mis (lik m'Is // default stress again
mis (loop mIs // default stress: misloop
_) mis (m m@s // mismaak/-te/mismoedig
mis (noeg m@s // stress on 2nd slb
mis (o mIs // misoes/misopvatting
@@ -1419,6 +1488,7 @@
mis (troos m@s // mistroostig
mis (vorm m@s // stress on 2nd slb
mode m''o@d@ // fix e sound: modeontwerper/-maker, etc.
modee m@d'e@ //akkommodeer
mode (l m%o@d& // fix stress and e sound: model/-le and compounds
mode (lle@ m%Od@ // fix stress and e sound: modelleer/modellering
modern m%ud&r@-n
@@ -1451,7 +1521,7 @@
mee (doë m%e@ // move default stress
meerder (jar m%e@rd@r // move default stress: meerderjarig/-e/-es/-verklaring
mee (war m%e@ // move default stress: meewarig/-e/-heid
medisyne m@d@s'eIn@ //medisyne and compounds
medisyne m@d@seIn@ //medisyne and compounds
meganies m@x2'A:nis
_) meege (@P5 m'e@x2@
me (juf m@ // move default stress and shorten e sound
@@ -1498,6 +1568,7 @@
n (q N
n (x N
ng N
ei) n (g n // breingrootte/kleingeld/kleingoed
eu) n (g n // dreungeluid/kreungeluid/steungeluid/steungewend
oo) n (g n // hoongelag/loongeld/telefoongesprek/woongeriewe and similar
Cui) n (g n // basuingeskal/bruingebrand/bruingeel/tuingereedskap/tuingewas/tuingrond
@@ -1517,11 +1588,13 @@
nasio naSiu
_) nag (C n'ax2
_) nag (raad n'A:x2 //nagraads and compounds
nag (uil nax2_ // fix stress and a sound: naguil/-tjie/-s

_) na n'A:
_) na (by@ n%A: // move default stress: nabye/nabyheid
_) na (delig n%A: // move stress from 1st slb: nadelig/-e
_) nadenk n%A:dENk // exception to: _) na n'A:
names nA:m@s // fix e sound: afnames/opnames
_) na (rC na // nartjie/nardus/narsing
_) na (rk n%a // narkose/narkotiseer/narkoties/narkotika
_) na (skeer n''A: // restore default stress: naskeermiddel/-room
@@ -1551,6 +1624,7 @@
nese (_ n'e@s@ //japannese soedannese stres and e sound
netel ne@t@l // netelig and derivitives/netel and compounds
nogal nOx2al // fix o sound: nogal/-s
no (minA n%O // fix 1st o sound: (ge)nomineer/nominasie
nommer (een n%Om@r? // stress: nommereen in compounds like nommereenspeler
nood (saak n%o@t // move default stress: noodsaaklik/-e/-heid, vs. noodsaak
nood (saak_N no@t // restore default stress: (ge)noodsaak
@@ -1593,6 +1667,7 @@
olym (p %o@lIm // fix stress and y sound: Olympia/Olympus
oranje %o@ranj@ // fix stress and e sound in compounds: oranjeagtig/oranjekleur
_) ordent %OrdEnt // move default stress: ordentlik/-e/-er/-ste/-heid
orent (K %o@rEnt // fix stress of orent in compounds: kiertsorent/orentspring, etc.
orie o@ri
oriu 'o@riW
_) or (ka %Or // move default stress: orkaan/orkane/orkaanwaarskuwing...
@@ -1652,6 +1727,7 @@
om (ha Om // restore default stress: omhaal/omhang/omhaak
omkeer Omke@r // restore default stress: omkeer/handomkeer and similar
_) omker (A Omke@r // omkering/omkerende
_) omli (gg %OmlI // move default stress: omliggend/-e
om (ly %Om // move default stress: omlyn/-ing
om (ring %Om // move default stress
om (sig %Om // move default stress: omsigtig/-heid
@@ -1662,7 +1738,7 @@


_) opeen Op_'e@n
_) ope (C o@p@ //opehart opestelling etc.
_) ope (K o@p@ //opehart opestelling etc./ope
ope (l o@p@ // dopeling/hopelik/opelug/opelyf
opgee (+ 'Opx2e@ // see rule: _) opge (@P4 Opx2@
_) opge (@P4 'Opx2@ // stress on 1st slb
@@ -1673,7 +1749,8 @@
_) op (@P2 'Op // opeet/opeis/optredes/opoffering
open (+ o@p@n // open/opening/e/s
open (b %o@p@n openbaar/openbare/openbaring
oper (A %o@p@r // operasie/operateur/opereer
_) oper (A %o@p@r // operasie/operateur/opereer
&) opera (sie %o@p@rA: // default stress when operasie 2nd part of compound: hartoperasie, etc.
opera (_ 'o@p@ra // stress: opera/operas
opinie o@p'ini // opinie/-s
op (nuut %Op // move default stress: opnuut
@@ -1683,10 +1760,13 @@
op (roerig %Op // oproerig/-e/-heid, but oproer
op (sienb %Op // opsienbare/opsienbarend
_) opsigteli (k %OpsIx2t@l@ // move default stress: opsigtelik/-e vs. opsig
_) op (sy %Op // move default stress: opsy and compounds
op (standig %Op // move default stress: opstandig/-e/-heid
opti (mA %Opt%i // optimis/-me/-te/-ties/optimaal
op (winde %Op // move default stress: opwindend and derivitives
_) or (ga %Or // move default stress: orgaan/organe
organisasie Orx2anis'A:si
ose (a %o@S%i // fix stress and s and e sounds: oseaan/oseane and compounds
@) oties 'o@tis // antibioties/eksoties/eroties/neuroties
ower (@ o@v@r // lowergroen/betowerend/dowerig/compounds of owerheid
oë u@ //
@@ -1720,6 +1800,8 @@
onheil ''OnheIl // stress: onheil/e/onheilbringer/onheilsvoorspelling
onheil (ig %Onh'eIl // stress: onheilig/e
onheil (spel %Onh%eIl // stress: onheilspellend/e
_)on (koste On // restore default stress: onkoste/-s and compounds
_) on (kruid On // restore default stress: onkruid/-doder and similar
_) onnie Oni // onnie/-s; not on- prefix
onreg (K Onr&x2 // stress: onreg/te/onregmatig
on (regv++ %On // stress: onregverdig/e/heid
@@ -1750,6 +1832,7 @@
onder (bre %On@r // move default stress: onderbreek/onderbreking
onder (druk %On@r // exception to default stress rule
onder (duim %On@r // exception to default stress rule
onder (enC ''On@r_ // default stress: onderent
onder (hande %On@r // move default stress: onderhandel and derivitives
onder (hor %On@r // exception to default stress rule:
onder (hou %On@r // move default stress: onderhou/-dend/-e
@@ -1816,6 +1899,7 @@
pak (A pak? // pakesel/pakos/verpakafdeling
pakistan p%ak%istan //first a and stress
pakke (t p%akE // pakket/-te and compounds
_) pan (dem p%an // move default stress: pandemie/-s and compounds
panga paNga // fix g sound: panga/-s
_) pan (to p%an // move default stress: pantoffel and compounds/pantoen
papaja p%ap'A:ia //papaja and compounds
@@ -1836,11 +1920,13 @@
_) pas (AA pas // pasaangeër/pasoortreding
pas (op p%as // pasop/pasoppens
passa (sier p%as%a // stress: passasier and compounds
_) pa (stei p%a // move default stress: pastei and compounds
pastorie pastur'i // pastorie/-paar/-moeder
_) pa (tA p%a // pateties/patee/patent/paterniteit
pa (trA p%a // patrollie/patroon/patrys
pawil (joe p%av@l // move default stress and fix a sound: pawiljoen and compounds
pa (Ciljoe p%a% // fix stress: pawiljoen/paviljoen/-e and compounds
polio po@li;u // polio and compounds
_) peli (ka p%El%i // move default stress: pelikaan/pelikane
// @) pene (_ p@n@ // geroepene/ontslapene/uitgeworpene
pen (dule p%En // move defaul;t stress: pendule/-s
pene (_ p@n@ // geroepenes/ontslapenes/uitgeworpenes
@@ -1864,6 +1950,7 @@
perso (neel p%&rs%u // personeel and compounds
pervers p@rf&rs // pervers/perversie
_) pe (trA_ pe@ // lengthen e sound: Petro/Petra
pe (tunia p@ // fix stress and e sound: petunia/-s
_) pi (la p%i // move default stress: pilaar/pilare/pilatus
pi (sto p@ // pistool/pistole and compounds
pizza pitsa // fix zz sound: pizza and compounds
@@ -1878,7 +1965,7 @@
pof (add pOf_ // fix o sound: (konings)pofadder/-s
po (liep p%u // fix stress and o sound: poliep/-e/-agtig and compounds of poliep
polisie pul'isi
politiek pOl@t'ik
poli (tAAC p%Ol@ // politiek/politoer and compounds
popu ,pOpy
_) por (C %pOr //portret portaal etc.
por (sie pOr // restore default stress: porsie/-s/-tjie
@@ -1954,20 +2041,21 @@
rasse ras@ // e sound of compounds starting with rasse
ribbe (tj r'Ibi
rinne (w r@n@ // move default stress: (ge/ver)rinneweer/-de/-der
_) ri (o r%i // move default stress: riool and compounds/riolering
ritme rItm@ // fix e sound in ritmes/ritmespeler
ritu (A r@t%y // ritueel/rituele/ritualisties
_) rol (A rOl? // oprolaksie/roloorvleueling
roetine r%utin@ // stress: roetine/-basis/-besoek/-kontrole...
_) roode r'o@d@ //roodepoort and other names

roman rum'an
roman r%uman
&) ring (_ rIN
rring r@N // karring/torring

&) rm (K r@-m
@) rn (K r@-n

rivier r@f'i:r
rivier r@fi:r
_) ri (g rI // stress on 1st slb.: rigting/-loos/-vas, etc.
rond (r rOnt // grondreuk/grondrel/rondreis/-rol/-ry
rondom rOnt_%Om // rondom/rondomheen/rondomstaner
@@ -1987,6 +2075,7 @@
reden (ACA r@d@n' // redenasie/s
_) redi (gA r%Ed%i // redigeer/geredigeer/-de/ongeredigeerde
refor (m r@f%Or // gereformeerde/reformering/reformasie
C) re (gat r@ // fix e sound: fregat/-te and compounds/harregat
regime (_ r@Zi:m // regime/-s and compounds
reg (ist r@x2 // registrasie/-nommer/register/bevolkingsregister
regverdig r&x2f'&rd@x2 // regverdig/onregverdige/regverdigheid - verwyder uit af_list
@@ -2040,6 +2129,7 @@
_) sh S // sh at beginning of word pronounced like English sh
sj S
sjampanje S%ampanj@ // move default stress: sjampanje and compounds
sjampoe S%ampu: // fix stress and length of oe: sjampoe and compounds
sjerrie SEri // fix e sound: sjerrie and compounds
sjokolade SOk@l'A:d@ // sjokolade and compounds
s (japie s // dorpsjapie/plaasjapie/stadsjapie
@@ -2070,6 +2160,7 @@
sa (tir s%a // move default stress: satire/satiries/-e
_) schu (C Su // fix u sound: Schubert/Schultz/Schumann/Schumacher
_) sede se@d@ // sede/-s|-preek
sei (soen s%eI // move default stress: seisoen and compounds
seker se@k@r // versekering/sekerheid/onsekerheid/sekere
se (ko s@ // sekond/sekonde/sekondes/sekondant
sekre (ta s@kr@
@@ -2082,7 +2173,7 @@
seli (ba s%El%i // move default stress and fix e sound: selibaat/selibate
se (llin s%&' // stress on 'in: (met)gesellin/-ne/-netjie, etc.
@) sel (wig s'&l // stress: (ver)eenselwig and derivitives
_) semen (t s@mEn // sementtafel/blad/vierkant
_) seme (Ct s@mE // sementtafel/blad/vierkant/semester/-s
semi (na s%Em%i // seminaar/seminare/seminarium

sening se@n@N // sening/haaksening/heupsening
@@ -2120,6 +2211,7 @@
sla (vin sl%a // move default stress and shorten a sound: slavin/-ne and compounds
@) sering s'e@r@N // analisering/kategorisering
@) ses (_ s@s // fix 2 slb. words ending in ses
snel (_ sn&l // fix e: aansnel/agternasnel/blitssnel/heengesnel/koppesnel/nasnel/verbysnel
sodom (iet s,o@dOm // fix stress
so (ffleu s%u // move default stress and fix o sound: suffleur/soffleuse
_) soie so@?i // soiets/soiemand
@@ -2138,6 +2230,7 @@
C) spel (_ sp&l // many compounds ending in spel after consonant
&) spele (_ sp'e@l@
spese (ry sp@s@ // spesery and compounds and derivitives
_) spi (ra sp%i // move default stress: spiraal and compounds/spirale/spirakel/spirant, etc.
spoed (@ sput // spoedaflewering/spoedeisend/spoedorder
spoed (ig spud // spoedig/-lik/-er/-ste
_) spon (ta sp%On // move default stress: spontaan/spontane
@@ -2227,7 +2320,7 @@
_) ster st'&r
kwik) ster st&:r // kwikstertjie/-s
sterrei st@r'eI
sterre st'&r@
sterre st&r@
sterretjie st'&rici

ste (m stE // eliminate one m in derivitives like stemming
@@ -2241,7 +2334,6 @@
storm stOr@-m
strategie strat@x2'i
streke stre@k@
struikel str'Yyk@l // struikelblok/struikelaar/struikelend
stu (de st%y // move default stress


@@ -2256,7 +2348,9 @@
_) ta (ma t%a // tamatie and compounds
_) ta (mb t%a // tamboer and compounds/tambotie and compounds
_) tande (C@ t''and@ // fix e sound: tandebeker/-pasta/-poeier/-trekker
_) tant (e tA~nt // nasalise
_) tant (e tA~nt // nasalise: tante/-tjie/-s
tantes tA~nt@s // nasalise and fix e sound: tantes
taren (ta t%ar@n // fix stress and 1st a sound: tarentaal/tarentale
taverne t%af&rn@ // fix stress and 1st e sound: taverne and compounds
taver (nier t%af@r // move stress to end: tavernier/-s

@@ -2268,13 +2362,17 @@
_) tibet t%ibEt // move default stress: Tibet/-aans/-e
@) tief (_ t'if // alternatief/aktief/instinktief/(ak)kumulatief
@) tiewe (_ t'iv@ // alternatiewe/aktiewe/instinktiewe/(ak)kumulatiewe
tink (tink t@Nk // move default stress: tinktinkie/-s
ti (ra t%i // move default stress tiran tirade
tj tS
@) tj (a tj // separate tj: agtjarig/blatjang/bontjas/olifantjag/ouditjaar/tweegatjakkals
tj (ie c
_) tj (ie tS
ui) tj tj // uitjaag/uitjou/uitjubel
ui) tjie ci // beskuitjie/fluitjie/ruitjie/uitjie, etc.
_) th (@@ t
@) th (C t // drop h: Bothma/Neethling and similar
_) theu t''Y@ // Theuns/Theunis
_) th _^_EN // if only one vowel character
@) th (_N _^_EN

@@ -2306,6 +2404,7 @@

trek tr&k
trekker tr&k@r // voortrekkerleier/Voortrekkerstraat/salaristrekkersvergadering
triomf (ant tr%i%Omf // move default stress: triomfantlik/-e
@) trise (_ tr'is@ // aktrise and similar
_) trom (b tr%Om // move default stress: tromboon/trombone/trombose and compounds
_) trom (pet tr%Om // move default stress: trompet/-tte/-tter and compounds
@@ -2314,7 +2413,6 @@
tru (spieë try // fix u sound: truspieël/-tjie/-s
ttel t@l // many compounds of bottel/skottelgoed
tuiglik t'Yyx2l@k // stress: werktuiglik/sintuiglik/-e/-heid
tuimel tYym@l // tuimelend/tuimelaar/tuimelraam and compounds
tuin (ier t%Yyn // move default stress: tuinier and compounds
tussen tWs@n // tussenin/tussenbeide/tussenganger
tuur t'yr
@@ -2329,10 +2427,12 @@
teater t%iA:t@r // fix stress and e sound: teater and compounds
tea (tra t%i%a // fix stress and vowel sounds: teatraal/teatrale
teen (argu t''e@n // forse stress on 1st slb.: teenargument/-e/-asie
@C) te (gn t& //tegniek/iese and friends
teen (oorges t%e@n_ // move default stress: teenoorgestel/-d/-e
@C) te (gn t& //tegniek/iese and friends
_) tekere t@ke@r@ // move default stress and correct e sounds
_) teks (tu t%Eks // move default stress: tekstuur/teksture
_) tele (C t%&l@ // telefoneer/telekommunikasie, etc.
_) teler te@l@r // fix stress and vowel sounds: teler/-s/-y/-svereniging, etc.
@C) te (nk t& ++ //tenk and friends
@C) te (C t@ ///
te (kkie+ tE // fix e sound: tekkie/-s/staptekkies and similar
@@ -2406,7 +2506,6 @@
tera (pA tEra' // terapie/terapeutterapeuties
_) tereg t@r&x2 // teregwysing/teregstelling/tereghelp/tereg
_) tever (@ t@f@r
tevrede t@fr'e@d@
as) terende (_ t'e@r@nd@ //kontrasterende
ek) terende (_ t'e@r@nd@ //reflekterende respekterende
k) te (ring t'e@ //selektering, reflektering etc.
@@ -2437,6 +2536,9 @@
uit (druk_N Yyt
uit (drukking_ Yyt // but default stress:
uit (drukkings Yyt // and compounds starting with uitdrukkings
uit (een %Yyt_ // move default stress: uiteen/-setting/-sit
uit (eenloop Yyt_ // restore default stress: uiteenloop
uiteen (lop %Yyt_%e@n // move stress to 3rd slb.: uiteenlopend/uiteenloping
uitgee (+ 'Yytx2e@ // se rule: _) uitge (@P5 Yytx2@
uitsonderli (k %YytsOn@rl@ // move default stress: uitsonderlik/-e vs. uitsonder
uit (sorteer ''Yyt // remove stress from -eer and place on 1st slb
@@ -2468,6 +2570,7 @@
v (v
@) vaardig f'A:rd@x2 // diensvaardig/hulpvaardig/onboetvaardig/strydvaardig
uit) vaardig fA:rd@x2 // but uitvaardig
va (doek fa // stress on 1st slb.: vadoek/-e
vagina vax2ina // fix v sound and shorten a sound: vagina/-s
vagin (A@ v%ax2%in // move default stress: vaginale and similar
vakansie f@k'ansi
@@ -2488,7 +2591,9 @@
ven (yn f@n // venyn/venynig
ver f@r
veranda v@randa // fix stress and e sound: veranda and compounds
verby f@rbeI // fix stress: verbykomkans/verbykomslag, etc.
vere (sto fe@r@ // avoid ver prefix: verestoffer/-s and compounds
vere (_ fe@r@ // fix e sound: vere and compounds ending in vere
vi (o f%i // move default stress: viool and compounds/viole
vio (letK f%i%u // move default stress: violet/-te/-kleurige, etc.
_) vi (ri v@ // fix stress and v and i sounds: viriel/-eviriliteit
@@ -2507,9 +2612,10 @@
ver (fris f@r // verfris and derivitives; see rule: verf (C f&rf
verfyn f@rf'eIn
verf (@ f&rf // verfkwas/-voorraad/-emmer and similar
_) verf (lou f@rf // verflou/-ing
_) verf (o f@rf // verfoei(lik)/verfomfaai/verfoes, etc.; see rule: verf
verf (rom f@rf // verfrommel/-de/-ing; see rule: verf
verf f'&rf
verf f&rf
_) vergesog f'&:r;x2@sOx2
_) verlangs f&:rlaNs // fix stress and e sound: verlangs/-e
veronderste (l f@rOn@rst'& // stress: veronderstel/-ling
@@ -2521,11 +2627,14 @@
verte (l f@rt& // oorvertelling/rondvertel and similar
verter (A f@rte@r // spysvertering and compounds/spysverterende
ver (velA f@r // vervelig/verveling (see: _) ver (@P3 f@r
verwery f&rv@r%eI // fix stress and e sounds: verwery and compounds like huisverwery
vi (brA v%i // fix v and i sounds: vibrasie/vibreer
vi (cto@ v%i // fix v and i sounds: victoriaans/-e
video v'idi;u //video and compounds
vier (kantig f%i:r // move default stress: vierkantig/-e vs. vierkant

ville _^_EN
@ie) vis (_ f@s // fix stress: jellie/kerrievis
vis (A fIs // visarend/walvisolie
vise (C f'isi // visevoorsitter/visesekretaris
ad) vis (e@ fis' // v and i sounds: adviseer/adviserend/-e
@@ -2539,11 +2648,12 @@

_) vasge (@P5 f'asx2@
vleuel flY@@l // fix last e sound in vleuel in words like vleuelklavier/tweevleuelig, etc.
vlieë (nier fl%i@ // move default stress: vlieënier and compounds
@) voerig f'ur@x2 // breedvoerig/uitvoeriger
volke f'Olk@ // volke/-re: exception to: vo (lC f%O
volk (ing fOlk // bevolking: exception to: vo (lC f%O
volk (s fOlk // volksliedere/volksbeweging/volksleier and similar
vo (lle_ fO // exception to: vo (lC f%O
vo (llA_ fO // volle/vollê/Volla - exception to: vo (lC f%O
volle (dig f%Ole@ // fix stress and e sound: (on)volledig/-e/-heid...
vo (ller fO // exception to: vo (lC f%O
volles (_ fOl@s // fix stress and e sound: volles/passievolles, etc.
@@ -2551,6 +2661,7 @@
vol (maan fOl // exception to: vo (lC f%O
vol (r fOl // volrond/-rooi/-ryp: exception to: vo (lC f%O
vol (ste_ fOl // exception to: vo (lC f%O
vol (sto fOl // volstof/volstoom/volstop/volstort; exception to: vo (lC f%O
voltyds fOlteIts // voltyds/-e: exception to: vo (lC f%O
volop f'Ol_Op // volop/volopbetaalde
volume v%Olym@ // move default stress and fix o sound: volume and compounds
@@ -2564,9 +2675,11 @@
_) voor (bee+ fo@r // voorbeeld

_) voorge (@P6 f'o@rx2@
voor (sie f%o@r // move default stress: voorsien/-ing
voorspe (l fo@rsp'& // voorspel/voorspelling/voorspelbaar/onvoorspelbaar
voor (sk fo@r // voorskiet/voorskot/voorskrif/voorskryf
voorstedeli (k f%o@rste@d@l@ // move default stress: voorstedelik/-e vs voorstede
voort (duren f%o@r_ // fix stress and drop t: voortdurend/-e
voor (trek fo@r // voortrek/voortrekker and compounds
voort (v@@ f%o@rt // voortvarend/voortvlugtige
_) vooruit fo@r'Yyt // vooruit/vooruitsig/vooruitbeplanning
@@ -2586,16 +2699,23 @@
w v
w (w
d) w w
@C) w (erk v // fix w sound: hardwerkend/handwerk/naaldwerk
AAd) w v // bloedweinig/draadwerk/huidweefsel/landgoedwyn/smeedwerk/skottelgoedwasser
nd) w v // aandwandeling/brandweer/eindwedstryd/grondwet/grondwal
Cod) w v // fix w sound: godwelgevallig/godweet/godwees
k) w w
k) w (And v // fix w sound: buikwand/rukwinde
s) w w
@s) w (al v // fix w sound: dwarswal/gruiswalle/loodswalvis
s) w (eek v // fix w sound: feesweek/kersweek/paasweek/vandeesweek/werksweek
@s) w (iel v // fix w sound: fietswiel/gewaarwordingswiel and similar compounds
s) w (il v // fix w sound: groepswil/hemelswil/liefdeswil/korswil
s) w (yf v // fix w sound: viswyf/ganswyfie/mannetjieswyfie
ens) w v
los) w v // fix w sound: (los)wikkel/woel/wriemel
mis) w v // fix w sound: miswaas/misweer/miswurm
vas) w v // fix w sound: vaswikkel/-woel
vleis) w v // fix w sound: vleisweefsel/-woekering/-wange
ooC) w v // booswig/grootwild/ooswaarts/
out) w v // houtwerk/soutwater and similar
yd) w v // fix w sound: sluittydwerk/(wa)wydwakker
@@ -2623,6 +2743,7 @@
@s) ware vA:r@ // kruideniersware/bronsware/glasware/kombuisware
bes) ware wA:r@ // geloofsbesware/gewetensbesware
@C) w (arm v // fix w sound: snikwarm/te
@s) was (K vas // fix w sound: ertswassery/kerswas/kombuiswasbak
@k) water vA:t@r // drinkwater/kalkwater/reukwater
wat (wond v%at // move default stress: watwonders/-e
_) wa (wy vA: // fix stress and a sound: // wawyd/wawydwakker, etc.
@@ -2660,6 +2781,7 @@
wn _^_EN // names containing town/Brackendowns/Brown
worth _^_EN
wood _^_EN
@C) w (ooC v // fix w sound: eenmanswoonstel/handelswoorde/openingswoord/privaatwoonstel
@) ws (_N _^_EN
@) w (_N _^_EN
@) werste vIrst@
@@ -2668,6 +2790,7 @@
woe (styn v%u // move default stress: woestyn and compounds
wolke vOlk@ // nimbuswolke/wolkekrabber
woorde vo@rd@
@C) w (urm v // fix w sound: erdwurm/-s/-agtig, etc.
w (yser v //padwyser and many others with wyser in compounds
nt) w (A v

@@ -2694,13 +2817,14 @@
ê (r &:
êr (_ ''&:r // stress at end of wrds ending in êr: arbitrêr/dissiplinêr, etc.
êre (_ ''&:r@ // stress of penultimate slb of wrds ending in êre: elementêre/dissiplinêre
b) êre (_ &:r@ // but wrds ending in bêre take default stress: wegbêre
sk) êr (+ &:r // but wrds containing skêr follow normal stress: skaapskêr
îe 3:
ge) ë (rf & // oorgeëf/-de
ë (teit @ // fix stress and e sound: variëteit and compounds
ïgnoreer ix2nur'e@r // geïgnoreer
ï (n @ // geïnteresseerd
be) ï (nC 'I // beïndruk/beïnvloed
ï (nt @ // geïnteresseerd
ï (nC 'I // beïndruk/beïnvloed
ïsol %is%ul // geïsoleer/-d
ô O:
ûe W@ // brûe/rû

+ 3
- 0
dictsource/hr_list View File

@@ -171,6 +171,9 @@ _1M4 b'ilijUn
_dpt _:z'a*Ez_


// not Roman numerals
vi ti


// Abbreviations
aaa $abbrev

+ 4
- 2
phsource/compile_report View File

@@ -20,7 +20,7 @@
nl 26 117
pl 15 107
sk 29 125
cs 5 125
cs 6 125
hr 19 129
mk 3 130
sr 2 129
@@ -35,7 +35,7 @@
sv 25 118
no 28 122
is 32 121
vi 41 133
vi 42 134
zhy 40 129
sw 14 105

@@ -66,6 +66,7 @@
2 dzh/dz_pzd_ base hi
6 dzh/xdzh base hi mk ru
2 dzh/xdz_pzd base hi
1 envelope/p_512 vi
4 envelope/p_fall vi zhy
1 envelope/p_fallrise vi
3 envelope/p_level vi zhy
@@ -343,6 +344,7 @@
10 vdiph/ooi en en_n en_us en_rp cy eo fi no zhy
1 vdiph/ooi_2 af
1 vdiph/ooi_3 en_wm
1 vdiph/oou cs
2 vdiph/ou fi zhy
2 vdiph/ou_2 sk ro
2 vdiph/ou_3 is

+ 3
- 1
phsource/mbrola/cs View File

@@ -16,8 +16,10 @@
0 R^ NULL 0 r'
0 R^/ NULL 0 r'
0 c NULL 0 t'
0 oU NULL 0 o
0 eI NULL 60 e i
0 aU NULL 60 a u
0 eU NULL 60 e u
0 oU NULL 60 o u
0 N NULL 0 n
0 Q NULL 0 x


+ 6
- 0
phsource/ph_czech View File

@@ -22,5 +22,11 @@ phoneme u:
formants vowel/u
endphoneme

phoneme oU
vowel starttype (o) endtype (u)
length 260
formants vdiph/oou
endphoneme




+ 1
- 1
phsource/ph_pt_brazil View File

@@ -32,7 +32,7 @@ phoneme &~
vowel starttype (@) endtype (@)
length 200
formants vnasal/a#_n
reduceto & 4
// reduceto & 4
endphoneme

phoneme &U~

+ 6
- 0
phsource/ph_vi View File

@@ -53,6 +53,12 @@ phoneme 7 // tone 1 at end of clause
endphoneme


phoneme 8 // TEST
stress
length 18
tone 30 6 envelope/p_512 NULL
endphoneme

// Vowels
//=======


+ 2
- 2
phsource/phonemes View File

@@ -1236,9 +1236,9 @@ include ph_zh_yue
phonemetable sw base
include ph_swahili


//phonemetable basef base
//include pf

//phonemetable f_en basef
//include pf_english



BIN
phsource/vwl_en/u View File


+ 8
- 8
platforms/windows/make_espeak.iss View File

@@ -2,7 +2,7 @@
[Setup]
AppName=eSpeak
AppVerName=eSpeak version 1.29
AppVerName=eSpeak version 1.29.02
DefaultDirName={pf}\eSpeak
DefaultGroupName=eSpeak
@@ -64,21 +64,21 @@ v1=Select which voices to install
v2=or press Enter to accept defaults
v3=Enter voice names, eg: (for Portuguese) pt, or with a variant, eg: pt+f3
bs.v1=Odaberite jezik kojeg �elite instalirati
bs.v1=Odaberite jezik kojeg želite instalirati
bs.v2=ili pritisnite Enter za prihvat zadanih.
bs.v3=Upi�ite, npr. bs (za Bosanski) ili s varjantom: bs+f3
bs.v3=Upišite, npr. bs (za Bosanski) ili s varjantom: bs+f3
hr.v1=Odaberite jezik kojeg �elite instalirati
hr.v1=Odaberite jezik kojeg želite instalirati
hr.v2=ili pritisnite Enter za prihvat zadanih.
hr.v3=Upi�ite, npr. hr (za Hrvatski) ili s varjantom: hr+f3
hr.v3=Upišite, npr. hr (za Hrvatski) ili s varjantom: hr+f3
pt.v1=Seleccione as vozes que pretende instalar
pt.v2=ou precione enter para aceitar as predefinidas.
pt.v3=Introduza os nomes das vozes, ex: (Brazil) pt (ou Portugal) pt-pt, ou com outras caracter�sticas, ex: pt+f3
pt.v3=Introduza os nomes das vozes, ex: (Brazil) pt (ou Portugal) pt-pt, ou com outras caracter?sticas, ex: pt+f3
sr.v1=Molimo vas da odaberete glasove, koje �elite da instalirate
sr.v1=Molimo vas da odaberete glasove, koje želite da instalirate
sr.v2=ili pritisnite Enter za instalaciju podrazumevanih glasova.
sr.v3=Da odaberetd glas, unesite ime glasa koje �elite instalirati, na primer sr, ili sr+f3
sr.v3=Da odaberete glas, unesite ime glasa kojeg želite instalirati, na primer sr, ili sr+f3
[Code]

+ 1
- 1
src/prosodydisplay.cpp View File

@@ -80,7 +80,7 @@ void InitProsodyDisplay()
menu_envelopes->Append(0x102,_T("Fall-rise"));
menu_envelopes->Append(0x103,_T("Fall-rise (R)"));
menu_envelopes->Append(0x104,_T("Fall-2"));
menu_envelopes->Append(0x105,_T("Fall-3"));
menu_envelopes->Append(0x106,_T("Fall-3"));

menu_prosody = new wxMenu;
menu_prosody->Append(1,_T("Pitch envelope"),menu_envelopes);

+ 8
- 15
src/readclause.cpp View File

@@ -37,7 +37,6 @@
#include <locale.h>
#define N_XML_BUF 256

espeak_VOICE *SelectVoice(espeak_VOICE *voice_select, int *variant);

char *xmlbase = ""; // base URL from <speak>

@@ -129,7 +128,6 @@ SSML_STACK *ssml_sp;
SSML_STACK ssml_stack[N_SSML_STACK];

char current_voice_id[40] = {0};
int current_voice_variant = 0;


#define N_PARAM_STACK 20
@@ -708,15 +706,14 @@ MNEM_TAB ssmltags[] = {



static char *VoiceFromStack(int *voice_variant)
{//============================================
static char *VoiceFromStack()
{//==========================
// Use the voice properties from the SSML stack to choose a voice, and switch
// to that voice if it's not the current voice
int ix;
SSML_STACK *sp;
espeak_VOICE *v;
char *v_id;
espeak_VOICE voice_select;
int variant;
char voice_name[40];
char language[40];

@@ -751,11 +748,10 @@ static char *VoiceFromStack(int *voice_variant)

voice_select.name = voice_name;
voice_select.languages = language;
v = SelectVoice(&voice_select,&variant);
*voice_variant = variant;
if((v == NULL) || (v->identifier == NULL))
v_id = SelectVoice(&voice_select);
if(v_id == NULL)
return("default");
return(v->identifier);
return(v_id);
} // end of VoiceFromStack


@@ -1088,7 +1084,6 @@ static int GetVoiceAttributes(wchar_t *pw, int tag_type)
wchar_t *age;
wchar_t *variant;
char *new_voice_id;
int voice_variant;

static const MNEM_TAB mnem_gender[] = {
{"male", 1},
@@ -1139,12 +1134,11 @@ static int GetVoiceAttributes(wchar_t *pw, int tag_type)
ssml_sp->tag_type = tag_type;
}

new_voice_id = VoiceFromStack(&voice_variant);
if((strcmp(new_voice_id,current_voice_id) != 0) || (current_voice_variant != voice_variant))
new_voice_id = VoiceFromStack();
if(strcmp(new_voice_id,current_voice_id) != 0)
{
// add an embedded command to change the voice
strcpy(current_voice_id,new_voice_id);
current_voice_variant = voice_variant;
return(CLAUSE_BIT_VOICE); // change of voice
}

@@ -1737,7 +1731,6 @@ f_input = f_in; // for GetC etc
if(terminator & CLAUSE_BIT_VOICE)
{
// a change in voice, write the new voice name to the end of the buf
buf[ix++] = current_voice_variant;
p = current_voice_id;
while((*p != 0) && (ix < (n_buf-1)))
{

+ 1
- 3
src/speak.cpp View File

@@ -98,9 +98,7 @@ static const char *help_text =

void DisplayVoices(FILE *f_out, char *language);

voice_t voice_data;
USHORT voice_pcnt[N_PEAKS+1][3];
voice_t *voice;



@@ -591,7 +589,7 @@ int main (int argc, char **argv)
{
PitchAdjust(pitch_adjustment);
}
WavegenSetVoice(voice);
DoVoiceChange(voice);

if(filename[0]==0)
{

+ 3
- 6
src/speak_lib.cpp View File

@@ -47,7 +47,7 @@
#include "wave.h"

unsigned char *outbuf=NULL;
extern espeak_VOICE *voice_selected;
extern espeak_VOICE voice_selected;

espeak_EVENT *event_list=NULL;
int event_list_ix=0;
@@ -65,9 +65,6 @@ int (* phoneme_callback)(const char *) = NULL;

char path_home[N_PATH_HOME]; // this is the espeak-data directory

voice_t voicedata;
voice_t *voice = &voicedata;


#ifdef USE_ASYNC

@@ -349,7 +346,7 @@ static int initialise(void)
fprintf(stderr,"Wrong version of espeak-data 0x%x (expects 0x%x)\n",result,version_phdata);
}

voice_selected = NULL;
memset(&voice_selected,0,sizeof(voice_selected));
SetVoiceStack(NULL);
SynthesizeInit();
InitNamedata();
@@ -711,7 +708,7 @@ ENTER("espeak_Initialize");
SetParameter(espeakVOLUME,100,0);
SetParameter(espeakCAPITALS,option_capitals,0);
SetParameter(espeakPUNCTUATION,option_punctuation,0);
WavegenSetVoice(voice);
DoVoiceChange(voice);
#ifdef USE_ASYNC
fifo_init();

+ 0
- 2
src/speak_riscos.cpp View File

@@ -90,8 +90,6 @@ static _kernel_oserror errblk;


USHORT voice_pcnt[N_PEAKS+1][3];
voice_t voice_data;
voice_t *voice;

static const char *help_text =
"\nspeak [options] [\"<words>\"]\n\n"

+ 1
- 1
src/synthdata.cpp View File

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

const char *version_string = "1.29.01 04.Sep.07";
const char *version_string = "1.29.02 10.Sep.07";
const int version_phdata = 0x012901;

int option_device_number = -1;

+ 16
- 17
src/synthesize.cpp View File

@@ -999,8 +999,8 @@ static void DoMarker(int type, int char_posn, int length, int value)
} // end of Synthesize::DoMarker


static void DoVoice(voice_t *v)
{//============================
void DoVoiceChange(voice_t *v)
{//===========================
// allocate memory for a copy of the voice data, and free it in wavegenfill()
voice_t *v2;

@@ -1413,13 +1413,6 @@ int Generate(PHONEME_LIST *phoneme_list, int *n_ph, int resume)
*n_ph = 0;
}

if(new_voice)
{
// finished the current clause, now change the voice if there was an embedded
// change voice command at the end of it (i.e. clause was broken at the change voice command)
DoVoice(new_voice);
new_voice = NULL;
}
return(0); // finished the phoneme list
} // end of Generate

@@ -1560,14 +1553,6 @@ int SpeakNextClause(FILE *f_in, const void *text_in, int control)
translator->CalcPitches(clause_tone);
translator->CalcLengths();

if(voice_change != NULL)
{
// voice change at the end of the clause (i.e. clause was terminated by a voice change)
new_voice = LoadVoiceVariant(voice_change+1,voice_change[0]); // add a Voice instruction to wavegen at the end of the clause
if(new_voice != NULL)
voice = new_voice;
}

if(skipping_text)
{
n_phoneme_list = 0;
@@ -1586,6 +1571,20 @@ int SpeakNextClause(FILE *f_in, const void *text_in, int control)
Generate(phoneme_list,&n_phoneme_list,0);
WavegenOpenSound();

if(voice_change != NULL)
{
// voice change at the end of the clause (i.e. clause was terminated by a voice change)
new_voice = LoadVoiceVariant(voice_change,0); // add a Voice instruction to wavegen at the end of the clause
}

if(new_voice)
{
// finished the current clause, now change the voice if there was an embedded
// change voice command at the end of it (i.e. clause was broken at the change voice command)
DoVoiceChange(voice);
new_voice = NULL;
}

return(1);
} // end of SpeakNextClause


+ 3
- 1
src/voice.h View File

@@ -20,7 +20,7 @@


typedef struct {
char name[40];
char v_name[40];

int phoneme_tab_ix; // phoneme table number
int pitch_base; // Hz<<12
@@ -67,8 +67,10 @@ extern USHORT voice_pcnt[N_PEAKS+1][3];
extern voice_t *voice;
extern int tone_points[10];

char *SelectVoice(espeak_VOICE *voice_select);
voice_t *LoadVoice(const char *voice_name, int control);
voice_t *LoadVoiceVariant(const char *voice_name, int variant);
void DoVoiceChange(voice_t *v);
void WavegenSetVoice(voice_t *v);
void ReadTonePoints(char *string, int *tone_pts);


+ 127
- 120
src/voices.cpp View File

@@ -64,8 +64,7 @@ static int n_voices_list = 0;
static espeak_VOICE *voices_list[N_VOICES_LIST];
static int len_path_voices;

espeak_VOICE *voice_selected = NULL;
espeak_VOICE *first_voice = NULL;
espeak_VOICE voice_selected;



@@ -153,16 +152,14 @@ static keywtab_t keyword_tab[] = {
{"l_length_mods", 0x100+LOPT_LENGTH_MODS},
{NULL, 0} };

#define N_VOICES 100
static int n_voices_tab = 0;
static voice_t *voices_tab[N_VOICES];

#define N_VOICE_VARIANTS 12
const char variants_either[N_VOICE_VARIANTS] = {1,2,12,3,13,4,14,5,11,0};
const char variants_male[N_VOICE_VARIANTS] = {1,2,3,4,5,0};
const char variants_female[N_VOICE_VARIANTS] = {11,12,13,14,0};
const char *variant_lists[3] = {variants_either, variants_male, variants_female};

voice_t voicedata;
voice_t *voice = &voicedata;


void SetToneAdjust(voice_t *voice, int *tone_pts)
@@ -419,34 +416,6 @@ static void VoiceFormant(char *p)
}


static voice_t *VoiceLookup(char *voicename)
{//=========================================
// Keep a cache of previously used voices.
int ix;
voice_t *v;

for(ix=0; ix < N_VOICES; ix++)
{
if((ix < n_voices_tab) && (strcmp(voices_tab[ix]->name,voicename)==0))
{
return(voices_tab[ix]); // found the entry for the specified voice name
}

if(ix == n_voices_tab)
{
// found a free slot
v = (voice_t *)Alloc(sizeof(voice_t));
if(v == NULL)
return(NULL);
voices_tab[n_voices_tab++] = v;
strncpy0(v->name,voicename,sizeof(v->name));
return(v);
}
}
return(voices_tab[0]); // table is full, reuse the first entry
} // end of VoiceLookup





@@ -482,7 +451,7 @@ static int Read8Numbers(char *data_in,int *data)


voice_t *LoadVoice(const char *vname, int control)
{//==========================================
{//===============================================
// control, bit 0 1= no_default
// bit 1 1 = change tone only, not language
// bit 2 1 = don't report error on LoadDictionary
@@ -496,6 +465,7 @@ voice_t *LoadVoice(const char *vname, int control)
int n;
int value;
int error = 0;
int langix = 0;
int tone_only = control & 2;
int language_set = 0;
int phonemes_set = 0;
@@ -505,7 +475,6 @@ voice_t *LoadVoice(const char *vname, int control)
int conditional_rules = 0;
LANGUAGE_OPTIONS *langopts = NULL;

voice_t *v;
Translator *new_translator = NULL;

char voicename[40];
@@ -525,6 +494,11 @@ voice_t *LoadVoice(const char *vname, int control)
int pitch1;
int pitch2;

static char voice_identifier[40]; // file name for voice_selected
static char voice_name[40]; // voice name for voice_selected
static char voice_languages[100]; // list of languages and priorities for voice_selected


strcpy(voicename,vname);
if(voicename[0]==0)
strcpy(voicename,"default");
@@ -562,13 +536,6 @@ voice_t *LoadVoice(const char *vname, int control)
language_type = voicename;
}

if((first_voice == NULL) && (f_voice != NULL))
{
first_voice = ReadVoiceFile(f_voice,buf+strlen(path_voices),voicename);
rewind(f_voice);
}


if(!tone_only && (translator != NULL))
{
delete translator;
@@ -582,8 +549,22 @@ voice_t *LoadVoice(const char *vname, int control)

if(!tone_only)
{
if((v = VoiceLookup(voicename)) != NULL)
voice = v;
voice = &voicedata;
strncpy0(voice_identifier,vname,sizeof(voice_identifier));
voice_name[0] = 0;
voice_languages[0] = 0;

voice_selected.identifier = voice_identifier;
voice_selected.name = voice_name;
voice_selected.languages = voice_languages;
}
else
{
// append the variant file name to the voice identifier
if((p = strchr(voice_identifier,'+')) != NULL)
*p = 0; // remove previous variant name
sprintf(buf,"+%s",&vname[3]); // omit !v/ from the variant filename
strcat(voice_identifier,buf);
}
VoiceReset(tone_only);

@@ -615,33 +596,68 @@ voice_t *LoadVoice(const char *vname, int control)
switch(key)
{
case V_LANGUAGE:
// only act on the first language line
if(language_set || tone_only)
break;

sscanf(p,"%s",language_name);
if(strcmp(language_name,"variant")==0)
break;

language_type = strtok(language_name,"-");
language_set = 1;
strcpy(translator_name,language_type);
strcpy(new_dictionary,language_type);
strcpy(phonemes_name,language_type);
SelectPhonemeTableName(phonemes_name);

if(new_translator != NULL)
delete new_translator;
{
unsigned int len;
int priority;

new_translator = SelectTranslator(translator_name);
langopts = &new_translator->langopts;
if(tone_only)
break;
priority = DEFAULT_LANGUAGE_PRIORITY;
language_name[0] = 0;
sscanf(p,"%s %d",language_name,&priority);
if(strcmp(language_name,"variant") == 0)
break;
len = strlen(language_name) + 2;
// check for space in languages[]
if(len < (sizeof(voice_languages)-langix-1))
{
voice_languages[langix] = priority;
strcpy(&voice_languages[langix+1],language_name);
langix += len;
}
// only act on the first language line
if(language_set == 0)
{
language_type = strtok(language_name,"-");
language_set = 1;
strcpy(translator_name,language_type);
strcpy(new_dictionary,language_type);
strcpy(phonemes_name,language_type);
SelectPhonemeTableName(phonemes_name);
if(new_translator != NULL)
delete new_translator;
new_translator = SelectTranslator(translator_name);
langopts = &new_translator->langopts;
}
}
break;

case V_NAME:
if(tone_only == 0)
{
while(isspace(*p)) p++;
strncpy0(voice_name,p,sizeof(voice_name));
}
break;

case V_GENDER:
{
int age;
char vgender[80];
sscanf(p,"%s %d",vgender,&age);
voice_selected.gender = LookupMnem(genders,vgender);
voice_selected.age = age;
}
break;

case V_TRANSLATOR: // language_name
case V_TRANSLATOR:
if(tone_only) break;

sscanf(p,"%s",translator_name);
@@ -854,6 +870,8 @@ voice_t *LoadVoice(const char *vname, int control)
return(NULL); // no dictionary loaded

new_translator->dict_condition = conditional_rules;

voice_languages[langix] = 0;
}

langopts = &new_translator->langopts;
@@ -900,20 +918,23 @@ char *ExtractVoiceVariantName(char *vname, int variant_num)

variant_name[0] = 0;

if((p = strchr(vname,'+')) != NULL)
if(vname != NULL)
{
// The voice name has a +variant suffix
*p++ = 0; // delete the suffix from the voice name
if(isdigit(*p))
if((p = strchr(vname,'+')) != NULL)
{
variant_num = atoi(p); // variant number
// The voice name has a +variant suffix
*p++ = 0; // delete the suffix from the voice name
if(isdigit(*p))
{
variant_num = atoi(p); // variant number
}
else
{
// voice variant name, not number
strcpy(variant_name,"!v/");
strncpy0(&variant_name[3],p,sizeof(variant_name)-3);
}
}
else
{
// voice variant name, not number
strcpy(variant_name,"!v/");
strncpy0(&variant_name[3],p,sizeof(variant_name)-3);
}
}
if(variant_num > 0)
@@ -1214,8 +1235,8 @@ static espeak_VOICE *SelectVoiceByName(espeak_VOICE **voices, const char *name)



espeak_VOICE *SelectVoice(espeak_VOICE *voice_select, int *variant)
{//================================================================
char *SelectVoice(espeak_VOICE *voice_select)
{//==========================================
// Returns a path within espeak-voices, with a possible +variant suffix
// variant is an output-only parameter
int nv; // number of candidates
@@ -1226,6 +1247,7 @@ espeak_VOICE *SelectVoice(espeak_VOICE *voice_select, int *variant)
int gender;
int skip;
int aged=1;
char *variant_name;
const char *p, *p_start;
espeak_VOICE *vp = NULL;
espeak_VOICE *vp2;
@@ -1233,6 +1255,7 @@ espeak_VOICE *SelectVoice(espeak_VOICE *voice_select, int *variant)
espeak_VOICE *voices[N_VOICES_LIST]; // list of candidates
espeak_VOICE *voices2[N_VOICES_LIST+N_VOICE_VARIANTS];
static espeak_VOICE voice_variants[N_VOICE_VARIANTS];
static char voice_id[50];

memcpy(&voice_select2,voice_select,sizeof(voice_select2));

@@ -1242,8 +1265,6 @@ espeak_VOICE *SelectVoice(espeak_VOICE *voice_select, int *variant)
if((voice_select2.languages == NULL) || (voice_select2.languages[0] == 0))
{
// no language is specified. Get language from the named voice
int var;
char *p2;
static char buf[60];
if(voice_select2.name == NULL)
@@ -1253,12 +1274,8 @@ espeak_VOICE *SelectVoice(espeak_VOICE *voice_select, int *variant)
}
strncpy0(buf,voice_select2.name,sizeof(buf));
if((p2 = strchr(buf,'+')) != NULL)
{
// remove the voice variant suffix, from eg. en+3
*p2 = 0;
var = atoi(p2+1);
}
variant_name = ExtractVoiceVariantName(buf,0);

vp = SelectVoiceByName(voices_list,buf);
if(vp != NULL)
{
@@ -1266,8 +1283,13 @@ espeak_VOICE *SelectVoice(espeak_VOICE *voice_select, int *variant)

if((voice_select2.gender==0) && (voice_select2.age==0) && (voice_select2.variant==0))
{
*variant = var;
return(vp);
if(variant_name[0] != 0)
{
sprintf(voice_id,"%s+%s",vp->identifier,&variant_name[3]); // omit the !v/ from variant_name
return(voice_id);
}

return(vp->identifier);
}
}
}
@@ -1344,8 +1366,15 @@ espeak_VOICE *SelectVoice(espeak_VOICE *voice_select, int *variant)

// index the sorted list by the required variant number
vp = voices2[voice_select2.variant % ix2];
*variant = vp->variant;
return(vp);

if(vp->variant != 0)
{
variant_name = ExtractVoiceVariantName(NULL,vp->variant);
sprintf(voice_id,"%s+%s",vp->identifier,&variant_name[3]);
return(variant_name);
}

return(vp->identifier);
} // end of SelectVoice


@@ -1460,16 +1489,14 @@ espeak_ERROR SetVoiceByName(const char *name)
// first check for a voice with this filename
// This may avoid the need to call espeak_ListVoices().

if((first_voice == NULL) && (LoadVoice(buf,1) != NULL))
if(LoadVoice(buf,1) != NULL)
{
voice_selected = first_voice;

if(variant_name[0] != 0)
{
LoadVoice(variant_name,2);
}

WavegenSetVoice(voice);
DoVoiceChange(voice);
SetVoiceStack(&voice_selector);
return(EE_OK);
}
@@ -1481,13 +1508,11 @@ espeak_ERROR SetVoiceByName(const char *name)
{
if(LoadVoice(v->identifier,0) != NULL)
{
voice_selected = v;

if(variant_name[0] != 0)
{
LoadVoice(variant_name,2);
}
WavegenSetVoice(voice);
DoVoiceChange(voice);
SetVoiceStack(&voice_selector);
return(EE_OK);
}
@@ -1499,12 +1524,12 @@ espeak_ERROR SetVoiceByName(const char *name)

espeak_ERROR SetVoiceByProperties(espeak_VOICE *voice_selector)
{//============================================================
int variant;
char *voice_id;

voice_selected = SelectVoice(voice_selector,&variant);
voice_id = SelectVoice(voice_selector);

LoadVoiceVariant(voice_selected->identifier,variant);
WavegenSetVoice(voice);
LoadVoiceVariant(voice_id,0);
DoVoiceChange(voice);
SetVoiceStack(voice_selector);

return(EE_OK);
@@ -1526,15 +1551,9 @@ ESPEAK_API const espeak_VOICE **espeak_ListVoices(espeak_VOICE *voice_spec)
int j;
espeak_VOICE *v;
static espeak_VOICE *voices[N_VOICES_LIST];
char selected_voice_id[80];
char path_voices[sizeof(path_home)+12];

// free previous voice list data
if((voice_selected != NULL) && (voice_selected->identifier != NULL))
strncpy0(selected_voice_id,voice_selected->identifier,sizeof(selected_voice_id));
else
selected_voice_id[0] = 0;
voice_selected = NULL;

for(ix=0; ix<n_voices_list; ix++)
{
@@ -1553,18 +1572,6 @@ ESPEAK_API const espeak_VOICE **espeak_ListVoices(espeak_VOICE *voice_spec)
qsort(voices_list,n_voices_list,sizeof(espeak_VOICE *),
(int (__cdecl *)(const void *,const void *))VoiceNameSorter);

// restore pointer to current voice
if(selected_voice_id[0] != 0)
{
for(ix=0; ix<n_voices_list; ix++)
{
if(strcmp(selected_voice_id, voices_list[ix]->identifier)==0)
{
voice_selected = voices_list[ix];
break;
}
}
}

if(voice_spec)
{
@@ -1593,7 +1600,7 @@ ESPEAK_API const espeak_VOICE **espeak_ListVoices(espeak_VOICE *voice_spec)

ESPEAK_API espeak_VOICE *espeak_GetCurrentVoice(void)
{//==================================================
return(voice_selected);
return(&voice_selected);
}

#pragma GCC visibility pop

Loading…
Cancel
Save