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

@@ -378,7 +378,7 @@ static espeak_ng_STATUS Synthesize(unsigned int unique_identifier, const void *t

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

if (translator == NULL)
@@ -420,11 +420,9 @@ static espeak_ng_STATUS Synthesize(unsigned int unique_identifier, const void *t
event_list[0].user_data = my_user_data;

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)
return ENS_AUDIO_ERROR;
#endif
} else if (synth_callback)
synth_callback(NULL, 0, event_list); // NULL buffer ptr indicates end of data
break;
@@ -496,9 +494,8 @@ espeak_ng_STATUS sync_espeak_Synth(unsigned int unique_identifier, const void *t
end_character_position = end_position;

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;
}
@@ -799,10 +796,10 @@ ESPEAK_NG_API espeak_ng_STATUS espeak_ng_Cancel(void)
#ifdef USE_ASYNC
fifo_stop();
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);
#endif
embedded_value[EMBED_T] = 0; // reset echo for pronunciation announcements

for (int i = 0; i < N_SPEECH_PARAM; i++)
@@ -813,10 +810,10 @@ ESPEAK_NG_API espeak_ng_STATUS espeak_ng_Cancel(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;

#ifdef USE_ASYNC
return fifo_is_busy();
#else
return 0;
@@ -843,13 +840,14 @@ ESPEAK_NG_API espeak_ng_STATUS espeak_ng_Terminate(void)
fifo_stop();
fifo_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_terminate();
out_samplerate = 0;
}
#endif
free(event_list);
event_list = NULL;
free(outbuf);

Loading…
Cancel
Save