0
|
1 |
/**
|
|
2 |
* $Id: thread.c 53 2008-01-10 00:19:41Z mbroeker $
|
|
3 |
* $URL: http://localhost/svn/c/VirtualReader/trunk/src/thread.c $
|
|
4 |
*/
|
|
5 |
|
|
6 |
#include <thread.h>
|
|
7 |
|
|
8 |
int p_thread_restart (pthread_t p_thread, void *func, ThreadData * data)
|
|
9 |
{
|
|
10 |
// stops a thread, waits for it to exit and then restarts it using
|
|
11 |
// the current data structure
|
|
12 |
int ret;
|
|
13 |
|
|
14 |
pthread_cancel (p_thread);
|
|
15 |
if (pthread_join (p_thread, NULL))
|
|
16 |
printf ("RESTART: Cannot find a suitable thread :)\n");
|
|
17 |
|
|
18 |
ret = pthread_create (&p_thread, NULL, (void *)func, data);
|
|
19 |
|
|
20 |
/*
|
|
21 |
* TODO: Error Handling
|
|
22 |
*/
|
|
23 |
return ret;
|
|
24 |
}
|
|
25 |
|
|
26 |
void readtext (ThreadData * data)
|
|
27 |
{
|
|
28 |
// read the current sentence using the audio player
|
|
29 |
// TODO - test for existence (completeness?) of file before read
|
|
30 |
char fname[80];
|
|
31 |
|
|
32 |
pthread_setcanceltype (PTHREAD_CANCEL_ASYNCHRONOUS, NULL);
|
|
33 |
pthread_cleanup_push (audioplayer_stop, NULL);
|
|
34 |
|
|
35 |
for (; data->satz < data->items; data->satz++) {
|
|
36 |
sprintf (fname, "audio/%s-%i.wav", data->fname, data->satz);
|
|
37 |
if ((audioplayer (fname, TIMEOUT)) != -1)
|
|
38 |
audioplayer_stop ();
|
|
39 |
else
|
|
40 |
pthread_exit (NULL);
|
|
41 |
}
|
|
42 |
|
|
43 |
pthread_exit (NULL);
|
|
44 |
pthread_cleanup_pop (1);
|
|
45 |
}
|
|
46 |
|
|
47 |
void writewav (ThreadData * data)
|
|
48 |
{
|
|
49 |
// write wav file for each sentence between data->satz adn
|
|
50 |
// data->items
|
|
51 |
char fname[80];
|
|
52 |
int i;
|
|
53 |
|
|
54 |
for (i = data->satz; i < data->items; i++) {
|
|
55 |
sprintf (fname, "audio/%s-%i.wav", data->fname, i);
|
|
56 |
interface_write_to_wav (fname, data->sentences[i], data->ttsh, data->ttsopt);
|
|
57 |
}
|
|
58 |
|
|
59 |
pthread_exit (NULL);
|
|
60 |
}
|