--- a/src/libespeak-ng/fifo.c
+++ b/src/libespeak-ng/fifo.c
@@ -303,6 +303,10 @@ static void *say_thread(void *p)
 		}
 
 		if (my_stop_is_required) {
+			// restart the audio early, to be more responsive when using eSpeak NG
+			// for audio.
+			close_audio();
+			open_audio();
 			// no mutex required since the stop command is synchronous
 			// and waiting for my_sem_stop_is_acknowledged
 			init(1);
--- a/src/libespeak-ng/speech.c
+++ b/src/libespeak-ng/speech.c
@@ -82,6 +82,27 @@ char path_home[N_PATH_HOME]; // this is
 static int didsave_parameters;
 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
+}
+
+void open_audio(void)
+{
+#ifdef HAVE_PCAUDIOLIB_AUDIO_H
+	int error = audio_object_open(my_audio, AUDIO_OBJECT_FORMAT_S16LE, voice_samplerate, 1);
+	if (error != 0) {
+		fprintf(stderr, "error: %s\n", audio_object_strerror(my_audio, error));
+		err = ENS_AUDIO_ERROR;
+		return -1;
+	}
+#endif
+}
+
 static int dispatch_audio(short *outbuf, int length, espeak_EVENT *event)
 {
 	int a_wave_can_be_played = 1;
@@ -505,6 +526,7 @@ espeak_ng_STATUS sync_espeak_Synth(unsig
 	espeak_ng_STATUS aStatus = Synthesize(unique_identifier, text, flags);
 #ifdef HAVE_PCAUDIOLIB_AUDIO_H
 	if ((my_mode & ENOUTPUT_MODE_SPEAK_AUDIO) == ENOUTPUT_MODE_SPEAK_AUDIO) {
+	    /* FIXME: This drain poses cancelling problems for end of speechs */
 		int error = (aStatus == ENS_SPEECH_STOPPED)
 		          ? audio_object_flush(my_audio)
 		          : audio_object_drain(my_audio);
--- a/src/libespeak-ng/speech.h
+++ b/src/libespeak-ng/speech.h
@@ -65,6 +65,9 @@ typedef struct {
 } MNEM_TAB;
 int LookupMnem(MNEM_TAB *table, const char *string);
 
+void close_audio(void);
+void open_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);
