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-fd96e6ae7743master
@@ -139,6 +139,7 @@ grange x2rA:nsi | |||
gustav gustaf | |||
jacobus jako@bWs | |||
jacques ZA:k | |||
jane _^_EN | |||
jean ZA~n | |||
jesus ji:sWs | |||
joey dZ@Ui | |||
@@ -154,6 +155,7 @@ louw l'@U | |||
maria mar'ia | |||
martin m'A:rt@n | |||
michiel $2 | |||
mostert m'Ost@rt | |||
natasha n%at'aSa | |||
paul p@Ul | |||
paulus p@UlWs | |||
@@ -233,15 +235,15 @@ omdat $pause | |||
sodat $pause | |||
voordat $pause | |||
nadat $pause | |||
totdat $pause | |||
totdat tOdat $pause | |||
as ,as $pause | |||
soos $pause | |||
solank $pause | |||
solank s%o@laNk $pause | |||
sodra $pause | |||
sowel so@v'&l | |||
sedert $pause | |||
alhoewel alhuv'&l $pause | |||
tensy $pause | |||
tensy $2 $pause | |||
aangesien $pause | |||
wie $pause | |||
wanneer $pause | |||
@@ -332,6 +334,7 @@ bv beIf'o@rbe@lt | |||
aanbid $2 | |||
aanstaande $2 | |||
agenda ax2'Enda | |||
aikôna %aik'O:na | |||
algehele alx2@h,e@l@ | |||
alles al@s | |||
alternatiewe $4 | |||
@@ -363,11 +366,11 @@ darem dar@m | |||
derde d&:rd@ | |||
dekade dEk'A:d@ | |||
deurgaans $1 | |||
diegene dix2,e@n@ | |||
dikwels dIkv@ls | |||
diplomasie d@plo@mas'i | |||
dusver dWsf&r | |||
eenkeer $1 | |||
effense Ef@ns@ | |||
ekself %&ks'&lf | |||
ekstra $1 | |||
@@ -424,7 +427,6 @@ joernalis $3 | |||
kafee kaf'e@ | |||
kantoor $2 | |||
kapitaal kapit'A:l | |||
kollega kul'e@x2a | |||
komaan kOmA:n | |||
komberse kOmb'&rs@ | |||
kombers kOmb'&rs | |||
@@ -493,7 +495,6 @@ oorspronklike $2 | |||
oranje $2 | |||
patriotisme patri|ut'Ism@ | |||
parlement parl@m'Ent | |||
penorent pEno@rEnt | |||
per pIr | |||
persent p@rsEnt | |||
@@ -552,7 +553,7 @@ verantwoordelikheid f@rantv'o@rd@l@keIt | |||
verdere f&rd@r@ | |||
vere fe@r@ | |||
vererger f@r&rg@r | |||
ver f&r | |||
ver f'&:r | |||
verg f&rx2 | |||
vergete f@rx2e@t@ | |||
vergewe f@rx2e@v@ |
@@ -22,6 +22,7 @@ | |||
agter (dogt %ax2t@r // move default stress: agterdogtig and derivitives | |||
&) agtig 'ax2t@x2 // this string almost always carries stress on a | |||
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 | |||
a (CAA %a | |||
@@ -301,6 +302,7 @@ | |||
de (moCr d%E // demokraat/demokrasie/-ë/demokraties/demografie | |||
dekade (n dEkad'E | |||
dekade (s dEk'A:d@ | |||
dekant (_ d@kant //try fix suidekant | |||
_) deli (ka d%El%i // delikaat/delikate | |||
@) dend (er d@nd // beduidender/behoudender | |||
@@ -598,6 +600,7 @@ C) ensie (_ @) enswaar (dig @nsv'A:r // noemenswaardige/bejammerenswaar | |||
_mens) e @ //mense at start of compounds | |||
_mens) e (k @ //force correct behaviour before k | |||
@kom) e (ns_ @ //fix words ending in komens | |||
suid) e @ //suidekant, suidewind etc. | |||
@C) e (wa_ @ // goederewa/kolewa/ossewa/troepewa | |||
Ab) e (wa @ //bewaking/bewaring in compounds polisiebewaking | |||
@C) e (waen @ // plurals and diminutives of some of the above | |||
@@ -621,6 +624,8 @@ C) ensie (_ @) enswaar (dig @nsv'A:r // noemenswaardige/bejammerenswaar | |||
eval (u %iv%al // evaluasie/evalueer/evaluering | |||
werk) e (rs @ //fix werkers in compounds werkershuis etc. | |||
v) e (nno @ //vennoot and friends | |||
.group f | |||
@@ -658,6 +663,7 @@ C) ensie (_ @) enswaar (dig @nsv'A:r // noemenswaardige/bejammerenswaar | |||
ga (lAC x2%a // galant/galery/galon/galop | |||
//re-enable following rule to get [g@] at end of words | |||
C) ge (_ g@ | |||
gene (_ x2e@n@ // gene/diegene | |||
genre Z'A~nr@ //genre and compounds | |||
gese (_ x2'e@s@ //Portugese, and others | |||
@@ -808,7 +814,7 @@ C) ensie (_ @) enswaar (dig @nsv'A:r // noemenswaardige/bejammerenswaar | |||
_) inge (@P4 'Inx2@ // prefix inge always has stress on 1st slb | |||
inge (wing 'Inx2e@ // see rule: _) inge (@P4 @nx2@ | |||
@C) inge (_ @N@ | |||
ings INs // begrotingsrede/ontvangslokaal/geringste | |||
ing (s IN // begrotingsrede/ontvangslokaal/geringste | |||
_) ing (@ 'Inx2 // ingaan/ingang/ingiet/ingly/ingroei/ingreep... | |||
&) ige (_ Ix2@ | |||
@C) iger (CA @x2@r // twintiger-/dertiger-/veertigerjare, etc. | |||
@@ -959,6 +965,7 @@ C) ensie (_ @) enswaar (dig @nsv'A:r // noemenswaardige/bejammerenswaar | |||
klere kl'e@r@ | |||
kklere =kl'e@r@ | |||
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 | |||
kommando k%umandu // move stress, fix o sounds: kommando and compounds | |||
ko (pie@ k%u // kopiereg/kopie | |||
@@ -1031,12 +1038,15 @@ C) ensie (_ @) enswaar (dig @nsv'A:r // noemenswaardige/bejammerenswaar | |||
lewe (C le@v@ // belewenis/lewendig/agtergeblewenes | |||
libe (ra l@b@ // liberaal/liberale/liberalis/-me | |||
ligen l@x2'En | |||
_) li (g lI // fix stress: liggaam/liggies/ligte | |||
liggaamlik l@x2A:ml@k // stress liggaamlik/-e/-heid | |||
&) lik (_S3 l@k | |||
&) like (_S4 l@k@ | |||
&) likes (_S5 l@k@s | |||
&) liker (_S5 l@k@r | |||
&) likste (_S6 l@kst@ | |||
liter (A l@t@r //literatuur and others, but literbottel | |||
linker lINk@r // blinkertjies/many compounds with linker and klinker | |||
@) ll (_N _^_EN // Words ending in -ll are English | |||
_) losge (@P5 l'Osx2@ | |||
@@ -1098,6 +1108,7 @@ C) ensie (_ @) enswaar (dig @nsv'A:r // noemenswaardige/bejammerenswaar | |||
_) melodi (eu ,mEludi //melodieus | |||
_) melodie mElud'i | |||
_) melo (dr m'Elu //melodrama etc. | |||
_) metel me@t@l // vermetel/-e/-es/-heid... | |||
mme (C m@ | |||
mme (tjie mi // lemmetjie/stemmetjie and similar | |||
ment m'Ent | |||
@@ -1175,8 +1186,9 @@ C) ensie (_ @) enswaar (dig @nsv'A:r // noemenswaardige/bejammerenswaar | |||
_) na (C_ n'a //three-letter words starting with na | |||
na ( n%a_ // naef/naewe/nawiteit | |||
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. | |||
namakwa n%amakw%a //namakwa and compounds | |||
nasio naSiu | |||
_) nag (C n'ax2 | |||
_) nag (raad n'A:x2 //nagraads and compounds | |||
@@ -1203,6 +1215,7 @@ C) ensie (_ @) enswaar (dig @nsv'A:r // noemenswaardige/bejammerenswaar | |||
_) nage (@P4 n'A:x2@ | |||
nasionale naSEun'A:l@ | |||
n (_n //cause one n sound kan nie doen nie etc. | |||
&) nele (_ n'e@l@ | |||
s) nes (K nEs // onheilsnes/rowersnes | |||
nese (_ n'e@s@ //japannese soedannese stres and e sound | |||
@@ -1261,6 +1274,8 @@ C) ensie (_ @) enswaar (dig @nsv'A:r // noemenswaardige/bejammerenswaar | |||
ondjie OINci | |||
ontjie OINci | |||
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 | |||
ograaf ux2r'A:f // biograaf/demograaf/fotograaf | |||
ografie ux2raf'i // biografie/demografie/fotografie | |||
@@ -1347,6 +1362,7 @@ C) ensie (_ @) enswaar (dig @nsv'A:r // noemenswaardige/bejammerenswaar | |||
_) onderge (@P7 'On@rx2@ | |||
ontevrede Ont@fr'e@d@ | |||
oombliklik o@mbl'Ikl@k // stress: oombliklik/e | |||
oorbluf o@rbl'Wf // stress: oorbluf/te | |||
oor (blyw %o@r // move default stress: oorblywend/-e | |||
@@ -1416,8 +1432,9 @@ C) ensie (_ @) enswaar (dig @nsv'A:r // noemenswaardige/bejammerenswaar | |||
pa (niek p%a // paniek/paniekerig | |||
pantser pants@r // fix e sound in compounds starting with pantser | |||
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 | |||
patie (_ p%at'i //words ending in patie has stress at end + a sound | |||
para (C ,para //paralel, paragraaf etc. | |||
parade (K p@rA:d@ // parade and compounds | |||
par (C@ p%ar // (ge)parkeer/parkeerplek/party(keer/maal...)/parfuum/parmantig | |||
@@ -1476,10 +1493,12 @@ C) ensie (_ @) enswaar (dig @nsv'A:r // noemenswaardige/bejammerenswaar | |||
pro (blA pr%u // probleem/probleme | |||
profesie prOf@s'i // fix vowel sounds and move stress | |||
pro (CA pr%u // probeer/produk/proses/professie/provinsie | |||
prokie pro@k%i //sprokie and compounds | |||
prosa pr'o@sa //prosa and compounds | |||
proses (_ prus'Es //proses at end of word | |||
projek pruj'Ek | |||
proku (rA pr%Ok%y // prokureur and compounds/prokurasie | |||
prominen prOmin'En // prominent/e/prominensie | |||
propag ,prOpax2 | |||
@@ -1567,13 +1586,14 @@ C) ensie (_ @) enswaar (dig @nsv'A:r // noemenswaardige/bejammerenswaar | |||
reke (nA re@k@ // rekenaar/sakrekenaar/rekenaarprogram/hoofrekene | |||
rekord r'EkOrt | |||
o) rene r@n@ // eersgeborene/uitverkorenes | |||
rivier r@f'ir | |||
rivier r@f'i:r | |||
re (geer r@ // regeer/geregeer; stress to end | |||
reger (A r@x2e@r // regering/regerende | |||
resensie r@s'E:nsi | |||
resensent r@s@ns'Ent | |||
respek r@spEk | |||
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 | |||
rugby r'Wgbi | |||
&) rele (_ r'e@l@ | |||
@@ -1752,6 +1772,7 @@ C) ensie (_ @) enswaar (dig @nsv'A:r // noemenswaardige/bejammerenswaar | |||
_) ta (mb t%a // tamboer and compounds/tambotie and compounds | |||
_) tant (e tA~nt // nasalise | |||
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... | |||
_) tekere t@ke@r@ // move default stress and correct e sounds | |||
tele (C t%&l@ // telefoneer/telekommunikasie, etc. | |||
@@ -1882,6 +1903,7 @@ C) ensie (_ @) enswaar (dig @nsv'A:r // noemenswaardige/bejammerenswaar | |||
u (CA y | |||
uu y | |||
ui Yy | |||
uiwe Yyv@ //druiwesap and many others | |||
uie (C Yy@ // graansuierdiens/kruiersloon/kuiergas/luierbroekie/sluierdoek/suierklep/getuienis | |||
uy Yy | |||
@@ -1951,6 +1973,7 @@ C) ensie (_ @) enswaar (dig @nsv'A:r // noemenswaardige/bejammerenswaar | |||
_) veronge (@P7 f@r'O:Nx2@ | |||
verbete f@rb'e@t@ // verbete/verbetenheid | |||
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 | |||
vi (cto@ v%i // fix v and i sounds: victoriaans/-e | |||
video v'idi;u //video and compounds | |||
@@ -1971,6 +1994,7 @@ C) ensie (_ @) enswaar (dig @nsv'A:r // noemenswaardige/bejammerenswaar | |||
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 | |||
volle (dig f%Ole@ // fix stress and e sound: (on)volledig/-e/-heid... | |||
vo (ller fO // exception to: vo (lC f%O | |||
vol (hou_ fOl // exception to: vo (lC f%O | |||
vol (maan fOl // exception to: vo (lC f%O | |||
@@ -2083,12 +2107,15 @@ C) ensie (_ @) enswaar (dig @nsv'A:r // noemenswaardige/bejammerenswaar | |||
.group | |||
êre (_ '&&:r@ // hulle always take stress | |||
ə @ // char.replacement for 'n | |||
_C) è (_ E // dè/nè | |||
ê e: | |||
ê (r &: | |||
®e 3: | |||
îe 3: | |||
ge) ë (rf & // oorgeëf/-de | |||
ïgnoreer ix2nur'e@r // geïgnoreer | |||
ï (n @ // geïnteresseerd | |||
@@ -2103,8 +2130,8 @@ C) ensie (_ @) enswaar (dig @nsv'A:r // noemenswaardige/bejammerenswaar | |||
$ dOl@r | |||
% p@rs'Ent | |||
& _|amp&rsant | |||
£ p@Unt | |||
€ Y@ru | |||
£ p@Unt | |||
€ Y@ru | |||
/ stre@p | |||
@ beI_: | |||
\\ trystre@p |
@@ -416,6 +416,8 @@ anomalie $2 | |||
antik ant'i:k | |||
archaik a*k'A:Ik | |||
arie $alt | |||
arpeggier a*pEdZ'i:* | |||
arrangier a*aNZ'i:@ | |||
arterie $alt | |||
asphalt $2 | |||
außerdem aUs3de:m | |||
@@ -424,6 +426,7 @@ avenue av@n'y: | |||
balkan $1 | |||
balkon $2 | |||
bandagier bandaZ'i:@ | |||
beben be:b@n | |||
beere be:*@ | |||
bestie bEstI@ | |||
@@ -440,17 +443,20 @@ dahlie $alt | |||
deshalb $2 | |||
dezember $2 | |||
diadem di:ad'e:m | |||
duett du:'Et | |||
direkt $2 | |||
dividend di:vi:d'Ent | |||
dragier d@-*aZ'i:* | |||
dritte d@-*It@ | |||
duett du:'Et | |||
extravagant $1 | |||
ebendaher e:b@ndah'e:r | |||
ebendahin e:b@ndah'In | |||
einander aIn'and3 | |||
einerlei aIn@*laI | |||
einig aInIC $only | |||
einige aInIg@ $u+ | |||
einiges aInIg@s $u+ | |||
enagier EngaZ'i:* | |||
endivie $alt | |||
endlich EntlIC | |||
episkopal e:pIsko:p'A:l | |||
@@ -458,6 +464,7 @@ erde e:*d@ | |||
erst e:*st | |||
ersten e:*st@n | |||
erstmal e:*stma:l | |||
extravagant $1 | |||
extrem Ekstr'e:m | |||
feuerrot $3 | |||
@@ -478,10 +485,14 @@ grazie $alt | |||
handy handI | |||
heimat haImat | |||
herberg hE*bE*g | |||
historie $alt | |||
hm h@m | |||
hostie $alt | |||
illegitim Ile:gi:t'i:m | |||
illiberal Ili:b@*'A:l | |||
illoyal IlOajA:l | |||
immobilie $alt | |||
indem Ind'e:m | |||
inden Ind'e:n | |||
@@ -489,6 +500,9 @@ inder Ind3 | |||
indes Ind'Es | |||
indessen Ind'Es@n | |||
injurie $alt | |||
inka INkA: | |||
inkaisch INkA:IS | |||
inkonstant $1 | |||
insbesondere $3 | |||
interess Int@*'Es | |||
@@ -506,11 +520,13 @@ lakaienhaft l%akaInhaft | |||
lappalie $alt | |||
lilie $alt | |||
linie $alt | |||
logier lo:Z'i:* | |||
luetisch lu:'e:tIS | |||
machen max@n | |||
marginalie $alt | |||
materie $alt | |||
menagier me:naZ'i:* | |||
menuette mEnu:'Et | |||
minut $2 | |||
mikrofiche maIk@-*o:fIS | |||
@@ -520,6 +536,7 @@ modell mo:d'El | |||
mumie $alt | |||
nebulos $3 | |||
negligier ne:gli:Z'i:* | |||
oberen o:b@*@n | |||
oboe o:bo:@ |
@@ -54,9 +54,12 @@ | |||
a (_ A: | |||
a (C_ A: | |||
@) a (bl_ 'A: | |||
@) a (bel_ 'A: | |||
s) a (g A: | |||
@l) a (g A: | |||
scl) a (g A: | |||
sor) a (ch A: | |||
s) a (m_ A: | |||
s) a (mkeit A: | |||
a (isier a | |||
@@ -71,6 +74,7 @@ | |||
n) al (_ 'A:l | |||
&kan) al (_ ,A:l | |||
&sign) al (_ ,A:l | |||
r) al (_ 'A:l | |||
@) an (_ 'A:n | |||
ein) an (der 'an | |||
@) ant (_ 'ant | |||
@@ -194,8 +198,23 @@ | |||
design _^_EN | |||
dge (_ _^_EN | |||
_) dia d,i:a | |||
_) diver d%i:vE* | |||
_) dort (C@P4 d'O*t | |||
drive _^_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 | |||
@@ -275,12 +294,16 @@ | |||
@@) erisch @*IS | |||
&) erung (_ =@*UN | |||
_) e (ff %E | |||
_) eil (aP3 'aIl | |||
_) eil (fP3 'aIl | |||
_) ein (@P3 _!'aIn | |||
ein (and _|%aIn | |||
_) eine (r@ aIn@ | |||
_) einig aInIg | |||
_) e (lek %e: | |||
_) elektro (@P7 e:l'Ekt@-*o: | |||
_) elen e:lEn | |||
mod) e (l@ E | |||
s) e (lig e: | |||
_) emp (@P3 _|%Emp | |||
@@ -290,10 +313,13 @@ | |||
_) ent (@P3 _|%Ent | |||
_) enten Ent@n | |||
_) ent (er Ent | |||
&) e (nz_ 'E | |||
_) epi (@ ,e:pi: | |||
_) epi (sk e:pI | |||
_) er (@P2 _|%E* | |||
_) er (gie E* | |||
&) er (ig_ @* | |||
&) er (igst @* | |||
_) er (beK E* | |||
_) er (HC E* // lC, mC, nC, rC | |||
_) ergeb (nis E*g'e:b | |||
@@ -305,6 +331,7 @@ | |||
_) entert _^_EN | |||
er (dig e:* | |||
_) erob (er %E*o:b | |||
@) ett (_ 'Et | |||
@) eur (_ 'Y:* | |||
euse (_ 'Y:z@ | |||
eusen (_ 'Y:z@n | |||
@@ -353,6 +380,7 @@ | |||
gehen ge:@n | |||
_) geh (eX ge: | |||
general ge:nE*'al | |||
general (is ge:n@*al | |||
_) g (ener g | |||
_) g (eo+ g | |||
_) ge (orP2 g@ | |||
@@ -382,6 +410,9 @@ | |||
_) herunter (P8 hE*'Unt3 | |||
_) hervor (P6 hE*f'Or | |||
_) hier (@ h%i:* | |||
_) hilf (@P4 h'Ilf | |||
_) hilfs (@P5 h'Ilfs | |||
_) hilfe (@P5 h'Ilf@ | |||
_) hinab (P5 hIn'ab | |||
_) hinan (P5 hIn'an | |||
@@ -402,6 +433,7 @@ | |||
_) hinter (@ h,Int3 | |||
_) hoch (@P4 h'o:x | |||
hoch ho:x | |||
homogen h,o:mo:ge:n | |||
_) hyper _^_EN | |||
@@ -418,6 +450,8 @@ | |||
@) i (ng I | |||
&CC) i (_ =i: | |||
@) i (bl_ 'i: | |||
@) i (bel_ 'i: | |||
ib (t_ i:p | |||
@) i (at_ I | |||
@@ -449,8 +483,12 @@ | |||
polit) ik 'i:k | |||
@) ik (el_ 'i:k | |||
_) illeg ,Ile:g | |||
_) i (llu %I | |||
_) i (mag I | |||
r) i (na_ 'i: | |||
@) ing (_N _^_EN | |||
_) in (k %In | |||
_) inter Int@* | |||
@) ion (_ j'o:n | |||
@) io (n Io: | |||
@@ -462,6 +500,7 @@ | |||
@) ite (_ 'i:t@ | |||
@) ität (_S4 i:t'E:t | |||
&) ium (_ =i:Um | |||
@s) i (v_ 'i: | |||
@t) i (v_ 'i: | |||
@@ -473,6 +512,7 @@ | |||
&) ie (ll_ i:,E | |||
&) ie (r_ 'i: | |||
u) ie (r_ _|'i: | |||
&) ie (rlich 'i: | |||
r) ien (@ IEn | |||
&) ien (_ =I@n | |||
@@ -486,16 +526,10 @@ | |||
s) ien (_ 'i:@n | |||
t) ien (_ 'i:@n | |||
&) iens (_ =I;@ns | |||
&) ient (_ =I;@nt | |||
&) ient (_ I'Ent | |||
&) ienz (_ I'Ents | |||
sch) ie (n i: | |||
// @) ieren 'i:*@n | |||
@) ie (reX 'i: | |||
// @) iere (_ 'i:*@ | |||
// @) ierer (_ 'i:*3 | |||
// @) ieret (_ 'i:*@t | |||
// @) ierest (_ 'i:*@st | |||
// @) ierst (_ 'i:*st | |||
// @) iert (_ 'i:*t | |||
ierungs 'i:*UNs | |||
ierung 'i:*UN | |||
bakter) ie =I@ | |||
@@ -580,7 +614,7 @@ | |||
mitt (eC mIt | |||
mitt (l mIt | |||
_) mo (rb m%O | |||
_) motor mo:to:* | |||
_) motor m%o:to:* | |||
_) ms _^_EN | |||
musik m%u:zi:k | |||
@@ -631,6 +665,8 @@ | |||
r) oo (m u: | |||
z) oo (m u: | |||
&t) or (_ =o:* | |||
&) oren (_ 'o:*@n | |||
st) o (ss o: | |||
@@ -675,6 +711,8 @@ | |||
_) r @-* | |||
_) rh @-* | |||
rangier @-*A:NZ'i:* | |||
.group s | |||
_) s (_ Es | |||
s s | |||
@@ -823,6 +861,7 @@ | |||
_) u (rl u: | |||
_) u (rv u: | |||
us (_ Us | |||
_d) u (sch u: | |||
_) user _^_EN | |||
ol) u (t_ u: | |||
@@ -3,10 +3,11 @@ Phonemes which are used in the *_rules and *_list files | |||
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 | |||
g h j k l m n N | |||
@@ -46,9 +47,9 @@ E E2 E: e: I i: O o: | |||
OI U u: W y y: Y: | |||
* : ; 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 | |||
@@ -157,8 +158,8 @@ o: u u: y Y y: Y: | |||
* : b c C d dZ f | |||
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 |
@@ -935,6 +935,7 @@ hatred heItrId | |||
hazardous haz3d@s | |||
hedgehog hEdZh0g | |||
hehe hi:h'i: | |||
heifer hEf@ | |||
helium hi:li@m | |||
helix hi:lIks | |||
hello h@loU | |||
@@ -1582,6 +1583,7 @@ scaring ske@rIN | |||
scenic si:nIk | |||
scald sk0ld | |||
sclera skli@r@ | |||
scythe saID | |||
seabed si:bEd | |||
sealion si:laI@n | |||
seance seI0ns | |||
@@ -2242,6 +2244,7 @@ Pandora $2 | |||
Penelope p@nEl@pI2 | |||
Phoebe fi:bi: | |||
Rachel reItS@L | |||
Reilly raIlI2 | |||
Rica ri:ka2 | |||
Robert r0b3t | |||
Roderick r0drIk |
@@ -4860,10 +4860,11 @@ | |||
_C) y aI | |||
_C) y (ph aI | |||
_C) y (st I | |||
_CC) y aI | |||
XC) y aI | |||
_CCC) y aI | |||
CC) y (n_ I | |||
Cr) y I2 | |||
// Cr) y I2 | |||
_sC) y aI | |||
c) y (cl aI | |||
c) y (clic_ aI | |||
bic) y (cl I | |||
@@ -4872,6 +4873,7 @@ | |||
h) y (Cr aI | |||
c) y (lin I | |||
th) y (l_ aI | |||
fl) y aI | |||
gl) y (ph I | |||
k) y (l_ aI | |||
n) y (l_ aI | |||
@@ -4882,7 +4884,6 @@ | |||
@C) y (mAn_ I | |||
d) y (nas I | |||
w) y (n I | |||
cr) y (CC I | |||
gl) y (ce I | |||
d) yse (n Is@ | |||
f) y (_ aI |
@@ -15,7 +15,7 @@ _10 ti:z | |||
_1X tizEn | |||
_20 hu:s | |||
_2X huson | |||
_3X hArmints | |||
_3X hARmints | |||
_4X nEJvEn | |||
_5X YtvEn | |||
_6X hAtvAn | |||
@@ -53,7 +53,8 @@ ifj ifjAb: $dot | |||
mta $abbrev | |||
pl pe:lda:ul $dot | |||
stb SAtYb:i $dot | |||
ú.n u:JnEvEzEt: | |||
u.n u:JnEvEzEt: $dot | |||
ú.n u:JnEvEzEt: $dot | |||
vö v'EZd||_'Yss2E | |||
ii kEttY: $abbrev | |||
@@ -163,10 +164,32 @@ szor $u | |||
szer $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 | |||
(hogy az) hoJ,Az | |||
(hogy az) h,oJ,Az | |||
(hogy aki) h,oJ,Aki | |||
// Verbs | |||
@@ -262,9 +285,5 @@ _. pont | |||
// Names | |||
Engels ENgEls | |||
Kéthly ke:thli | |||
ricárd RiCARd | |||
richard RiCARd | |||
Szamuelly sAmuElli | |||
Szamuely sAmuElli | |||
ricárd RiCa:Rd | |||
richard RiCa:Rd |
@@ -14,14 +14,14 @@ | |||
b b | |||
bb b: | |||
biz (A b'iz, // TEST | |||
biz (A b'iz, // bizalmas etc. | |||
.group c | |||
c ts | |||
cc ts: | |||
cs tS | |||
ccs tS: | |||
cz ts | |||
!) cz ts // in names which start with a capital letter | |||
anar) ch (i C | |||
hierar) ch (i C | |||
@@ -31,6 +31,7 @@ hierar) ch (i C | |||
pszy) ch C | |||
mün) ch (en C | |||
maso) ch (istA C | |||
szé) ch tS | |||
kilen) c (sz ts | |||
kvar) c (sz ts | |||
@@ -49,6 +50,8 @@ hierar) ch (i C | |||
_szé) ché (ny tSe: | |||
_sto) ck (holm k | |||
_) church tSYRtS | |||
.group d | |||
d d | |||
@@ -139,6 +142,11 @@ _minde) gy (ik J: | |||
lly jj | |||
lj jj | |||
C) ly (_ li | |||
_kéth) ly li | |||
szamue) lly lli | |||
szamue) ly lli | |||
mi) ll (i l | |||
@@ -167,6 +175,9 @@ _minde) gy (ik J: | |||
.group o | |||
o o | |||
_r) oose (velt u:z | |||
.group ó | |||
ó o: | |||
@@ -185,11 +196,11 @@ _minde) gy (ik J: | |||
qu kv | |||
.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 | |||
s S | |||
@@ -204,6 +215,10 @@ _munká) s S | |||
sz (öld Sz | |||
va) s (zabl S|| | |||
_) semmelweiss sEmmElvEjs | |||
engel) s s | |||
_) saar sAAR | |||
.group t | |||
@@ -237,6 +252,8 @@ _munká) s S | |||
C) tyj c | |||
A) tyj (A c: | |||
_ka) ty (n ti | |||
.group u | |||
u u | |||
@@ -289,9 +306,15 @@ _szára) zs (ág z2S | |||
.group | |||
$ dolla:r | |||
. pont | |||
$ dolla:R | |||
ä e | |||
æ e | |||
ß s | |||
ç tS | |||
ñ n^ | |||
ø Y | |||
. pont | |||
. (. _: | |||
\.) . | |||
@@ -185,6 +185,10 @@ | |||
_) n(_ Enne | |||
n n | |||
n (g N | |||
n (ge n | |||
n (gé n | |||
n (gè n | |||
n (gi n | |||
n (k N | |||
.group o |
@@ -10,10 +10,12 @@ | |||
// 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 | |||
// 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 | |||
.group a | |||
@@ -41,6 +43,7 @@ | |||
.group c | |||
c k | |||
cc k: | |||
cch k:<h> // e.g. bracchium | |||
ch k<h> | |||
@@ -75,6 +78,7 @@ | |||
g g | |||
gg g: | |||
g (n N | |||
ggu (A g:w // Does this ever occur? | |||
gu (A gw //g<w> | |||
@@ -159,6 +163,7 @@ | |||
.group p | |||
p p | |||
pp p: | |||
pph p:<h> | |||
ph p<h> | |||
@@ -182,6 +187,7 @@ | |||
.group t | |||
t t | |||
tt t: | |||
tth t:<h> //Does this occur? It does at least across word boundaries e.g. leget Thyni | |||
th t<h> | |||
@@ -195,7 +201,7 @@ | |||
u (x+ U | |||
// Cases in which 'u' is pronounced as the semi-vowel /w/ | |||
A) u (A++ w | |||
_) u (++ w | |||
_) u (A+ w | |||
.group ū | |||
@@ -214,8 +220,8 @@ | |||
.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 |
@@ -8,7 +8,7 @@ | |||
en_sc 39 146 | |||
en_rp 34 144 | |||
en_wm 30 144 | |||
af 37 127 | |||
af 38 128 | |||
cy 29 122 | |||
de 30 121 | |||
eo 13 108 | |||
@@ -24,7 +24,7 @@ | |||
hr 19 129 | |||
sr 2 129 | |||
ru 36 124 | |||
it 12 114 | |||
it 15 116 | |||
la 21 114 | |||
es 6 114 | |||
pt 28 131 | |||
@@ -126,7 +126,7 @@ | |||
1 l/l_3 de | |||
2 l/la base | |||
2 l/le base | |||
1 l/L_eL_af af | |||
2 l/L_eL_af af | |||
2 l/li base | |||
4 l/l_long base fr la ro | |||
2 l/lo base | |||
@@ -438,7 +438,7 @@ | |||
1 vowel/aa_7 nl | |||
4 vowel/a_en en fr | |||
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 | |||
6 vowel/e_2 en_sc de hi sv no | |||
1 vowel/e_3 hu | |||
@@ -448,7 +448,7 @@ | |||
8 vowel/ee_1 base2 en en_n pl la sv no zh_yue | |||
3 vowel/ee_2 en cy nl | |||
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 | |||
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 | |||
@@ -471,7 +471,7 @@ | |||
2 vowel/ii_4 en_rp | |||
6 vowel/ii_en en en_n | |||
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 | |||
2 vowel/o-_2 en_n en_wm | |||
2 vowel/o_3 en_sc | |||
@@ -507,7 +507,7 @@ | |||
1 vowel/u_5 sw | |||
3 vowel/u_6 en_rp pt_pt | |||
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 | |||
3 vowel/uu_2 base2 de la | |||
1 vowel/uu_3 af |
@@ -0,0 +1,44 @@ | |||
// 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 | |||
@@ -3,32 +3,33 @@ | |||
0 ; NULL 0 NULL | |||
0 @- NULL 0 NULL | |||
0 * NULL 0 r | |||
1 R * 0 rr | |||
1 R * 0 r: | |||
0 R NULL 0 r | |||
1 p <h> 0 p_h | |||
1 t <h> 0 t_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 l/ NULL 0 l | |||
9 l/2 l 0 ll | |||
9 l/2 l 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 |
@@ -64,6 +64,14 @@ phoneme & // more open [E] | |||
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 | |||
vowel starttype (@) endtype l | |||
length 160 | |||
@@ -119,7 +127,7 @@ endphoneme | |||
phoneme @U | |||
vowel starttype (@) endtype (u) | |||
length 220 | |||
length 170 | |||
formants vdiph/Vu | |||
endphoneme | |||
@@ -205,7 +213,7 @@ endphoneme | |||
phoneme O: | |||
vowel starttype (o) endtype (o) | |||
length 240 | |||
length 280 | |||
formants vowel/oo_1 | |||
endphoneme | |||
@@ -76,7 +76,7 @@ endphoneme | |||
phoneme y: | |||
vowel starttype (u) endtype (u) | |||
length 220 | |||
length 270 | |||
formants vowel/y | |||
before r/ vwl_de/r_y+70 | |||
endphoneme |
@@ -23,14 +23,22 @@ phoneme e | |||
vowel starttype (e) endtype (e) | |||
length 170 | |||
formants vowel/e | |||
reduceto e/ 4 | |||
endphoneme | |||
phoneme e/ | |||
vowel starttype (e) endtype (e) | |||
length 170 | |||
formants vowel/e | |||
endphoneme | |||
phoneme E | |||
vowel starttype (e) endtype (e) | |||
length 170 | |||
formants vowel/e_mid | |||
reduceto e 4 // [E] only in stressed syllables | |||
// reduceto e/ 3 // [E] only in stressed syllables ? | |||
endphoneme | |||
@@ -46,6 +54,13 @@ phoneme o | |||
vowel starttype (o) endtype (o) | |||
length 170 | |||
formants vowel/o | |||
reduceto o/ 4 | |||
endphoneme | |||
phoneme o/ | |||
vowel starttype (o) endtype (o) | |||
length 170 | |||
formants vowel/o | |||
endphoneme | |||
@@ -53,8 +68,7 @@ phoneme O | |||
vowel starttype (o) endtype (o) | |||
length 170 | |||
formants vowel/oo_4 | |||
// formants vowel/0 | |||
reduceto o 4 // [O] only in stressed syllables | |||
// reduceto o/ 3 // [O] only in stressed syllables ? | |||
endphoneme | |||
@@ -62,6 +76,13 @@ phoneme u | |||
vowel starttype (u) endtype (u) | |||
length 160 | |||
formants vowel/u_bck | |||
reduceto U 4 | |||
endphoneme | |||
phoneme U | |||
vowel starttype (u) endtype (u) | |||
length 160 | |||
formants vowel/u_bck | |||
endphoneme | |||
@@ -1233,3 +1233,7 @@ include ph_zh_yue | |||
phonemetable sw base | |||
include ph_swahili | |||
phonemetable f_en base | |||
include pf_english |
@@ -651,6 +651,9 @@ void copy_rule_string(char *string, int &state) | |||
case '#': | |||
c = RULE_DEL_FWD; | |||
break; | |||
case '!': | |||
c = RULE_CAPITAL; | |||
break; | |||
case 'T': | |||
c = RULE_ALT1; | |||
break; |
@@ -1342,7 +1342,7 @@ void Translator::SetWordStress(char *output, unsigned int dictionary_flags, int | |||
if(v_stress > 0) | |||
*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 | |||
int reduce = 0; | |||
@@ -1368,8 +1368,9 @@ void Translator::SetWordStress(char *output, unsigned int dictionary_flags, int | |||
} | |||
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; | |||
} | |||
@@ -2071,6 +2072,13 @@ void Translator::MatchRule(char *word[], const char *group, char *rule, MatchRec | |||
failed = 1; | |||
break; | |||
case RULE_CAPITAL: | |||
if(word_flags & FLAG_FIRST_UPPER) | |||
match.points += 1; | |||
else | |||
failed = 1; | |||
break; | |||
case '.': | |||
// dot in pre- section, match on any dot before this point in the word | |||
for(p=pre_ptr; *p != ' '; p--) | |||
@@ -2802,23 +2810,28 @@ int Translator::LookupDictList(char *word1, char *ph_out, unsigned int *flags, i | |||
int found; | |||
char *word2; | |||
unsigned char c; | |||
int nbytes; | |||
int c2; | |||
char word[N_WORD_BYTES]; | |||
length = 0; | |||
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 | |||
// 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++] = '.'; | |||
word2 += 4; | |||
word2 += nbytes+3; | |||
} | |||
if(length > 0) | |||
{ | |||
// 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); | |||
if(found) | |||
{ |
@@ -192,6 +192,7 @@ BEGIN_EVENT_TABLE(MyFrame, wxMDIParentFrame) | |||
EVT_MENU(MENU_PATH1, MyFrame::OnOptions) | |||
EVT_MENU(MENU_PATH2, 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_DICT, MyFrame::OnTools) | |||
EVT_MENU(MENU_COMPILE_MBROLA, MyFrame::OnTools) | |||
@@ -356,12 +357,13 @@ void MyFrame::OnAbout(wxCommandEvent& WXUNUSED(event)) | |||
(void)wxMessageBox(wxString(buf,wxConvLocal), _T("About eSpeak Editor")); | |||
} | |||
void MyFrame::OnOptions(wxCommandEvent& event) | |||
{ | |||
void OnOptions2(int event_id) | |||
{//========================== | |||
wxString string; | |||
int value; | |||
switch(event.GetId()) | |||
switch(event_id) | |||
{ | |||
case MENU_PARAMS: | |||
value = wxGetNumberFromUser(_T(""),_T(""),_T("Speed"),option_speed,80,320); | |||
@@ -397,12 +399,29 @@ void MyFrame::OnOptions(wxCommandEvent& event) | |||
path_speech = string; | |||
} | |||
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(); | |||
} | |||
void MyFrame::OnOptions(wxCommandEvent& event) | |||
{//=========================================== | |||
OnOptions2(event.GetId()); | |||
} | |||
void MyFrame::OnTools(wxCommandEvent& event) | |||
{//========================================= | |||
int err; |
@@ -119,19 +119,9 @@ int TestSynthCallback(short *wav, int numsamples, espeak_EVENT *events) | |||
{//==================================================================== | |||
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) | |||
{ | |||
fprintf(f_events,"%5d %4d (%2d) %d ",events->audio_position,events->text_position,events->length,type); | |||
@@ -145,6 +135,17 @@ fprintf(f_events,"Finished\n"); | |||
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); | |||
} | |||
@@ -991,6 +992,7 @@ void ConvertToUtf8() | |||
fclose(f_in); | |||
fclose(f_out); | |||
wxLogStatus(_T("Written to: ")+fname+_T("_1")); | |||
} // end of ConvertToItf8 | |||
@@ -1163,11 +1165,7 @@ int x; | |||
} | |||
#endif | |||
char* text1[]= | |||
{ | |||
"Hello World. This is the second sentence", | |||
"Testing" | |||
}; | |||
char* text1 = "Hello World. This is the second sentence"; | |||
void TestTest(int control) | |||
{//======================= | |||
@@ -1183,7 +1181,7 @@ void TestTest(int control) | |||
//CharsetToUnicode("ISO-8859-4"); | |||
//CharsetToUnicode("ISCII"); | |||
return; | |||
//return; | |||
if(control==2) | |||
{ | |||
@@ -1209,20 +1207,18 @@ if(control==2) | |||
f_events = fopen("/home/jsd1/speechdata/text/events","w"); | |||
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); | |||
unsigned int unique_identifier=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_Synchronize(); | |||
// espeak_Cancel(); | |||
espeak_SetParameter(espeakPUNCTUATION, 1, 0); | |||
index++; | |||
espeak_Synth(text1[index], strlen(text1[index])+1, 0, POS_CHARACTER, 0, espeakSSML|espeakCHARS_UTF8, &unique_identifier, NULL); | |||
} | |||
@@ -36,8 +36,6 @@ | |||
*/ | |||
static int tone_pitch_env; /* used to return pitch envelope */ | |||
static int pitch_base = 128; | |||
static int pitch_range = 128; | |||
static int vowel_ix; | |||
@@ -444,36 +442,40 @@ static int count_increments(int ix, int end_ix, int min_stress) | |||
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 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; | |||
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; | |||
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 | |||
+ (pitch1 << 8) + (pitch2 << 17); | |||
@@ -136,6 +136,7 @@ enum { | |||
MENU_PATH1, | |||
MENU_PATH2, | |||
MENU_PATH3, | |||
MENU_PATH4, | |||
MENU_PROSODY, | |||
MENU_COMPILE_PH, |
@@ -93,6 +93,8 @@ wxMenuBar *MakeMenu(int type) | |||
paths_menu->Append(MENU_PATH1, _T("Phoneme data source")); | |||
paths_menu->Append(MENU_PATH2, _T("Dictionary data source")); | |||
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->Append(MENU_PATHS, _T("Set &paths"), paths_menu); |
@@ -49,6 +49,7 @@ wxString path_voices; | |||
wxString path_phsource; | |||
wxString path_dictsource; | |||
wxString path_speaktext; | |||
wxString path_modifiervoice; | |||
wxString path_dir1; | |||
int option_speed=160; | |||
@@ -167,6 +168,7 @@ void ConfigInit() | |||
pConfig->Read(_T("/phsource"),&path_phsource,basedir+_T("/phsource")); | |||
pConfig->Read(_T("/dictsource"),&path_dictsource,basedir+_T("/dictsource")); | |||
pConfig->Read(_T("/speaktext"),&path_speaktext,wxEmptyString); | |||
pConfig->Read(_T("/modifiervoice"),&path_modifiervoice,basedir); | |||
pConfig->Read(_T("/dir1"),&path_dir1,basedir); | |||
option_speed = pConfig->Read(_T("/speed"),160); | |||
ConfigSetPaths(); | |||
@@ -193,6 +195,7 @@ void ConfigSave(int exit) | |||
pConfig->Write(_T("/dictsource"),path_dictsource); | |||
pConfig->Write(_T("/speaktext"),path_speaktext); | |||
pConfig->Write(_T("/speed"),option_speed); | |||
pConfig->Write(_T("/modifiervoice"),path_modifiervoice); | |||
pConfig->Write(_T("/dir1"),path_dir1); | |||
if(exit) |
@@ -35,6 +35,7 @@ extern wxString path_pitches; | |||
extern wxString path_voices; | |||
extern wxString path_phsource; | |||
extern wxString path_dictsource; | |||
extern wxString path_modifiervoice; | |||
extern wxString path_dir1; | |||
extern char path_source[80]; | |||
@@ -42,6 +43,8 @@ extern char path_dsource[120]; | |||
extern int option_speed; | |||
extern void OnOptions2(int event_id); | |||
// not currently used | |||
class Options : public wxDialog { | |||
public: |
@@ -440,6 +440,9 @@ static espeak_ERROR Synthesize(unsigned int unique_identifier, const void *text, | |||
{ | |||
// 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 | |||
event_list[0].type = espeakEVENT_LIST_TERMINATED; | |||
if(SpeakNextClause(NULL,NULL,1)==0) | |||
{ | |||
#ifdef USE_ASYNC |
@@ -28,6 +28,12 @@ | |||
#include <stdio.h> | |||
#define ESPEAK_API_REVISION 2 | |||
/* | |||
Revision 2 | |||
Added parameter "options" to eSpeakInitialize() | |||
*/ | |||
/********************/ | |||
/* Initialization */ | |||
/********************/ |
@@ -28,6 +28,7 @@ | |||
#include "phoneme.h" | |||
#include "synthesize.h" | |||
#include "spect.h" | |||
#include "options.h" | |||
#include "wx/txtstrm.h" | |||
#include "wx/brush.h" | |||
#include "wx/datstrm.h" | |||
@@ -37,6 +38,7 @@ extern int PeaksToHarmspect(wavegen_peaks_t *peaks, int pitch, int *htab, int co | |||
extern unsigned char pk_shape1[]; | |||
extern int pk_select; | |||
extern char voice_name[]; | |||
wxPen BLUE_PEN(wxColour(0,0,255),2,wxSOLID); | |||
wxBrush BRUSH_SELECTED_PEAK(wxColour(255,180,180),wxSOLID); | |||
@@ -381,6 +383,18 @@ void SpectFrame::ApplyVoiceMods() | |||
{//============================== | |||
// apply the modifications to the formants which are defined in the current voice | |||
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++) | |||
{ | |||
@@ -389,6 +403,7 @@ void SpectFrame::ApplyVoiceMods() | |||
peaks[pk].pkwidth = (peaks[pk].pkwidth * voice->width2[pk])/256; | |||
peaks[pk].pkright = (peaks[pk].pkright * voice->width2[pk])/256; | |||
} | |||
LoadVoice(voice_name1,1); | |||
} | |||
@@ -549,7 +549,9 @@ void MbrolaTranslate(PHONEME_LIST *plist, int n_phonemes, FILE *f_mbrola) | |||
{ | |||
name = '_'; | |||
len = (p->length * speed_factor1)/256; | |||
if(len == 0) continue; | |||
// if(len == 0) continue; | |||
if(len == 0) | |||
len = 1; | |||
} | |||
else | |||
len = (70 * speed_factor2)/256; |
@@ -35,7 +35,7 @@ | |||
#include "translate.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; | |||
int option_device_number = -1; |
@@ -660,12 +660,29 @@ static void SmoothSpect(void) | |||
for(pk=0; pk<6; pk++) | |||
{ | |||
int f1, f2; | |||
if((frame->frflags & FRFLAG_BREAK_LF) && (pk < 3)) | |||
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(modified == 0) | |||
@@ -726,17 +743,30 @@ static void SmoothSpect(void) | |||
frame = frame2 = (frame_t *)q[3]; | |||
modified = 0; | |||
if(frame->frflags & FRFLAG_BREAK) | |||
if(frame1->frflags & FRFLAG_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 | |||
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(modified == 0) |
@@ -352,7 +352,7 @@ Translator *SelectTranslator(const char *name) | |||
tr->langopts.stress_rule = 0; | |||
tr->langopts.stress_flags = 0x10; | |||
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); | |||
SetLetterBits(tr,4,"kpst"); // Letter group F | |||
@@ -381,6 +381,7 @@ Translator *SelectTranslator(const char *name) | |||
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_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; | |||
} | |||
break; | |||
@@ -682,7 +683,7 @@ Translator_Russian::Translator_Russian() : Translator() | |||
langopts.param[LOPT_UNPRONOUNCABLE] = 0x432; // [v] don't count this character at start of word | |||
langopts.param[LOPT_REGRESSIVE_VOICING] = 1; | |||
langopts.param[LOPT_KEEP_UNSTR_VOWEL] = 1; | |||
langopts.param[LOPT_REDUCE] = 2; | |||
langopts.stress_rule = 5; | |||
langopts.stress_flags = 0x0020; // waas 0x1010 | |||
@@ -631,10 +631,6 @@ int Translator::TranslateWord(char *word1, int next_pause, WORD_TAB *wtab) | |||
word_length++; | |||
} | |||
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 | |||
// we may just find some flags | |||
@@ -679,9 +675,6 @@ if((wmark > 0) && (wmark < 8)) | |||
} | |||
} | |||
#ifdef DEBUG3 | |||
printf("TR2 spell_word=%d\n",spell_word); | |||
#endif | |||
if(spell_word > 0) | |||
{ | |||
// Speak as individual letters | |||
@@ -714,9 +707,6 @@ printf("TR2 spell_word=%d\n",spell_word); | |||
{ | |||
// This word looks "unpronouncable", so speak letters individually until we | |||
// find a remainder that we can pronounce. | |||
#ifdef DEBUG3 | |||
printf("TR3 length=%d\n",length); | |||
#endif | |||
word += TranslateLetter(word,phonemes,0); | |||
if(phonemes[0] == phonSWITCH) | |||
{ |
@@ -116,6 +116,7 @@ | |||
#define RULE_NONALPHA 16 // Z non-alpha | |||
#define RULE_LETTERGP 17 // A B C H F G Y 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_NOTVOWEL 25 // K | |||
#define RULE_IFVERB 26 // V | |||
@@ -230,8 +231,9 @@ extern const int param_defaults[N_SPEECH_PARAM]; | |||
#define LOPT_IT_DOUBLING 8 | |||
// max. amplitude for vowel at the end of a clause | |||
#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 | |||
// bits 0-3 N syllables | |||
// bit 4=only if the second word has $alt attribute |
@@ -66,7 +66,7 @@ extern USHORT voice_pcnt[N_PEAKS+1][3]; | |||
extern voice_t *voice; | |||
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); | |||
void WavegenSetVoice(voice_t *v); | |||
void ReadTonePoints(char *string, int *tone_pts); |
@@ -52,7 +52,8 @@ int tone_points[10] = {600,170, 1200,135, 2000,110, 3000,110, -1,0}; | |||
// 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, 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 | |||
@@ -498,11 +499,12 @@ static int Read8Numbers(char *data_in,int *data) | |||
} | |||
voice_t *LoadVoice(char *vname, int control) | |||
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 | |||
// bit 4 1 = vname = full path | |||
FILE *f_voice = NULL; | |||
keywtab_t *k; | |||
@@ -545,16 +547,25 @@ voice_t *LoadVoice(char *vname, int control) | |||
if(voicename[0]==0) | |||
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"); | |||
@@ -788,6 +799,11 @@ voice_t *LoadVoice(char *vname, int control) | |||
case V_BREATH: | |||
voice->breath[0] = Read8Numbers(p,&voice->breath[1]); | |||
for(ix=1; ix<8; ix++) | |||
{ | |||
if(ix & 1) | |||
voice->breath[ix] = -voice->breath[ix]; | |||
} | |||
break; | |||
case V_BREATHW: |
@@ -1063,7 +1063,7 @@ int ApplyBreath(void) | |||
for(ix=1; ix < N_PEAKS; ix++) | |||
{ | |||
if((amp = wvoice->breath[ix]) > 0) | |||
if((amp = wvoice->breath[ix]) != 0) | |||
{ | |||
amp *= (peaks[ix].height >> 13); | |||
value += int(resonator(&rbreath[ix],noise) * amp); |
@@ -29,6 +29,14 @@ | |||
#include <stdio.h> | |||
#define ESPEAK_LIB_REVISION 2 | |||
/* | |||
Revision 2 | |||
Added parameter "options" to eSpeakInitialize() | |||
*/ | |||
/********************/ | |||
/* Initialization */ | |||
/********************/ | |||
@@ -41,8 +49,7 @@ typedef enum { | |||
espeakEVENT_MARK, // Mark | |||
espeakEVENT_PLAY, // Audio element | |||
espeakEVENT_END, // End of sentence | |||
espeakEVENT_MSG_TERMINATED, // End of message | |||
espeakEVENT_PHONEME // Phoneme, if enabled in espeak_Initialize() | |||
espeakEVENT_MSG_TERMINATED // End of message | |||
} espeak_EVENT_TYPE; | |||
@@ -56,7 +63,7 @@ typedef struct { | |||
int sample; // sample id (internal use) | |||
void* user_data; // pointer supplied by the calling program | |||
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 | |||
} id; | |||
} espeak_EVENT; | |||
@@ -139,7 +146,7 @@ typedef enum { | |||
#ifdef __cplusplus | |||
extern "C" | |||
#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. | |||
output: the audio data can either be played by eSpeak or passed back by the SynthCallback function. | |||
@@ -147,10 +154,7 @@ ESPEAK_API int espeak_Initialize(espeak_AUDIO_OUTPUT output, int buflength, cons | |||
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*); | |||
@@ -368,9 +372,9 @@ ESPEAK_API espeak_ERROR espeak_SetParameter(espeak_PARAMETER parameter, int valu | |||
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: | |||
value in espeak_PUNCT_TYPE (none, all, some), |