These calls are used to pre-emptively exit when writing audio data. This is also handled within dispatch_audio. The difference is that this callback could allow espeak to cancel quicker. In practice it does not make much difference.master
| @@ -119,10 +119,8 @@ static int dispatch_audio(short *outbuf, int length, espeak_EVENT *event) | |||
| return -1; | |||
| } | |||
| #ifdef USE_ASYNC | |||
| if ((my_mode & ENOUTPUT_MODE_SYNCHRONOUS) == 0) { | |||
| wave_set_callback_is_output_enabled(fifo_is_command_enabled); | |||
| if ((my_mode & ENOUTPUT_MODE_SYNCHRONOUS) == 0) | |||
| event_init(); | |||
| } | |||
| #endif | |||
| } | |||
| } | |||
| @@ -63,7 +63,6 @@ int wave_port_close(void *theHandler); | |||
| int wave_port_is_busy(void *theHandler); | |||
| void wave_port_terminate(); | |||
| void wave_port_flush(void *theHandler); | |||
| void wave_port_set_callback_is_output_enabled(t_wave_callback *cb); | |||
| void *wave_port_test_get_write_buffer(); | |||
| // wave_pulse.cpp | |||
| @@ -74,7 +73,6 @@ int wave_pulse_close(void *theHandler); | |||
| int wave_pulse_is_busy(void *theHandler); | |||
| void wave_pulse_terminate(); | |||
| void wave_pulse_flush(void *theHandler); | |||
| void wave_pulse_set_callback_is_output_enabled(t_wave_callback *cb); | |||
| void *wave_pulse_test_get_write_buffer(); | |||
| // wrappers | |||
| @@ -127,14 +125,6 @@ void wave_flush(void *theHandler) | |||
| wave_port_flush(theHandler); | |||
| } | |||
| void wave_set_callback_is_output_enabled(t_wave_callback *cb) | |||
| { | |||
| if (pulse_running) | |||
| wave_pulse_set_callback_is_output_enabled(cb); | |||
| else | |||
| wave_port_set_callback_is_output_enabled(cb); | |||
| } | |||
| // rename functions to be wrapped | |||
| #define wave_open wave_port_open | |||
| #define wave_write wave_port_write | |||
| @@ -142,12 +132,9 @@ void wave_set_callback_is_output_enabled(t_wave_callback *cb) | |||
| #define wave_is_busy wave_port_is_busy | |||
| #define wave_terminate wave_port_terminate | |||
| #define wave_flush wave_port_flush | |||
| #define wave_set_callback_is_output_enabled wave_port_set_callback_is_output_enabled | |||
| #endif | |||
| static t_wave_callback *my_callback_is_output_enabled = NULL; | |||
| #define MAX_SAMPLE_RATE 22050 | |||
| #define FRAMES_PER_BUFFER 512 | |||
| #define BUFFER_LENGTH (MAX_SAMPLE_RATE*2*sizeof(uint16_t)) | |||
| @@ -494,11 +481,6 @@ static const PaDeviceInfo *select_device(const char *device) | |||
| return selectedDeviceInfo; | |||
| } | |||
| void wave_set_callback_is_output_enabled(t_wave_callback *cb) | |||
| { | |||
| my_callback_is_output_enabled = cb; | |||
| } | |||
| void *wave_open(int srate, const char *device) | |||
| { | |||
| PaError err; | |||
| @@ -576,9 +558,6 @@ size_t wave_write(void *theHandler, char *theMono16BitsWaveBuffer, size_t theSiz | |||
| char *aRead; | |||
| while (1) { | |||
| if (my_callback_is_output_enabled && (0 == my_callback_is_output_enabled())) | |||
| return 0; | |||
| aRead = myRead; | |||
| // write pointer is before read pointer? | |||
| @@ -780,9 +759,4 @@ void wave_flush(void *theHandler) | |||
| (void)theHandler; // unused | |||
| } | |||
| void wave_set_callback_is_output_enabled(t_wave_callback *cb) | |||
| { | |||
| (void)cb; // unused | |||
| } | |||
| #endif | |||
| @@ -34,11 +34,6 @@ extern void wave_flush(void *theHandler); | |||
| extern int wave_is_busy(void *theHandler); | |||
| extern void wave_terminate(); | |||
| // set the callback which informs if the output is still enabled. | |||
| // Helpful if a new sample is waiting for free space whereas sound must be stopped. | |||
| typedef int (t_wave_callback)(void); | |||
| extern void wave_set_callback_is_output_enabled(t_wave_callback *cb); | |||
| // general functions | |||
| extern void clock_gettime2(struct timespec *ts); | |||
| extern void add_time_in_ms(struct timespec *ts, int time_in_ms); | |||
| @@ -52,8 +52,6 @@ enum { | |||
| #ifdef USE_PULSEAUDIO | |||
| static t_wave_callback *my_callback_is_output_enabled = NULL; | |||
| #define SAMPLE_RATE 22050 | |||
| #define ESPEAK_FORMAT PA_SAMPLE_S16LE | |||
| #define ESPEAK_CHANNEL 1 | |||
| @@ -71,7 +69,6 @@ static t_wave_callback *my_callback_is_output_enabled = NULL; | |||
| #define wave_is_busy wave_pulse_is_busy | |||
| #define wave_terminate wave_pulse_terminate | |||
| #define wave_flush wave_pulse_flush | |||
| #define wave_set_callback_is_output_enabled wave_pulse_set_callback_is_output_enabled | |||
| // check whether we can connect to PulseAudio | |||
| #include <pulse/simple.h> | |||
| @@ -501,11 +498,6 @@ void wave_flush(void *theHandler) | |||
| (void)theHandler; // unused | |||
| } | |||
| void wave_set_callback_is_output_enabled(t_wave_callback *cb) | |||
| { | |||
| my_callback_is_output_enabled = cb; | |||
| } | |||
| void *wave_open(int srate, const char *device) | |||
| { | |||
| stream = NULL; | |||
| @@ -531,12 +523,6 @@ size_t wave_write(void *theHandler, char *theMono16BitsWaveBuffer, size_t theSiz | |||
| pthread_mutex_lock(&pulse_mutex); | |||
| while (1) { | |||
| if (my_callback_is_output_enabled | |||
| && (0 == my_callback_is_output_enabled())) { | |||
| theSize = 0; | |||
| goto terminate; | |||
| } | |||
| aTotalFreeMem = pulse_free(); | |||
| if (aTotalFreeMem >= bytes_to_write) | |||
| break; | |||
| @@ -40,8 +40,6 @@ | |||
| #ifdef USE_SADA | |||
| static t_wave_callback *my_callback_is_output_enabled = NULL; | |||
| static const char *sun_audio_device = "/dev/audio"; | |||
| static int sun_audio_fd = -1; | |||
| @@ -135,8 +133,6 @@ size_t wave_write(void *theHandler, | |||
| size_t theSize) | |||
| { | |||
| size_t num; | |||
| if (my_callback_is_output_enabled && (0 == my_callback_is_output_enabled())) | |||
| return 0; | |||
| #if defined(BYTE_ORDER) && BYTE_ORDER == BIG_ENDIAN | |||
| // BIG-ENDIAN, swap the order of bytes in each sound sample | |||
| @@ -281,23 +277,6 @@ void wave_flush(void *theHandler) | |||
| (void)theHandler; // unused | |||
| } | |||
| // wave_set_callback_is_output_enabled | |||
| // | |||
| // DESCRIPTION: | |||
| // | |||
| // Sets the callback to call from wave_write before it sends data to | |||
| // be played. It helps wave_write determine if the data should be | |||
| // thrown away or not. | |||
| // | |||
| // PARAMETERS: | |||
| // | |||
| // cb: the callback to call from wave_write | |||
| // | |||
| void wave_set_callback_is_output_enabled(t_wave_callback *cb) | |||
| { | |||
| my_callback_is_output_enabled = cb; | |||
| } | |||
| // wave_get_remaining_time | |||
| // | |||
| // DESCRIPTION: | |||