With the previous calculation, it was possible for the buffer to be a byte or two too small to hold all of the data.master
@@ -280,7 +280,9 @@ ESPEAK_NG_API espeak_ng_STATUS espeak_ng_InitializeOutput(espeak_ng_OUTPUT_MODE | |||
buffer_length = min_buffer_length; | |||
// allocate 2 bytes per sample | |||
outbuf_size = (buffer_length * samplerate)/500; | |||
// Always round up to the nearest sample and the nearest byte. | |||
int millisamples = buffer_length * samplerate; | |||
outbuf_size = (millisamples + 1000 - millisamples % 1000) / 500; | |||
out_start = (unsigned char *)realloc(outbuf, outbuf_size); | |||
if (out_start == NULL) | |||
return ENOMEM; |