mirror of
https://github.com/rhasspy/espeak-ng.git
synced 2026-10-31 05:35:35 +00:00
issue #172: flush audio on cancel requests.
This is a partial fix for an audio regression. The other part of the fix requires a change in pcaudiolib to reopen the audio device on flush requests for affected audio drivers/devices.
This commit is contained in:
@@ -254,6 +254,10 @@ static espeak_ng_STATUS close_stream()
|
||||
status = a_status;
|
||||
|
||||
if (a_stop_is_required) {
|
||||
// cancel the audio early, to be more responsive when using eSpeak NG
|
||||
// for audio.
|
||||
cancel_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 cancel_audio(void)
|
||||
{
|
||||
#ifdef HAVE_PCAUDIOLIB_AUDIO_H
|
||||
if ((my_mode & ENOUTPUT_MODE_SPEAK_AUDIO) == ENOUTPUT_MODE_SPEAK_AUDIO) {
|
||||
audio_object_flush(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 cancel_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);
|
||||
|
||||
Reference in New Issue
Block a user