| count_samples = 0; | count_samples = 0; | ||||
| if (my_mode == ENOUTPUT_MODE_SPEAK_AUDIO) | |||||
| if ((my_mode & ENOUTPUT_MODE_SPEAK_AUDIO) == ENOUTPUT_MODE_SPEAK_AUDIO) | |||||
| a_write_pos = wave_get_write_position(my_audio); | a_write_pos = wave_get_write_position(my_audio); | ||||
| if (translator == NULL) | if (translator == NULL) | ||||
| event_list[0].user_data = my_user_data; | event_list[0].user_data = my_user_data; | ||||
| if (SpeakNextClause(NULL, NULL, 1) == 0) { | if (SpeakNextClause(NULL, NULL, 1) == 0) { | ||||
| if (my_mode == ENOUTPUT_MODE_SPEAK_AUDIO) { | |||||
| #ifdef USE_ASYNC | |||||
| if ((my_mode & ENOUTPUT_MODE_SPEAK_AUDIO) == ENOUTPUT_MODE_SPEAK_AUDIO) { | |||||
| if (dispatch_audio(NULL, 0, NULL) < 0) | if (dispatch_audio(NULL, 0, NULL) < 0) | ||||
| return ENS_AUDIO_ERROR; | return ENS_AUDIO_ERROR; | ||||
| #endif | |||||
| } else if (synth_callback) | } else if (synth_callback) | ||||
| synth_callback(NULL, 0, event_list); // NULL buffer ptr indicates end of data | synth_callback(NULL, 0, event_list); // NULL buffer ptr indicates end of data | ||||
| break; | break; | ||||
| end_character_position = end_position; | end_character_position = end_position; | ||||
| espeak_ng_STATUS aStatus = Synthesize(unique_identifier, text, flags); | espeak_ng_STATUS aStatus = Synthesize(unique_identifier, text, flags); | ||||
| #ifdef USE_ASYNC | |||||
| wave_flush(my_audio); | |||||
| #endif | |||||
| if ((my_mode & ENOUTPUT_MODE_SPEAK_AUDIO) == ENOUTPUT_MODE_SPEAK_AUDIO) | |||||
| wave_flush(my_audio); | |||||
| return aStatus; | return aStatus; | ||||
| } | } | ||||
| #ifdef USE_ASYNC | #ifdef USE_ASYNC | ||||
| fifo_stop(); | fifo_stop(); | ||||
| event_clear_all(); | event_clear_all(); | ||||
| #endif | |||||
| if (my_mode == ENOUTPUT_MODE_SPEAK_AUDIO) | |||||
| if ((my_mode & ENOUTPUT_MODE_SPEAK_AUDIO) == ENOUTPUT_MODE_SPEAK_AUDIO) | |||||
| wave_close(my_audio); | wave_close(my_audio); | ||||
| #endif | |||||
| embedded_value[EMBED_T] = 0; // reset echo for pronunciation announcements | embedded_value[EMBED_T] = 0; // reset echo for pronunciation announcements | ||||
| for (int i = 0; i < N_SPEECH_PARAM; i++) | for (int i = 0; i < N_SPEECH_PARAM; i++) | ||||
| ESPEAK_API int espeak_IsPlaying(void) | ESPEAK_API int espeak_IsPlaying(void) | ||||
| { | { | ||||
| #ifdef USE_ASYNC | |||||
| if ((my_mode == ENOUTPUT_MODE_SPEAK_AUDIO) && wave_is_busy(my_audio)) | |||||
| if (((my_mode & ENOUTPUT_MODE_SPEAK_AUDIO) == ENOUTPUT_MODE_SPEAK_AUDIO) && wave_is_busy(my_audio)) | |||||
| return 1; | return 1; | ||||
| #ifdef USE_ASYNC | |||||
| return fifo_is_busy(); | return fifo_is_busy(); | ||||
| #else | #else | ||||
| return 0; | return 0; | ||||
| fifo_stop(); | fifo_stop(); | ||||
| fifo_terminate(); | fifo_terminate(); | ||||
| event_terminate(); | event_terminate(); | ||||
| #endif | |||||
| if (my_mode == ENOUTPUT_MODE_SPEAK_AUDIO) { | |||||
| if ((my_mode & ENOUTPUT_MODE_SPEAK_AUDIO) == ENOUTPUT_MODE_SPEAK_AUDIO) { | |||||
| wave_close(my_audio); | wave_close(my_audio); | ||||
| wave_terminate(); | wave_terminate(); | ||||
| out_samplerate = 0; | out_samplerate = 0; | ||||
| } | } | ||||
| #endif | |||||
| free(event_list); | free(event_list); | ||||
| event_list = NULL; | event_list = NULL; | ||||
| free(outbuf); | free(outbuf); |