diff options
Diffstat (limited to 'src/gstespeak.c')
-rw-r--r-- | src/gstespeak.c | 31 |
1 files changed, 27 insertions, 4 deletions
diff --git a/src/gstespeak.c b/src/gstespeak.c index 951890b..6857fce 100644 --- a/src/gstespeak.c +++ b/src/gstespeak.c @@ -74,7 +74,9 @@ enum PROP_0, PROP_TEXT, PROP_PITCH, - PROP_RATE + PROP_RATE, + PROP_LANG, + PROP_LANGS }; static GstStaticPadTemplate src_factory = GST_STATIC_PAD_TEMPLATE ( @@ -155,7 +157,14 @@ gst_espeak_class_init (GstEspeakClass * klass) g_param_spec_uint("rate", "Speed in words per minute", "Speed in words per minute", 80, 390, 170, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); - + g_object_class_install_property(gobject_class, PROP_LANG, + g_param_spec_string("lang", "Current lang", + "Current lang", "default", + G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); + g_object_class_install_property(gobject_class, PROP_LANGS, + g_param_spec_boxed("langs", "List of langs", + "List of langs", G_TYPE_STRV, + G_PARAM_READABLE | G_PARAM_STATIC_STRINGS)); } /* initialize the new element @@ -169,9 +178,11 @@ gst_espeak_init (GstEspeak * self, { self->text = NULL; self->uri = NULL; - self->speak = espeak_new(); self->pitch = 50; self->rate = 170; + self->speak = espeak_new(); + self->lang = g_strdup("default"); + self->langs = espeak_langs(); } static void @@ -182,6 +193,8 @@ gst_espeak_finalize(GObject * self_) espeak_unref(self->speak); self->speak = NULL; g_free(self->text); self->text = NULL; g_free(self->uri); self->uri = NULL; + g_free(self->lang); self->lang = NULL; + g_strfreev(self->langs); self->langs = NULL; G_OBJECT_CLASS(parent_class)->dispose(self_); } @@ -237,6 +250,9 @@ gst_espeak_set_property (GObject *object, guint prop_id, case PROP_RATE: self->rate = g_value_get_uint(value); break; + case PROP_LANG: + self->lang = g_strdup(g_value_get_string(value)); + break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); break; @@ -259,6 +275,12 @@ gst_espeak_get_property (GObject * object, guint prop_id, case PROP_RATE: g_value_set_uint(value, self->rate); break; + case PROP_LANG: + g_value_set_string(value, self->lang); + break; + case PROP_LANGS: + g_value_set_boxed(value, self->langs); + break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); break; @@ -286,7 +308,8 @@ gst_espeak_start (GstBaseSrc * self_) if (self->text == NULL || self->text[0] == 0) return FALSE; - return espeak_say(self->speak, self->text, self->pitch, self->rate); + return espeak_say(self->speak, self->text, self->lang, self->pitch, + self->rate); } static gboolean |