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
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@ |
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 |
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:@ |
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: | ||||
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 |
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 |
_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 |
_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 |
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 | |||||
. (. _: | . (. _: | ||||
\.) . | \.) . | ||||
_) 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 |
// 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 |
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 |
// 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 | |||||
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 |
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 | ||||
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 |
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 | ||||
phonemetable sw base | phonemetable sw base | ||||
include ph_swahili | include ph_swahili | ||||
phonemetable f_en base | |||||
include pf_english |
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; |
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) | ||||
{ | { |
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; |
{//==================================================================== | {//==================================================================== | ||||
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); | |||||
} | } | ||||
*/ | */ | ||||
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); | ||||
MENU_PATH1, | MENU_PATH1, | ||||
MENU_PATH2, | MENU_PATH2, | ||||
MENU_PATH3, | MENU_PATH3, | ||||
MENU_PATH4, | |||||
MENU_PROSODY, | MENU_PROSODY, | ||||
MENU_COMPILE_PH, | MENU_COMPILE_PH, |
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); |
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) |
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: |
{ | { | ||||
// 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 |
#include <stdio.h> | #include <stdio.h> | ||||
#define ESPEAK_API_REVISION 2 | |||||
/* | |||||
Revision 2 | |||||
Added parameter "options" to eSpeakInitialize() | |||||
*/ | |||||
/********************/ | /********************/ | ||||
/* Initialization */ | /* Initialization */ | ||||
/********************/ | /********************/ |
#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); | |||||
} | } | ||||
{ | { | ||||
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; |
#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; |
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) |
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 | ||||
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) | ||||
{ | { |
#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 |
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); |
// 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: |
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); |
#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), |