speechd-discuss
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[PATCH 2/4] use SPDVoice in SPDMsgSettings instead of language and synth


From: Andrei Kholodnyi
Subject: [PATCH 2/4] use SPDVoice in SPDMsgSettings instead of language and synthesis_voice
Date: Wed, 27 Oct 2010 17:15:19 +0200

replace char* language and synthesis_voice with SPDVoice which includes both 
vars
rename variable voice to voice_type in SPDMsgSettings
and use voice for the SPDVoice variable
---
 src/modules/espeak.c       |   12 ++++++------
 src/modules/festival.c     |   18 +++++++++---------
 src/modules/generic.c      |    6 +++---
 src/modules/ibmtts.c       |   16 ++++++++--------
 src/modules/module_utils.c |   21 ++++++++++++++++++---
 src/modules/module_utils.h |   18 ++++++++----------
 src/modules/pico.c         |    4 ++--
 7 files changed, 54 insertions(+), 41 deletions(-)

diff --git a/src/modules/espeak.c b/src/modules/espeak.c
index 5f1ec52..ad236d1 100644
--- a/src/modules/espeak.c
+++ b/src/modules/espeak.c
@@ -352,9 +352,9 @@ module_speak(gchar *data, size_t bytes, SPDMessageType 
msgtype)
        espeak_state = BEFORE_SYNTH;
 
        /* Setting speech parameters. */
-       UPDATE_STRING_PARAMETER(language, espeak_set_language);
-       UPDATE_PARAMETER(voice, espeak_set_voice);
-       UPDATE_STRING_PARAMETER(synthesis_voice, espeak_set_synthesis_voice);
+       UPDATE_STRING_PARAMETER(voice.language, espeak_set_language);
+       UPDATE_PARAMETER(voice_type, espeak_set_voice);
+       UPDATE_STRING_PARAMETER(voice.name, espeak_set_synthesis_voice);
 
        UPDATE_PARAMETER(rate, espeak_set_rate);
        UPDATE_PARAMETER(volume, espeak_set_volume);
@@ -762,14 +762,14 @@ espeak_set_language_and_voice(char *lang, SPDVoiceType 
voice_code)
 static void
 espeak_set_voice(SPDVoiceType voice)
 {
-       assert(msg_settings.language);
-       espeak_set_language_and_voice(msg_settings.language, voice);
+       assert(msg_settings.voice.language);
+       espeak_set_language_and_voice(msg_settings.voice.language, voice);
 }
 
 static void
 espeak_set_language(char *lang)
 {
-       espeak_set_language_and_voice(lang, msg_settings.voice);
+       espeak_set_language_and_voice(lang, msg_settings.voice_type);
 }
 
 static void
diff --git a/src/modules/festival.c b/src/modules/festival.c
index 5ba0469..9b1b871 100644
--- a/src/modules/festival.c
+++ b/src/modules/festival.c
@@ -361,9 +361,9 @@ module_speak(char *data, size_t bytes, SPDMessageType 
msgtype)
 
     /* If the voice was changed, re-set all the parameters */
     // TODO: Handle synthesis_voice change too 
-    if ((msg_settings.voice != msg_settings_old.voice)
-       || ((msg_settings.language != NULL) && 
(msg_settings_old.language!=NULL) &&
-           (strcmp(msg_settings.language, msg_settings_old.language)))){
+    if ((msg_settings.voice_type != msg_settings_old.voice_type)
+       || ((msg_settings.voice.language != NULL) && 
(msg_settings_old.voice.language!=NULL) &&
+           (strcmp(msg_settings.voice.language, 
msg_settings_old.voice.language)))){
        DBG("Cleaning old settings table");
         CLEAN_OLD_SETTINGS_TABLE();
     }
@@ -371,9 +371,9 @@ module_speak(char *data, size_t bytes, SPDMessageType 
msgtype)
 
     /* Setting voice parameters */
     DBG("Updating parameters");
-    UPDATE_STRING_PARAMETER(language, festival_set_language);
-    UPDATE_PARAMETER(voice, festival_set_voice);
-    UPDATE_STRING_PARAMETER(synthesis_voice, festival_set_synthesis_voice);
+    UPDATE_STRING_PARAMETER(voice.language, festival_set_language);
+    UPDATE_PARAMETER(voice_type, festival_set_voice);
+    UPDATE_STRING_PARAMETER(voice.name, festival_set_synthesis_voice);
     UPDATE_PARAMETER(rate, festival_set_rate);
     UPDATE_PARAMETER(pitch, festival_set_pitch);
     UPDATE_PARAMETER(volume, festival_set_volume);
@@ -992,11 +992,11 @@ cache_gen_key(SPDMessageType type)
     char ktype;    
     int kpitch = 0, krate = 0, kvoice = 0;
 
-    if (msg_settings.language == NULL) return NULL;
+    if (msg_settings.voice.language == NULL) return NULL;
 
     DBG("v, p, r = %d %d %d", FestivalCacheDistinguishVoices, 
FestivalCacheDistinguishPitch, FestivalCacheDistinguishRate);
 
-    if (FestivalCacheDistinguishVoices) kvoice = msg_settings.voice;
+    if (FestivalCacheDistinguishVoices) kvoice = msg_settings.voice_type;
     if (FestivalCacheDistinguishPitch) kpitch = msg_settings.pitch;
     if (FestivalCacheDistinguishRate) krate = msg_settings.rate;
 
@@ -1008,7 +1008,7 @@ cache_gen_key(SPDMessageType type)
        return NULL;
     }
 
-    key = g_strdup_printf("%c_%s_%d_%d_%d", ktype, msg_settings.language, 
kvoice,
+    key = g_strdup_printf("%c_%s_%d_%d_%d", ktype, 
msg_settings.voice.language, kvoice,
                                 krate, kpitch);
 
     return key;
diff --git a/src/modules/generic.c b/src/modules/generic.c
index bbce9f0..a362a64 100644
--- a/src/modules/generic.c
+++ b/src/modules/generic.c
@@ -198,8 +198,8 @@ module_speak(gchar *data, size_t bytes, SPDMessageType 
msgtype)
         return 0;
     }
 
-    UPDATE_STRING_PARAMETER(language, generic_set_language);
-    UPDATE_PARAMETER(voice, generic_set_voice);
+    UPDATE_STRING_PARAMETER(voice.language, generic_set_language);
+    UPDATE_PARAMETER(voice_type, generic_set_voice);
     UPDATE_PARAMETER(punctuation_mode, generic_set_punct);
     UPDATE_PARAMETER(pitch, generic_set_pitch);
     UPDATE_PARAMETER(rate, generic_set_rate);
@@ -603,7 +603,7 @@ generic_set_language(char *lang)
        generic_msg_language->name = g_strdup("english");
     }
 
-    generic_set_voice(msg_settings.voice);
+    generic_set_voice(msg_settings.voice_type);
 }
 
 void
diff --git a/src/modules/ibmtts.c b/src/modules/ibmtts.c
index 3c7dc99..81a1b6c 100644
--- a/src/modules/ibmtts.c
+++ b/src/modules/ibmtts.c
@@ -590,9 +590,9 @@ module_speak(gchar *data, size_t bytes, SPDMessageType 
msgtype)
         ibmtts_message_type = SPD_MSGTYPE_SPELL;
        
     /* Setting speech parameters. */
-    UPDATE_STRING_PARAMETER(language, ibmtts_set_language);
-    UPDATE_PARAMETER(voice, ibmtts_set_voice);
-    UPDATE_STRING_PARAMETER(synthesis_voice, ibmtts_set_synthesis_voice);
+    UPDATE_STRING_PARAMETER(voice.language, ibmtts_set_language);
+    UPDATE_PARAMETER(voice_type, ibmtts_set_voice);
+    UPDATE_STRING_PARAMETER(voice.name, ibmtts_set_synthesis_voice);
     UPDATE_PARAMETER(rate, ibmtts_set_rate);
     UPDATE_PARAMETER(volume, ibmtts_set_volume);
     UPDATE_PARAMETER(pitch, ibmtts_set_pitch);
@@ -1229,15 +1229,15 @@ ibmtts_set_language_and_voice(char *lang, SPDVoiceType 
voice, char* variant)
 static void
 ibmtts_set_voice(SPDVoiceType voice)
 {
-    if (msg_settings.language) {
-       ibmtts_set_language_and_voice(msg_settings.language, voice, NULL);
+    if (msg_settings.voice.language) {
+       ibmtts_set_language_and_voice(msg_settings.voice.language, voice, NULL);
        }
 }
 
 static void
 ibmtts_set_language(char *lang)
 {
-       ibmtts_set_language_and_voice(lang, msg_settings.voice, NULL);
+       ibmtts_set_language_and_voice(lang, msg_settings.voice_type, NULL);
 }
 
 /* sets the IBM voice according to its name. */
@@ -1254,7 +1254,7 @@ ibmtts_set_synthesis_voice(char *synthesis_voice)
     
     for (i=0; i < MAX_NB_OF_LANGUAGES; i++) {
        if (!strcasecmp(eciLocales[i].name, synthesis_voice)) {
-           ibmtts_set_language_and_voice(eciLocales[i].lang, 
msg_settings.voice, eciLocales[i].dialect);
+           ibmtts_set_language_and_voice(eciLocales[i].lang, 
msg_settings.voice_type, eciLocales[i].dialect);
            break;
        }
     }
@@ -1550,7 +1550,7 @@ ibmtts_subst_keys(char *key)
     GString *tmp = g_string_sized_new(30);
     g_string_append(tmp, key);
 
-    GList *keyTable = g_hash_table_lookup(IbmttsKeySubstitution, 
msg_settings.language);
+    GList *keyTable = g_hash_table_lookup(IbmttsKeySubstitution, 
msg_settings.voice.language);
 
     if (keyTable)
         g_list_foreach(keyTable, ibmtts_subst_keys_cb, tmp);
diff --git a/src/modules/module_utils.c b/src/modules/module_utils.c
index cc22b7a..c2e849a 100644
--- a/src/modules/module_utils.c
+++ b/src/modules/module_utils.c
@@ -193,9 +193,24 @@ do_set(void)
             else SET_PARAM_STR_C(punctuation_mode, str2EPunctMode)
             else SET_PARAM_STR_C(spelling_mode, str2ESpellMode)
             else SET_PARAM_STR_C(cap_let_recogn, str2ECapLetRecogn)
-            else SET_PARAM_STR_C(voice, str2EVoice)
-            else SET_PARAM_STR(synthesis_voice)
-            else SET_PARAM_STR(language)
+            else
+                if(!strcmp(cur_item, "voice")){
+                    ret = str2EVoice(cur_value);
+                    if (ret != -1) msg_settings.voice_type = ret;
+                    else err = 2;
+                }
+            else
+                if(!strcmp(cur_item, "synthesis_voice")){
+                    g_free(msg_settings.voice.name);
+                    if(!strcmp(cur_value, "NULL")) msg_settings.voice.name = 
NULL;
+                    else msg_settings.voice.name = g_strdup(cur_value);
+                }
+            else
+                if(!strcmp(cur_item, "language")){
+                    g_free(msg_settings.voice.language);
+                    if(!strcmp(cur_value, "NULL")) msg_settings.voice.language 
= NULL;
+                    else msg_settings.voice.language = g_strdup(cur_value);
+                }
             else err=2;             /* Unknown parameter */
         }
         g_free(line);
diff --git a/src/modules/module_utils.h b/src/modules/module_utils.h
index aa7020c..91ff2bd 100644
--- a/src/modules/module_utils.h
+++ b/src/modules/module_utils.h
@@ -56,10 +56,8 @@ typedef struct{
     SPDSpelling spelling_mode;
     SPDCapitalLetters cap_let_recogn;
 
-    char* language;
-
-    SPDVoiceType voice;
-    char *synthesis_voice;
+    SPDVoiceType voice_type;
+    SPDVoice voice;
 }SPDMsgSettings;
 
 int log_level;
@@ -86,9 +84,9 @@ int module_num_dc_options;
  msg_settings_old.punctuation_mode = -1;\
  msg_settings_old.spelling_mode = -1;\
  msg_settings_old.cap_let_recogn = -1;\
- msg_settings_old.language = NULL;     \
- msg_settings_old.voice = -1;\
- msg_settings_old.synthesis_voice = NULL;
+ msg_settings_old.voice_type = -1;\
+ msg_settings_old.voice.name = NULL;\
+ msg_settings_old.voice.language = NULL;
 
 #define INIT_SETTINGS_TABLES()\
  module_dc_options = NULL;\
@@ -98,9 +96,9 @@ int module_num_dc_options;
  msg_settings.punctuation_mode = SPD_PUNCT_NONE;\
  msg_settings.spelling_mode = SPD_SPELL_OFF;\
  msg_settings.cap_let_recogn = SPD_CAP_NONE;\
- msg_settings.language = NULL;\
- msg_settings.voice = SPD_MALE1;\
- msg_settings.synthesis_voice = NULL;\
+ msg_settings.voice_type = SPD_MALE1;\
+ msg_settings.voice.name = NULL;\
+ msg_settings.voice.language = NULL;\
  CLEAN_OLD_SETTINGS_TABLE()
 
 #define DBG(arg...) \
diff --git a/src/modules/pico.c b/src/modules/pico.c
index 4a508b4..bc3cd59 100644
--- a/src/modules/pico.c
+++ b/src/modules/pico.c
@@ -499,9 +499,9 @@ int module_speak(char * data, size_t bytes, SPDMessageType 
msgtype)
 
        /* Setting speech parameters. */
 
-       UPDATE_STRING_PARAMETER(synthesis_voice, pico_set_synthesis_voice);
+       UPDATE_STRING_PARAMETER(voice.name, pico_set_synthesis_voice);
 /*     UPDATE_PARAMETER(voice_type, pico_set_voice);*/
-       UPDATE_STRING_PARAMETER(language, pico_set_language);
+       UPDATE_STRING_PARAMETER(voice.language, pico_set_language);
 
        picoInp = (pico_Char *) module_strip_ssml(data);
 
-- 
1.6.0.4




reply via email to

[Prev in Thread] Current Thread [Next in Thread]