diff --git a/dictsource/cs_list b/dictsource/cs_list
index 99609fa1..45557a43 100644
--- a/dictsource/cs_list
+++ b/dictsource/cs_list
@@ -140,6 +140,10 @@ si $u
// Prepositions
+// the $alt2 prepositions should also be included in cs_rules
+// as prefixes, so "na-" (for example) is removed from the combined
+// word before the pronuciation of the main word is determined.
+
skrz $u $brk $alt2 // though
skrze $u $pause // through
pro $u $pause $alt2 // for
diff --git a/dictsource/dict_phonemes b/dictsource/dict_phonemes
index e2913ac4..57db87f5 100644
--- a/dictsource/dict_phonemes
+++ b/dictsource/dict_phonemes
@@ -43,9 +43,9 @@ x z
Dictionary de_dict
3 @ @- a A A: aI aU
-E E2 E: e: EI I i2 i:
-O o: OY U u: W y y:
-Y:
+E E2 E: e: EI I i2 I:
+i: O o: OY U u: W y
+y: Y:
* : ; b C C2 d D
dZ f g h j k l m
@@ -69,8 +69,8 @@ Dictionary en_dict
0 3 3: @ @- @2 @5 @L
a a2 A: A@ aa aI aI@ aU
aU@ E e@ eI I I2 i: i@
-IR O O: o: O@ o@ OI oU
-O~ U u: U@ V VR
+i@3 IR O O: o: O@ o@ OI
+oU O~ U u: U@ V VR
: ; b C d D dZ f
g h j k l m n N
@@ -281,7 +281,7 @@ u U uI u~ y
g h j k l l^ m n
N n^ p Q r R r- s
S s# s; t T tS ts v
-w x z Z
+w w2 x z Z
Dictionary ro_dict
@@ -340,10 +340,10 @@ Dictionary zh_dict
i i. i[ iou o o- ou u
uai y
-: f h j k kh l m
-n N p ph r R s s.
-S; t th ts ts. ts. tS; tS;
-tsh v w x z z.
+: f j k kh l m n
+N p ph r R s s. S;
+t th ts ts. ts. tS; tS; tsh
+v w x z z.
Dictionary jbo_dict
@@ -358,11 +358,10 @@ t tS v w x z Z
Dictionary th_dict
-a a: e E: i i: o O
-O: u y
+3 a E i i: O O:
-c d h k l m n N
-p s t
+: c d h k l m n
+N p s t2
Dictionary hbs_dict
@@ -379,8 +378,7 @@ ts tS; v x z Z
Dictionary id_dict
-@ a aI aU e E i o
-O u
+@ a aI aU E i O
* ? b d dZ f g h
j k l m n N n^ p
diff --git a/dictsource/en_list b/dictsource/en_list
index 63834bd7..89773d84 100644
--- a/dictsource/en_list
+++ b/dictsource/en_list
@@ -253,7 +253,7 @@ adamant ad@m@nt
add ad
addict adIkt $onlys
addon ad0n
-adher adh'i@
+adher adh'i@3
adieu a2dju:
adieus a2dju:z
adieux a2dju:z
@@ -417,7 +417,7 @@ aubergine oUb3Zi:n
auger O:g3
aurora $2
aussie 0zI
-austere O:st'i@
+austere O:st'i@3
authority a2T0rItI2
authoritative O:T'0rIt@tIv
autograph O:t@graf
@@ -495,7 +495,7 @@ breathless brETl@s
brethren brEDr@n
bridesmaid braIdzmeId
brigade $2
-brigadier brIga2d'i@
+brigadier brIga2d'i@3
brochure broUS3
brooch broUtS
budgerigar bVdZ@rIgA@
@@ -533,11 +533,11 @@ canton kant0n
caprice ka2pr'i:s
caramel kar@mEl
caravan kar@van
-career k@r'i@
+career k@r'i@3
caress k@rEs
carpel kA@p@l
cascade $2
-cashmere kaSm'i@
+cashmere kaSm'i@3
catarrh k@tA@
catholic kaTlIk
cavalier $3
@@ -647,7 +647,7 @@ convolute k0nv@l'u:t
coop ku:p
cooper ku:p3
coordinate koU'O:dIneIt $verb
-copier k0pi@
+copier k0pi@3
coral k0r@L
coronet k0r@nEt
corporal kO@pr@L
@@ -835,7 +835,7 @@ facade f@sA:d
façade f@sA:d
faeces fi:si:z
fallible fal@b@L
-familiar f@mIli@
+familiar f@mIli@3
famine famIn
farewell $2
fasten faas@n
@@ -951,11 +951,11 @@ helix hi:lIks
hello h@loU
henceforth hEnsfo@T
hercules h3:kjUli:z
-hereto hi@'tu:
+hereto hi@3'tu:
hermaphrodite $2
hermes h3:mi:z
herod hEr@d
-heroe hi@oU
+heroe hi@roU
heroic hI2roUIk
heroin hEroUIn
heroism hEroUIz@m
@@ -1369,13 +1369,13 @@ phoenix fi:nIks
photograph foUt@graf
piano pI2anoU
piecemeal p'i:sm,i:l
-pier pi@
+pier pi@3
pigeon pIdZ@n
pigsty pIgstaI
pilot paIl@t
pineapple p'aInap@L
pint paInt
-pioneer paI@n'i@
+pioneer paI@n'i@3
pious paI@s
pipette pIp'Et
piquant pi:k@nt
@@ -1468,7 +1468,7 @@ radon reId0n
ragged ragId
rainforest r'eInf,0rIst
rajah rA:dZA:
-rapier reIpi@
+rapier reIpi@3
rapport rap'o@
rarest re@r@st
rascal raask@L
@@ -1516,7 +1516,7 @@ reign reIn
rein reIn
reined reInd
reining reInIN
-reindeer reIndi@
+reindeer reIndi@3
reinvent ri:Inv'Ent
refinery rI2faIn@rI2
relative rEl@tIv
@@ -1555,7 +1555,7 @@ retaliatory rIt'ali:@t@rI2
retrial ri:traI@l
retry ri:traI
reuse ri:'ju:z
-rever rI2vi@ // revered
+rever rI2vi@3 // revered
rhododendron roUd@d'Endr@n
rhetoric rEt@rIk $onlys
rhinoceros raIn'0s@r@s
@@ -1613,7 +1613,7 @@ secretive si:kr@tI2v
secretary sEkr@trI2
sedate sI2deIt
separate sEp@-r@t
-separate sEp@reIt $verb
+separate sEp3reIt $verb
semen si:m@n
semicolon sEmIk'oUl0n
senator sEn@t3
@@ -1624,8 +1624,8 @@ series si:ri:z
serene s@ri:n
sergeant sA@dZ@nt
settee $2
-severe sIv'i@ $only
-severely sIv'i@lI2 $verbf
+severe sIv'i@3 $only
+severely sIv'i@3lI2 $verbf
several sEvr@L
shampoo $2
sheriff S'ErIf
@@ -1643,7 +1643,7 @@ silhouette sIlUw'Et
simon saIm@n
simultaneous $3
singly sINglI2 $verbf
-sincerest sIns'i@@st
+sincerest sIns'i@r@st
sinew sInju:
sir s,3:
?5 sir s,VR
@@ -1665,7 +1665,7 @@ sonar soUnA@
sonny sVnI2
sooth su:D
soundbite saUndbaIt
-souvenir su:v@n'i@
+souvenir su:v@n'i@3
sorbet sO@beI
soviet soUvi@t
spaghetti spag'EtI2
@@ -1737,7 +1737,7 @@ tariff tarIf
taskforce t'askf,o@s
tatar tA:t3
tearing te@r-I2N
-tear ti@ $onlys
+tear ti@3 $onlys
tear te@ $verb
teddybear t'Ed,Ib,e@
ten tEn // untenable
@@ -2055,7 +2055,7 @@ Johannesburg $2
Kalgoorlie kalgU@lI2
Karachi k@rA@tSI2
Kiev ki:Ev
-Khmer kmi@
+Khmer kmi@3
Korea kOr'i:@
Korean kOr'i:@n
Kuala kwA:la2
@@ -2145,7 +2145,7 @@ Winnipeg wInI2pEg
Wisconsin wIsk'0nsIn
Wyoming waI'oUmI2N
Xhosa kO:s@
-zaire zaI'i@
+zaire zaI'i@3
zimbabwe zI2mbA:bwI2
Aaron e@r@n
@@ -2309,7 +2309,7 @@ zhivago ZI2vA:goU
(first place) f'3:st_pl,eIs
?5 (first place) f'IRst_pl,eIs
-(here and there) h'i@||@nd||D'e@
+(here and there) h'i@3||@nd||D'e@
(most of) moUst||@v
(such as) sVtS||_a2z $pause
@@ -2411,7 +2411,7 @@ beyond bI2j,0nd $strend2
beside bI2s,aId $strend2
between bI2tw,i:n $strend2
together t@g,ED3 $strend2
-near ,ni@ $strend2
+near ,ni@3 $strend2
thence DEns
@@ -2536,7 +2536,7 @@ begun bI2gVn
become bI,kVm $strend2
became bI,keIm $strend2
-we're %wi@
+we're %wi@3
you're %jO@
?6 you're %jU@
they're %DeI3
diff --git a/dictsource/en_rules b/dictsource/en_rules
index de046c1d..b4698926 100644
--- a/dictsource/en_rules
+++ b/dictsource/en_rules
@@ -85,7 +85,7 @@
_) aer (o e@
ae (l eI
h) ae (m i:
- h) aemorrh Em@r
+ h) aemorrh Em3r
aer e@
_c) aer %e@
r) aer 'A@
@@ -744,7 +744,7 @@
_) aph (@ a2f
ap (ath ap
_) ap (e eIp
- aper (ie a2pi@
+ aper (ie a2pi@r
_) aperi (t a2pEr@
_) aper (t ap@
_) aph (id eIf
@@ -828,7 +828,7 @@
&z) ar (d_ 3
h) ar (ass @r
&m) aran @ran
- sep) ar (at @r
+ sep) ar (at 3r
w) ar (e e@
k) ar (y ar
c) arbo (h ,A@boU
@@ -1531,7 +1531,7 @@
_) de (t@ dI2
de (tail di:
deter dI2t3:
- deter (i dI2ti@
+ deter (i dI2ti@r
detest dI2tEst
_) de (th d%i:
de (ton dE
@@ -1637,7 +1637,7 @@
&) ecy (_ @sI2
ee i:
ee (m 'i:
- eer 'i@
+ eer 'i@3
t) ee (n_ 'i:
ees (_ i:z
ch) eese i:z
@@ -1775,12 +1775,12 @@
_l) ea (mi E
b) ea (n i:
XC) ea (n_ i:
- ear i@
+ ear i@3
_) ear (l 3:
_) ear (n 3:
ear (th 3:
b) ear e@
- b) ear (d i@
+ b) ear (d i@3
h) ear (d 3:
h) ear (th A@
h) ear (k A@
@@ -1793,7 +1793,7 @@
t) ear (A e@
sw) ear e@
w) ear e@
- w) ear (y i@
+ w) ear (y i@3
y) ear (n 3:
eas (an Ez
eas (en Ez
@@ -1878,7 +1878,7 @@
@) ei (n_ i:
b) ei (ng i:I
eir e@
- w) eir i@
+ w) eir i@3
l) ei (s E
th) ei (sC i:I
_s) eis (m aIz
@@ -2107,13 +2107,13 @@
g) eral (d Er@L
er (bial '3:
_d) er (b A@
- &) er (A @r
+ &) er (A 3r
@) er (o_ 'e@r
eri (A 'i@rI2
er (iC Er
- &) er (ing @r
- er (ie_ @r
- er (ie @r
+ &) er (ing 3r
+ er (ie_ 3r
+ er (ie 3r
eries (_S2i z
&) er (ous =@r
m) er (c 3:
@@ -2125,21 +2125,21 @@
_qu) er 3:
c) er (am I2r
&) ere (_ 3
- XC) ere (_ i@
- sph) ere (_ i@
- c) ere (_ 'i@
+ XC) ere (_ i@3
+ sph) ere (_ i@3
+ c) ere (_ 'i@3
i) ere (_ I2e@
- ev) ere (_ i@
+ ev) ere (_ i@3
mp) ere (_ e@
- _h) ere i@
+ _h) ere i@3
h) ere (f ErI2
h) ere (di I2rE
h) ere (s Er@
h) ere (t I2rE
@) er (ence_ r
er (ent_ r
- adh) er (e 'i@
- coh) er (e 'i@
+ adh) er (e 'i@3
+ coh) er (e 'i@3
h) er (ed I2r
c) ere (mon ErI2
h) er (en i@r
@@ -2188,8 +2188,8 @@
_v) ery ErI2
_ev) ery rI2
qu) ery i@rI2
- z) er (o i@
- _C) er (o_ i@
+ z) er (o i@r
+ _C) er (o_ i@r
er (rA E
err (_ 3:
@@ -2584,7 +2584,7 @@
_l) io (n aI@
z) io (n aI@
r) ior (_ I3
- &) ior (+ i@
+ &) ior (+ i@3
&) ior (_ j3
iority I'0rItI2
iou (rA j@
@@ -2677,7 +2677,7 @@
al) ia (nt I2@
_p) ia (nA i@
iar aI@
- @l) iar (_ i@
+ @l) iar (_ i@3
iara (_ I'A:r@
iarch I2A@k
iard (_ I23d
@@ -2723,12 +2723,12 @@
@) ienne (_ I'En
cl) ie (nt aI@
&) ier (y I2@r
- ier i@
- &) ier (_NS2i @
+ ier i@3
+ &) ier (_NS2i 3
_h) ie (r aI@
pl) ier (_ aI@
_Cr) ier aI@
- ier (c i@
+ ier (c i@3
ierre (_ I2e@
ie (t aI@
@) ie (th i@
@@ -2898,7 +2898,7 @@
_) inter (@P5 ,Int3 // prefix
_) inter (AP5 ,Int@r
inter (est Int@r
- interfer Int@f'i@
+ interfer Int@f'i@3
_) int (erio+ I2nt
_) inter (n_ I2nt3:
_) inter (nal I2nt3:
@@ -3002,7 +3002,7 @@
irer (_ aI@r@
ir 3:
?5 ir IR
- @C) ir (_ i@
+ @C) ir (_ i@3
st) ir (_ 3:
?5 st) ir (_ IR
ir (i Ir
@@ -3012,7 +3012,7 @@
ir (o I2r
g) ir (o aIr
_C) ir (o_ aIr
- @) ir (o_ 'i@
+ @) ir (o_ 'i@r
_) iron aI@n
iron (A aIr'0n
v) iro (n aIr@
@@ -4081,7 +4081,7 @@
per (petr p3:
per (ple p3
per (sis p3
- persever p3:sIv'i@
+ persever p3:sIv'i@3
per (sp p@
perspi (ra p3:sp@
per (su p3
@@ -4613,9 +4613,9 @@
l) u (ck V
ucul VkjUl
n) ucle ju:klI
- n) uclear ju:kli@
+ n) uclear ju:kli@3
?3 n) ucle u:klI
-?3 n) uclear u:kli@
+?3 n) uclear u:kli@3
@) u (ctive 'V
u (guC V
f) u (gal 'ju:
@@ -4825,10 +4825,10 @@
b) ur (e ju:@r
g) ure (_ 3
nj) ure (_ 3
- il) ure (_ i@
- en) ure (_ j@
- r) ure (_ i@
- &s) ure (_ j@
+ il) ure (_ i@3
+ en) ure (_ j3
+ r) ure (_ i@3
+ &s) ure (_ j@3
icat) ure (_ jU@
sat) ur (d 3
iz) ure 3
@@ -4848,7 +4848,7 @@
wh w
wr r
C) we (_ =wI
- were (w wi@
+ were (w wi@3
th) west w'Est
we (w wi:
where we@
@@ -5021,7 +5021,7 @@
Ee (d i:
EE (_ i:
Ee (_ 'i:
- Eer (_ 'i@
+ Eer (_ 'i@3
Ei (n_ i:
Ei (_ aI
El (_ @L
diff --git a/dictsource/es_rules b/dictsource/es_rules
index e65f55e7..55207f86 100644
--- a/dictsource/es_rules
+++ b/dictsource/es_rules
@@ -70,6 +70,7 @@
_) i (_ i
i i
i (A J^
+ C) i (A j
l) i (A %i
r) i (A %i
diff --git a/dictsource/fr_list b/dictsource/fr_list
index 382594ae..7e687639 100755
--- a/dictsource/fr_list
+++ b/dictsource/fr_list
@@ -7,7 +7,7 @@
//
-// Letters
+// Letters names
// If a letter has a "word" pronunciation which is different from its
// "letter" name, then include the letter name here, with the letter
// prefixed by a _ character.
@@ -15,19 +15,43 @@
_à a:aksA~gRav
â a:aksA~siRkO~flEks
ä a:tRema
+b be
+c se
ç sesedij
+d de
+e @
ë @:tRema
é @:aksA~Egy
è @:aksA~gRav
ê @:aksA~siRkO~flEks
-ï i:tRema
ë @:tRema
+f Ef
+g Ze
+h aS
+i i
+ï i:tRema
+j Zi
+k ka
+l El
+m Em
+n En
ñ Entilde
+o o
ô o:aksA~siRkO~flEks
ö o:tRema
+p pe
+q ky
+r ER
+s Es
+t te
+u y
ù y:aksA~gRav
û y:aksA~siRkO~flEks
ü y:tRema
+v ve
+w dubl@v'e
+x iks
+z zEd
_y i:gR'Ek
@@ -173,10 +197,6 @@ utf $abbrev
xfce iksEfse@
xy $abbrev
-ii d'Y $abbrev // roman numerals
-iii tRw'a $abbrev
-iv k'atR $abbrev
-
dr dOkt WR $dot $capital
prof $dot
diff --git a/dictsource/fr_rules b/dictsource/fr_rules
index ae2e3c08..d46b8ff0 100755
--- a/dictsource/fr_rules
+++ b/dictsource/fr_rules
@@ -14,8 +14,6 @@
.group a
-
-
ae (_ e // reggae vitae
aen A~ // caen (diff Cicero: aA~)
ae ae // maestro
@@ -46,14 +44,14 @@
ay Ej // paye
a a // bateau
+
.group b
- _) b (_ be // b
bb b // abbé
om) b (_ // plomb applomb
b b // aube
+
.group c
- _) c (_ se // c
c' s // s
cch k // bacchanale
cc (Y ks // accéder
@@ -89,7 +87,6 @@
.group d
- _) d (_ de
dd d // addition
_) d' (P2 d
_lan) d (_ d // land
@@ -110,9 +107,8 @@
r) d (_ // lourd placard
d d // don bled
-.group e
- _) e (_ @ // e
+.group e
e (Ce_ E
eau o // bateau cheveaux
j) e (a // Jean Jeanne
@@ -322,12 +318,13 @@
e @ // menue
+
.group ë
u) ë // ambiguë
ë E // citroën noël
+
.group f
- _) f (_ Ef
f f
f (f
_neu) f (_ans v // liaison: neuf ans
@@ -335,7 +332,6 @@
.group g
- _) g (_ Ze
g g
su) gg (Y gZ // suggérer suggestif
@@ -376,12 +372,12 @@
g (_ g // grog gag goulag
g Z // congé george
+
.group h
- _) h (_ aS
h // ahuri
+
.group i
- _) i (_ i
i i // cri
ie (ment i // remerciement balbutiement
@@ -415,25 +411,25 @@
î i // abîme
în (i in // vînimes
+
.group ï
ïn (C E~ // coïncider
ïn (_ E~
a) ï j // aïeul
ï i // ambiguïté
+
.group j
- _) j (_ Zi
j Z // adjoint joujoux
.group k
- _) k (_ ka
k k // kafka
ket (_ kEt // basket
kets (_ kEt // basket
+
.group l
- _) l (_ El
l l // lit
ll l // aller
_) l' (P2 l
@@ -443,13 +439,11 @@
.group m
- _) m (_ Em
m m // film
mm m // pomme
.group n
- _) n (_ En
n n // une
nn n
ng (_ N
@@ -459,9 +453,8 @@
A) ng (_ N // parking meeting
nn n // panne
-.group o
- _) o (_ o
+.group o
cr) oc (_ o // escroc
o (ch o // cochon
@@ -532,12 +525,13 @@
o O // sobre notions émotions
+
.group ô
ôt (_ o // rôt
ô o // cône
+
.group p
- _) p (_ pe
p p // pas
p (p // appliquer
ph f // phrase
@@ -559,8 +553,8 @@
se) pt (_ t // sept
se) pt (iè t // septième
+
.group q
- _) q (_ ky
q k // coq
qu k // quatre
_) que (_ k@ // que
@@ -568,8 +562,8 @@
_) qu' (P3 k // qu'il
n) q (_ k // cinq cent
+
.group r
- _) r (_ ER
right _^_EN // copyright
_su) rr RR // surréaliste
ou) rr RR // courrai
@@ -577,8 +571,8 @@
rr R // erreur
r r // rien
+
.group s
- _) s (_ Es
s s // verser sien
s (_S1 z2
@@ -627,8 +621,8 @@
s (j z
s (v z
+
.group t
- _) t (_ te
t t // bataille
V) t (_ t2 // silent at end of verb unless next word starts with a vowel
t (_ // silent at end of word
@@ -684,7 +678,6 @@ V) t (_ t2 // silent at end of verb unless next word starts with a vowe
.group u
- _) u (_ y
u y // cruel nuage brut
ui w^i
@@ -705,18 +698,17 @@ V) t (_ t2 // silent at end of verb unless next word starts with a vowe
g) u (ï y // ambiguïté
g) u (ë y // ambiguë
+
.group v
- _) v (_ ve
v v
+
.group w
- _) w (_ dubl@v'e
w w
ware (_ _^_EN // hardware, software
.group x
- _) x (_ iks
x ks
xs ks // lexique lexicaux vox
_e) x (A gz // exagérer exemple
@@ -754,8 +746,8 @@ V) t (_ t2 // silent at end of verb unless next word starts with a vowe
yn E~ // laryngite
+
.group z
- _) z (_ zEd
z z
zz z
t) z s // tzigane
diff --git a/dictsource/jbo_list b/dictsource/jbo_list
index e248f0e0..e7750f59 100644
--- a/dictsource/jbo_list
+++ b/dictsource/jbo_list
@@ -1,4 +1,9 @@
+// This file is UTF8 encoded
+// Spelling to phoneme words for Lojban (an artificial constructed language).
+
+// Note: initial/final "." has already been removed
+
// Numbers
_0 no
_1 pa
@@ -48,12 +53,30 @@ e'o $u+ // request
po'e $u+ // of
zo'e $u+ // pronoun
-i $u+ $pause
+i i_: $u // sentence break (recognised by eSpeak program). Try a short pause after ".i"
+
+// end-of-clause [_;_] before these
+noi _;_nOI $u
+poi _;_pOI $u
+no'u _;_nohu $u
+po'u _;_pohu $u
+goi _;_gOI $u
+
+ija _;_iZa // should this series be unstressed?
+ijanai _;_iZanaI
+ije _;_iZe
+ije'i _;_iZehi
+ijenai _;_iZenaI
+ijo _;_iZo
+ijonai _;_iZonaI
+inaja _;_inaZa
+
+to _::to $u // start parenthesis, pause but don't raise intonation
// terminators (include a pause after)
-ku ku_:
-boi bOI_:
-vau vaU_:
-kei keI_:
-toi tOI_:
+ku ku_:: $u
+boi bOI_:: $u
+vau vaU_:: $u
+kei keI_:: $u
+toi tOI_:: $u
diff --git a/dictsource/jbo_rules b/dictsource/jbo_rules
index d57415ee..7cc8fa89 100644
--- a/dictsource/jbo_rules
+++ b/dictsource/jbo_rules
@@ -2,6 +2,7 @@
// This file is UTF8 encoded
// Spelling to phoneme rules for Lojban (an artificial constructed language).
+// Note: initial/final "." has already been removed
.group a
a a
@@ -33,6 +34,8 @@
.group g
g g
+ _) gi ('A_ _;_gi
+
.group h
h h
diff --git a/docs/commands.html b/docs/commands.html
index 6685dbd9..c1e3abda 100644
--- a/docs/commands.html
+++ b/docs/commands.html
@@ -162,6 +162,10 @@ The same as --compile, but source line numbers from the *_rules
Speaks the names of punctuation characters when they are encountered in the text. If <characters> are given, then only those listed punctuation characters are spoken, eg. --punct=".,;?"
+
--split [="<minutes>"]
+
+Used with -w, it starts a new WAV file every <minutes> minutes, at the next sentence boundary.
+
--voices [=<language code>]
Lists the available voices.
diff --git a/docs/index.html b/docs/index.html
index 5e8ba405..20c517c9 100644
--- a/docs/index.html
+++ b/docs/index.html
@@ -37,7 +37,7 @@
-eSpeak is a compact open source software speech synthesizer for English and other languages.
+eSpeak is a compact open source software speech synthesizer for English and other languages, for Linux and Windows.
http://espeak.sourceforge.net
eSpeak produces good quality English speech. It uses a different synthesis method from other open source TTS engines, and sounds quite different. It's perhaps not as natural or "smooth", but I find the articulation clearer and easier to listen to for long periods.
@@ -65,7 +65,7 @@ A Windows version of the espeakedit program is also available.
Languages. The eSpeak speech synthesizer supports several languages, however in most cases these are initial drafts and need more work to improve them. Assistance from native speakers is welcome for these, or other new languages. Please contact me if you want to help.
-eSpeak does text to speech synthesis for the following languages, some better than others. Afrikaans, Croatian, Czech, Dutch, English, Esperanto, Finnish, French, German, Greek, Hindi, Hungarian, Icelandic, Italian, Norwegian, Polish, Portuguese, Romanian, Russian, Slovak, Spanish, Swahili, Swedish, Vietnamese, Welsh. See Languages.
+eSpeak does text to speech synthesis for the following languages, some better than others. Afrikaans, Cantonese, Croatian, Czech, Dutch, English, Esperanto, Finnish, French, German, Greek, Hindi, Hungarian, Icelandic, Italian, Lojban, Macedonian, Mandarin, Norwegian, Polish, Portuguese, Romanian, Russian, Serbian, Slovak, Spanish, Swahili, Swedish, Vietnamese, Welsh. See Languages.
espeakedit is a GUI program used to prepare and compile phoneme data. It is now available for download. Documentation is currently sparse, but if you want to use it to add or improve language support, let me know.
diff --git a/docs/languages.html b/docs/languages.html
index f8d691e3..001a4484 100644
--- a/docs/languages.html
+++ b/docs/languages.html
@@ -3,7 +3,6 @@
eSpeak Speech Synthesizer
-
@@ -199,6 +198,11 @@ These languages are only initial naive implementations which have had little or
+jbo Lojban
+
An artificial language.
+
+
+
la Latin
Stress rules are implemented, but it needs text where long vowels are marked with macrons.
diff --git a/espeak-data/voices/en/en-r b/espeak-data/voices/en/en-r
index b5460897..8f42f35f 100755
--- a/espeak-data/voices/en/en-r
+++ b/espeak-data/voices/en/en-r
@@ -8,11 +8,8 @@ phonemes en_us
dictrules 3 6
option 12 1 // reduce [t]
-stressLength 145 120 175 175 0 0 260 270
+stressLength 145 125 170 170 0 0 265 280
stressAmp 17 16 20 20 20 22 23 20
//replace 03 I i
//replace 03 I2 i
-
-formant 2 101 100 100
-formant 3 101 100 100
\ No newline at end of file
diff --git a/espeak-data/voices/es b/espeak-data/voices/es
index 3120797c..65e978fa 100755
--- a/espeak-data/voices/es
+++ b/espeak-data/voices/es
@@ -2,4 +2,5 @@ name spanish
language es
gender male
+intonation 3
diff --git a/phsource/compile_report b/phsource/compile_report
index 70b8de18..f95824e4 100644
--- a/phsource/compile_report
+++ b/phsource/compile_report
@@ -1,50 +1,48 @@
-45 phoneme tables
+43 phoneme tables
new total
- base 99 99
- base2 24 118
- en 53 147
+ base 98 98
+ base2 24 117
+ en 54 147
en_n 30 147
- en_us 37 147
+ en_us 34 147
en_sc 39 149
en_rp 34 147
en_wm 30 147
en_wi 30 147
- af 38 131
- cy 29 125
- de 33 126
- eo 13 111
- jbo 4 112
- fi 40 130
- fr 35 122
- fr_ca 11 122
- hi 50 135
- ta 13 137
- hu 23 115
- nl 28 122
- pl 15 110
- sk 29 128
- cs 6 128
- hr 20 133
- mk 3 134
- sr 14 133
- ru 38 129
- it 17 121
- la 21 117
- es 9 120
- pt 27 134
- pt_pt 20 134
- ro 36 142
- el 8 118
- grc 12 123
- sv 25 121
- no 28 125
- is 32 124
- vi 42 137
- zhy 40 132
- zh 61 146
- sw 14 108
- th 50 142
- id 14 120
+ af 38 130
+ cy 29 124
+ de 33 125
+ eo 13 110
+ jbo 4 111
+ fi 40 129
+ fr 35 121
+ fr_ca 11 121
+ hi 50 134
+ ta 13 136
+ hu 23 114
+ nl 28 121
+ pl 15 109
+ sk 29 127
+ cs 6 127
+ hr 20 132
+ mk 3 133
+ sr 14 132
+ ru 38 128
+ it 17 120
+ la 21 116
+ es 7 117
+ pt 27 133
+ pt_pt 20 133
+ ro 36 141
+ el 8 117
+ grc 12 122
+ sv 25 120
+ no 28 124
+ is 32 123
+ vi 42 136
+ zhy 40 131
+ zh 61 145
+ sw 14 107
Data file Used by
b/b [b] base
@@ -118,8 +116,8 @@ d/dr [*] base
[d] sw
d/tap [*;] ro
d/tap1 [*] base
-d/tap2 [*2] base
d/tap3 [*] base
+d/tap4 [r] es
d/tap_i [*;] ro
d/xd [d] base
[d[] base
@@ -136,7 +134,6 @@ d/xd [d] base
[d] sw
d/xd_pzd [d;] pl
[d;] ru
-d/x_tap [*2] base
dzh/dzh [dZ] base
[dZ;] base
[dz;] base
@@ -164,8 +161,6 @@ dzh/xdzh [dZ] base
dzh/xdz_pzd [J] base
[J2] hi
envelope/p_214 [214] zh
- [5] th
-envelope/p_451 [3] th
envelope/p_512 [8] vi
envelope/p_fall [2] vi
[7] vi
@@ -177,8 +172,6 @@ envelope/p_fall [2] vi
[22] zh
[33] zh
[53] zh
- [1] th
- [2] th
envelope/p_fallrise [4] vi
envelope/p_level [1] vi
[3] zhy
@@ -189,7 +182,6 @@ envelope/p_rise [3] vi
[2] zhy
[5] zhy
[35] zh
- [4] th
envelope/vi_5 [5] vi
envelope/vi_5amp [5] vi
envelope/vi_6 [6] vi
@@ -518,8 +510,6 @@ r/xr [(@)] base
ufric/ch [C] base
[J^] base
[C2] de
- [J2] es
- [J3] es
ufric/ch_sr [h] sr
[x] sr
ufric/f [f] base
@@ -599,7 +589,6 @@ ustop/k_ [k] base
[k] el
[kh] zh
[k] sw
- [kh] th
ustop/ki [c] base
[k] base
[k] base2
@@ -648,13 +637,11 @@ ustop/k_unasp [k] base
[k] el
[k] zhy
ustop/k_unasp_ [k] zh
- [k] th
ustop/null [?] base
ustop/p [p] base
[p] fr
[ph] hi
[p] zhy
- [ph] th
ustop/p_ [p] base
[p] fr
[ph] hi
@@ -688,7 +675,6 @@ ustop/p_unasp [p] base
[p] la
[p;] ro
[p] zh
- [p] th
ustop/p_unasp_ [p] base2
[p] fi
[p] hi
@@ -711,7 +697,6 @@ ustop/t_ [t] base
[t] sk
[t] el
[th] zh
- [th] th
ustop/t_dnt [t] base
[t[] base
[t] base2
@@ -752,9 +737,7 @@ ustop/t_short [t.] hi
[t] sk
[t] el
ustop/tsh_pzd [tS;] zh
- [ch] th
ustop/tsh_pzd_unasp [tS;] zh
- [c] th
ustop/tsh_sr.wav [tS] sr
ustop/ts_pzd [tS;] base
[ts;] base
@@ -772,11 +755,9 @@ ustop/ts_sr.wav [tS;] sr
[dZ;] sr
ustop/ts_unasp [ts] zh
ustop/t_unasp [t] zh
- [t] th
vdiph/0i [OI] pt
[OI] grc
[OI] vi
- [O:I] th
vdiph/0i_2 [OI] en_sc
[OI] en_wi
[AI] no
@@ -792,15 +773,13 @@ vdiph2/i@ [i@] en_n
vdiph2/i@_2 [i@] en_wm
vdiph2/ie [i@] en_wi
[ie] fi
- [ia] th
- [i:a] th
vdiph2/ii@ [i@] en
+ [i@3] en
vdiph2/ii@_3 [i@] vi
vdiph2/iioo [io] zh
vdiph2/iu [iU] base2
[iU] vi
[iu] zhy
- [iU] th
vdiph2/iu_2 [iu] fi
vdiph2/iu_3 [iu] af
vdiph2/iu_4 [Iu] cy
@@ -813,15 +792,12 @@ vdiph2/oa [Oa] ro
vdiph2/o_oo [o@] en_wi
[o] is
vdiph2/u-@ [y@] vi
- [y:a] th
vdiph2/u#@ [U@] en_sc
vdiph2/uo [uo] fi
vdiph2/uu@ [U@] en
[U@] en_n
[U@] en_wm
[u@] vi
- [ua] th
- [u:a] th
vdiph2/y#@ [Y@] af
[y@] zh
vdiph2/yu [yU] nl
@@ -829,6 +805,7 @@ vdiph2/yu [yU] nl
vdiph2/y-y# [yY] fi
vdiph/8u [oU] en_us
[ou] zh
+vdiph/aae [aI] en_us
vdiph/aai [aai] zhy
vdiph/aai_2 [AI] af
[AY] cy
@@ -853,9 +830,6 @@ vdiph/ai [aI] base2
[aI] it
[aI] pt
[a:I] vi
- [aI] th
- [a:I] th
- [aI] id
vdiph/ai_2 [aI] cy
[aY] cy
vdiph/ai_3 [aI] no
@@ -866,14 +840,12 @@ vdiph/ai_7 [aI] en_sc
[aI2] en_sc
[aI] is
vdiph/ai_en2 [aI] en
+vdiph/aoo [aU] en_us
vdiph/au [aU] en
[aU] af
[a:U] vi
- [aU] th
- [a:U] th
vdiph/au# [aU] en_sc
-vdiph/au_2 [aU] en_us
- [au] zhy
+vdiph/au_2 [au] zhy
vdiph/au_3 [aU] en_rp
vdiph/au_4 [aU] base2
[aU] cy
@@ -881,7 +853,6 @@ vdiph/au_4 [aU] base2
[aU] sk
[aU] it
[aU] is
- [aU] id
vdiph/ee-e [E:] hi
vdiph/eei [EI] base2
[eI] en
@@ -890,14 +861,12 @@ vdiph/eei [EI] base2
[EI] vi
vdiph/eei_2 [eI] eo
[ei] fi
- [eI] id
vdiph/eei_3 [eI] en_rp
[eI] sk
vdiph/eeu [EU] pt
[EU] grc
[EU] vi
[eu] zhy
- [E:U] th
vdiph/eeu_2 [EU] la
[EU] pt_pt
vdiph/eeu_3 [aU] en_n
@@ -919,10 +888,7 @@ vdiph/eu [eU] base2
[eU] sk
[eU] pt
[eU] vi
- [eU] th
- [e:U] th
vdiph/eu_2 [eu] fi
-vdiph/@i [@:I] th
vdiph/&i [&i] fi
[aI] hi
vdiph/@i_2 [eI] af
@@ -942,7 +908,6 @@ vdiph/oi [oI] base2
[oI] it
[OI] la
[oI] vi
- [o:I] th
vdiph/oi_2 [oI] af
vdiph/ooi [OI] en
[OI] en_n
@@ -953,9 +918,9 @@ vdiph/ooi [OI] en
[OI] no
[oi] zhy
vdiph/ooi_2 [OI] af
-vdiph/ooi_3 [OI] en_us
- [OI] en_rp
+vdiph/ooi_3 [OI] en_rp
[aI] en_wm
+vdiph/ooi_4 [OI] en_us
vdiph/oou [oU] cs
[OU] grc
vdiph/ou [ou] fi
@@ -968,15 +933,12 @@ vdiph/@u [u:] en_wm
vdiph/@u_2 [oU] en_rp
vdiph/@u_3 [@U] ro
vdiph/@u_en [oU] en
- [@U] id
vdiph/ui [uI] base2
[uI] en
[uI] eo
[ui] fi
[uI] vi
[ui] zhy
- [uI] th
- [u:I] th
vdiph/u-i [yI] vi
vdiph/ui_2 [uI] af
vdiph/ui_3 [uI] cy
@@ -1035,8 +997,6 @@ voc/dh [D] base
voc/dh_ [D] base
[D] es
voc/j [J^] base
- [J3] es
-voc/j2 [J2] es
voc/Q [Q] base
[Q^] base
voc/Q_ [Q] base
@@ -1061,7 +1021,7 @@ voc/v_ [B] base
[v2] nl
[v;] ro
[v] is
-voc/v2 [v] es
+voc/vj [v] base
vocw/dh [D] base
[D] es
vocw/Q [Q] base
@@ -1074,7 +1034,6 @@ vocw/v [B] base
[v] base
[v] fr
[v] ta
- [v] es
[v;] ro
vocw/zh [Z] base
[Z;] ro
@@ -1109,7 +1068,6 @@ vowel/@ [@] base
[@] en_rp
[V] cy
[@4] hi
- [@] th
vowel/@- [@-] base
[r*] hr
vowel/& [a] en_rp
@@ -1124,7 +1082,8 @@ vowel/0 [O] base2
vowel/0_2 [0] en_n
[O] pt_pt
[o] sw
-vowel/0_3 [O:] en_us
+vowel/0_3 [O] en_us
+ [O:] en_us
[O] en_sc
[0] en_rp
[A] hu
@@ -1142,7 +1101,6 @@ vowel/3_3 [3:] en_rp
vowel/3_en [3:] en
[e@] en_wm
[3:] af
- [@:] th
vowel/@_4 [@] nl
[@] no
vowel/8_2 [U] en_us
@@ -1163,9 +1121,6 @@ vowel/a [a] en_n
[a] hr
[a] it
[a] zh
- [a] th
- [a:] th
- [a] id
vowel/a# [a/] base2
[a2] en_sc
[a2] en_wi
@@ -1182,8 +1137,7 @@ vowel/a_2 [a] base2
[a] pt_pt
[a] ro
[a:] vi
-vowel/a#_2 [a] ta
- [&] hr
+vowel/a#_2 [&] hr
[a2] sv
[&] is
[a/] sw
@@ -1209,13 +1163,13 @@ vowel/a#_3 [a2] en
[a] zhy
vowel/a_4 [a/] el
[a] vi
-vowel/a_5 [a/] it
+vowel/a_5 [a:] ta
+ [a/] it
[a] la
[a] sv
[a] sw
vowel/aa [a] fi
[A] fr_ca
- [a:] ta
[A] no
[A:] no
[aa] zhy
@@ -1262,9 +1216,6 @@ vowel/e [e] base2
[e] pt_pt
[e] grc
[e] vi
- [e] th
- [e:] th
- [e] id
vowel/e# [I] en_sc
[I2] en_sc
vowel/e_2 [eI] en_sc
@@ -1302,8 +1253,6 @@ vowel/ee_3 [&] af
vowel/ee_6 [E] en_n
[&] sk
[E3] sv
- [E] th
- [E:] th
vowel/e_mid [E] en_rp
[e] jbo
[E] fr_ca
@@ -1317,8 +1266,6 @@ vowel/e_mid [E] en_rp
[E] pt_pt
[E] no
[E] is
- [E] id
- [E2] id
vowel/e_mid2 [E] af
[E] de
[E2] de
@@ -1332,10 +1279,7 @@ vowel/e_mid2 [E] af
vowel/@_fnt [@] en_wi
[@2] en_wi
[@2] hr
-vowel/@_hgh [@] en_us
- [@2] en_us
- [@5] en_us
- [@] hr
+vowel/@_hgh [@] hr
vowel/i [i] base2
[i:] en_n
[i] en_wm
@@ -1356,8 +1300,6 @@ vowel/i [i] base2
[i] zhy
[i] zh
[i] sw
- [i] th
- [i:] th
vowel/i# [i] en_us
[i] en_rp
[y:] cy
@@ -1374,8 +1316,6 @@ vowel/i_4 [i] fi
[i] hu
[I] it
[i] is
-vowel/i#_4 [y] th
- [y:] th
vowel/i_5 [i:] en_sc
vowel/i#_5 [y] pt_pt
[i/] pt_pt
@@ -1383,7 +1323,6 @@ vowel/i#_5 [y] pt_pt
vowel/i_6 [i:] en_us
[i] ta
[i] hr
- [i] id
vowel/i_en [i:] en
[i] vi
vowel/i_fnt [i:] en_wi
@@ -1432,7 +1371,6 @@ vowel/@_low [3] en_rp
[@2] hi
[@] ro
[@2] no
- [@] id
vowel/o [o] base2
[o:] en
[oU] en_wi
@@ -1448,9 +1386,6 @@ vowel/o [o] base2
[o:] sv
[o] zh
[u] zh
- [o] th
- [o:] th
- [o] id
vowel/o- [o-] zh
vowel/o_2 [o:] cy
[o:] hi
@@ -1484,9 +1419,6 @@ vowel/oo [O:] en_sc
[O] sv
[O] no
[o] zhy
- [O] th
- [O:] th
- [O] id
vowel/oo_1 [O:] en_n
[O:] en_rp
[O@] en_rp
@@ -1534,12 +1466,11 @@ vowel/u [u:] en_wi
[u:] de
[u] eo
[U] fr
+ [u] ta
+ [u:] ta
[u:] cs
[U] la
[u] zh
- [u] th
- [u:] th
- [u] id
vowel/u# [u-] en
[u:] en_sc
vowel/u_2 [u1] fi
@@ -1563,7 +1494,6 @@ vowel/u_bck [u] base2
[u] fi
[u] fr_ca
[u:] hi
- [u:] ta
[u:] hu
[u] nl
[u] pl
@@ -1589,7 +1519,6 @@ vowel/uu_bck [U] en_n
[U] en_wi
[U] fr_ca
[U] hi
- [u] ta
[u] hu
[U] pt
[U] no
@@ -1601,6 +1530,7 @@ vowel/V_2 [V] en
[V#] ru
vowel/V_3 [V] en_rp
[V] hi
+ [a] ta
vowel/V_4 [V] en_sc
[@:] vi
vowel/V_6 [V] en_us
@@ -1682,7 +1612,6 @@ vwl_en_us/3_us [3] en_us
[3:] en_us
vwl_en_us/a [a] en_us
[aa] en_us
-vwl_en_us/aai [aI] en_us
vwl_en_us/ai@ [aI@] en_us
vwl_en_us/ar [A:] en_us
[A@] en_us
@@ -1690,11 +1619,10 @@ vwl_en_us/ee [E] en_us
vwl_en_us/er [e@] en_us
vwl_en_us/ii [I] en_us
[I2] en_us
-vwl_en_us/ir [i@] en_us
+vwl_en_us/ir [i@3] en_us
[i@] en_sc
-vwl_en_us/oo [O] en_us
+vwl_en_us/oor [O@] en_us
vwl_en_us/or [O:] en_us
- [O@] en_us
[o@] en_us
[O:] en_sc
vwl_en_us/ur [U@] en_us
@@ -1816,12 +1744,12 @@ x/d_ [d] base
[d] pl
[d] hr
[d] ru
+ [r] es
[d;] ro
[d] el
[d] is
[d] sw
-x/d_dnt [*2] base
- [d[] base
+x/d_dnt [d[] base
[d] base2
[d] fi
[d] hi
diff --git a/phsource/d/tap4 b/phsource/d/tap4
new file mode 100644
index 00000000..410ee52e
Binary files /dev/null and b/phsource/d/tap4 differ
diff --git a/phsource/ph_english b/phsource/ph_english
index aca36a09..2cc50292 100644
--- a/phsource/ph_english
+++ b/phsource/ph_english
@@ -305,6 +305,14 @@ phoneme i@
linkout r-
endphoneme
+phoneme i@3
+ vowel starttype (i) endtype (@)
+ length 250
+ formants vdiph2/ii@
+ linkout r-
+endphoneme
+
+
phoneme U@
vowel starttype (u) endtype (@)
diff --git a/phsource/ph_english_us b/phsource/ph_english_us
index 838ba68f..c0c694bb 100644
--- a/phsource/ph_english_us
+++ b/phsource/ph_english_us
@@ -5,42 +5,16 @@
//*******************************************************************
-phoneme @ // Schwa
- vowel starttype (@) endtype (@)
- formants vowel/@_hgh
- unstressed
- linkout r-
- length 130
-endphoneme
-
-
phoneme 3 // Schwa, used for rhotic schwa in American
vowel starttype (@) endtype (@)
formants vwl_en_us/3_us
-// formants vowel/3_2
unstressed
linkout r-
beforevowel @
- length 210
+ length 215
endphoneme
-phoneme @2 // Schwa, changes to I before a vowel
- vowel starttype (@) endtype (@)
- formants vowel/@_hgh
- unstressed
- beforevowel I2
- length 120
-endphoneme
-
-phoneme @5 // Schwa, changes to U before a vowel
- vowel starttype (@) endtype (@)
- formants vowel/@_hgh
- unstressed
- beforevowelpause U
- length 130
-endphoneme
-
phoneme @L
vowel starttype (@) endtype l
@@ -54,7 +28,6 @@ endphoneme
phoneme a
vowel starttype (a) endtype (@)
length 200
-// formants vowel/&_2
formants vwl_en_us/a
reduceto a2 0
endphoneme
@@ -62,8 +35,7 @@ endphoneme
phoneme aa // 'bath' etc.
vowel starttype (a) endtype (@)
- length 220
-// formants vowel/&_2
+ length 215
formants vwl_en_us/a
linkout r-
endphoneme
@@ -89,7 +61,7 @@ endphoneme
phoneme I
vowel starttype (i) endtype (i)
- length 150
+ length 155
formants vwl_en_us/ii
linkout ;
endphoneme
@@ -98,7 +70,7 @@ endphoneme
phoneme I2
vowel starttype (i) endtype (i)
unstressed
- length 150
+ length 155
formants vwl_en_us/ii
linkout ;
endphoneme
@@ -106,7 +78,7 @@ endphoneme
phoneme i // optional variant of [I] for end of words
vowel starttype (i) endtype (i)
- length 200
+ length 190
// formants vwl_en_us/i_final3
formants vowel/i#
linkout ;
@@ -115,7 +87,7 @@ endphoneme
phoneme 0
vowel starttype (o) endtype (o)
- length 200
+ length 195
formants vowel/aa_8
reduceto @ 0
endphoneme
@@ -123,8 +95,7 @@ endphoneme
phoneme V
vowel starttype (a) endtype (@)
- length 165
-// formants vowel/V
+ length 155
formants vowel/V_6
reduceto @ 0
endphoneme
@@ -139,7 +110,7 @@ endphoneme
phoneme A:
vowel starttype (a) endtype (a)
- length 200
+ length 215
formants vowel/aa_8
before r vwl_en_us/ar
linkout r-
@@ -148,7 +119,7 @@ endphoneme
phoneme A@ // Used for [A:] when followed by 'r', becomes [A:]+[r] in American
vowel starttype (a) endtype (@)
- length 240
+ length 255
formants vwl_en_us/ar
appendph r
endphoneme
@@ -156,7 +127,7 @@ endphoneme
phoneme 3:
vowel starttype (@) endtype (@)
- length 220
+ length 240
formants vwl_en_us/3_us
linkout r-
endphoneme
@@ -172,7 +143,7 @@ endphoneme
phoneme O:
vowel starttype (o) endtype (o)
- length 200
+ length 205
formants vowel/0_3
before r vwl_en_us/or
reduceto @ 0
@@ -181,16 +152,16 @@ endphoneme
phoneme O@
vowel starttype (o) endtype (@)
- length 270
-// formants vwl_en_us/oor
- formants vwl_en_us/or
+ length 265
+ formants vwl_en_us/oor
+// formants vwl_en_us/or
appendph r
endphoneme
phoneme o@
vowel starttype (o) endtype (@)
- length 270
+ length 265
formants vwl_en_us/or
appendph r
endphoneme
@@ -199,29 +170,29 @@ endphoneme
phoneme O
vowel starttype (o) endtype (o)
length 200
- formants vwl_en_us/oo
+ formants vowel/0_3
reduceto @ 0
endphoneme
phoneme u:
vowel starttype (u) endtype (u)
- length 170
+ length 175
formants vowel/u#_5
// before l/2 vwl_en/u_L-40+l/L2_uL
endphoneme
phoneme aU
- vowel starttype (a) endtype (u)
- length 210
- formants vdiph/au_2
+ vowel starttype (a) endtype (o)
+ length 235
+ formants vdiph/aoo
endphoneme
phoneme oU
vowel starttype (@) endtype (u)
- length 240
+ length 235
formants vdiph/8u
endphoneme
@@ -229,7 +200,7 @@ endphoneme
phoneme aI
vowel starttype (a) endtype (i)
length 235
- formants vwl_en_us/aai
+ formants vdiph/aae
endphoneme
@@ -237,28 +208,27 @@ phoneme eI
vowel starttype (e) endtype (i)
length 220
formants vdiph2/ei_4
-// formants vwl_en_us/ei
endphoneme
phoneme OI
vowel starttype (o) endtype (i)
- length 300
- formants vdiph/ooi_3
+ length 290
+ formants vdiph/ooi_4
endphoneme
phoneme e@
vowel starttype (e) endtype (@)
- length 280
+ length 275
formants vwl_en_us/er
appendph r
endphoneme
-phoneme i@
+phoneme i@3
vowel starttype (i) endtype (@)
- length 230
+ length 255
formants vwl_en_us/ir
appendph r
endphoneme
@@ -266,7 +236,7 @@ endphoneme
phoneme U@
vowel starttype (@) endtype (@)
- length 230
+ length 235
formants vwl_en_us/ur
linkout r-
endphoneme
@@ -274,7 +244,7 @@ endphoneme
phoneme aI@
vowel starttype (a) endtype (@)
- length 270
+ length 265
formants vwl_en_us/ai@
linkout r-
endphoneme
@@ -282,7 +252,7 @@ endphoneme
phoneme aU@
vowel starttype (a) endtype (@)
- length 270
+ length 260
formants vwl_en/aU@
linkout r-
endphoneme
diff --git a/phsource/ph_slovak b/phsource/ph_slovak
index fdb0a8c2..3f432f99 100644
--- a/phsource/ph_slovak
+++ b/phsource/ph_slovak
@@ -137,7 +137,7 @@ phoneme R^/ // Czech r-caron (weaker, for after p,f,t,k)
vcd pla frc sibilant
vowelin f1=0 f2=1700 -300 300 f3=-300 80
vowelout f1=2 f2=1700 -300 300 f3=-300 80 brk
- formants voc/zh_2+r3/rz_cs%30
+ formants voc/zh_2+r3/rz_cs%25
lengthmod 6
endphoneme
diff --git a/phsource/ph_spanish b/phsource/ph_spanish
index bd9226df..0cdd313c 100644
--- a/phsource/ph_spanish
+++ b/phsource/ph_spanish
@@ -56,30 +56,16 @@ phoneme s
endphoneme
-phoneme v // TEST
- vcd lbd frc
- vowelin f1=0 f2=1000 -300 -200 f3=-300 100
- vowelout f1=0 f2=1000 -500 -300 f3=-300 60 len=50
- lengthmod 6
- formants voc/v2+vocw/v // shorter
-endphoneme
-
-phoneme J2 // TEST palatal fricative (Kirshenbaum C)
- vcd pal frc palatal
- vowelin f1=2 f2=2700 400 600 f3=200 70
- vowelout f1=2 f2=2700 400 600 f3=200 70 len=100
- lengthmod 6
- formants voc/j2+ufric/ch%50
-endphoneme
-
-phoneme J3 // TEST palatal fricative (Kirshenbaum C)
- vcd pal frc palatal
- vowelin f1=2 f2=2700 400 600 f3=200 70
- vowelout f1=2 f2=2700 400 600 f3=200 70 len=100
- lengthmod 6
- formants voc/j+ufric/ch%5
+phoneme r // TEST flap ??
+ vcd alv flp
+ brkafter
+ vowelout f1=3 f2=1500 -400 300 f3=-100 80 rms=35 len=50
+ vowelin f1=0 f2=1500 -300 300 f3=-100 80
+ formants d/tap4+x/d_%30
+ lengthmod 3
endphoneme
+
diff --git a/phsource/ph_tamil b/phsource/ph_tamil
index 92631b51..d4bf8908 100644
--- a/phsource/ph_tamil
+++ b/phsource/ph_tamil
@@ -7,14 +7,14 @@
phoneme a
vowel starttype (@) endtype (@)
length 130
- formants vowel/a#_2
+ formants vowel/V_3
endphoneme
phoneme a:
vowel starttype (a) endtype (a)
length 270
- formants vowel/aa
+ formants vowel/a_5
endphoneme
@@ -64,14 +64,14 @@ endphoneme
phoneme u
vowel starttype (u) endtype (u)
length 130
- formants vowel/uu_bck
+ formants vowel/u
endphoneme
phoneme u:
vowel starttype (u) endtype (u)
length 270
- formants vowel/u_bck
+ formants vowel/u
endphoneme
diff --git a/phsource/phonemes b/phsource/phonemes
index e823f3bb..23302d5b 100644
--- a/phsource/phonemes
+++ b/phsource/phonemes
@@ -28,8 +28,9 @@ phonemenumber 21 _^_ // Change language
phonemenumber 22 _X1 // a language specific action
phonemenumber 23 _| // very short pause
phonemenumber 24 _:: // long pause
-phonemenumber 25 _;_ // clause pause
-phonemenumber 26 t# // reduced version of [t]
+phonemenumber 25 t# // reduced version of [t]
+phonemenumber 26 '! // stress - emphasized
+phonemenumber 27 _;_ // clause pause
// The base phoneme table contains the utility phonemes, the consonants,
// and a schwa. The vowels are defined in the language specific phoneme
@@ -137,7 +138,7 @@ phoneme _;_ // clause pause
pause
formants NULL
starttype _ endtype _
- length 150
+ length 200
lengthmod 1
endphoneme
@@ -674,20 +675,6 @@ phoneme * // flap
lengthmod 3
endphoneme
-phoneme *2 // TEST flap
- vcd alv flp
- vowelout f1=2 f2=1700 -300 200 f3=-300 60 len=15 brk
- vowelin f1=2 f2=1700 -300 150 f3=-200 80
- formants d/tap2+x/d_dnt%30
- after _ NULL
- after @ d/x_tap
- vowelin f1=1 f2=1700 -300 150 f3=-200 80
- before (i) d/tap2+x/d_dnt%30
- lengthmod 3
- switchvoicing t
-endphoneme
-
-
phoneme dZ
@@ -790,6 +777,7 @@ phoneme v
vowelout f1=0 f2=1000 -500 -300 f3=-300 60 len=50
lengthmod 6
formants voc/v+vocw/v
+ before (r) voc/vj+vocw/v
before _ voc/v_+vocw/v
switchvoicing f
endphoneme
diff --git a/phsource/vdiph/8u b/phsource/vdiph/8u
index 2cd358b9..0339c285 100644
Binary files a/phsource/vdiph/8u and b/phsource/vdiph/8u differ
diff --git a/phsource/vdiph/Vu_4 b/phsource/vdiph/Vu_4
new file mode 100644
index 00000000..40663692
Binary files /dev/null and b/phsource/vdiph/Vu_4 differ
diff --git a/phsource/vwl_en_us/aai b/phsource/vdiph/aae
similarity index 55%
rename from phsource/vwl_en_us/aai
rename to phsource/vdiph/aae
index 45c1eb55..25b5ed8a 100644
Binary files a/phsource/vwl_en_us/aai and b/phsource/vdiph/aae differ
diff --git a/phsource/vdiph/aoo b/phsource/vdiph/aoo
new file mode 100644
index 00000000..a00fd14f
Binary files /dev/null and b/phsource/vdiph/aoo differ
diff --git a/phsource/vdiph/ooi_3 b/phsource/vdiph/ooi_3
index 7469a316..f512113d 100644
Binary files a/phsource/vdiph/ooi_3 and b/phsource/vdiph/ooi_3 differ
diff --git a/phsource/vdiph/ooi_4 b/phsource/vdiph/ooi_4
new file mode 100644
index 00000000..8424bf6a
Binary files /dev/null and b/phsource/vdiph/ooi_4 differ
diff --git a/phsource/vdiph/vowelchart.png b/phsource/vdiph/vowelchart.png
index 69d89a36..9fa880c8 100644
Binary files a/phsource/vdiph/vowelchart.png and b/phsource/vdiph/vowelchart.png differ
diff --git a/phsource/vdiph2/ei_4 b/phsource/vdiph2/ei_4
index 084280c1..267ff01e 100644
Binary files a/phsource/vdiph2/ei_4 and b/phsource/vdiph2/ei_4 differ
diff --git a/phsource/vdiph2/vowelchart.png b/phsource/vdiph2/vowelchart.png
index a55d533c..9d8f3e12 100644
Binary files a/phsource/vdiph2/vowelchart.png and b/phsource/vdiph2/vowelchart.png differ
diff --git a/phsource/voc/vj b/phsource/voc/vj
new file mode 100644
index 00000000..44f2bfb1
Binary files /dev/null and b/phsource/voc/vj differ
diff --git a/phsource/voc/zh_2 b/phsource/voc/zh_2
index f063c783..ac9fd245 100644
Binary files a/phsource/voc/zh_2 and b/phsource/voc/zh_2 differ
diff --git a/phsource/vowel/V_6 b/phsource/vowel/V_6
new file mode 100644
index 00000000..46faf887
Binary files /dev/null and b/phsource/vowel/V_6 differ
diff --git a/phsource/vowel/aa_8 b/phsource/vowel/aa_8
index af60e3da..2b8272c3 100644
Binary files a/phsource/vowel/aa_8 and b/phsource/vowel/aa_8 differ
diff --git a/phsource/vowel/u_bck2 b/phsource/vowel/u_bck2
new file mode 100644
index 00000000..dfc99f0a
Binary files /dev/null and b/phsource/vowel/u_bck2 differ
diff --git a/phsource/vowel/vowelchart.png b/phsource/vowel/vowelchart.png
index 1e935aab..211021b5 100644
Binary files a/phsource/vowel/vowelchart.png and b/phsource/vowel/vowelchart.png differ
diff --git a/phsource/vwl_en_us/3_us b/phsource/vwl_en_us/3_us
index b820a438..0e5ca6c6 100644
Binary files a/phsource/vwl_en_us/3_us and b/phsource/vwl_en_us/3_us differ
diff --git a/phsource/vwl_en_us/@r_us b/phsource/vwl_en_us/@r_us
deleted file mode 100644
index 2476b91d..00000000
Binary files a/phsource/vwl_en_us/@r_us and /dev/null differ
diff --git a/phsource/vwl_en_us/V b/phsource/vwl_en_us/V
deleted file mode 100644
index 74c045ca..00000000
Binary files a/phsource/vwl_en_us/V and /dev/null differ
diff --git a/phsource/vwl_en_us/a b/phsource/vwl_en_us/a
index cec2f646..3d9556ec 100644
Binary files a/phsource/vwl_en_us/a and b/phsource/vwl_en_us/a differ
diff --git a/phsource/vwl_en_us/ai@ b/phsource/vwl_en_us/ai@
index f4932e36..32d27fed 100644
Binary files a/phsource/vwl_en_us/ai@ and b/phsource/vwl_en_us/ai@ differ
diff --git a/phsource/vwl_en_us/ar b/phsource/vwl_en_us/ar
index 22a1427f..5cc2166e 100644
Binary files a/phsource/vwl_en_us/ar and b/phsource/vwl_en_us/ar differ
diff --git a/phsource/vwl_en_us/ee b/phsource/vwl_en_us/ee
index 43e5dbc0..faa06f94 100644
Binary files a/phsource/vwl_en_us/ee and b/phsource/vwl_en_us/ee differ
diff --git a/phsource/vwl_en_us/ei b/phsource/vwl_en_us/ei
deleted file mode 100644
index 6a088d3d..00000000
Binary files a/phsource/vwl_en_us/ei and /dev/null differ
diff --git a/phsource/vwl_en_us/er b/phsource/vwl_en_us/er
index 344d6d07..a3da4331 100644
Binary files a/phsource/vwl_en_us/er and b/phsource/vwl_en_us/er differ
diff --git a/phsource/vwl_en_us/ii b/phsource/vwl_en_us/ii
index 6d1b6767..de744c3b 100644
Binary files a/phsource/vwl_en_us/ii and b/phsource/vwl_en_us/ii differ
diff --git a/phsource/vwl_en_us/ir b/phsource/vwl_en_us/ir
index 00397e58..9b5ae294 100644
Binary files a/phsource/vwl_en_us/ir and b/phsource/vwl_en_us/ir differ
diff --git a/phsource/vwl_en_us/oo b/phsource/vwl_en_us/oo
deleted file mode 100644
index e0496fa1..00000000
Binary files a/phsource/vwl_en_us/oo and /dev/null differ
diff --git a/phsource/vwl_en_us/oor b/phsource/vwl_en_us/oor
index 7a37a0ad..e005694d 100644
Binary files a/phsource/vwl_en_us/oor and b/phsource/vwl_en_us/oor differ
diff --git a/phsource/vwl_en_us/or b/phsource/vwl_en_us/or
index b44141ea..d4e998e6 100644
Binary files a/phsource/vwl_en_us/or and b/phsource/vwl_en_us/or differ
diff --git a/src/event.cpp b/src/event.cpp
index c032f203..bcb75ef1 100644
--- a/src/event.cpp
+++ b/src/event.cpp
@@ -193,11 +193,11 @@ static espeak_EVENT* event_copy (espeak_EVENT* event)
static void event_notify(espeak_EVENT* event)
{
ENTER("event_notify");
-
static unsigned int a_old_uid = 0;
espeak_EVENT events[2];
memcpy(&events[0],event,sizeof(espeak_EVENT)); // the event parameter in the callback function should be an array of eventd
+ memcpy(&events[1],event,sizeof(espeak_EVENT));
events[1].type = espeakEVENT_LIST_TERMINATED; // ... terminated by an event type=0
if (event && my_callback)
@@ -207,31 +207,33 @@ ENTER("event_notify");
switch(event->type)
{
case espeakEVENT_SENTENCE:
- my_callback(NULL, 0, event);
+ my_callback(NULL, 0, events);
a_old_uid = event->unique_identifier;
break;
+ case espeakEVENT_MSG_TERMINATED:
+ case espeakEVENT_MARK:
case espeakEVENT_WORD:
- case espeakEVENT_MSG_TERMINATED:
+ case espeakEVENT_END:
+ case espeakEVENT_PHONEME:
{
+// jonsd - I'm not sure what this is for. gilles says it's for when Gnome Speech reads a file of blank lines
if (a_old_uid != event->unique_identifier)
{
- espeak_EVENT_TYPE a_new_type = event->type;
- event->type = espeakEVENT_SENTENCE;
- my_callback(NULL, 0, event);
- event->type = a_new_type;
+ espeak_EVENT_TYPE a_new_type = events[0].type;
+ events[0].type = espeakEVENT_SENTENCE;
+ my_callback(NULL, 0, events);
+ events[0].type = a_new_type;
usleep(50000);
}
- my_callback(NULL, 0, event);
+ my_callback(NULL, 0, events);
a_old_uid = event->unique_identifier;
}
break;
default:
- case espeakEVENT_LIST_TERMINATED:
- case espeakEVENT_MARK:
- case espeakEVENT_PLAY:
- case espeakEVENT_END:
+ case espeakEVENT_LIST_TERMINATED:
+ case espeakEVENT_PLAY:
break;
}
}
diff --git a/src/extras.cpp b/src/extras.cpp
index 30847e0d..9cea30b4 100644
--- a/src/extras.cpp
+++ b/src/extras.cpp
@@ -80,6 +80,8 @@ void CloseWaveFile3(FILE *f)
unsigned int pos;
static int value;
+ if(f == NULL)
+ return;
fflush(f);
pos = ftell(f);
@@ -118,13 +120,13 @@ int TestUriCallback(int type, const char *uri, const char *base)
int TestSynthCallback(short *wav, int numsamples, espeak_EVENT *events)
{//====================================================================
int type;
+ f_events = fopen("/home/jsd1/speechdata/text/events","a");
fprintf(f_events,"--\n");
- if(f_wavtest == NULL) return(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,"%2d (%4d %4d) %5d %5d (%3d) ",type,events->unique_identifier,(int)events->user_data,events->audio_position,events->text_position,events->length);
if((type==3) || (type==4))
fprintf(f_events,"'%s'\n",events->id.name);
else
@@ -136,15 +138,15 @@ int TestSynthCallback(short *wav, int numsamples, espeak_EVENT *events)
events++;
}
- if(wav == NULL)
+ if((wav == NULL) && (f_wavtest != NULL))
{
fprintf(f_events,"Finished\n");
CloseWaveFile3(f_wavtest);
f_wavtest = NULL;
- fclose(f_events);
- return(0);
}
+ fclose(f_events);
+ if(f_wavtest == NULL) return(0);
fwrite(wav,numsamples*2,1,f_wavtest);
return(0);
}
@@ -1154,71 +1156,11 @@ void Test2()
fclose(f_out);
}
-void Test3()
-{
- espeak_VOICE voicespec;
- espeak_VOICE *newvoice;
-int x;
-
- espeak_Initialize(AUDIO_OUTPUT_SYNCHRONOUS,100,NULL,0);
- memset(&voicespec,0,sizeof(voicespec));
- voicespec.languages = "de";
- voicespec.gender = 2;
-
- espeak_SetVoiceByProperties(&voicespec);
- newvoice = espeak_GetCurrentVoice();
- x = 1;
-}
#endif
-#define OUTPUT_MODE AUDIO_OUTPUT_PLAYBACK
-#define TEXT "Hello world."
-#define TEXT_SSML ("" TEXT "")
-static void
-speak(const char *text)
-{
- int result;
- result = espeak_Synth(text, strlen(text) + 1, 0, POS_CHARACTER, 0, espeakSSML, NULL, NULL);
- assert(result == EE_OK);
-}
-int test4() {
- espeak_ERROR result;
- int sample_rate;
- sample_rate = espeak_Initialize(OUTPUT_MODE, 2000, NULL, 0);
- assert(sample_rate != EE_INTERNAL_ERROR);
- espeak_SetSynthCallback(synth_callback);
-
- espeak_VOICE voice;
- memset(&voice, 0, sizeof(espeak_VOICE));
-// voice.name = "default";
- // voice.languages = "en";
- voice.gender = 2;
-// voice.age = 4;
-
- result = espeak_SetVoiceByProperties(&voice);
- assert(result == EE_OK);
- speak(TEXT_SSML);
- speak(TEXT_SSML);
- espeak_Synchronize();
-
-#ifdef deleted
- /* Now the same ting without ssml tags. */
-result = espeak_SetVoiceByProperties(&voice);
- assert(result == EE_OK);
- speak(TEXT);
- speak(TEXT);
- espeak_Synchronize();
-#endif
- result = espeak_Terminate();
- assert(result == EE_OK);
-
- return 0;
-}
-
-
-const char* text1 = "Hello World2. This is the second sentence";
+const char* text1 = "Hello, World2 . This is the second sentence";
void TestTest(int control)
{//=======================
@@ -1227,10 +1169,9 @@ void TestTest(int control)
unsigned int ix=0;
char textbuf[2000];
espeak_VOICE voice;
- unsigned int unique_identifier=0;
+ static unsigned int unique_identifier= 123;
+ static int user_data = 456;
-//FindPhonemesUsed();
-//return;
//CharsetToUnicode("ISO-8859-4");
//CharsetToUnicode("ISCII");
@@ -1243,7 +1184,7 @@ if(control==2)
}
memset(&voice,0,sizeof(voice));
- f = fopen("/home/jsd1/speechdata/text/test","r");
+ f = fopen("/home/jsd1/speechdata/text/test.txt","r");
if(f==NULL)
return;
@@ -1259,13 +1200,15 @@ if(control==2)
f_wavtest = OpenWaveFile3("/home/jsd1/speechdata/text/test.wav");
f_events = fopen("/home/jsd1/speechdata/text/events","w");
- fprintf(f_events,"Audio Text Length Type Id\n");
+ fprintf(f_events,"Type Audio Text Length Id\n");
+ fclose(f_events);
- espeak_Initialize(AUDIO_OUTPUT_RETRIEVAL,1000,NULL,1);
+ espeak_Initialize(AUDIO_OUTPUT_PLAYBACK,1000,NULL,0);
espeak_SetSynthCallback(TestSynthCallback);
espeak_SetUriCallback(TestUriCallback);
- espeak_Synth(text1, strlen(text1)+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, (void *)user_data);
+ espeak_Synth(text1, strlen(text1)+1, 0, POS_CHARACTER, 0, espeakSSML|espeakCHARS_UTF8, &unique_identifier, (void *)(user_data+1));
espeak_SetParameter(espeakPUNCTUATION, 1, 0);
espeak_Synchronize();
diff --git a/src/intonation.cpp b/src/intonation.cpp
index d751af83..6c88abb5 100755
--- a/src/intonation.cpp
+++ b/src/intonation.cpp
@@ -35,10 +35,15 @@
provide a more flexible intonation system.
*/
+// bits in SYLLABLE.flags
+#define SYL_RISE 1
+#define SYL_EMPHASIS 2
+#define SYL_END_CLAUSE 4
+
typedef struct {
char stress;
char env;
- char flags; //bit 0=pitch rising, bit1=emnphasized
+ char flags; //bit 0=pitch rising, bit1=emnphasized, bit2=end of clause
char nextph_type;
short pitch1;
short pitch2;
@@ -286,7 +291,7 @@ static TONE_TABLE tone_table[N_TONE_TABLE] = {
20, 25, 34, 20, drops_0, 3, 3, 5, oflow, NULL, 15, 28, 0},
{PITCHfall, 41, 4, PITCHfall, 41, 27, // 3 exclamation
- 20, 25, 34, 24, drops_0, 3, 4, 5, oflow_emf, back_emf, 16, 4, 0},
+ 20, 25, 36, 22, drops_0, 3, 4, 5, oflow_emf, back_emf, 16, 4, 0},
{PITCHfall, 38, 2, PITCHfall, 42, 30, // 4 statement, emphatic
20, 25, 34, 22, drops_0, 3, 3, 5, oflow, NULL, 15, 5, 0},
@@ -456,7 +461,7 @@ static void set_pitch(SYLLABLE *syl, int base, int drop)
if(drop < 0)
{
- flags = 1;
+ flags = SYL_RISE;
drop = -drop;
}
@@ -892,8 +897,10 @@ void Translator::CalcPitches(int clause_type)
int option;
int group_tone;
int group_tone_emph;
+ int group_tone_comma;
int ph_start=0;
int st_start;
+ int st_clause_end;
int count;
int n_primary;
int count_primary;
@@ -917,6 +924,11 @@ void Translator::CalcPitches(int clause_type)
if(p->tone >= 4)
n_primary++;
}
+ else
+ if((p->ph->code == phonPAUSE_CLAUSE) && (n_st > 0))
+ {
+ syllable_tab[n_st-1].flags |= SYL_END_CLAUSE;
+ }
}
syllable_tab[n_st].stress = 0; // extra 0 entry at the end
@@ -938,6 +950,7 @@ void Translator::CalcPitches(int clause_type)
group_tone = punct_to_tone[option][clause_type];
group_tone_emph = punct_to_tone[option][5]; // emphatic form of statement
+ group_tone_comma = punct_to_tone[option][1]; // emphatic form of statement
if(clause_type == 4)
no_tonic = 1; /* incomplete clause, used for abbreviations such as Mr. Dr. Mrs. */
@@ -975,7 +988,7 @@ void Translator::CalcPitches(int clause_type)
if(syllable_tab[ix].stress == 6)
{
// emphasize this syllable, but don't end the current tone group
- syllable_tab[st_ix].flags = 2;
+ syllable_tab[st_ix].flags = SYL_EMPHASIS;
syl->stress = 5;
break;
}
@@ -985,7 +998,7 @@ void Translator::CalcPitches(int clause_type)
if(syl->stress == 6)
{
// an emphasized syllable, end the tone group after the next primary stress
- syllable_tab[st_ix].flags = 2;
+ syllable_tab[st_ix].flags = SYL_EMPHASIS;
count = 0;
if((n_primary - count_primary) > 1)
@@ -1011,6 +1024,14 @@ void Translator::CalcPitches(int clause_type)
st_start = ix;
}
+ if((st_start < st_ix) && (syl->flags & SYL_END_CLAUSE))
+ {
+ // end of clause after this syllable, indicated by a phonPAUSE_CLAUSE phoneme
+ st_clause_end = st_ix+1;
+ count_pitch_vowels(st_start, st_clause_end, st_clause_end);
+ calc_pitches(st_start, st_clause_end, group_tone_comma);
+ st_start = st_clause_end;
+ }
}
if(st_start < st_ix)
@@ -1040,7 +1061,7 @@ void Translator::CalcPitches(int clause_type)
p->pitch2 = x;
p->env = PITCHfall;
- if(syl->flags & 1)
+ if(syl->flags & SYL_RISE)
{
p->env = PITCHrise;
}
@@ -1054,7 +1075,7 @@ void Translator::CalcPitches(int clause_type)
if(p->tone > 5)
p->env = syl->env;
- if(syl->flags & 2)
+ if(syl->flags & SYL_EMPHASIS)
{
p->tone |= 8; // emphasized
}
diff --git a/src/phoneme.h b/src/phoneme.h
index 1b938fc9..fb2acc23 100755
--- a/src/phoneme.h
+++ b/src/phoneme.h
@@ -85,6 +85,8 @@
#define phonPAUSE_LONG 24
#define phonT_REDUCED 25
#define phonSTRESS_TONIC 26
+#define phonPAUSE_CLAUSE 27
+
extern const unsigned char pause_phonemes[8]; // 0, vshort, short, pause, long, glottalstop
// place of articulation
diff --git a/src/readclause.cpp b/src/readclause.cpp
index 3e9928c1..9495288c 100644
--- a/src/readclause.cpp
+++ b/src/readclause.cpp
@@ -50,6 +50,7 @@ int ungot_char2 = 0;
char *p_textinput;
wchar_t *p_wchar_input;
int ungot_char;
+char *ungot_word = NULL;
int end_of_input;
int ignore_text=0; // set during ... to ignore text which has been replaced by an alias
@@ -1741,6 +1742,13 @@ int Translator::ReadClause(FILE *f_in, char *buf, unsigned short *charix, int n_
f_input = f_in; // for GetC etc
+ if(ungot_word != NULL)
+ {
+ strcpy(buf,ungot_word);
+ ix += strlen(ungot_word);
+ ungot_word = NULL;
+ }
+
if(ungot_char2 != 0)
{
c2 = ungot_char2;
@@ -1936,17 +1944,22 @@ f_input = f_in; // for GetC etc
else
if(iswspace(c1))
{
+ char *p_word;
+
if(translator_name == 0x6a626f)
{
// language jbo : lojban
// treat "i" or ".i" as end-of-sentence
- if(buf[ix-1] == 'i')
+ p_word = &buf[ix-1];
+ if(p_word[0] == 'i')
{
- if(iswspace(buf[ix-2]) || ((buf[ix-2] == '.') && iswspace(buf[ix-3])))
+ if(p_word[-1] == '.')
+ p_word--;
+ if(p_word[-1] == ' ')
{
+ ungot_word = "i ";
UngetC(c2);
- buf[ix] = ' ';
- buf[ix+1] = 0;
+ p_word[0] = 0;
return(CLAUSE_PERIOD);
}
}
diff --git a/src/setlengths.cpp b/src/setlengths.cpp
index 77ad1eb2..08d9b061 100755
--- a/src/setlengths.cpp
+++ b/src/setlengths.cpp
@@ -467,7 +467,13 @@ void Translator::CalcLengths()
{
if((p2->type == phVOWEL) && !(p2->ph->phflags & phNONSYLLABIC))
more_syllables++;
+
+ if(p2->ph->code == phonPAUSE_CLAUSE)
+ end_of_clause = 2;
}
+ if(p2->ph->code == phonPAUSE_CLAUSE)
+ end_of_clause = 2;
+
if((p2->newword & 2) && (more_syllables==0))
{
end_of_clause = 2;
diff --git a/src/synthdata.cpp b/src/synthdata.cpp
index 06305df6..2a790d66 100755
--- a/src/synthdata.cpp
+++ b/src/synthdata.cpp
@@ -35,8 +35,8 @@
#include "translate.h"
#include "wave.h"
-const char *version_string = "1.30.15 17.Jan.08";
-const int version_phdata = 0x013010;
+const char *version_string = "1.31 19.Jan.08";
+const int version_phdata = 0x013100;
int option_device_number = -1;
diff --git a/src/tr_languages.cpp b/src/tr_languages.cpp
index f941a63b..a4380c0f 100644
--- a/src/tr_languages.cpp
+++ b/src/tr_languages.cpp
@@ -423,8 +423,8 @@ SetLengthMods(tr,3); // all equal
case L_jbo: // Lojban
{
- static const short stress_lengths_jbo[8] = {180,180, 220,220, 0,0, 260,280};
- static const wchar_t jbo_punct_within_word[] = {'.',',','\'',0x2c8,0}; // allow period and comma within a word, also stress marker
+ static const short stress_lengths_jbo[8] = {185,170, 200,200, 0,0, 290,300};
+ static const wchar_t jbo_punct_within_word[] = {'.',',','\'',0x2c8,0}; // allow period and comma within a word, also stress marker (from LOPT_SYLLABLE_CAPS)
tr = new Translator();
SetupTranslator(tr,stress_lengths_jbo,NULL);
tr->langopts.stress_rule = 2;
@@ -572,14 +572,14 @@ SetLengthMods(tr,3); // all equal
tr->langopts.spelling_stress = 1;
tr->langopts.param[LOPT_COMBINE_WORDS] = 4; // combine some prepositions with the following word
- tr->langopts.numbers = 0x1c01 + 0x4000;
+ tr->langopts.numbers = 0x0c01 + 0x4000 + NUM_ROMAN;
tr->langopts.numbers2 = 0x40;
tr->langopts.thousands_sep = 0; //no thousands separator
tr->langopts.decimal_sep = ',';
if(name2 == L('c','s'))
{
- tr->langopts.numbers2 = 0x8; // variant numbers before milliards
+ tr->langopts.numbers2 = 0x48; // variant numbers before milliards
}
SetLetterVowel(tr,'y');
@@ -623,7 +623,7 @@ SetLengthMods(tr,3); // all equal
case L('t','a'):
{
- static const short stress_lengths_ta[8] = {190, 190, 210, 210, 0, 0, 230, 250};
+ static const short stress_lengths_ta[8] = {190, 190, 210, 210, 0, 0, 220, 220};
static const unsigned char stress_amps_ta[8] = {17,14, 20,19, 20,24, 24,22 };
tr = new Translator();