lang=fr: removed unstressed monosyllable option. lang=pt,it: fixed crash when speaking some numbers. git-svn-id: https://espeak.svn.sourceforge.net/svnroot/espeak/trunk@218 d46cf337-b52f-0410-862d-fd96e6ae7743master
@@ -837,7 +837,6 @@ | |||
sst (@ sSt | |||
sch S | |||
sch (en_ sC | |||
_) sh S | |||
sh (K S | |||
sou (nd saU | |||
@@ -863,6 +862,14 @@ | |||
_) safe _^_EN | |||
&) schaft (_S6 Saft | |||
ä) schen sC@n // but not wäschen | |||
fe) schen sC@n | |||
ie) schen sC@n | |||
h) schen sC@n | |||
ö) schen sC@n // but not löschen | |||
äu) schen sC@n // but not täuschen | |||
schein (lich S'aIn | |||
_) schul (@P5 S'u:l | |||
_) schul (d S'Ul |
@@ -24,7 +24,7 @@ | |||
// 2006-11-18 Gilles Casse <[email protected]> | |||
// | |||
// Updated 2009-02-01 Michel Such <[email protected]> | |||
// Updated 2009-03-12 Michel Such <[email protected]> | |||
// | |||
// * Numbers, a few abbreviations and exceptions. | |||
// | |||
@@ -296,23 +296,23 @@ pr professeur $text *dot $capital | |||
// articles | |||
le $u+ $nounf | |||
le $u+ $verb $verbextend | |||
la $u+ $nounf | |||
la $u+ $verb $verbextend | |||
les lez2 $u+ $nounf | |||
les lez2 $u+ $verb $verbextend | |||
un $u+ $nounf | |||
une $u+ $nounf | |||
le $nounf $u+ | |||
le $verbextend $u | |||
la $nounf $u+ | |||
la $verbextend $u | |||
les lez2 $nounf $u= | |||
les lez2 $verbextend $u | |||
un $nounf $u+ | |||
une $nounf $u+ | |||
// conjonctions | |||
mais $u+ | |||
ou u $u $brk | |||
ou $u $brk | |||
eh $u $brk | |||
et e $u $brk | |||
et $u $brk | |||
ni $u $brk | |||
car $u+ $brk | |||
car $u $brk | |||
car $noun | |||
cependant $brk | |||
néanmoins $brk | |||
@@ -328,14 +328,19 @@ aussi $u+ | |||
certes $u+ | |||
dont dO~t2 $u | |||
lorsque $u | |||
puisque $u | |||
lorsque lO2rsk@ $u+ | |||
puisque pw^isk@ $u+ | |||
presque $u+ | |||
que $u+ | |||
(parce que) parsk@ $u+ | |||
que $u+ | |||
qui $u+ $verbf | |||
(parce qu'il) parskil $u+ | |||
(parce qu'ils) parskilz2 $u+ | |||
(parce qu'elle) parskE2l $u+ | |||
(parce qu'elles) parskE2lz2 $u+ | |||
(parce qu'on) parskO~n2 $u+ | |||
tant tA~t2 $u+ | |||
qui $verbf $u+ | |||
quoique $u | |||
si $u | |||
quant kA~t2 $u | |||
// pronouns | |||
@@ -399,7 +404,7 @@ leurs $u $verb $verbextend | |||
(les leurs) le||lWr $u+ $verbf | |||
// prepositions | |||
de $u | |||
de $u $nounf | |||
du $u $nounf | |||
des dez2 $u $nounf | |||
@@ -421,7 +426,6 @@ en $u+ $verb $verbextend | |||
par $u+ | |||
parmi $u+ | |||
pour $u+ | |||
tant tA~t2 $u+ | |||
autant $u+ | |||
tandis $u+ | |||
dès $u | |||
@@ -441,8 +445,8 @@ très $u | |||
// negative | |||
ne $u $verbf | |||
pas $u+ | |||
pas $noun | |||
pas p'a2z2 | |||
pas pa $noun | |||
plus $u+ | |||
guère $u+ | |||
jamais $u+ | |||
@@ -452,7 +456,7 @@ oui $u+ | |||
// questions | |||
quand kA~t2 $u+ | |||
quoi $u+ | |||
où $brk $u+ | |||
où $u+ | |||
comme kO2m $u+ | |||
comment $u+ | |||
pourquoi $u+ | |||
@@ -572,6 +576,7 @@ bus bys | |||
bus by $verb | |||
campus kA~pys | |||
cancer kA~sEr | |||
catcher catcheur $text | |||
(chef d'oeuvre) chédeuvre $text | |||
(chef d'oeuvres) chédeuvres $text | |||
choeur kWr | |||
@@ -591,7 +596,7 @@ laser lazEr | |||
malus malys | |||
mapper _^_en | |||
mars mars | |||
mieux mj'Y $u+ | |||
mieux mjY $u+ | |||
mrs _^_en | |||
ours urs | |||
parangon parA~gO~ | |||
@@ -787,5 +792,5 @@ wallis wAlis | |||
futuna futuna | |||
zimbabwe zimbabwe | |||
pest $1 | |||
@@ -23,7 +23,7 @@ | |||
// 2006-11-18 Gilles Casse <[email protected]> | |||
// | |||
// Updated: 2009-02-19 Michel Such <[email protected]> | |||
// Updated: 2009-03-12 Michel Such <[email protected]> | |||
// | |||
// Letter classes: | |||
@@ -257,6 +257,7 @@ _) ç' (P2v s | |||
em (p A~ | |||
en (_ A~n2 // en | |||
en (hA A~n // enharmonique | |||
_C) en (j E~ // benjamin | |||
_) en (A A~n // enivrer | |||
C) en (d_ A~ // comprend dépend | |||
@@ -825,6 +826,7 @@ _) half _^_en | |||
o (rC O2 | |||
o (rX O2 | |||
_) os (_ Os | |||
o (sC O2 | |||
s_) os (_ o | |||
x_) os (_ o | |||
C) o (se_ o2 | |||
@@ -954,7 +956,7 @@ C) oing (_ _^_en // going | |||
se) pt (_ t // sept | |||
se) pt (iè t // septième | |||
_) puisqu' (P7 pyisk | |||
_) puisqu' (P7 pw^isk | |||
// group p: English section | |||
pad (_ _^_en | |||
@@ -967,6 +969,7 @@ C) oing (_ _^_en // going | |||
q k // coq | |||
_) qu' (AP3 k | |||
_) qua (d kwA // quadrature | |||
_) qua (drill ka // quadriller | |||
_a) qua kwA // aquarium | |||
_a) qu (if ku // aquifère | |||
_A) qui (dist kw^i // équidistant |
@@ -239,6 +239,7 @@ | |||
s (t s | |||
s (x s | |||
sc (Y S | |||
sci (L01 S | |||
sch (Y sk | |||
sh (K S // foreign words | |||
K) sh S // foreign words |
@@ -175,11 +175,11 @@ _1C0 s'eIN | |||
?2_0C s'eINtUs# | |||
_1C s'eINtu | |||
?1_2C duz'eINtus# | |||
?2_2C duz'eINtUs# | |||
?2_2C duz'eINtUz | |||
?1_3C tryz'eNtus# | |||
?2_3C tRez'eNtUs# | |||
?2_3C tRez'eNtUz | |||
?1_5C kin^'eINtus# | |||
?2_5C kin^'eINtUs# | |||
?2_5C kin^'eINtUz | |||
?1_0M1 m'il_ | |||
?2_0M1 m'iU_ | |||
?1_1M1 m'il_ | |||
@@ -194,7 +194,7 @@ _1M3 'u~mbilj'&U~ | |||
?1_0M4 trilj'o~js# | |||
?2_0M4 trilj'o~jz | |||
_1M4 'u~ntrilj'&U~ | |||
_0and _i | |||
_0and i | |||
_dpt _v'irgul& | |||
// _0Z2 seNt'Ezim& // 100ths | |||
// _0Z3 mil'Ezim& // 1000ths | |||
@@ -290,11 +290,11 @@ los $u | |||
?2 este $u+ $nounf 'estSi // this | |||
?2 estes $u+ $nounf 'estSis // these | |||
?2 esta 'Est& $brk $u+ $nounf | |||
?2 esta 'Est& $u+ $nounf | |||
?2 neste $u+ $nounf n'estSi //in this | |||
?2 nestes $u+ n'estSis //in these | |||
?2 esse $u+ $nounf 'esi // that | |||
essa 'Es& $brk $u+ | |||
essa 'Es& $u+ | |||
desse d'esy $u+ | |||
nesse n'esy $u+ | |||
aquele &k'ely $u+ $nounf // that | |||
@@ -302,7 +302,7 @@ aquela $u+ | |||
daquele d&k'ely $u+ $nounf | |||
?1 que ky $u | |||
?2 que ke $u $pause | |||
?2 que ke $u | |||
// possessive adjectives | |||
meu $u+ $nounf | |||
@@ -338,93 +338,93 @@ duma $u | |||
duns $u | |||
dumas $u | |||
em $u $brk // in,on,at | |||
no nu $u $brk $nounf | |||
na $u $brk | |||
?2 nos nus# $u $brk | |||
nas $u $brk | |||
num $u $brk | |||
numa $u $brk | |||
nuns $u $brk | |||
numas $u $brk | |||
por $u $brk // by,for,through | |||
pelo $u $brk | |||
?2 pela $u $brk p'el& | |||
pelos $u $brk | |||
?2 pelas $u $brk p'el&s | |||
ao $u $brk | |||
à ,a: $brk | |||
aos $u $brk | |||
às ,a:s $brk | |||
para $u $brk // for,to | |||
pro $u $brk $nounf | |||
pra $u $brk | |||
pros $u $brk | |||
pras $u $brk | |||
prò $u $brk | |||
prà $u $brk | |||
pròs $u $brk | |||
pràs $u $brk | |||
com $u $brk // with | |||
?2 sem $pause // without | |||
?2 até $u $pause // until | |||
?2 desde $u $pause // from,since | |||
?2 entre $pause // between,among | |||
?2 por $u $pause // by,for,through | |||
?2 sobre s'obRy $pause // on,above,about | |||
?2 sob $pause // under,below | |||
?2 debaixo $pause // under,below | |||
?2 durante $pause | |||
em $u // in,on,at | |||
no nu $u $nounf | |||
na $u | |||
?2 nos nus# $u | |||
nas $u | |||
num $u | |||
numa $u | |||
nuns $u | |||
numas $u | |||
por $u // by,for,through | |||
pelo $u | |||
?2 pela $u p'el& | |||
pelos $u | |||
?2 pelas $u p'el&s | |||
ao $u | |||
à ,a: | |||
aos $u | |||
às ,a:s | |||
para $u // for,to | |||
pro $u $nounf | |||
pra $u | |||
pros $u | |||
pras $u | |||
prò $u | |||
prà $u | |||
pròs $u | |||
pràs $u | |||
com $u // with | |||
?2 sem // without | |||
?2 até $u // until | |||
?2 desde $u // from,since | |||
?2 entre // between,among | |||
?2 por $u // by,for,through | |||
?2 sobre s'obRy // on,above,about | |||
?2 sob // under,below | |||
?2 debaixo // under,below | |||
?2 durante | |||
// conjunctions | |||
?1 e i $u // and | |||
?2 e i $u $pause // and | |||
se $u $brk // if | |||
?2 e i $u // and | |||
se $u // if | |||
?2 mas $u $pause // but | |||
?2 porém $pause // however | |||
?2 todavia $pause // yet | |||
?2 contudo $pause // nevertheless | |||
?2 mas $u // but | |||
?2 porém // however | |||
?2 todavia // yet | |||
?2 contudo // nevertheless | |||
?2 ou $u $pause // or | |||
?2 quer $pause // whether | |||
?2 ou $u // or | |||
?2 quer // whether | |||
?2 assim $pause // thus | |||
?2 portanto $pause // therefore | |||
?2 assim // thus | |||
?2 portanto // therefore | |||
?2 porque $pause // because | |||
?2 pois $pause // because | |||
?2 como $u $pause // as | |||
?2 porque // because | |||
?2 pois // because | |||
?2 como $u // as | |||
?2 embora $pause // although | |||
?2 apesar $pause // despite | |||
?2 embora // although | |||
?2 apesar // despite | |||
?2 caso $pause // if | |||
?2 (desde que) d'esdZiki/ $pause // provided that | |||
?2 (exceto se) es'Etusi/ $pause // unless | |||
?2 (salvo se) s'alvusi/ $pause // unless | |||
?2 caso // if | |||
?2 (desde que) d'esdZiki/ // provided that | |||
?2 (exceto se) es'Etusi/ // unless | |||
?2 (salvo se) s'alvusi/ // unless | |||
?2 (para que) p,a*&ki/ $pause // so that | |||
?2 (para que) p,a*&ki/ // so that | |||
?2 quando $pause // when | |||
?2 onde $u $pause // where | |||
?2 apenas $pause // as soon as | |||
?2 mal $pause // as soon as, hardly | |||
?2 (logo que) l'Oguki/ $pause // as soon as | |||
?2 (antes que) '&~NtSiski/ $pause // before | |||
?2 (depois que) dep'OIski/ $pause // after | |||
?2 (sempre que) s'eNpriki/ $pause // whenever | |||
?2 enquanto $pause // while | |||
?2 quando // when | |||
?2 onde $u // where | |||
?2 apenas // as soon as | |||
?2 mal // as soon as, hardly | |||
?2 (logo que) l'Oguki/ // as soon as | |||
?2 (antes que) '&~NtSiski/ // before | |||
?2 (depois que) dep'OIski/ // after | |||
?2 (sempre que) s'eNpriki/ // whenever | |||
?2 enquanto // while | |||
// negative |
@@ -71,25 +71,31 @@ b/b_ [b] base | |||
[b] hi | |||
[b] bn | |||
b/b@ [b] base | |||
[b] fr | |||
[b] hi | |||
[b] bn | |||
b/b@2 [b] base | |||
[b] hi | |||
[b] bn | |||
b/ba [b] base | |||
[b] fr | |||
[b] hi | |||
[b] bn | |||
b/be [b] base | |||
[b] fr | |||
[b] hi | |||
[b] bn | |||
b/bi [b] base | |||
[b] fr | |||
[b] hi | |||
[b;] ro | |||
[b] bn | |||
b/bo [b] base | |||
[b] fr | |||
[b] hi | |||
[b] bn | |||
b/bu [b] base | |||
[b] fr | |||
[b] hi | |||
[b] bn | |||
b/xb [b] base |
@@ -10,7 +10,7 @@ endphoneme | |||
phoneme @ | |||
vowel starttype (@) endtype (@) | |||
length 170 | |||
length 180 | |||
formants vowel/@_hgh | |||
before l/ DFT+l/l_@ | |||
before (r) DFT+r/xr | |||
@@ -19,7 +19,7 @@ endphoneme | |||
phoneme @2 | |||
vowel starttype (@) endtype (@) | |||
length 150 | |||
length 160 | |||
formants vowel/@_fr | |||
before (r) DFT+r3/r_@ | |||
endphoneme | |||
@@ -27,7 +27,7 @@ endphoneme | |||
phoneme a | |||
vowel starttype (a) endtype (a) | |||
length 170 | |||
length 180 | |||
formants vowel/a_6 | |||
after l l/la-15 | |||
before l/ DFT+l/l_a | |||
@@ -38,7 +38,7 @@ endphoneme | |||
phoneme a2 | |||
vowel starttype (a) endtype (a) | |||
length 150 | |||
length 165 | |||
formants vowel/a_6 | |||
after l l/la-15 | |||
before l/ DFT+l/l_a | |||
@@ -49,7 +49,7 @@ endphoneme | |||
phoneme e | |||
vowel starttype (e) endtype (e) | |||
length 172 | |||
length 175 | |||
formants vowel/e | |||
after l l/le-15 | |||
before l/ DFT-20+l/xl | |||
@@ -80,7 +80,7 @@ endphoneme | |||
phoneme i | |||
vowel starttype (i) endtype (i) | |||
length 150 | |||
length 160 | |||
formants vowel/i_3 | |||
linkout ; | |||
after l l/li-15 | |||
@@ -103,7 +103,7 @@ endphoneme | |||
phoneme o | |||
vowel starttype (o) endtype (o) | |||
length 170 | |||
length 180 | |||
formants vowel/o_3 | |||
after l l/lo-10 | |||
before (r) DFT+r/xr | |||
@@ -113,7 +113,7 @@ endphoneme | |||
phoneme o2 | |||
vowel starttype (o) endtype (o) | |||
length 170 | |||
length 180 | |||
formants vowel/o_2 | |||
after l l/lo-10 | |||
before l/ DFT+l/l_o | |||
@@ -144,7 +144,7 @@ endphoneme | |||
phoneme u | |||
vowel starttype (u) endtype (u) | |||
length 170 | |||
length 175 | |||
formants vowel/u_3 | |||
after l l/lu-20 | |||
before l/ DFT-20+l/l_u | |||
@@ -155,7 +155,7 @@ endphoneme | |||
phoneme u: // slitely longer than u | |||
vowel starttype (u) endtype (u) | |||
length 220 | |||
length 240 | |||
formants vowel/u_3 | |||
after l l/lu-20 | |||
before l/ DFT-20+l/l_u | |||
@@ -166,7 +166,7 @@ endphoneme | |||
phoneme y | |||
vowel starttype (u) endtype (u) | |||
length 170 | |||
length 180 | |||
formants vowel/y_2 | |||
after l l/lu-20 | |||
before l/ DFT-30+l/l_y | |||
@@ -177,7 +177,7 @@ endphoneme | |||
phoneme Y | |||
vowel starttype (@) endtype (@) | |||
length 170 | |||
length 180 | |||
formants vowel/y# | |||
after l l/l@-20 | |||
before l/ DFT-20+l/l_@ | |||
@@ -303,10 +303,16 @@ endphoneme | |||
phoneme b | |||
vcd blb stop | |||
vowelout f1=0 f2=1000 -500 -300 f3=-300 80 | |||
formants b/b+x/b%70 | |||
vowelout f1=0 f2=1000 -500 -300 f3=-300 80 brk | |||
formants b/b+x/b%80 | |||
before _ b/b_+x/b_ | |||
before (a) b/ba+x/b%30 | |||
before (@) b/b@+x/b%50 | |||
before (e) b/be+x/b%50 | |||
before (i) b/bi+x/b%50 | |||
before l/ b/b_+x/b_ | |||
before (o) b/bo+x/b%50 | |||
before (u) b/bu+x/b%70 | |||
before R b/b_+x/b_ | |||
after _ NULL | |||
after @ b/xb%50 |
@@ -1111,7 +1111,7 @@ void SetWordStress(Translator *tr, char *output, unsigned int &dictionary_flags, | |||
if((max_stress == 0) && (tr->langopts.stress_flags & 1) && (vowel_count == 2)) | |||
{ | |||
// option: don't stress monosyllables except at end-of-clause (lang=fr) | |||
// option: don't stress monosyllables except at end-of-clause | |||
vowel_stress[1] = 1; | |||
dictionary_flags |= FLAG_STRESS_END2; | |||
} |
@@ -963,7 +963,7 @@ void ConvertToUtf8() | |||
int ix; | |||
FILE *f_in; | |||
FILE *f_out; | |||
char buf[80]; | |||
char buf[200]; | |||
wxString fname = wxFileSelector(_T("Convert file to UTF8"),wxString(path_home,wxConvLocal), | |||
_T(""),_T(""),_T("*"),wxOPEN); |
@@ -1033,7 +1033,7 @@ static int LookupNum2(Translator *tr, int value, int control, char *ph_out) | |||
if(tr->langopts.numbers & 0x200) | |||
{ | |||
// remove vowel from the end of tens if units starts with a vowel (LANG=Italian) | |||
if((ix = strlen(ph_tens)-1) >= 0) | |||
if(((ix = strlen(ph_tens)-1) >= 0) && (ph_digits[0] != 0)) | |||
{ | |||
if((next_phtype = phoneme_tab[(unsigned int)(ph_digits[0])]->type) == phSTRESS) | |||
next_phtype = phoneme_tab[(unsigned int)(ph_digits[1])]->type; |
@@ -35,7 +35,7 @@ | |||
#include "translate.h" | |||
#include "wave.h" | |||
const char *version_string = "1.40.10 12.Mar.09"; | |||
const char *version_string = "1.40.11 13.Mar.09"; | |||
const int version_phdata = 0x014000; | |||
int option_device_number = -1; |
@@ -380,7 +380,7 @@ Translator *SelectTranslator(const char *name) | |||
tr->langopts.unstressed_wd2 = 2; | |||
tr->langopts.param[LOPT_SONORANT_MIN] = 130; // limit the shortening of sonorants before short vowels | |||
tr->langopts.numbers = 0x309; | |||
tr->langopts.numbers = 0x109; | |||
tr->langopts.numbers2 = 0x2; // variant form of numbers before thousands | |||
if(name2 == L_grc) | |||
@@ -483,7 +483,7 @@ Translator *SelectTranslator(const char *name) | |||
SetupTranslator(tr,stress_lengths_fr,stress_amps_fr); | |||
tr->langopts.stress_rule = 3; // stress on final syllable | |||
tr->langopts.stress_flags = 0x0024 + 0x1; // don't use secondary stress, monosyllables are unstressed | |||
tr->langopts.stress_flags = 0x0024; // don't use secondary stress | |||
tr->langopts.param[LOPT_IT_LENGTHEN] = 1; // remove lengthen indicator from unstressed syllables | |||
tr->langopts.numbers = 0x1509 + 0x8000 + NUM_NOPAUSE | NUM_ROMAN | NUM_VIGESIMAL; | |||
@@ -807,7 +807,7 @@ SetLengthMods(tr,3); // all equal | |||
tr->langopts.stress_rule = 3; // stress on final syllable | |||
tr->langopts.stress_flags = 0x6 | 0x10 | 0x20000; | |||
tr->langopts.numbers = 0x269 + 0x4000 + NUM_ROMAN; | |||
tr->langopts.numbers = 0x069 + 0x4000 + NUM_ROMAN; | |||
SetLetterVowel(tr,'y'); | |||
ResetLetterBits(tr,0x2); | |||
SetLetterBits(tr,1,"bcdfgjkmnpqstvxz"); // B hard consonants, excluding h,l,r,w,y |
@@ -1670,21 +1670,6 @@ static int TranslateWord2(Translator *tr, char *word, WORD_TAB *wtab, int pre_pa | |||
} | |||
else | |||
{ | |||
if(ph_code == phonPAUSE_CLAUSE) | |||
{ | |||
int j; | |||
for(j = n_ph_list2-1; j > 0; j--) | |||
{ | |||
if(ph_list2[j].synthflags & SFLAG_PROMOTE_STRESS) | |||
{ | |||
// lang=fr: stress monosyllables before conjunctions 'et' 'qui' etc | |||
ph_list2[j].stress = 4; | |||
} | |||
if(ph_list2[j].sourceix != 0) | |||
break; | |||
} | |||
} | |||
if(first_phoneme && tr->langopts.param[LOPT_IT_DOUBLING]) | |||
{ | |||
if(((tr->prev_dict_flags & FLAG_DOUBLING) && (tr->langopts.param[LOPT_IT_DOUBLING] & 1)) || |