Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/src/gstespeak.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/gstespeak.c')
-rw-r--r--src/gstespeak.c32
1 files changed, 19 insertions, 13 deletions
diff --git a/src/gstespeak.c b/src/gstespeak.c
index 8f5d8e5..221abf4 100644
--- a/src/gstespeak.c
+++ b/src/gstespeak.c
@@ -37,12 +37,19 @@
#include "gstespeak.h"
#include "espeak.h"
+#include "marshal.h"
GST_DEBUG_CATEGORY_STATIC (gst_espeak_debug);
#define GST_CAT_DEFAULT gst_espeak_debug
enum
{
+ SIGNAL_WORD,
+ LAST_SIGNAL
+};
+
+enum
+{
PROP_0,
PROP_TEXT,
PROP_PITCH,
@@ -74,6 +81,8 @@ static GstCaps *gst_espeak_getcaps(GstBaseSrc*);
GST_BOILERPLATE_FULL(GstEspeak, gst_espeak, GstBaseSrc, GST_TYPE_BASE_SRC,
gst_espeak_init_uri);
+static gint signals[LAST_SIGNAL];
+
/******************************************************************************/
static void
@@ -133,6 +142,12 @@ gst_espeak_class_init (GstEspeakClass * klass)
g_param_spec_boxed ("caps", "Caps",
"Caps describing the format of the data.", GST_TYPE_CAPS,
G_PARAM_READABLE));
+
+ signals[SIGNAL_WORD] = g_signal_new("word",
+ G_TYPE_FROM_CLASS(klass), G_SIGNAL_RUN_LAST,
+ G_STRUCT_OFFSET(GstEspeakClass, word),
+ NULL, NULL, espeak_VOID__UINT_UINT, G_TYPE_NONE,
+ 2, G_TYPE_UINT, G_TYPE_UINT);
}
/* initialize the new element
@@ -183,7 +198,7 @@ gst_espeak_set_property(GObject *object, guint prop_id,
switch (prop_id) {
case PROP_TEXT:
- espeak_say(self->speak, g_value_get_string(value));
+ espeak_in(self->speak, g_value_get_string(value));
break;
case PROP_PITCH:
self->pitch = g_value_get_uint(value);
@@ -238,17 +253,8 @@ gst_espeak_create(GstBaseSrc * self_, guint64 offset, guint size,
GstBuffer **buf)
{
GstEspeak *self = GST_ESPEAK(self_);
-
- gpointer sound = espeak_hear(self->speak, size);
-
- if (sound == NULL)
- return GST_FLOW_UNEXPECTED;
-
- *buf = gst_buffer_new();
- GST_BUFFER_DATA(*buf) = sound;
- GST_BUFFER_SIZE(*buf) = size;
-
- return GST_FLOW_OK;
+ *buf = espeak_out(self->speak, size, self);
+ return *buf ? GST_FLOW_OK : GST_FLOW_UNEXPECTED;
}
static gboolean
@@ -307,7 +313,7 @@ gst_espeak_uri_set_uri(GstURIHandler *handler, const gchar *uri)
if (!text)
return FALSE;
- espeak_say(GST_ESPEAK(handler)->speak, text);
+ espeak_in(GST_ESPEAK(handler)->speak, text);
g_free (text);
return TRUE;