Browse Source

[1.26.06] Fixed check for dot in abbreviations, for multibyte characters.

Defined a Revision number macro in speak_lib.h for interface changes.
Changes to formant rate smoothing so that it's proportional to frequency.
Add phoneme translations for mbrola "it3" "it4" Italian voices.
Added rule in *_rules files for "word starts with capital letter".


git-svn-id: https://espeak.svn.sourceforge.net/svnroot/espeak/trunk@49 d46cf337-b52f-0410-862d-fd96e6ae7743
master
jonsd 18 years ago
parent
commit
6a325e7781

+ 8
- 7
dictsource/af_list View File

gustav gustaf gustav gustaf
jacobus jako@bWs jacobus jako@bWs
jacques ZA:k jacques ZA:k
jane _^_EN
jean ZA~n jean ZA~n
jesus ji:sWs jesus ji:sWs
joey dZ@Ui joey dZ@Ui
maria mar'ia maria mar'ia
martin m'A:rt@n martin m'A:rt@n
michiel $2 michiel $2
mostert m'Ost@rt
natasha n%at'aSa natasha n%at'aSa
paul p@Ul paul p@Ul
paulus p@UlWs paulus p@UlWs
sodat $pause sodat $pause
voordat $pause voordat $pause
nadat $pause nadat $pause
totdat $pause
totdat tOdat $pause
as ,as $pause as ,as $pause
soos $pause soos $pause
solank $pause
solank s%o@laNk $pause
sodra $pause sodra $pause
sowel so@v'&l sowel so@v'&l
sedert $pause sedert $pause
alhoewel alhuv'&l $pause alhoewel alhuv'&l $pause
tensy $pause
tensy $2 $pause
aangesien $pause aangesien $pause
wie $pause wie $pause
wanneer $pause wanneer $pause
aanbid $2 aanbid $2
aanstaande $2 aanstaande $2
agenda ax2'Enda agenda ax2'Enda
aikôna %aik'O:na
algehele alx2@h,e@l@ algehele alx2@h,e@l@
alles al@s alles al@s
alternatiewe $4 alternatiewe $4
derde d&:rd@ derde d&:rd@
dekade dEk'A:d@ dekade dEk'A:d@
deurgaans $1 deurgaans $1
diegene dix2,e@n@
dikwels dIkv@ls dikwels dIkv@ls
diplomasie d@plo@mas'i diplomasie d@plo@mas'i
dusver dWsf&r dusver dWsf&r


eenkeer $1
effense Ef@ns@ effense Ef@ns@
ekself %&ks'&lf ekself %&ks'&lf
ekstra $1 ekstra $1
kafee kaf'e@ kafee kaf'e@
kantoor $2 kantoor $2
kapitaal kapit'A:l kapitaal kapit'A:l
kollega kul'e@x2a
komaan kOmA:n komaan kOmA:n
komberse kOmb'&rs@ komberse kOmb'&rs@
kombers kOmb'&rs kombers kOmb'&rs
oranje $2 oranje $2


patriotisme patri|ut'Ism@ patriotisme patri|ut'Ism@
parlement parl@m'Ent
penorent pEno@rEnt penorent pEno@rEnt
per pIr per pIr
persent p@rsEnt persent p@rsEnt
verdere f&rd@r@ verdere f&rd@r@
vere fe@r@ vere fe@r@
vererger f@r&rg@r vererger f@r&rg@r
ver f&r
ver f'&:r
verg f&rx2 verg f&rx2
vergete f@rx2e@t@ vergete f@rx2e@t@
vergewe f@rx2e@v@ vergewe f@rx2e@v@

+ 34
- 7
dictsource/af_rules View File

agter (dogt %ax2t@r // move default stress: agterdogtig and derivitives agter (dogt %ax2t@r // move default stress: agterdogtig and derivitives
&) agtig 'ax2t@x2 // this string almost always carries stress on a &) agtig 'ax2t@x2 // this string almost always carries stress on a
a (riA 'A: // akwarium/barium/estuarium/herbarium/seminaria a (riA 'A: // akwarium/barium/estuarium/herbarium/seminaria
@C) as (_ as // shorten final a of words ending in -as: rigtingvas/jonkmanskas, etc.
C) asie 'A:si C) asie 'A:si


a (CAA %a a (CAA %a
de (moCr d%E // demokraat/demokrasie/-ë/demokraties/demografie de (moCr d%E // demokraat/demokrasie/-ë/demokraties/demografie
dekade (n dEkad'E dekade (n dEkad'E
dekade (s dEk'A:d@ dekade (s dEk'A:d@
dekant (_ d@kant //try fix suidekant
_) deli (ka d%El%i // delikaat/delikate _) deli (ka d%El%i // delikaat/delikate
@) dend (er d@nd // beduidender/behoudender @) dend (er d@nd // beduidender/behoudender
_mens) e @ //mense at start of compounds _mens) e @ //mense at start of compounds
_mens) e (k @ //force correct behaviour before k _mens) e (k @ //force correct behaviour before k
@kom) e (ns_ @ //fix words ending in komens @kom) e (ns_ @ //fix words ending in komens
suid) e @ //suidekant, suidewind etc.
@C) e (wa_ @ // goederewa/kolewa/ossewa/troepewa @C) e (wa_ @ // goederewa/kolewa/ossewa/troepewa
Ab) e (wa @ //bewaking/bewaring in compounds polisiebewaking Ab) e (wa @ //bewaking/bewaring in compounds polisiebewaking
@C) e (waen @ // plurals and diminutives of some of the above @C) e (waen @ // plurals and diminutives of some of the above


eval (u %iv%al // evaluasie/evalueer/evaluering eval (u %iv%al // evaluasie/evalueer/evaluering


werk) e (rs @ //fix werkers in compounds werkershuis etc.
v) e (nno @ //vennoot and friends




.group f .group f
ga (lAC x2%a // galant/galery/galon/galop ga (lAC x2%a // galant/galery/galon/galop
//re-enable following rule to get [g@] at end of words //re-enable following rule to get [g@] at end of words
C) ge (_ g@ C) ge (_ g@
gene (_ x2e@n@ // gene/diegene
genre Z'A~nr@ //genre and compounds genre Z'A~nr@ //genre and compounds
gese (_ x2'e@s@ //Portugese, and others gese (_ x2'e@s@ //Portugese, and others


_) inge (@P4 'Inx2@ // prefix inge always has stress on 1st slb _) inge (@P4 'Inx2@ // prefix inge always has stress on 1st slb
inge (wing 'Inx2e@ // see rule: _) inge (@P4 @nx2@ inge (wing 'Inx2e@ // see rule: _) inge (@P4 @nx2@
@C) inge (_ @N@ @C) inge (_ @N@
ings INs // begrotingsrede/ontvangslokaal/geringste
ing (s IN // begrotingsrede/ontvangslokaal/geringste
_) ing (@ 'Inx2 // ingaan/ingang/ingiet/ingly/ingroei/ingreep... _) ing (@ 'Inx2 // ingaan/ingang/ingiet/ingly/ingroei/ingreep...
&) ige (_ Ix2@ &) ige (_ Ix2@
@C) iger (CA @x2@r // twintiger-/dertiger-/veertigerjare, etc. @C) iger (CA @x2@r // twintiger-/dertiger-/veertigerjare, etc.
klere kl'e@r@ klere kl'e@r@
kklere =kl'e@r@ kklere =kl'e@r@
knip (A knIp? // knipogie/geknipoog/ knip (A knIp? // knipogie/geknipoog/
kollega kul'e@x2a //kollega and compounds
ko (kon k%u // fix 1st o sound and move default stress: kokon and compounds ko (kon k%u // fix 1st o sound and move default stress: kokon and compounds
kommando k%umandu // move stress, fix o sounds: kommando and compounds kommando k%umandu // move stress, fix o sounds: kommando and compounds
ko (pie@ k%u // kopiereg/kopie ko (pie@ k%u // kopiereg/kopie
lewe (C le@v@ // belewenis/lewendig/agtergeblewenes lewe (C le@v@ // belewenis/lewendig/agtergeblewenes
libe (ra l@b@ // liberaal/liberale/liberalis/-me libe (ra l@b@ // liberaal/liberale/liberalis/-me
ligen l@x2'En ligen l@x2'En
_) li (g lI // fix stress: liggaam/liggies/ligte
liggaamlik l@x2A:ml@k // stress liggaamlik/-e/-heid liggaamlik l@x2A:ml@k // stress liggaamlik/-e/-heid
&) lik (_S3 l@k &) lik (_S3 l@k
&) like (_S4 l@k@ &) like (_S4 l@k@
&) likes (_S5 l@k@s &) likes (_S5 l@k@s
&) liker (_S5 l@k@r &) liker (_S5 l@k@r
&) likste (_S6 l@kst@ &) likste (_S6 l@kst@
liter (A l@t@r //literatuur and others, but literbottel

linker lINk@r // blinkertjies/many compounds with linker and klinker linker lINk@r // blinkertjies/many compounds with linker and klinker
@) ll (_N _^_EN // Words ending in -ll are English @) ll (_N _^_EN // Words ending in -ll are English
_) losge (@P5 l'Osx2@ _) losge (@P5 l'Osx2@
_) melodi (eu ,mEludi //melodieus _) melodi (eu ,mEludi //melodieus
_) melodie mElud'i _) melodie mElud'i
_) melo (dr m'Elu //melodrama etc. _) melo (dr m'Elu //melodrama etc.
_) metel me@t@l // vermetel/-e/-es/-heid...
mme (C m@ mme (C m@
mme (tjie mi // lemmetjie/stemmetjie and similar mme (tjie mi // lemmetjie/stemmetjie and similar
ment m'Ent ment m'Ent
_) na (C_ n'a //three-letter words starting with na _) na (C_ n'a //three-letter words starting with na
na ( n%a_ // naef/naewe/nawiteit na ( n%a_ // naef/naewe/nawiteit
nami (bi n%amI // Namibië/Namibiese nami (bi n%amI // Namibië/Namibiese
na (tal ,na' //natal and compunds
na (tal ,na' //natal and compounds
_) n (AA n // for words starting with naa, etc. _) n (AA n // for words starting with naa, etc.
namakwa n%amakw%a //namakwa and compounds
nasio naSiu nasio naSiu
_) nag (C n'ax2 _) nag (C n'ax2
_) nag (raad n'A:x2 //nagraads and compounds _) nag (raad n'A:x2 //nagraads and compounds
_) nage (@P4 n'A:x2@ _) nage (@P4 n'A:x2@


nasionale naSEun'A:l@ nasionale naSEun'A:l@
n (_n //cause one n sound kan nie doen nie etc.
&) nele (_ n'e@l@ &) nele (_ n'e@l@
s) nes (K nEs // onheilsnes/rowersnes s) nes (K nEs // onheilsnes/rowersnes
nese (_ n'e@s@ //japannese soedannese stres and e sound nese (_ n'e@s@ //japannese soedannese stres and e sound
ondjie OINci ondjie OINci
ontjie OINci ontjie OINci
ontering %Onte@r@N //ontering in compounds montering etc. ontering %Onte@r@N //ontering in compounds montering etc.
onvoor (s %Onf%o@r //stress: onvoorsiens, onvoorstelbaar etc.
onvoor (w %Onf%o@r //stress: onvoorwaardelik etc.
offi (sier %Of@ // move default stress: offisier and compounds offi (sier %Of@ // move default stress: offisier and compounds
ograaf ux2r'A:f // biograaf/demograaf/fotograaf ograaf ux2r'A:f // biograaf/demograaf/fotograaf
ografie ux2raf'i // biografie/demografie/fotografie ografie ux2raf'i // biografie/demografie/fotografie
_) onderge (@P7 'On@rx2@ _) onderge (@P7 'On@rx2@
ontevrede Ont@fr'e@d@ ontevrede Ont@fr'e@d@



oombliklik o@mbl'Ikl@k // stress: oombliklik/e oombliklik o@mbl'Ikl@k // stress: oombliklik/e
oorbluf o@rbl'Wf // stress: oorbluf/te oorbluf o@rbl'Wf // stress: oorbluf/te
oor (blyw %o@r // move default stress: oorblywend/-e oor (blyw %o@r // move default stress: oorblywend/-e
pa (niek p%a // paniek/paniekerig pa (niek p%a // paniek/paniekerig
pantser pants@r // fix e sound in compounds starting with pantser pantser pants@r // fix e sound in compounds starting with pantser
pa (pier p%a // papier and compounds pa (pier p%a // papier and compounds
parle (ment p%arl@ // move default stress and fix e sound: parlement and compounds, eg.
pa (tat p@ // patat/warmpatat/wurgpatat pa (tat p@ // patat/warmpatat/wurgpatat
patie (_ p%at'i //words ending in patie has stress at end + a sound
para (C ,para //paralel, paragraaf etc. para (C ,para //paralel, paragraaf etc.
parade (K p@rA:d@ // parade and compounds parade (K p@rA:d@ // parade and compounds
par (C@ p%ar // (ge)parkeer/parkeerplek/party(keer/maal...)/parfuum/parmantig par (C@ p%ar // (ge)parkeer/parkeerplek/party(keer/maal...)/parfuum/parmantig
pro (blA pr%u // probleem/probleme pro (blA pr%u // probleem/probleme
profesie prOf@s'i // fix vowel sounds and move stress profesie prOf@s'i // fix vowel sounds and move stress
pro (CA pr%u // probeer/produk/proses/professie/provinsie pro (CA pr%u // probeer/produk/proses/professie/provinsie
prokie pro@k%i //sprokie and compounds
prosa pr'o@sa //prosa and compounds prosa pr'o@sa //prosa and compounds
proses (_ prus'Es //proses at end of word proses (_ prus'Es //proses at end of word


projek pruj'Ek projek pruj'Ek

proku (rA pr%Ok%y // prokureur and compounds/prokurasie proku (rA pr%Ok%y // prokureur and compounds/prokurasie
prominen prOmin'En // prominent/e/prominensie prominen prOmin'En // prominent/e/prominensie
propag ,prOpax2 propag ,prOpax2
reke (nA re@k@ // rekenaar/sakrekenaar/rekenaarprogram/hoofrekene reke (nA re@k@ // rekenaar/sakrekenaar/rekenaarprogram/hoofrekene
rekord r'EkOrt rekord r'EkOrt
o) rene r@n@ // eersgeborene/uitverkorenes o) rene r@n@ // eersgeborene/uitverkorenes
rivier r@f'ir
rivier r@f'i:r
re (geer r@ // regeer/geregeer; stress to end re (geer r@ // regeer/geregeer; stress to end
reger (A r@x2e@r // regering/regerende reger (A r@x2e@r // regering/regerende
resensie r@s'E:nsi resensie r@s'E:nsi
resensent r@s@ns'Ent resensent r@s@ns'Ent
respek r@spEk respek r@spEk
respek (teer r@sp%Ek // stress to end respek (teer r@sp%Ek // stress to end
_) ri (g rI // stress on 1st slb.: rigting/-loos/-vas, etc.
rond (r rOnt // grondreuk/grondrel/rondreis/-rol/-ry rond (r rOnt // grondreuk/grondrel/rondreis/-rol/-ry
rugby r'Wgbi rugby r'Wgbi
&) rele (_ r'e@l@ &) rele (_ r'e@l@
_) ta (mb t%a // tamboer and compounds/tambotie and compounds _) ta (mb t%a // tamboer and compounds/tambotie and compounds
_) tant (e tA~nt // nasalise _) tant (e tA~nt // nasalise
taverne t%af&rn@ // fix stress and 1st e sound: taverne and compounds taverne t%af&rn@ // fix stress and 1st e sound: taverne and compounds
te (_ t@ //fix ligte, berigte and others
te (aa t@ // beroerteaanval/geboorteaanwas/lenteaand... te (aa t@ // beroerteaanval/geboorteaanwas/lenteaand...
_) tekere t@ke@r@ // move default stress and correct e sounds _) tekere t@ke@r@ // move default stress and correct e sounds
tele (C t%&l@ // telefoneer/telekommunikasie, etc. tele (C t%&l@ // telefoneer/telekommunikasie, etc.
u (CA y u (CA y
uu y uu y
ui Yy ui Yy
uiwe Yyv@ //druiwesap and many others
uie (C Yy@ // graansuierdiens/kruiersloon/kuiergas/luierbroekie/sluierdoek/suierklep/getuienis uie (C Yy@ // graansuierdiens/kruiersloon/kuiergas/luierbroekie/sluierdoek/suierklep/getuienis
uy Yy uy Yy


_) veronge (@P7 f@r'O:Nx2@ _) veronge (@P7 f@r'O:Nx2@
verbete f@rb'e@t@ // verbete/verbetenheid verbete f@rb'e@t@ // verbete/verbetenheid
verte (l f@rt& // oorvertelling/rondvertel and similar 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 ver (velA f@r // vervelig/verveling (see: _) ver (@P3 f@r
vi (cto@ v%i // fix v and i sounds: victoriaans/-e vi (cto@ v%i // fix v and i sounds: victoriaans/-e
video v'idi;u //video and compounds video v'idi;u //video and compounds
volk (ing fOlk // bevolking: exception to: vo (lC f%O volk (ing fOlk // bevolking: exception to: vo (lC f%O
volk (s fOlk // volksliedere/volksbeweging/volksleier and similar volk (s fOlk // volksliedere/volksbeweging/volksleier and similar
vo (lle_ fO // exception to: vo (lC f%O vo (lle_ fO // 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 vo (ller fO // exception to: vo (lC f%O
vol (hou_ fOl // exception to: vo (lC f%O vol (hou_ fOl // exception to: vo (lC f%O
vol (maan fOl // exception to: vo (lC f%O vol (maan fOl // exception to: vo (lC f%O




.group .group
êre (_ '&&:r@ // hulle always take stress


ə @ // char.replacement for 'n ə @ // char.replacement for 'n
_C) è (_ E // dè/nè _C) è (_ E // dè/nè


ê e: ê e:
ê (r &: ê (r &:
®e 3:
îe 3:
ge) ë (rf & // oorgeëf/-de ge) ë (rf & // oorgeëf/-de
ïgnoreer ix2nur'e@r // geïgnoreer ïgnoreer ix2nur'e@r // geïgnoreer
ï (n @ // geïnteresseerd ï (n @ // geïnteresseerd
$ dOl@r $ dOl@r
% p@rs'Ent % p@rs'Ent
& _|amp&rsant & _|amp&rsant
£ p@Unt
€ Y@ru
£ p@Unt
Y@ru
/ stre@p / stre@p
@ beI_: @ beI_:
\\ trystre@p \\ trystre@p

+ 20
- 3
dictsource/de_list View File

antik ant'i:k antik ant'i:k
archaik a*k'A:Ik archaik a*k'A:Ik
arie $alt arie $alt
arpeggier a*pEdZ'i:*
arrangier a*aNZ'i:@
arterie $alt arterie $alt
asphalt $2 asphalt $2
außerdem aUs3de:m außerdem aUs3de:m


balkan $1 balkan $1
balkon $2 balkon $2
bandagier bandaZ'i:@
beben be:b@n beben be:b@n
beere be:*@ beere be:*@
bestie bEstI@ bestie bEstI@
deshalb $2 deshalb $2
dezember $2 dezember $2
diadem di:ad'e:m diadem di:ad'e:m
duett du:'Et

direkt $2 direkt $2
dividend di:vi:d'Ent
dragier d@-*aZ'i:*
dritte d@-*It@ dritte d@-*It@
duett du:'Et


extravagant $1
ebendaher e:b@ndah'e:r
ebendahin e:b@ndah'In
einander aIn'and3 einander aIn'and3
einerlei aIn@*laI einerlei aIn@*laI
einig aInIC $only einig aInIC $only
einige aInIg@ $u+ einige aInIg@ $u+
einiges aInIg@s $u+ einiges aInIg@s $u+
enagier EngaZ'i:*
endivie $alt endivie $alt
endlich EntlIC endlich EntlIC
episkopal e:pIsko:p'A:l episkopal e:pIsko:p'A:l
erst e:*st erst e:*st
ersten e:*st@n ersten e:*st@n
erstmal e:*stma:l erstmal e:*stma:l
extravagant $1
extrem Ekstr'e:m extrem Ekstr'e:m


feuerrot $3 feuerrot $3


handy handI handy handI
heimat haImat heimat haImat
herberg hE*bE*g
historie $alt historie $alt
hm h@m hm h@m
hostie $alt hostie $alt


illegitim Ile:gi:t'i:m
illiberal Ili:b@*'A:l
illoyal IlOajA:l
immobilie $alt immobilie $alt
indem Ind'e:m indem Ind'e:m
inden Ind'e:n inden Ind'e:n
indes Ind'Es indes Ind'Es
indessen Ind'Es@n indessen Ind'Es@n
injurie $alt injurie $alt
inka INkA:
inkaisch INkA:IS
inkonstant $1
insbesondere $3 insbesondere $3
interess Int@*'Es interess Int@*'Es


lappalie $alt lappalie $alt
lilie $alt lilie $alt
linie $alt linie $alt
logier lo:Z'i:*
luetisch lu:'e:tIS luetisch lu:'e:tIS


machen max@n machen max@n
marginalie $alt marginalie $alt
materie $alt materie $alt
menagier me:naZ'i:*
menuette mEnu:'Et menuette mEnu:'Et
minut $2 minut $2
mikrofiche maIk@-*o:fIS mikrofiche maIk@-*o:fIS
mumie $alt mumie $alt


nebulos $3 nebulos $3
negligier ne:gli:Z'i:*


oberen o:b@*@n oberen o:b@*@n
oboe o:bo:@ oboe o:bo:@

+ 48
- 9
dictsource/de_rules View File



a (_ A: a (_ A:
a (C_ A: a (C_ A:
@) a (bl_ 'A:
@) a (bel_ 'A:
s) a (g A: s) a (g A:
@l) a (g A: @l) a (g A:
scl) a (g A: scl) a (g A:
sor) a (ch A:
s) a (m_ A: s) a (m_ A:
s) a (mkeit A: s) a (mkeit A:
a (isier a a (isier a
n) al (_ 'A:l n) al (_ 'A:l
&kan) al (_ ,A:l &kan) al (_ ,A:l
&sign) al (_ ,A:l &sign) al (_ ,A:l
r) al (_ 'A:l
@) an (_ 'A:n @) an (_ 'A:n
ein) an (der 'an ein) an (der 'an
@) ant (_ 'ant @) ant (_ 'ant
design _^_EN design _^_EN
dge (_ _^_EN dge (_ _^_EN
_) dia d,i:a _) dia d,i:a
_) diver d%i:vE*
_) dort (C@P4 d'O*t
drive _^_EN drive _^_EN
_) drug _^_EN _) drug _^_EN
_) durch (@P5 d'U*C
_) durch (b d%U*C
_) durch (f d%U*C
_) durch (kr d%U*C
_) durch (la d%U*C
_) durchque d%U*Ckve:
_) durch (schau d%U*C
_) durch (st d%U*C
_) durch (su d%U*C
_) durch (tre d%U*C
_) durch (w d%U*C
_) durch (wachP5 d'U*C
_) durchweg dUrCve:k




.group e .group e
@@) erisch @*IS @@) erisch @*IS
&) erung (_ =@*UN &) erung (_ =@*UN


_) e (ff %E
_) eil (aP3 'aIl _) eil (aP3 'aIl
_) eil (fP3 'aIl _) eil (fP3 'aIl
_) ein (@P3 _!'aIn _) ein (@P3 _!'aIn
ein (and _|%aIn ein (and _|%aIn
_) eine (r@ aIn@ _) eine (r@ aIn@
_) einig aInIg _) einig aInIg
_) e (lek %e:
_) elektro (@P7 e:l'Ekt@-*o:
_) elen e:lEn
mod) e (l@ E mod) e (l@ E
s) e (lig e: s) e (lig e:
_) emp (@P3 _|%Emp _) emp (@P3 _|%Emp
_) ent (@P3 _|%Ent _) ent (@P3 _|%Ent
_) enten Ent@n _) enten Ent@n
_) ent (er Ent _) ent (er Ent
&) e (nz_ 'E
_) epi (@ ,e:pi: _) epi (@ ,e:pi:
_) epi (sk e:pI _) epi (sk e:pI
_) er (@P2 _|%E* _) er (@P2 _|%E*
_) er (gie E* _) er (gie E*
&) er (ig_ @*
&) er (igst @*
_) er (beK E* _) er (beK E*
_) er (HC E* // lC, mC, nC, rC _) er (HC E* // lC, mC, nC, rC
_) ergeb (nis E*g'e:b _) ergeb (nis E*g'e:b
_) entert _^_EN _) entert _^_EN
er (dig e:* er (dig e:*
_) erob (er %E*o:b _) erob (er %E*o:b
@) ett (_ 'Et
@) eur (_ 'Y:* @) eur (_ 'Y:*
euse (_ 'Y:z@ euse (_ 'Y:z@
eusen (_ 'Y:z@n eusen (_ 'Y:z@n
gehen ge:@n gehen ge:@n
_) geh (eX ge: _) geh (eX ge:
general ge:nE*'al general ge:nE*'al
general (is ge:n@*al
_) g (ener g _) g (ener g
_) g (eo+ g _) g (eo+ g
_) ge (orP2 g@ _) ge (orP2 g@
_) herunter (P8 hE*'Unt3 _) herunter (P8 hE*'Unt3
_) hervor (P6 hE*f'Or _) hervor (P6 hE*f'Or
_) hier (@ h%i:* _) hier (@ h%i:*
_) hilf (@P4 h'Ilf
_) hilfs (@P5 h'Ilfs
_) hilfe (@P5 h'Ilf@


_) hinab (P5 hIn'ab _) hinab (P5 hIn'ab
_) hinan (P5 hIn'an _) hinan (P5 hIn'an
_) hinter (@ h,Int3 _) hinter (@ h,Int3
_) hoch (@P4 h'o:x _) hoch (@P4 h'o:x
hoch ho:x hoch ho:x
homogen h,o:mo:ge:n
_) hyper _^_EN _) hyper _^_EN




@) i (ng I @) i (ng I
&CC) i (_ =i: &CC) i (_ =i:


@) i (bl_ 'i:
@) i (bel_ 'i:
ib (t_ i:p ib (t_ i:p


@) i (at_ I @) i (at_ I
polit) ik 'i:k polit) ik 'i:k
@) ik (el_ 'i:k @) ik (el_ 'i:k


_) illeg ,Ile:g
_) i (llu %I
_) i (mag I
r) i (na_ 'i: r) i (na_ 'i:
@) ing (_N _^_EN @) ing (_N _^_EN
_) in (k %In
_) inter Int@* _) inter Int@*
@) ion (_ j'o:n @) ion (_ j'o:n
@) io (n Io: @) io (n Io:
@) ite (_ 'i:t@ @) ite (_ 'i:t@
@) ität (_S4 i:t'E:t @) ität (_S4 i:t'E:t


&) ium (_ =i:Um
@s) i (v_ 'i: @s) i (v_ 'i:
@t) i (v_ 'i: @t) i (v_ 'i:




&) ie (ll_ i:,E &) ie (ll_ i:,E
&) ie (r_ 'i: &) ie (r_ 'i:
u) ie (r_ _|'i:
&) ie (rlich 'i: &) ie (rlich 'i:
r) ien (@ IEn r) ien (@ IEn
&) ien (_ =I@n &) ien (_ =I@n
s) ien (_ 'i:@n s) ien (_ 'i:@n
t) ien (_ 'i:@n t) ien (_ 'i:@n
&) iens (_ =I;@ns &) iens (_ =I;@ns
&) ient (_ =I;@nt
&) ient (_ I'Ent
&) ienz (_ I'Ents
sch) ie (n i: sch) ie (n i:
// @) ieren 'i:*@n
@) ie (reX 'i: @) ie (reX 'i:
// @) iere (_ 'i:*@
// @) ierer (_ 'i:*3
// @) ieret (_ 'i:*@t
// @) ierest (_ 'i:*@st
// @) ierst (_ 'i:*st
// @) iert (_ 'i:*t
ierungs 'i:*UNs ierungs 'i:*UNs
ierung 'i:*UN ierung 'i:*UN
bakter) ie =I@ bakter) ie =I@
mitt (eC mIt mitt (eC mIt
mitt (l mIt mitt (l mIt
_) mo (rb m%O _) mo (rb m%O
_) motor mo:to:*
_) motor m%o:to:*
_) ms _^_EN _) ms _^_EN
musik m%u:zi:k musik m%u:zi:k


r) oo (m u: r) oo (m u:
z) oo (m u: z) oo (m u:
&t) or (_ =o:* &t) or (_ =o:*
&) oren (_ 'o:*@n
st) o (ss o:






_) r @-* _) r @-*
_) rh @-* _) rh @-*


rangier @-*A:NZ'i:*

.group s .group s
_) s (_ Es _) s (_ Es
s s s s
_) u (rl u: _) u (rl u:
_) u (rv u: _) u (rv u:
us (_ Us us (_ Us
_d) u (sch u:
_) user _^_EN _) user _^_EN
ol) u (t_ u: ol) u (t_ u:



+ 10
- 9
dictsource/dict_phonemes View File



Dictionary af_dict Dictionary af_dict


& 3: @ @- @L @U a A:
aI AI aU A~ E e: e@ eI
e~ I i iu O O: o@ OI
oI o~ u uI W y Y@ Yy
& &: 3: @ @- @L @U a
A: aI AI aU A~ E e: e@
eI e~ I i iu O O: o@
OI oI o~ u uI W y Y@
Yy


- : ; b c d dZ f - : ; b c d dZ f
g h j k l m n N g h j k l m n N
OI U u: W y y: Y: OI U u: W y y: Y:


* : ; b C C2 d D * : ; b C C2 d D
f g h j k l m n
N p pF r s S t tS
ts v x z Z
dZ f g h j k l m
n N p pF r s S t
tS ts v x z Z




Dictionary el_dict Dictionary el_dict


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




Dictionary it_dict Dictionary it_dict

+ 3
- 0
dictsource/en_list View File

hazardous haz3d@s hazardous haz3d@s
hedgehog hEdZh0g hedgehog hEdZh0g
hehe hi:h'i: hehe hi:h'i:
heifer hEf@
helium hi:li@m helium hi:li@m
helix hi:lIks helix hi:lIks
hello h@loU hello h@loU
scenic si:nIk scenic si:nIk
scald sk0ld scald sk0ld
sclera skli@r@ sclera skli@r@
scythe saID
seabed si:bEd seabed si:bEd
sealion si:laI@n sealion si:laI@n
seance seI0ns seance seI0ns
Penelope p@nEl@pI2 Penelope p@nEl@pI2
Phoebe fi:bi: Phoebe fi:bi:
Rachel reItS@L Rachel reItS@L
Reilly raIlI2
Rica ri:ka2 Rica ri:ka2
Robert r0b3t Robert r0b3t
Roderick r0drIk Roderick r0drIk

+ 4
- 3
dictsource/en_rules View File

_C) y aI _C) y aI
_C) y (ph aI _C) y (ph aI
_C) y (st I _C) y (st I
_CC) y aI
XC) y aI
_CCC) y aI _CCC) y aI
CC) y (n_ I CC) y (n_ I
Cr) y I2
// Cr) y I2
_sC) y aI
c) y (cl aI c) y (cl aI
c) y (clic_ aI c) y (clic_ aI
bic) y (cl I bic) y (cl I
h) y (Cr aI h) y (Cr aI
c) y (lin I c) y (lin I
th) y (l_ aI th) y (l_ aI
fl) y aI
gl) y (ph I gl) y (ph I
k) y (l_ aI k) y (l_ aI
n) y (l_ aI n) y (l_ aI
@C) y (mAn_ I @C) y (mAn_ I
d) y (nas I d) y (nas I
w) y (n I w) y (n I
cr) y (CC I
gl) y (ce I gl) y (ce I
d) yse (n Is@ d) yse (n Is@
f) y (_ aI f) y (_ aI

+ 28
- 9
dictsource/hu_list View File

_1X tizEn _1X tizEn
_20 hu:s _20 hu:s
_2X huson _2X huson
_3X hArmints
_3X hARmints
_4X nEJvEn _4X nEJvEn
_5X YtvEn _5X YtvEn
_6X hAtvAn _6X hAtvAn
mta $abbrev mta $abbrev
pl pe:lda:ul $dot pl pe:lda:ul $dot
stb SAtYb:i $dot stb SAtYb:i $dot
ú.n u:JnEvEzEt:
u.n u:JnEvEzEt: $dot
ú.n u:JnEvEzEt: $dot
vö v'EZd||_'Yss2E vö v'EZd||_'Yss2E


ii kEttY: $abbrev ii kEttY: $abbrev
szer $u szer $u
ször $u ször $u


ellen $u // against
elé $u // before
óta $u // since

sok $u // many
kevés $u // few
se $u $pause // neither
sem $u $pause // nor
miatt $u $pause // because

ban $u
ben $u
hoz $u
hez $u
höz $u
ig $u
nál $u
nél $u
tól $u
től $u



// word pairs // word pairs


(hogy az) hoJ,Az
(hogy az) h,oJ,Az
(hogy aki) h,oJ,Aki




// Verbs // Verbs




// Names // Names
Engels ENgEls
Kéthly ke:thli
ricárd RiCARd
richard RiCARd
Szamuelly sAmuElli
Szamuely sAmuElli
ricárd RiCa:Rd
richard RiCa:Rd

+ 33
- 10
dictsource/hu_rules View File

b b b b
bb b: bb b:


biz (A b'iz, // TEST
biz (A b'iz, // bizalmas etc.


.group c .group c
c ts c ts
cc ts: cc ts:
cs tS cs tS
ccs tS: ccs tS:
cz ts
!) cz ts // in names which start with a capital letter


anar) ch (i C anar) ch (i C
hierar) ch (i C hierar) ch (i C
pszy) ch C pszy) ch C
mün) ch (en C mün) ch (en C
maso) ch (istA C maso) ch (istA C
szé) ch tS


kilen) c (sz ts kilen) c (sz ts
kvar) c (sz ts kvar) c (sz ts
_szé) ché (ny tSe: _szé) ché (ny tSe:
_sto) ck (holm k _sto) ck (holm k


_) church tSYRtS



.group d .group d
d d d d
lly jj lly jj
lj jj lj jj


C) ly (_ li
_kéth) ly li
szamue) lly lli
szamue) ly lli

mi) ll (i l mi) ll (i l




.group o .group o
o o o o


_r) oose (velt u:z


.group ó .group ó
ó o: ó o:


qu kv qu kv


.group r .group r
r R2
A) r (A R2
C) r (A R2
r (C R2
rr R2*
r R
A) r (A R
C) r (A R
r (C R
rr RR


.group s .group s
s S s S


sz (öld Sz sz (öld Sz
va) s (zabl S|| va) s (zabl S||
_) semmelweiss sEmmElvEjs
engel) s s

_) saar sAAR




.group t .group t
C) tyj c C) tyj c
A) tyj (A c: A) tyj (A c:


_ka) ty (n ti



.group u .group u
u u u u




.group .group
$ dolla:r

. pont
$ dolla:R
ä e
æ e
ß s
ç tS
ñ n^
ø Y

. pont
. (. _: . (. _:
\.) . \.) .



+ 4
- 0
dictsource/it_rules View File

_) n(_ Enne _) n(_ Enne
n n n n
n (g N n (g N
n (ge n
n (gé n
n (gè n
n (gi n
n (k N n (k N
.group o .group o

+ 11
- 5
dictsource/la_rules View File

// used. I and V were used for both the vowels /i/ and /u/, and the semivowels /j/ and // used. I and V were used for both the vowels /i/ and /u/, and the semivowels /j/ and
// /w/. Here the distinction between U and the V for /u/ and /w/ is assumed, as is the // /w/. Here the distinction between U and the V for /u/ and /w/ is assumed, as is the
// case in most modern texts. Also long vowels are indicated with macrons. Diaresis is // case in most modern texts. Also long vowels are indicated with macrons. Diaresis is
// used to prevent a diphtong being formed
// used to prevent a diphtong being formed. Y with macron has to be replaced by 'yy',
// since this character is incompatible with older unicode versions.
.L01 ae au eu oe a e i o u y ā ē ī ō ū ë ü é
.L01 ae au eu oe a e i o u yy y ā ē ī ō ū ë ü é
.L02 ng qu pr tr cr chr br dr gr pl cl bl gl ph th ch .L02 ng qu pr tr cr chr br dr gr pl cl bl gl ph th ch
.group a .group a
.group c .group c
c k c k
cc k: cc k:
cch k:<h> // e.g. bracchium
ch k<h> ch k<h>
g g g g
gg g: gg g:
g (n N g (n N
ggu (A g:w // Does this ever occur?
gu (A gw //g<w> gu (A gw //g<w>
.group p .group p
p p p p
pp p: pp p:
pph p:<h>
ph p<h> ph p<h>
.group t .group t
t t t t
tt t: tt t:
tth t:<h> //Does this occur? It does at least across word boundaries e.g. leget Thyni
th t<h> th t<h>
u (x+ U u (x+ U
// Cases in which 'u' is pronounced as the semi-vowel /w/ // Cases in which 'u' is pronounced as the semi-vowel /w/
A) u (A++ w A) u (A++ w
_) u (++ w
_) u (A+ w
.group ū .group ū
.group y .group y
y y
yy y:
y y // Kirshenbaum I.
yy y: // Should be y with macron, which is not present in older Unicode versions
.group z .group z

+ 7
- 7
phsource/compile_report View File

en_sc 39 146 en_sc 39 146
en_rp 34 144 en_rp 34 144
en_wm 30 144 en_wm 30 144
af 37 127
af 38 128
cy 29 122 cy 29 122
de 30 121 de 30 121
eo 13 108 eo 13 108
hr 19 129 hr 19 129
sr 2 129 sr 2 129
ru 36 124 ru 36 124
it 12 114
it 15 116
la 21 114 la 21 114
es 6 114 es 6 114
pt 28 131 pt 28 131
1 l/l_3 de 1 l/l_3 de
2 l/la base 2 l/la base
2 l/le base 2 l/le base
1 l/L_eL_af af
2 l/L_eL_af af
2 l/li base 2 l/li base
4 l/l_long base fr la ro 4 l/l_long base fr la ro
2 l/lo base 2 l/lo base
1 vowel/aa_7 nl 1 vowel/aa_7 nl
4 vowel/a_en en fr 4 vowel/a_en en fr
1 vowel/@_bck hi 1 vowel/@_bck hi
15 vowel/e base2 en en_n af cy eo fr hu hr it la pt ++
16 vowel/e base2 en en_n af cy eo fr hu hr it la pt ++
2 vowel/e# en_sc 2 vowel/e# en_sc
6 vowel/e_2 en_sc de hi sv no 6 vowel/e_2 en_sc de hi sv no
1 vowel/e_3 hu 1 vowel/e_3 hu
8 vowel/ee_1 base2 en en_n pl la sv no zh_yue 8 vowel/ee_1 base2 en en_n pl la sv no zh_yue
3 vowel/ee_2 en cy nl 3 vowel/ee_2 en cy nl
1 vowel/ee#_2 sv 1 vowel/ee#_2 sv
3 vowel/ee_3 af pt vi
4 vowel/ee_3 af pt vi
3 vowel/ee_6 en_n sk sv 3 vowel/ee_6 en_n sk sv
13 vowel/e_mid en_rp en_wm fr_ca hi hu sk cs hr it es pt_pt no ++ 13 vowel/e_mid en_rp en_wm fr_ca hi hu sk cs hr it es pt_pt no ++
10 vowel/e_mid2 af de fi nl sk ro el sw 10 vowel/e_mid2 af de fi nl sk ro el sw
2 vowel/ii_4 en_rp 2 vowel/ii_4 en_rp
6 vowel/ii_en en en_n 6 vowel/ii_en en en_n
5 vowel/@_low hi ro no 5 vowel/@_low hi ro no
11 vowel/o base2 en en_wm de fr hi it la pt_pt sv
12 vowel/o base2 en en_wm de fr hi it la pt_pt sv
4 vowel/o_2 cy hi hu no 4 vowel/o_2 cy hi hu no
2 vowel/o-_2 en_n en_wm 2 vowel/o-_2 en_n en_wm
2 vowel/o_3 en_sc 2 vowel/o_3 en_sc
1 vowel/u_5 sw 1 vowel/u_5 sw
3 vowel/u_6 en_rp pt_pt 3 vowel/u_6 en_rp pt_pt
1 vowel/u_7 vi 1 vowel/u_7 vi
16 vowel/u_bck base2 cy fi fr_ca hi hu nl pl sk hr it pt ++
17 vowel/u_bck base2 cy fi fr_ca hi hu nl pl sk hr it pt ++
2 vowel/uu en en_wm 2 vowel/uu en en_wm
3 vowel/uu_2 base2 de la 3 vowel/uu_2 base2 de la
1 vowel/uu_3 af 1 vowel/uu_3 af

+ 44
- 0
phsource/mbrola/it3 View File

// for voices "it3" "it4"

0 r/ NULL 0 r
0 w/ NULL 0 w
0 l/ NULL 0 l
0 j/ NULL 0 i
0 ; NULL 0 NULL
0 @- NULL 0 NULL
0 * NULL 0 r
0 R NULL 0 r
0 _| NULL 0 _


0 p : 50 p p
0 b : 50 b b
0 t : 50 t t
0 d : 50 d d
0 k : 50 k k
0 g : 50 g g

1 d z 0 dz
0 n^ NULL 0 J
0 l^ NULL 0 L
0 N NULL 0 ng
0 n f 0 nf
0 w2 NULL 0 w


0 aI NULL 60 a1 i
0 aU NULL 60 a1 u
0 oI NULL 60 o1 i

0 i NULL 0 i1
0 e NULL 0 e1
0 e/ NULL 0 e
0 E NULL 0 E1
0 a NULL 0 a1
0 a/ NULL 0 a
0 O NULL 0 O1
0 o NULL 0 o1
0 o/ NULL 0 o
0 u NULL 0 u1
0 U NULL 0 u


+ 18
- 17
phsource/mbrola/la1 View File

0 ; NULL 0 NULL 0 ; NULL 0 NULL
0 @- NULL 0 NULL 0 @- NULL 0 NULL
0 * NULL 0 r 0 * NULL 0 r
1 R * 0 rr
1 R * 0 r:
0 R NULL 0 r 0 R NULL 0 r


1 p <h> 0 p_h 1 p <h> 0 p_h
1 t <h> 0 t_h 1 t <h> 0 t_h
1 k <h> 0 k_h 1 k <h> 0 k_h


0 p : 0 pp
0 b : 0 bb
0 t : 0 tt
0 d : 0 dd
0 k : 0 kk
0 g : 0 gg
0 p : 0 p:
0 b : 0 b:
0 t : 0 t:
0 d : 0 d:
0 k : 0 k:
0 g : 0 g:


9 f f 0 ff
9 s s 0 ss
9 z z 0 zz
9 m m 0 mm
9 n n 0 nn
9 f f 0 f:
9 s s 0 s:
9 z z 0 z:
9 m m 0 m:
9 n n 0 n:


9 j/ j 0 jj
9 j/ j 0 j:
0 j/ NULL 0 j 0 j/ NULL 0 j
0 l/ NULL 0 l 0 l/ NULL 0 l
9 l/2 l 0 ll
9 l/2 l 0 l:
0 l/2 NULL 0 l 0 l/2 NULL 0 l


0 aI NULL 0 ae
0 aU NULL 0 au
0 oI NULL 0 oe
0 aI NULL 0 aE
0 aU NULL 0 aU
0 oI NULL 0 oE
0 EU NULL 60 E U

+ 10
- 2
phsource/ph_af View File

endphoneme endphoneme




phoneme &: // more open [E] longer
vowel starttype (e) endtype (e)
length 280
formants vowel/ee_3
before l/2 DFT-30+l/L_eL_af
endphoneme


phoneme @L // syllabic L phoneme @L // syllabic L
vowel starttype (@) endtype l vowel starttype (@) endtype l
length 160 length 160


phoneme @U phoneme @U
vowel starttype (@) endtype (u) vowel starttype (@) endtype (u)
length 220
length 170
formants vdiph/Vu formants vdiph/Vu
endphoneme endphoneme




phoneme O: phoneme O:
vowel starttype (o) endtype (o) vowel starttype (o) endtype (o)
length 240
length 280
formants vowel/oo_1 formants vowel/oo_1
endphoneme endphoneme



+ 1
- 1
phsource/ph_hungarian View File



phoneme y: phoneme y:
vowel starttype (u) endtype (u) vowel starttype (u) endtype (u)
length 220
length 270
formants vowel/y formants vowel/y
before r/ vwl_de/r_y+70 before r/ vwl_de/r_y+70
endphoneme endphoneme

+ 24
- 3
phsource/ph_italian View File

vowel starttype (e) endtype (e) vowel starttype (e) endtype (e)
length 170 length 170
formants vowel/e formants vowel/e
reduceto e/ 4
endphoneme endphoneme


phoneme e/
vowel starttype (e) endtype (e)
length 170
formants vowel/e
endphoneme




phoneme E phoneme E
vowel starttype (e) endtype (e) vowel starttype (e) endtype (e)
length 170 length 170
formants vowel/e_mid formants vowel/e_mid
reduceto e 4 // [E] only in stressed syllables
// reduceto e/ 3 // [E] only in stressed syllables ?
endphoneme endphoneme




vowel starttype (o) endtype (o) vowel starttype (o) endtype (o)
length 170 length 170
formants vowel/o formants vowel/o
reduceto o/ 4
endphoneme

phoneme o/
vowel starttype (o) endtype (o)
length 170
formants vowel/o
endphoneme endphoneme




vowel starttype (o) endtype (o) vowel starttype (o) endtype (o)
length 170 length 170
formants vowel/oo_4 formants vowel/oo_4
// formants vowel/0
reduceto o 4 // [O] only in stressed syllables
// reduceto o/ 3 // [O] only in stressed syllables ?
endphoneme endphoneme




vowel starttype (u) endtype (u) vowel starttype (u) endtype (u)
length 160 length 160
formants vowel/u_bck formants vowel/u_bck
reduceto U 4
endphoneme

phoneme U
vowel starttype (u) endtype (u)
length 160
formants vowel/u_bck
endphoneme endphoneme





+ 4
- 0
phsource/phonemes View File



phonemetable sw base phonemetable sw base
include ph_swahili include ph_swahili


phonemetable f_en base
include pf_english

BIN
phsource/r/r View File


BIN
phsource/vowel/i_en View File


+ 3
- 0
src/compiledict.cpp View File

case '#': case '#':
c = RULE_DEL_FWD; c = RULE_DEL_FWD;
break; break;
case '!':
c = RULE_CAPITAL;
break;
case 'T': case 'T':
c = RULE_ALT1; c = RULE_ALT1;
break; break;

+ 20
- 7
src/dictionary.cpp View File

if(v_stress > 0) if(v_stress > 0)
*output++ = stress_phonemes[v_stress]; // mark stress of all vowels except 0 (unstressed) *output++ = stress_phonemes[v_stress]; // mark stress of all vowels except 0 (unstressed)


while((ph->reduce_to != 0) && !(dictionary_flags & FLAG_FOUND))
while((ph->reduce_to != 0) && (((dictionary_flags & FLAG_FOUND)==0) || (langopts.param[LOPT_REDUCE] & 1)))
{ {
// this vowel can be reduced to another if the stress is below a specified value // this vowel can be reduced to another if the stress is below a specified value
int reduce = 0; int reduce = 0;
} }


if(max_stress == 1) max_stress = 0; if(max_stress == 1) max_stress = 0;
if(unstressed_word && langopts.param[LOPT_KEEP_UNSTR_VOWEL] && (v_stress >= max_stress))
if(unstressed_word && (langopts.param[LOPT_REDUCE] & 0x2) && (v_stress >= max_stress))
{ {
// don't reduce the most stressed syllable in an unstressed word
reduce = 0; reduce = 0;
} }


failed = 1; failed = 1;
break; break;


case RULE_CAPITAL:
if(word_flags & FLAG_FIRST_UPPER)
match.points += 1;
else
failed = 1;
break;

case '.': case '.':
// dot in pre- section, match on any dot before this point in the word // dot in pre- section, match on any dot before this point in the word
for(p=pre_ptr; *p != ' '; p--) for(p=pre_ptr; *p != ' '; p--)
int found; int found;
char *word2; char *word2;
unsigned char c; unsigned char c;
int nbytes;
int c2;
char word[N_WORD_BYTES]; char word[N_WORD_BYTES];


length = 0; length = 0;
word2 = word1; word2 = word1;
while((word2[1]==' ') && (word2[2]=='.'))

while((word2[nbytes = utf8_in(&c2,word2,0)]==' ') && (word2[nbytes+1]=='.'))
{ {
// look for an abbreviation of the form a.b.c // look for an abbreviation of the form a.b.c
// try removing the spaces between the dots and looking for a match // try removing the spaces between the dots and looking for a match
word[length++] = word2[0];
memcpy(&word[length],word2,nbytes);
length += nbytes;
word[length++] = '.'; word[length++] = '.';
word2 += 4;
word2 += nbytes+3;
} }
if(length > 0) if(length > 0)
{ {
// found an abbreviation containing dots // found an abbreviation containing dots
word[length] = word2[0];
word[length+1] = 0;
nbytes = utf8_in(&c2,word2,0);
memcpy(&word[length],word2,nbytes);
word[length+nbytes] = 0;
found = LookupDict2(word,word2,ph_out,flags,end_flags); found = LookupDict2(word,word2,ph_out,flags,end_flags);
if(found) if(found)
{ {

+ 22
- 3
src/espeakedit.cpp View File

EVT_MENU(MENU_PATH1, MyFrame::OnOptions) EVT_MENU(MENU_PATH1, MyFrame::OnOptions)
EVT_MENU(MENU_PATH2, MyFrame::OnOptions) EVT_MENU(MENU_PATH2, MyFrame::OnOptions)
EVT_MENU(MENU_PATH3, MyFrame::OnOptions) EVT_MENU(MENU_PATH3, MyFrame::OnOptions)
EVT_MENU(MENU_PATH4, MyFrame::OnOptions)
EVT_MENU(MENU_COMPILE_PH, MyFrame::OnTools) EVT_MENU(MENU_COMPILE_PH, MyFrame::OnTools)
EVT_MENU(MENU_COMPILE_DICT, MyFrame::OnTools) EVT_MENU(MENU_COMPILE_DICT, MyFrame::OnTools)
EVT_MENU(MENU_COMPILE_MBROLA, MyFrame::OnTools) EVT_MENU(MENU_COMPILE_MBROLA, MyFrame::OnTools)
(void)wxMessageBox(wxString(buf,wxConvLocal), _T("About eSpeak Editor")); (void)wxMessageBox(wxString(buf,wxConvLocal), _T("About eSpeak Editor"));
} }


void MyFrame::OnOptions(wxCommandEvent& event)
{

void OnOptions2(int event_id)
{//==========================
wxString string; wxString string;
int value; int value;


switch(event.GetId())
switch(event_id)
{ {
case MENU_PARAMS: case MENU_PARAMS:
value = wxGetNumberFromUser(_T(""),_T(""),_T("Speed"),option_speed,80,320); value = wxGetNumberFromUser(_T(""),_T(""),_T("Speed"),option_speed,80,320);
path_speech = string; path_speech = string;
} }
break; break;

case MENU_PATH4:
string = wxFileSelector(_T("Voice file to modify formant peaks"),wxFileName(path_speech).GetPath(),
_T(""),_T("WAV"),_T("*"),wxSAVE);
if(!string.IsEmpty())
{
path_modifiervoice = string;
}
break;
} }


ConfigSetPaths(); ConfigSetPaths();
} }




void MyFrame::OnOptions(wxCommandEvent& event)
{//===========================================
OnOptions2(event.GetId());
}




void MyFrame::OnTools(wxCommandEvent& event) void MyFrame::OnTools(wxCommandEvent& event)
{//========================================= {//=========================================
int err; int err;

+ 18
- 22
src/extras.cpp View File

{//==================================================================== {//====================================================================
int type; int type;


fprintf(f_events,"--\n");
if(f_wavtest == NULL) return(0);
fprintf(f_events,"--\n");
if(f_wavtest == NULL) return(0);


if(wav == NULL)
{
fprintf(f_events,"Finished\n");
CloseWaveFile3(f_wavtest);
f_wavtest = NULL;
fclose(f_events);
return(0);
}

fwrite(wav,numsamples*2,1,f_wavtest);
while((type = events->type) != 0) while((type = events->type) != 0)
{ {
fprintf(f_events,"%5d %4d (%2d) %d ",events->audio_position,events->text_position,events->length,type); fprintf(f_events,"%5d %4d (%2d) %d ",events->audio_position,events->text_position,events->length,type);


events++; events++;
} }

if(wav == NULL)
{
fprintf(f_events,"Finished\n");
CloseWaveFile3(f_wavtest);
f_wavtest = NULL;
fclose(f_events);
return(0);
}

fwrite(wav,numsamples*2,1,f_wavtest);
return(0); return(0);
} }


fclose(f_in); fclose(f_in);
fclose(f_out); fclose(f_out);


wxLogStatus(_T("Written to: ")+fname+_T("_1"));


} // end of ConvertToItf8 } // end of ConvertToItf8


} }
#endif #endif


char* text1[]=
{
"Hello World. This is the second sentence",
"Testing"
};
char* text1 = "Hello World. This is the second sentence";


void TestTest(int control) void TestTest(int control)
{//======================= {//=======================
//CharsetToUnicode("ISO-8859-4"); //CharsetToUnicode("ISO-8859-4");
//CharsetToUnicode("ISCII"); //CharsetToUnicode("ISCII");


return;
//return;


if(control==2) if(control==2)
{ {
f_events = fopen("/home/jsd1/speechdata/text/events","w"); f_events = fopen("/home/jsd1/speechdata/text/events","w");
fprintf(f_events,"Audio Text Length Type Id\n"); fprintf(f_events,"Audio Text Length Type Id\n");


espeak_Initialize(AUDIO_OUTPUT_RETRIEVAL,0,NULL,1);
espeak_Initialize(AUDIO_OUTPUT_RETRIEVAL,1000,NULL,1);
espeak_SetSynthCallback(TestSynthCallback); espeak_SetSynthCallback(TestSynthCallback);


unsigned int unique_identifier=0; unsigned int unique_identifier=0;
int index=0; int index=0;
espeak_Synth(text1[index], strlen(text1[index])+1, 0, POS_CHARACTER, 0, espeakSSML|espeakCHARS_UTF8, &unique_identifier, NULL);
espeak_Synth(text1, strlen(text1)+1, 0, POS_CHARACTER, 0, espeakSSML|espeakCHARS_UTF8, &unique_identifier, NULL);


espeak_SetParameter(espeakPUNCTUATION, 1, 0); espeak_SetParameter(espeakPUNCTUATION, 1, 0);
espeak_Synchronize(); espeak_Synchronize();
// espeak_Cancel(); // espeak_Cancel();
espeak_SetParameter(espeakPUNCTUATION, 1, 0); espeak_SetParameter(espeakPUNCTUATION, 1, 0);


index++;
espeak_Synth(text1[index], strlen(text1[index])+1, 0, POS_CHARACTER, 0, espeakSSML|espeakCHARS_UTF8, &unique_identifier, NULL);
} }





+ 20
- 18
src/intonation.cpp View File

*/ */


static int tone_pitch_env; /* used to return pitch envelope */ static int tone_pitch_env; /* used to return pitch envelope */
static int pitch_base = 128;
static int pitch_range = 128;




static int vowel_ix; static int vowel_ix;


static void set_pitch(int ix, int base, int drop) static void set_pitch(int ix, int base, int drop)
/***********************************************/ /***********************************************/
/* Set the pitch of a vowel in vowel_tab. Base & drop are Hz * 256 */
// Set the pitch of a vowel in vowel_tab. Base & drop are Hz * 256
{ {
int pitch1, pitch2; int pitch1, pitch2;
int flags = 0; int flags = 0;
int pitch_range2;
int pitch_base2;
int x;


/* fprintf(f_log,"base=%3d,drop=%3d ",base>>8,drop>>8); */
/* adjust experimentally */
int pitch_range2 = 148;
int pitch_base2 = 72;


/* adjust for experimentally optimal value for default of 128 */
pitch_range2 = pitch_range + 20;
pitch_base2 = pitch_base - (128-72);
// fprintf(f_log,"base=%3d,drop=%3d ",base>>8,drop>>8);

// pitch_range2 = pitch_range + 20;
// pitch_base2 = pitch_base - (128-72);


if(base < 0) base = 0; if(base < 0) base = 0;


pitch2 = ((base * pitch_range2 ) >> 15) + pitch_base2; pitch2 = ((base * pitch_range2 ) >> 15) + pitch_base2;


if(drop >= 0)
{
pitch1 = pitch2 + ((drop * pitch_range2) >> 15);
}
else
if(drop < 0)
{ {
pitch1 = pitch2 - ((drop * pitch_range2) >> 15);
flags = 0x80; flags = 0x80;
drop = -drop;
} }


if(pitch1 > 511) pitch1 = 511;
if(pitch2 > 511) pitch2 = 511;
/* fprintf(f_log," %d p1=%3d p2=%3d %x\n",vowel_tab[ix] & 0x3f,pitch1,pitch2,flags); */
pitch1 = pitch2 + ((drop * pitch_range2) >> 15);
//x = (pitch1 - pitch2) / 4; // TEST
//pitch1 -= x;
//pitch2 += x;

if(pitch1 > 511) pitch1 = 511;
if(pitch2 > 511) pitch2 = 511;

// fprintf(f_log," %d p1=%3d p2=%3d %x\n",vowel_tab[ix] & 0x3f,pitch1,pitch2,flags);
vowel_tab[ix] = (vowel_tab[ix] & 0x3f) + flags vowel_tab[ix] = (vowel_tab[ix] & 0x3f) + flags
+ (pitch1 << 8) + (pitch2 << 17); + (pitch1 << 8) + (pitch2 << 17);



+ 1
- 0
src/main.h View File

MENU_PATH1, MENU_PATH1,
MENU_PATH2, MENU_PATH2,
MENU_PATH3, MENU_PATH3,
MENU_PATH4,


MENU_PROSODY, MENU_PROSODY,
MENU_COMPILE_PH, MENU_COMPILE_PH,

+ 2
- 0
src/menus.cpp View File

paths_menu->Append(MENU_PATH1, _T("Phoneme data source")); paths_menu->Append(MENU_PATH1, _T("Phoneme data source"));
paths_menu->Append(MENU_PATH2, _T("Dictionary data source")); paths_menu->Append(MENU_PATH2, _T("Dictionary data source"));
paths_menu->Append(MENU_PATH3, _T("Synthesized sound WAV file")); paths_menu->Append(MENU_PATH3, _T("Synthesized sound WAV file"));
speak_menu->AppendSeparator();
paths_menu->Append(MENU_PATH4, _T("Voice file to modify formant peaks"));


option_menu = new wxMenu; option_menu = new wxMenu;
option_menu->Append(MENU_PATHS, _T("Set &paths"), paths_menu); option_menu->Append(MENU_PATHS, _T("Set &paths"), paths_menu);

+ 3
- 0
src/options.cpp View File

wxString path_phsource; wxString path_phsource;
wxString path_dictsource; wxString path_dictsource;
wxString path_speaktext; wxString path_speaktext;
wxString path_modifiervoice;
wxString path_dir1; wxString path_dir1;
int option_speed=160; int option_speed=160;


pConfig->Read(_T("/phsource"),&path_phsource,basedir+_T("/phsource")); pConfig->Read(_T("/phsource"),&path_phsource,basedir+_T("/phsource"));
pConfig->Read(_T("/dictsource"),&path_dictsource,basedir+_T("/dictsource")); pConfig->Read(_T("/dictsource"),&path_dictsource,basedir+_T("/dictsource"));
pConfig->Read(_T("/speaktext"),&path_speaktext,wxEmptyString); pConfig->Read(_T("/speaktext"),&path_speaktext,wxEmptyString);
pConfig->Read(_T("/modifiervoice"),&path_modifiervoice,basedir);
pConfig->Read(_T("/dir1"),&path_dir1,basedir); pConfig->Read(_T("/dir1"),&path_dir1,basedir);
option_speed = pConfig->Read(_T("/speed"),160); option_speed = pConfig->Read(_T("/speed"),160);
ConfigSetPaths(); ConfigSetPaths();
pConfig->Write(_T("/dictsource"),path_dictsource); pConfig->Write(_T("/dictsource"),path_dictsource);
pConfig->Write(_T("/speaktext"),path_speaktext); pConfig->Write(_T("/speaktext"),path_speaktext);
pConfig->Write(_T("/speed"),option_speed); pConfig->Write(_T("/speed"),option_speed);
pConfig->Write(_T("/modifiervoice"),path_modifiervoice);
pConfig->Write(_T("/dir1"),path_dir1); pConfig->Write(_T("/dir1"),path_dir1);


if(exit) if(exit)

+ 3
- 0
src/options.h View File

extern wxString path_voices; extern wxString path_voices;
extern wxString path_phsource; extern wxString path_phsource;
extern wxString path_dictsource; extern wxString path_dictsource;
extern wxString path_modifiervoice;
extern wxString path_dir1; extern wxString path_dir1;


extern char path_source[80]; extern char path_source[80];


extern int option_speed; extern int option_speed;


extern void OnOptions2(int event_id);

// not currently used // not currently used
class Options : public wxDialog { class Options : public wxDialog {
public: public:

+ 3
- 0
src/speak_lib.cpp View File

{ {
// don't process the next clause until the previous clause has finished generating speech. // don't process the next clause until the previous clause has finished generating speech.
// This ensures that <audio> tag (which causes end-of-clause) is at a sound buffer boundary // This ensures that <audio> tag (which causes end-of-clause) is at a sound buffer boundary

event_list[0].type = espeakEVENT_LIST_TERMINATED;

if(SpeakNextClause(NULL,NULL,1)==0) if(SpeakNextClause(NULL,NULL,1)==0)
{ {
#ifdef USE_ASYNC #ifdef USE_ASYNC

+ 6
- 0
src/speak_lib.h View File



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


#define ESPEAK_API_REVISION 2
/*
Revision 2
Added parameter "options" to eSpeakInitialize()

*/
/********************/ /********************/
/* Initialization */ /* Initialization */
/********************/ /********************/

+ 15
- 0
src/spect.cpp View File

#include "phoneme.h" #include "phoneme.h"
#include "synthesize.h" #include "synthesize.h"
#include "spect.h" #include "spect.h"
#include "options.h"
#include "wx/txtstrm.h" #include "wx/txtstrm.h"
#include "wx/brush.h" #include "wx/brush.h"
#include "wx/datstrm.h" #include "wx/datstrm.h"


extern unsigned char pk_shape1[]; extern unsigned char pk_shape1[];
extern int pk_select; extern int pk_select;
extern char voice_name[];


wxPen BLUE_PEN(wxColour(0,0,255),2,wxSOLID); wxPen BLUE_PEN(wxColour(0,0,255),2,wxSOLID);
wxBrush BRUSH_SELECTED_PEAK(wxColour(255,180,180),wxSOLID); wxBrush BRUSH_SELECTED_PEAK(wxColour(255,180,180),wxSOLID);
{//============================== {//==============================
// apply the modifications to the formants which are defined in the current voice // apply the modifications to the formants which are defined in the current voice
int pk; int pk;
char voice_name1[40];

strcpy(voice_name1, voice_name); // remember current voice name

if(LoadVoice(path_modifiervoice.mb_str(wxConvLocal),0x13) == NULL)
{
wxLogError(_T("Can't read voice: ")+path_modifiervoice);
OnOptions2(MENU_PATH4);
return;
}

wxLogStatus(_T("Convert using voice: ")+path_modifiervoice);


for(pk=0; pk<N_PEAKS; pk++) for(pk=0; pk<N_PEAKS; pk++)
{ {
peaks[pk].pkwidth = (peaks[pk].pkwidth * voice->width2[pk])/256; peaks[pk].pkwidth = (peaks[pk].pkwidth * voice->width2[pk])/256;
peaks[pk].pkright = (peaks[pk].pkright * voice->width2[pk])/256; peaks[pk].pkright = (peaks[pk].pkright * voice->width2[pk])/256;
} }
LoadVoice(voice_name1,1);
} }





+ 3
- 1
src/synth_mbrola.cpp View File

{ {
name = '_'; name = '_';
len = (p->length * speed_factor1)/256; len = (p->length * speed_factor1)/256;
if(len == 0) continue;
// if(len == 0) continue;
if(len == 0)
len = 1;
} }
else else
len = (70 * speed_factor2)/256; len = (70 * speed_factor2)/256;

+ 1
- 1
src/synthdata.cpp View File

#include "translate.h" #include "translate.h"
#include "wave.h" #include "wave.h"


const char *version_string = "1.26.05 14.Jun.07";
const char *version_string = "1.26.06 18.Jun.07";
const int version_phdata = 0x012601; const int version_phdata = 0x012601;


int option_device_number = -1; int option_device_number = -1;

+ 36
- 6
src/synthesize.cpp View File



for(pk=0; pk<6; pk++) for(pk=0; pk<6; pk++)
{ {
int f1, f2;

if((frame->frflags & FRFLAG_BREAK_LF) && (pk < 3)) if((frame->frflags & FRFLAG_BREAK_LF) && (pk < 3))
continue; continue;


allowed = (formant_rate[pk] * len)/256;
f1 = frame1->ffreq[pk];
f2 = frame->ffreq[pk];

// backwards
if((diff = f2 - f1) > 0)
{
allowed = f1*2 + f2;
}
else
{
allowed = f1 + f2*2;
}

// the allowed change is specified as percentage (%*10) of the frequency
// take "frequency" as 1/3 from the lower freq
allowed = (allowed * formant_rate[pk])/3000;
allowed = (allowed * len)/256;


diff = frame->ffreq[pk] - frame1->ffreq[pk];
if(diff > allowed) if(diff > allowed)
{ {
if(modified == 0) if(modified == 0)
frame = frame2 = (frame_t *)q[3]; frame = frame2 = (frame_t *)q[3];
modified = 0; modified = 0;


if(frame->frflags & FRFLAG_BREAK)
if(frame1->frflags & FRFLAG_BREAK)
break; break;


if(frame->frflags & FRFLAG_FORMANT_RATE)
if(frame1->frflags & FRFLAG_FORMANT_RATE)
len = (len *6)/5; // allow slightly greater rate of change for this frame len = (len *6)/5; // allow slightly greater rate of change for this frame


for(pk=0; pk<6; pk++) for(pk=0; pk<6; pk++)
{ {
allowed = (formant_rate[pk] * len)/256;
int f1, f2;
f1 = frame1->ffreq[pk];
f2 = frame->ffreq[pk];

// forwards
if((diff = f2 - f1) > 0)
{
allowed = f1*2 + f2;
}
else
{
allowed = f1 + f2*2;
}
allowed = (allowed * formant_rate[pk])/3000;
allowed = (allowed * len)/256;


diff = frame->ffreq[pk] - frame1->ffreq[pk];
if(diff > allowed) if(diff > allowed)
{ {
if(modified == 0) if(modified == 0)

+ 3
- 2
src/tr_languages.cpp View File

tr->langopts.stress_rule = 0; tr->langopts.stress_rule = 0;
tr->langopts.stress_flags = 0x10; tr->langopts.stress_flags = 0x10;
tr->langopts.param[LOPT_IT_LENGTHEN] = 0x11; // remove lengthen indicator from unstressed vowels tr->langopts.param[LOPT_IT_LENGTHEN] = 0x11; // remove lengthen indicator from unstressed vowels
tr->langopts.param[LOPT_KEEP_UNSTR_VOWEL] = 1;
tr->langopts.param[LOPT_REDUCE] = 2;


ResetLetterBits(tr,0x18); ResetLetterBits(tr,0x18);
SetLetterBits(tr,4,"kpst"); // Letter group F SetLetterBits(tr,4,"kpst"); // Letter group F
tr->langopts.param[LOPT_IT_LENGTHEN] = 2; // remove lengthen indicator from unstressed or non-penultimate syllables tr->langopts.param[LOPT_IT_LENGTHEN] = 2; // remove lengthen indicator from unstressed or non-penultimate syllables
tr->langopts.param[LOPT_IT_DOUBLING] = 2; tr->langopts.param[LOPT_IT_DOUBLING] = 2;
tr->langopts.param[LOPT_SONORANT_MIN] = 130; // limit the shortening of sonorants before short vowels tr->langopts.param[LOPT_SONORANT_MIN] = 130; // limit the shortening of sonorants before short vowels
tr->langopts.param[LOPT_REDUCE] = 1; // reduce vowels even if phonemes are specified in it_list
tr->langopts.numbers = 0x2709; tr->langopts.numbers = 0x2709;
} }
break; break;


langopts.param[LOPT_UNPRONOUNCABLE] = 0x432; // [v] don't count this character at start of word langopts.param[LOPT_UNPRONOUNCABLE] = 0x432; // [v] don't count this character at start of word
langopts.param[LOPT_REGRESSIVE_VOICING] = 1; langopts.param[LOPT_REGRESSIVE_VOICING] = 1;
langopts.param[LOPT_KEEP_UNSTR_VOWEL] = 1;
langopts.param[LOPT_REDUCE] = 2;
langopts.stress_rule = 5; langopts.stress_rule = 5;
langopts.stress_flags = 0x0020; // waas 0x1010 langopts.stress_flags = 0x0020; // waas 0x1010



+ 0
- 10
src/translate.cpp View File

word_length++; word_length++;
} }
word = word1; word = word1;
//#define DEBUG3
#ifdef DEBUG3
printf("TR1 wlen=%d, %x %x %x %x %x %x %x %x\n",word_length,word[0],word[1],word[2],word[3],word[4],word[5],word[6],word[7]);
#endif


// try an initial lookup in the dictionary list, we may find a pronunciation specified, or // try an initial lookup in the dictionary list, we may find a pronunciation specified, or
// we may just find some flags // we may just find some flags
} }
} }


#ifdef DEBUG3
printf("TR2 spell_word=%d\n",spell_word);
#endif
if(spell_word > 0) if(spell_word > 0)
{ {
// Speak as individual letters // Speak as individual letters
{ {
// This word looks "unpronouncable", so speak letters individually until we // This word looks "unpronouncable", so speak letters individually until we
// find a remainder that we can pronounce. // find a remainder that we can pronounce.
#ifdef DEBUG3
printf("TR3 length=%d\n",length);
#endif
word += TranslateLetter(word,phonemes,0); word += TranslateLetter(word,phonemes,0);
if(phonemes[0] == phonSWITCH) if(phonemes[0] == phonSWITCH)
{ {

+ 4
- 2
src/translate.h View File

#define RULE_NONALPHA 16 // Z non-alpha #define RULE_NONALPHA 16 // Z non-alpha
#define RULE_LETTERGP 17 // A B C H F G Y letter group number #define RULE_LETTERGP 17 // A B C H F G Y letter group number
#define RULE_LETTERGP2 18 // L + letter group number #define RULE_LETTERGP2 18 // L + letter group number
#define RULE_CAPITAL 19 // word starts with a capital letter
#define RULE_NO_SUFFIX 24 // N #define RULE_NO_SUFFIX 24 // N
#define RULE_NOTVOWEL 25 // K #define RULE_NOTVOWEL 25 // K
#define RULE_IFVERB 26 // V #define RULE_IFVERB 26 // V
#define LOPT_IT_DOUBLING 8 #define LOPT_IT_DOUBLING 8
// max. amplitude for vowel at the end of a clause // max. amplitude for vowel at the end of a clause
#define LOPT_MAXAMP_EOC 9 #define LOPT_MAXAMP_EOC 9
// don't reduce the strongest vowel in a word which is marked 'unstressed'
#define LOPT_KEEP_UNSTR_VOWEL 10
// bit 0=reduce even if phonemes are specified in the **_list file
// bit 1=don't reduce the strongest vowel in a word which is marked 'unstressed'
#define LOPT_REDUCE 10
// LANG=cs,sk combine some prepositions with the following word, if the combination has N or fewer syllables // LANG=cs,sk combine some prepositions with the following word, if the combination has N or fewer syllables
// bits 0-3 N syllables // bits 0-3 N syllables
// bit 4=only if the second word has $alt attribute // bit 4=only if the second word has $alt attribute

+ 1
- 1
src/voice.h View File

extern voice_t *voice; extern voice_t *voice;
extern int tone_points[10]; extern int tone_points[10];


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

+ 27
- 11
src/voices.cpp View File



// limit the rate of change for each formant number // limit the rate of change for each formant number
//static int formant_rate_22050[9] = {50, 104, 165, 230, 220, 220, 220, 220, 220}; // values for 22kHz sample rate //static int formant_rate_22050[9] = {50, 104, 165, 230, 220, 220, 220, 220, 220}; // values for 22kHz sample rate
static int formant_rate_22050[9] = {50, 100, 160, 200, 200, 200, 200, 200, 200}; // values for 22kHz sample rate
static int formant_rate_22050[9] = {250, 200, 200, 200, 200, 200, 200, 200, 200}; // values for 22kHz sample rate
//static int formant_rate_22050[9] = {50, 100, 165, 200, 200, 200, 200, 200, 200}; // values for 22kHz sample rate
int formant_rate[9]; // values adjusted for actual sample rate int formant_rate[9]; // values adjusted for actual sample rate




} }




voice_t *LoadVoice(char *vname, int control)
voice_t *LoadVoice(const char *vname, int control)
{//========================================== {//==========================================
// control, bit 0 1= no_default // control, bit 0 1= no_default
// bit 1 1 = change tone only, not language // bit 1 1 = change tone only, not language
// bit 2 1 = don't report error on LoadDictionary // bit 2 1 = don't report error on LoadDictionary
// bit 4 1 = vname = full path


FILE *f_voice = NULL; FILE *f_voice = NULL;
keywtab_t *k; keywtab_t *k;
if(voicename[0]==0) if(voicename[0]==0)
strcpy(voicename,"default"); strcpy(voicename,"default");


sprintf(path_voices,"%s%cvoices%c",path_home,PATHSEP,PATHSEP);
sprintf(buf,"%s%s",path_voices,voicename);

if(GetFileLength(buf) <= 0)
if(control & 0x10)
{ {
// look for the voice in a sub-directory of the language name
langname[0] = voicename[0];
langname[1] = voicename[1];
langname[2] = 0;
sprintf(buf,"%s%s%c%s",path_voices,langname,PATHSEP,voicename);
strcpy(buf,vname);
if(GetFileLength(buf) <= 0)
return(NULL);
}
else
{
sprintf(path_voices,"%s%cvoices%c",path_home,PATHSEP,PATHSEP);
sprintf(buf,"%s%s",path_voices,voicename);

if(GetFileLength(buf) <= 0)
{
// look for the voice in a sub-directory of the language name
langname[0] = voicename[0];
langname[1] = voicename[1];
langname[2] = 0;
sprintf(buf,"%s%s%c%s",path_voices,langname,PATHSEP,voicename);
}
} }


f_voice = fopen(buf,"r"); f_voice = fopen(buf,"r");


case V_BREATH: case V_BREATH:
voice->breath[0] = Read8Numbers(p,&voice->breath[1]); voice->breath[0] = Read8Numbers(p,&voice->breath[1]);
for(ix=1; ix<8; ix++)
{
if(ix & 1)
voice->breath[ix] = -voice->breath[ix];
}
break; break;


case V_BREATHW: case V_BREATHW:

+ 1
- 1
src/wavegen.cpp View File



for(ix=1; ix < N_PEAKS; ix++) for(ix=1; ix < N_PEAKS; ix++)
{ {
if((amp = wvoice->breath[ix]) > 0)
if((amp = wvoice->breath[ix]) != 0)
{ {
amp *= (peaks[ix].height >> 13); amp *= (peaks[ix].height >> 13);
value += int(resonator(&rbreath[ix],noise) * amp); value += int(resonator(&rbreath[ix],noise) * amp);

+ 14
- 10
windows/windows_dll/src/speak_lib.h View File



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



#define ESPEAK_LIB_REVISION 2
/*
Revision 2
Added parameter "options" to eSpeakInitialize()

*/

/********************/ /********************/
/* Initialization */ /* Initialization */
/********************/ /********************/
espeakEVENT_MARK, // Mark espeakEVENT_MARK, // Mark
espeakEVENT_PLAY, // Audio element espeakEVENT_PLAY, // Audio element
espeakEVENT_END, // End of sentence espeakEVENT_END, // End of sentence
espeakEVENT_MSG_TERMINATED, // End of message
espeakEVENT_PHONEME // Phoneme, if enabled in espeak_Initialize()
espeakEVENT_MSG_TERMINATED // End of message
} espeak_EVENT_TYPE; } espeak_EVENT_TYPE;




int sample; // sample id (internal use) int sample; // sample id (internal use)
void* user_data; // pointer supplied by the calling program void* user_data; // pointer supplied by the calling program
union { union {
int number; // used for WORD and SENTENCE events. For PHONEME events this is the phoneme mnemonic.
int number; // used for WORD and SENTENCE events
const char *name; // used for MARK and PLAY events. UTF8 string const char *name; // used for MARK and PLAY events. UTF8 string
} id; } id;
} espeak_EVENT; } espeak_EVENT;
#ifdef __cplusplus #ifdef __cplusplus
extern "C" extern "C"
#endif #endif
ESPEAK_API int espeak_Initialize(espeak_AUDIO_OUTPUT output, int buflength, const char *path, int options);
ESPEAK_API int espeak_Initialize(espeak_AUDIO_OUTPUT output, int buflength, const char *path);
/* Must be called before any synthesis functions are called. /* Must be called before any synthesis functions are called.
output: the audio data can either be played by eSpeak or passed back by the SynthCallback function. output: the audio data can either be played by eSpeak or passed back by the SynthCallback function.




path: The directory which contains the espeak-data directory, or NULL for the default location. path: The directory which contains the espeak-data directory, or NULL for the default location.


options: bit 0: 1=allow espeakEVENT_PHONEME events.


Returns: sample rate in Hz, or -1 (EE_INTERNAL_ERROR).
Returns: sample rate in Hz
*/ */


typedef int (t_espeak_callback)(short*, int, espeak_EVENT*); typedef int (t_espeak_callback)(short*, int, espeak_EVENT*);


espeakVOLUME: volume in range 0-100 0=silence espeakVOLUME: volume in range 0-100 0=silence


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


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


espeakPUNCTUATION: which punctuation characters to announce: espeakPUNCTUATION: which punctuation characters to announce:
value in espeak_PUNCT_TYPE (none, all, some), value in espeak_PUNCT_TYPE (none, all, some),

Loading…
Cancel
Save