Browse Source

Fix the USE_ASYNC and wave_* API usage logic.

master
Reece H. Dunn 9 years ago
parent
commit
f138558fe7
1 changed files with 11 additions and 13 deletions
  1. 11
    13
      src/libespeak-ng/speech.c

+ 11
- 13
src/libespeak-ng/speech.c View File



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);

Loading…
Cancel
Save