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 04:28:11 (GMT)
committer Aleksey Lim <alsroot@member.fsf.org>2009-03-09 04:28:11 (GMT)
commitdda63be39672ec8d32e0a9e9e6911b3d1d0590f6 (patch)
tree0b5becbf3e21de639d9f4d2c35ed7f047329aad9
parent89625b3d7f6c598663af92ffdb223b21e87747f1 (diff)
Use ranges from speech-dispatcher's bindning for pitch/rate properties
-rw-r--r--src/espeak.c23
-rw-r--r--src/espeak.h7
-rw-r--r--src/gstespeak.c20
-rw-r--r--src/gstespeak.h4
4 files changed, 31 insertions, 23 deletions
diff --git a/src/espeak.c b/src/espeak.c
index 267e5eb..504f52e 100644
--- a/src/espeak.c
+++ b/src/espeak.c
@@ -157,10 +157,10 @@ espeak_new(GstElement *emitter)
self->process_chunk = g_slist_alloc();
self->process_chunk->data = self;
- self->pitch = ESPEAK_DEFAULT_PITCH;
- self->rate = ESPEAK_DEFAULT_RATE;
+ self->pitch = 50;
+ self->rate = 170;
self->voice = ESPEAK_DEFAULT_VOICE;
- self->gap = ESPEAK_DEFAULT_GAP;
+ self->gap = 0;
self->track = ESPEAK_TRACK_NONE;
self->emitter = emitter;
@@ -559,14 +559,27 @@ espeak_get_voices()
}
void
-espeak_set_pitch(Econtext *self, guint value)
+espeak_set_pitch(Econtext *self, gint value)
{
+ if (value == 0)
+ value = 50;
+ else
+ value = MIN(99, (value + 100) / 2);
+
g_atomic_int_set(&self->pitch, value);
}
void
-espeak_set_rate(Econtext *self, guint value)
+espeak_set_rate(Econtext *self, gint value)
{
+ if (value == 0)
+ value = 170;
+ else
+ if (value < 0)
+ value = MAX(80, value + 170);
+ else
+ value = 170 + value * 2;
+
g_atomic_int_set(&self->rate, value);
}
diff --git a/src/espeak.h b/src/espeak.h
index 688b477..70df9d1 100644
--- a/src/espeak.h
+++ b/src/espeak.h
@@ -18,10 +18,7 @@
#ifndef ESPEAK_H
#define ESPEAK_H
-#define ESPEAK_DEFAULT_PITCH 50
-#define ESPEAK_DEFAULT_RATE 170
#define ESPEAK_DEFAULT_VOICE "default"
-#define ESPEAK_DEFAULT_GAP 0
#define ESPEAK_TRACK_NONE 0
#define ESPEAK_TRACK_WORD 1
@@ -35,8 +32,8 @@ void espeak_unref(Econtext*);
gint espeak_get_sample_rate();
GValueArray* espeak_get_voices();
-void espeak_set_pitch(Econtext*, guint);
-void espeak_set_rate(Econtext*, guint);
+void espeak_set_pitch(Econtext*, gint);
+void espeak_set_rate(Econtext*, gint);
void espeak_set_voice(Econtext*, const gchar*);
void espeak_set_gap(Econtext*, guint);
void espeak_set_track(Econtext*, guint);
diff --git a/src/gstespeak.c b/src/gstespeak.c
index 6f28f57..9e3f627 100644
--- a/src/gstespeak.c
+++ b/src/gstespeak.c
@@ -115,12 +115,12 @@ gst_espeak_class_init(GstEspeakClass * klass)
"Text to pronounce", NULL,
G_PARAM_WRITABLE | G_PARAM_STATIC_STRINGS));
g_object_class_install_property(gobject_class, PROP_PITCH,
- g_param_spec_uint("pitch", "Pitch adjustment",
- "Pitch adjustment", 0, 99, ESPEAK_DEFAULT_PITCH,
+ g_param_spec_int("pitch", "Pitch adjustment",
+ "Pitch adjustment", -100, 100, 0,
G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
g_object_class_install_property(gobject_class, PROP_RATE,
- g_param_spec_uint("rate", "Speed in words per minute",
- "Speed in words per minute", 80, 390, ESPEAK_DEFAULT_RATE,
+ g_param_spec_int("rate", "Speed in words per minute",
+ "Speed in words per minute", -100, 100, 0,
G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
g_object_class_install_property(gobject_class, PROP_VOICE,
g_param_spec_string("voice", "Current voice",
@@ -128,7 +128,7 @@ gst_espeak_class_init(GstEspeakClass * klass)
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,
+ "Word gap", 0, G_MAXINT, 0,
G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
g_object_class_install_property(gobject_class, PROP_TRACK,
g_param_spec_uint("track", "Track",
@@ -153,8 +153,8 @@ static void
gst_espeak_init (GstEspeak * self,
GstEspeakClass * gclass)
{
- self->pitch = ESPEAK_DEFAULT_PITCH;
- self->rate = ESPEAK_DEFAULT_RATE;
+ self->pitch = 0;
+ self->rate = 0;
self->voice = g_strdup(ESPEAK_DEFAULT_VOICE);
self->voices = espeak_get_voices();
self->speak = espeak_new(GST_ELEMENT(self));
@@ -172,7 +172,6 @@ gst_espeak_init (GstEspeak * self,
static void
gst_espeak_finalize(GObject * self_)
{
-fprintf(stderr, "0!!!!!!\n");
GstEspeak *self = GST_ESPEAK(self_);
gst_caps_unref(self->caps); self->caps = NULL;
@@ -196,11 +195,11 @@ gst_espeak_set_property(GObject *object, guint prop_id,
espeak_in(self->speak, g_value_get_string(value));
break;
case PROP_PITCH:
- self->pitch = g_value_get_uint(value);
+ self->pitch = g_value_get_int(value);
espeak_set_pitch(self->speak, self->pitch);
break;
case PROP_RATE:
- self->rate = g_value_get_uint(value);
+ self->rate = g_value_get_int(value);
espeak_set_rate(self->speak, self->rate);
break;
case PROP_VOICE:
@@ -283,7 +282,6 @@ gst_espeak_start(GstBaseSrc * self_)
static gboolean
gst_espeak_stop(GstBaseSrc * self)
{
- GST_DEBUG("!!!!!!!!!!");
return TRUE;
}
diff --git a/src/gstespeak.h b/src/gstespeak.h
index 9b4778b..1156b14 100644
--- a/src/gstespeak.h
+++ b/src/gstespeak.h
@@ -43,8 +43,8 @@ struct _GstEspeak
{
GstAudioSrc parent;
struct _Econtext *speak;
- guint pitch;
- guint rate;
+ gint pitch;
+ gint rate;
gchar *voice;
guint gap;
guint track;