diff --git a/src/thread.c b/src/thread.c new file mode 100644 --- /dev/null +++ b/src/thread.c @@ -0,0 +1,60 @@ +/** + * $Id: thread.c 53 2008-01-10 00:19:41Z mbroeker $ + * $URL: http://localhost/svn/c/VirtualReader/trunk/src/thread.c $ + */ + +#include + +int p_thread_restart (pthread_t p_thread, void *func, ThreadData * data) +{ + // stops a thread, waits for it to exit and then restarts it using + // the current data structure + int ret; + + pthread_cancel (p_thread); + if (pthread_join (p_thread, NULL)) + printf ("RESTART: Cannot find a suitable thread :)\n"); + + ret = pthread_create (&p_thread, NULL, (void *)func, data); + + /* + * TODO: Error Handling + */ + return ret; +} + +void readtext (ThreadData * data) +{ + // read the current sentence using the audio player + // TODO - test for existence (completeness?) of file before read + char fname[80]; + + pthread_setcanceltype (PTHREAD_CANCEL_ASYNCHRONOUS, NULL); + pthread_cleanup_push (audioplayer_stop, NULL); + + for (; data->satz < data->items; data->satz++) { + sprintf (fname, "audio/%s-%i.wav", data->fname, data->satz); + if ((audioplayer (fname, TIMEOUT)) != -1) + audioplayer_stop (); + else + pthread_exit (NULL); + } + + pthread_exit (NULL); + pthread_cleanup_pop (1); +} + +void writewav (ThreadData * data) +{ + // write wav file for each sentence between data->satz adn + // data->items + char fname[80]; + int i; + + for (i = data->satz; i < data->items; i++) { + sprintf (fname, "audio/%s-%i.wav", data->fname, i); + interface_write_to_wav (fname, data->sentences[i], data->ttsh, data->ttsopt); + } + + pthread_exit (NULL); +}