Browse Source

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.
master
Reece H. Dunn 8 years ago
parent
commit
dee3799f82
3 changed files with 15 additions and 0 deletions
  1. 4
    0
      src/libespeak-ng/fifo.c
  2. 9
    0
      src/libespeak-ng/speech.c
  3. 2
    0
      src/libespeak-ng/speech.h

+ 4
- 0
src/libespeak-ng/fifo.c View File

status = a_status; status = a_status;


if (a_stop_is_required) { 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 // acknowledge the stop request
if((a_status = pthread_mutex_lock(&my_mutex)) != ENS_OK) if((a_status = pthread_mutex_lock(&my_mutex)) != ENS_OK)
return a_status; return a_status;

+ 9
- 0
src/libespeak-ng/speech.c View File

char path_home[N_PATH_HOME]; // this is the espeak-ng-data directory 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 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) static int dispatch_audio(short *outbuf, int length, espeak_EVENT *event)
{ {
int a_wave_can_be_played = 1; int a_wave_can_be_played = 1;

+ 2
- 0
src/libespeak-ng/speech.h View File

} MNEM_TAB; } MNEM_TAB;
int LookupMnem(MNEM_TAB *table, const char *string); 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 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); extern ESPEAK_NG_API void strncpy0(char *to, const char *from, int size);

Loading…
Cancel
Save