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(); |