X-Git-Url: https://git.gag.com/?p=fw%2Faltos;a=blobdiff_plain;f=aoview%2Faoview_flite.c;h=bca19043083f0cc6078d1699313623617d851c7e;hp=daa3ed36c69ba0bfacdc707fc4e03679d6a7b2aa;hb=e506ed4b6efb86eab50204658fcd433b987e3831;hpb=5b988e0146075d57434f8484e1ec9fcf3e183df2 diff --git a/aoview/aoview_flite.c b/aoview/aoview_flite.c index daa3ed36..bca19043 100644 --- a/aoview/aoview_flite.c +++ b/aoview/aoview_flite.c @@ -17,23 +17,59 @@ #include #include +#include "aoview.h" cst_voice *register_cmu_us_kal(); +static cst_voice *voice; -int -main(int argc, char **argv) +static FILE *pipe_write; +static GThread *aoview_flite_thread; + +gpointer +aoview_flite_task(gpointer data) { + FILE *input = data; char line[1024]; - cst_voice *v; - flite_init(); - v = register_cmu_us_kal(); - if (!v) { - perror("register voice"); - exit(1); + while (fgets(line, sizeof (line) - 1, input) != NULL) + flite_text_to_speech(line, voice, "play"); + return NULL; +} + +void +aoview_flite_stop(void) +{ + int status; + if (pipe_write) { + fclose(pipe_write); + pipe_write = NULL; + } + if (aoview_flite_thread) { + g_thread_join(aoview_flite_thread); + aoview_flite_thread = NULL; } - while (fgets(line, sizeof (line) - 1, stdin) != NULL) { - flite_text_to_speech(line, v, "play"); +} + +FILE * +aoview_flite_start(void) +{ + static once; + int p[2]; + GError *error; + FILE *pipe_read; + + if (!once) { + flite_init(); + voice = register_cmu_us_kal(); + if (!voice) { + perror("register voice"); + exit(1); + } } - exit (0); + aoview_flite_stop(); + pipe(p); + pipe_read = fdopen(p[0], "r"); + pipe_write = fdopen(p[1], "w"); + g_thread_create(aoview_flite_task, pipe_read, TRUE, &error); + return pipe_write; }