diff --git a/src/libespeak-ng/speech.c b/src/libespeak-ng/speech.c index 32511845..1d127046 100644 --- a/src/libespeak-ng/speech.c +++ b/src/libespeak-ng/speech.c @@ -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);