Browse Source

Fix running espeak-ng on big-endian architectures.

Patch by Samuel Thibault.
master
Reece H. Dunn 8 years ago
parent
commit
8320581675
1 changed files with 24 additions and 0 deletions
  1. 24
    0
      src/libespeak-ng/spect.c

+ 24
- 0
src/libespeak-ng/spect.c View File

@@ -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);

Loading…
Cancel
Save