diff --git a/src/libespeak-ng/langopts.c b/src/libespeak-ng/langopts.c index 6b4dc6e6..fb47186d 100644 --- a/src/libespeak-ng/langopts.c +++ b/src/libespeak-ng/langopts.c @@ -82,18 +82,19 @@ enum { }; static const MNEM_TAB langopts_tab[] = { - { "maintainer", V_MAINTAINER }, - { "status", V_STATUS }, { "lowercaseSentence", V_LOWERCASE_SENTENCE }, + { "stressLength", V_STRESSLENGTH }, - { NULL, 0 } + { "maintainer", V_MAINTAINER }, + { "status", V_STATUS }, + + { 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; diff --git a/src/libespeak-ng/voice.h b/src/libespeak-ng/voice.h index 610e77ed..bf0517ac 100644 --- a/src/libespeak-ng/voice.h +++ b/src/libespeak-ng/voice.h @@ -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); diff --git a/src/libespeak-ng/voices.c b/src/libespeak-ng/voices.c index 570fac0a..8f00db51 100644 --- a/src/libespeak-ng/voices.c +++ b/src/libespeak-ng/voices.c @@ -1,3 +1,4 @@ + /* * Copyright (C) 2005 to 2015 by Jonathan Duddington * email: jonsd@users.sourceforge.net @@ -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;