Exemple #1
0
static int event_delete(espeak_EVENT* event)
{
ENTER("event_delete");

	event_display(event);

	if(event==NULL)
	{
		return 0;
	}

	switch(event->type)
	{
	case espeakEVENT_MSG_TERMINATED:
		event_notify(event);
		break;

	case espeakEVENT_MARK:
	case espeakEVENT_PLAY:
		if(event->id.name)
		{
			free((void*)(event->id.name));
		}
		break;

	default:
		break;
	}

	free(event);
	return 1;
}
Exemple #2
0
static espeak_EVENT* event_copy (espeak_EVENT* event)
{
	ENTER("event_copy");
	
	if (event==NULL)
	{
		return NULL;
	}
	
	espeak_EVENT* a_event=(espeak_EVENT*)malloc(sizeof(espeak_EVENT));
	if (a_event)
	{
		memcpy(a_event, event, sizeof(espeak_EVENT));
	
		switch(event->type)
		{
		case espeakEVENT_MARK:
		case espeakEVENT_PLAY:
			if (event->id.name)
			{
				a_event->id.name = strdup(event->id.name);
			}
		break;
		
		default:
			break;
		}
	}
	
	event_display(a_event);
	
	return a_event;
}
Exemple #3
0
espeak_ERROR event_declare (espeak_EVENT* event)
{
ENTER("event_declare");

	event_display(event);

	if (!event)
	{
		return EE_INTERNAL_ERROR;
	}

	int a_status = pthread_mutex_lock(&my_mutex); 
	espeak_ERROR a_error = EE_OK;

	if (!a_status)
	{
		SHOW_TIME("event_declare > locked\n");
		espeak_EVENT* a_event = event_copy(event);
		a_error = push(a_event);
		if (a_error != EE_OK)
		{
			event_delete(a_event);
		}
		SHOW_TIME("event_declare > unlocking\n");
		a_status = pthread_mutex_unlock(&my_mutex);
	}

  // TBD: remove the comment
  // reminder: code in comment.
  // This wait can lead to an underrun
  //
//   if (!a_status && !my_event_is_running && (a_error == EE_OK))
//   {
//       // quit when command is actually started 
//       // (for possible forthcoming 'end of command' checks)
	SHOW_TIME("event_declare > post my_sem_start_is_required\n");
	sem_post(&my_sem_start_is_required);
//       int val=1;
//       while (val)
// 	{
// 	  usleep(50000); // TBD: event?
// 	  sem_getvalue(&my_sem_start_is_required, &val);
// 	}
//     }

	if (a_status != 0)
	{
		a_error = EE_INTERNAL_ERROR;
	}

	return a_error;
}
Exemple #4
0
static void event_notify(espeak_EVENT* event)
{
ENTER("event_notify");
	static unsigned int a_old_uid = 0;

	espeak_EVENT events[2];
	memcpy(&events[0],event,sizeof(espeak_EVENT));     // the event parameter in the callback function should be an array of eventd
	memcpy(&events[1],event,sizeof(espeak_EVENT));
	events[1].type = espeakEVENT_LIST_TERMINATED;           // ... terminated by an event type=0

	if (event && my_callback)
	{
		event_display(event);

		switch(event->type)
		{
		case espeakEVENT_SENTENCE:
			my_callback(NULL, 0, events);
			a_old_uid = event->unique_identifier;
			break;

		case espeakEVENT_MSG_TERMINATED:
		case espeakEVENT_MARK:
		case espeakEVENT_WORD:
		case espeakEVENT_END:
		case espeakEVENT_PHONEME:
		{
// jonsd - I'm not sure what this is for. gilles says it's for when Gnome Speech reads a file of blank lines
			if (a_old_uid != event->unique_identifier)
			{
				espeak_EVENT_TYPE a_new_type = events[0].type;
				events[0].type = espeakEVENT_SENTENCE;
				my_callback(NULL, 0, events);
				events[0].type = a_new_type;
				usleep(50000);
			}
			my_callback(NULL, 0, events);
			a_old_uid = event->unique_identifier;
		}
		break;

		default:
			case espeakEVENT_LIST_TERMINATED:
			case espeakEVENT_PLAY:
		break;
		}
	}
}
Exemple #5
0
/*****************************************************************************
  Routine:  void event_specialkey(int key, int x, int y)

        returns        	: void
  Description          	: CallBack function for KeyHit
*****************************************************************************/
void event_specialkey(int key, int x, int y)
{
    switch(key) {

	case GLUT_KEY_PAGE_UP :
						framerate = framerate*TRICK_MODE_FAST_FWD;
						if (framerate > TRICK_MODE_MAXFRAMERATE)
							framerate = TRICK_MODE_MAXFRAMERATE;
						frameinterval = (int)((float)1000*(framenum)/framerate)-(int)((float)1000*(framenum-1)/framerate);
						nLastTime = -frameinterval;
						nTime = 0;
						break;

    case GLUT_KEY_PAGE_DOWN :
						framerate = framerate/TRICK_MODE_FAST_FWD;
						if (framerate< TRICK_MODE_MINFRAMERATE)
							framerate = TRICK_MODE_MINFRAMERATE;
						frameinterval = (int)((float)1000*(framenum)/framerate)-(int)((float)1000*(framenum-1)/framerate);
						nLastTime = -frameinterval;
						nTime = 0;
						break;


	case GLUT_KEY_RIGHT :
						framerate = framerate*TRICK_MODE_FAST_FWD;
						if (framerate > TRICK_MODE_MAXFRAMERATE)
							framerate = TRICK_MODE_MAXFRAMERATE;
						frameinterval = (int)((float)1000*(framenum)/framerate)-(int)((float)1000*(framenum-1)/framerate);
						nLastTime = -frameinterval;
						nTime = 0;
						break;

    case GLUT_KEY_LEFT :
						framerate = framerate/TRICK_MODE_FAST_FWD;
						if (framerate< TRICK_MODE_MINFRAMERATE)
							framerate = TRICK_MODE_MINFRAMERATE;
						frameinterval = (int)((float)1000*(framenum)/framerate)-(int)((float)1000*(framenum-1)/framerate);
						nLastTime = -frameinterval;
						nTime = 0;
						break;


    case GLUT_KEY_HOME :
						if(!feof(infile1))
		   					fseek(infile1, 0, SEEK_SET);
						else
						{
							fclose(infile1);
							fopen(infile1_name, "rb");
							fseek(infile1, 0, SEEK_SET);
						}
						if(bTwoFiles)
						{
							if(!feof(infile2))
								fseek(infile2, 0, SEEK_SET);
							else
							{
								fclose(infile2);
								fopen(infile2_name, "rb");
								fseek(infile2, 0, SEEK_SET);
							}
						}
						framenum = 0;
						running = 0;
						GenTexture();
						nLastTime = -frameinterval;
						nTime = 0;
						break;

    default: break;
    }
	event_display();
    glutPostRedisplay();
}