mirror of
https://github.com/rhasspy/espeak-ng.git
synced 2026-11-05 14:47:26 +00:00
Make it possible to restart speech even when audio open failed once
When notably the audio card is busy, we should report the issue to the application, but still permit the application to retry submitting text to synth, and eventually succeed to open it. This change simply fixes the update of the out_samplerate variable to track whether audio is open, and if not when text is submitted by the application, try again to open it.
This commit is contained in:
@@ -123,12 +123,12 @@ static int dispatch_audio(short *outbuf, int length, espeak_EVENT *event)
|
||||
if (out_samplerate != 0) {
|
||||
// sound was previously open with a different sample rate
|
||||
audio_object_close(my_audio);
|
||||
out_samplerate = 0;
|
||||
#ifdef HAVE_SLEEP
|
||||
sleep(1);
|
||||
#endif
|
||||
}
|
||||
#endif
|
||||
out_samplerate = voice_samplerate;
|
||||
#ifdef HAVE_PCAUDIOLIB_AUDIO_H
|
||||
int error = audio_object_open(my_audio, AUDIO_OBJECT_FORMAT_S16LE, voice_samplerate, 1);
|
||||
if (error != 0) {
|
||||
@@ -137,6 +137,7 @@ static int dispatch_audio(short *outbuf, int length, espeak_EVENT *event)
|
||||
return -1;
|
||||
}
|
||||
#endif
|
||||
out_samplerate = voice_samplerate;
|
||||
#ifdef USE_ASYNC
|
||||
if ((my_mode & ENOUTPUT_MODE_SYNCHRONOUS) == 0)
|
||||
event_init();
|
||||
@@ -144,6 +145,18 @@ static int dispatch_audio(short *outbuf, int length, espeak_EVENT *event)
|
||||
}
|
||||
}
|
||||
|
||||
#ifdef HAVE_PCAUDIOLIB_AUDIO_H
|
||||
if (out_samplerate == 0) {
|
||||
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;
|
||||
}
|
||||
out_samplerate = voice_samplerate;
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifdef HAVE_PCAUDIOLIB_AUDIO_H
|
||||
if (outbuf && length && a_wave_can_be_played) {
|
||||
int error = audio_object_write(my_audio, (char *)outbuf, 2*length);
|
||||
|
||||
Reference in New Issue
Block a user