This restores the behaviour removed in commit
ca831d236a.
When using eSpeak for audio and eSpeak in a server, using the async
speech requests, that code stopped the audio as soon as possible
from a cancel request. This allows servers like brltty to be more
responsive.
master
| @@ -254,6 +254,10 @@ static espeak_ng_STATUS close_stream() | |||
| status = a_status; | |||
| if (a_stop_is_required) { | |||
| // stop the audio early, to be more responsive when using eSpeak NG | |||
| // for audio. | |||
| close_audio(); | |||
| // acknowledge the stop request | |||
| if((a_status = pthread_mutex_lock(&my_mutex)) != ENS_OK) | |||
| return a_status; | |||
| @@ -81,6 +81,15 @@ int (*phoneme_callback)(const char *) = NULL; | |||
| char path_home[N_PATH_HOME]; // this is the espeak-ng-data directory | |||
| extern int saved_parameters[N_SPEECH_PARAM]; // Parameters saved on synthesis start | |||
| void close_audio(void) | |||
| { | |||
| #ifdef HAVE_PCAUDIOLIB_AUDIO_H | |||
| if ((my_mode & ENOUTPUT_MODE_SPEAK_AUDIO) == ENOUTPUT_MODE_SPEAK_AUDIO) { | |||
| audio_object_close(my_audio); | |||
| } | |||
| #endif | |||
| } | |||
| static int dispatch_audio(short *outbuf, int length, espeak_EVENT *event) | |||
| { | |||
| int a_wave_can_be_played = 1; | |||
| @@ -65,6 +65,8 @@ typedef struct { | |||
| } MNEM_TAB; | |||
| int LookupMnem(MNEM_TAB *table, const char *string); | |||
| void close_audio(void); | |||
| extern char path_home[N_PATH_HOME]; // this is the espeak-ng-data directory | |||
| extern ESPEAK_NG_API void strncpy0(char *to, const char *from, int size); | |||