|
|
@@ -19,6 +19,7 @@ |
|
|
|
|
|
|
|
#include "config.h" |
|
|
|
|
|
|
|
#include <errno.h> |
|
|
|
#include <stdbool.h> |
|
|
|
#include <stdio.h> |
|
|
|
#include <stdlib.h> |
|
|
@@ -73,10 +74,11 @@ int vowel_transition1; |
|
|
|
|
|
|
|
int FormantTransition2(frameref_t *seq, int *n_frames, unsigned int data1, unsigned int data2, PHONEME_TAB *other_ph, int which); |
|
|
|
|
|
|
|
static char *ReadPhFile(void *ptr, const char *fname, int *size) |
|
|
|
static espeak_ng_STATUS ReadPhFile(void **ptr, const char *fname, int *size) |
|
|
|
{ |
|
|
|
if (!ptr) return EINVAL; |
|
|
|
|
|
|
|
FILE *f_in; |
|
|
|
char *p; |
|
|
|
unsigned int length; |
|
|
|
char buf[sizeof(path_home)+40]; |
|
|
|
|
|
|
@@ -85,26 +87,27 @@ static char *ReadPhFile(void *ptr, const char *fname, int *size) |
|
|
|
|
|
|
|
if ((f_in = fopen(buf, "rb")) == NULL) { |
|
|
|
fprintf(stderr, "Can't read data file: '%s'\n", buf); |
|
|
|
return NULL; |
|
|
|
return errno; |
|
|
|
} |
|
|
|
|
|
|
|
if (ptr != NULL) |
|
|
|
Free(ptr); |
|
|
|
if (*ptr != NULL) |
|
|
|
Free(*ptr); |
|
|
|
|
|
|
|
if ((p = Alloc(length)) == NULL) { |
|
|
|
if ((*ptr = Alloc(length)) == NULL) { |
|
|
|
fclose(f_in); |
|
|
|
return NULL; |
|
|
|
return ENOMEM; |
|
|
|
} |
|
|
|
if (fread(p, 1, length, f_in) != length) { |
|
|
|
if (fread(*ptr, 1, length, f_in) != length) { |
|
|
|
int error = errno; |
|
|
|
fclose(f_in); |
|
|
|
Free(p); |
|
|
|
return NULL; |
|
|
|
Free(*ptr); |
|
|
|
return error; |
|
|
|
} |
|
|
|
|
|
|
|
fclose(f_in); |
|
|
|
if (size != NULL) |
|
|
|
*size = length; |
|
|
|
return p; |
|
|
|
return ENS_OK; |
|
|
|
} |
|
|
|
|
|
|
|
espeak_ng_STATUS LoadPhData(int *srate) |
|
|
@@ -117,14 +120,15 @@ espeak_ng_STATUS LoadPhData(int *srate) |
|
|
|
unsigned char *p; |
|
|
|
int *pw; |
|
|
|
|
|
|
|
if ((phoneme_tab_data = (unsigned char *)ReadPhFile((void *)(phoneme_tab_data), "phontab", NULL)) == NULL) |
|
|
|
return ENE_READ_ERROR; |
|
|
|
if ((phoneme_index = (USHORT *)ReadPhFile((void *)(phoneme_index), "phonindex", NULL)) == NULL) |
|
|
|
return ENE_READ_ERROR; |
|
|
|
if ((phondata_ptr = ReadPhFile((void *)(phondata_ptr), "phondata", NULL)) == NULL) |
|
|
|
return ENE_READ_ERROR; |
|
|
|
if ((tunes = (TUNE *)ReadPhFile((void *)(tunes), "intonations", &length)) == NULL) |
|
|
|
return ENE_READ_ERROR; |
|
|
|
espeak_ng_STATUS status; |
|
|
|
if ((status = ReadPhFile((void **)&phoneme_tab_data, "phontab", NULL)) != ENS_OK) |
|
|
|
return status; |
|
|
|
if ((status = ReadPhFile((void **)&phoneme_index, "phonindex", NULL)) != ENS_OK) |
|
|
|
return status; |
|
|
|
if ((status = ReadPhFile((void **)&phondata_ptr, "phondata", NULL)) != ENS_OK) |
|
|
|
return status; |
|
|
|
if ((status = ReadPhFile((void **)&tunes, "intonations", &length)) != ENS_OK) |
|
|
|
return status; |
|
|
|
wavefile_data = (unsigned char *)phondata_ptr; |
|
|
|
n_tunes = length / sizeof(TUNE); |
|
|
|
|