From 81613252fbcb2eec85a95eb1fefbd861c88732f5 Mon Sep 17 00:00:00 2001 From: Aleksey Lim Date: Sun, 08 Mar 2009 06:09:32 +0000 Subject: Add word gap property --- diff --git a/src/espeak.c b/src/espeak.c index 2457769..92395f5 100644 --- a/src/espeak.c +++ b/src/espeak.c @@ -74,6 +74,7 @@ struct _Econtext volatile gint rate; volatile gint pitch; volatile const gchar *voice; + volatile gint gap; GstElement *emitter; GstBus *bus; @@ -143,6 +144,7 @@ espeak_new(GstElement *emitter) self->pitch = ESPEAK_DEFAULT_PITCH; self->rate = ESPEAK_DEFAULT_RATE; self->voice = ESPEAK_DEFAULT_VOICE; + self->gap = ESPEAK_DEFAULT_GAP; self->emitter = emitter; gst_object_ref(self->emitter); @@ -433,6 +435,8 @@ synth(Econtext *self, Espin *spin) espeak_SetParameter(espeakPITCH, g_atomic_int_get(&self->pitch), 0); espeak_SetParameter(espeakRATE, g_atomic_int_get(&self->rate), 0); espeak_SetVoiceByName((gchar*)g_atomic_pointer_get(&self->voice)); + espeak_SetParameter(espeakWORDGAP, g_atomic_int_get(&self->gap), 0); + espeak_buffer = G_OUTPUT_STREAM(spin->sound); espeak_events = spin->events; @@ -486,6 +490,12 @@ espeak_set_voice(Econtext *self, const gchar *value) g_atomic_pointer_set(&self->voice, value); } +void +espeak_set_gap(Econtext *self, guint value) +{ + g_atomic_int_set(&self->gap, value); +} + // process ---------------------------------------------------------------------- static gpointer diff --git a/src/espeak.h b/src/espeak.h index eaa7b68..4fb4fc5 100644 --- a/src/espeak.h +++ b/src/espeak.h @@ -21,6 +21,7 @@ #define ESPEAK_DEFAULT_PITCH 50 #define ESPEAK_DEFAULT_RATE 170 #define ESPEAK_DEFAULT_VOICE "default" +#define ESPEAK_DEFAULT_GAP 0 struct _Econtext; typedef struct _Econtext Econtext; @@ -33,6 +34,7 @@ gchar** espeak_get_voices(); void espeak_set_pitch(Econtext*, guint); void espeak_set_rate(Econtext*, guint); void espeak_set_voice(Econtext*, const gchar*); +void espeak_set_gap(Econtext*, guint); void espeak_in(Econtext*, const gchar *str); GstBuffer* espeak_out(Econtext*, gsize size_to_play); diff --git a/src/gstespeak.c b/src/gstespeak.c index cfbf86d..e095a9a 100644 --- a/src/gstespeak.c +++ b/src/gstespeak.c @@ -49,6 +49,7 @@ enum PROP_RATE, PROP_VOICE, PROP_VOICES, + PROP_GAP, PROP_CAPS }; @@ -124,6 +125,10 @@ gst_espeak_class_init(GstEspeakClass * klass) g_param_spec_string("voice", "Current voice", "Current voice", ESPEAK_DEFAULT_VOICE, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); + g_object_class_install_property(gobject_class, PROP_GAP, + g_param_spec_uint("gap", "Gap", + "Word gap", 0, G_MAXINT, ESPEAK_DEFAULT_GAP, + G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); g_object_class_install_property(gobject_class, PROP_VOICES, g_param_spec_boxed("voices", "List of voices", "List of voices", G_TYPE_STRV, @@ -197,6 +202,10 @@ gst_espeak_set_property(GObject *object, guint prop_id, self->voice = g_strdup(g_value_get_string(value)); espeak_set_voice(self->speak, self->voice); break; + case PROP_GAP: + self->gap = g_value_get_uint(value); + espeak_set_gap(self->speak, self->gap); + break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); break; @@ -219,6 +228,9 @@ gst_espeak_get_property(GObject * object, guint prop_id, case PROP_VOICE: g_value_set_string(value, self->voice); break; + case PROP_GAP: + g_value_set_uint(value, self->gap); + break; case PROP_VOICES: g_value_set_boxed(value, self->voices); break; diff --git a/src/gstespeak.h b/src/gstespeak.h index df17118..6759a4c 100644 --- a/src/gstespeak.h +++ b/src/gstespeak.h @@ -46,6 +46,7 @@ struct _GstEspeak guint pitch; guint rate; gchar *voice; + guint gap; gchar **voices; GstCaps *caps; gboolean poll; -- cgit v0.9.1