| @@ -25,6 +25,7 @@ | |||
| #include <stdio.h> | |||
| #include <stdlib.h> | |||
| #include <string.h> | |||
| #include <endian.h> | |||
| #include <espeak-ng/espeak_ng.h> | |||
| #include <espeak-ng/speak_lib.h> | |||
| @@ -151,6 +152,9 @@ static espeak_ng_STATUS LoadFrame(SpectFrame *frame, FILE *stream, int file_form | |||
| fread(&frame->nx, sizeof(short), 1, stream); | |||
| fread(&frame->markers, sizeof(short), 1, stream); | |||
| fread(&frame->amp_adjust, sizeof(short), 1, stream); | |||
| frame->nx = le16toh(frame->nx); | |||
| frame->markers = le16toh(frame->markers); | |||
| frame->amp_adjust = le16toh(frame->amp_adjust); | |||
| if (file_format_type == 2) { | |||
| fread(&ix, sizeof(short), 1, stream); // spare | |||
| @@ -164,6 +168,12 @@ static espeak_ng_STATUS LoadFrame(SpectFrame *frame, FILE *stream, int file_form | |||
| fread(&frame->peaks[ix].pkheight, sizeof(short), 1, stream); | |||
| fread(&frame->peaks[ix].pkwidth, sizeof(short), 1, stream); | |||
| fread(&frame->peaks[ix].pkright, sizeof(short), 1, stream); | |||
| frame->formants[ix].freq = le16toh(frame->formants[ix].freq); | |||
| frame->formants[ix].bandw = le16toh(frame->formants[ix].bandw); | |||
| frame->peaks[ix].pkfreq = le16toh(frame->peaks[ix].pkfreq); | |||
| frame->peaks[ix].pkheight = le16toh(frame->peaks[ix].pkheight); | |||
| frame->peaks[ix].pkwidth = le16toh(frame->peaks[ix].pkwidth); | |||
| frame->peaks[ix].pkright = le16toh(frame->peaks[ix].pkright); | |||
| if (frame->peaks[ix].pkheight > 0) | |||
| frame->keyframe = 1; | |||
| @@ -171,12 +181,18 @@ static espeak_ng_STATUS LoadFrame(SpectFrame *frame, FILE *stream, int file_form | |||
| fread(&frame->peaks[ix].klt_bw, sizeof(short), 1, stream); | |||
| fread(&frame->peaks[ix].klt_ap, sizeof(short), 1, stream); | |||
| fread(&frame->peaks[ix].klt_bp, sizeof(short), 1, stream); | |||
| frame->peaks[ix].klt_bw = le16toh(frame->peaks[ix].klt_bw); | |||
| frame->peaks[ix].klt_ap = le16toh(frame->peaks[ix].klt_ap); | |||
| frame->peaks[ix].klt_bp = le16toh(frame->peaks[ix].klt_bp); | |||
| } | |||
| } | |||
| if (file_format_type > 0) { | |||
| for (ix = 0; ix < N_KLATTP2; ix++) | |||
| { | |||
| fread(frame->klatt_param + ix, sizeof(short), 1, stream); | |||
| frame->klatt_param[ix] = le16toh(frame->klatt_param[ix]); | |||
| } | |||
| } | |||
| spect_data = malloc(sizeof(USHORT) * frame->nx); | |||
| @@ -187,6 +203,7 @@ static espeak_ng_STATUS LoadFrame(SpectFrame *frame, FILE *stream, int file_form | |||
| frame->max_y = 0; | |||
| for (ix = 0; ix < frame->nx; ix++) { | |||
| fread(&x, sizeof(short), 1, stream); | |||
| x = le16toh(x); | |||
| spect_data[ix] = x; | |||
| if (x > frame->max_y) frame->max_y = x; | |||
| } | |||
| @@ -288,7 +305,9 @@ espeak_ng_STATUS LoadSpectSeq(SpectSeq *spect, const char *filename) | |||
| } | |||
| fread(&id1, sizeof(uint32_t), 1, stream); | |||
| id1 = le32toh(id1); | |||
| fread(&id2, sizeof(uint32_t), 1, stream); | |||
| id2 = le32toh(id2); | |||
| if ((id1 == FILEID1_SPECTSEQ) && (id2 == FILEID2_SPECTSEQ)) | |||
| spect->file_format = 0; // eSpeak formants | |||
| @@ -303,6 +322,7 @@ espeak_ng_STATUS LoadSpectSeq(SpectSeq *spect, const char *filename) | |||
| } | |||
| fread(&name_len, sizeof(uint32_t), 1, stream); | |||
| name_len = le32toh(name_len); | |||
| if (name_len > 0) { | |||
| if ((spect->name = (char *)malloc(name_len)) == NULL) { | |||
| fclose(stream); | |||
| @@ -316,6 +336,10 @@ espeak_ng_STATUS LoadSpectSeq(SpectSeq *spect, const char *filename) | |||
| fread(&spect->amplitude, sizeof(short), 1, stream); | |||
| fread(&spect->max_y, sizeof(short), 1, stream); | |||
| fread(&temp, sizeof(short), 1, stream); // unused | |||
| n = le16toh(n); | |||
| spect->amplitude = le16toh(spect->amplitude); | |||
| spect->max_y = le16toh(spect->max_y); | |||
| temp = le16toh(temp); | |||
| if (n == 0) { | |||
| fclose(stream); | |||