+#include <unistd.h>
#include <gtk/gtk.h>
#include <hildon/hildon.h>
#include <hildon-cp-plugin/hildon-cp-plugin-interface.h>
+#define ESPEAK_BIN "espeak"
+
/* TODO: read these from disk */
static const struct voice {
};
static const int num_effects = sizeof(effects) / sizeof(effects[0]);
+struct espeaktime_settings {
+ const gchar *voice;
+ const gchar *effect;
+ const gchar *text;
+ gint amplitude;
+ gint pitch;
+ gint speed;
+};
+
+static void do_test(struct espeaktime_settings *cfg)
+{
+ gchar astr[16], pstr[16], sstr[16];
+ gchar vstr[64];
+ gchar text[4096];
+ time_t t;
+ struct tm *tm;
+ int res;
+ pid_t pid;
+
+ pid = fork();
+ if (pid < 0) {
+ perror("fork");
+ return;
+ }
+ if (pid)
+ return;
+ time(&t);
+ tm = localtime(&t);
+
+ g_snprintf(astr, sizeof(astr), "%d", cfg->amplitude);
+ g_snprintf(pstr, sizeof(pstr), "%d", cfg->pitch);
+ g_snprintf(sstr, sizeof(sstr), "%d", cfg->speed);
+ g_snprintf(vstr, sizeof(vstr), "%s%s%s", cfg->voice,
+ (*cfg->effect) ? "+" : "", cfg->effect);
+ strftime(text, sizeof(text), cfg->text, tm);
+ g_print("execlp: -a '%s' -p '%s' -v '%s' '%s'\n",
+ astr, pstr, sstr, vstr, text);
+ res = execlp(ESPEAK_BIN, ESPEAK_BIN,
+ "-a", astr, "-p", pstr, "-s", sstr, "-v", vstr,
+ text, NULL);
+ g_print("execlp: %d\n", res);
+}
+
+
static void add_scale(GtkVBox *vbox, GtkSizeGroup *size_group, const char *caption, GtkAdjustment *adjustment)
{
GtkWidget *scale = gtk_hscale_new(adjustment);
gtk_box_pack_start(GTK_BOX(vbox), GTK_WIDGET(effect), FALSE, FALSE, 0);
HildonEntry *text = HILDON_ENTRY(hildon_entry_new(HILDON_SIZE_AUTO));
+ gtk_entry_set_text(GTK_ENTRY(text), "%H:%M");
gtk_box_pack_start(GTK_BOX(vbox),
hildon_caption_new(title_group, "Speech string", GTK_WIDGET(text), NULL, HILDON_CAPTION_MANDATORY),
FALSE, FALSE, 0);
gtk_container_add(GTK_CONTAINER(GTK_DIALOG(dialog)->vbox), panarea);
gtk_widget_show_all(dialog);
while (1) {
+ struct espeaktime_settings cfg;
int result = gtk_dialog_run(GTK_DIALOG(dialog));
+
switch (result) {
case 1:
g_print("Test button\n");
+ cfg.voice = voices[hildon_picker_button_get_active(voice)].id;
+ cfg.effect = effects[hildon_picker_button_get_active(effect)].id;
+ cfg.text = gtk_entry_get_text(GTK_ENTRY(text));
+ cfg.amplitude = gtk_adjustment_get_value(amplitude_adj);
+ cfg.pitch = gtk_adjustment_get_value(pitch_adj);
+ cfg.speed = gtk_adjustment_get_value(speed_adj);
+ do_test(&cfg);
continue;
case GTK_RESPONSE_OK:
g_print("Save\n");