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
@ @- @2 @3 a a: aI aU | @ @- @2 @3 a a: aI aU | ||||
e E e: E: E~ i I i: | e E e: E: E~ i I i: | ||||
l- o O o: O: o~ O~ r- | l- o O o: O: o~ O~ r- | ||||
U u: V | |||||
U u: u~ V | |||||
- : b c ch d d. f | - : b c ch d d. f | ||||
g h H j J k kh l | g h H j J k kh l |
cognac k0njak | cognac k0njak | ||||
coincide koUIns'aId | coincide koUIns'aId | ||||
college k0lIdZ | college k0lIdZ | ||||
colon koUl0n | |||||
colon koUl@n | |||||
color kVl3 | color kVl3 | ||||
colored kVl3d | colored kVl3d | ||||
colonel k3:n@L | colonel k3:n@L |
(cent une) s'A~||yn | (cent une) s'A~||yn | ||||
(cent onzième) s'A~||O~zj'Em | (cent onzième) s'A~||O~zj'Em | ||||
(cent onze) s'A~||O~z | (cent onze) s'A~||O~z | ||||
(en haillon) A~||naj'O~ | |||||
(on habille) O~||nab'ij | (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équat adekuat2 | ||||
adéquate adekuat | adéquate adekuat | ||||
adéquats adekuaz2 | adéquats adekuaz2 | ||||
adéquates adekuatz2 | adéquates adekuatz2 | ||||
pays pEi | |||||
absent absA~ | |||||
ardent aRdA~ | ardent aRdA~ | ||||
prudent pRydA~ | |||||
imprudent E~pRydA~ | |||||
boeufs bY | |||||
bus bys | |||||
choeur kWr | |||||
discident disidA~ | discident disidA~ | ||||
accident aksidA~ | |||||
echo Eko | |||||
fils fis | |||||
haillon _|ajO~ | |||||
haricot _|aRiko | |||||
haricots _|aRikoz2 | |||||
imprudent E~pRydA~ | |||||
juin ZwE~ | |||||
mars maRs | |||||
occident OksidA~ | occident OksidA~ | ||||
oeufs Y | |||||
orient ORjA~ | orient ORjA~ | ||||
pays pEi | |||||
prudent pRydA~ | |||||
secret sYkRE | secret sYkRE | ||||
secrets sYkREz2 | secrets sYkREz2 | ||||
s'y si | s'y si | ||||
m'y mi | m'y mi | ||||
t'y ti | t'y ti | ||||
l'y li | |||||
(sud est) sydEst | (sud est) sydEst | ||||
(nord est) nOREst | (nord est) nOREst | ||||
écho Eko | écho Eko | ||||
l'écho leko | |||||
cci $abbrev | cci $abbrev | ||||
espeak ispik | espeak ispik | ||||
nvda $abbrev | nvda $abbrev | ||||
pourcent puRsA~ | pourcent puRsA~ | ||||
vincent vE~sA~ | vincent vE~sA~ | ||||
ठ t.h@ | ठ t.h@ | ||||
ड d.@ | ड d.@ | ||||
ढ d.h@ | ढ d.h@ | ||||
ण n@ // should be n.@ | |||||
ण n.@ // should be n.@ | |||||
त t@ | त t@ | ||||
थ th@ | थ th@ | ||||
द d@ | द d@ |
.group ऊ | .group ऊ | ||||
ऊ u: | ऊ u: | ||||
ऊं u~ // + anusvara | |||||
ऊँ u~ // + candrabinbu | |||||
.group ऋ | .group ऋ | ||||
ऋ rI | ऋ rI | ||||
.group ऐ | .group ऐ | ||||
ऐ E: // ?? [aI] [E:] [&:] | ऐ E: // ?? [aI] [E:] [&:] | ||||
ऐं E~ | |||||
ऐँ E~ | |||||
?2 ऐ aI // ?? [aI] [E:] [&:] | ?2 ऐ aI // ?? [aI] [E:] [&:] | ||||
.group ू | .group ू | ||||
ू u: | ू u: | ||||
ूं u~ | |||||
ूँ u~ | |||||
.group ृ | .group ृ | ||||
ृ rI | ृ rI | ||||
.group ै | .group ै | ||||
ै E: // ?? [aI] [E:] [&:] | ै E: // ?? [aI] [E:] [&:] | ||||
ैं E~ | |||||
ैँ E~ | |||||
?2 ै aI // ?? [aI] [E:] [&:] | ?2 ै aI // ?? [aI] [E:] [&:] | ||||
.group ॉ | .group ॉ |
// Numbers | // 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 | // Abbreviations | ||||
km kilo:me:tER2 | km kilo:me:tER2 | ||||
mm milime:tER2 | |||||
mm milime:tER2 | |||||
a.m An^n^i||m'int $dot | a.m An^n^i||m'int $dot | ||||
dr doktoR2 $dot | dr doktoR2 $dot | ||||
habár $pause // although | habár $pause // although | ||||
ha $u $pause // if | ha $u $pause // if | ||||
noha $u $pause // even thought | |||||
noha $u $pause // even thought | |||||
// Prepositions etc. | // Prepositions etc. | ||||
nem $alt2 $strend | nem $alt2 $strend | ||||
ne $u+ | ne $u+ | ||||
e $u // "-e" question | |||||
e $atend // stressed at end of sentence | |||||
// Unstressed adverbs prepositions etc. | // Unstressed adverbs prepositions etc. | ||||
néhány $u+ | néhány $u+ | ||||
is $u // also | is $u // also | ||||
közé $u | közé $u | ||||
között $u | között $u | ||||
an $u // so many persons | |||||
as $u | |||||
ba $u // into | ba $u // into | ||||
ban $u // in | |||||
be $u | 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 // from inside | ||||
ből $u | 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 // from top of, about | ||||
röl $u | |||||
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 | szer $u | ||||
szor $u // times | |||||
szór $u | |||||
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 | ellen $u // against | ||||
elé $u // before | elé $u // before | ||||
sem $u $pause // nor | sem $u $pause // nor | ||||
miatt $u $pause // because | 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 | be $u //into | ||||
ki $u // out of | ki $u // out of | ||||
b be: | b be: | ||||
c tse: | c tse: | ||||
d de: | d de: | ||||
_e E | |||||
e $atend // stressed at end of sentence | |||||
f Eff | f Eff | ||||
g ge: | g ge: | ||||
h ha: | h ha: | ||||
y ipsilon | y ipsilon | ||||
z ze: | z ze: | ||||
_é e: | |||||
é $atend | |||||
cs tSe: | cs tSe: | ||||
dz dze: | dz dze: | ||||
dzs dZe: | dzs dZe: |
zs Z | zs Z | ||||
zzs Z: | zzs Z: | ||||
gá) z (sz z // don't devoice [z] to [s] | |||||
gá) z (sz z | |||||
gé) z (sz z | gé) z (sz z | ||||
há) z (so z | há) z (so z | ||||
há) z (sz z | há) z (sz z | ||||
_vá) zs (or zS | _vá) zs (or zS | ||||
_szára) zs (ág zS | _szára) zs (ág zS | ||||
_kö) zs (ég zS | _kö) zs (ég zS | ||||
_nehé) zs (ely zS | |||||
.group | .group | ||||
$ dolla:R2 | $ dolla:R2 |
fi 40 127 | fi 40 127 | ||||
fr 35 118 | fr 35 118 | ||||
fr_ca 11 118 | fr_ca 11 118 | ||||
hi 49 131 | |||||
hi 50 132 | |||||
hu 22 112 | hu 22 112 | ||||
nl 26 117 | nl 26 117 | ||||
pl 15 107 | pl 15 107 | ||||
1 n^/n^_ base | 1 n^/n^_ base | ||||
1 n^/n^@ base | 1 n^/n^@ base | ||||
1 n^/n^#_ is | 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@ base | ||||
1 n/n#_ is | 1 n/n#_ is | ||||
1 n^/n^a base | 1 n^/n^a base | ||||
1 nn/nnu base | 1 nn/nnu base | ||||
1 n^/n^o base | 1 n^/n^o base | ||||
1 n/no base | 1 n/no base | ||||
2 n/_nr base | |||||
1 n/nr_ base | |||||
1 n^/n^u base | 1 n^/n^u base | ||||
1 n/nu base | 1 n/nu base | ||||
1 r2/_r2 base | 1 r2/_r2 base | ||||
1 vnasal/o_n3 fr | 1 vnasal/o_n3 fr | ||||
1 vnasal/oo_n en | 1 vnasal/oo_n en | ||||
2 vnasal/oo_n2 hi pl | 2 vnasal/oo_n2 hi pl | ||||
1 vnasal/u_n pt | |||||
2 vnasal/u_n hi pt | |||||
3 vnasal/W_n en fr | 3 vnasal/W_n en fr | ||||
1 voc/bh base | 1 voc/bh base | ||||
2 voc/dh base es | 2 voc/dh base es |
endphoneme | endphoneme | ||||
phoneme u~ | |||||
vowel long starttype (u) endtype (u) | |||||
length 230 | |||||
formants vnasal/u_n | |||||
endphoneme | |||||
phoneme r- | phoneme r- | ||||
vowel starttype (@) endtype (@) | vowel starttype (@) endtype (@) |
phoneme n. | phoneme n. | ||||
vcd rfx nasal | vcd rfx nasal | ||||
starttype n endtype n | 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 | length 100 | ||||
lengthmod 4 | lengthmod 4 | ||||
formants NULL | 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 | before (r) n/nj | ||||
endphoneme | endphoneme | ||||
} | } | ||||
#endif | #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"; | char* text1 = "Hello World2. <audio src=\"here\"> Some text</audio> This is the second sentence"; | ||||
//CharsetToUnicode("ISO-8859-4"); | //CharsetToUnicode("ISO-8859-4"); | ||||
//CharsetToUnicode("ISCII"); | //CharsetToUnicode("ISCII"); | ||||
test4(); | |||||
return; | return; | ||||
if(control==2) | if(control==2) |
} // end of AddNameData | } // 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) | static int GetVoiceAttributes(wchar_t *pw, int tag_type) | ||||
{//===================================================== | {//===================================================== | ||||
// Determines whether voice attribute are specified in this tag, and if so, whether this means | // Determines whether voice attribute are specified in this tag, and if so, whether this means | ||||
return(CLAUSE_VOICE); | return(CLAUSE_VOICE); | ||||
case SSML_SPEAK + SSML_CLOSE: | case SSML_SPEAK + SSML_CLOSE: | ||||
terminator = CLAUSE_PARAGRAPH; | |||||
terminator = CLAUSE_PERIOD; | |||||
case SSML_VOICE + SSML_CLOSE: | case SSML_VOICE + SSML_CLOSE: | ||||
// unwind stack until the previous <voice> or <speak> tag | // 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))) | while((n_ssml_stack > 1) && (ssml_stack[n_ssml_stack-1].tag_type != (tag_type - SSML_CLOSE))) | ||||
option_punctuation = speech_parameters[espeakPUNCTUATION]; | option_punctuation = speech_parameters[espeakPUNCTUATION]; | ||||
option_capitals = speech_parameters[espeakCAPITALS]; | option_capitals = speech_parameters[espeakCAPITALS]; | ||||
//#ifdef deleted | |||||
pvoice = espeak_GetCurrentVoice(); | pvoice = espeak_GetCurrentVoice(); | ||||
ssml_sp = &ssml_stack[0]; | ssml_sp = &ssml_stack[0]; | ||||
strncpy0(ssml_sp->voice_name,pvoice->name,sizeof(ssml_sp->voice_name)); | strncpy0(ssml_sp->voice_name,pvoice->name,sizeof(ssml_sp->voice_name)); | ||||
strncpy0(ssml_sp->language,&pvoice->languages[1],sizeof(ssml_sp->language)); | strncpy0(ssml_sp->language,&pvoice->languages[1],sizeof(ssml_sp->language)); | ||||
} | } | ||||
//#endif | |||||
current_voice_id[0] = 0; | current_voice_id[0] = 0; | ||||
n_param_stack = 1; | n_param_stack = 1; |
#ifndef PLATFORM_WINDOWS | #ifndef PLATFORM_WINDOWS | ||||
LoadConfig(); // causes problem on Windows, don't know why | LoadConfig(); // causes problem on Windows, don't know why | ||||
#endif | #endif | ||||
SetVoiceStack(NULL); | |||||
SynthesizeInit(); | SynthesizeInit(); | ||||
for(param=0; param<N_SPEECH_PARAM; param++) | for(param=0; param<N_SPEECH_PARAM; param++) |
} | } | ||||
voice_selected = NULL; | voice_selected = NULL; | ||||
SetVoiceStack(NULL); | |||||
SynthesizeInit(); | SynthesizeInit(); | ||||
InitNamedata(); | InitNamedata(); | ||||
WavegenInit(22050,0); | WavegenInit(22050,0); | ||||
LoadPhData(); | LoadPhData(); | ||||
SetVoiceStack(NULL); | |||||
SynthesizeInit(); | SynthesizeInit(); | ||||
return(0); | return(0); | ||||
} | } |
} | } | ||||
wxFileName path = wxFileName(filename); | wxFileName path = wxFileName(filename); | ||||
leaf = path.GetName(); | leaf = path.GetName(); | ||||
setlocale(LC_NUMERIC,"C"); // read numbers in the form 1.23456 | |||||
spectseq->Load(stream); | spectseq->Load(stream); | ||||
spectseq->name = leaf; | spectseq->name = leaf; | ||||
spectseq->MakePitchenv(spectseq->pitchenv); | spectseq->MakePitchenv(spectseq->pitchenv); |
#include "translate.h" | #include "translate.h" | ||||
#include "wave.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; | const int version_phdata = 0x012701; | ||||
int option_device_number = -1; | int option_device_number = -1; | ||||
Free(phoneme_tab_data); | Free(phoneme_tab_data); | ||||
Free(phoneme_index); | Free(phoneme_index); | ||||
Free(spects_data); | Free(spects_data); | ||||
phoneme_tab_data=NULL; | |||||
phoneme_index=NULL; | |||||
spects_data=NULL; | |||||
} | } | ||||
int IsDigit(unsigned int c); | int IsDigit(unsigned int c); | ||||
int IsAlpha(unsigned int c); | int IsAlpha(unsigned int c); | ||||
int isspace2(unsigned int c); | int isspace2(unsigned int c); | ||||
void SetVoiceStack(espeak_VOICE *v); | |||||
extern FILE *f_trans; // for logging | extern FILE *f_trans; // for logging |
espeak_VOICE *SelectVoice(espeak_VOICE *voice_select, int *variant) | espeak_VOICE *SelectVoice(espeak_VOICE *voice_select, int *variant) | ||||
{//================================================================ | {//================================================================ | ||||
// Returns a path within espeak-voices, with a possible +variant suffix | // Returns a path within espeak-voices, with a possible +variant suffix | ||||
// variant is an output-only parameter | |||||
int nv; // number of candidates | int nv; // number of candidates | ||||
int ix, ix2; | int ix, ix2; | ||||
int j; | int j; | ||||
espeak_ERROR SetVoiceByName(const char *name) | espeak_ERROR SetVoiceByName(const char *name) | ||||
{//========================================= | {//========================================= | ||||
espeak_VOICE *v; | espeak_VOICE *v; | ||||
espeak_VOICE voice_selector; | |||||
int variant=0; | int variant=0; | ||||
char *p; | char *p; | ||||
char variant_name[20]; | char variant_name[20]; | ||||
variant = atoi(p+1); | 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 | // 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)) | if((first_voice == NULL) && (LoadVoice(buf,1) != NULL)) | ||||
{ | { | ||||
voice_selected = first_voice; | voice_selected = first_voice; | ||||
} | } | ||||
WavegenSetVoice(voice); | WavegenSetVoice(voice); | ||||
SetVoiceStack(&voice_selector); | |||||
return(EE_OK); | return(EE_OK); | ||||
} | } | ||||
{ | { | ||||
voice_selected = v; | voice_selected = v; | ||||
WavegenSetVoice(voice); | WavegenSetVoice(voice); | ||||
SetVoiceStack(&voice_selector); | |||||
return(EE_OK); | return(EE_OK); | ||||
} | } | ||||
} | } | ||||
return(EE_INTERNAL_ERROR); // voice name not found | return(EE_INTERNAL_ERROR); // voice name not found | ||||
} // end of espeak_SetVoiceByName | |||||
} // end of SetVoiceByName | |||||
LoadVoiceVariant(voice_selected->identifier,variant); | LoadVoiceVariant(voice_selected->identifier,variant); | ||||
WavegenSetVoice(voice); | WavegenSetVoice(voice); | ||||
SetVoiceStack(voice_selector); | |||||
return(EE_OK); | return(EE_OK); | ||||
} // end of espeak_SetVoiceByProperties | |||||
} // end of SetVoiceByProperties | |||||