};
enum {
+ ENGINE_NONE = 0,
+ ENGINE_ESPEAK,
+ ENGINE_REALPEOPLE
+};
+
+enum {
GENDER_NONE = 0,
GENDER_MALE,
GENDER_FEMALE
{"french", N_("French")},
{"french (Belgium)", N_("French (Belgium)")},
{"greek-ancient", N_("Greek (Ancient)")},
- {"hindi-test", N_("Hindi")},
+ {"hindi", N_("Hindi")},
{"croatian", N_("Croatian")},
{"hungarian", N_("Hungarian")},
{"armenian", N_("Armenian")},
{"swahihi-test", N_("Swahihi")},
{"tamil", N_("Tamil")},
{"turkish", N_("Turkish")},
- {"vietnam-test", N_("Vietnam")},
+ {"vietnam", N_("Vietnamese")},
{"Mandarin", N_("Chinese (Mandarin)")},
- {"cantonese-test", N_("Chinese (Cantonese)")},
+ {"cantonese", N_("Chinese (Cantonese)")},
+ {"akan-test", N_("Akam")},
+ {"amharic-test", N_("Amharic")},
+ {"azerbaijani-test", N_("Azerbaijani")},
+ {"bulgarian-test", N_("Bulgarian")},
+ {"dari-test", N_("Dari")},
+ {"divehi-test", N_("Divehi")},
+ {"georgian-test", N_("Georgian")},
+ {"haitian", N_("Haitian")},
+ {"kannada", N_("Kannada")},
+ {"kinyarwanda-test", N_("Kinyarwanda")},
+ {"malayalam", N_("Mlayalam")},
+ {"nahuatl - clasical", N_("Nahuatl (Clasical)")},
+ {"nepali-test", N_("Nepali")},
+ {"northern-sotho", N_("Northern Sotho")},
+ {"punjabi-test", N_("Punjabi")},
+ {"setswana-test", N_("Setswana")},
+ {"sinhala", N_("Sinhala")},
+ {"slovenian-test", N_("Slovenian")},
+ {"swahili-test", N_("Swahili")},
+ {"telugu", N_("Telugu")},
+ {"urdu-test", N_("Urdu")},
+ {"wolof-test", N_("Wolof")},
{"default", N_("Default")},
- {"WyabdcRealPeopleTTS", N_("WyabdcRealPeopleTTS")},
{NULL, NULL}
};
{
int rate = 0;
bool tts_enabled = false;
+ int engine = ENGINE_NONE;
gchar *language = NULL;
int gender = GENDER_NONE;
}
Enable(tts_enabled);
+ /* read configured engine */
+ if (!oStarDict->oConf->GetInt("/apps/maemo/mstardict/tts_engine", &engine)) {
+ engine = ENGINE_ESPEAK;
+ }
+
/* read configured language */
if (!oStarDict->oConf->GetString("/apps/maemo/mstardict/tts_language", &language)) {
language = g_strdup("english");
if (!oStarDict->oConf->GetInt("/apps/maemo/mstardict/tts_gender", &gender)) {
gender = GENDER_MALE;
}
- SetVoice(language, gender);
+ SetVoice(engine, language, gender);
if (language) {
g_free(language);
}
void
-Tts::SetVoice(const gchar *language, int gender)
+Tts::SetVoice(int engine, const gchar *language, int gender)
{
- if (g_strcmp0(language, "WyabdcRealPeopleTTS") == 0)
- RealPeople = true;
- else
- RealPeople = false;
+ Engine = engine;
espeak_VOICE voice;
void
Tts::SayText(const gchar *sText)
{
- if (!RealPeople) {
+ if (Engine == ENGINE_ESPEAK) {
espeak_Synth(sText, strlen(sText) + 1, 0, POS_CHARACTER, 0, espeakCHARS_UTF8, NULL, NULL);
return;
+ } else if (Engine == ENGINE_REALPEOPLE) {
+ gchar *lower = g_utf8_strdown(sText, -1);
+ if (!lower)
+ return;
+
+ gchar *cmd = g_strdup_printf("paplay /home/user/MyDocs/mstardict/WyabdcRealPeopleTTS/%c/%s.wav", lower[0], lower);
+ if (!cmd)
+ return;
+
+ system(cmd);
+
+ g_free(lower);
+ g_free(cmd);
+ } else {
+ /* unknown engine */
}
-
- gchar *lower = g_utf8_strdown(sText, -1);
- gchar *cmd = g_strdup_printf("paplay /home/user/MyDocs/mstardict/WyabdcRealPeopleTTS/%c/%s.wav", lower[0], lower);
- g_free(lower);
-
- system(cmd);
-
- g_free(cmd);
-
}
GtkListStore *
Tts *oTts)
{
if (hildon_check_button_get_active(HILDON_CHECK_BUTTON(button))) {
+ gtk_widget_set_sensitive(GTK_WIDGET(oTts->engine_espeak_button), TRUE);
+ gtk_widget_set_sensitive(GTK_WIDGET(oTts->engine_realpeople_button), TRUE);
+ gtk_widget_set_sensitive(GTK_WIDGET(oTts->gender_male_button), TRUE);
+ gtk_widget_set_sensitive(GTK_WIDGET(oTts->gender_female_button), TRUE);
+ gtk_widget_set_sensitive(GTK_WIDGET(oTts->language_button), TRUE);
+ } else {
+ gtk_widget_set_sensitive(GTK_WIDGET(oTts->engine_espeak_button), FALSE);
+ gtk_widget_set_sensitive(GTK_WIDGET(oTts->engine_realpeople_button), FALSE);
+ gtk_widget_set_sensitive(GTK_WIDGET(oTts->gender_male_button), FALSE);
+ gtk_widget_set_sensitive(GTK_WIDGET(oTts->gender_female_button), FALSE);
+ gtk_widget_set_sensitive(GTK_WIDGET(oTts->language_button), FALSE);
+ }
+ return true;
+}
+
+gboolean
+Tts::onTtsEngineButtonClicked(GtkWidget *button,
+ Tts *oTts)
+{
+ GtkWidget *button2;
+
+ if (button != oTts->engine_realpeople_button)
+ button2 = oTts->engine_realpeople_button;
+ else
+ button2 = oTts->engine_espeak_button;
+
+ if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(button)))
+ gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(button2), FALSE);
+ else
+ gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(button2), TRUE);
+
+ if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(oTts->engine_espeak_button))) {
+ gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(oTts->engine_realpeople_button), FALSE);
gtk_widget_set_sensitive(GTK_WIDGET(oTts->gender_male_button), TRUE);
gtk_widget_set_sensitive(GTK_WIDGET(oTts->gender_female_button), TRUE);
gtk_widget_set_sensitive(GTK_WIDGET(oTts->language_button), TRUE);
} else {
+ gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(oTts->engine_realpeople_button), TRUE);
gtk_widget_set_sensitive(GTK_WIDGET(oTts->gender_male_button), FALSE);
gtk_widget_set_sensitive(GTK_WIDGET(oTts->gender_female_button), FALSE);
gtk_widget_set_sensitive(GTK_WIDGET(oTts->language_button), FALSE);
}
+
+ if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(oTts->engine_realpeople_button))) {
+ gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(oTts->engine_espeak_button), FALSE);
+ } else {
+ gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(oTts->engine_espeak_button), TRUE);
+ }
+
return true;
}
GtkWidget *
Tts::CreateTtsConfWidget()
{
- GtkWidget *frame, *vbox, *hbox;
+ GtkWidget *frame, *vbox, *engine_hbox, *gender_hbox;
GtkWidget *selector;
HildonTouchSelectorColumn *column;
GtkListStore *voices_list;
gtk_button_set_label(GTK_BUTTON(enable_button), _("Enable"));
gtk_box_pack_start(GTK_BOX(vbox), enable_button, TRUE, TRUE, 0);
+ /* engine selection */
+ engine_hbox = gtk_hbox_new(TRUE, 0);
+ gtk_box_pack_start(GTK_BOX(vbox), engine_hbox, TRUE, TRUE, 0);
+
+ engine_espeak_button = hildon_gtk_toggle_button_new(HILDON_SIZE_FINGER_HEIGHT);
+ gtk_button_set_label(GTK_BUTTON(engine_espeak_button), _("eSpeak"));
+ gtk_box_pack_start(GTK_BOX(engine_hbox), engine_espeak_button, TRUE, TRUE, 0);
+
+ engine_realpeople_button = hildon_gtk_toggle_button_new(HILDON_SIZE_FINGER_HEIGHT);
+ gtk_button_set_label(GTK_BUTTON(engine_realpeople_button), _("Real People"));
+ gtk_box_pack_start(GTK_BOX(engine_hbox), engine_realpeople_button, TRUE, TRUE, 0);
+
/* gender selection */
- hbox = gtk_hbox_new(TRUE, 0);
- gtk_box_pack_start(GTK_BOX(vbox), hbox, TRUE, TRUE, 0);
+ gender_hbox = gtk_hbox_new(TRUE, 0);
+ gtk_box_pack_start(GTK_BOX(vbox), gender_hbox, TRUE, TRUE, 0);
gender_male_button = hildon_gtk_toggle_button_new(HILDON_SIZE_FINGER_HEIGHT);
gtk_button_set_label(GTK_BUTTON(gender_male_button), _("Male"));
- gtk_box_pack_start(GTK_BOX(hbox), gender_male_button, TRUE, TRUE, 0);
+ gtk_box_pack_start(GTK_BOX(gender_hbox), gender_male_button, TRUE, TRUE, 0);
gender_female_button = hildon_gtk_toggle_button_new(HILDON_SIZE_FINGER_HEIGHT);
gtk_button_set_label(GTK_BUTTON(gender_female_button), _("Female"));
- gtk_box_pack_start(GTK_BOX(hbox), gender_female_button, TRUE, TRUE, 0);
+ gtk_box_pack_start(GTK_BOX(gender_hbox), gender_female_button, TRUE, TRUE, 0);
/* language picker button */
language_button = hildon_picker_button_new(HILDON_SIZE_FINGER_HEIGHT,
HILDON_TOUCH_SELECTOR(selector));
g_signal_connect(enable_button, "clicked", G_CALLBACK(onTtsEnableButtonClicked), this);
+ g_signal_connect(engine_espeak_button, "clicked", G_CALLBACK(onTtsEngineButtonClicked), this);
+ g_signal_connect(engine_realpeople_button, "clicked", G_CALLBACK(onTtsEngineButtonClicked), this);
g_signal_connect(gender_male_button, "clicked", G_CALLBACK(onTtsGenderButtonClicked), gender_female_button);
g_signal_connect(gender_female_button, "clicked", G_CALLBACK(onTtsGenderButtonClicked), gender_male_button);
{
HildonTouchSelector *selector;
GtkTreeIter iter;
+ int engine = ENGINE_NONE;
int gender = GENDER_NONE;
gchar *language = NULL;
GtkTreeModel *model;
gtk_widget_set_sensitive(language_button, FALSE);
}
+ if (oStarDict->oConf->GetInt("/apps/maemo/mstardict/tts_engine", &engine)) {
+ if (engine == ENGINE_ESPEAK)
+ gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(engine_espeak_button), TRUE);
+ else
+ gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(engine_realpeople_button), TRUE);
+ } else {
+ gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(engine_espeak_button), TRUE);
+ }
+
if (oStarDict->oConf->GetInt("/apps/maemo/mstardict/tts_gender", &gender)) {
if (gender == GENDER_MALE)
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(gender_male_button), TRUE);
bool enabled = false;
HildonTouchSelector *selector;
GtkTreeIter iter;
+ int engine = ENGINE_NONE;
int gender = GENDER_NONE;
- const gchar *language;
+ const gchar *language = NULL;
enabled = hildon_check_button_get_active(HILDON_CHECK_BUTTON(enable_button));
if (oStarDict->oConf->SetBool("/apps/maemo/mstardict/tts_enabled", enabled))
Enable(enabled);
+ if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(engine_espeak_button)))
+ engine = ENGINE_ESPEAK;
+ else
+ engine = ENGINE_REALPEOPLE;
+ oStarDict->oConf->SetInt("/apps/maemo/mstardict/tts_engine", engine);
+
if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(gender_male_button)))
gender = GENDER_MALE;
else
gender = GENDER_FEMALE;
oStarDict->oConf->SetInt("/apps/maemo/mstardict/tts_gender", gender);
+ if (engine)
+ Engine = engine;
+
if (hildon_picker_button_get_active(HILDON_PICKER_BUTTON(language_button)) > -1) {
selector = hildon_picker_button_get_selector(HILDON_PICKER_BUTTON(language_button));
if (hildon_touch_selector_get_selected(selector, DISPNAME_COLUMN, &iter)) {
/* fixme convert back disp_name */
if (oStarDict->oConf->SetString("/apps/maemo/mstardict/tts_language", language))
- SetVoice(language, gender);
+ SetVoice(engine, language, gender);
}
}
}