From dda63be39672ec8d32e0a9e9e6911b3d1d0590f6 Mon Sep 17 00:00:00 2001 From: Aleksey Lim Date: Mon, 09 Mar 2009 04:28:11 +0000 Subject: Use ranges from speech-dispatcher's bindning for pitch/rate properties --- 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; -- cgit v0.9.1