@@ -2197,6 +2197,7 @@ static void WritePhonemeTables(CompileContext *ctx) | |||
static void EndPhonemeTable(CompileContext *ctx) | |||
{ | |||
int ix; | |||
char buf[5]; | |||
if (ctx->n_phoneme_tabs == 0) | |||
return; | |||
@@ -2205,7 +2206,7 @@ static void EndPhonemeTable(CompileContext *ctx) | |||
for (ix = 0; ix < ctx->n_phcodes; ix++) { | |||
if (ctx->phoneme_tab2[ix].type == phINVALID) { | |||
error(ctx, "Phoneme [%s] not declared, referenced at line %d", | |||
WordToString(ctx->phoneme_tab2[ix].mnemonic), (int)(ctx->phoneme_tab2[ix].program)); | |||
WordToString(buf, ctx->phoneme_tab2[ix].mnemonic), (int)(ctx->phoneme_tab2[ix].program)); | |||
ctx->error_count++; | |||
ctx->phoneme_tab2[ix].type = 0; // prevent the error message repeating | |||
} |
@@ -350,6 +350,7 @@ int MbrolaTranslate(PHONEME_LIST *plist, int n_phonemes, bool resume, FILE *f_mb | |||
const char *final_pitch; | |||
char *ptr; | |||
char mbr_buf[120]; | |||
char phbuf[5]; | |||
static int phix; | |||
static int embedded_ix; | |||
@@ -405,7 +406,7 @@ int MbrolaTranslate(PHONEME_LIST *plist, int n_phonemes, bool resume, FILE *f_mb | |||
DoPhonemeMarker(espeakEVENT_PHONEME, (p->sourceix & 0x7ff) + clause_start_char, 0, phoneme_name); | |||
} | |||
ptr += sprintf(ptr, "%s\t", WordToString(name)); | |||
ptr += sprintf(ptr, "%s\t", WordToString(phbuf, name)); | |||
if (name2 == '_') { | |||
// add a pause after this phoneme | |||
@@ -438,7 +439,7 @@ int MbrolaTranslate(PHONEME_LIST *plist, int n_phonemes, bool resume, FILE *f_mb | |||
ptr += sprintf(ptr, "%d\t%s", len1, pitch); | |||
pitch = WritePitch(p->env, p->pitch1, p->pitch2, -len_percent, 0); | |||
ptr += sprintf(ptr, "%s\t%d\t%s", WordToString(name2), len-len1, pitch); | |||
ptr += sprintf(ptr, "%s\t%d\t%s", WordToString(phbuf, name2), len-len1, pitch); | |||
} | |||
done = true; | |||
break; | |||
@@ -490,7 +491,7 @@ int MbrolaTranslate(PHONEME_LIST *plist, int n_phonemes, bool resume, FILE *f_mb | |||
if (!done) { | |||
if (name2 != 0) { | |||
len1 = (len * len_percent)/100; | |||
ptr += sprintf(ptr, "%d\n%s\t", len1, WordToString(name2)); | |||
ptr += sprintf(ptr, "%d\n%s\t", len1, WordToString(phbuf, name2)); | |||
len -= len1; | |||
} | |||
ptr += sprintf(ptr, "%d%s\n", len, final_pitch); |
@@ -391,7 +391,8 @@ int SelectPhonemeTableName(const char *name) | |||
static void InvalidInstn(PHONEME_TAB *ph, int instn) | |||
{ | |||
fprintf(stderr, "Invalid instruction %.4x for phoneme '%s'\n", instn, WordToString(ph->mnemonic)); | |||
char buf[5]; | |||
fprintf(stderr, "Invalid instruction %.4x for phoneme '%s'\n", instn, WordToString(buf, ph->mnemonic)); | |||
} | |||
static bool StressCondition(Translator *tr, PHONEME_LIST *plist, int condition, int control) |
@@ -72,13 +72,10 @@ static voice_t *new_voice = NULL; | |||
#define RMS_START 28 // 28 | |||
#define VOWEL_FRONT_LENGTH 50 | |||
const char *WordToString(unsigned int word) | |||
const char *WordToString(char buf[5], unsigned int word) | |||
{ | |||
// Convert a phoneme mnemonic word into a string | |||
int ix; | |||
static char buf[5]; | |||
MAKE_MEM_UNDEFINED(&buf, sizeof(buf)); | |||
for (ix = 0; ix < 4; ix++) | |||
buf[ix] = word >> (ix*8); |
@@ -463,7 +463,7 @@ void DoPhonemeMarker(int type, int char_posn, int length, char *name); | |||
int DoSample3(PHONEME_DATA *phdata, int length_mod, int amp); | |||
int DoSpect2(PHONEME_TAB *this_ph, int which, FMT_PARAMS *fmt_params, PHONEME_LIST *plist, int modulation); | |||
int PauseLength(int pause, int control); | |||
const char *WordToString(unsigned int word); | |||
const char *WordToString(char buf[5], unsigned int word); | |||
#ifdef __cplusplus | |||
} |