Browse Source

Reduce buffer length to 50mS and don't override it when using eSpeak for audio.

master
Reece H. Dunn 8 years ago
parent
commit
d828156576
3 changed files with 7 additions and 5 deletions
  1. 2
    0
      CHANGELOG.md
  2. 1
    1
      src/include/espeak-ng/speak_lib.h
  3. 4
    4
      src/libespeak-ng/speech.c

+ 2
- 0
CHANGELOG.md View File

@@ -27,6 +27,8 @@ bug fixes:
* Fix determining the voice directory when installing the 32-bit Windows
binaries on a 64-bit Windows system.
* Fix a regression with the saved parameter logic.
* Reduce the default buffer length to 50mS to improve latency.
* Don't override buffer length when using espeak-ng for audio.

updated languages:


+ 1
- 1
src/include/espeak-ng/speak_lib.h View File

@@ -194,7 +194,7 @@ ESPEAK_API int espeak_Initialize(espeak_AUDIO_OUTPUT output, int buflength, cons
output: the audio data can either be played by eSpeak or passed back by the SynthCallback function.

buflength: The length in mS of sound buffers passed to the SynthCallback function.
Value=0 gives a default of 200mS.
Value=0 gives a default of 50mS.
This paramater is only used for AUDIO_OUTPUT_RETRIEVAL and AUDIO_OUTPUT_SYNCHRONOUS modes.

path: The directory which contains the espeak-ng-data directory, or NULL for the default location.

+ 4
- 4
src/libespeak-ng/speech.c View File

@@ -230,9 +230,9 @@ ESPEAK_NG_API espeak_ng_STATUS espeak_ng_InitializeOutput(espeak_ng_OUTPUT_MODE
my_audio = create_audio_device_object(device, "eSpeak", "Text-to-Speech");
#endif

// buflength is in mS, allocate 2 bytes per sample
if ((buffer_length == 0) || (output_mode & ENOUTPUT_MODE_SPEAK_AUDIO))
buffer_length = 200;
// buffer_length is in mS, allocate 2 bytes per sample
if (buffer_length == 0)
buffer_length = 50;

outbuf_size = (buffer_length * samplerate)/500;
out_start = (unsigned char *)realloc(outbuf, outbuf_size);
@@ -242,7 +242,7 @@ ESPEAK_NG_API espeak_ng_STATUS espeak_ng_InitializeOutput(espeak_ng_OUTPUT_MODE
outbuf = out_start;

// allocate space for event list. Allow 200 events per second.
// Add a constant to allow for very small buf_length
// Add a constant to allow for very small buffer_length
n_event_list = (buffer_length*200)/1000 + 20;
espeak_EVENT *new_event_list = (espeak_EVENT *)realloc(event_list, sizeof(espeak_EVENT) * n_event_list);
if (new_event_list == NULL)

Loading…
Cancel
Save