@@ -82,18 +82,19 @@ enum { | |||
}; | |||
static const MNEM_TAB langopts_tab[] = { | |||
{ "maintainer", V_MAINTAINER }, | |||
{ "status", V_STATUS }, | |||
{ "lowercaseSentence", V_LOWERCASE_SENTENCE }, | |||
{ "stressLength", V_STRESSLENGTH }, | |||
{ "maintainer", V_MAINTAINER }, | |||
{ "status", V_STATUS }, | |||
{ NULL, 0 } | |||
{ NULL, 0 } | |||
}; | |||
extern int CheckTranslator(Translator *tr, const MNEM_TAB *keyword_tab, int key); | |||
void LoadLanguageOptions(Translator *translator, int key, char *keyValue ) { | |||
int ix; | |||
void LoadLanguageOptions(Translator *translator, int key ) { | |||
switch (key) | |||
{ | |||
switch (key) { | |||
case V_LOWERCASE_SENTENCE: { | |||
if (CheckTranslator(translator, langopts_tab, key) != 0) | |||
break; | |||
@@ -101,8 +102,21 @@ void LoadLanguageOptions(Translator *translator, int key ) { | |||
translator->langopts.lowercase_sentence = true; | |||
break; | |||
} | |||
case V_STRESSLENGTH: { | |||
if (CheckTranslator(translator, langopts_tab, key) != 0) | |||
break; | |||
//printf("parsing: %s", keyValue); | |||
int stress_lengths_set = 0; | |||
int stress_lengths[8]; | |||
stress_lengths_set = Read8Numbers(keyValue, stress_lengths); | |||
for (ix = 0; ix < stress_lengths_set; ix++) { | |||
translator->stress_lengths[ix] = stress_lengths[ix]; | |||
} | |||
break; | |||
} | |||
break; | |||
case V_MAINTAINER: | |||
case V_STATUS: | |||
break; |
@@ -91,6 +91,7 @@ voice_t *LoadVoice(const char *voice_name, int control); | |||
voice_t *LoadVoiceVariant(const char *voice_name, int variant); | |||
espeak_ng_STATUS DoVoiceChange(voice_t *v); | |||
void WavegenSetVoice(voice_t *v); | |||
int Read8Numbers(char *data_in, int data[8]); | |||
void ReadTonePoints(char *string, int *tone_pts); | |||
void VoiceReset(int control); | |||
void FreeVoiceList(void); |
@@ -1,3 +1,4 @@ | |||
/* | |||
* Copyright (C) 2005 to 2015 by Jonathan Duddington | |||
* email: [email protected] | |||
@@ -134,9 +135,9 @@ static const MNEM_TAB keyword_tab[] = { | |||
{ "pitch", V_PITCH }, | |||
{ "phonemes", V_PHONEMES }, | |||
{ "dictionary", V_DICTIONARY }, | |||
{ "stressLength", V_STRESSLENGTH }, | |||
{ "stressAmp", V_STRESSAMP }, | |||
{ "stressAdd", V_STRESSADD }, | |||
{ "stressLength", V_STRESSLENGTH }, | |||
{ "intonation", V_INTONATION }, | |||
{ "tunes", V_TUNES }, | |||
{ "dictrules", V_DICTRULES }, | |||
@@ -476,7 +477,7 @@ static void PhonemeReplacement(char *p) | |||
replace_phonemes[n_replace_phonemes++].type = flags; | |||
} | |||
static int Read8Numbers(char *data_in, int data[8]) | |||
int Read8Numbers(char *data_in, int data[8]) | |||
{ | |||
// Read 8 integer numbers | |||
memset(data, 0, 8*sizeof(int)); | |||
@@ -632,7 +633,8 @@ voice_t *LoadVoice(const char *vname, int control) | |||
key = LookupMnem(keyword_tab, buf); | |||
LoadLanguageOptions(translator, key); | |||
LoadLanguageOptions(translator, key, p); | |||
switch (key) | |||
{ | |||
case V_LANGUAGE: | |||
@@ -706,20 +708,7 @@ voice_t *LoadVoice(const char *vname, int control) | |||
voice->formant_factor = (int)((1+factor/4) * 256); // nominal formant shift for a different voice pitch | |||
} | |||
break; | |||
case V_STRESSLENGTH: {// stressLength | |||
if (CheckTranslator(translator, keyword_tab, key) != 0) | |||
break; | |||
int stress_lengths_set = 0; | |||
int stress_lengths[8]; | |||
stress_lengths_set = Read8Numbers(p, stress_lengths); | |||
for (ix = 0; ix < stress_lengths_set; ix++) { | |||
translator->stress_lengths[ix] = stress_lengths[ix]; | |||
} | |||
break; | |||
} | |||
case V_STRESSAMP: { // stressAmp | |||
if (CheckTranslator(translator, keyword_tab, key) != 0) | |||
break; |