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), |