Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAleksey Lim <alsroot@member.fsf.org>2009-03-09 06:06:52 (GMT)
committer Aleksey Lim <alsroot@member.fsf.org>2009-03-09 06:06:52 (GMT)
commit02f845d5bf73b49c1bd0a861210dfea9cb10fea8 (patch)
treee31680f43bcf599f9087a217b6089dbe477a7851
parente4dad88de9b18d7a2cb966aa554fa872b7b29184 (diff)
Push text to process queue only after playing was started
-rw-r--r--src/gstespeak.c20
-rw-r--r--src/gstespeak.h1
2 files changed, 18 insertions, 3 deletions
diff --git a/src/gstespeak.c b/src/gstespeak.c
index b460d19..ec347b4 100644
--- a/src/gstespeak.c
+++ b/src/gstespeak.c
@@ -113,7 +113,7 @@ gst_espeak_class_init(GstEspeakClass * klass)
g_object_class_install_property(gobject_class, PROP_TEXT,
g_param_spec_string("text", "Text",
"Text to pronounce", NULL,
- G_PARAM_WRITABLE | G_PARAM_STATIC_STRINGS));
+ G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
g_object_class_install_property(gobject_class, PROP_PITCH,
g_param_spec_int("pitch", "Pitch adjustment",
"Pitch adjustment", -100, 100, 0,
@@ -153,6 +153,7 @@ static void
gst_espeak_init (GstEspeak * self,
GstEspeakClass * gclass)
{
+ self->text = NULL;
self->pitch = 0;
self->rate = 0;
self->voice = g_strdup(ESPEAK_DEFAULT_VOICE);
@@ -174,6 +175,7 @@ gst_espeak_finalize(GObject * self_)
{
GstEspeak *self = GST_ESPEAK(self_);
+ g_free(self->text); self->text = NULL;
gst_caps_unref(self->caps); self->caps = NULL;
espeak_unref(self->speak); self->speak = NULL;
g_free(self->voice); self->voice = NULL;
@@ -185,6 +187,13 @@ gst_espeak_finalize(GObject * self_)
/******************************************************************************/
static void
+gst_espeak_set_text(GstEspeak *self, const gchar *text)
+{
+ g_free(self->text);
+ self->text = g_strdup(text);
+}
+
+static void
gst_espeak_set_property(GObject *object, guint prop_id,
const GValue * value, GParamSpec * pspec)
{
@@ -192,7 +201,7 @@ gst_espeak_set_property(GObject *object, guint prop_id,
switch (prop_id) {
case PROP_TEXT:
- espeak_in(self->speak, g_value_get_string(value));
+ gst_espeak_set_text(self, g_value_get_string(value));
break;
case PROP_PITCH:
self->pitch = g_value_get_int(value);
@@ -227,6 +236,9 @@ gst_espeak_get_property(GObject * object, guint prop_id,
GstEspeak *self = GST_ESPEAK(object);
switch (prop_id) {
+ case PROP_TEXT:
+ g_value_set_string(value, self->text);
+ break;
case PROP_PITCH:
g_value_set_uint(value, self->pitch);
break;
@@ -273,6 +285,8 @@ gst_espeak_create(GstBaseSrc * self_, guint64 offset, guint size,
static gboolean
gst_espeak_start(GstBaseSrc * self_)
{
+ GstEspeak *self = GST_ESPEAK(self_);
+ espeak_in(self->speak, self->text);
return TRUE;
}
@@ -328,7 +342,7 @@ gst_espeak_uri_set_uri(GstURIHandler *handler, const gchar *uri)
if (!text)
return FALSE;
- espeak_in(GST_ESPEAK(handler)->speak, text);
+ gst_espeak_set_text(GST_ESPEAK(handler), text);
g_free (text);
return TRUE;
diff --git a/src/gstespeak.h b/src/gstespeak.h
index 1156b14..60b6806 100644
--- a/src/gstespeak.h
+++ b/src/gstespeak.h
@@ -43,6 +43,7 @@ struct _GstEspeak
{
GstAudioSrc parent;
struct _Econtext *speak;
+ gchar *text;
gint pitch;
gint rate;
gchar *voice;