espeakedit: setlocale(LC_NUMERIC,"C") before opening spectrum.dat file. git-svn-id: https://espeak.svn.sourceforge.net/svnroot/espeak/trunk@62 d46cf337-b52f-0410-862d-fd96e6ae7743master
@@ -130,7 +130,7 @@ Dictionary hi_dict | |||
@ @- @2 @3 a a: aI aU | |||
e E e: E: E~ i I i: | |||
l- o O o: O: o~ O~ r- | |||
U u: V | |||
U u: u~ V | |||
- : b c ch d d. f | |||
g h H j J k kh l |
@@ -588,7 +588,7 @@ codify koUdIfaI | |||
cognac k0njak | |||
coincide koUIns'aId | |||
college k0lIdZ | |||
colon koUl0n | |||
colon koUl@n | |||
color kVl3 | |||
colored kVl3d | |||
colonel k3:n@L |
@@ -388,30 +388,31 @@ montréal mO~Real | |||
(cent une) s'A~||yn | |||
(cent onzième) s'A~||O~zj'Em | |||
(cent onze) s'A~||O~z | |||
(en haillon) A~||naj'O~ | |||
(on habille) O~||nab'ij | |||
(un haillon) W~||naj'O~ | |||
(mon haillon) m'O~||najO~ | |||
(son haillon) s'O~||najO~ | |||
(ton haillon) tO~||na=jO~ | |||
bus bys | |||
echo Eko | |||
fils fis | |||
mars maRs | |||
juin ZwE~ | |||
absent absA~ | |||
accident aksidA~ | |||
adéquat adekuat2 | |||
adéquate adekuat | |||
adéquats adekuaz2 | |||
adéquates adekuatz2 | |||
pays pEi | |||
absent absA~ | |||
ardent aRdA~ | |||
prudent pRydA~ | |||
imprudent E~pRydA~ | |||
boeufs bY | |||
bus bys | |||
choeur kWr | |||
discident disidA~ | |||
accident aksidA~ | |||
echo Eko | |||
fils fis | |||
haillon _|ajO~ | |||
haricot _|aRiko | |||
haricots _|aRikoz2 | |||
imprudent E~pRydA~ | |||
juin ZwE~ | |||
mars maRs | |||
occident OksidA~ | |||
oeufs Y | |||
orient ORjA~ | |||
pays pEi | |||
prudent pRydA~ | |||
secret sYkRE | |||
secrets sYkREz2 | |||
@@ -423,11 +424,9 @@ qu'y ki | |||
s'y si | |||
m'y mi | |||
t'y ti | |||
l'y li | |||
(sud est) sydEst | |||
(nord est) nOREst | |||
écho Eko | |||
l'écho leko | |||
cci $abbrev | |||
espeak ispik | |||
nvda $abbrev | |||
@@ -611,3 +610,4 @@ votions vOtjO~z2 $u | |||
pourcent puRsA~ | |||
vincent vE~sA~ | |||
@@ -139,7 +139,7 @@ _dpt _d@s@ml'o:_ // ?? what is Hi for "." ? | |||
ठ t.h@ | |||
ड d.@ | |||
ढ d.h@ | |||
ण n@ // should be n.@ | |||
ण n.@ // should be n.@ | |||
त t@ | |||
थ th@ | |||
द d@ |
@@ -32,6 +32,8 @@ | |||
.group ऊ | |||
ऊ u: | |||
ऊं u~ // + anusvara | |||
ऊँ u~ // + candrabinbu | |||
.group ऋ | |||
ऋ rI | |||
@@ -50,6 +52,8 @@ | |||
.group ऐ | |||
ऐ E: // ?? [aI] [E:] [&:] | |||
ऐं E~ | |||
ऐँ E~ | |||
?2 ऐ aI // ?? [aI] [E:] [&:] | |||
@@ -89,6 +93,8 @@ | |||
.group ू | |||
ू u: | |||
ूं u~ | |||
ूँ u~ | |||
.group ृ | |||
ृ rI | |||
@@ -107,6 +113,8 @@ | |||
.group ै | |||
ै E: // ?? [aI] [E:] [&:] | |||
ैं E~ | |||
ैँ E~ | |||
?2 ै aI // ?? [aI] [E:] [&:] | |||
.group ॉ |
@@ -7,48 +7,48 @@ | |||
// Numbers | |||
_0 nullA | |||
_1 EJ | |||
_2 kEttY: | |||
_3 ha:R2om | |||
_4 ne:J | |||
_5 Yt | |||
_6 hAt | |||
_7 he:t | |||
_8 n^olts | |||
_9 kilEnts | |||
_10 ti:z | |||
_1X tizEn | |||
_20 hu:s | |||
_2X huson | |||
_3X hAR2mints | |||
_4X nEJvEn | |||
_5X YtvEn | |||
_6X hAtvAn | |||
_7X hEtvEn | |||
_8X n^oltsvAn | |||
_9X kilEntsvEn | |||
_0C sa:z | |||
_1C sa:z | |||
_0M1 EzER2 | |||
_1M1 EzER2 | |||
_2M1 ke:tEzER2 | |||
_0M2 millio: | |||
_1M2 millio: | |||
_2M2 ke:tmillio: | |||
_0M3 millia:R2d | |||
_1M3 millia:R2d | |||
_1M3 ke:tmillia:R2d | |||
_0M4 billio: | |||
_1M4 billio: | |||
_2M4 ke:tbillio: | |||
_dpt ||_vEss2Y:_ | |||
_0 nullA | |||
_1 EJ | |||
_2 kEttY: | |||
_3 ha:R2om | |||
_4 ne:J | |||
_5 Yt | |||
_6 hAt | |||
_7 he:t | |||
_8 n^olts | |||
_9 kilEnts | |||
_10 ti:z | |||
_1X tizEn | |||
_20 hu:s | |||
_2X huson | |||
_3X hAR2mints | |||
_4X nEJvEn | |||
_5X YtvEn | |||
_6X hAtvAn | |||
_7X hEtvEn | |||
_8X n^oltsvAn | |||
_9X kilEntsvEn | |||
_0C sa:z | |||
_1C sa:z | |||
_0M1 EzER2 | |||
_1M1 EzER2 | |||
_2M1 ke:tEzER2 | |||
_0M2 millio: | |||
_1M2 millio: | |||
_2M2 ke:tmillio: | |||
_0M3 millia:R2d | |||
_1M3 millia:R2d | |||
_2M3 ke:tmillia:R2d | |||
_0M4 billio: | |||
_1M4 billio: | |||
_2M4 ke:tbillio: | |||
_dpt ||_vEss2Y:_ | |||
// Abbreviations | |||
km kilo:me:tER2 | |||
mm milime:tER2 | |||
mm milime:tER2 | |||
a.m An^n^i||m'int $dot | |||
dr doktoR2 $dot | |||
@@ -98,7 +98,7 @@ bár $pause // although | |||
habár $pause // although | |||
ha $u $pause // if | |||
noha $u $pause // even thought | |||
noha $u $pause // even thought | |||
// Prepositions etc. | |||
@@ -108,9 +108,6 @@ noha $u $pause // even thought | |||
nem $alt2 $strend | |||
ne $u+ | |||
e $u // "-e" question | |||
e $atend // stressed at end of sentence | |||
// Unstressed adverbs prepositions etc. | |||
néhány $u+ | |||
is $u // also | |||
@@ -145,30 +142,52 @@ közül $u | |||
közé $u | |||
között $u | |||
an $u // so many persons | |||
as $u | |||
ba $u // into | |||
ban $u // in | |||
be $u | |||
ra $u // onto | |||
re $u | |||
ik $u // -th | |||
as $u | |||
es $u | |||
os $u | |||
ós $u | |||
ös $u | |||
ben $u | |||
ból $u // from inside | |||
ből $u | |||
e $u // in query, his/her | |||
ei $u // his her multiole | |||
en $u | |||
es $u | |||
hez $u | |||
hoz $u // to | |||
höz $u | |||
ig $u // up to | |||
ik $u // -th | |||
nak $u // of, him/her | |||
nek $u | |||
nál $u // by | |||
nél $u | |||
on $u // on | |||
en $u // on | |||
os $u | |||
ra $u // onto | |||
re $u | |||
ról $u // from top of, about | |||
röl $u | |||
ről $u | |||
án $u | |||
én $u | |||
on $u // on | |||
en $u | |||
ön $u | |||
an $u // so many persons | |||
ón $u | |||
szor $u // times | |||
szer $u | |||
szor $u // times | |||
szór $u | |||
ször $u | |||
tól $u // from | |||
töl $u | |||
től $u | |||
val $u // with | |||
vel $u | |||
án $u // on that day | |||
é $u // his, her | |||
éi $u // his, her multiple | |||
én $u | |||
ón $u | |||
ós $u | |||
ön $u | |||
ös $u | |||
ellen $u // against | |||
elé $u // before | |||
@@ -180,16 +199,6 @@ se $u $pause // neither | |||
sem $u $pause // nor | |||
miatt $u $pause // because | |||
ban $u // in | |||
ben $u | |||
hoz $u // to | |||
hez $u | |||
höz $u | |||
ig $u // up to | |||
nál $u // by | |||
nél $u | |||
tól $u // from | |||
től $u | |||
be $u //into | |||
ki $u // out of | |||
@@ -277,6 +286,8 @@ a A: $atend // letter "a" | |||
b be: | |||
c tse: | |||
d de: | |||
_e E | |||
e $atend // stressed at end of sentence | |||
f Eff | |||
g ge: | |||
h ha: | |||
@@ -297,6 +308,9 @@ x iks | |||
y ipsilon | |||
z ze: | |||
_é e: | |||
é $atend | |||
cs tSe: | |||
dz dze: | |||
dzs dZe: |
@@ -281,7 +281,7 @@ vörösmar) ty ti | |||
zs Z | |||
zzs Z: | |||
gá) z (sz z // don't devoice [z] to [s] | |||
gá) z (sz z | |||
gé) z (sz z | |||
há) z (so z | |||
há) z (sz z | |||
@@ -302,7 +302,7 @@ vörösmar) ty ti | |||
_vá) zs (or zS | |||
_szára) zs (ág zS | |||
_kö) zs (ég zS | |||
_nehé) zs (ely zS | |||
.group | |||
$ dolla:R2 |
@@ -15,7 +15,7 @@ | |||
fi 40 127 | |||
fr 35 118 | |||
fr_ca 11 118 | |||
hi 49 131 | |||
hi 50 132 | |||
hu 22 112 | |||
nl 26 117 | |||
pl 15 107 | |||
@@ -145,8 +145,8 @@ | |||
1 n^/n^_ base | |||
1 n^/n^@ base | |||
1 n^/n^#_ is | |||
6 n/_n base ro | |||
3 n/n_ base ro | |||
4 n/_n base ro | |||
2 n/n_ base ro | |||
1 n/n@ base | |||
1 n/n#_ is | |||
1 n^/n^a base | |||
@@ -169,6 +169,8 @@ | |||
1 nn/nnu base | |||
1 n^/n^o base | |||
1 n/no base | |||
2 n/_nr base | |||
1 n/nr_ base | |||
1 n^/n^u base | |||
1 n/nu base | |||
1 r2/_r2 base | |||
@@ -381,7 +383,7 @@ | |||
1 vnasal/o_n3 fr | |||
1 vnasal/oo_n en | |||
2 vnasal/oo_n2 hi pl | |||
1 vnasal/u_n pt | |||
2 vnasal/u_n hi pt | |||
3 vnasal/W_n en fr | |||
1 voc/bh base | |||
2 voc/dh base es |
@@ -170,6 +170,12 @@ phoneme u: | |||
endphoneme | |||
phoneme u~ | |||
vowel long starttype (u) endtype (u) | |||
length 230 | |||
formants vnasal/u_n | |||
endphoneme | |||
phoneme r- | |||
vowel starttype (@) endtype (@) |
@@ -539,13 +539,14 @@ endphoneme | |||
phoneme n. | |||
vcd rfx nasal | |||
starttype n endtype n | |||
vowelout f1=2 f2=1700 -300 250 f3=-400 80 rms=20 brk colr=2 | |||
vowelin f1=2 f2=1200 -300 250 f3=-500 80 rms=20 colr=2 | |||
vowelout f1=2 f2=1200 -300 250 f3=-500 80 rms=20 brk colr=2 | |||
length 100 | |||
lengthmod 4 | |||
formants NULL | |||
after _ n/_n | |||
after n n/_n // lengthen [nn] | |||
before _ n/n_ | |||
after _ n/_nr | |||
after n n/_nr // lengthen [nn] | |||
before _ n/nr_ | |||
before (r) n/nj | |||
endphoneme | |||
@@ -1164,6 +1164,50 @@ int x; | |||
} | |||
#endif | |||
#define OUTPUT_MODE AUDIO_OUTPUT_PLAYBACK | |||
#define TEXT "Hello world." | |||
#define TEXT_SSML ("<speak>" TEXT "</speak>") | |||
static void | |||
speak(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.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; | |||
} | |||
char* text1 = "Hello World2. <audio src=\"here\"> Some text</audio> This is the second sentence"; | |||
@@ -1181,6 +1225,7 @@ void TestTest(int control) | |||
//CharsetToUnicode("ISO-8859-4"); | |||
//CharsetToUnicode("ISCII"); | |||
test4(); | |||
return; | |||
if(control==2) |
@@ -921,6 +921,26 @@ int AddNameData(const char *name, int wide) | |||
} // end of AddNameData | |||
void SetVoiceStack(espeak_VOICE *v) | |||
{//================================ | |||
SSML_STACK *sp; | |||
sp = &ssml_stack[0]; | |||
if(v == NULL) | |||
{ | |||
memset(sp,0,sizeof(ssml_stack[0])); | |||
return; | |||
} | |||
if(v->languages != NULL) | |||
strcpy(sp->language,v->languages); | |||
if(v->name != NULL) | |||
strcpy(sp->voice_name,v->name); | |||
sp->voice_variant = v->variant; | |||
sp->voice_age = v->age; | |||
sp->voice_gender = v->gender; | |||
} | |||
static int GetVoiceAttributes(wchar_t *pw, int tag_type) | |||
{//===================================================== | |||
// Determines whether voice attribute are specified in this tag, and if so, whether this means | |||
@@ -1367,7 +1387,7 @@ static int ProcessSsmlTag(wchar_t *xml_buf, char *outbuf, int &outix, int n_outb | |||
return(CLAUSE_VOICE); | |||
case SSML_SPEAK + SSML_CLOSE: | |||
terminator = CLAUSE_PARAGRAPH; | |||
terminator = CLAUSE_PERIOD; | |||
case SSML_VOICE + SSML_CLOSE: | |||
// unwind stack until the previous <voice> or <speak> tag | |||
while((n_ssml_stack > 1) && (ssml_stack[n_ssml_stack-1].tag_type != (tag_type - SSML_CLOSE))) | |||
@@ -1853,6 +1873,7 @@ void InitText2(void) | |||
option_punctuation = speech_parameters[espeakPUNCTUATION]; | |||
option_capitals = speech_parameters[espeakCAPITALS]; | |||
//#ifdef deleted | |||
pvoice = espeak_GetCurrentVoice(); | |||
ssml_sp = &ssml_stack[0]; | |||
@@ -1865,6 +1886,7 @@ void InitText2(void) | |||
strncpy0(ssml_sp->voice_name,pvoice->name,sizeof(ssml_sp->voice_name)); | |||
strncpy0(ssml_sp->language,&pvoice->languages[1],sizeof(ssml_sp->language)); | |||
} | |||
//#endif | |||
current_voice_id[0] = 0; | |||
n_param_stack = 1; |
@@ -288,6 +288,7 @@ static int initialise(void) | |||
#ifndef PLATFORM_WINDOWS | |||
LoadConfig(); // causes problem on Windows, don't know why | |||
#endif | |||
SetVoiceStack(NULL); | |||
SynthesizeInit(); | |||
for(param=0; param<N_SPEECH_PARAM; param++) |
@@ -349,6 +349,7 @@ static int initialise(void) | |||
} | |||
voice_selected = NULL; | |||
SetVoiceStack(NULL); | |||
SynthesizeInit(); | |||
InitNamedata(); | |||
@@ -426,6 +426,7 @@ int initialise(void) | |||
WavegenInit(22050,0); | |||
LoadPhData(); | |||
SetVoiceStack(NULL); | |||
SynthesizeInit(); | |||
return(0); | |||
} |
@@ -951,6 +951,8 @@ void MyFrame::OnNewWindow(wxCommandEvent& event) | |||
} | |||
wxFileName path = wxFileName(filename); | |||
leaf = path.GetName(); | |||
setlocale(LC_NUMERIC,"C"); // read numbers in the form 1.23456 | |||
spectseq->Load(stream); | |||
spectseq->name = leaf; | |||
spectseq->MakePitchenv(spectseq->pitchenv); |
@@ -35,7 +35,7 @@ | |||
#include "translate.h" | |||
#include "wave.h" | |||
const char *version_string = "1.27.06 07.Jul.07"; | |||
const char *version_string = "1.27.07 09.Jul.07"; | |||
const int version_phdata = 0x012701; | |||
int option_device_number = -1; | |||
@@ -160,6 +160,9 @@ void FreePhData(void) | |||
Free(phoneme_tab_data); | |||
Free(phoneme_index); | |||
Free(spects_data); | |||
phoneme_tab_data=NULL; | |||
phoneme_index=NULL; | |||
spects_data=NULL; | |||
} | |||
@@ -526,5 +526,6 @@ void InitText2(void); | |||
int IsDigit(unsigned int c); | |||
int IsAlpha(unsigned int c); | |||
int isspace2(unsigned int c); | |||
void SetVoiceStack(espeak_VOICE *v); | |||
extern FILE *f_trans; // for logging |
@@ -1189,6 +1189,7 @@ static espeak_VOICE *SelectVoiceByName(espeak_VOICE **voices, const char *name) | |||
espeak_VOICE *SelectVoice(espeak_VOICE *voice_select, int *variant) | |||
{//================================================================ | |||
// Returns a path within espeak-voices, with a possible +variant suffix | |||
// variant is an output-only parameter | |||
int nv; // number of candidates | |||
int ix, ix2; | |||
int j; | |||
@@ -1382,6 +1383,7 @@ void GetVoices(const char *path) | |||
espeak_ERROR SetVoiceByName(const char *name) | |||
{//========================================= | |||
espeak_VOICE *v; | |||
espeak_VOICE voice_selector; | |||
int variant=0; | |||
char *p; | |||
char variant_name[20]; | |||
@@ -1395,7 +1397,13 @@ espeak_ERROR SetVoiceByName(const char *name) | |||
variant = atoi(p+1); | |||
} | |||
memset(&voice_selector,0,sizeof(voice_selector)); | |||
voice_selector.variant = variant; | |||
voice_selector.name = (char *)name; | |||
// first check for a voice with this filename | |||
// This may avoid the need to call espeak_ListVoices(). | |||
if((first_voice == NULL) && (LoadVoice(buf,1) != NULL)) | |||
{ | |||
voice_selected = first_voice; | |||
@@ -1408,6 +1416,7 @@ espeak_ERROR SetVoiceByName(const char *name) | |||
} | |||
WavegenSetVoice(voice); | |||
SetVoiceStack(&voice_selector); | |||
return(EE_OK); | |||
} | |||
@@ -1420,11 +1429,12 @@ espeak_ERROR SetVoiceByName(const char *name) | |||
{ | |||
voice_selected = v; | |||
WavegenSetVoice(voice); | |||
SetVoiceStack(&voice_selector); | |||
return(EE_OK); | |||
} | |||
} | |||
return(EE_INTERNAL_ERROR); // voice name not found | |||
} // end of espeak_SetVoiceByName | |||
} // end of SetVoiceByName | |||
@@ -1436,8 +1446,10 @@ espeak_ERROR SetVoiceByProperties(espeak_VOICE *voice_selector) | |||
LoadVoiceVariant(voice_selected->identifier,variant); | |||
WavegenSetVoice(voice); | |||
SetVoiceStack(voice_selector); | |||
return(EE_OK); | |||
} // end of espeak_SetVoiceByProperties | |||
} // end of SetVoiceByProperties | |||