lang=hu, set no secondary stress; [e:] [E] are closer, Don't consider mbrola voices during voice selection. Fix voice variant not being set from SSML. git-svn-id: https://espeak.svn.sourceforge.net/svnroot/espeak/trunk@23 d46cf337-b52f-0410-862d-fd96e6ae7743master
@@ -109,7 +109,7 @@ _16 s'Ez | |||
_17 d'is:'Et | |||
_18 d'is:'w^it | |||
_19 d'is:n'@f | |||
_20 v'E~ | |||
_20 v'E~ | |||
_21 v'E~te:E~ | |||
_22 v'E~td'Y | |||
_23 v'E~t:tRw'a | |||
@@ -214,38 +214,38 @@ une $u $nounf | |||
// conjonctions | |||
et e $u $pause | |||
ou $u $pause | |||
car $u $pause | |||
soit $u $pause | |||
mais $u $pause | |||
ou u $u $pause | |||
donc $u $pause | |||
or $u $pause | |||
ni $u $pause | |||
car $u $pause | |||
cependant $u $pause | |||
néanmoins $u $pause | |||
toutefois $u $pause | |||
comme $u $pause | |||
lorsque $u $pause | |||
puisque $u $pause | |||
quand $u $pause | |||
que $u $pause | |||
qui $u $pause | |||
quoique $u $pause | |||
si $u $pause | |||
// (à cause que) $u $pause | |||
// (ainsi que) $u $pause | |||
// (à mesure que) $u $pause | |||
// (après que) $u $pause | |||
// (à moins que) $u $pause | |||
// (au lieu que) $u $pause | |||
// (aussitôt que) $u $pause | |||
// (pendant que) $u $pause | |||
et e $u $brk | |||
ou $u $brk | |||
car $u $brk | |||
soit $u $brk | |||
mais $u $brk | |||
ou u $u $brk | |||
donc $u $brk | |||
or $u $brk | |||
ni $u $brk | |||
car $u $brk | |||
cependant $u $brk | |||
néanmoins $u $brk | |||
toutefois $u $brk | |||
comme $u $brk | |||
lorsque $u $brk | |||
puisque $u $brk | |||
quand $u $brk | |||
que $u $brk | |||
qui $u $brk | |||
quoique $u $brk | |||
si $u $brk | |||
// (à cause que) $u $brk | |||
// (ainsi que) $u $brk | |||
// (à mesure que) $u $brk | |||
// (après que) $u $brk | |||
// (à moins que) $u $brk | |||
// (au lieu que) $u $brk | |||
// (aussitôt que) $u $brk | |||
// (pendant que) $u $brk | |||
// (pourvu que) $u $pause | |||
// pronouns | |||
@@ -284,7 +284,7 @@ vos $u+ | |||
leurs $u+ | |||
// prepositions | |||
de $u $nounf | |||
de $u $nounf | |||
du $u+ $nounf | |||
des dEz2 $u $nounf | |||
?2 des dez2 $u+ $nounf | |||
@@ -294,21 +294,21 @@ des dEz2 $u $nounf | |||
au $u $brk | |||
aux $u $brk | |||
dans $u+ $pause | |||
sur $u+ $pause | |||
par $u+ $pause | |||
pour $u+ $pause | |||
dans $u+ $brk | |||
sur $u+ $brk | |||
par $u+ $brk | |||
pour $u+ $brk | |||
en $u+ $brk | |||
(en effet) A~nEf'E $pause | |||
(en effet) A~nEf'E $brk | |||
vers $u+ $pause | |||
avec $u+ $pause | |||
sans $u+ $pause | |||
sous $u+ $pause | |||
entre $u+ $pause | |||
contre $u+ $pause | |||
vers $u+ $brk | |||
avec $u+ $brk | |||
sans $u+ $brk | |||
sous $u+ $brk | |||
entre $u+ $brk | |||
contre $u+ $brk | |||
durant $pause | |||
durant $brk | |||
// negative | |||
ne $u | |||
@@ -386,6 +386,7 @@ echo Eko | |||
fils fis | |||
mars maRs | |||
pays pEi | |||
pourcent purs'A~ | |||
sens sA~s | |||
c'est sEt2 $u | |||
qu'à ka |
@@ -83,7 +83,7 @@ | |||
.group r | |||
r R | |||
A) r (A R | |||
K) r (A R | |||
K) r (A @-* | |||
rr R | |||
r (_ R | |||
@@ -88,9 +88,9 @@ ez $u // this | |||
// Conjunctions | |||
és $u $pause // and | |||
de $u $pause // but | |||
vagy $u $pause // or | |||
és $u $pause $strend2 // and | |||
de $u+ $pause // but | |||
vagy $u+ $pause // or | |||
mert $pause // because | |||
miatt $pause // because | |||
@@ -100,6 +100,9 @@ habár $pause // although | |||
ha $u $pause // if | |||
// Prepositions etc. | |||
// Negative | |||
nem $u+ | |||
ne $u+ | |||
@@ -107,6 +110,7 @@ ne $u+ | |||
// Unstressed adverbs etc. | |||
néhány $u+ | |||
is $u // ?? | |||
// Verbs |
@@ -134,7 +134,7 @@ | |||
.group r | |||
r R | |||
A) r (A R | |||
A) r (A * | |||
C) r (A R | |||
r (C r | |||
rr R |
@@ -8,16 +8,17 @@ | |||
a A: | |||
a (C% A | |||
a (_ A | |||
X) a (CCX A // single syllable with >= 2 final consonants | |||
X) a (CCK A // single syllable with >= 2 final consonants | |||
// or initial syllable with 3 consonants | |||
ai AI | |||
au aU | |||
aa o: // å | |||
aa (C% O | |||
X) aa (CCX O | |||
X) aa (CCK O | |||
ae a: // æ | |||
ae (C% a | |||
X) ae (CCX a | |||
X) ae (CCK a | |||
.group b | |||
@@ -45,7 +46,7 @@ | |||
.group e | |||
e e: | |||
e (C% E | |||
X) e (CCX E | |||
X) e (CCK E | |||
ei aI | |||
e (rC a // ?? | |||
&) e (_ @2 | |||
@@ -76,7 +77,7 @@ | |||
.group i | |||
i i: | |||
i (C% I | |||
X) i (CCX I | |||
X) i (CCK I | |||
&) ig (_ I | |||
.group j | |||
@@ -109,12 +110,12 @@ | |||
.group o | |||
o u: | |||
o (C% O | |||
X) o (CCX O | |||
X) o (CCK O | |||
oi OI | |||
oe Y: // ø | |||
oe (C% W | |||
X) oe (CCX W | |||
X) oe (CCK W | |||
oey Yy | |||
o (nd U | |||
@@ -164,7 +165,7 @@ | |||
.group u | |||
u u-: | |||
u (C% u- | |||
X) u (CCX u- | |||
X) u (CCK u- | |||
ui u-I | |||
.group v | |||
@@ -191,29 +192,29 @@ | |||
.group å | |||
å o: | |||
å (C% O | |||
X) å (CCX O | |||
X) å (CCK O | |||
.group æ | |||
æ E: | |||
æ (r a: | |||
æ (C% a | |||
X) æ (CCX a | |||
X) æ (CCK a | |||
.group ø | |||
ø Y: | |||
ø (C% W | |||
X) ø (CCX W | |||
X) ø (CCK W | |||
øy Yy | |||
.group ä | |||
ä E: | |||
ä (C% E | |||
X) ä (CCX E | |||
X) ä (CCK E | |||
.group ö | |||
ö Y: | |||
ö (C% W | |||
X) ö (CCX W | |||
X) ö (CCK W | |||
.group | |||
é 'e: |
@@ -438,16 +438,17 @@ | |||
1 vowel/@_bck hi | |||
13 vowel/e en en_n af cy eo fr hu hr it pt pt_pt vi | |||
2 vowel/e# en_sc | |||
7 vowel/e_2 en_sc de hi hu sv no | |||
6 vowel/e_2 en_sc de hi sv no | |||
1 vowel/e_3 hu | |||
1 vowel/e_5 en_sc | |||
3 vowel/ee fr pl sv | |||
2 vowel/e_e en_sc is | |||
7 vowel/ee_1 en en_n pl it sv no zh_yue | |||
4 vowel/ee_2 en cy hu nl | |||
3 vowel/ee_2 en cy nl | |||
1 vowel/ee#_2 sv | |||
3 vowel/ee_3 af pt vi | |||
3 vowel/ee_6 en_n sk sv | |||
11 vowel/e_mid en_rp en_wm fr_ca hi sk cs hr es pt_pt no is | |||
12 vowel/e_mid en_rp en_wm fr_ca hi hu sk cs hr es pt_pt no is | |||
10 vowel/e_mid2 af de fi nl sk ro el sw | |||
1 vowel/@_fnt hr | |||
1 vowel/@_hgh no |
@@ -16,7 +16,7 @@ endphoneme | |||
phoneme E | |||
vowel starttype (e) endtype (e) | |||
length 130 | |||
formants vowel/ee_2 | |||
formants vowel/e_mid | |||
endphoneme | |||
phoneme e | |||
@@ -28,7 +28,7 @@ endphoneme | |||
phoneme e: | |||
vowel starttype (e) endtype (e) | |||
length 240 | |||
formants vowel/e_2 | |||
formants vowel/e_3 | |||
endphoneme | |||
phoneme A |
@@ -156,7 +156,10 @@ extern void VoiceReset(int control); | |||
// to something other than the default "C". Then, not only Latin1 but also the | |||
// other characters give the correct results with iswalpha() etc. | |||
if(setlocale(LC_CTYPE,"en_US.UTF-8") == NULL) | |||
setlocale(LC_CTYPE,""); | |||
{ | |||
if(setlocale(LC_CTYPE,"UTF-8") == NULL) | |||
setlocale(LC_CTYPE,""); | |||
} | |||
// Create the main frame window |
@@ -858,12 +858,6 @@ void CharsetToUnicode(const char *charset) | |||
char* text[]= | |||
{ | |||
"<voice xml:lang=\"en\" variant=\"1\">eSpeak.</voice>", | |||
" <voice xml:lang=\"en\" gender=\"male\" variant=\"1\"><prosody rate=\"1.0\"> normally would, </prosody></voice>" | |||
}; | |||
#ifdef deleted | |||
void Test2() | |||
@@ -908,6 +902,11 @@ int x; | |||
} | |||
#endif | |||
char* text1[]= | |||
{ | |||
"<voice xml:lang=\"en\" variant=\"2\">eSpeak.</voice>", | |||
" <voice xml:lang=\"fr\" gender=\"male\" variant=\"3\"><prosody rate=\"1.0\"> normally would, </prosody></voice>" | |||
}; | |||
void TestTest(int control) | |||
{//======================= | |||
@@ -924,7 +923,7 @@ void TestTest(int control) | |||
//CharsetToUnicode("ISCII"); | |||
return; | |||
//return; | |||
if(control==2) | |||
{ | |||
@@ -951,25 +950,18 @@ if(control==2) | |||
espeak_Initialize(AUDIO_OUTPUT_SYNCHRONOUS,100,NULL); | |||
espeak_SetSynthCallback(TestSynthCallback); | |||
// espeak_SetUriCallback(TestUriCallback); | |||
voice.languages = "fr"; | |||
voice.gender = 0; | |||
voice.age = 0; | |||
voice.variant = 0; | |||
ix = espeak_SetVoiceByName("pt-xx"); | |||
voice2 = espeak_GetCurrentVoice(); | |||
unsigned int unique_identifier=0; | |||
int index=0; | |||
espeak_Synth(text1[index], strlen(text1[index])+1, 0, POS_CHARACTER, 0, espeakSSML|espeakCHARS_UTF8, &unique_identifier, NULL); | |||
// espeak_SetVoiceByProperties(&voice); | |||
espeak_SetParameter(espeakRANGE,0,0); | |||
espeak_Synth(textbuf,ix+1,0,POS_CHARACTER,0,espeakCHARS_8BIT+espeakSSML,NULL,NULL); | |||
espeak_SetParameter(espeakPUNCTUATION, 1, 0); | |||
espeak_Synchronize(); | |||
// espeak_Cancel(); | |||
espeak_SetParameter(espeakPUNCTUATION, 1, 0); | |||
// for(voice.variant = 1; voice.variant < 9; voice.variant++) | |||
// { | |||
// espeak_SetVoiceByProperties(&voice); | |||
// espeak_Synth(textbuf,ix+1,0,POS_CHARACTER,0,espeakCHARS_8BIT+espeakSSML,NULL,NULL); | |||
// } | |||
index++; | |||
espeak_Synth(text1[index], strlen(text1[index])+1, 0, POS_CHARACTER, 0, espeakSSML|espeakCHARS_UTF8, &unique_identifier, NULL); | |||
} | |||
@@ -286,7 +286,7 @@ static int GetC(void) | |||
break; | |||
} | |||
if(((c2 & 0xc0) != 0x80) && ((c2 & m) != 0)) | |||
if((c2 & 0xc0) != 0x80) | |||
{ | |||
GetC_unget(c2); | |||
break; | |||
@@ -963,7 +963,7 @@ static int GetVoiceAttributes(wchar_t *pw, int tag_type) | |||
return(0); // <s> or <p> without language spec, nothing to do | |||
ssml_sp = &ssml_stack[n_ssml_stack++]; | |||
attrcopy_utf8(ssml_sp->language,lang,sizeof(ssml_sp->language)); | |||
attrcopy_utf8(ssml_sp->voice_name,name,sizeof(ssml_sp->voice_name)); | |||
ssml_sp->voice_variant = attrnumber(variant,1,0)-1; |
@@ -259,7 +259,10 @@ static int initialise(void) | |||
setlocale(LC_CTYPE,"ISO8859-1"); | |||
#else | |||
if(setlocale(LC_CTYPE,"en_US.UTF-8") == NULL) | |||
setlocale(LC_CTYPE,""); | |||
{ | |||
if(setlocale(LC_CTYPE,"UTF-8") == NULL) | |||
setlocale(LC_CTYPE,""); | |||
} | |||
#endif | |||
@@ -641,10 +641,13 @@ ESPEAK_API int espeak_Initialize(espeak_AUDIO_OUTPUT output_type, int buf_length | |||
// to something other than the default "C". Then, not only Latin1 but also the | |||
// other characters give the correct results with iswalpha() etc. | |||
#ifdef PLATFORM_RISCOS | |||
setlocale(LC_CTYPE,"ISO8859-1"); | |||
setlocale(LC_CTYPE,"ISO8859-1"); | |||
#else | |||
if(setlocale(LC_CTYPE,"en_US.UTF-8") == NULL) | |||
setlocale(LC_CTYPE,""); | |||
if(setlocale(LC_CTYPE,"en_US.UTF-8") == NULL) | |||
{ | |||
if(setlocale(LC_CTYPE,"UTF-8") == NULL) | |||
setlocale(LC_CTYPE,""); | |||
} | |||
#endif | |||
init_path(path); |
@@ -35,7 +35,7 @@ | |||
#include "translate.h" | |||
#include "wave.h" | |||
const char *version_string = "1.25.06 23.May.07"; | |||
const char *version_string = "1.25.08 25.May.07"; | |||
const int version_phdata = 0x012501; | |||
int option_device_number = -1; |
@@ -325,7 +325,8 @@ Translator *SelectTranslator(const char *name) | |||
tr->langopts.vowel_pause = 0x10; | |||
tr->langopts.stress_rule = 0; | |||
tr->langopts.stress_flags = 0x16; | |||
tr->langopts.stress_flags = 0x36; | |||
tr->langopts.unstressed_wd1 = 2; | |||
tr->langopts.param[LOPT_REGRESSIVE_VOICING] = 0x4; // don't propagate over word boundaries | |||
tr->langopts.param[LOPT_IT_DOUBLING] = 1; | |||
tr->langopts.long_stop = 130; |
@@ -874,7 +874,7 @@ voice_t *LoadVoiceVariant(const char *vname, int variant) | |||
if((v != NULL) && (variant > 0)) | |||
{ | |||
sprintf(buf,"!variant%d",variant); | |||
LoadVoice(buf,2); | |||
v = LoadVoice(buf,2); | |||
} | |||
return(v); | |||
} | |||
@@ -1038,8 +1038,9 @@ static int ScoreVoice(espeak_VOICE *voice_spec, int spec_n_parts, int spec_lang_ | |||
} // end of ScoreVoice | |||
static int SetVoiceScores(espeak_VOICE *voice_select, espeak_VOICE **voices) | |||
{//========================================================================= | |||
static int SetVoiceScores(espeak_VOICE *voice_select, espeak_VOICE **voices, int control) | |||
{//====================================================================================== | |||
// control: bit0=1 include mbrola voices | |||
int ix; | |||
int score; | |||
int nv; // number of candidates | |||
@@ -1063,9 +1064,13 @@ static int SetVoiceScores(espeak_VOICE *voice_select, espeak_VOICE **voices) | |||
nv = 0; | |||
for(ix=0; ix<n_voices_list; ix++) | |||
{ | |||
vp = voices_list[ix]; | |||
if(((control & 1) == 0) && (memcmp(vp->identifier,"mb/",3) == 0)) | |||
continue; | |||
if((score = ScoreVoice(voice_select, n_parts, lang_len, voices_list[ix])) > 0) | |||
{ | |||
voices[nv++] = vp = voices_list[ix]; | |||
voices[nv++] = vp; | |||
vp->score = score; | |||
} | |||
} | |||
@@ -1154,7 +1159,7 @@ espeak_VOICE *SelectVoice(espeak_VOICE *voice_select, int *variant) | |||
espeak_ListVoices(NULL); // create the voices list | |||
// select and sort voices for the required language | |||
nv = SetVoiceScores(voice_select,voices); | |||
nv = SetVoiceScores(voice_select,voices,0); | |||
if(nv == 0) | |||
{ | |||
@@ -1441,7 +1446,7 @@ ESPEAK_API const espeak_VOICE **espeak_ListVoices(espeak_VOICE *voice_spec) | |||
if(voice_spec) | |||
{ | |||
// select the voices which match the voice_spec, and sort them by preference | |||
SetVoiceScores(voice_spec,voices); | |||
SetVoiceScores(voice_spec,voices,1); | |||
return((const espeak_VOICE **)voices); | |||
} | |||