Provide Viseme events on the Windows SAPI5 interface. git-svn-id: https://espeak.svn.sourceforge.net/svnroot/espeak/trunk@199 d46cf337-b52f-0410-862d-fd96e6ae7743master
| @@ -148,6 +148,7 @@ _roman rum'eIns@ | |||
| // Place names | |||
| afganistan afg'anistan | |||
| alaska al'aska | |||
| algerië alx2'e@re@:@- | |||
| antwerpen antv&rp@n | |||
| @@ -160,6 +161,7 @@ bermuda $2 | |||
| bethlehem bEt_liEm | |||
| boedapest budapEst | |||
| boekarest bukarEst | |||
| bolivië bul'Ivi:@ | |||
| bonnievale _^_EN | |||
| brittanje $2 | |||
| brooklyn _^_EN | |||
| @@ -196,6 +198,7 @@ hermon $1 | |||
| hirosjima hiruS'ima | |||
| israel IsraI:l | |||
| italië it'A:li;@ | |||
| kalafong kalaf'ON | |||
| kanada kanad%a | |||
| kanaän kA:nA:an | |||
| kaïro ka_'iru | |||
| @@ -309,6 +312,7 @@ der d@r | |||
| derick dErik | |||
| deventer d'e@v@nt@r | |||
| diana dij'A:na | |||
| donaldson _^_EN | |||
| du $u | |||
| (du pisanie) du||pis'A:ni | |||
| (du plessis) du||pl@s'i | |||
| @@ -640,6 +644,8 @@ dis $u | |||
| aangaande $2 | |||
| aanstaande $2 | |||
| adagio ad'A:dZi;%@U | |||
| afgaanse afg'A:ns@ | |||
| afgane afg'A:n@ | |||
| africana $3 | |||
| afkere afke@r@ | |||
| agamemnon ax2am'EmnOn | |||
| @@ -650,14 +656,12 @@ algaande $2 | |||
| alge alx2@ | |||
| algehele alx2@h,e@l@ | |||
| allegro al'Egru | |||
| alles al@s | |||
| almiskie $3 | |||
| alom al_'Om | |||
| alreeds $2 | |||
| alternatiewe $4 | |||
| amen A:mEn | |||
| anale an'A:l@ | |||
| //###anatomie $4 $only | |||
| asof asOf | |||
| asook %as_o@k | |||
| aspris $2 | |||
| @@ -674,7 +678,7 @@ bene be@n@ | |||
| beswil bEsv@l | |||
| besnedene b@sne@d@n@ | |||
| bestes bEst@s | |||
| beta be@ta | |||
| beta be@ta $only | |||
| bewe be@v@ | |||
| bewend be@v@nt | |||
| bewering b@ve@rIN | |||
| @@ -766,7 +770,6 @@ hokaai hOkAI | |||
| hoofsaaklik $2 | |||
| hoogedele ho@x2 _e@d@l@ | |||
| hosanna hus'ana | |||
| //###huigelary $4 | |||
| ibis $1 | |||
| idee $2 | |||
| @@ -941,7 +944,6 @@ sinagoge s@n@x2o@x2@ | |||
| senatore s@nat'o@r@ | |||
| singenot sInx2@nOt | |||
| sir _^_EN | |||
| skares skA:r@s | |||
| skepsele skEps@l@ | |||
| skuldelas skWld@las | |||
| s'n s@n $u | |||
| @@ -1003,7 +1005,6 @@ verse f&:rs@ | |||
| vers f&:rs | |||
| verste f&rst@ | |||
| verte f&rt@ | |||
| vertes f&rt@s | |||
| verweg f&:rv&x2 | |||
| via via | |||
| volheid $1 | |||
| @@ -68,7 +68,6 @@ | |||
| a (riA 'A: // akwarium/barium/estuarium/herbarium/seminaria | |||
| a (ristokr %a // shorten 1st a: aristokrasie/-kraat/-krate/-kraties | |||
| arm (last %ar@-m // move default stress: armlastig/-e | |||
| @C) as (_ as // shorten final a of words ending in -as: rigtingvas/jonkmanskas, etc. | |||
| C) asie 'A:si | |||
| @@@@) asie A:s%i | |||
| oub) asie A:si // restore default stress: oubasie/-s | |||
| @@ -256,6 +255,7 @@ | |||
| ar (seen %ar | |||
| ar (tikel %ar // stress: artikel and compounds | |||
| artiku %art%ik%y // stress and vowel sounds: artikulasie/artikuleer | |||
| @C) as (_ as // shorten final a of words ending in -as: rigtingvas/jonkmanskas, etc. | |||
| _) a (sië A: // fix stress and a sound: Asië/-r/-rs | |||
| _) a (strA %a // astrant/astrale/astraal | |||
| artille (rie %art@l@ // stress and vowel sounds: artillerie and compounds | |||
| @@ -854,6 +854,7 @@ | |||
| CAC) e (CC @ // fix e sound: nalatenskap/wapenstilstand | |||
| CAC) e (C% E // beesfilette/nougesette/onderbesette/voortgesette | |||
| juwel) e (C @ // fix e sound: juwelekissie and similar compounds | |||
| fontein) e (C @_ // fix e sound: Fonteinesirkel/-wisselaar, etc. | |||
| kening) e (@ @ // fix e sound: rekeningeklerk/-navraag and similar | |||
| narkos) e (C @ // fix e sound: narkosedood/-gas/-masker/-middel/-rekords, etc. | |||
| ooi) e (C @ // fix e sound: dooiepunt/ooievaar and similar | |||
| @@ -1048,7 +1049,7 @@ | |||
| AAv) eer e@r // restore default stress: pouveer/makouveer/horlosieveer/kraaiveer/rooiveer | |||
| w) eer e@r // stress may vary in words containing weer: lugafweer/donderweer | |||
| u) eer 'e@r // aktueer/konstrueer/salueer, etc. | |||
| effek %e@fEk // move default stress and fix e sound: effek/-te/-tief | |||
| effek (K %ifEk // move default stress and fix e sound: effek/-te/-tief/rimpeleffek | |||
| eienaardig %eI@nA:rd@x2 // move default stress: eienaardig/-ste | |||
| @) ein (dig 'eIn // nimmereindige/nimmereindigend | |||
| eind (eks eInt_ // fix d sound and make short pause: eindeksamen/-s and compounds | |||
| @@ -1967,6 +1968,11 @@ | |||
| j j | |||
| j (j | |||
| ja (broer jA: // fix a sound: jabroer/-s | |||
| _) jag (A j''ax2_ // fix stress and a sound: jagavontuur/-ekspedisie/-entoesias/-eskader/-instink... | |||
| jag (end jA:x2 // but long a in jagend/-e and compounds | |||
| jag (er jA:x2 // long a in jager and compounds | |||
| jag (ing jA:x2 // long a in (ver)jaging and similar | |||
| jaguar jagwar // fix a, g and u sounds: jaguar and compounds | |||
| _) ja (CobA j%a // fix stress and a sound: Jacoba/Jacobus/Jakobus | |||
| jakaranda j%ak%ar'anda //jakaranda and compounds | |||
| jakopewer j%ak%Ope@v@r_ // fix stress and vowel sounds: jakopewer/-oë | |||
| @@ -3374,6 +3380,7 @@ | |||
| profesie prOf@s'i // fix vowel sounds and move stress | |||
| profit (e pr%Of@t // fix stress and vowel sounds: profiteer/-tering | |||
| pro (gram pr%u // fix stress and o sound: program/-e/ontwikkelingsprogram | |||
| programme (ring pr%ux2r%ame@ // fix e sound and stress: (rekenaar)programmering(staal), etc. | |||
| pro (gress pr%o@ // fix stress and o sound: progressie/-f/-we | |||
| pro (CA pr%u // probeer/produk/proses/professie/provinsie | |||
| produk (A pr%udWk_ // fix u sound, pause: produkopsies/-uitstalling, etc. | |||
| @@ -3510,6 +3517,7 @@ | |||
| regime (_ r@Zi:m // regime/-s and compounds | |||
| regi (ment r@x2@ // fix stress and e and i sounds: regement/-e and compounds | |||
| regimen (ta@ r%Ex2%im%En // fix stress: regimentaal/-tale | |||
| regi (sseuC r@x2@ // fix stress and e sound: (film-/kuns-/mede-/musiek-/oorklankings-)regisseur/-sseuse | |||
| reg (ist r@x2 // registrasie/-nommer/register/bevolkingsregister | |||
| regle (ment r@x2l@ // fix stress and e sounds: reglement/-e and compounds | |||
| regverdig r&x2f'&rd@x2 // regverdig/onregverdige/regverdigheid - verwyder uit af_list | |||
| @@ -3576,6 +3584,7 @@ | |||
| .group s | |||
| s s | |||
| s (s | |||
| @) s (_S1q s // to correctly handle plurals of propernames in af_list: Jouberts, etc. | |||
| @@@) s (_S1 s // to correctly handle plural s | |||
| i) s (_ s // exceptions to rule: @@@) s (_S1 s | |||
| se (_ s@ //the word se and some ending in se | |||
| @@ -3630,7 +3639,7 @@ | |||
| seroto (ni s%Er@t%u // fix stress and vowel sounds: serotonien(vlakke, etc.) | |||
| sitrus s'itr%Ws_ //i sound and stress in compounds | |||
| saamge (P6 s'A:mx2@ // saamgepers/-de/saamgetel/saamgeêet | |||
| _) saam (P4 s'A:m // saamgepers/-de/saamgetel/saamgeêet/saampers | |||
| saamgee sA:mx2e@ // fix ee in saamgee; see rule: saamge (P6 | |||
| sabot (A s%ab%ut // sabotasie/saboteer | |||
| safari s%afA:r%i // fix 1st a: safari/safaripak, etc. | |||
| @@ -4029,10 +4038,12 @@ | |||
| straa) t (j t // split tj sound: straat(jas/-joggie/-jonge/-joernaal) | |||
| ui) tj tj // uitjaag/uitjou/uitjubel | |||
| ui) tjie ci // beskuitjie/fluitjie/ruitjie/uitjie, etc. | |||
| @) tjoernali tj%urn%al@ // fix stress, split t/j: front-/koerant-/sport-/vryskutjoernalis, etc. | |||
| _) th (@@ t | |||
| @) th (C t // drop h: Bothma/Neethling and similar | |||
| _) theu t''Y@ // Theuns/Theunis | |||
| _) th _^_EN // if only one vowel character | |||
| @) thy (_ _^_EN // words and names ending in -thy are English: Cathy, etc. | |||
| @) th (_N _^_EN | |||
| @) tion (_ _^_EN //words ending in tion is English | |||
| @) tions (_ _^_EN //words ending in tions is English | |||
| @@ -384,11 +384,6 @@ synchro) ni ni | |||
| qu kv | |||
| .group r | |||
| // r r | |||
| // A) r (A * | |||
| // C) r (A @-* | |||
| // rr *r | |||
| // right rajt | |||
| K) r (K r- | |||
| r R | |||
| @@ -589,6 +589,13 @@ | |||
| &) ie (r_ 'i: | |||
| u) ie (r_ _|'i: | |||
| &) ie (rlich 'i: | |||
| bank) ie (r I'e: | |||
| barr) ie (r I'e: | |||
| financ) ie (r I'e: | |||
| hotel) ie (r I'e: | |||
| prem) ie (r I'e: | |||
| hyg) ie (n I'e: | |||
| ital) ie (n I'e: | |||
| d) ienst i:nst | |||
| r) ien (@ IEn | |||
| &) ien (_ =I@n | |||
| @@ -15,6 +15,19 @@ n N p r s S t tS | |||
| v w x2 z Z | |||
| Dictionary bn_dict | |||
| & a a: a~ e E e~ i | |||
| I i: i:~ i~ l- o O o: | |||
| o~ O~ r- U u u: u:~ u~ | |||
| * b B c C ch d d. | |||
| g h j J k kh l m | |||
| n N n. n^ p ph Q r | |||
| r. s S s. t t. t.h th | |||
| tS x z | |||
| Dictionary cs_dict | |||
| @- a a: aU e e: eI eU | |||
| @@ -277,6 +290,34 @@ n^ p r R s S t tS | |||
| ts tS; v x z Z | |||
| Dictionary ml_dict | |||
| a a: aI aU e E e: i | |||
| I i: o o: r- u u: V | |||
| y | |||
| : b c ch d d. dZ f | |||
| g h j J k kh l l. | |||
| m n N n. n^ p ph R | |||
| R2 s s. S; t t. t.h th | |||
| tS v w z z. | |||
| Dictionary ne_dict | |||
| @ @- @2 @3 a a: aI aU | |||
| a~ e E e: E: E~ e~ i | |||
| I i: i~ l- o O o: O: | |||
| o~ O~ r- U u u: u~ V | |||
| - : b c ch d d. f | |||
| g h H j J k kh l | |||
| l. m n N n. n^ p ph | |||
| Q q r r. s S s. t | |||
| T t. t.h th v w x z | |||
| z. | |||
| Dictionary nl_dict | |||
| 8 @ @- A a: E e: EI | |||
| @@ -470,42 +511,13 @@ l m n N p r s t | |||
| tS v w z | |||
| Dictionary ml_dict | |||
| a a: aI aU e E e: i | |||
| I i: o o: r- u u: V | |||
| y | |||
| : b c ch d d. dZ f | |||
| g h j J k kh l l. | |||
| m n N n. n^ p ph R | |||
| R2 s s. S; t t. t.h th | |||
| tS v w z z. | |||
| Dictionary bn_dict | |||
| Dictionary lv_dict | |||
| & a a: a~ e E e~ i | |||
| I i: i:~ i~ l- o O o: | |||
| o~ O~ r- U u u: u:~ u~ | |||
| a a: ai au e e: ei i | |||
| i: ie iu o o: oi u u: | |||
| ui uo | |||
| * b B c C ch d d. | |||
| g h j J k kh l m | |||
| n N n. n^ p ph Q r | |||
| r. s S s. t t. t.h th | |||
| tS x z | |||
| Dictionary ne_dict | |||
| @ @- @2 @3 a a: aI aU | |||
| a~ e E e: E: E~ e~ i | |||
| I i: i~ l- o O o: O: | |||
| o~ O~ r- U u u: u~ V | |||
| - : b c ch d d. f | |||
| g h H j J k kh l | |||
| l. m n N n. n^ p ph | |||
| Q q r r. s S s. t | |||
| T t. t.h th v w x z | |||
| z. | |||
| b c d dZ f g h j | |||
| J k l l^ m n N n^ | |||
| p R R2 s S t tS ts | |||
| v z Z | |||
| @@ -350,6 +350,9 @@ prof $dot | |||
| rev $dot | |||
| st $dot | |||
| // not abbreviations when all-caps | |||
| all O:l $allcaps | |||
| no noU $allcaps | |||
| // MAIN WORD DICTIONARY | |||
| @@ -451,7 +454,6 @@ alfalfa alf'alf@ | |||
| alias eIli@s | |||
| alibi al@baI | |||
| alkali alk@laI | |||
| all O:l $allcaps // not abbrev. | |||
| allay a2leI | |||
| allegiance a2li:dZ@ns | |||
| allele a2li:l | |||
| @@ -597,6 +599,7 @@ barometer b@r0mI2t3 | |||
| barrage barA:Z | |||
| basis beIsIs | |||
| bass beIs | |||
| baste beIst | |||
| bastion basti@n | |||
| batman batman | |||
| bayou baIu: | |||
| @@ -937,6 +940,7 @@ edit EdIt | |||
| edition I2dIS@n | |||
| edwardian Edw'O@di@n | |||
| efile i:faIl | |||
| egg Eg // egging | |||
| eh eI | |||
| el ,El | |||
| electricity I2lEktr'IsI2tI | |||
| @@ -1795,6 +1799,7 @@ saline seIlaIn | |||
| san ,san | |||
| sardine $2 | |||
| satan seIt@n | |||
| satanist seIt@nIst | |||
| saucepan sO:sp@n | |||
| saudi saUdI | |||
| says sEz | |||
| @@ -1852,6 +1857,7 @@ sierra sI'e@r@ | |||
| signage saInI2dZ | |||
| sikh si:k | |||
| silhouette sI2lUw'Et | |||
| silo saIloU | |||
| simon saIm@n | |||
| simultaneous $3 | |||
| singly sINglI $verbf | |||
| @@ -2421,7 +2427,6 @@ Denise d@ni:s | |||
| Derek dErIk | |||
| Dinah daIn@ | |||
| Dominic d0mI2nIk | |||
| Donald d0n@Ld | |||
| Doris d0rIs | |||
| Dougall du:g@L | |||
| Dylan dIl@n | |||
| @@ -29,6 +29,8 @@ | |||
| // ?7 Scottish | |||
| // ?8 Use full vowel, not schwa in some word endings | |||
| .L01 l r | |||
| .replace | |||
| ff ff // ligature | |||
| fi fi | |||
| @@ -2348,7 +2350,7 @@ | |||
| _) exc (e %Eks | |||
| exc (i %Eks | |||
| exc (elle Eks | |||
| ex (e+ Eks | |||
| C) ex (e Eks | |||
| exe (cutio EksI | |||
| ex (erc Eks | |||
| _) ex (A %Egz | |||
| @@ -2533,6 +2535,7 @@ | |||
| @) i (butive 'I | |||
| @) i (butor 'I | |||
| &) i (c_ =I | |||
| &) i (ciCe_ =I | |||
| &) i (ca_ =I | |||
| &) ico (_ =I2koU | |||
| &) i (cal =I | |||
| @@ -3714,6 +3717,7 @@ | |||
| pers) on @n | |||
| pers) on (i '0n | |||
| postp) on 'oUn | |||
| on (ald 0n | |||
| d) on (at %oUn | |||
| on (an_ oUn | |||
| _) on (io Vn | |||
| @@ -4322,6 +4326,7 @@ | |||
| rhyth rID | |||
| _) rm ,A@Em | |||
| rrhoea r'i@ | |||
| _) ru (bL01 ru: | |||
| _) run (a rVn | |||
| _) run (o rVn | |||
| _) rw r%U | |||
| @@ -24,7 +24,7 @@ | |||
| // 2006-11-18 Gilles Casse <[email protected]> | |||
| // | |||
| // Updated 2008-10-13 Michel Such <[email protected]> | |||
| // Updated 2008-10-24 Michel Such <[email protected]> | |||
| // | |||
| // * Numbers, a few abbreviations and exceptions. | |||
| // | |||
| @@ -268,6 +268,7 @@ anpe $abbrev | |||
| api $abbrev | |||
| avh aveaS | |||
| bd boulevard $text | |||
| brltty $abbrev | |||
| cci $abbrev | |||
| cio $abbrev | |||
| ctrl control $text $pause | |||
| @@ -23,7 +23,7 @@ | |||
| // 2006-11-18 Gilles Casse <[email protected]> | |||
| // | |||
| // Updated: 2008-10-16 Michel Such <[email protected]> | |||
| // Updated: 2008-11-01 Michel Such <[email protected]> | |||
| // | |||
| // Letter classes: | |||
| @@ -70,6 +70,8 @@ | |||
| a (nnA a // manne | |||
| an (K A~ // ancien, élan | |||
| @@m) an (_ an // tennisman | |||
| lism) an (_ A~ // talisman | |||
| _C) aon (_ A~ // faon, paon, taon | |||
| s) aoul (_ u // saoul | |||
| s) aou (le u // saoule | |||
| @@ -83,6 +85,7 @@ | |||
| _) auto (@P4 oto | |||
| _) autom (n otO | |||
| _) au (treX o2 | |||
| bb) aye (X ei // abbaye | |||
| p) a (ys E // pays paysage | |||
| ay (C E // aymé | |||
| ay Ej // paye | |||
| @@ -116,9 +119,11 @@ | |||
| cc (Y ks // accéder | |||
| cc k // occuper | |||
| _) ch (arism k // charisme, charismatique | |||
| _) ch (irop k // chiroptère | |||
| a) ch (_ k // almanach | |||
| e) ch (_ k // varech | |||
| _A) ch (o_ k // écho | |||
| mani) ch (é k // manichéisme | |||
| _eu) ch (ari k // eucharistie | |||
| or) ch (esC k // orchestre | |||
| or) ch (iC k // orchidée | |||
| @@ -230,6 +235,7 @@ _) ç' (P2v s | |||
| CC) ein (_ E~n2 // plein emploi | |||
| e (il E // vieille | |||
| ei E // neige | |||
| eoi wA // asseoir | |||
| ell El // selle | |||
| el (K El // celsius, caramel | |||
| _f) em (me a // femme | |||
| @@ -248,18 +254,18 @@ _) ç' (P2v s | |||
| em (p A~ | |||
| en (_ A~n2 // en | |||
| en (hA A~n // enharmonique | |||
| en (A A~n // enivrer | |||
| _) en (A A~n // enivrer | |||
| C) en (d_ A~ // comprend dépend | |||
| od) en (dr E~ // rhododendron | |||
| qu) en (d_ A~ | |||
| pati) en A~ // patient patience | |||
| X) en (nu A~ // ennui | |||
| en (nu A~ // ennui | |||
| en (nA E // penne ennemi | |||
| C) en (A @n // menu | |||
| é) en (_ E~ // européen | |||
| en (nA E // penne ennemi | |||
| Ci) en (nA E // mienne | |||
| éC) en (t_ A~ // récent différent élément | |||
| @@ -579,6 +585,7 @@ _) ç' (P2v s | |||
| vin) gt (_sept t | |||
| vin) gt (_huit t | |||
| vin) gt (_neuf t | |||
| vin) gt (_neuvi t | |||
| gt (_ // vingt doigts | |||
| @@ -794,7 +801,6 @@ _) half _^_en | |||
| _) n' (P2v n | |||
| A) ng (_ N // parking meeting | |||
| nn n // panne | |||
| _) n (_° nymero | |||
| _) neuro (@@P5 nYro | |||
| @@ -990,6 +996,7 @@ mou) rr rr // mourrai | |||
| s s // verser sien | |||
| s (_S1 z2 | |||
| stein (_ Stajn | |||
| _) s' (P2v s // s'amène | |||
| _) s' (esXP2v s // s'amène | |||
| @@ -1079,7 +1086,6 @@ _tou) s (_leurs_ | |||
| _) sky _^_en | |||
| _) smil _^_en // smile, smiley | |||
| spy _^_en | |||
| sy (_ _^_en | |||
| .group t | |||
| @@ -1280,7 +1286,8 @@ Vn) t (_ t2 | |||
| x ks | |||
| xs ks // lexique lexicaux vox | |||
| e) x (A gz // exagérer exemple | |||
| le) x (i ks | |||
| Ce) x (i ks | |||
| ine) x (i gz | |||
| _e) x (h gz // exhumer | |||
| ai) x (_ // voix paix prix | |||
| @@ -346,11 +346,6 @@ _administratív) n (e n | |||
| qu kv | |||
| .group r | |||
| // r r | |||
| // A) r (A * | |||
| // C) r (A @-* | |||
| // rr *r | |||
| K) r (K r- | |||
| r R | |||
| rr R | |||
| @@ -1,4 +1,4 @@ | |||
| 54 phoneme tables | |||
| 55 phoneme tables | |||
| new total | |||
| base 100 100 | |||
| base2 24 119 | |||
| @@ -54,6 +54,7 @@ | |||
| ml 13 139 | |||
| bn 59 145 | |||
| ne 14 141 | |||
| lv 26 121 | |||
| Data file Used by | |||
| b/b [b] base | |||
| @@ -578,6 +579,7 @@ r3/r_trill [R2] base | |||
| [R] sk | |||
| [r*] sr | |||
| [x] pt | |||
| [R] lv | |||
| r3/r_trill2 [R] base | |||
| [r] cy | |||
| [R] hr | |||
| @@ -591,6 +593,7 @@ r3/r_trill.wav [R2] base | |||
| [R] sk | |||
| [r*] sr | |||
| [x] pt | |||
| [R] lv | |||
| r3/r_u [(u)] base | |||
| r3/rx [*] base | |||
| [r/] base | |||
| @@ -780,6 +783,7 @@ ustop/k_ [k] base | |||
| [k] sw | |||
| [k] sq | |||
| [kh] bn | |||
| [k] lv | |||
| ustop/ki [c] base | |||
| [k] base | |||
| [k] base2 | |||
| @@ -797,6 +801,7 @@ ustop/ki [c] base | |||
| [c] tr | |||
| [J] ku | |||
| [c] ku | |||
| [k] lv | |||
| ustop/kl [k] base | |||
| [k] base2 | |||
| [k] en | |||
| @@ -809,6 +814,7 @@ ustop/kl [k] base | |||
| [k] zhy | |||
| [k] sw | |||
| [kh] bn | |||
| [k] lv | |||
| ustop/kr [k] base | |||
| [k] base2 | |||
| [k] en | |||
| @@ -821,6 +827,7 @@ ustop/kr [k] base | |||
| [k] zhy | |||
| [k] sw | |||
| [kh] bn | |||
| [k] lv | |||
| ustop/k_unasp [k] base | |||
| [k] base2 | |||
| [k] fi | |||
| @@ -832,6 +839,7 @@ ustop/k_unasp [k] base | |||
| [k`] ko | |||
| [k] sq | |||
| [k] bn | |||
| [k] lv | |||
| ustop/k_unasp_ [k] zh | |||
| ustop/null [?] base | |||
| ustop/p [p] base | |||
| @@ -860,6 +868,7 @@ ustop/pl [p] base | |||
| [p] sq | |||
| [p] bn | |||
| [ph] bn | |||
| [p] lv | |||
| ustop/pr [p] base | |||
| [p] base2 | |||
| [p] fi | |||
| @@ -884,6 +893,7 @@ ustop/p_unasp [p] base | |||
| [p`] ko | |||
| [p] sq | |||
| [p] bn | |||
| [p] lv | |||
| ustop/p_unasp_ [p] base2 | |||
| [p] fi | |||
| [p] hi | |||
| @@ -893,6 +903,7 @@ ustop/p_unasp_ [p] base2 | |||
| [p;] ro | |||
| [p] sq | |||
| [p] bn | |||
| [p] lv | |||
| ustop/q [q] base | |||
| ustop/q_u [q] base | |||
| ustop/t [t] base | |||
| @@ -913,6 +924,7 @@ ustop/t_ [t] base | |||
| [t] sq | |||
| [t.] bn | |||
| [t.h] bn | |||
| [t] lv | |||
| ustop/t_dnt [t] base | |||
| [t[] base | |||
| [t] base2 | |||
| @@ -950,6 +962,7 @@ ustop/ts [ts] base2 | |||
| [ts;] ro | |||
| [z] zhy | |||
| [tsh] zh | |||
| [ts] lv | |||
| ustop/tsh [tS] base | |||
| [c] zhy | |||
| ustop/tsh_ [tS] base | |||
| @@ -964,6 +977,7 @@ ustop/t_short [t] fr | |||
| [t] el | |||
| [t] sq | |||
| [t.] bn | |||
| [t] lv | |||
| ustop/tsh_pzd [tS;] zh | |||
| ustop/tsh_pzd_unasp [tS;] zh | |||
| ustop/tsh_sr [tS] sr | |||
| @@ -1012,6 +1026,7 @@ vdiph2/i@ [i@] en_n | |||
| vdiph2/i@_2 [i@] en_wm | |||
| vdiph2/ie [i@] en_wi | |||
| [ie] fi | |||
| vdiph2/ie_2 [ie] lv | |||
| vdiph2/ii@ [i@] en | |||
| [i@3] en | |||
| vdiph2/ii@_3 [i@] vi | |||
| @@ -1020,6 +1035,7 @@ vdiph2/iu [iU] base2 | |||
| [iU] vi | |||
| [iu] zhy | |||
| vdiph2/iu_2 [iu] fi | |||
| [iu] lv | |||
| vdiph2/iu_3 [iu] af | |||
| vdiph2/iu_4 [Iu] cy | |||
| [Yu] cy | |||
| @@ -1033,6 +1049,7 @@ vdiph2/o_oo [o@] en_wi | |||
| [o] zh | |||
| vdiph2/u-@ [y@] vi | |||
| vdiph2/u#@ [U@] en_sc | |||
| vdiph2/uaa [uo] lv | |||
| vdiph2/uo [uo] fi | |||
| vdiph2/uu@ [U@] en | |||
| [U@] en_n | |||
| @@ -1057,6 +1074,7 @@ vdiph/aai_2 [AI] af | |||
| [AY] cy | |||
| vdiph/aai_3 [ai] fi | |||
| vdiph/aau [au] fi | |||
| [au] lv | |||
| vdiph/aau_2 [aU] en_wi | |||
| [aU] de | |||
| [VU] nl | |||
| @@ -1078,6 +1096,7 @@ vdiph/ai [aI] base2 | |||
| [aI] pt | |||
| [a:I] vi | |||
| [aI] id | |||
| [ai] lv | |||
| vdiph/ai_2 [aI] cy | |||
| [aY] cy | |||
| vdiph/ai_3 [aI] no | |||
| @@ -1113,6 +1132,7 @@ vdiph/eei [EI] base2 | |||
| vdiph/eei_2 [eI] eo | |||
| [ei] fi | |||
| [eI] id | |||
| [ei] lv | |||
| vdiph/eei_3 [eI] sk | |||
| [eI] ku | |||
| vdiph/eeu [EU] pt | |||
| @@ -1171,6 +1191,7 @@ vdiph/ooi [OI] en | |||
| [oi] fi | |||
| [OI] no | |||
| [oi] zhy | |||
| [oi] lv | |||
| vdiph/ooi_2 [OI] af | |||
| vdiph/ooi_3 [OI] en_rp | |||
| [aI] en_wm | |||
| @@ -1193,6 +1214,7 @@ vdiph/ui [uI] base2 | |||
| [ui] fi | |||
| [uI] vi | |||
| [ui] zhy | |||
| [ui] lv | |||
| vdiph/u-i [yI] vi | |||
| vdiph/ui_2 [uI] af | |||
| vdiph/ui_3 [uI] cy | |||
| @@ -1360,6 +1382,7 @@ vowel/& [a] en_rp | |||
| [&] sv | |||
| [&] bn | |||
| [&:] bn | |||
| [&:] lv | |||
| vowel/0 [0] en | |||
| [O] hi | |||
| [O] pt | |||
| @@ -1421,6 +1444,7 @@ vowel/a# [a/] base2 | |||
| [&/] pt | |||
| [a#] rw | |||
| [a/] rw | |||
| [&] lv | |||
| vowel/a_2 [a] base2 | |||
| [a] en_wi | |||
| [A:] en_wi | |||
| @@ -1472,6 +1496,7 @@ vowel/a_5 [a:] ta | |||
| [a] tr | |||
| [a] sq | |||
| [a:] ml | |||
| [a] lv | |||
| vowel/a_6 [a] fr | |||
| [a2] fr | |||
| vowel/aa [a] fi | |||
| @@ -1489,6 +1514,7 @@ vowel/aa_2 [A:] en | |||
| [A] zh | |||
| vowel/aa_3 [A:] af | |||
| [A] sq | |||
| [a:] lv | |||
| vowel/aa_4 [O:] en_us | |||
| [A:] sv | |||
| [O] vi | |||
| @@ -1604,6 +1630,7 @@ vowel/e_mid [E] en_rp | |||
| [E2] id | |||
| [E] da | |||
| [E] bn | |||
| [e] lv | |||
| vowel/e_mid2 [E] af | |||
| [E] de | |||
| [E2] de | |||
| @@ -1617,6 +1644,7 @@ vowel/e_mid2 [E] af | |||
| [e] sw | |||
| [e] tr | |||
| [E] ko | |||
| [e:] lv | |||
| vowel/@_fnt [@] en_wi | |||
| [@2] en_wi | |||
| [@2] hr | |||
| @@ -1657,6 +1685,8 @@ vowel/i_3 [i] af | |||
| [i] fr | |||
| [i:] fr | |||
| [i:] sk | |||
| [i] lv | |||
| [i:] lv | |||
| vowel/i_4 [i] fi | |||
| [i] hu | |||
| [I] it | |||
| @@ -1825,6 +1855,8 @@ vowel/oo_1 [O:] en_n | |||
| [o] hr | |||
| [o] vi | |||
| [O/] sq | |||
| [o] lv | |||
| [o:] lv | |||
| vowel/oo_2 [0] en_sc | |||
| [O] cy | |||
| [o] cs | |||
| @@ -1928,6 +1960,8 @@ vowel/uu# [U] ku | |||
| vowel/uu_2 [U] base2 | |||
| [U] de | |||
| [U] tr | |||
| [u] lv | |||
| [u:] lv | |||
| vowel/uu_3 [u] af | |||
| [y] zh | |||
| vowel/uu_4 [U] fi | |||
| @@ -425,6 +425,7 @@ phoneme r | |||
| beforenotvowel r/2 | |||
| formants vwl_fr/@R3+r3/rx%30 | |||
| after @2 vwl_fr/@R5+r3/rx%40 | |||
| after (u) vwl_fr/@R5+r3/rx%30 | |||
| after (e) vwl_fr/@R4+r3/rx%20 | |||
| endphoneme | |||
| @@ -1322,3 +1322,6 @@ include ph_bengali | |||
| phonemetable ne hi | |||
| include ph_nepali | |||
| phonemetable lv base | |||
| include ph_latvian | |||
| @@ -23,13 +23,12 @@ | |||
| #include "src/speak_lib.h" | |||
| #include "stdio.h" | |||
| #define CTRL_EMBEDDED 1 | |||
| CTTSEngObj *m_EngObj; | |||
| ISpTTSEngineSite* m_OutputSite; | |||
| FILE *f_log2=NULL; | |||
| ULONGLONG event_interest; | |||
| extern int AddNameData(const char *name, int wide); | |||
| extern void InitNamedata(void); | |||
| @@ -49,6 +48,10 @@ char *path_install = NULL; | |||
| unsigned long audio_offset = 0; | |||
| unsigned long audio_latest = 0; | |||
| int prev_phoneme = 0; | |||
| int prev_phoneme_position = 0; | |||
| unsigned long prev_phoneme_time = 0; | |||
| unsigned int gBufSize = 0; | |||
| wchar_t *TextBuf=NULL; | |||
| @@ -65,6 +68,48 @@ int frag_count=0; | |||
| FRAG_OFFSET *frag_offsets = NULL; | |||
| int VisemeCode(unsigned int phoneme_name) | |||
| {//====================================== | |||
| // Convert eSpeak phoneme name into a SAPI viseme code | |||
| int ix; | |||
| unsigned int ph; | |||
| unsigned int ph_name; | |||
| #define PH(c1,c2) (c2<<8)+c1 // combine two characters into an integer for phoneme name | |||
| const unsigned char initial_to_viseme[128] = { | |||
| 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, | |||
| 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, | |||
| 0, 0, 0, 0, 0, 0, 1, 0, 0, 0,19, 0, 0, 0, 0, 0, | |||
| 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,255, | |||
| 4, 2,18,16,17, 4,18,20,12, 6,16,20,14,21,20, 3, | |||
| 21,20,13,16,17, 4, 1, 5,20, 7,16, 0, 0, 0, 0, 0, | |||
| 0, 1,21,16,19, 4,18,20,12, 6, 6,20,14,21,19, 8, | |||
| 21,20,13,15,19, 7,18, 7,20, 7,15, 0, 0, 0, 0, 0 }; | |||
| const unsigned int viseme_exceptions[] = { | |||
| PH('a','I'), 11, | |||
| PH('a','U'), 9, | |||
| PH('O','I'), 10, | |||
| PH('t','S'), 16, | |||
| PH('d','Z'), 16, | |||
| PH('_','|'), 255, | |||
| 0 | |||
| }; | |||
| ph_name = phoneme_name & 0xffff; | |||
| for(ix=0; (ph = viseme_exceptions[ix]) != 0; ix+=2) | |||
| { | |||
| if(ph == ph_name) | |||
| { | |||
| return(viseme_exceptions[ix+1]); | |||
| } | |||
| } | |||
| return(initial_to_viseme[phoneme_name & 0x7f]); | |||
| } | |||
| int SynthCallback(short *wav, int numsamples, espeak_EVENT *events); | |||
| int SynthCallback(short *wav, int numsamples, espeak_EVENT *events) | |||
| @@ -73,6 +118,8 @@ int SynthCallback(short *wav, int numsamples, espeak_EVENT *events) | |||
| wchar_t *tailptr; | |||
| unsigned int text_offset; | |||
| int length; | |||
| int phoneme_duration; | |||
| int this_viseme; | |||
| espeak_EVENT *event; | |||
| #define N_EVENTS 100 | |||
| @@ -86,7 +133,7 @@ int SynthCallback(short *wav, int numsamples, espeak_EVENT *events) | |||
| m_EngObj->CheckActions(m_OutputSite); | |||
| // return the events | |||
| for(event=events; event->type != 0; event++) | |||
| for(event=events; (event->type != 0) && (n_Events < N_EVENTS); event++) | |||
| { | |||
| audio_latest = event->audio_position + audio_offset; | |||
| @@ -121,6 +168,28 @@ int SynthCallback(short *wav, int numsamples, espeak_EVENT *events) | |||
| Event->lParam = (long)event->id.name; | |||
| Event->wParam = wcstol((wchar_t *)event->id.name,&tailptr,10); | |||
| } | |||
| if(event->type == espeakEVENT_PHONEME) | |||
| { | |||
| if(event_interest & SPEI_VISEME) | |||
| { | |||
| phoneme_duration = audio_latest - prev_phoneme_time; | |||
| // ignore some phonemes (which translate to viseme=255) | |||
| if((this_viseme = VisemeCode(event->id.number)) != 255) | |||
| { | |||
| Event = &Events[n_Events++]; | |||
| Event->eEventId = SPEI_VISEME; | |||
| Event->elParamType = SPET_LPARAM_IS_UNDEFINED; | |||
| Event->ullAudioStreamOffset = ((prev_phoneme_position + audio_offset) * srate)/10; // ms -> bytes | |||
| Event->lParam = phoneme_duration << 16 | this_viseme; | |||
| Event->wParam = VisemeCode(prev_phoneme); | |||
| prev_phoneme = event->id.number; | |||
| prev_phoneme_time = audio_latest; | |||
| prev_phoneme_position = event->audio_position; | |||
| } | |||
| } | |||
| } | |||
| #ifdef deleted | |||
| if(event->type == espeakEVENT_SENTENCE) | |||
| { | |||
| @@ -286,7 +355,7 @@ STDMETHODIMP CTTSEngObj::SetObjectToken(ISpObjectToken * pToken) | |||
| gEmphasis = 0; | |||
| gSayas = 0; | |||
| espeak_Initialize(AUDIO_OUTPUT_SYNCHRONOUS,100,path_install,0); | |||
| espeak_Initialize(AUDIO_OUTPUT_SYNCHRONOUS,100,path_install,1); | |||
| espeak_SetVoiceByName(voice); | |||
| espeak_SetSynthCallback(SynthCallback); | |||
| @@ -654,7 +723,7 @@ STDMETHODIMP CTTSEngObj::Speak( DWORD dwSpeakFlags, | |||
| m_ullAudioOff = 0; | |||
| m_OutputSite = pOutputSite; | |||
| pOutputSite->GetEventInterest(&event_interest); | |||
| xVolume = gVolume; | |||
| xSpeed = gSpeed; | |||
| @@ -694,6 +763,10 @@ STDMETHODIMP CTTSEngObj::Speak( DWORD dwSpeakFlags, | |||
| } | |||
| audio_latest = 0; | |||
| prev_phoneme = 0; | |||
| prev_phoneme_time = 0; | |||
| prev_phoneme_position = 0; | |||
| size = ProcessFragList(pTextFragList,TextBuf,pOutputSite,&n_text_frag); | |||
| if(size > 0) | |||
| @@ -966,7 +966,13 @@ int Translator::LookupNum3(int value, char *ph_out, int suppress_null, int thous | |||
| Lookup("_0C",ph_100); | |||
| if((hundreds >= 10) && (((langopts.numbers & 0x0800) == 0) || (hundreds != 19))) | |||
| if(((langopts.numbers & 0x0800) != 0) && (hundreds == 19)) | |||
| { | |||
| // speak numbers such as 1984 as years: nineteen-eighty-four | |||
| // ph_100[0] = 0; // don't say "hundred", we also need to surpess "and" | |||
| } | |||
| else | |||
| if(hundreds >= 10) | |||
| { | |||
| ph_digits[0] = 0; | |||
| @@ -429,7 +429,7 @@ static void StopSpeak(int unused) | |||
| int *flag; | |||
| int val; | |||
| }; | |||
| static int optind; | |||
| int optind; | |||
| static int optional_argument; | |||
| static const char *arg_opts = "afklpsvw"; // which options have arguments | |||
| static char *opt_string=""; | |||
| @@ -35,7 +35,7 @@ | |||
| #include "translate.h" | |||
| #include "wave.h" | |||
| const char *version_string = "1.39.12 24.Oct.08"; | |||
| const char *version_string = "1.39.14 02.Nov.08"; | |||
| const int version_phdata = 0x013900; | |||
| int option_device_number = -1; | |||
| @@ -121,6 +121,9 @@ Translator *SelectTranslator(const char *name) | |||
| int name2 = 0; | |||
| Translator *tr; | |||
| static const unsigned char stress_amps_sk[8] = {16,16, 20,20, 20,24, 24,22 }; | |||
| static const short stress_lengths_sk[8] = {190,190, 210,210, 0,0, 210,210}; | |||
| // convert name string into a word of up to 4 characters, for the switch() | |||
| while(*name != 0) | |||
| name2 = (name2 << 8) + *name++; | |||
| @@ -552,6 +555,19 @@ SetLengthMods(tr,3); // all equal | |||
| } | |||
| break; | |||
| case L('l','v'): // latvian | |||
| { | |||
| tr = new Translator(); | |||
| SetupTranslator(tr,stress_lengths_sk,stress_amps_sk); | |||
| tr->langopts.stress_rule = 0; | |||
| tr->langopts.spelling_stress = 1; | |||
| tr->charset_a0 = charsets[4]; // ISO-8859-4 | |||
| tr->langopts.numbers = 0x409; | |||
| tr->langopts.stress_flags = 0x16; | |||
| } | |||
| break; | |||
| case L('m','k'): // Macedonian | |||
| { | |||
| static wchar_t vowels_cyrillic[] = {0x440, // also include 'р' [R] | |||
| @@ -673,8 +689,6 @@ SetLengthMods(tr,3); // all equal | |||
| case L('s','k'): // Slovak | |||
| case L('c','s'): // Czech | |||
| { | |||
| static const unsigned char stress_amps_sk[8] = {16,16, 20,20, 20,24, 24,22 }; | |||
| static const short stress_lengths_sk[8] = {190,190, 210,210, 0,0, 210,210}; | |||
| static const char *sk_voiced = "bdgjlmnrvwzaeiouy"; | |||
| tr = new Translator(); | |||