Also use size_t instead of int in some places where it make sensemaster
@@ -113,7 +113,6 @@ char wavefile[200]; | |||
void DisplayVoices(FILE *f_out, char *language) | |||
{ | |||
int ix; | |||
const char *p; | |||
int len; | |||
int count; | |||
@@ -140,7 +139,7 @@ void DisplayVoices(FILE *f_out, char *language) | |||
fprintf(f_out, "Pty Language Age/Gender VoiceName File Other Languages\n"); | |||
for (ix = 0; (v = voices[ix]) != NULL; ix++) { | |||
for (int ix = 0; (v = voices[ix]) != NULL; ix++) { | |||
count = 0; | |||
p = v->languages; | |||
while (*p != 0) { | |||
@@ -174,9 +173,7 @@ void DisplayVoices(FILE *f_out, char *language) | |||
static void Write4Bytes(FILE *f, int value) | |||
{ | |||
// Write 4 bytes to a file, least significant first | |||
int ix; | |||
for (ix = 0; ix < 4; ix++) { | |||
for (int ix = 0; ix < 4; ix++) { | |||
fputc(value & 0xff, f); | |||
value = value >> 8; | |||
} | |||
@@ -217,13 +214,11 @@ int OpenWavFile(char *path, int rate) | |||
static void CloseWavFile() | |||
{ | |||
unsigned int pos; | |||
if ((f_wavfile == NULL) || (f_wavfile == stdout)) | |||
return; | |||
fflush(f_wavfile); | |||
pos = ftell(f_wavfile); | |||
unsigned int pos = ftell(f_wavfile); | |||
fseek(f_wavfile, 4, SEEK_SET); | |||
Write4Bytes(f_wavfile, pos - 8); | |||
@@ -237,8 +232,6 @@ static void CloseWavFile() | |||
static int SynthCallback(short *wav, int numsamples, espeak_EVENT *events) | |||
{ | |||
char fname[210]; | |||
if (quiet) return 0; // -q quiet mode | |||
if (wav == NULL) { | |||
@@ -262,6 +255,7 @@ static int SynthCallback(short *wav, int numsamples, espeak_EVENT *events) | |||
} | |||
if (f_wavfile == NULL) { | |||
char fname[210]; | |||
if (samples_split > 0) { | |||
sprintf(fname, "%s_%.2d%s", wavefile, wavefile_count+1, filetype); | |||
if (OpenWavFile(fname, samplerate) != 0) | |||
@@ -335,7 +329,6 @@ int main(int argc, char **argv) | |||
int option_index = 0; | |||
int c; | |||
int ix; | |||
char *optarg2; | |||
int value; | |||
int flag_stdin = 0; | |||
@@ -369,7 +362,6 @@ int main(int argc, char **argv) | |||
optind = 1; | |||
opt_string = ""; | |||
while (optind < argc) { | |||
int len; | |||
char *p; | |||
if ((c = *opt_string) == 0) { | |||
@@ -389,10 +381,10 @@ int main(int argc, char **argv) | |||
break; // -- means don't interpret further - as commands | |||
opt_string = ""; | |||
for (ix = 0;; ix++) { | |||
for (int ix = 0;; ix++) { | |||
if (long_options[ix].name == 0) | |||
break; | |||
len = strlen(long_options[ix].name); | |||
size_t len = strlen(long_options[ix].name); | |||
if (memcmp(long_options[ix].name, p, len) == 0) { | |||
c = long_options[ix].val; | |||
optarg2 = NULL; | |||
@@ -494,7 +486,7 @@ int main(int argc, char **argv) | |||
case 0x103: // --punct | |||
option_punctuation = 1; | |||
if (optarg2 != NULL) { | |||
ix = 0; | |||
int ix = 0; | |||
while ((ix < N_PUNCTLIST) && ((option_punctlist[ix] = optarg2[ix]) != 0)) ix++; | |||
option_punctlist[N_PUNCTLIST-1] = 0; | |||
option_punctuation = 2; | |||
@@ -673,7 +665,7 @@ int main(int argc, char **argv) | |||
} | |||
} else { | |||
// bulk input on stdin | |||
ix = 0; | |||
int ix = 0; | |||
while (!feof(stdin)) { | |||
p_text[ix++] = fgetc(stdin); | |||
if (ix >= (max-1)) { |
@@ -386,7 +386,6 @@ static void ReadPhondataManifest() | |||
// Read the phondata-manifest file | |||
FILE *f; | |||
int n_lines = 0; | |||
int ix; | |||
char *p; | |||
unsigned int value; | |||
char buf[sizeof(path_home)+40]; | |||
@@ -402,7 +401,7 @@ static void ReadPhondataManifest() | |||
rewind(f); | |||
if (manifest != NULL) { | |||
for (ix = 0; ix < n_manifest; ix++) | |||
for (int ix = 0; ix < n_manifest; ix++) | |||
free(manifest[ix].name); | |||
} | |||
@@ -443,13 +442,7 @@ static const char *KeyToMnem(keywtab_t *ktab, int type, int value) | |||
static void DecompilePhoneme(FILE *f_out, PHONEME_TAB *ph, int compile_phoneme) | |||
{ | |||
USHORT *pc; | |||
int instn; | |||
int instn_category; | |||
int address, address2; | |||
int data1; | |||
int type2; | |||
int ix; | |||
int any; | |||
const char *name; | |||
char buf[120]; | |||
@@ -493,10 +486,10 @@ static void DecompilePhoneme(FILE *f_out, PHONEME_TAB *ph, int compile_phoneme) | |||
pc = prog_buf; | |||
while (pc < prog_out) { | |||
instn = *pc++; | |||
instn_category = (instn >> 12) & 0xf; | |||
data1 = instn & 0xff; | |||
type2 = (instn >> 8) & 0xf; | |||
int instn = *pc++; | |||
int instn_category = (instn >> 12) & 0xf; | |||
int data1 = instn & 0xff; | |||
int type2 = (instn >> 8) & 0xf; | |||
fprintf(f_out, " %.3x: %.4x %s", (unsigned int)(pc-prog_buf), instn, instn_category_string[instn_category]); | |||
switch (instn_category) | |||
@@ -510,6 +503,7 @@ static void DecompilePhoneme(FILE *f_out, PHONEME_TAB *ph, int compile_phoneme) | |||
data1 = 0; | |||
fprintf(f_out, "%s", instn0_string[data1]); | |||
} else if (type2 == i_IPA_NAME) { | |||
int ix; | |||
for (ix = 0; ix < data1; ix += 2) { | |||
instn = *pc++; | |||
buf[ix] = instn >> 8; | |||
@@ -571,8 +565,8 @@ static void DecompilePhoneme(FILE *f_out, PHONEME_TAB *ph, int compile_phoneme) | |||
} else if (type2 == 8) { | |||
// list of numbers | |||
fprintf(f_out, " StressLevel("); | |||
any = 0; | |||
for (ix = 0; ix < 8; ix++) { | |||
int any = 0; | |||
for (int ix = 0; ix < 8; ix++) { | |||
if (data1 & (1 << ix)) { | |||
if (any) | |||
fputc(',', f_out); | |||
@@ -709,12 +703,10 @@ char item_string[N_ITEM_STRING]; | |||
static int ref_sorter(char **a, char **b) | |||
{ | |||
int ix; | |||
REF_HASH_TAB *p1 = (REF_HASH_TAB *)(*a); | |||
REF_HASH_TAB *p2 = (REF_HASH_TAB *)(*b); | |||
ix = strcoll(p1->string, p2->string); | |||
int ix = strcoll(p1->string, p2->string); | |||
if (ix != 0) | |||
return ix; | |||
@@ -728,14 +720,9 @@ static int ref_sorter(char **a, char **b) | |||
static void CompileReport(void) | |||
{ | |||
int ix; | |||
int hash; | |||
int n; | |||
REF_HASH_TAB *p; | |||
REF_HASH_TAB **list; | |||
const char *data_path; | |||
int prev_table; | |||
int procedure_num; | |||
int prev_mnemonic; | |||
if (f_report == NULL) | |||
return; | |||
@@ -753,19 +740,19 @@ static void CompileReport(void) | |||
fprintf(f_report, "Data file Used by\n"); | |||
ix = 0; | |||
for (hash = 0; (hash < 256) && (ix < count_references); hash++) { | |||
for (int hash = 0; (hash < 256) && (ix < count_references); hash++) { | |||
p = ref_hash_tab[hash]; | |||
while (p != NULL) { | |||
list[ix++] = p; | |||
p = (REF_HASH_TAB *)(p->link); | |||
} | |||
} | |||
n = ix; | |||
int n = ix; | |||
qsort((void *)list, n, sizeof(REF_HASH_TAB *), (int (*)(const void *, const void *))ref_sorter); | |||
data_path = ""; | |||
prev_mnemonic = 0; | |||
prev_table = 0; | |||
int prev_mnemonic = 0; | |||
int prev_table = 0; | |||
for (ix = 0; ix < n; ix++) { | |||
int j = 0; | |||
@@ -784,7 +771,7 @@ static void CompileReport(void) | |||
prev_mnemonic = list[ix]->ph_mnemonic; | |||
if ((prev_mnemonic >> 24) == 'P') { | |||
// a procedure, not a phoneme | |||
procedure_num = atoi(WordToString(prev_mnemonic)); | |||
int procedure_num = atoi(WordToString(prev_mnemonic)); | |||
fprintf(f_report, " %s %s", phoneme_tab_list2[prev_table = list[ix]->ph_table].name, proc_names[procedure_num]); | |||
} else | |||
fprintf(f_report, " [%s] %s", WordToString(prev_mnemonic), phoneme_tab_list2[prev_table = list[ix]->ph_table].name); | |||
@@ -831,15 +818,14 @@ static FILE *fopen_log(FILE *f_log, const char *fname, const char *access) | |||
static unsigned int StringToWord(const char *string) | |||
{ | |||
// Pack 4 characters into a word | |||
int ix; | |||
unsigned char c; | |||
unsigned int word; | |||
if (string == NULL) | |||
return 0; | |||
word = 0; | |||
for (ix = 0; ix < 4; ix++) { | |||
unsigned int word = 0; | |||
for (int ix = 0; ix < 4; ix++) { | |||
if (string[ix] == 0) break; | |||
c = string[ix]; | |||
word |= (c << (ix*8)); | |||
@@ -909,21 +895,16 @@ static int LookupPhoneme(const char *string, int control) | |||
// control = 1 declare phoneme if not found | |||
// control = 2 start looking after control & stress phonemes | |||
int ix; | |||
int start; | |||
int use; | |||
unsigned int word; | |||
if (strcmp(string, "NULL") == 0) | |||
return 1; | |||
ix = strlen(string); | |||
int ix = strlen(string); | |||
if ((ix == 0) || (ix > 4)) | |||
error("Bad phoneme name '%s'", string); | |||
word = StringToWord(string); | |||
unsigned int word = StringToWord(string); | |||
// don't use phoneme number 0, reserved for string terminator | |||
start = 1; | |||
int start = 1; | |||
if (control == 2) { | |||
// don't look for control and stress phonemes (allows these characters to be | |||
@@ -931,7 +912,7 @@ static int LookupPhoneme(const char *string, int control) | |||
start = 8; | |||
} | |||
use = 0; | |||
int use = 0; | |||
for (ix = start; ix < n_phcodes; ix++) { | |||
if (phoneme_tab2[ix].mnemonic == word) | |||
return ix; | |||
@@ -957,8 +938,7 @@ static int LookupPhoneme(const char *string, int control) | |||
static unsigned int get_char() | |||
{ | |||
unsigned int c; | |||
c = fgetc(f_in); | |||
unsigned int c = fgetc(f_in); | |||
if (c == '\n') | |||
linenum++; | |||
return c; | |||
@@ -985,8 +965,6 @@ static int NextItem(int type) | |||
int acc; | |||
unsigned char c = 0; | |||
unsigned char c2; | |||
int ix; | |||
int sign; | |||
char *p; | |||
keywtab_t *pk; | |||
@@ -1017,7 +995,7 @@ static int NextItem(int type) | |||
return -1; | |||
} | |||
ix = 0; | |||
int ix = 0; | |||
while (!feof(f_in) && !isspace(c) && (c != '(') && (c != ')') && (c != ',')) { | |||
if (c == '\\') | |||
c = get_char(); | |||
@@ -1048,7 +1026,7 @@ static int NextItem(int type) | |||
if ((type == tNUMBER) || (type == tSIGNEDNUMBER)) { | |||
acc = 0; | |||
sign = 1; | |||
int sign = 1; | |||
p = item_string; | |||
if ((*p == '-') && (type == tSIGNEDNUMBER)) { | |||
@@ -1089,10 +1067,9 @@ static int NextItem(int type) | |||
static int NextItemMax(int max) | |||
{ | |||
// Get a number, but restrict value to max | |||
int value; | |||
char msg[80]; | |||
value = NextItem(tNUMBER); | |||
int value = NextItem(tNUMBER); | |||
if (value > max) { | |||
sprintf(msg, "Value %d is greater than maximum %d", value, max); | |||
error(msg, NULL); | |||
@@ -1107,14 +1084,12 @@ static int NextItemBrackets(int type, int control) | |||
// control: bit 0 0= need ( | |||
// bit 1 1= allow comma | |||
int value; | |||
if ((control & 1) == 0) { | |||
if (!NextItem(tOPENBRACKET)) | |||
error("Expected '('", NULL); | |||
} | |||
value = NextItem(type); | |||
int value = NextItem(type); | |||
if ((control & 2) && (item_terminator == ',')) | |||
return value; | |||
@@ -1147,7 +1122,7 @@ static int Range(int value, int divide, int min, int max) | |||
int CompileVowelTransition(int which) | |||
{ | |||
// Compile a vowel transition | |||
int key; | |||
int len = 0; | |||
int rms = 0; | |||
int f1 = 0; | |||
@@ -1158,10 +1133,7 @@ int CompileVowelTransition(int which) | |||
int f3_amp = 0; | |||
int flags = 0; | |||
int vcolour = 0; | |||
int x; | |||
int instn = i_VOWELIN; | |||
int word1; | |||
int word2; | |||
if (which == 1) { | |||
len = 50 / 2; // defaults for transition into vowel | |||
@@ -1178,7 +1150,7 @@ int CompileVowelTransition(int which) | |||
} | |||
for (;;) { | |||
key = NextItem(tKEYWORD); | |||
int key = NextItem(tKEYWORD); | |||
if (item_type != tTRANSITION) { | |||
UngetItem(); | |||
break; | |||
@@ -1202,7 +1174,7 @@ int CompileVowelTransition(int which) | |||
f2_min = Range(NextItem(tSIGNEDNUMBER), 50, -15, 15) & 0x1f; | |||
f2_max = Range(NextItem(tSIGNEDNUMBER), 50, -15, 15) & 0x1f; | |||
if (f2_min > f2_max) { | |||
x = f2_min; | |||
int x = f2_min; | |||
f2_min = f2_max; | |||
f2_max = x; | |||
} | |||
@@ -1239,8 +1211,8 @@ int CompileVowelTransition(int which) | |||
break; | |||
} | |||
} | |||
word1 = len + (rms << 6) + (flags << 12); | |||
word2 = f2 + (f2_min << 6) + (f2_max << 11) + (f3_adj << 16) + (f3_amp << 21) + (f1 << 26) + (vcolour << 29); | |||
int word1 = len + (rms << 6) + (flags << 12); | |||
int word2 = f2 + (f2_min << 6) + (f2_max << 11) + (f3_adj << 16) + (f3_amp << 21) + (f1 << 26) + (vcolour << 29); | |||
prog_out[0] = instn + ((word1 >> 16) & 0xff); | |||
prog_out[1] = word1; | |||
prog_out[2] = word2 >> 16; | |||
@@ -1253,14 +1225,8 @@ int CompileVowelTransition(int which) | |||
int LoadSpect(const char *path, int control) | |||
{ | |||
SpectSeq *spectseq; | |||
int peak; | |||
int displ; | |||
int frame; | |||
int n_frames; | |||
int ix; | |||
int x, x2; | |||
int rms; | |||
float total; | |||
float pkheight; | |||
int marker1_set = 0; | |||
int frame_vowelbreak = 0; | |||
@@ -1289,21 +1255,21 @@ int LoadSpect(const char *path, int control) | |||
} | |||
// do we need additional klatt data ? | |||
for (frame = 0; frame < spectseq->numframes; frame++) { | |||
for (int frame = 0; frame < spectseq->numframes; frame++) { | |||
for (ix = 5; ix < N_KLATTP2; ix++) { | |||
if (spectseq->frames[frame]->klatt_param[ix] != 0) | |||
klatt_flag = FRFLAG_KLATT; | |||
} | |||
} | |||
displ = ftell(f_phdata); | |||
int displ = ftell(f_phdata); | |||
seq_out.n_frames = 0; | |||
seq_out.sqflags = 0; | |||
seq_out.length_total = 0; | |||
total = 0; | |||
for (frame = 0; frame < spectseq->numframes; frame++) { | |||
float total = 0.0f; | |||
for (int frame = 0; frame < spectseq->numframes; frame++) { | |||
if (spectseq->frames[frame]->keyframe) { | |||
if (seq_out.n_frames == 1) | |||
frame_vowelbreak = frame; | |||
@@ -1325,8 +1291,8 @@ int LoadSpect(const char *path, int control) | |||
spectseq->frames[frame_vowelbreak]->markers |= FRFLAG_VOWEL_CENTRE; | |||
} | |||
n_frames = 0; | |||
for (frame = 0; frame < spectseq->numframes; frame++) { | |||
int n_frames = 0; | |||
for (int frame = 0; frame < spectseq->numframes; frame++) { | |||
fr = spectseq->frames[frame]; | |||
if (fr->keyframe) { | |||
@@ -1341,7 +1307,7 @@ int LoadSpect(const char *path, int control) | |||
fr_out->frflags = fr->markers | klatt_flag; | |||
rms = (int)GetFrameRms(fr, spectseq->amplitude); | |||
int rms = (int)GetFrameRms(fr, spectseq->amplitude); | |||
if (rms > 255) rms = 255; | |||
fr_out->rms = rms; | |||
@@ -1350,7 +1316,7 @@ int LoadSpect(const char *path, int control) | |||
// write: peak data | |||
count_frames++; | |||
for (peak = 0; peak < 8; peak++) { | |||
for (int peak = 0; peak < 8; peak++) { | |||
if (peak < 7) | |||
fr_out->ffreq[peak] = fr->peaks[peak].pkfreq; | |||
@@ -1389,7 +1355,7 @@ int LoadSpect(const char *path, int control) | |||
for (ix = 0; ix < 5; ix++) | |||
fr_out->klattp2[ix] = fr->klatt_param[ix+5]; | |||
for (peak = 0; peak < 7; peak++) { | |||
for (int peak = 0; peak < 7; peak++) { | |||
fr_out->klatt_ap[ix] = fr->peaks[peak].klt_ap; | |||
x = fr->peaks[peak].klt_bp / 2; | |||
@@ -1429,18 +1395,13 @@ int LoadSpect(const char *path, int control) | |||
static int LoadWavefile(FILE *f, const char *fname) | |||
{ | |||
int displ; | |||
unsigned char c1; | |||
unsigned char c3; | |||
int c2; | |||
int sample; | |||
int sample2; | |||
float x; | |||
int max = 0; | |||
int length; | |||
int sr1, sr2; | |||
int failed; | |||
int len; | |||
int resample_wav = 0; | |||
const char *fname2; | |||
char fname_temp[100]; | |||
@@ -1448,8 +1409,8 @@ static int LoadWavefile(FILE *f, const char *fname) | |||
int scale_factor = 0; | |||
fseek(f, 24, SEEK_SET); | |||
sr1 = Read4Bytes(f); | |||
sr2 = Read4Bytes(f); | |||
int sr1 = Read4Bytes(f); | |||
int sr2 = Read4Bytes(f); | |||
fseek(f, 40, SEEK_SET); | |||
if ((sr1 != samplerate_native) || (sr2 != sr1*2)) { | |||
@@ -1467,7 +1428,7 @@ static int LoadWavefile(FILE *f, const char *fname) | |||
#endif | |||
fname2 = fname; | |||
len = strlen(fname); | |||
size_t len = strlen(fname); | |||
if (strcmp(&fname[len-4], ".wav") == 0) { | |||
strcpy(msg, fname); | |||
msg[len-4] = 0; | |||
@@ -1504,10 +1465,10 @@ static int LoadWavefile(FILE *f, const char *fname) | |||
fseek(f, 40, SEEK_SET); // skip past the WAV header, up to before "data length" | |||
} | |||
displ = ftell(f_phdata); | |||
int displ = ftell(f_phdata); | |||
// data contains: 4 bytes of length (n_samples * 2), followed by 2-byte samples (lsb byte first) | |||
length = Read4Bytes(f); | |||
int length = Read4Bytes(f); | |||
while (!feof(f)) { | |||
c1 = fgetc(f); | |||
@@ -1549,7 +1510,7 @@ static int LoadWavefile(FILE *f, const char *fname) | |||
fputc(sample & 0xff, f_phdata); | |||
fputc(sample >> 8, f_phdata); | |||
} else { | |||
x = ((float)sample / scale_factor) + 0.5; | |||
float x = ((float)sample / scale_factor) + 0.5; | |||
sample2 = (int)x; | |||
if (sample2 > 127) | |||
sample2 = 127; | |||
@@ -1575,10 +1536,9 @@ static int LoadWavefile(FILE *f, const char *fname) | |||
static int LoadEnvelope(FILE *f, const char *fname) | |||
{ | |||
int displ; | |||
char buf[128]; | |||
displ = ftell(f_phdata); | |||
int displ = ftell(f_phdata); | |||
fseek(f, 12, SEEK_SET); | |||
if (fread(buf, 128, 1, f) == 0) | |||
@@ -1613,20 +1573,16 @@ static int Hash8(const char *string) | |||
static int LoadEnvelope2(FILE *f, const char *fname) | |||
{ | |||
int ix, ix2; | |||
int n; | |||
int x, y; | |||
int displ; | |||
int n_points; | |||
double yy; | |||
char line_buf[128]; | |||
float env_x[20]; | |||
float env_y[20]; | |||
int env_lin[20]; | |||
unsigned char env[ENV_LEN]; | |||
n_points = 0; | |||
int n_points = 0; | |||
fgets(line_buf, sizeof(line_buf), f); // skip first line | |||
while (!feof(f)) { | |||
if (fgets(line_buf, sizeof(line_buf), f) == NULL) | |||
break; | |||
@@ -1641,16 +1597,17 @@ static int LoadEnvelope2(FILE *f, const char *fname) | |||
env_x[n_points] = env_x[n_points-1]; | |||
env_y[n_points] = env_y[n_points-1]; | |||
ix = -1; | |||
ix2 = 0; | |||
for (x = 0; x < ENV_LEN; x++) { | |||
int ix = -1; | |||
int ix2 = 0; | |||
int y = 0; | |||
for (int x = 0; x < ENV_LEN; x++) { | |||
if (x > env_x[ix+4]) | |||
ix++; | |||
if (x >= env_x[ix2+1]) | |||
ix2++; | |||
if (env_lin[ix2] > 0) { | |||
yy = env_y[ix2] + (env_y[ix2+1] - env_y[ix2]) * ((float)x - env_x[ix2]) / (env_x[ix2+1] - env_x[ix2]); | |||
double yy = env_y[ix2] + (env_y[ix2+1] - env_y[ix2]) * ((float)x - env_x[ix2]) / (env_x[ix2+1] - env_x[ix2]); | |||
y = (int)(yy * 2.55); | |||
} else if (n_points > 3) | |||
y = (int)(polint(&env_x[ix], &env_y[ix], 4, x) * 2.55); // convert to range 0-255 | |||
@@ -1667,7 +1624,7 @@ static int LoadEnvelope2(FILE *f, const char *fname) | |||
n_envelopes++; | |||
} | |||
displ = ftell(f_phdata); | |||
int displ = ftell(f_phdata); | |||
fwrite(env, 1, 128, f_phdata); | |||
return displ; | |||
@@ -1679,8 +1636,6 @@ static int LoadDataFile(const char *path, int control) | |||
// return index into spect or sample data area. bit 23=1 if a sample | |||
FILE *f; | |||
int id; | |||
int hash; | |||
int addr = 0; | |||
int type_code = ' '; | |||
REF_HASH_TAB *p, *p2; | |||
@@ -1693,7 +1648,7 @@ static int LoadDataFile(const char *path, int control) | |||
count_references++; | |||
hash = Hash8(path); | |||
int hash = Hash8(path); | |||
p = ref_hash_tab[hash]; | |||
while (p != NULL) { | |||
if (strcmp(path, p->string) == 0) { | |||
@@ -1715,7 +1670,7 @@ static int LoadDataFile(const char *path, int control) | |||
} | |||
} | |||
id = Read4Bytes(f); | |||
int id = Read4Bytes(f); | |||
rewind(f); | |||
if (id == 0x43455053) { | |||
@@ -1757,13 +1712,11 @@ static int LoadDataFile(const char *path, int control) | |||
static int CompileToneSpec(void) | |||
{ | |||
int pitch1 = 0; | |||
int pitch2 = 0; | |||
int pitch_env = 0; | |||
int amp_env = 0; | |||
pitch1 = NextItemBrackets(tNUMBER, 2); | |||
pitch2 = NextItemBrackets(tNUMBER, 3); | |||
int pitch1 = NextItemBrackets(tNUMBER, 2); | |||
int pitch2 = NextItemBrackets(tNUMBER, 3); | |||
if (item_terminator == ',') { | |||
NextItemBrackets(tSTRING, 3); | |||
@@ -1799,7 +1752,6 @@ static int CompileToneSpec(void) | |||
int CompileSound(int keyword, int isvowel) | |||
{ | |||
int addr; | |||
int value = 0; | |||
char path[N_ITEM_STRING]; | |||
static int sound_instns[] = { i_FMT, i_WAV, i_VWLSTART, i_VWLENDING, i_WAVADD }; | |||
@@ -1825,7 +1777,7 @@ int CompileSound(int keyword, int isvowel) | |||
} | |||
} | |||
} | |||
addr = LoadDataFile(path, isvowel); | |||
int addr = LoadDataFile(path, isvowel); | |||
addr = addr / 4; // addr is words not bytes | |||
*prog_out++ = sound_instns[keyword-kFMT] + ((value & 0xff) << 4) + ((addr >> 16) & 0xf); | |||
@@ -1851,8 +1803,6 @@ int CompileIf(int elif) | |||
int word = 0; | |||
int word2; | |||
int data; | |||
int bitmap; | |||
int brackets; | |||
int not_flag; | |||
USHORT *prog_last_if = NULL; | |||
@@ -1894,8 +1844,8 @@ int CompileIf(int elif) | |||
} | |||
} else if (item_type == tTEST) { | |||
if (key == kTHISSTRESS) { | |||
bitmap = 0; | |||
brackets = 2; | |||
int bitmap = 0; | |||
int brackets = 2; | |||
do { | |||
data = NextItemBrackets(tNUMBER, brackets); | |||
if (data > 7) | |||
@@ -1956,11 +1906,10 @@ int CompileIf(int elif) | |||
void FillThen(int add) | |||
{ | |||
USHORT *p; | |||
int offset; | |||
p = if_stack[if_level].p_then; | |||
if (p != NULL) { | |||
offset = prog_out - p + add; | |||
int offset = prog_out - p + add; | |||
if ((then_count == 1) && (if_level == 1)) { | |||
// The THEN part only contains one statement, we can remove the THEN jump | |||
@@ -2070,9 +2019,7 @@ static int CompileSwitch(int type) | |||
static PHONEME_TAB_LIST *FindPhonemeTable(const char *string) | |||
{ | |||
int ix; | |||
for (ix = 0; ix < n_phoneme_tabs; ix++) { | |||
for (int ix = 0; ix < n_phoneme_tabs; ix++) { | |||
if (strcmp(phoneme_tab_list2[ix].name, string) == 0) | |||
return &phoneme_tab_list2[ix]; | |||
} | |||
@@ -2084,7 +2031,6 @@ static PHONEME_TAB *FindPhoneme(const char *string) | |||
{ | |||
PHONEME_TAB_LIST *phtab = NULL; | |||
int ix; | |||
unsigned int mnem; | |||
char *phname; | |||
char buf[200]; | |||
@@ -2101,7 +2047,7 @@ static PHONEME_TAB *FindPhoneme(const char *string) | |||
if (phtab == NULL) | |||
return NULL; // phoneme table not found | |||
mnem = StringToWord(phname); | |||
unsigned int mnem = StringToWord(phname); | |||
for (ix = 1; ix < 256; ix++) { | |||
if (mnem == phtab->phoneme_tab_ptr[ix].mnemonic) | |||
return &phtab->phoneme_tab_ptr[ix]; | |||
@@ -2113,8 +2059,6 @@ static PHONEME_TAB *FindPhoneme(const char *string) | |||
static void ImportPhoneme(void) | |||
{ | |||
unsigned int ph_mnem; | |||
unsigned int ph_code; | |||
PHONEME_TAB *ph; | |||
NextItem(tSTRING); | |||
@@ -2122,8 +2066,8 @@ static void ImportPhoneme(void) | |||
if ((ph = FindPhoneme(item_string)) == NULL) | |||
return; | |||
ph_mnem = phoneme_out->mnemonic; | |||
ph_code = phoneme_out->code; | |||
unsigned int ph_mnem = phoneme_out->mnemonic; | |||
unsigned int ph_code = phoneme_out->code; | |||
memcpy(phoneme_out, ph, sizeof(PHONEME_TAB)); | |||
phoneme_out->mnemonic = ph_mnem; | |||
phoneme_out->code = ph_code; | |||
@@ -2176,9 +2120,7 @@ static void DecThenCount() | |||
static void InstnPlusPhoneme(int instn) | |||
{ | |||
int phcode; | |||
phcode = NextItemBrackets(tPHONEMEMNEM, 0); | |||
int phcode = NextItemBrackets(tPHONEMEMNEM, 0); | |||
*prog_out++ = instn + phcode; | |||
} | |||
@@ -2188,10 +2130,6 @@ int CompilePhoneme(int compile_phoneme) | |||
int keyword; | |||
int value; | |||
int phcode = 0; | |||
int flags; | |||
int ix; | |||
int start; | |||
int count; | |||
int c; | |||
char *p; | |||
int vowel_length_factor = 100; // for testing | |||
@@ -2313,9 +2251,9 @@ int CompilePhoneme(int compile_phoneme) | |||
strcpy(item_string, " "); | |||
// copy the string, recognize characters in the form U+9999 | |||
flags = 0; | |||
count = 0; | |||
ix = 1; | |||
int flags = 0; | |||
int count = 0; | |||
int ix = 1; | |||
for (p = item_string; *p != 0;) { | |||
p += utf8_in(&c, p); | |||
@@ -2348,7 +2286,7 @@ int CompilePhoneme(int compile_phoneme) | |||
ipa_buf[0] = flags; | |||
ipa_buf[ix] = 0; | |||
start = 1; | |||
int start = 1; | |||
if (flags != 0) | |||
start = 0; // only include the flags byte if bits are set | |||
value = strlen(&ipa_buf[start]); // number of UTF-8 bytes | |||
@@ -2527,27 +2465,24 @@ int CompilePhoneme(int compile_phoneme) | |||
static void WritePhonemeTables() | |||
{ | |||
int ix; | |||
int j; | |||
int n; | |||
int value; | |||
int count; | |||
PHONEME_TAB *p; | |||
value = n_phoneme_tabs; | |||
int value = n_phoneme_tabs; | |||
fputc(value, f_phtab); | |||
fputc(0, f_phtab); | |||
fputc(0, f_phtab); | |||
fputc(0, f_phtab); | |||
for (ix = 0; ix < n_phoneme_tabs; ix++) { | |||
for (int ix = 0; ix < n_phoneme_tabs; ix++) { | |||
p = phoneme_tab_list2[ix].phoneme_tab_ptr; | |||
n = n_phcodes_list[ix]; | |||
p[n].mnemonic = 0; // terminate the phoneme table | |||
// count number of locally declared phonemes | |||
count = 0; | |||
for (j = 0; j < n; j++) { | |||
for (int j = 0; j < n; j++) { | |||
if (ix == 0) | |||
p[j].phflags |= phLOCAL; // write all phonemes in the base phoneme table | |||
@@ -2564,7 +2499,7 @@ static void WritePhonemeTables() | |||
fwrite(phoneme_tab_list2[ix].name, 1, N_PHONEME_TAB_NAME, f_phtab); | |||
for (j = 0; j < n; j++) { | |||
for (int j = 0; j < n; j++) { | |||
if (p[j].phflags & phLOCAL) { | |||
// this bit is set temporarily to incidate a local phoneme, declared in | |||
// in the current phoneme file | |||
@@ -2616,7 +2551,6 @@ static void EndPhonemeTable() | |||
static void StartPhonemeTable(const char *name) | |||
{ | |||
int ix; | |||
int j; | |||
PHONEME_TAB *p; | |||
fprintf(f_errors, "______________________________\nPhoneme Table: '%s'\n", name); | |||
@@ -2650,7 +2584,7 @@ static void StartPhonemeTable(const char *name) | |||
n_phcodes = n_phcodes_list[ix]; | |||
// clear "local phoneme" bit" | |||
for (j = 0; j < n_phcodes; j++) | |||
for (int j = 0; j < n_phcodes; j++) | |||
phoneme_tab2[j].phflags &= ~phLOCAL; | |||
break; | |||
} | |||
@@ -2667,7 +2601,6 @@ static void CompileEquivalents() | |||
{ | |||
// a list of phonemes in another language and the equivalent phoneme strings in this language | |||
int ix; | |||
int n_names; | |||
int n_bytes; | |||
int foreign_phoneme; | |||
@@ -2705,7 +2638,7 @@ static void CompileEquivalents() | |||
if ((p = strstr(line_buf, "//")) != NULL) | |||
*p = 0; | |||
for (ix = 0; ix < 6; ix++) | |||
for (int ix = 0; ix < 6; ix++) | |||
names[ix][0] = 0; | |||
n_names = sscanf(line_buf, "%s %s %s %s %s %s", names[0], names[1], names[2], names[3], names[4], names[5]); | |||
if (n_names < 1) | |||
@@ -2735,7 +2668,7 @@ static void CompileEquivalents() | |||
} | |||
} | |||
for (ix = 1; ix < n_names; ix++) | |||
for (int ix = 1; ix < n_names; ix++) | |||
phcode[ix] = LookupPhoneme(names[ix], 1); | |||
// only write a translation if it has an effect |
@@ -197,7 +197,6 @@ const char *LookupMnemName(MNEM_TAB *table, const int value) | |||
void print_dictionary_flags(unsigned int *flags, char *buf, int buf_len) | |||
{ | |||
int stress; | |||
int ix; | |||
const char *name; | |||
int len; | |||
int total = 0; | |||
@@ -209,7 +208,7 @@ void print_dictionary_flags(unsigned int *flags, char *buf, int buf_len) | |||
buf += total; | |||
} | |||
for (ix = 8; ix < 64; ix++) { | |||
for (int ix = 8; ix < 64; ix++) { | |||
if (((ix < 30) && (flags[0] & (1 << ix))) || ((ix >= 0x20) && (flags[1] & (1 << (ix-0x20))))) { | |||
name = LookupMnemName(mnem_flags, ix); | |||
len = strlen(name) + 1; | |||
@@ -230,8 +229,6 @@ char *DecodeRule(const char *group_chars, int group_length, char *rule, int cont | |||
unsigned char c; | |||
char *p; | |||
char *p_end; | |||
int ix; | |||
int match_type; | |||
int finished = 0; | |||
int value; | |||
int linenum = 0; | |||
@@ -254,9 +251,10 @@ char *DecodeRule(const char *group_chars, int group_length, char *rule, int cont | |||
static char symbols_lg[] = { 'A', 'B', 'C', 'H', 'F', 'G', 'Y' }; | |||
match_type = 0; | |||
int match_type = 0; | |||
buf_pre[0] = 0; | |||
int ix; | |||
for (ix = 0; ix < group_length; ix++) | |||
buf[ix] = group_chars[ix]; | |||
buf[ix] = 0; | |||
@@ -388,35 +386,26 @@ static int compile_line(char *linebuf, char *dict_line, int *hash) | |||
char *word; | |||
char *phonetic; | |||
unsigned int ix; | |||
int step; | |||
unsigned int n_flag_codes = 0; | |||
int flagnum; | |||
int flag_offset; | |||
int length; | |||
int multiple_words = 0; | |||
int multiple_numeric_hyphen = 0; | |||
char *multiple_string = NULL; | |||
char *multiple_string_end = NULL; | |||
int len_word; | |||
int len_phonetic; | |||
int text_not_phonemes; // this word specifies replacement text, not phonemes | |||
unsigned int wc; | |||
int all_upper_case; | |||
char *mnemptr; | |||
unsigned char flag_codes[100]; | |||
char encoded_ph[200]; | |||
char bad_phoneme_str[4]; | |||
int bad_phoneme; | |||
static char nullstring[] = { 0 }; | |||
text_not_phonemes = 0; | |||
int text_not_phonemes = 0; // this word specifies replacement text, not phonemes | |||
phonetic = word = nullstring; | |||
p = linebuf; | |||
step = 0; | |||
int step = 0; | |||
c = 0; | |||
while (c != '\n') { | |||
@@ -424,7 +413,7 @@ static int compile_line(char *linebuf, char *dict_line, int *hash) | |||
if ((c == '?') && (step == 0)) { | |||
// conditional rule, allow only if the numbered condition is set for the voice | |||
flag_offset = 100; | |||
int flag_offset = 100; | |||
p++; | |||
if (*p == '!') { | |||
@@ -452,7 +441,7 @@ static int compile_line(char *linebuf, char *dict_line, int *hash) | |||
while (!isspace2(c = *p)) p++; | |||
*p = 0; | |||
flagnum = LookupMnem(mnem_flags, mnemptr); | |||
int flagnum = LookupMnem(mnem_flags, mnemptr); | |||
if (flagnum > 0) { | |||
if (flagnum == 200) | |||
text_mode = 1; | |||
@@ -563,12 +552,14 @@ static int compile_line(char *linebuf, char *dict_line, int *hash) | |||
// this is replacement text, so don't encode as phonemes. Restrict the length of the replacement word | |||
strncpy0(encoded_ph, phonetic, N_WORD_BYTES-4); | |||
} else { | |||
int bad_phoneme; | |||
EncodePhonemes(phonetic, encoded_ph, &bad_phoneme); | |||
if (strchr(encoded_ph, phonSWITCH) != 0) | |||
flag_codes[n_flag_codes++] = BITNUM_FLAG_ONLY_S; // don't match on suffixes (except 's') when switching languages | |||
// check for errors in the phonemes codes | |||
if (bad_phoneme != 0) { | |||
char bad_phoneme_str[4]; | |||
// unrecognised phoneme, report error | |||
bad_phoneme_str[utf8_out(bad_phoneme, bad_phoneme_str)] = 0; | |||
fprintf(f_log, "%5d: Bad phoneme [%s] (U+%x) in: %s %s\n", linenum, bad_phoneme_str, bad_phoneme, word, phonetic); | |||
@@ -587,7 +578,7 @@ static int compile_line(char *linebuf, char *dict_line, int *hash) | |||
// convert to lower case, and note if the word is all-capitals | |||
int c2; | |||
all_upper_case = 1; | |||
int all_upper_case = 1; | |||
p = word; | |||
for (p = word;;) { | |||
// this assumes that the lower case char is the same length as the upper case char | |||
@@ -605,13 +596,13 @@ static int compile_line(char *linebuf, char *dict_line, int *hash) | |||
flag_codes[n_flag_codes++] = BITNUM_FLAG_ALLCAPS; | |||
} | |||
len_word = strlen(word); | |||
int len_word = strlen(word); | |||
if (translator->transpose_min > 0) | |||
len_word = TransposeAlphabet(translator, word); | |||
*hash = HashDictionary(word); | |||
len_phonetic = strlen(encoded_ph); | |||
int len_phonetic = strlen(encoded_ph); | |||
dict_line[1] = len_word; // bit 6 indicates whether the word has been compressed | |||
len_word &= 0x3f; | |||
@@ -652,11 +643,10 @@ static int compile_line(char *linebuf, char *dict_line, int *hash) | |||
static void compile_dictlist_start(void) | |||
{ | |||
// initialise dictionary list | |||
int ix; | |||
char *p; | |||
char *p2; | |||
for (ix = 0; ix < N_HASH_DICT; ix++) { | |||
for (int ix = 0; ix < N_HASH_DICT; ix++) { | |||
p = hash_chains[ix]; | |||
while (p != NULL) { | |||
memcpy(&p2, p, sizeof(char *)); | |||
@@ -671,13 +661,12 @@ static void compile_dictlist_start(void) | |||
static void compile_dictlist_end(FILE *f_out) | |||
{ | |||
// Write out the compiled dictionary list | |||
int hash; | |||
int length; | |||
char *p; | |||
if (f_log != NULL) { | |||
#ifdef OUTPUT_FORMAT | |||
for (hash = 0; hash < N_HASH_DICT; hash++) { | |||
for (int hash = 0; hash < N_HASH_DICT; hash++) { | |||
fprintf(f_log, "%8d", hash_counts[hash]); | |||
if ((hash & 7) == 7) | |||
fputc('\n', f_log); | |||
@@ -686,7 +675,7 @@ static void compile_dictlist_end(FILE *f_out) | |||
#endif | |||
} | |||
for (hash = 0; hash < N_HASH_DICT; hash++) { | |||
for (int hash = 0; hash < N_HASH_DICT; hash++) { | |||
p = hash_chains[hash]; | |||
hash_counts[hash] = (int)ftell(f_out); | |||
@@ -706,7 +695,6 @@ static int compile_dictlist_file(const char *path, const char *filename) | |||
char *p; | |||
int count = 0; | |||
FILE *f_in; | |||
char buf[200]; | |||
char fname[sizeof(path_home)+45]; | |||
char dict_line[128]; | |||
@@ -725,6 +713,7 @@ static int compile_dictlist_file(const char *path, const char *filename) | |||
linenum = 0; | |||
char buf[200]; | |||
while (fgets(buf, sizeof(buf), f_in) != NULL) { | |||
linenum++; | |||
@@ -786,7 +775,6 @@ static void copy_rule_string(char *string, int *state_out) | |||
int len; | |||
char c; | |||
int c2, c3; | |||
int sxflags; | |||
int value; | |||
int literal; | |||
int hexdigit_input = 0; | |||
@@ -803,7 +791,8 @@ static void copy_rule_string(char *string, int *state_out) | |||
rule_phonemes[len++] = ' '; | |||
output = &rule_phonemes[len]; | |||
} | |||
sxflags = 0x808000; // to ensure non-zero bytes | |||
int sxflags = 0x808000; // to ensure non-zero bytes | |||
for (p = string, ix = 0;;) { | |||
literal = 0; | |||
@@ -1019,18 +1008,12 @@ static char *compile_rule(char *input) | |||
{ | |||
int ix; | |||
unsigned char c; | |||
int wc; | |||
char *p; | |||
char *prule; | |||
int len; | |||
int len_name; | |||
int start; | |||
int state = 2; | |||
int finish = 0; | |||
char buf[80]; | |||
char output[150]; | |||
int bad_phoneme; | |||
char bad_phoneme_str[4]; | |||
buf[0] = 0; | |||
rule_cond[0] = 0; | |||
@@ -1099,6 +1082,8 @@ static char *compile_rule(char *input) | |||
return NULL; | |||
} | |||
int bad_phoneme; | |||
char bad_phoneme_str[4]; | |||
EncodePhonemes(rule_phonemes, buf, &bad_phoneme); | |||
if (bad_phoneme != 0) { | |||
bad_phoneme_str[utf8_out(bad_phoneme, bad_phoneme_str)] = 0; | |||
@@ -1106,10 +1091,11 @@ static char *compile_rule(char *input) | |||
error_count++; | |||
} | |||
strcpy(output, buf); | |||
len = strlen(buf)+1; | |||
size_t len = strlen(buf)+1; | |||
len_name = strlen(group_name); | |||
size_t len_name = strlen(group_name); | |||
if ((len_name > 0) && (memcmp(rule_match, group_name, len_name) != 0)) { | |||
int wc; | |||
utf8_in(&wc, rule_match); | |||
if ((group_name[0] == '9') && IsDigit(wc)) { | |||
// numeric group, rule_match starts with a digit, so OK | |||
@@ -1147,7 +1133,7 @@ static char *compile_rule(char *input) | |||
} | |||
} | |||
if (rule_pre[0] != 0) { | |||
start = 0; | |||
int start = 0; | |||
if (rule_pre[0] == RULE_SPACE) { | |||
// omit '_' at the beginning of the pre-string and imply it by using RULE_PRE_ATSTART | |||
c = RULE_PRE_ATSTART; | |||
@@ -1186,8 +1172,8 @@ int __cdecl string_sorter(char **a, char **b) | |||
static int __cdecl rgroup_sorter(RGROUP *a, RGROUP *b) | |||
{ | |||
// Sort long names before short names | |||
int ix; | |||
ix = strlen(b->name) - strlen(a->name); | |||
int ix = strlen(b->name) - strlen(a->name); | |||
if (ix != 0) return ix; | |||
ix = strcmp(a->name, b->name); | |||
if (ix != 0) return ix; | |||
@@ -1197,12 +1183,9 @@ static int __cdecl rgroup_sorter(RGROUP *a, RGROUP *b) | |||
#ifdef OUTPUT_FORMAT | |||
static void print_rule_group(FILE *f_out, int n_rules, char **rules, char *name) | |||
{ | |||
int rule; | |||
int ix; | |||
unsigned char c; | |||
int len1; | |||
int len2; | |||
int spaces; | |||
char *p; | |||
char *pout; | |||
int condition; | |||
@@ -1213,7 +1196,7 @@ static void print_rule_group(FILE *f_out, int n_rules, char **rules, char *name) | |||
fprintf(f_out, "\n$group %s\n", name); | |||
for (rule = 0; rule < n_rules; rule++) { | |||
for (int rule = 0; rule < n_rules; rule++) { | |||
p = rules[rule]; | |||
len1 = strlen(p) + 1; | |||
p = &p[len1]; | |||
@@ -1225,7 +1208,7 @@ static void print_rule_group(FILE *f_out, int n_rules, char **rules, char *name) | |||
condition = 0; | |||
pout = rule_match; | |||
for (ix = 0; ix < len2; ix++) { | |||
for (int ix = 0; ix < len2; ix++) { | |||
switch (c = p[ix]) | |||
{ | |||
case RULE_PRE: | |||
@@ -1256,7 +1239,7 @@ static void print_rule_group(FILE *f_out, int n_rules, char **rules, char *name) | |||
} | |||
*pout = 0; | |||
spaces = 12; | |||
int spaces = 12; | |||
if (condition > 0) { | |||
sprintf(buf, "?%d ", condition); | |||
spaces -= strlen(buf); | |||
@@ -1265,17 +1248,17 @@ static void print_rule_group(FILE *f_out, int n_rules, char **rules, char *name) | |||
if (rule_pre[0] != 0) { | |||
p = buf; | |||
for (ix = strlen(rule_pre)-1; ix >= 0; ix--) | |||
for (int ix = strlen(rule_pre)-1; ix >= 0; ix--) | |||
*p++ = rule_pre[ix]; | |||
sprintf(p, ") "); | |||
spaces -= strlen(buf); | |||
for (ix = 0; ix < spaces; ix++) | |||
for (int ix = 0; ix < spaces; ix++) | |||
fputc(' ', f_out); | |||
fprintf(f_out, "%s", buf); | |||
spaces = 0; | |||
} | |||
for (ix = 0; ix < spaces; ix++) | |||
for (int ix = 0; ix < spaces; ix++) | |||
fputc(' ', f_out); | |||
spaces = 14; | |||
@@ -1287,7 +1270,7 @@ static void print_rule_group(FILE *f_out, int n_rules, char **rules, char *name) | |||
fprintf(f_out, "%s", buf); | |||
spaces -= strlen(buf); | |||
for (ix = 0; ix < spaces; ix++) | |||
for (int ix = 0; ix < spaces; ix++) | |||
fputc(' ', f_out); | |||
DecodePhonemes(rules[rule], buf); | |||
fprintf(f_out, "%s\n", buf); // phonemes | |||
@@ -1297,10 +1280,8 @@ static void print_rule_group(FILE *f_out, int n_rules, char **rules, char *name) | |||
static void output_rule_group(FILE *f_out, int n_rules, char **rules, char *name) | |||
{ | |||
int ix; | |||
int len1; | |||
int len2; | |||
int len_name; | |||
char *p; | |||
char *p2, *p3; | |||
const char *common; | |||
@@ -1308,7 +1289,7 @@ static void output_rule_group(FILE *f_out, int n_rules, char **rules, char *name | |||
short nextchar_count[256]; | |||
memset(nextchar_count, 0, sizeof(nextchar_count)); | |||
len_name = strlen(name); | |||
int len_name = strlen(name); | |||
#ifdef OUTPUT_FORMAT | |||
print_rule_group(f_log, n_rules, rules, name); | |||
@@ -1321,7 +1302,7 @@ static void output_rule_group(FILE *f_out, int n_rules, char **rules, char *name | |||
if (strcmp(name, "9") == 0) | |||
len_name = 0; // don't remove characters from numeric match strings | |||
for (ix = 0; ix < n_rules; ix++) { | |||
for (int ix = 0; ix < n_rules; ix++) { | |||
p = rules[ix]; | |||
len1 = strlen(p) + 1; // phoneme string | |||
p3 = &p[len1]; | |||
@@ -1346,7 +1327,7 @@ static void output_rule_group(FILE *f_out, int n_rules, char **rules, char *name | |||
} | |||
#ifdef LIST_GROUP_INFO | |||
for (ix = 32; ix < 256; ix++) { | |||
for (int ix = 32; ix < 256; ix++) { | |||
if (nextchar_count[ix] > 30) | |||
printf("Group %s %c %d\n", name, ix, nextchar_count[ix]); | |||
} | |||
@@ -1357,9 +1338,6 @@ static int compile_lettergroup(char *input, FILE *f_out) | |||
{ | |||
char *p; | |||
char *p_start; | |||
int group; | |||
int ix; | |||
int n_items; | |||
int length; | |||
int max_length = 0; | |||
@@ -1374,7 +1352,7 @@ static int compile_lettergroup(char *input, FILE *f_out) | |||
return 1; | |||
} | |||
group = atoi(&p[0]); | |||
int group = atoi(&p[0]); | |||
if (group >= N_LETTER_GROUPS) { | |||
fprintf(f_log, "%5d: lettergroup out of range (01-%.2d)\n", linenum, N_LETTER_GROUPS-1); | |||
error_count++; | |||
@@ -1392,7 +1370,7 @@ static int compile_lettergroup(char *input, FILE *f_out) | |||
} | |||
letterGroupsDefined[group] = 1; | |||
n_items = 0; | |||
int n_items = 0; | |||
while (n_items < N_LETTERGP_ITEMS) { | |||
while (isspace2(*p)) p++; | |||
if (*p == 0) | |||
@@ -1412,7 +1390,7 @@ static int compile_lettergroup(char *input, FILE *f_out) | |||
// write out the items, longest first | |||
while (max_length > 1) { | |||
for (ix = 0; ix < n_items; ix++) { | |||
for (int ix = 0; ix < n_items; ix++) { | |||
if (item_length[ix] == max_length) | |||
fwrite(items[ix], 1, max_length, f_out); | |||
} | |||
@@ -1640,8 +1618,6 @@ int CompileDictionary(const char *dsource, const char *dict_name, FILE *log, cha | |||
FILE *f_in; | |||
FILE *f_out; | |||
int offset_rules = 0; | |||
int value; | |||
char fname_in[sizeof(path_home)+45]; | |||
char fname_out[sizeof(path_home)+15]; | |||
char fname_temp[sizeof(path_home)+15]; | |||
@@ -1681,7 +1657,8 @@ int CompileDictionary(const char *dsource, const char *dict_name, FILE *log, cha | |||
} | |||
sprintf(fname_temp, "%s%ctemp", path_home, PATHSEP); | |||
value = N_HASH_DICT; | |||
int value = N_HASH_DICT; | |||
int offset_rules = 0; | |||
Write4Bytes(f_out, value); | |||
Write4Bytes(f_out, offset_rules); | |||
@@ -44,7 +44,6 @@ static const char *basename(const char *filename) | |||
static unsigned int StringToWord(const char *string) | |||
{ | |||
// Pack 4 characters into a word | |||
int ix; | |||
unsigned char c; | |||
unsigned int word; | |||
@@ -52,7 +51,7 @@ static unsigned int StringToWord(const char *string) | |||
return 0; | |||
word = 0; | |||
for (ix = 0; ix < 4; ix++) { | |||
for (int ix = 0; ix < 4; ix++) { | |||
if (string[ix] == 0) break; | |||
c = string[ix]; | |||
word |= (c << (ix*8)); |
@@ -92,10 +92,9 @@ int Reverse4Bytes(int word) | |||
{ | |||
// reverse the order of bytes from little-endian to big-endian | |||
#ifdef ARCH_BIG | |||
int ix; | |||
int word2 = 0; | |||
for (ix = 0; ix <= 24; ix += 8) { | |||
for (int ix = 0; ix <= 24; ix += 8) { | |||
word2 = word2 << 8; | |||
word2 |= (word >> ix) & 0xff; | |||
} | |||
@@ -201,12 +200,9 @@ static void InitGroups(Translator *tr) | |||
int LoadDictionary(Translator *tr, const char *name, int no_error) | |||
{ | |||
int hash; | |||
char *p; | |||
int *pw; | |||
int length; | |||
FILE *f; | |||
unsigned int size; | |||
char fname[sizeof(path_home)+20]; | |||
strcpy(dictionary_name, name); // currently loaded dictionary name | |||
@@ -216,7 +212,7 @@ int LoadDictionary(Translator *tr, const char *name, int no_error) | |||
// bytes 0-3: offset to rules data | |||
// bytes 4-7: number of hash table entries | |||
sprintf(fname, "%s%c%s_dict", path_home, PATHSEP, name); | |||
size = GetFileLength(fname); | |||
unsigned int size = GetFileLength(fname); | |||
if (tr->data_dictlist != NULL) { | |||
Free(tr->data_dictlist); | |||
@@ -237,7 +233,7 @@ int LoadDictionary(Translator *tr, const char *name, int no_error) | |||
fclose(f); | |||
pw = (int *)(tr->data_dictlist); | |||
length = Reverse4Bytes(pw[1]); | |||
int length = Reverse4Bytes(pw[1]); | |||
if (size <= (N_HASH_DICT + sizeof(int)*2)) { | |||
fprintf(stderr, "Empty _dict file: '%s\n", fname); | |||
@@ -257,7 +253,7 @@ int LoadDictionary(Translator *tr, const char *name, int no_error) | |||
// set up hash table for data_dictlist | |||
p = &(tr->data_dictlist[8]); | |||
for (hash = 0; hash < N_HASH_DICT; hash++) { | |||
for (int hash = 0; hash < N_HASH_DICT; hash++) { | |||
tr->dict_hashtab[hash] = p; | |||
while ((length = *p) != 0) | |||
p += length; | |||
@@ -296,7 +292,6 @@ int HashDictionary(const char *string) | |||
*/ | |||
const char *EncodePhonemes(const char *p, char *outptr, int *bad_phoneme) | |||
{ | |||
int ix; | |||
unsigned char c; | |||
int count; // num. of matching characters | |||
int max; // highest num. of matching found so far | |||
@@ -333,7 +328,7 @@ const char *EncodePhonemes(const char *p, char *outptr, int *bad_phoneme) | |||
max = -1; | |||
max_ph = 0; | |||
for (ix = 1; ix < n_phoneme_tab; ix++) { | |||
for (int ix = 1; ix < n_phoneme_tab; ix++) { | |||
if (phoneme_tab[ix] == NULL) | |||
continue; | |||
if (phoneme_tab[ix]->type == phINVALID) | |||
@@ -442,9 +437,6 @@ static unsigned int phon_out_size = 0; | |||
char *WritePhMnemonic(char *phon_out, PHONEME_TAB *ph, PHONEME_LIST *plist, int use_ipa, int *flags) | |||
{ | |||
int c; | |||
int mnem; | |||
int len; | |||
int first; | |||
int ix = 0; | |||
char *p; | |||
PHONEME_DATA phdata; | |||
@@ -484,7 +476,7 @@ char *WritePhMnemonic(char *phon_out, PHONEME_TAB *ph, PHONEME_LIST *plist, int | |||
p++; | |||
} | |||
len = strlen(p); | |||
int len = strlen(p); | |||
if (len > 0) { | |||
strcpy(phon_out, p); | |||
phon_out += len; | |||
@@ -493,8 +485,8 @@ char *WritePhMnemonic(char *phon_out, PHONEME_TAB *ph, PHONEME_LIST *plist, int | |||
} | |||
} | |||
first = 1; | |||
for (mnem = ph->mnemonic; (c = mnem & 0xff) != 0; mnem = mnem >> 8) { | |||
int first = 1; | |||
for (int mnem = ph->mnemonic; (c = mnem & 0xff) != 0; mnem = mnem >> 8) { | |||
if ((c == '/') && (option_phoneme_variants == 0)) | |||
break; // discard phoneme variant indicator | |||
@@ -536,7 +528,6 @@ const char *GetTranslatedPhonemeString(int phoneme_mode) | |||
*/ | |||
int ix; | |||
unsigned int len; | |||
int phon_out_ix = 0; | |||
int stress; | |||
@@ -571,7 +562,7 @@ const char *GetTranslatedPhonemeString(int phoneme_mode) | |||
use_tie = 0; | |||
} | |||
for (ix = 1; ix < (n_phoneme_list-2); ix++) { | |||
for (int ix = 1; ix < (n_phoneme_list-2); ix++) { | |||
buf = phon_buf; | |||
plist = &phoneme_list[ix]; | |||
@@ -719,14 +710,12 @@ int IsVowel(Translator *tr, int letter) | |||
static int Unpronouncable2(Translator *tr, char *word) | |||
{ | |||
int c; | |||
int end_flags; | |||
char ph_buf[N_WORD_PHONEMES]; | |||
ph_buf[0] = 0; | |||
c = word[-1]; | |||
int c = word[-1]; | |||
word[-1] = ' '; // ensure there is a space before the "word" | |||
end_flags = TranslateRules(tr, word, ph_buf, sizeof(ph_buf), NULL, FLAG_UNPRON_TEST, NULL); | |||
int end_flags = TranslateRules(tr, word, ph_buf, sizeof(ph_buf), NULL, FLAG_UNPRON_TEST, NULL); | |||
word[-1] = c; | |||
if ((end_flags == 0) || (end_flags & SUFX_UNPRON)) | |||
return 1; | |||
@@ -744,8 +733,6 @@ int Unpronouncable(Translator *tr, char *word, int posn) | |||
int c; | |||
int c1 = 0; | |||
int vowel_posn = 9; | |||
int index; | |||
int count; | |||
ALPHABET *alphabet; | |||
utf8_in(&c, word); | |||
@@ -765,8 +752,8 @@ int Unpronouncable(Translator *tr, char *word, int posn) | |||
if (((c = *word) == ' ') || (c == 0) || (c == '\'')) | |||
return 0; | |||
index = 0; | |||
count = 0; | |||
int index = 0; | |||
int count = 0; | |||
for (;;) { | |||
index += utf8_in(&c, &word[index]); | |||
if ((c == 0) || (c == ' ')) | |||
@@ -926,14 +913,13 @@ void ChangeWordStress(Translator *tr, char *word, int new_stress) | |||
{ | |||
int ix; | |||
unsigned char *p; | |||
int max_stress; | |||
int vowel_count; // num of vowels + 1 | |||
int stressed_syllable = 0; // position of stressed syllable | |||
unsigned char phonetic[N_WORD_PHONEMES]; | |||
signed char vowel_stress[N_WORD_PHONEMES/2]; | |||
strcpy((char *)phonetic, word); | |||
max_stress = GetVowelStress(tr, phonetic, vowel_stress, &vowel_count, &stressed_syllable, 0); | |||
int max_stress = GetVowelStress(tr, phonetic, vowel_stress, &vowel_count, &stressed_syllable, 0); | |||
if (new_stress >= 4) { | |||
// promote to primary stress | |||
@@ -1001,7 +987,6 @@ void SetWordStress(Translator *tr, char *output, unsigned int *dictionary_flags, | |||
int mnem; | |||
int opt_length; | |||
int done; | |||
int stressflags; | |||
int dflags = 0; | |||
int first_primary; | |||
int long_vowel; | |||
@@ -1020,7 +1005,7 @@ void SetWordStress(Translator *tr, char *output, unsigned int *dictionary_flags, | |||
3 secondary stress | |||
4 main stress */ | |||
stressflags = tr->langopts.stress_flags; | |||
int stressflags = tr->langopts.stress_flags; | |||
if (dictionary_flags != NULL) | |||
dflags = dictionary_flags[0]; | |||
@@ -2358,14 +2343,12 @@ void ApplySpecialAttribute2(Translator *tr, char *phonemes, int dict_flags) | |||
{ | |||
// apply after the translation is complete | |||
int ix; | |||
int len; | |||
char *p; | |||
len = strlen(phonemes); | |||
int len = strlen(phonemes); | |||
if (tr->langopts.param[LOPT_ALT] & 2) { | |||
for (ix = 0; ix < (len-1); ix++) { | |||
for (int ix = 0; ix < (len-1); ix++) { | |||
if (phonemes[ix] == phonSTRESS_P) { | |||
p = &phonemes[ix+1]; | |||
if ((dict_flags & FLAG_ALT2_TRANS) != 0) { | |||
@@ -2393,28 +2376,23 @@ int TransposeAlphabet(Translator *tr, char *text) | |||
int c; | |||
int c2; | |||
int ix; | |||
int offset; | |||
int min; | |||
int max; | |||
const char *map; | |||
char *p = text; | |||
char *p2; | |||
int all_alpha = 1; | |||
int bits; | |||
int acc; | |||
int pairs_start; | |||
const short *pairs_list; | |||
int bufix; | |||
char buf[N_WORD_BYTES+1]; | |||
offset = tr->transpose_min - 1; | |||
min = tr->transpose_min; | |||
max = tr->transpose_max; | |||
int offset = tr->transpose_min - 1; | |||
int min = tr->transpose_min; | |||
int max = tr->transpose_max; | |||
map = tr->transpose_map; | |||
pairs_start = max - min + 2; | |||
int pairs_start = max - min + 2; | |||
bufix = 0; | |||
int bufix = 0; | |||
do { | |||
p += utf8_in(&c, p); | |||
if (c != 0) { | |||
@@ -2490,7 +2468,6 @@ static const char *LookupDict2(Translator *tr, const char *word, const char *wor | |||
{ | |||
char *p; | |||
char *next; | |||
int hash; | |||
int phoneme_len; | |||
int wlen; | |||
unsigned char flag; | |||
@@ -2505,14 +2482,13 @@ static const char *LookupDict2(Translator *tr, const char *word, const char *wor | |||
const char *word_end; | |||
const char *word1; | |||
int wflags = 0; | |||
int lookup_symbol; | |||
char word_buf[N_WORD_BYTES+1]; | |||
char dict_flags_buf[80]; | |||
if (wtab != NULL) | |||
wflags = wtab->flags; | |||
lookup_symbol = flags[1] & FLAG_LOOKUP_SYMBOL; | |||
int lookup_symbol = flags[1] & FLAG_LOOKUP_SYMBOL; | |||
word1 = word; | |||
if (tr->transpose_min > 0) { | |||
strncpy0(word_buf, word, N_WORD_BYTES); | |||
@@ -2521,7 +2497,7 @@ static const char *LookupDict2(Translator *tr, const char *word, const char *wor | |||
} else | |||
wlen = strlen(word); | |||
hash = HashDictionary(word); | |||
int hash = HashDictionary(word); | |||
p = tr->dict_hashtab[hash]; | |||
if (p == NULL) { | |||
@@ -2764,7 +2740,6 @@ static const char *LookupDict2(Translator *tr, const char *word, const char *wor | |||
*/ | |||
int LookupDictList(Translator *tr, char **wordptr, char *ph_out, unsigned int *flags, int end_flags, WORD_TAB *wtab) | |||
{ | |||
int length; | |||
const char *found; | |||
const char *word1; | |||
const char *word2; | |||
@@ -2774,7 +2749,7 @@ int LookupDictList(Translator *tr, char **wordptr, char *ph_out, unsigned int *f | |||
char word[N_WORD_BYTES]; | |||
static char word_replacement[N_WORD_BYTES]; | |||
length = 0; | |||
int length = 0; | |||
word2 = word1 = *wordptr; | |||
while ((word2[nbytes = utf8_nbytes(word2)] == ' ') && (word2[nbytes+1] == '.')) { | |||
@@ -2895,7 +2870,6 @@ int Lookup(Translator *tr, const char *word, char *ph_out) | |||
int flags0; | |||
unsigned int flags[2]; | |||
int say_as; | |||
char *word1 = (char *)word; | |||
char text[80]; | |||
@@ -2905,7 +2879,7 @@ int Lookup(Translator *tr, const char *word, char *ph_out) | |||
flags0 = flags[0]; | |||
if (flags[0] & FLAG_TEXTMODE) { | |||
say_as = option_sayas; | |||
int say_as = option_sayas; | |||
option_sayas = 0; // don't speak replacement word as letter names | |||
text[0] = 0; | |||
strncpy0(&text[1], word1, sizeof(text)); | |||
@@ -2939,10 +2913,7 @@ int RemoveEnding(Translator *tr, char *word, int end_type, char *word_copy) | |||
that were done when the suffix was added to the original word. | |||
*/ | |||
int i; | |||
char *word_end; | |||
int len_ending; | |||
int end_flags; | |||
const char *p; | |||
int len; | |||
char ending[50]; | |||
@@ -2961,7 +2932,7 @@ int RemoveEnding(Translator *tr, char *word, int end_type, char *word_copy) | |||
if (*word_end == REPLACED_E) | |||
*word_end = 'e'; | |||
} | |||
i = word_end - word; | |||
int i = word_end - word; | |||
if (word_copy != NULL) { | |||
memcpy(word_copy, word, i); | |||
@@ -2969,6 +2940,7 @@ int RemoveEnding(Translator *tr, char *word, int end_type, char *word_copy) | |||
} | |||
// look for multibyte characters to increase the number of bytes to remove | |||
int len_ending; | |||
for (len_ending = i = (end_type & 0x3f); i > 0; i--) { // num.of characters of the suffix | |||
word_end--; | |||
while ((*word_end & 0xc0) == 0x80) { | |||
@@ -2985,7 +2957,7 @@ int RemoveEnding(Translator *tr, char *word, int end_type, char *word_copy) | |||
ending[i] = 0; | |||
word_end--; // now pointing at last character of stem | |||
end_flags = (end_type & 0xfff0) | FLAG_SUFX; | |||
int end_flags = (end_type & 0xfff0) | FLAG_SUFX; | |||
/* add an 'e' to the stem if appropriate, | |||
if stem ends in vowel+consonant |
@@ -49,15 +49,13 @@ | |||
double ConvertFromIeeeExtended(unsigned char *bytes /* LCN */) | |||
{ | |||
double f; | |||
int expon; | |||
unsigned long hiMant, loMant; | |||
expon = ((bytes[0] & 0x7F) << 8) | (bytes[1] & 0xFF); | |||
hiMant = ((unsigned long)(bytes[2] & 0xFF) << 24) | |||
int expon = ((bytes[0] & 0x7F) << 8) | (bytes[1] & 0xFF); | |||
int hiMant = ((unsigned long)(bytes[2] & 0xFF) << 24) | |||
| ((unsigned long)(bytes[3] & 0xFF) << 16) | |||
| ((unsigned long)(bytes[4] & 0xFF) << 8) | |||
| ((unsigned long)(bytes[5] & 0xFF)); | |||
loMant = ((unsigned long)(bytes[6] & 0xFF) << 24) | |||
int loMant = ((unsigned long)(bytes[6] & 0xFF) << 24) | |||
| ((unsigned long)(bytes[7] & 0xFF) << 16) | |||
| ((unsigned long)(bytes[8] & 0xFF) << 8) | |||
| ((unsigned long)(bytes[9] & 0xFF)); |
@@ -320,7 +320,6 @@ static int no_tonic; | |||
static void count_pitch_vowels(int start, int end, int clause_end) | |||
{ | |||
int ix; | |||
int stress; | |||
int max_stress = 0; | |||
int max_stress_posn = 0; // last syllable ot the highest stress | |||
@@ -331,7 +330,7 @@ static void count_pitch_vowels(int start, int end, int clause_end) | |||
number_tail = 0; // number between tonic syllable and next primary | |||
last_primary = -1; | |||
for (ix = start; ix < end; ix++) { | |||
for (int ix = start; ix < end; ix++) { | |||
stress = syllable_tab[ix].stress; // marked stress level | |||
if (stress >= max_stress) { | |||
@@ -388,19 +387,18 @@ static int count_increments(int ix, int end_ix, int min_stress) | |||
// Set the pitch of a vowel in syllable_tab | |||
static void set_pitch(SYLLABLE *syl, int base, int drop) | |||
{ | |||
int pitch1, pitch2; | |||
int flags = 0; | |||
if (base < 0) base = 0; | |||
pitch2 = base; | |||
int pitch2 = base; | |||
if (drop < 0) { | |||
flags = SYL_RISE; | |||
drop = -drop; | |||
} | |||
pitch1 = pitch2 + drop; | |||
int pitch1 = pitch2 + drop; | |||
if (pitch1 < 0) | |||
pitch1 = 0; | |||
@@ -414,8 +412,7 @@ static void set_pitch(SYLLABLE *syl, int base, int drop) | |||
static int CountUnstressed(int start, int end, int limit) | |||
{ | |||
int ix; | |||
int ix; | |||
for (ix = start; ix <= end; ix++) { | |||
if (syllable_tab[ix].stress >= limit) | |||
break; | |||
@@ -432,10 +429,7 @@ static int SetHeadIntonation(TUNE *tune, int syl_ix, int end_ix, int control) | |||
int increment = 0; | |||
int n_steps = 0; | |||
int stage; // onset, head, last | |||
int initial; | |||
int overflow_ix = 0; | |||
int pitch_range; | |||
int pitch_range_abs; | |||
int *drops; | |||
int n_unstressed = 0; | |||
int unstressed_ix = 0; | |||
@@ -444,10 +438,10 @@ static int SetHeadIntonation(TUNE *tune, int syl_ix, int end_ix, int control) | |||
int head_final = end_ix; | |||
int secondary = 2; | |||
pitch_range = (tune->head_end - tune->head_start) << 8; | |||
pitch_range_abs = abs(pitch_range); | |||
int pitch_range = (tune->head_end - tune->head_start) << 8; | |||
int pitch_range_abs = abs(pitch_range); | |||
drops = drops_0; // this should be controled by tune->head_drops | |||
initial = 1; | |||
int initial = 1; | |||
stage = 0; | |||
if (tune->onset == 255) | |||
@@ -551,8 +545,6 @@ static int calc_pitch_segment(int ix, int end_ix, TONE_HEAD *th, TONE_NUCLEUS *t | |||
int initial; | |||
int overflow = 0; | |||
int n_overflow; | |||
int pitch_range; | |||
int pitch_range_abs; | |||
int *drops; | |||
signed char *overflow_tab; | |||
SYLLABLE *syl; | |||
@@ -560,8 +552,8 @@ static int calc_pitch_segment(int ix, int end_ix, TONE_HEAD *th, TONE_NUCLEUS *t | |||
static signed char continue_tab[5] = { -26, 32, 20, 8, 0 }; | |||
drops = th->body_drops; | |||
pitch_range = (th->body_end - th->body_start) << 8; | |||
pitch_range_abs = abs(pitch_range); | |||
int pitch_range = (th->body_end - th->body_start) << 8; | |||
int pitch_range_abs = abs(pitch_range); | |||
if (continuing) { | |||
initial = 0; | |||
@@ -638,16 +630,12 @@ static void SetPitchGradient(int start_ix, int end_ix, int start_pitch, int end_ | |||
// Set a linear pitch change over a number of syllables. | |||
// Used for pre-head, unstressed syllables in the body, and the tail | |||
int ix; | |||
int stress; | |||
int pitch; | |||
int increment; | |||
int n_increments; | |||
int drop; | |||
SYLLABLE *syl; | |||
increment = (end_pitch - start_pitch) << 8; | |||
n_increments = end_ix - start_ix; | |||
int increment = (end_pitch - start_pitch) << 8; | |||
int n_increments = end_ix - start_ix; | |||
if (n_increments <= 0) | |||
return; | |||
@@ -655,9 +643,9 @@ static void SetPitchGradient(int start_ix, int end_ix, int start_pitch, int end_ | |||
if (n_increments > 1) | |||
increment = increment / n_increments; | |||
pitch = start_pitch << 8; | |||
int pitch = start_pitch << 8; | |||
for (ix = start_ix; ix < end_ix; ix++) { | |||
for (int ix = start_ix; ix < end_ix; ix++) { | |||
syl = &syllable_tab[ix]; | |||
stress = syl->stress; | |||
@@ -681,12 +669,10 @@ static void SetPitchGradient(int start_ix, int end_ix, int start_pitch, int end_ | |||
// Calculate pitch values for the vowels in this tone group | |||
static int calc_pitches2(int start, int end, int tune_number) | |||
{ | |||
int ix; | |||
TUNE *tune; | |||
int drop; | |||
tune = &tunes[tune_number]; | |||
ix = start; | |||
int ix = start; | |||
// vowels before the first primary stress | |||
@@ -704,6 +690,7 @@ static int calc_pitches2(int start, int end, int tune_number) | |||
// tonic syllable | |||
int drop; | |||
if (number_tail == 0) { | |||
tone_pitch_env = tune->nucleus0_env; | |||
drop = tune->nucleus0_max - tune->nucleus0_min; | |||
@@ -728,10 +715,8 @@ static int calc_pitches2(int start, int end, int tune_number) | |||
// Calculate pitch values for the vowels in this tone group | |||
static int calc_pitches(int control, int start, int end, int tune_number) | |||
{ | |||
int ix; | |||
TONE_HEAD *th; | |||
TONE_NUCLEUS *tn; | |||
int drop; | |||
int continuing = 0; | |||
if (control == 0) | |||
@@ -742,7 +727,7 @@ static int calc_pitches(int control, int start, int end, int tune_number) | |||
th = &tone_head_table[tune_number]; | |||
tn = &tone_nucleus_table[tune_number]; | |||
ix = start; | |||
int ix = start; | |||
// vowels before the first primary stress | |||
@@ -763,6 +748,7 @@ static int calc_pitches(int control, int start, int end, int tune_number) | |||
if (tn->flags & T_EMPH) | |||
syllable_tab[ix].flags |= SYL_EMPHASIS; | |||
int drop; | |||
if (number_tail == 0) { | |||
tone_pitch_env = tn->pitch_env0; | |||
drop = tn->tonic_max0 - tn->tonic_min0; | |||
@@ -789,7 +775,6 @@ static void CalcPitches_Tone(Translator *tr, int clause_tone) | |||
// clause_tone: 0=. 1=, 2=?, 3=! 4=none | |||
PHONEME_LIST *p; | |||
int ix; | |||
int count_stressed = 0; | |||
int final_stressed = 0; | |||
@@ -808,7 +793,7 @@ static void CalcPitches_Tone(Translator *tr, int clause_tone) | |||
// count number of stressed syllables | |||
p = &phoneme_list[0]; | |||
for (ix = 0; ix < n_phoneme_list; ix++, p++) { | |||
for (int ix = 0; ix < n_phoneme_list; ix++, p++) { | |||
if ((p->type == phVOWEL) && (p->stresslevel >= 4)) { | |||
if (count_stressed == 0) | |||
final_stressed = ix; | |||
@@ -837,7 +822,7 @@ static void CalcPitches_Tone(Translator *tr, int clause_tone) | |||
prev_tph = prevw_tph = phoneme_tab[phonPAUSE]; | |||
// perform tone sandhi | |||
for (ix = 0; ix < n_phoneme_list; ix++, p++) { | |||
for (int ix = 0; ix < n_phoneme_list; ix++, p++) { | |||
if ((p->type == phPAUSE) && (p->ph->std_length > 50)) { | |||
pause = 1; // there is a pause since the previous vowel | |||
prevw_tph = phoneme_tab[phonPAUSE]; // forget previous tone | |||
@@ -902,7 +887,7 @@ static void CalcPitches_Tone(Translator *tr, int clause_tone) | |||
// convert tone numbers to pitch | |||
p = &phoneme_list[0]; | |||
for (ix = 0; ix < n_phoneme_list; ix++, p++) { | |||
for (int ix = 0; ix < n_phoneme_list; ix++, p++) { | |||
if (p->synthflags & SFLAG_SYLLABLE) { | |||
tone_ph = p->tone_ph; | |||
@@ -936,24 +921,21 @@ void CalcPitches(Translator *tr, int clause_type) | |||
int ix; | |||
int x; | |||
int st_ix; | |||
int n_st; | |||
int option; | |||
int group_tone; | |||
int group_tone_comma; | |||
int ph_start = 0; | |||
int st_start; | |||
int st_clause_end; | |||
int count; | |||
int n_primary; | |||
int count_primary; | |||
PHONEME_TAB *ph; | |||
int ph_end = n_phoneme_list; | |||
SYLLABLE syllable_tab2[N_PHONEME_LIST]; | |||
syllable_tab = syllable_tab2; // don't use permanent storage. it's only needed during the call of CalcPitches() | |||
n_st = 0; | |||
n_primary = 0; | |||
int n_st = 0; | |||
int n_primary = 0; | |||
for (ix = 0; ix < (n_phoneme_list-1); ix++) { | |||
p = &phoneme_list[ix]; | |||
if (p->synthflags & SFLAG_SYLLABLE) { | |||
@@ -994,8 +976,8 @@ void CalcPitches(Translator *tr, int clause_type) | |||
else | |||
no_tonic = 0; | |||
st_start = 0; | |||
count_primary = 0; | |||
int st_start = 0; | |||
int count_primary = 0; | |||
for (st_ix = 0; st_ix < n_st; st_ix++) { | |||
syl = &syllable_tab[st_ix]; | |||
@@ -127,9 +127,7 @@ static short natural_samples[100] = { | |||
static double resonator(resonator_ptr r, double input) | |||
{ | |||
double x; | |||
x = (double)((double)r->a * (double)input + (double)r->b * (double)r->p1 + (double)r->c * (double)r->p2); | |||
double x = (double)((double)r->a * (double)input + (double)r->b * (double)r->p1 + (double)r->c * (double)r->p2); | |||
r->p2 = (double)r->p1; | |||
r->p1 = (double)x; | |||
@@ -138,9 +136,7 @@ static double resonator(resonator_ptr r, double input) | |||
static double resonator2(resonator_ptr r, double input) | |||
{ | |||
double x; | |||
x = (double)((double)r->a * (double)input + (double)r->b * (double)r->p1 + (double)r->c * (double)r->p2); | |||
double x = (double)((double)r->a * (double)input + (double)r->b * (double)r->p1 + (double)r->c * (double)r->p2); | |||
r->p2 = (double)r->p1; | |||
r->p1 = (double)x; | |||
@@ -177,15 +173,12 @@ static double antiresonator2(resonator_ptr r, double input) | |||
static void flutter(klatt_frame_ptr frame) | |||
{ | |||
static int time_count; | |||
double delta_f0; | |||
double fla, flb, flc, fld, fle; | |||
fla = (double)kt_globals.f0_flutter / 50; | |||
flb = (double)kt_globals.original_f0 / 100; | |||
flc = sin(PI*12.7*time_count); // because we are calling flutter() more frequently, every 2.9mS | |||
fld = sin(PI*7.1*time_count); | |||
fle = sin(PI*4.7*time_count); | |||
delta_f0 = fla * flb * (flc + fld + fle) * 10; | |||
double fla = (double)kt_globals.f0_flutter / 50; | |||
double flb = (double)kt_globals.original_f0 / 100; | |||
double flc = sin(PI*12.7*time_count); // because we are calling flutter() more frequently, every 2.9mS | |||
double fld = sin(PI*7.1*time_count); | |||
double fle = sin(PI*4.7*time_count); | |||
double delta_f0 = fla * flb * (flc + fld + fle) * 10; | |||
frame->F0hz10 = frame->F0hz10 + (long)delta_f0; | |||
time_count++; | |||
} | |||
@@ -199,13 +192,7 @@ static void flutter(klatt_frame_ptr frame) | |||
static double sampled_source(int source_num) | |||
{ | |||
int itemp; | |||
double ftemp; | |||
double result; | |||
double diff_value; | |||
int current_value; | |||
int next_value; | |||
double temp_diff; | |||
short *samples; | |||
if (source_num == 0) { | |||
@@ -217,17 +204,17 @@ static double sampled_source(int source_num) | |||
} | |||
if (kt_globals.T0 != 0) { | |||
ftemp = (double)kt_globals.nper; | |||
double ftemp = (double)kt_globals.nper; | |||
ftemp = ftemp / kt_globals.T0; | |||
ftemp = ftemp * kt_globals.num_samples; | |||
itemp = (int)ftemp; | |||
int itemp = (int)ftemp; | |||
temp_diff = ftemp - (double)itemp; | |||
double temp_diff = ftemp - (double)itemp; | |||
current_value = samples[itemp]; | |||
next_value = samples[itemp+1]; | |||
int current_value = samples[itemp]; | |||
int next_value = samples[itemp+1]; | |||
diff_value = (double)next_value - (double)current_value; | |||
double diff_value = (double)next_value - (double)current_value; | |||
diff_value = diff_value * temp_diff; | |||
result = samples[itemp] + diff_value; | |||
@@ -559,13 +546,12 @@ static double impulsive_source() | |||
static double natural_source() | |||
{ | |||
double lgtemp; | |||
static double vwave; | |||
if (kt_globals.nper < kt_globals.nopen) { | |||
kt_globals.pulse_shape_a -= kt_globals.pulse_shape_b; | |||
vwave += kt_globals.pulse_shape_a; | |||
lgtemp = vwave * 0.028; | |||
double lgtemp = vwave * 0.028; | |||
return lgtemp; | |||
} | |||
@@ -721,12 +707,9 @@ static void pitch_synch_par_reset(klatt_frame_ptr frame) | |||
static void setabc(long int f, long int bw, resonator_ptr rp) | |||
{ | |||
double r; | |||
double arg; | |||
// Let r = exp(-pi bw t) | |||
arg = kt_globals.minus_pi_t * bw; | |||
r = exp(arg); | |||
double arg = kt_globals.minus_pi_t * bw; | |||
double r = exp(arg); | |||
// Let c = -r**2 | |||
rp->c = -(r * r); | |||
@@ -748,15 +731,12 @@ static void setabc(long int f, long int bw, resonator_ptr rp) | |||
static void setzeroabc(long int f, long int bw, resonator_ptr rp) | |||
{ | |||
double r; | |||
double arg; | |||
f = -f; | |||
// First compute ordinary resonator coefficients | |||
// Let r = exp(-pi bw t) | |||
arg = kt_globals.minus_pi_t * bw; | |||
r = exp(arg); | |||
double arg = kt_globals.minus_pi_t * bw; | |||
double r = exp(arg); | |||
// Let c = -r**2 | |||
rp->c = -(r * r); | |||
@@ -791,10 +771,9 @@ static void setzeroabc(long int f, long int bw, resonator_ptr rp) | |||
static double gen_noise(double noise) | |||
{ | |||
long temp; | |||
static double nlast; | |||
temp = (long)getrandom(-8191, 8191); | |||
long temp = (long)getrandom(-8191, 8191); | |||
kt_globals.nrand = (long)temp; | |||
noise = kt_globals.nrand + (0.75 * nlast); | |||
@@ -1063,14 +1042,11 @@ int Wavegen_Klatt2(int length, int modulation, int resume, frame_t *fr1, frame_t | |||
void KlattInit() | |||
{ | |||
static short formant_hz[10] = { 280, 688, 1064, 2806, 3260, 3700, 6500, 7000, 8000, 280 }; | |||
static short bandwidth[10] = { 89, 160, 70, 160, 200, 200, 500, 500, 500, 89 }; | |||
static short parallel_amp[10] = { 0, 59, 59, 59, 59, 59, 59, 0, 0, 0 }; | |||
static short parallel_bw[10] = { 59, 59, 89, 149, 200, 200, 500, 0, 0, 0 }; | |||
int ix; | |||
sample_count = 0; | |||
kt_globals.synthesis_model = CASCADE_PARALLEL; | |||
@@ -1088,7 +1064,7 @@ void KlattInit() | |||
KlattReset(2); | |||
// set default values for frame parameters | |||
for (ix = 0; ix <= 9; ix++) { | |||
for (int ix = 0; ix <= 9; ix++) { | |||
kt_frame.Fhz[ix] = formant_hz[ix]; | |||
kt_frame.Bhz[ix] = bandwidth[ix]; | |||
kt_frame.Ap[ix] = parallel_amp[ix]; |
@@ -123,7 +123,7 @@ static void close_pipes(int p1[2], int p2[2], int p3[2]) | |||
static int start_mbrola(const char *voice_path) | |||
{ | |||
int error, p_stdin[2], p_stdout[2], p_stderr[2]; | |||
int p_stdin[2], p_stdout[2], p_stderr[2]; | |||
ssize_t written; | |||
char charbuf[20]; | |||
@@ -132,7 +132,7 @@ static int start_mbrola(const char *voice_path) | |||
return -1; | |||
} | |||
error = create_pipes(p_stdin, p_stdout, p_stderr); | |||
int error = create_pipes(p_stdin, p_stdout, p_stderr); | |||
if (error) | |||
return -1; | |||
@@ -146,8 +146,6 @@ static int start_mbrola(const char *voice_path) | |||
} | |||
if (mbr_pid == 0) { | |||
int i; | |||
if (dup2(p_stdin[0], 0) == -1 || | |||
dup2(p_stdout[1], 1) == -1 || | |||
dup2(p_stderr[1], 2) == -1) { | |||
@@ -157,8 +155,7 @@ static int start_mbrola(const char *voice_path) | |||
(void)written; // suppress 'variable not used' warning | |||
_exit(1); | |||
} | |||
for (i = p_stderr[1]; i > 2; i--) | |||
for (int i = p_stderr[1]; i > 2; i--) | |||
close(i); | |||
signal(SIGHUP, SIG_IGN); | |||
signal(SIGINT, SIG_IGN); | |||
@@ -242,7 +239,7 @@ static void free_pending_data(void) | |||
static int mbrola_died(void) | |||
{ | |||
pid_t pid; | |||
int status, len; | |||
int status; | |||
const char *msg; | |||
char msgbuf[80]; | |||
@@ -269,7 +266,7 @@ static int mbrola_died(void) | |||
log("mbrowrap error: %s", msg); | |||
len = strlen(mbr_errorbuf); | |||
size_t len = strlen(mbr_errorbuf); | |||
if (!len) | |||
snprintf(mbr_errorbuf, sizeof(mbr_errorbuf), "%s", msg); | |||
else | |||
@@ -326,12 +323,11 @@ static int mbrola_has_errors(void) | |||
static int send_to_mbrola(const char *cmd) | |||
{ | |||
ssize_t result; | |||
int len; | |||
if (!mbr_pid) | |||
return -1; | |||
len = strlen(cmd); | |||
int len = strlen(cmd); | |||
result = write(mbr_cmd_fd, cmd, len); | |||
if (result == -1) { | |||
@@ -481,14 +477,13 @@ static ssize_t receive_from_mbrola(void *buffer, size_t bufsize) | |||
int init_MBR(const char *voice_path) | |||
{ | |||
int error, result; | |||
unsigned char wavhdr[45]; | |||
error = start_mbrola(voice_path); | |||
int error = start_mbrola(voice_path); | |||
if (error) | |||
return -1; | |||
result = send_to_mbrola("#\n"); | |||
int result = send_to_mbrola("#\n"); | |||
if (result != 2) { | |||
stop_mbrola(); | |||
return -1; | |||
@@ -533,7 +528,7 @@ void close_MBR(void) | |||
int reset_MBR() | |||
{ | |||
int result, success = 1; | |||
int success = 1; | |||
char dummybuf[4096]; | |||
if (mbr_state == MBR_IDLE) | |||
@@ -543,7 +538,7 @@ int reset_MBR() | |||
if (kill(mbr_pid, SIGUSR1) == -1) | |||
success = 0; | |||
free_pending_data(); | |||
result = write(mbr_cmd_fd, "\n#\n", 3); | |||
int result = write(mbr_cmd_fd, "\n#\n", 3); | |||
if (result != 3) | |||
success = 0; | |||
do { | |||
@@ -597,10 +592,9 @@ void setVolumeRatio_MBR(float value) | |||
int lastErrorStr_MBR(char *buffer, int bufsize) | |||
{ | |||
int result; | |||
if (mbr_pid) | |||
mbrola_has_errors(); | |||
result = snprintf(buffer, bufsize, "%s", mbr_errorbuf); | |||
int result = snprintf(buffer, bufsize, "%s", mbr_errorbuf); | |||
return result >= bufsize ? (bufsize - 1) : result; | |||
} | |||
@@ -390,12 +390,11 @@ static const unsigned short letter_accents_250[] = { | |||
static int LookupLetter2(Translator *tr, unsigned int letter, char *ph_buf) | |||
{ | |||
int len; | |||
char single_letter[10]; | |||
single_letter[0] = 0; | |||
single_letter[1] = '_'; | |||
len = utf8_out(letter, &single_letter[2]); | |||
int len = utf8_out(letter, &single_letter[2]); | |||
single_letter[len+2] = ' '; | |||
single_letter[len+3] = 0; | |||
@@ -478,13 +477,12 @@ void LookupLetter(Translator *tr, unsigned int letter, int next_byte, char *ph_b | |||
{ | |||
// control, bit 0: not the first letter of a word | |||
int len; | |||
static char single_letter[10] = { 0, 0 }; | |||
unsigned int dict_flags[2]; | |||
char ph_buf3[40]; | |||
ph_buf1[0] = 0; | |||
len = utf8_out(letter, &single_letter[2]); | |||
int len = utf8_out(letter, &single_letter[2]); | |||
single_letter[len+2] = ' '; | |||
if (next_byte == -1) { | |||
@@ -651,10 +649,8 @@ static const char *hex_letters[] = { | |||
int IsSuperscript(int letter) | |||
{ | |||
// is this a subscript or superscript letter ? | |||
int ix; | |||
int c; | |||
for (ix = 0; (c = derived_letters[ix]) != 0; ix += 2) { | |||
for (int ix = 0; (c = derived_letters[ix]) != 0; ix += 2) { | |||
if (c > letter) | |||
break; | |||
if (c == letter) | |||
@@ -671,7 +667,6 @@ int TranslateLetter(Translator *tr, char *word, char *phonemes, int control) | |||
// bit 1: say 'capital' | |||
// bit 2: say character code for unknown letters | |||
int n_bytes; | |||
int letter; | |||
int len; | |||
int ix; | |||
@@ -680,11 +675,8 @@ int TranslateLetter(Translator *tr, char *word, char *phonemes, int control) | |||
char *pbuf; | |||
const char *modifier; | |||
ALPHABET *alphabet; | |||
int al_offset; | |||
int al_flags; | |||
int language; | |||
int number; | |||
int phontab_1; | |||
int speak_letter_number; | |||
char capital[30]; | |||
char ph_buf[80]; | |||
@@ -696,9 +688,9 @@ int TranslateLetter(Translator *tr, char *word, char *phonemes, int control) | |||
ph_buf[0] = 0; | |||
ph_alphabet[0] = 0; | |||
capital[0] = 0; | |||
phontab_1 = translator->phoneme_tab_ix; | |||
int phontab_1 = translator->phoneme_tab_ix; | |||
n_bytes = utf8_in(&letter, word); | |||
int n_bytes = utf8_in(&letter, word); | |||
if ((letter & 0xfff00) == 0x0e000) | |||
letter &= 0xff; // uncode private usage area | |||
@@ -746,8 +738,8 @@ int TranslateLetter(Translator *tr, char *word, char *phonemes, int control) | |||
LookupLetter(tr, number, 0, ph_buf, control & 1); | |||
} | |||
al_offset = 0; | |||
al_flags = 0; | |||
int al_offset = 0; | |||
int al_flags = 0; | |||
if ((alphabet = AlphabetFromChar(letter)) != NULL) { | |||
al_offset = alphabet->offset; | |||
al_flags = alphabet->flags; | |||
@@ -911,7 +903,6 @@ void SetSpellingStress(Translator *tr, char *phonemes, int control, int n_chars) | |||
unsigned int c; | |||
int n_stress = 0; | |||
int prev = 0; | |||
int count; | |||
unsigned char buf[N_WORD_PHONEMES]; | |||
for (ix = 0; (c = phonemes[ix]) != 0; ix++) { | |||
@@ -921,7 +912,7 @@ void SetSpellingStress(Translator *tr, char *phonemes, int control, int n_chars) | |||
} | |||
buf[ix] = 0; | |||
count = 0; | |||
int count = 0; | |||
prev = 0; | |||
for (ix = 0; (c = buf[ix]) != 0; ix++) { | |||
if ((c == phonSTRESS_P) && (n_chars > 1) && (prev != phonSWITCH)) { | |||
@@ -1028,10 +1019,7 @@ int TranslateRoman(Translator *tr, char *word, char *ph_out, WORD_TAB *wtab) | |||
int c; | |||
char *p; | |||
const char *p2; | |||
int acc; | |||
int prev; | |||
int value; | |||
int subtract; | |||
int repeat = 0; | |||
int n_digits = 0; | |||
char *word_start; | |||
@@ -1043,9 +1031,9 @@ int TranslateRoman(Translator *tr, char *word, char *ph_out, WORD_TAB *wtab) | |||
static const char *roman_numbers = "ixcmvld"; | |||
static int roman_values[] = { 1, 10, 100, 1000, 5, 50, 500 }; | |||
acc = 0; | |||
prev = 0; | |||
subtract = 0x7fff; | |||
int acc = 0; | |||
int prev = 0; | |||
int subtract = 0x7fff; | |||
ph_out[0] = 0; | |||
flags[0] = 0; | |||
flags[1] = 0; | |||
@@ -1283,11 +1271,7 @@ static int LookupNum2(Translator *tr, int value, int thousandplex, const int con | |||
// bit 8 followed by decimal fraction | |||
// bit 9: use #f form for both tens and units (lang=ml) | |||
int found; | |||
int ix; | |||
int units; | |||
int tens; | |||
int is_ordinal; | |||
int used_and = 0; | |||
int found_ordinal = 0; | |||
int next_phtype; | |||
@@ -1298,10 +1282,10 @@ static int LookupNum2(Translator *tr, int value, int thousandplex, const int con | |||
char ph_digits[50]; | |||
char ph_and[12]; | |||
units = value % 10; | |||
tens = value / 10; | |||
int units = value % 10; | |||
int tens = value / 10; | |||
found = 0; | |||
int found = 0; | |||
ph_ordinal[0] = 0; | |||
ph_tens[0] = 0; | |||
ph_digits[0] = 0; | |||
@@ -1310,7 +1294,7 @@ static int LookupNum2(Translator *tr, int value, int thousandplex, const int con | |||
if (control & 0x20) | |||
ord_type = 'q'; | |||
is_ordinal = control & 1; | |||
int is_ordinal = control & 1; | |||
if ((control & 2) && (n_digit_lookup == 2)) { | |||
// pronunciation of the final 2 digits has already been found | |||
@@ -1524,15 +1508,8 @@ static int LookupNum3(Translator *tr, int value, char *ph_out, int suppress_null | |||
// bit 8 followed by decimal fraction | |||
int found; | |||
int hundreds; | |||
int tensunits; | |||
int x; | |||
int ix; | |||
int exact; | |||
int ordinal; | |||
int tplex; | |||
int say_zero_hundred = 0; | |||
int say_one_hundred; | |||
char string[12]; // for looking up entries in **_list | |||
char buf1[100]; | |||
char buf2[100]; | |||
@@ -1543,9 +1520,9 @@ static int LookupNum3(Translator *tr, int value, char *ph_out, int suppress_null | |||
char ph_hundred_and[12]; | |||
char ph_thousand_and[12]; | |||
ordinal = control & 0x22; | |||
hundreds = value / 100; | |||
tensunits = value % 100; | |||
int ordinal = control & 0x22; | |||
int hundreds = value / 100; | |||
int tensunits = value % 100; | |||
buf1[0] = 0; | |||
ph_thousands[0] = 0; | |||
@@ -1574,11 +1551,11 @@ static int LookupNum3(Translator *tr, int value, char *ph_out, int suppress_null | |||
} else if (hundreds >= 10) { | |||
ph_digits[0] = 0; | |||
exact = 0; | |||
int exact = 0; | |||
if ((value % 1000) == 0) | |||
exact = 1; | |||
tplex = thousandplex+1; | |||
int tplex = thousandplex+1; | |||
if (tr->langopts.numbers2 & NUM2_MYRIADS) | |||
tplex = 0; | |||
@@ -1646,7 +1623,7 @@ static int LookupNum3(Translator *tr, int value, char *ph_out, int suppress_null | |||
if (found) | |||
ph_100[0] = 0; | |||
else { | |||
say_one_hundred = 1; | |||
int say_one_hundred = 1; | |||
if (hundreds == 1) { | |||
if ((tr->langopts.numbers & NUM_OMIT_1_HUNDRED) != 0) | |||
say_one_hundred = 0; | |||
@@ -1704,7 +1681,7 @@ static int LookupNum3(Translator *tr, int value, char *ph_out, int suppress_null | |||
} | |||
} else { | |||
if (ph_ordinal2[0] != 0) { | |||
ix = strlen(buf1); | |||
int ix = strlen(buf1); | |||
if ((ix > 0) && (buf1[ix-1] == phonPAUSE_SHORT)) | |||
buf1[ix-1] = 0; // remove pause before addding ordinal suffix | |||
strcpy(buf2, ph_ordinal2); |
@@ -43,7 +43,7 @@ static int SubstitutePhonemes(Translator *tr, PHONEME_LIST *plist_out) | |||
{ | |||
// Copy the phonemes list and perform any substitutions that are required for the | |||
// current voice | |||
int ix; | |||
int k; | |||
int replace_flags; | |||
int n_plist_out = 0; | |||
@@ -51,7 +51,7 @@ static int SubstitutePhonemes(Translator *tr, PHONEME_LIST *plist_out) | |||
PHONEME_LIST2 *plist2; | |||
PHONEME_TAB *next = NULL; | |||
for (ix = 0; (ix < n_ph_list2) && (n_plist_out < N_PHONEME_LIST); ix++) { | |||
for (int ix = 0; (ix < n_ph_list2) && (n_plist_out < N_PHONEME_LIST); ix++) { | |||
plist2 = &ph_list2[ix]; | |||
// don't do any substitution if the language has been temporarily changed | |||
@@ -108,19 +108,13 @@ void MakePhonemeList(Translator *tr, int post_pause, int start_sentence) | |||
PHONEME_TAB *next, *next2; | |||
int unstress_count = 0; | |||
int word_stress = 0; | |||
int current_phoneme_tab; | |||
int max_stress; | |||
int voicing; | |||
int regression; | |||
int end_sourceix; | |||
int alternative; | |||
int delete_count; | |||
int word_start; | |||
int inserted; | |||
int deleted; | |||
PHONEME_DATA phdata; | |||
int n_ph_list3; | |||
PHONEME_LIST *plist3; | |||
PHONEME_LIST *plist3_inserted = NULL; | |||
PHONEME_LIST ph_list3[N_PHONEME_LIST]; | |||
@@ -131,10 +125,10 @@ void MakePhonemeList(Translator *tr, int post_pause, int start_sentence) | |||
memset(&worddata, 0, sizeof(worddata)); | |||
plist2 = ph_list2; | |||
phlist = phoneme_list; | |||
end_sourceix = plist2[n_ph_list2-1].sourceix; | |||
int end_sourceix = plist2[n_ph_list2-1].sourceix; | |||
// is the last word of the clause unstressed ? | |||
max_stress = 0; | |||
int max_stress = 0; | |||
for (j = n_ph_list2-3; j >= 0; j--) { | |||
// start with the last phoneme (before the terminating pauses) and move backwards | |||
if ((plist2[j].stresslevel & 0x7f) > max_stress) | |||
@@ -157,8 +151,8 @@ void MakePhonemeList(Translator *tr, int post_pause, int start_sentence) | |||
} | |||
// look for switch of phoneme tables | |||
delete_count = 0; | |||
current_phoneme_tab = tr->phoneme_tab_ix; | |||
int delete_count = 0; | |||
int current_phoneme_tab = tr->phoneme_tab_ix; | |||
for (j = 0; j < n_ph_list2; j++) { | |||
if (current_phoneme_tab != tr->phoneme_tab_ix) | |||
plist2[j].synthflags |= SFLAG_SWITCHED_LANG; | |||
@@ -250,7 +244,7 @@ void MakePhonemeList(Translator *tr, int post_pause, int start_sentence) | |||
} | |||
} | |||
n_ph_list3 = SubstitutePhonemes(tr, ph_list3) - 2; | |||
int n_ph_list3 = SubstitutePhonemes(tr, ph_list3) - 2; | |||
for (j = 0; (j < n_ph_list3) && (ix < N_PHONEME_LIST-3);) { | |||
if (ph_list3[j].sourceix) { | |||
@@ -278,7 +272,7 @@ void MakePhonemeList(Translator *tr, int post_pause, int start_sentence) | |||
// transfer all the phonemes of the clause into phoneme_list | |||
ph = phoneme_tab[phonPAUSE]; | |||
ph_list3[0].ph = ph; | |||
word_start = 1; | |||
int word_start = 1; | |||
for (j = 0; insert_ph || ((j < n_ph_list3) && (ix < N_PHONEME_LIST-3)); j++) { | |||
plist3 = &ph_list3[j]; |
@@ -321,7 +321,6 @@ int iswalnum(int c) | |||
int towlower(int c) | |||
{ | |||
int x; | |||
int ix; | |||
if (c < 0x80) | |||
return tolower(c); | |||
@@ -331,7 +330,7 @@ int towlower(int c) | |||
if (x == 0xfd) { | |||
// special cases, lookup translation table | |||
for (ix = 0; wchar_tolower[ix] != 0; ix += 2) { | |||
for (int ix = 0; wchar_tolower[ix] != 0; ix += 2) { | |||
if (wchar_tolower[ix] == c) | |||
return wchar_tolower[ix+1]; | |||
} | |||
@@ -341,13 +340,12 @@ int towlower(int c) | |||
int towupper(int c) | |||
{ | |||
int ix; | |||
// check whether a previous character code is the upper-case equivalent of this character | |||
if (towlower(c-32) == c) | |||
return c-32; // yes, use it | |||
if (towlower(c-1) == c) | |||
return c-1; | |||
for (ix = 0; wchar_toupper[ix] != 0; ix += 2) { | |||
for (int ix = 0; wchar_toupper[ix] != 0; ix += 2) { | |||
if (wchar_toupper[ix] == c) | |||
return wchar_toupper[ix+1]; | |||
} | |||
@@ -465,7 +463,6 @@ int iswupper2(int c) | |||
int towlower2(unsigned int c) | |||
{ | |||
int x; | |||
int ix; | |||
// check for non-standard upper to lower case conversions | |||
if (c == 'I') { | |||
@@ -484,7 +481,7 @@ int towlower2(unsigned int c) | |||
if (x == 0xfd) { | |||
// special cases, lookup translation table | |||
for (ix = 0; wchar_tolower[ix] != 0; ix += 2) { | |||
for (int ix = 0; wchar_tolower[ix] != 0; ix += 2) { | |||
if (wchar_tolower[ix] == (int)c) | |||
return wchar_tolower[ix+1]; | |||
} | |||
@@ -494,7 +491,6 @@ int towlower2(unsigned int c) | |||
int towupper2(unsigned int c) | |||
{ | |||
int ix; | |||
if (c > MAX_WALPHA) | |||
return towupper(c); | |||
@@ -503,7 +499,7 @@ int towupper2(unsigned int c) | |||
return c-32; // yes, use it | |||
if (towlower2(c-1) == (int)c) | |||
return c-1; | |||
for (ix = 0; wchar_toupper[ix] != 0; ix += 2) { | |||
for (int ix = 0; wchar_toupper[ix] != 0; ix += 2) { | |||
if (wchar_toupper[ix] == (int)c) | |||
return wchar_toupper[ix+1]; | |||
} | |||
@@ -543,14 +539,13 @@ int Eof(void) | |||
static int GetC_get(void) | |||
{ | |||
unsigned int c; | |||
unsigned int c2; | |||
if (f_input != NULL) { | |||
c = fgetc(f_input); | |||
if (feof(f_input)) c = ' '; | |||
if (option_multibyte == espeakCHARS_16BIT) { | |||
c2 = fgetc(f_input); | |||
unsigned int c2 = fgetc(f_input); | |||
if (feof(f_input)) c2 = 0; | |||
c = c + (c2 << 8); | |||
} | |||
@@ -588,12 +583,10 @@ static int GetC(void) | |||
// Returns a unicode wide character | |||
// Performs UTF8 checking and conversion | |||
int c; | |||
int c1; | |||
int c2; | |||
int cbuf[4]; | |||
int ix; | |||
int n_bytes; | |||
static int ungot2 = 0; | |||
static const unsigned char mask[4] = { 0xff, 0x1f, 0x0f, 0x07 }; | |||
@@ -615,7 +608,7 @@ static int GetC(void) | |||
if ((option_multibyte < 2) && (c1 & 0x80)) { | |||
// multi-byte utf8 encoding, convert to unicode | |||
n_bytes = 0; | |||
int n_bytes = 0; | |||
if (((c1 & 0xe0) == 0xc0) && ((c1 & 0x1e) != 0)) | |||
n_bytes = 1; | |||
@@ -625,7 +618,7 @@ static int GetC(void) | |||
n_bytes = 3; | |||
if ((ix = n_bytes) > 0) { | |||
c = c1 & mask[ix]; | |||
int c = c1 & mask[ix]; | |||
while (ix > 0) { | |||
if ((c2 = cbuf[ix] = GetC_get()) == 0) { | |||
if (option_multibyte == espeakCHARS_AUTO) | |||
@@ -669,12 +662,12 @@ static void UngetC(int c) | |||
const char *WordToString2(unsigned int word) | |||
{ | |||
// Convert a language mnemonic word into a string | |||
int ix; | |||
static char buf[5]; | |||
char *p; | |||
p = buf; | |||
for (ix = 3; ix >= 0; ix--) { | |||
for (int ix = 3; ix >= 0; ix--) { | |||
if ((*p = word >> (ix*8)) != 0) | |||
p++; | |||
} | |||
@@ -704,7 +697,6 @@ static const char *LookupCharName(Translator *tr, int c, int only) | |||
// Find the phoneme string (in ascii) to speak the name of character c | |||
// Used for punctuation characters and symbols | |||
int ix; | |||
unsigned int flags[2]; | |||
char single_letter[24]; | |||
char phonemes[60]; | |||
@@ -718,7 +710,7 @@ static const char *LookupCharName(Translator *tr, int c, int only) | |||
flags[1] = 0; | |||
single_letter[0] = 0; | |||
single_letter[1] = '_'; | |||
ix = utf8_out(c, &single_letter[2]); | |||
int ix = utf8_out(c, &single_letter[2]); | |||
single_letter[2+ix] = 0; | |||
if (only) { | |||
@@ -788,7 +780,6 @@ static int LoadSoundFile(const char *fname, int index) | |||
FILE *f; | |||
char *p; | |||
int *ip; | |||
int length; | |||
char fname_temp[100]; | |||
char fname2[sizeof(path_home)+13+40]; | |||
@@ -809,13 +800,12 @@ static int LoadSoundFile(const char *fname, int index) | |||
f = NULL; | |||
#ifdef PLATFORM_POSIX | |||
if ((f = fopen(fname, "rb")) != NULL) { | |||
int ix; | |||
int fd_temp; | |||
int header[3]; | |||
char command[sizeof(fname2)+sizeof(fname2)+40]; | |||
fseek(f, 20, SEEK_SET); | |||
for (ix = 0; ix < 3; ix++) | |||
for (int ix = 0; ix < 3; ix++) | |||
header[ix] = Read4Bytes(f); | |||
// if the sound file is not mono, 16 bit signed, at the correct sample rate, then convert it | |||
@@ -842,7 +832,7 @@ static int LoadSoundFile(const char *fname, int index) | |||
} | |||
} | |||
length = GetFileLength(fname); | |||
int length = GetFileLength(fname); | |||
fseek(f, 0, SEEK_SET); | |||
if ((p = (char *)realloc(soundicon_tab[index].data, length)) == NULL) { | |||
fclose(f); | |||
@@ -861,9 +851,7 @@ static int LoadSoundFile(const char *fname, int index) | |||
static int LookupSoundicon(int c) | |||
{ | |||
// Find the sound icon number for a punctuation chatacter | |||
int ix; | |||
for (ix = N_SOUNDICON_SLOTS; ix < n_soundicon_tab; ix++) { | |||
for (int ix = N_SOUNDICON_SLOTS; ix < n_soundicon_tab; ix++) { | |||
if (soundicon_tab[ix].name == c) { | |||
if (soundicon_tab[ix].length == 0) { | |||
if (LoadSoundFile(NULL, ix) != 0) | |||
@@ -880,7 +868,7 @@ static int LoadSoundFile2(const char *fname) | |||
// Load a sound file into one of the reserved slots in the sound icon table | |||
// (if it'snot already loaded) | |||
int ix; | |||
int ix; | |||
static int slot = -1; | |||
for (ix = 0; ix < n_soundicon_tab; ix++) { | |||
@@ -912,14 +900,11 @@ static int AnnouncePunctuation(Translator *tr, int c1, int *c2_ptr, char *output | |||
int soundicon; | |||
int attributes; | |||
int short_pause; | |||
int c2; | |||
int len; | |||
int bufix1; | |||
char buf[200]; | |||
char buf2[80]; | |||
char ph_buf[30]; | |||
c2 = *c2_ptr; | |||
int c2 = *c2_ptr; | |||
buf[0] = 0; | |||
if ((soundicon = LookupSoundicon(c1)) >= 0) { | |||
@@ -979,8 +964,8 @@ static int AnnouncePunctuation(Translator *tr, int c1, int *c2_ptr, char *output | |||
} | |||
} | |||
bufix1 = *bufix; | |||
len = strlen(buf); | |||
int bufix1 = *bufix; | |||
int len = strlen(buf); | |||
strcpy(&output[*bufix], buf); | |||
*bufix += len; | |||
@@ -1072,7 +1057,6 @@ static const char *VoiceFromStack() | |||
// Use the voice properties from the SSML stack to choose a voice, and switch | |||
// to that voice if it's not the current voice | |||
int ix; | |||
const char *p; | |||
SSML_STACK *sp; | |||
const char *v_id; | |||
@@ -1090,7 +1074,7 @@ static const char *VoiceFromStack() | |||
voice_select.variant = ssml_stack[0].voice_variant_number; | |||
voice_select.identifier = NULL; | |||
for (ix = 0; ix < n_ssml_stack; ix++) { | |||
for (int ix = 0; ix < n_ssml_stack; ix++) { | |||
sp = &ssml_stack[ix]; | |||
voice_name_specified = 0; | |||
@@ -1147,7 +1131,6 @@ static void ProcessParamStack(char *outbuf, int *outix) | |||
{ | |||
// Set the speech parameters from the parameter stack | |||
int param; | |||
int ix; | |||
int value; | |||
char buf[20]; | |||
int new_parameters[N_SPEECH_PARAM]; | |||
@@ -1156,7 +1139,7 @@ static void ProcessParamStack(char *outbuf, int *outix) | |||
for (param = 0; param < N_SPEECH_PARAM; param++) | |||
new_parameters[param] = -1; | |||
for (ix = 0; ix < n_param_stack; ix++) { | |||
for (int ix = 0; ix < n_param_stack; ix++) { | |||
for (param = 0; param < N_SPEECH_PARAM; param++) { | |||
if (param_stack[ix].parameter[param] >= 0) | |||
new_parameters[param] = param_stack[ix].parameter[param]; | |||
@@ -1193,7 +1176,6 @@ static void ProcessParamStack(char *outbuf, int *outix) | |||
static PARAM_STACK *PushParamStack(int tag_type) | |||
{ | |||
int ix; | |||
PARAM_STACK *sp; | |||
sp = ¶m_stack[n_param_stack]; | |||
@@ -1201,7 +1183,7 @@ static PARAM_STACK *PushParamStack(int tag_type) | |||
n_param_stack++; | |||
sp->type = tag_type; | |||
for (ix = 0; ix < N_SPEECH_PARAM; ix++) | |||
for (int ix = 0; ix < N_SPEECH_PARAM; ix++) | |||
sp->parameter[ix] = -1; | |||
return sp; | |||
} | |||
@@ -1209,13 +1191,12 @@ static PARAM_STACK *PushParamStack(int tag_type) | |||
static void PopParamStack(int tag_type, char *outbuf, int *outix) | |||
{ | |||
// unwind the stack up to and including the previous tag of this type | |||
int ix; | |||
int top = 0; | |||
if (tag_type >= SSML_CLOSE) | |||
tag_type -= SSML_CLOSE; | |||
for (ix = 0; ix < n_param_stack; ix++) { | |||
for (int ix = 0; ix < n_param_stack; ix++) { | |||
if (param_stack[ix].type == tag_type) | |||
top = ix; | |||
} | |||
@@ -1257,8 +1238,7 @@ static wchar_t *GetSsmlAttribute(wchar_t *pw, const char *name) | |||
static int attrcmp(const wchar_t *string1, const char *string2) | |||
{ | |||
int ix; | |||
int ix; | |||
if (string1 == NULL) | |||
return 1; | |||
@@ -1321,7 +1301,6 @@ static int attr_prosody_value(int param_type, const wchar_t *pw, int *value_out) | |||
{ | |||
int sign = 0; | |||
wchar_t *tail; | |||
double value; | |||
while (iswspace(*pw)) pw++; | |||
if (*pw == '+') { | |||
@@ -1332,7 +1311,7 @@ static int attr_prosody_value(int param_type, const wchar_t *pw, int *value_out) | |||
pw++; | |||
sign = -1; | |||
} | |||
value = (double)wcstod(pw, &tail); | |||
double value = (double)wcstod(pw, &tail); | |||
if (tail == pw) { | |||
// failed to find a number, return 100% | |||
*value_out = 100; | |||
@@ -1350,9 +1329,8 @@ static int attr_prosody_value(int param_type, const wchar_t *pw, int *value_out) | |||
#ifdef PLATFORM_RISCOS | |||
*value_out = 100; | |||
#else | |||
double x; | |||
// convert from semitones to a frequency percentage | |||
x = pow((double)2.0, (double)((value*sign)/12)) * 100; | |||
double x = pow((double)2.0, (double)((value*sign)/12)) * 100; | |||
*value_out = (int)x; | |||
#endif | |||
return 2; // percentage | |||
@@ -1495,7 +1473,6 @@ static int GetVoiceAttributes(wchar_t *pw, int tag_type) | |||
static void SetProsodyParameter(int param_type, wchar_t *attr1, PARAM_STACK *sp) | |||
{ | |||
int value; | |||
int sign; | |||
static const MNEM_TAB mnem_volume[] = { | |||
{ "default", 100 }, | |||
@@ -1546,7 +1523,7 @@ static void SetProsodyParameter(int param_type, wchar_t *attr1, PARAM_STACK *sp) | |||
// mnemonic specifies a value as a percentage of the base pitch/range/rate/volume | |||
sp->parameter[param_type] = (param_stack[0].parameter[param_type] * value)/100; | |||
} else { | |||
sign = attr_prosody_value(param_type, attr1, &value); | |||
int sign = attr_prosody_value(param_type, attr1, &value); | |||
if (sign == 0) | |||
sp->parameter[param_type] = value; // absolute value in Hz | |||
@@ -1571,14 +1548,13 @@ static int ReplaceKeyName(char *outbuf, int index, int *outix) | |||
{ NULL, 0 } | |||
}; | |||
int ix; | |||
int letter; | |||
char *p; | |||
p = &outbuf[index]; | |||
if ((letter = LookupMnem(keynames, p)) != 0) { | |||
ix = utf8_out(letter, p); | |||
int ix = utf8_out(letter, p); | |||
*outix = index + ix; | |||
return letter; | |||
} | |||
@@ -2560,8 +2536,6 @@ void InitNamedata(void) | |||
void InitText2(void) | |||
{ | |||
int param; | |||
ungot_char = 0; | |||
ungot_char2 = 0; | |||
@@ -2569,7 +2543,7 @@ void InitText2(void) | |||
n_param_stack = 1; | |||
ssml_stack[0].tag_type = 0; | |||
for (param = 0; param < N_SPEECH_PARAM; param++) | |||
for (int param = 0; param < N_SPEECH_PARAM; param++) | |||
speech_parameters[param] = param_stack[0].parameter[param]; // set all speech parameters to defaults | |||
option_punctuation = speech_parameters[espeakPUNCTUATION]; |
@@ -140,11 +140,7 @@ static int speed3 = 118; | |||
void SetSpeed(int control) | |||
{ | |||
int x; | |||
int s1; | |||
int wpm; | |||
int wpm2; | |||
int wpm_value; | |||
double sonic; | |||
speed.loud_consonants = 0; | |||
speed.min_sample_len = 450; | |||
@@ -152,11 +148,11 @@ void SetSpeed(int control) | |||
speed.lenmod2_factor = 100; | |||
speed.min_pause = 5; | |||
wpm = embedded_value[EMBED_S]; | |||
int wpm = embedded_value[EMBED_S]; | |||
if (control == 2) | |||
wpm = embedded_value[EMBED_S2]; | |||
wpm_value = wpm; | |||
int wpm_value = wpm; | |||
if (voice->speed_percent > 0) | |||
wpm = (wpm * voice->speed_percent)/100; | |||
@@ -176,7 +172,7 @@ void SetSpeed(int control) | |||
speed3 = (x * voice->speedf3)/256; | |||
} | |||
if (control & 2) { | |||
sonic = ((double)wpm2)/wpm; | |||
double sonic = ((double)wpm2)/wpm; | |||
DoSonicSpeed((int)(sonic * 1024)); | |||
speed.pause_factor = 85; | |||
speed.clause_pause_factor = 80; | |||
@@ -229,7 +225,7 @@ void SetSpeed(int control) | |||
speed.lenmod2_factor = 110 - (wpm - 250)/2; | |||
} | |||
s1 = (x * voice->speedf1)/256; | |||
int s1 = (x * voice->speedf1)/256; | |||
if (wpm >= 170) | |||
speed.wav_factor = 110 + (150*s1)/128; // reduced speed adjustment, used for playing recorded sounds | |||
@@ -273,17 +269,13 @@ void SetSpeed(int control) | |||
void SetSpeed(int control) | |||
{ | |||
// This is the earlier version of SetSpeed() before sonic speed-up was added | |||
int x; | |||
int s1; | |||
int wpm; | |||
int wpm2; | |||
speed.loud_consonants = 0; | |||
speed.min_sample_len = 450; | |||
speed.lenmod_factor = 110; // controls the effect of FRFLAG_LEN_MOD reduce length change | |||
speed.lenmod2_factor = 100; | |||
wpm = embedded_value[EMBED_S]; | |||
int wpm = embedded_value[EMBED_S]; | |||
if (control == 2) | |||
wpm = embedded_value[EMBED_S2]; | |||
@@ -295,10 +287,10 @@ void SetSpeed(int control) | |||
if (wpm > 360) | |||
speed.loud_consonants = (wpm - 360) / 8; | |||
wpm2 = wpm; | |||
int wpm2 = wpm; | |||
if (wpm > 359) wpm2 = 359; | |||
if (wpm < 80) wpm2 = 80; | |||
x = speed_lookup[wpm2-80]; | |||
int x = speed_lookup[wpm2-80]; | |||
if (wpm >= 380) | |||
x = 7; | |||
@@ -329,7 +321,7 @@ void SetSpeed(int control) | |||
speed.lenmod2_factor = 110 - (wpm - 250)/2; | |||
} | |||
s1 = (x * voice->speedf1)/256; | |||
int s1 = (x * voice->speedf1)/256; | |||
if (wpm >= 170) | |||
speed.wav_factor = 110 + (150*s1)/128; // reduced speed adjustment, used for playing recorded sounds | |||
@@ -373,11 +365,10 @@ void SetParameter(int parameter, int value, int relative) | |||
// relative 0=absolute 1=relative | |||
int new_value = value; | |||
int default_value; | |||
if (relative) { | |||
if (parameter < 5) { | |||
default_value = param_defaults[parameter]; | |||
int default_value = param_defaults[parameter]; | |||
new_value = default_value + (default_value * value)/100; | |||
} | |||
} | |||
@@ -439,7 +430,6 @@ static void DoEmbedded2(int *embix) | |||
void CalcLengths(Translator *tr) | |||
{ | |||
int ix; | |||
int ix2; | |||
PHONEME_LIST *prev; | |||
PHONEME_LIST *next; | |||
@@ -468,7 +458,7 @@ void CalcLengths(Translator *tr) | |||
unsigned char *pitch_env = NULL; | |||
PHONEME_DATA phdata_tone; | |||
for (ix = 1; ix < n_phoneme_list; ix++) { | |||
for (int ix = 1; ix < n_phoneme_list; ix++) { | |||
prev = &phoneme_list[ix-1]; | |||
p = &phoneme_list[ix]; | |||
stress = p->stresslevel & 0x7; |
@@ -289,8 +289,6 @@ static void init_path(const char *path) | |||
{ | |||
#ifdef PLATFORM_WINDOWS | |||
HKEY RegKey; | |||
unsigned long size; | |||
unsigned long var_type; | |||
char *env; | |||
unsigned char buf[sizeof(path_home)-13]; | |||
@@ -307,8 +305,8 @@ static void init_path(const char *path) | |||
buf[0] = 0; | |||
RegOpenKeyExA(HKEY_LOCAL_MACHINE, "Software\\Microsoft\\Speech\\Voices\\Tokens\\eSpeak", 0, KEY_READ, &RegKey); | |||
size = sizeof(buf); | |||
var_type = REG_SZ; | |||
unsigned long size = sizeof(buf); | |||
unsigned long var_type = REG_SZ; | |||
RegQueryValueExA(RegKey, "path", 0, &var_type, buf, &size); | |||
sprintf(path_home, "%s\\espeak-data", buf); | |||
@@ -335,7 +333,6 @@ static void init_path(const char *path) | |||
static int initialise(int control) | |||
{ | |||
int param; | |||
int result; | |||
int srate = 22050; // default sample rate 22050 Hz | |||
@@ -357,7 +354,7 @@ static int initialise(int control) | |||
SynthesizeInit(); | |||
InitNamedata(); | |||
for (param = 0; param < N_SPEECH_PARAM; param++) | |||
for (int param = 0; param < N_SPEECH_PARAM; param++) | |||
param_stack[0].parameter[param] = param_defaults[param]; | |||
return 0; | |||
@@ -497,7 +494,6 @@ void MarkerEvent(int type, unsigned int char_position, int value, int value2, un | |||
// type: 1=word, 2=sentence, 3=named mark, 4=play audio, 5=end, 7=phoneme | |||
ENTER("MarkerEvent"); | |||
espeak_EVENT *ep; | |||
double time; | |||
if ((event_list == NULL) || (event_list_ix >= (n_event_list-2))) | |||
return; | |||
@@ -509,7 +505,7 @@ void MarkerEvent(int type, unsigned int char_position, int value, int value2, un | |||
ep->text_position = char_position & 0xffffff; | |||
ep->length = char_position >> 24; | |||
time = ((double)(count_samples + mbrola_delay + (out_ptr - out_start)/2)*1000.0)/samplerate; | |||
double time = ((double)(count_samples + mbrola_delay + (out_ptr - out_start)/2)*1000.0)/samplerate; | |||
ep->audio_position = (int)time; | |||
ep->sample = (count_samples + mbrola_delay + (out_ptr - out_start)/2); | |||
@@ -604,9 +600,8 @@ void sync_espeak_Key(const char *key) | |||
{ | |||
// symbolic name, symbolicname_character - is there a system resource of symbolic names per language? | |||
int letter; | |||
int ix; | |||
ix = utf8_in(&letter, key); | |||
int ix = utf8_in(&letter, key); | |||
if (key[ix] == 0) { | |||
// a single character | |||
sync_espeak_Char(letter); | |||
@@ -667,7 +662,6 @@ ESPEAK_API void espeak_SetPhonemeCallback(int (*PhonemeCallback)(const char *)) | |||
ESPEAK_API int espeak_Initialize(espeak_AUDIO_OUTPUT output_type, int buf_length, const char *path, int options) | |||
{ | |||
ENTER("espeak_Initialize"); | |||
int param; | |||
// It seems that the wctype functions don't work until the locale has been set | |||
// to something other than the default "C". Then, not only Latin1 but also the | |||
@@ -712,7 +706,7 @@ ESPEAK_API int espeak_Initialize(espeak_AUDIO_OUTPUT output_type, int buf_length | |||
VoiceReset(0); | |||
for (param = 0; param < N_SPEECH_PARAM; param++) | |||
for (int param = 0; param < N_SPEECH_PARAM; param++) | |||
param_stack[0].parameter[param] = saved_parameters[param] = param_defaults[param]; | |||
SetParameter(espeakRATE, 175, 0); |
@@ -65,11 +65,11 @@ float polint(float xa[], float ya[], int n, float x) | |||
{ | |||
// General polinomial interpolation routine, xa[1...n] ya[1...n] | |||
int i, m, ns = 1; | |||
float den, dif, dift, ho, hp, w; | |||
float den, dift, ho, hp, w; | |||
float y; // result | |||
float c[9], d[9]; | |||
dif = fabs(x-xa[1]); | |||
float dif = fabs(x-xa[1]); | |||
for (i = 1; i <= n; i++) { | |||
if ((dift = fabs(x-xa[i])) < dif) { | |||
@@ -98,7 +98,6 @@ float polint(float xa[], float ya[], int n, float x) | |||
static SpectFrame *SpectFrameCreate() | |||
{ | |||
int ix; | |||
SpectFrame *frame; | |||
frame = malloc(sizeof(SpectFrame)); | |||
@@ -112,7 +111,7 @@ static SpectFrame *SpectFrameCreate() | |||
frame->amp_adjust = 100; | |||
frame->length_adjust = 0; | |||
for (ix = 0; ix < N_PEAKS; ix++) { | |||
for (int ix = 0; ix < N_PEAKS; ix++) { | |||
frame->formants[ix].freq = 0; | |||
frame->peaks[ix].pkfreq = default_freq[ix]; | |||
frame->peaks[ix].pkheight = 0; | |||
@@ -200,7 +199,6 @@ double GetFrameRms(SpectFrame *frame, int seq_amplitude) | |||
{ | |||
int h; | |||
float total = 0; | |||
int maxh; | |||
int height; | |||
int htab[400]; | |||
wavegen_peaks_t wpeaks[9]; | |||
@@ -214,7 +212,7 @@ double GetFrameRms(SpectFrame *frame, int seq_amplitude) | |||
wpeaks[h].right = frame->peaks[h].pkright << 16; | |||
} | |||
maxh = PeaksToHarmspect(wpeaks, 90<<16, htab, 0); | |||
int maxh = PeaksToHarmspect(wpeaks, 90<<16, htab, 0); | |||
for (h = 1; h < maxh; h++) | |||
total += ((htab[h] * htab[h]) >> 10); | |||
frame->rms = sqrt(total) / 7.25; | |||
@@ -245,9 +243,8 @@ SpectSeq *SpectSeqCreate() | |||
void SpectSeqDestroy(SpectSeq *spect) | |||
{ | |||
int ix; | |||
if (spect->frames != NULL) { | |||
for (ix = 0; ix < spect->numframes; ix++) { | |||
for (int ix = 0; ix < spect->numframes; ix++) { | |||
if (spect->frames[ix] != NULL) | |||
SpectFrameDestroy(spect->frames[ix]); | |||
} |
@@ -108,8 +108,6 @@ espeak_ERROR LoadMbrolaTable(const char *mbrola_voice, const char *phtrans, int | |||
{ | |||
// Load a phoneme name translation table from espeak-data/mbrola | |||
int size; | |||
int ix; | |||
int *pw; | |||
FILE *f_in; | |||
char path[sizeof(path_home)+15]; | |||
@@ -154,7 +152,7 @@ espeak_ERROR LoadMbrolaTable(const char *mbrola_voice, const char *phtrans, int | |||
// read eSpeak's mbrola phoneme translation data, eg. en1_phtrans | |||
sprintf(path, "%s/mbrola_ph/%s", path_home, phtrans); | |||
size = GetFileLength(path); | |||
int size = GetFileLength(path); | |||
if ((f_in = fopen(path, "rb")) == NULL) { | |||
close_MBR(); | |||
return EE_NOT_FOUND; | |||
@@ -168,7 +166,7 @@ espeak_ERROR LoadMbrolaTable(const char *mbrola_voice, const char *phtrans, int | |||
mbrola_control = Read4Bytes(f_in); | |||
pw = (int *)mbrola_tab; | |||
for (ix = 4; ix < size; ix += 4) | |||
for (int ix = 4; ix < size; ix += 4) | |||
*pw++ = Read4Bytes(f_in); | |||
size = fread(mbrola_tab, 1, size, f_in); | |||
fclose(f_in); | |||
@@ -264,11 +262,9 @@ static int GetMbrName(PHONEME_LIST *plist, PHONEME_TAB *ph, PHONEME_TAB *ph_prev | |||
static char *WritePitch(int env, int pitch1, int pitch2, int split, int final) | |||
{ | |||
// final=1: only give the final pitch value. | |||
int x; | |||
int ix; | |||
int pitch_base; | |||
int pitch_range; | |||
int p1, p2, p_end; | |||
int p2; | |||
unsigned char *pitch_env; | |||
int max = -1; | |||
int min = 999; | |||
@@ -277,7 +273,6 @@ static char *WritePitch(int env, int pitch1, int pitch2, int split, int final) | |||
int env100 = 80; // apply the pitch change only over this proportion of the mbrola phoneme(s) | |||
int y2; | |||
int y[4]; | |||
int env_split; | |||
char buf[50]; | |||
static char output[50]; | |||
@@ -286,12 +281,12 @@ static char *WritePitch(int env, int pitch1, int pitch2, int split, int final) | |||
SetPitch2(voice, pitch1, pitch2, &pitch_base, &pitch_range); | |||
env_split = (split * 128)/100; | |||
int env_split = (split * 128)/100; | |||
if (env_split < 0) | |||
env_split = 0-env_split; | |||
// find max and min in the pitch envelope | |||
for (x = 0; x < 128; x++) { | |||
for (int x = 0; x < 128; x++) { | |||
if (pitch_env[x] > max) { | |||
max = pitch_env[x]; | |||
y_max = x; | |||
@@ -312,8 +307,8 @@ static char *WritePitch(int env, int pitch1, int pitch2, int split, int final) | |||
y[3] = y[2] + (127 - y[2])/2; | |||
// set initial pitch | |||
p1 = ((pitch_env[0]*pitch_range)>>8) + pitch_base; // Hz << 12 | |||
p_end = ((pitch_env[127]*pitch_range)>>8) + pitch_base; | |||
int p1 = ((pitch_env[0]*pitch_range)>>8) + pitch_base; // Hz << 12 | |||
int p_end = ((pitch_env[127]*pitch_range)>>8) + pitch_base; | |||
if (split >= 0) { | |||
sprintf(buf, " 0 %d", p1/4096); | |||
@@ -322,7 +317,7 @@ static char *WritePitch(int env, int pitch1, int pitch2, int split, int final) | |||
// don't use intermediate pitch points for linear rise and fall | |||
if (env > 1) { | |||
for (ix = 1; ix < 4; ix++) { | |||
for (int ix = 1; ix < 4; ix++) { | |||
p2 = ((pitch_env[y[ix]]*pitch_range)>>8) + pitch_base; | |||
if (split > 0) | |||
@@ -579,22 +574,20 @@ int MbrolaFill(int length, int resume, int amplitude) | |||
// Read audio data from Mbrola (length is in millisecs) | |||
static int n_samples; | |||
int req_samples, result; | |||
int ix; | |||
short value16; | |||
int value; | |||
if (!resume) | |||
n_samples = samplerate * length / 1000; | |||
req_samples = (out_end - out_ptr)/2; | |||
int req_samples = (out_end - out_ptr)/2; | |||
if (req_samples > n_samples) | |||
req_samples = n_samples; | |||
result = read_MBR((short *)out_ptr, req_samples); | |||
int result = read_MBR((short *)out_ptr, req_samples); | |||
if (result <= 0) | |||
return 0; | |||
for (ix = 0; ix < result; ix++) { | |||
for (int ix = 0; ix < result; ix++) { | |||
value16 = out_ptr[0] + (out_ptr[1] << 8); | |||
value = value16 * amplitude; | |||
value = value / 40; // adjust this constant to give a suitable amplitude for mbrola voices |
@@ -75,11 +75,10 @@ static char *ReadPhFile(void *ptr, const char *fname, int *size) | |||
{ | |||
FILE *f_in; | |||
char *p; | |||
unsigned int length; | |||
char buf[sizeof(path_home)+40]; | |||
sprintf(buf, "%s%c%s", path_home, PATHSEP, fname); | |||
length = GetFileLength(buf); | |||
unsigned int length = GetFileLength(buf); | |||
if ((f_in = fopen(buf, "rb")) == NULL) { | |||
fprintf(stderr, "Can't read data file: '%s'\n", buf); | |||
@@ -109,10 +108,8 @@ int LoadPhData(int *srate) | |||
{ | |||
int ix; | |||
int n_phonemes; | |||
int version; | |||
int result = 1; | |||
int length; | |||
int rate; | |||
unsigned char *p; | |||
int *pw; | |||
@@ -128,8 +125,9 @@ int LoadPhData(int *srate) | |||
n_tunes = length / sizeof(TUNE); | |||
// read the version number and sample rate from the first 8 bytes of phondata | |||
version = 0; // bytes 0-3, version number | |||
rate = 0; // bytes 4-7, sample rate | |||
int version = 0; // bytes 0-3, version number | |||
int rate = 0; // bytes 4-7, sample rate | |||
for (ix = 0; ix < 4; ix++) { | |||
version += (wavefile_data[ix] << (ix*8)); | |||
rate += (wavefile_data[ix+4] << (ix*8)); | |||
@@ -178,9 +176,7 @@ void FreePhData(void) | |||
int PhonemeCode(unsigned int mnem) | |||
{ | |||
int ix; | |||
for (ix = 0; ix < n_phoneme_tab; ix++) { | |||
for (int ix = 0; ix < n_phoneme_tab; ix++) { | |||
if (phoneme_tab[ix] == NULL) | |||
continue; | |||
if (phoneme_tab[ix]->mnemonic == mnem) | |||
@@ -191,13 +187,11 @@ int PhonemeCode(unsigned int mnem) | |||
int LookupPhonemeString(const char *string) | |||
{ | |||
int ix; | |||
unsigned char c; | |||
unsigned int mnem; | |||
// Pack up to 4 characters into a word | |||
mnem = 0; | |||
for (ix = 0; ix < 4; ix++) { | |||
unsigned int mnem = 0; | |||
for (int ix = 0; ix < 4; ix++) { | |||
if (string[ix] == 0) break; | |||
c = string[ix]; | |||
mnem |= (c << (ix*8)); | |||
@@ -209,9 +203,7 @@ int LookupPhonemeString(const char *string) | |||
frameref_t *LookupSpect(PHONEME_TAB *this_ph, int which, FMT_PARAMS *fmt_params, int *n_frames, PHONEME_LIST *plist) | |||
{ | |||
int ix; | |||
int nf; | |||
int nf1; | |||
int seq_break; | |||
frameref_t *frames; | |||
int length1; | |||
int length_std; | |||
@@ -223,13 +215,13 @@ frameref_t *LookupSpect(PHONEME_TAB *this_ph, int which, FMT_PARAMS *fmt_params, | |||
seq = (SPECT_SEQ *)(&phondata_ptr[fmt_params->fmt_addr]); | |||
seqk = (SPECT_SEQK *)seq; | |||
nf = seq->n_frames; | |||
int nf = seq->n_frames; | |||
if (nf >= N_SEQ_FRAMES) | |||
nf = N_SEQ_FRAMES - 1; | |||
seq_len_adjust = fmt_params->fmt2_lenadj + fmt_params->fmt_length; | |||
seq_break = 0; | |||
int seq_break = 0; | |||
for (ix = 0; ix < nf; ix++) { | |||
if (seq->frame[0].frflags & FRFLAG_KLATT) | |||
@@ -341,7 +333,6 @@ unsigned char *GetEnvelope(int index) | |||
static void SetUpPhonemeTable(int number, int recursing) | |||
{ | |||
int ix; | |||
int includes; | |||
int ph_code; | |||
PHONEME_TAB *phtab; | |||
@@ -356,7 +347,7 @@ static void SetUpPhonemeTable(int number, int recursing) | |||
// now add the phonemes from this table | |||
phtab = phoneme_tab_list[number].phoneme_tab_ptr; | |||
for (ix = 0; ix < phoneme_tab_list[number].n_phonemes; ix++) { | |||
for (int ix = 0; ix < phoneme_tab_list[number].n_phonemes; ix++) { | |||
ph_code = phtab[ix].code; | |||
phoneme_tab[ph_code] = &phtab[ix]; | |||
if (ph_code > n_phoneme_tab) | |||
@@ -464,7 +455,6 @@ static bool StressCondition(Translator *tr, PHONEME_LIST *plist, int condition, | |||
// condition: | |||
// 0 if diminished, 1 if unstressed, 2 if not stressed, 3 if stressed, 4 if max stress | |||
int stress_level; | |||
PHONEME_LIST *pl; | |||
static int condition_level[4] = { 1, 2, 4, 15 }; | |||
@@ -478,7 +468,7 @@ static bool StressCondition(Translator *tr, PHONEME_LIST *plist, int condition, | |||
return false; // no stress elevel for this consonant | |||
} | |||
stress_level = pl->stresslevel & 0xf; | |||
int stress_level = pl->stresslevel & 0xf; | |||
if (tr != NULL) { | |||
if ((control & 1) && (plist->synthflags & SFLAG_DICTIONARY) && ((tr->langopts.param[LOPT_REDUCE] & 1) == 0)) { | |||
@@ -525,9 +515,6 @@ static bool InterpretCondition(Translator *tr, int control, PHONEME_LIST *plist, | |||
{ | |||
int which; | |||
int ix; | |||
unsigned int data; | |||
int instn; | |||
int instn2; | |||
int count; | |||
int check_endtype = 0; | |||
PHONEME_TAB *ph; | |||
@@ -541,9 +528,9 @@ static bool InterpretCondition(Translator *tr, int control, PHONEME_LIST *plist, | |||
// bits 8-10 = 7, other conditions | |||
instn = (*p_prog) & 0xfff; | |||
data = instn & 0xff; | |||
instn2 = instn >> 8; | |||
int instn = (*p_prog) & 0xfff; | |||
unsigned int data = instn & 0xff; | |||
int instn2 = instn >> 8; | |||
if (instn2 < 14) { | |||
plist_this = plist; | |||
@@ -749,7 +736,6 @@ static void SwitchOnVowelType(PHONEME_LIST *plist, PHONEME_DATA *phdata, USHORT | |||
{ | |||
USHORT *prog; | |||
int voweltype; | |||
signed char x; | |||
if (instn_type == 2) { | |||
phdata->pd_control |= pd_FORNEXTPH; | |||
@@ -761,7 +747,7 @@ static void SwitchOnVowelType(PHONEME_LIST *plist, PHONEME_DATA *phdata, USHORT | |||
if ((voweltype >= 0) && (voweltype < 6)) { | |||
prog = *p_prog + voweltype*2; | |||
phdata->sound_addr[instn_type] = (((prog[1] & 0xf) << 16) + prog[2]) * 4; | |||
x = (prog[1] >> 4) & 0xff; | |||
signed char x = (prog[1] >> 4) & 0xff; | |||
phdata->sound_param[instn_type] = x; // sign extend | |||
} | |||
@@ -770,15 +756,13 @@ static void SwitchOnVowelType(PHONEME_LIST *plist, PHONEME_DATA *phdata, USHORT | |||
int NumInstnWords(USHORT *prog) | |||
{ | |||
int instn; | |||
int instn2; | |||
int instn_type; | |||
int n; | |||
int type2; | |||
static const char n_words[16] = { 0, 1, 0, 0, 1, 1, 0, 1, 1, 2, 4, 0, 0, 0, 0, 0 }; | |||
instn = *prog; | |||
instn_type = instn >> 12; | |||
int instn2; | |||
int type2; | |||
int instn = *prog; | |||
int instn_type = instn >> 12; | |||
if ((n = n_words[instn_type]) > 0) | |||
return n; | |||
@@ -828,7 +812,6 @@ void InterpretPhoneme(Translator *tr, int control, PHONEME_LIST *plist, PHONEME_ | |||
bool truth; | |||
bool truth2; | |||
int data; | |||
int end_flag; | |||
int ix; | |||
signed char param_sc; | |||
@@ -850,7 +833,7 @@ void InterpretPhoneme(Translator *tr, int control, PHONEME_LIST *plist, PHONEME_ | |||
if (ph->program == 0) | |||
return; | |||
end_flag = 0; | |||
int end_flag = 0; | |||
for (prog = &phoneme_index[ph->program]; end_flag != 1; prog++) { | |||
instn = *prog; | |||
@@ -1059,11 +1042,10 @@ void InterpretPhoneme(Translator *tr, int control, PHONEME_LIST *plist, PHONEME_ | |||
void InterpretPhoneme2(int phcode, PHONEME_DATA *phdata) | |||
{ | |||
// Examine the program of a single isolated phoneme | |||
int ix; | |||
PHONEME_LIST plist[4]; | |||
memset(plist, 0, sizeof(plist)); | |||
for (ix = 0; ix < 4; ix++) { | |||
for (int ix = 0; ix < 4; ix++) { | |||
plist[ix].phcode = phonPAUSE; | |||
plist[ix].ph = phoneme_tab[phonPAUSE]; | |||
} |
@@ -77,10 +77,9 @@ static PHONEME_LIST next_pause; | |||
const char *WordToString(unsigned int word) | |||
{ | |||
// Convert a phoneme mnemonic word into a string | |||
int ix; | |||
static char buf[5]; | |||
for (ix = 0; ix < 4; ix++) | |||
for (int ix = 0; ix < 4; ix++) | |||
buf[ix] = word >> (ix*8); | |||
buf[4] = 0; | |||
return buf; | |||
@@ -190,7 +189,6 @@ static void DoPause(int length, int control) | |||
// control = 1, less shortening at fast speeds | |||
unsigned int len; | |||
int srate2; | |||
if (length == 0) | |||
len = 0; | |||
@@ -200,7 +198,7 @@ static void DoPause(int length, int control) | |||
if (len < 90000) | |||
len = (len * samplerate) / 1000; // convert from mS to number of samples | |||
else { | |||
srate2 = samplerate / 25; // avoid overflow | |||
int srate2 = samplerate / 25; // avoid overflow | |||
len = (len * srate2) / 40; | |||
} | |||
} | |||
@@ -222,25 +220,20 @@ extern int seq_len_adjust; // temporary fix to advance the start point for playi | |||
static int DoSample2(int index, int which, int std_length, int control, int length_mod, int amp) | |||
{ | |||
int length; | |||
int wav_length; | |||
int wav_scale; | |||
int min_length; | |||
int x; | |||
int len4; | |||
intptr_t *q; | |||
unsigned char *p; | |||
index = index & 0x7fffff; | |||
p = &wavefile_data[index]; | |||
wav_scale = p[2]; | |||
wav_length = (p[1] * 256); | |||
int wav_scale = p[2]; | |||
int wav_length = (p[1] * 256); | |||
wav_length += p[0]; // length in bytes | |||
if (wav_length == 0) | |||
return 0; | |||
min_length = speed.min_sample_len; | |||
int min_length = speed.min_sample_len; | |||
if (wav_scale == 0) | |||
min_length *= 2; // 16 bit samples | |||
@@ -261,7 +254,7 @@ static int DoSample2(int index, int which, int std_length, int control, int leng | |||
if (length_mod > 0) | |||
std_length = (std_length * length_mod)/256; | |||
length = (std_length * speed.wav_factor)/256; | |||
int length = (std_length * speed.wav_factor)/256; | |||
if (control & pd_DONTLENGTHEN) { | |||
// this option is used for Stops, with short noise bursts. | |||
@@ -285,7 +278,7 @@ static int DoSample2(int index, int which, int std_length, int control, int leng | |||
if (amp < 0) | |||
return length; | |||
len4 = wav_length / 4; | |||
int len4 = wav_length / 4; | |||
index += 4; | |||
@@ -396,10 +389,6 @@ static void set_frame_rms(frame_t *fr, int new_rms) | |||
// Each frame includes its RMS amplitude value, so to set a new | |||
// RMS just adjust the formant amplitudes by the appropriate ratio | |||
int x; | |||
int h; | |||
int ix; | |||
static const short sqrt_tab[200] = { | |||
0, 64, 90, 110, 128, 143, 156, 169, 181, 192, 202, 212, 221, 230, 239, 247, | |||
256, 263, 271, 278, 286, 293, 300, 306, 313, 320, 326, 332, 338, 344, 350, 356, | |||
@@ -423,12 +412,13 @@ static void set_frame_rms(frame_t *fr, int new_rms) | |||
} | |||
if (fr->rms == 0) return; // check for divide by zero | |||
x = (new_rms * 64)/fr->rms; | |||
int x = (new_rms * 64)/fr->rms; | |||
if (x >= 200) x = 199; | |||
x = sqrt_tab[x]; // sqrt(new_rms/fr->rms)*0x200; | |||
for (ix = 0; ix < 8; ix++) { | |||
int h; | |||
for (int ix = 0; ix < 8; ix++) { | |||
h = fr->fheight[ix] * x; | |||
fr->fheight[ix] = h/0x200; | |||
} | |||
@@ -437,13 +427,12 @@ static void set_frame_rms(frame_t *fr, int new_rms) | |||
static void formants_reduce_hf(frame_t *fr, int level) | |||
{ | |||
// change height of peaks 2 to 8, percentage | |||
int ix; | |||
int x; | |||
if (voice->klattv[0]) | |||
return; | |||
for (ix = 2; ix < 8; ix++) { | |||
int x; | |||
for (int ix = 2; ix < 8; ix++) { | |||
x = fr->fheight[ix] * level; | |||
fr->fheight[ix] = x/100; | |||
} | |||
@@ -482,11 +471,9 @@ static frame_t *DuplicateLastFrame(frameref_t *seq, int n_frames, int length) | |||
static void AdjustFormants(frame_t *fr, int target, int min, int max, int f1_adj, int f3_adj, int hf_reduce, int flags) | |||
{ | |||
int x; | |||
target = (target * voice->formant_factor)/256; | |||
x = (target - fr->ffreq[2]) / 2; | |||
int x = (target - fr->ffreq[2]) / 2; | |||
if (x > max) x = max; | |||
if (x < min) x = min; | |||
fr->ffreq[2] += x; | |||
@@ -536,21 +523,6 @@ static int VowelCloseness(frame_t *fr) | |||
int FormantTransition2(frameref_t *seq, int *n_frames, unsigned int data1, unsigned int data2, PHONEME_TAB *other_ph, int which) | |||
{ | |||
int ix; | |||
int formant; | |||
int next_rms; | |||
int len; | |||
int rms; | |||
int f1; | |||
int f2; | |||
int f2_min; | |||
int f2_max; | |||
int f3_adj; | |||
int f3_amp; | |||
int flags; | |||
int vcolour; | |||
#define N_VCOLOUR 2 | |||
// percentage change for each formant in 256ths | |||
static short vcolouring[N_VCOLOUR][5] = { | |||
@@ -563,17 +535,17 @@ int FormantTransition2(frameref_t *seq, int *n_frames, unsigned int data1, unsig | |||
if (*n_frames < 2) | |||
return 0; | |||
len = (data1 & 0x3f) * 2; | |||
rms = (data1 >> 6) & 0x3f; | |||
flags = (data1 >> 12); | |||
int len = (data1 & 0x3f) * 2; | |||
int rms = (data1 >> 6) & 0x3f; | |||
int flags = (data1 >> 12); | |||
f2 = (data2 & 0x3f) * 50; | |||
f2_min = (((data2 >> 6) & 0x1f) - 15) * 50; | |||
f2_max = (((data2 >> 11) & 0x1f) - 15) * 50; | |||
f3_adj = (((data2 >> 16) & 0x1f) - 15) * 50; | |||
f3_amp = ((data2 >> 21) & 0x1f) * 8; | |||
f1 = ((data2 >> 26) & 0x7); | |||
vcolour = (data2 >> 29); | |||
int f2 = (data2 & 0x3f) * 50; | |||
int f2_min = (((data2 >> 6) & 0x1f) - 15) * 50; | |||
int f2_max = (((data2 >> 11) & 0x1f) - 15) * 50; | |||
int f3_adj = (((data2 >> 16) & 0x1f) - 15) * 50; | |||
int f3_amp = ((data2 >> 21) & 0x1f) * 8; | |||
int f1 = ((data2 >> 26) & 0x7); | |||
int vcolour = (data2 >> 29); | |||
if ((other_ph != NULL) && (other_ph->mnemonic == '?')) | |||
flags |= 8; | |||
@@ -588,7 +560,7 @@ int FormantTransition2(frameref_t *seq, int *n_frames, unsigned int data1, unsig | |||
seq[0].frflags |= FRFLAG_LEN_MOD2; // reduce length modification | |||
fr->frflags |= FRFLAG_LEN_MOD2; | |||
next_rms = seq[1].frame->rms; | |||
int next_rms = seq[1].frame->rms; | |||
if (voice->klattv[0]) | |||
fr->klattp[KLATT_AV] = seq[1].frame->klattp[KLATT_AV] - 4; | |||
@@ -632,11 +604,11 @@ int FormantTransition2(frameref_t *seq, int *n_frames, unsigned int data1, unsig | |||
set_frame_rms(fr, rms); | |||
if ((vcolour > 0) && (vcolour <= N_VCOLOUR)) { | |||
for (ix = 0; ix < *n_frames; ix++) { | |||
for (int ix = 0; ix < *n_frames; ix++) { | |||
fr = CopyFrame(seq[ix].frame, 0); | |||
seq[ix].frame = fr; | |||
for (formant = 1; formant <= 5; formant++) { | |||
for (int formant = 1; formant <= 5; formant++) { | |||
int x; | |||
x = fr->ffreq[formant] * vcolouring[vcolour-1][formant-1]; | |||
fr->ffreq[formant] = x / 256; | |||
@@ -670,7 +642,6 @@ static void SmoothSpect(void) | |||
frame_t *frame2; | |||
frame_t *frame1; | |||
frame_t *frame_centre; | |||
int ix; | |||
int len; | |||
int pk; | |||
int modified; | |||
@@ -689,7 +660,7 @@ static void SmoothSpect(void) | |||
frame_centre = (frame_t *)q[2]; | |||
// backwards | |||
ix = syllable_centre -1; | |||
int ix = syllable_centre -1; | |||
frame = frame2 = frame_centre; | |||
for (;;) { | |||
if (ix < 0) ix = N_WCMDQ-1; | |||
@@ -855,9 +826,6 @@ int DoSpect2(PHONEME_TAB *this_ph, int which, FMT_PARAMS *fmt_params, PHONEME_L | |||
int len; | |||
int frame_length; | |||
int length_factor; | |||
int length_mod; | |||
int length_sum; | |||
int length_min; | |||
int total_len = 0; | |||
static int wave_flag = 0; | |||
int wcmd_spect = WCMD_SPECT; | |||
@@ -866,10 +834,10 @@ int DoSpect2(PHONEME_TAB *this_ph, int which, FMT_PARAMS *fmt_params, PHONEME_L | |||
if (fmt_params->fmt_addr == 0) | |||
return 0; | |||
length_mod = plist->length; | |||
int length_mod = plist->length; | |||
if (length_mod == 0) length_mod = 256; | |||
length_min = (samplerate/70); // greater than one cycle at low pitch (Hz) | |||
int length_min = (samplerate/70); // greater than one cycle at low pitch (Hz) | |||
if (which == 2) { | |||
if ((translator->langopts.param[LOPT_LONG_VOWEL_THRESHOLD] > 0) && ((this_ph->std_length >= translator->langopts.param[LOPT_LONG_VOWEL_THRESHOLD]) || (plist->synthflags & SFLAG_LENGTHEN) || (this_ph->phflags & phLONG))) | |||
length_min *= 2; // ensure long vowels are longer | |||
@@ -947,7 +915,7 @@ int DoSpect2(PHONEME_TAB *this_ph, int which, FMT_PARAMS *fmt_params, PHONEME_L | |||
syllable_centre = wcmdq_tail; | |||
} | |||
length_sum = 0; | |||
int length_sum = 0; | |||
for (frameix = 1; frameix < n_frames; frameix++) { | |||
length_factor = length_mod; | |||
if (frames[frameix-1].frflags & FRFLAG_LEN_MOD) // reduce effect of length mod |
@@ -143,32 +143,25 @@ static void SetLetterVowel(Translator *tr, int c) | |||
static void ResetLetterBits(Translator *tr, int groups) | |||
{ | |||
// Clear all the specified groups | |||
unsigned int ix; | |||
unsigned int mask; | |||
unsigned int mask = ~groups; | |||
mask = ~groups; | |||
for (ix = 0; ix < sizeof(tr->letter_bits); ix++) | |||
for (int ix = 0; ix < sizeof(tr->letter_bits); ix++) | |||
tr->letter_bits[ix] &= mask; | |||
} | |||
static void SetLetterBits(Translator *tr, int group, const char *string) | |||
{ | |||
int bits; | |||
unsigned char c; | |||
bits = (1L << group); | |||
int bits = (1L << group); | |||
while ((c = *string++) != 0) | |||
tr->letter_bits[c] |= bits; | |||
} | |||
static void SetLetterBitsRange(Translator *tr, int group, int first, int last) | |||
{ | |||
int bits; | |||
int ix; | |||
bits = (1L << group); | |||
for (ix = first; ix <= last; ix++) | |||
int bits = (1L << group); | |||
for (int ix = first; ix <= last; ix++) | |||
tr->letter_bits[ix] |= bits; | |||
} | |||
@@ -194,7 +187,6 @@ const char string_ordinal[] = { 0xc2, 0xba, 0 }; // masculine ordinal character, | |||
static Translator *NewTranslator(void) | |||
{ | |||
Translator *tr; | |||
int ix; | |||
static const unsigned char stress_amps2[] = { 18, 18, 20, 20, 20, 22, 22, 20 }; | |||
static const short stress_lengths2[8] = { 182, 140, 220, 220, 220, 240, 260, 280 }; | |||
static const wchar_t empty_wstring[1] = { 0 }; | |||
@@ -262,7 +254,7 @@ static Translator *NewTranslator(void) | |||
tr->punct_within_word = punct_in_word; | |||
tr->chars_ignore = chars_ignore_default; | |||
for (ix = 0; ix < 8; ix++) { | |||
for (int ix = 0; ix < 8; ix++) { | |||
tr->stress_amps[ix] = stress_amps2[ix]; | |||
tr->stress_amps_r[ix] = stress_amps2[ix] - 1; | |||
tr->stress_lengths[ix] = stress_lengths2[ix]; |
@@ -458,9 +458,8 @@ void DeleteTranslator(Translator *tr) | |||
int lookupwchar(const unsigned short *list, int c) | |||
{ | |||
// Is the character c in the list ? | |||
int ix; | |||
for (ix = 0; list[ix] != 0; ix++) { | |||
for (int ix = 0; list[ix] != 0; ix++) { | |||
if (list[ix] == c) | |||
return ix+1; | |||
} | |||
@@ -472,9 +471,7 @@ int lookupwchar2(const unsigned short *list, int c) | |||
// Replace character c by another character. | |||
// Returns 0 = not found, 1 = delete character | |||
int ix; | |||
for (ix = 0; list[ix] != 0; ix += 2) { | |||
for (int ix = 0; list[ix] != 0; ix += 2) { | |||
if (list[ix] == c) | |||
return list[ix+1]; | |||
} | |||
@@ -494,8 +491,6 @@ int utf8_out(unsigned int c, char *buf) | |||
// returns the number of bytes written | |||
int n_bytes; | |||
int j; | |||
int shift; | |||
static char unsigned code[4] = { 0, 0xc0, 0xe0, 0xf0 }; | |||
if (c < 0x80) { | |||
@@ -513,9 +508,9 @@ int utf8_out(unsigned int c, char *buf) | |||
else | |||
n_bytes = 3; | |||
shift = 6*n_bytes; | |||
int shift = 6*n_bytes; | |||
buf[0] = code[n_bytes] | (c >> shift); | |||
for (j = 0; j < n_bytes; j++) { | |||
for (int j = 0; j < n_bytes; j++) { | |||
shift -= 6; | |||
buf[j+1] = 0x80 + ((c >> shift) & 0x3f); | |||
} | |||
@@ -543,8 +538,6 @@ int utf8_in2(int *c, const char *buf, int backwards) | |||
// backwards: set if we are moving backwards through the UTF8 string | |||
int c1; | |||
int n_bytes; | |||
int ix; | |||
static const unsigned char mask[4] = { 0xff, 0x1f, 0x0f, 0x07 }; | |||
// find the start of the next/previous character | |||
@@ -556,7 +549,7 @@ int utf8_in2(int *c, const char *buf, int backwards) | |||
buf++; | |||
} | |||
n_bytes = 0; | |||
int n_bytes = 0; | |||
if ((c1 = *buf++) & 0x80) { | |||
if ((c1 & 0xe0) == 0xc0) | |||
@@ -567,7 +560,7 @@ int utf8_in2(int *c, const char *buf, int backwards) | |||
n_bytes = 3; | |||
c1 &= mask[n_bytes]; | |||
for (ix = 0; ix < n_bytes; ix++) | |||
for (int ix = 0; ix < n_bytes; ix++) | |||
c1 = (c1 << 6) + (*buf++ & 0x3f); | |||
} | |||
*c = c1; | |||
@@ -633,14 +626,13 @@ static int CheckDottedAbbrev(char *word1, WORD_TAB *wtab) | |||
int count = 0; | |||
int nbytes; | |||
int ok; | |||
int ix; | |||
char *word; | |||
char *wbuf; | |||
char word_buf[80]; | |||
word = word1; | |||
wbuf = word_buf; | |||
ix = 0; | |||
int ix = 0; | |||
for (;;) { | |||
ok = 0; | |||
@@ -699,7 +691,6 @@ int ChangeEquivalentPhonemes(Translator *tr, int lang2, char *phonemes) | |||
char *eqlist; | |||
char *p_out; | |||
char *p_in; | |||
int remove_stress = 0; | |||
char phonbuf[N_WORD_PHONEMES]; | |||
// has a phoneme equivalence table been specified for this language pair? | |||
@@ -718,7 +709,7 @@ int ChangeEquivalentPhonemes(Translator *tr, int lang2, char *phonemes) | |||
len = (pb[2] << 8) + pb[3]; // size of this table in words | |||
pb += (len * 4); | |||
} | |||
remove_stress = pb[1]; | |||
int remove_stress = pb[1]; | |||
if (option_phonemes & espeakPHONEMES_TRACE) { | |||
DecodePhonemes(phonemes, phonbuf); | |||
@@ -769,7 +760,6 @@ int TranslateWord(Translator *tr, char *word_start, int next_pause, WORD_TAB *wt | |||
// word1 is terminated by space (0x20) character | |||
char *word1; | |||
int word_length; | |||
int ix; | |||
char *p; | |||
int pfix; | |||
@@ -789,7 +779,6 @@ int TranslateWord(Translator *tr, char *word_start, int next_pause, WORD_TAB *wt | |||
char end_phonemes2[N_WORD_PHONEMES]; | |||
char word_copy[N_WORD_BYTES]; | |||
char word_copy2[N_WORD_BYTES]; | |||
int word_copy_length; | |||
char prefix_chars[0x3f + 2]; | |||
int found = 0; | |||
int end_flags; | |||
@@ -803,8 +792,6 @@ int TranslateWord(Translator *tr, char *word_start, int next_pause, WORD_TAB *wt | |||
int spell_word; | |||
int stress_bits; | |||
int emphasize_allcaps = 0; | |||
int wflags; | |||
int wmark; | |||
int was_unpronouncable = 0; | |||
int loopcount; | |||
int add_suffix_phonemes = 0; | |||
@@ -820,8 +807,8 @@ int TranslateWord(Translator *tr, char *word_start, int next_pause, WORD_TAB *wt | |||
memset(wtab_null, 0, sizeof(wtab_null)); | |||
wtab = wtab_null; | |||
} | |||
wflags = wtab->flags; | |||
wmark = wtab->wmark; | |||
int wflags = wtab->flags; | |||
int wmark = wtab->wmark; | |||
dictionary_flags[0] = 0; | |||
dictionary_flags[1] = 0; | |||
@@ -846,13 +833,13 @@ int TranslateWord(Translator *tr, char *word_start, int next_pause, WORD_TAB *wt | |||
wordx = word1; | |||
utf8_in(&first_char, wordx); | |||
word_length = 0; | |||
int word_length = 0; | |||
while ((*wordx != 0) && (*wordx != ' ')) { | |||
wordx += utf8_in(&last_char, wordx); | |||
word_length++; | |||
} | |||
word_copy_length = wordx - word_start; | |||
int word_copy_length = wordx - word_start; | |||
if (word_copy_length >= N_WORD_BYTES) | |||
word_copy_length = N_WORD_BYTES-1; | |||
memcpy(word_copy2, word_start, word_copy_length); | |||
@@ -1000,13 +987,9 @@ int TranslateWord(Translator *tr, char *word_start, int next_pause, WORD_TAB *wt | |||
// word's pronunciation is not given in the dictionary list, although | |||
// dictionary_flags may have ben set there | |||
int posn; | |||
int non_initial; | |||
int length; | |||
posn = 0; | |||
non_initial = 0; | |||
length = 999; | |||
int posn = 0; | |||
int non_initial = 0; | |||
int length = 999; | |||
wordx = word1; | |||
while (((length < 3) && (length > 0)) || (word_length > 1 && Unpronouncable(tr, wordx, posn))) { | |||
@@ -2166,13 +2149,12 @@ static const char *UCase_ga[] = { "bp", "bhf", "dt", "gc", "hA", "mb", "nd", "ng | |||
int UpperCaseInWord(Translator *tr, char *word, int c) | |||
{ | |||
int ix; | |||
int len; | |||
const char *p; | |||
if (tr->translator_name == L('g', 'a')) { | |||
// Irish | |||
for (ix = 0;; ix++) { | |||
for (int ix = 0;; ix++) { | |||
if ((p = UCase_ga[ix]) == NULL) | |||
break; | |||
@@ -260,9 +260,8 @@ static void SetToneAdjust(voice_t *voice, int *tone_pts) | |||
void ReadTonePoints(char *string, int *tone_pts) | |||
{ | |||
// tone_pts[] is int[12] | |||
int ix; | |||
for (ix = 0; ix < 12; ix++) | |||
for (int ix = 0; ix < 12; ix++) | |||
tone_pts[ix] = -1; | |||
sscanf(string, "%d %d %d %d %d %d %d %d %d %d", | |||
@@ -288,9 +287,7 @@ static espeak_VOICE *ReadVoiceFile(FILE *f_in, const char *fname, const char *le | |||
char *p; | |||
espeak_VOICE *voice_data; | |||
int priority; | |||
int age; | |||
int n_variants = 4; // default, number of variants of this voice before using another voice | |||
int gender; | |||
#ifdef PLATFORM_WINDOWS | |||
char fname_buf[sizeof(path_home)+15]; | |||
@@ -307,7 +304,7 @@ static espeak_VOICE *ReadVoiceFile(FILE *f_in, const char *fname, const char *le | |||
vname[0] = 0; | |||
vgender[0] = 0; | |||
age = 0; | |||
int age = 0; | |||
while (fgets_strip(linebuf, sizeof(linebuf), f_in) != NULL) { | |||
if (memcmp(linebuf, "name", 4) == 0) { | |||
@@ -335,7 +332,7 @@ static espeak_VOICE *ReadVoiceFile(FILE *f_in, const char *fname, const char *le | |||
} | |||
languages[langix++] = 0; | |||
gender = LookupMnem(genders, vgender); | |||
int gender = LookupMnem(genders, vgender); | |||
if (n_languages == 0) | |||
return NULL; // no language lines in the voice file | |||
@@ -368,7 +365,6 @@ void VoiceReset(int tone_only) | |||
{ | |||
// Set voice to the default values | |||
int pk; | |||
static unsigned char default_heights[N_PEAKS] = { 130, 128, 120, 116, 100, 100, 128, 128, 128 }; // changed for v.1.47 | |||
static unsigned char default_widths[N_PEAKS] = { 140, 128, 128, 160, 171, 171, 128, 128, 128 }; | |||
@@ -403,7 +399,7 @@ void VoiceReset(int tone_only) | |||
#endif | |||
InitBreath(); | |||
for (pk = 0; pk < N_PEAKS; pk++) { | |||
for (int pk = 0; pk < N_PEAKS; pk++) { | |||
voice->freq[pk] = 256; | |||
voice->height[pk] = default_heights[pk]*2; | |||
voice->width[pk] = default_widths[pk]*2; | |||
@@ -435,14 +431,13 @@ void VoiceReset(int tone_only) | |||
static void VoiceFormant(char *p) | |||
{ | |||
// Set parameters for a formant | |||
int ix; | |||
int formant; | |||
int freq = 100; | |||
int height = 100; | |||
int width = 100; | |||
int freqadd = 0; | |||
ix = sscanf(p, "%d %d %d %d %d", &formant, &freq, &height, &width, &freqadd); | |||
int ix = sscanf(p, "%d %d %d %d %d", &formant, &freq, &height, &width, &freqadd); | |||
if (ix < 2) | |||
return; | |||
@@ -460,14 +455,13 @@ static void VoiceFormant(char *p) | |||
static void PhonemeReplacement(int type, char *p) | |||
{ | |||
int n; | |||
int phon; | |||
int flags = 0; | |||
char phon_string1[12]; | |||
char phon_string2[12]; | |||
strcpy(phon_string2, "NULL"); | |||
n = sscanf(p, "%d %s %s", &flags, phon_string1, phon_string2); | |||
int n = sscanf(p, "%d %s %s", &flags, phon_string1, phon_string2); | |||
if ((n < 2) || (n_replace_phonemes >= N_REPLACE_PHONEMES)) | |||
return; | |||
@@ -490,11 +484,10 @@ static int Read8Numbers(char *data_in, int *data) | |||
static unsigned int StringToWord2(const char *string) | |||
{ | |||
// Convert a language name string to a word such as L('e','n') | |||
int ix; | |||
int c; | |||
unsigned int value = 0; | |||
for (ix = 0; (ix < 4) && ((c = string[ix]) != 0); ix++) | |||
for (int ix = 0; (ix < 4) && ((c = string[ix]) != 0); ix++) | |||
value = (value << 8) | (c & 0xff); | |||
return value; | |||
} | |||
@@ -1190,7 +1183,6 @@ static int ScoreVoice(espeak_VOICE *voice_spec, const char *spec_language, int s | |||
static int SetVoiceScores(espeak_VOICE *voice_select, espeak_VOICE **voices, int control) | |||
{ | |||
// control: bit0=1 include mbrola voices | |||
int ix; | |||
int score; | |||
int nv; // number of candidates | |||
int n_parts = 0; | |||
@@ -1203,7 +1195,7 @@ static int SetVoiceScores(espeak_VOICE *voice_select, espeak_VOICE **voices, int | |||
if ((voice_select->languages != NULL) && (voice_select->languages[0] != 0)) { | |||
n_parts = 1; | |||
lang_len = strlen(voice_select->languages); | |||
for (ix = 0; (ix <= lang_len) && ((unsigned)ix < sizeof(language)); ix++) { | |||
for (int ix = 0; (ix <= lang_len) && ((unsigned)ix < sizeof(language)); ix++) { | |||
if ((language[ix] = tolower(voice_select->languages[ix])) == '-') | |||
n_parts++; | |||
} | |||
@@ -1226,7 +1218,7 @@ static int SetVoiceScores(espeak_VOICE *voice_select, espeak_VOICE **voices, int | |||
// select those voices which match the specified language | |||
nv = 0; | |||
for (ix = 0; ix < n_voices_list; ix++) { | |||
for (int ix = 0; ix < n_voices_list; ix++) { | |||
vp = voices_list[ix]; | |||
if (((control & 1) == 0) && (memcmp(vp->identifier, "mb/", 3) == 0)) | |||
@@ -1250,13 +1242,11 @@ static int SetVoiceScores(espeak_VOICE *voice_select, espeak_VOICE **voices, int | |||
espeak_VOICE *SelectVoiceByName(espeak_VOICE **voices, const char *name2) | |||
{ | |||
int ix; | |||
int match_fname = -1; | |||
int match_fname2 = -1; | |||
int match_name = -1; | |||
const char *id; // this is the filename within espeak-data/voices | |||
char *variant_name; | |||
int last_part_len; | |||
char last_part[41]; | |||
char name[40]; | |||
@@ -1273,9 +1263,9 @@ espeak_VOICE *SelectVoiceByName(espeak_VOICE **voices, const char *name2) | |||
} | |||
sprintf(last_part, "%c%s", PATHSEP, name); | |||
last_part_len = strlen(last_part); | |||
int last_part_len = strlen(last_part); | |||
for (ix = 0; voices[ix] != NULL; ix++) { | |||
for (int ix = 0; voices[ix] != NULL; ix++) { | |||
if (strcmp(name, voices[ix]->name) == 0) { | |||
match_name = ix; // found matching voice name | |||
break; | |||
@@ -1558,7 +1548,6 @@ static void GetVoices(const char *path) | |||
espeak_ERROR SetVoiceByName(const char *name) | |||
{ | |||
espeak_VOICE *v; | |||
int ix; | |||
espeak_VOICE voice_selector; | |||
char *variant_name; | |||
static char buf[60]; | |||
@@ -1567,7 +1556,7 @@ espeak_ERROR SetVoiceByName(const char *name) | |||
variant_name = ExtractVoiceVariantName(buf, 0, 1); | |||
for (ix = 0;; ix++) { | |||
for (int ix = 0;; ix++) { | |||
// convert voice name to lower case (ascii) | |||
if ((buf[ix] = tolower(buf[ix])) == 0) | |||
break; | |||
@@ -1624,8 +1613,7 @@ espeak_ERROR SetVoiceByProperties(espeak_VOICE *voice_selector) | |||
void FreeVoiceList() | |||
{ | |||
int ix; | |||
for (ix = 0; ix < n_voices_list; ix++) { | |||
for (int ix = 0; ix < n_voices_list; ix++) { | |||
if (voices_list[ix] != NULL) { | |||
free(voices_list[ix]); | |||
voices_list[ix] = NULL; | |||
@@ -1649,8 +1637,6 @@ ESPEAK_API const espeak_VOICE **espeak_ListVoices(espeak_VOICE *voice_spec) | |||
} | |||
return (const espeak_VOICE **)voices_list; | |||
#else | |||
int ix; | |||
int j; | |||
espeak_VOICE *v; | |||
static espeak_VOICE **voices = NULL; | |||
@@ -1673,8 +1659,8 @@ ESPEAK_API const espeak_VOICE **espeak_ListVoices(espeak_VOICE *voice_spec) | |||
SetVoiceScores(voice_spec, voices, 1); | |||
} else { | |||
// list all: omit variant voices and mbrola voices and test voices | |||
j = 0; | |||
for (ix = 0; (v = voices_list[ix]) != NULL; ix++) { | |||
int j = 0; | |||
for (int ix = 0; (v = voices_list[ix]) != NULL; ix++) { | |||
if ((v->languages[0] != 0) && (strcmp(&v->languages[1], "variant") != 0) | |||
&& (memcmp(v->identifier, "mb/", 3) != 0) && (memcmp(v->identifier, "test/", 5) != 0)) | |||
voices[j++] = v; |
@@ -177,7 +177,6 @@ size_t wave_write(void *theHandler, | |||
char *theMono16BitsWaveBuffer, | |||
size_t theSize) | |||
{ | |||
size_t num; | |||
ENTER("wave_write"); | |||
if (my_callback_is_output_enabled && (0 == my_callback_is_output_enabled())) { | |||
SHOW_TIME("wave_write > my_callback_is_output_enabled: no!"); | |||
@@ -199,7 +198,7 @@ size_t wave_write(void *theHandler, | |||
} | |||
#endif | |||
num = write((int)theHandler, theMono16BitsWaveBuffer, theSize); | |||
size_t num = write((int)theHandler, theMono16BitsWaveBuffer, theSize); | |||
// Keep track of the total number of samples sent -- we use this in | |||
// wave_get_read_position and also use it to help calculate the | |||
@@ -245,7 +244,6 @@ size_t wave_write(void *theHandler, | |||
// | |||
int wave_close(void *theHandler) | |||
{ | |||
int ret; | |||
audio_info_t ainfo; | |||
int audio_fd = (int)theHandler; | |||
if (!audio_fd) { | |||
@@ -253,7 +251,7 @@ int wave_close(void *theHandler) | |||
} | |||
ENTER("wave_close"); | |||
// [[[WDW: maybe do a pause/resume ioctl???]]] | |||
ret = ioctl(audio_fd, I_FLUSH, FLUSHRW); | |||
int ret = ioctl(audio_fd, I_FLUSH, FLUSHRW); | |||
ioctl(audio_fd, AUDIO_GETINFO, &ainfo); | |||
// Calculate the number of samples that won't get |
@@ -280,8 +280,7 @@ void WcmdqStop() | |||
int WcmdqFree() | |||
{ | |||
int i; | |||
i = wcmdq_head - wcmdq_tail; | |||
int i = wcmdq_head - wcmdq_tail; | |||
if (i <= 0) i += N_WCMDQ; | |||
return i; | |||
} | |||
@@ -366,17 +365,14 @@ static int WaveCallback(const void *inputBuffer, void *outputBuffer, | |||
PaStreamCallbackFlags flags, void *userData) | |||
#endif | |||
{ | |||
int ix; | |||
int result; | |||
unsigned char *p; | |||
unsigned char *out_buf; | |||
unsigned char *out_end2; | |||
int pa_size; | |||
pa_size = framesPerBuffer*2; | |||
int pa_size = framesPerBuffer*2; | |||
// make a buffer 3x size of the portaudio output | |||
ix = pa_size*3; | |||
int ix = pa_size*3; | |||
if (ix > outbuffer_size) { | |||
outbuffer = (unsigned char *)realloc(outbuffer, ix); | |||
if (outbuffer == NULL) { | |||
@@ -395,7 +391,7 @@ static int WaveCallback(const void *inputBuffer, void *outputBuffer, | |||
event_list_ix = 0; | |||
#endif | |||
result = WavegenFill(1); | |||
int result = WavegenFill(1); | |||
// copy from the outbut buffer into the portaudio buffer | |||
if (result && (out_ptr > out_end2)) | |||
@@ -630,7 +626,6 @@ int WavegenInitSound() | |||
void WavegenInit(int rate, int wavemult_fact) | |||
{ | |||
int ix; | |||
double x; | |||
if (wavemult_fact == 0) | |||
@@ -648,7 +643,7 @@ void WavegenInit(int rate, int wavemult_fact) | |||
wdata.amplitude = 32; | |||
wdata.amplitude_fmt = 100; | |||
for (ix = 0; ix < N_EMBEDDED_VALUES; ix++) | |||
for (int ix = 0; ix < N_EMBEDDED_VALUES; ix++) | |||
embedded_value[ix] = embedded_default[ix]; | |||
// set up window to generate a spread of harmonics from a | |||
@@ -661,7 +656,7 @@ void WavegenInit(int rate, int wavemult_fact) | |||
if (samplerate != 22050) { | |||
// wavemult table has preset values for 22050 Hz, we only need to | |||
// recalculate them if we have a different sample rate | |||
for (ix = 0; ix < wavemult_max; ix++) { | |||
for (int ix = 0; ix < wavemult_max; ix++) { | |||
x = 127*(1.0 - cos(PI2*ix/wavemult_max)); | |||
wavemult[ix] = (int)x; | |||
} | |||
@@ -676,24 +671,19 @@ void WavegenInit(int rate, int wavemult_fact) | |||
int GetAmplitude(void) | |||
{ | |||
int amp; | |||
// normal, none, reduced, moderate, strong | |||
static const unsigned char amp_emphasis[5] = { 16, 16, 10, 16, 22 }; | |||
amp = (embedded_value[EMBED_A])*55/100; | |||
int amp = (embedded_value[EMBED_A])*55/100; | |||
general_amplitude = amp * amp_emphasis[embedded_value[EMBED_F]] / 16; | |||
return general_amplitude; | |||
} | |||
static void WavegenSetEcho(void) | |||
{ | |||
int delay; | |||
int amp; | |||
voicing = wvoice->voicing; | |||
delay = wvoice->echo_delay; | |||
amp = wvoice->echo_amp; | |||
int delay = wvoice->echo_delay; | |||
int amp = wvoice->echo_amp; | |||
if (delay >= N_ECHO_BUF) | |||
delay = N_ECHO_BUF-1; | |||
@@ -740,12 +730,10 @@ int PeaksToHarmspect(wavegen_peaks_t *peaks, int pitch, int *htab, int control) | |||
int fp; // centre freq of peak | |||
int fhi; // high freq of peak | |||
int h; // harmonic number | |||
int pk; | |||
int hmax; | |||
int pk; | |||
int hmax_samplerate; // highest harmonic allowed for the samplerate | |||
int x; | |||
int ix; | |||
int h1; | |||
int ix; | |||
#ifdef SPECT_EDITOR | |||
if (harm_sqrt_n > 0) | |||
@@ -755,7 +743,7 @@ int PeaksToHarmspect(wavegen_peaks_t *peaks, int pitch, int *htab, int control) | |||
// initialise as much of *out as we will need | |||
if (wvoice == NULL) | |||
return 1; | |||
hmax = (peaks[wvoice->n_harmonic_peaks].freq + peaks[wvoice->n_harmonic_peaks].right)/pitch; | |||
int hmax = (peaks[wvoice->n_harmonic_peaks].freq + peaks[wvoice->n_harmonic_peaks].right)/pitch; | |||
if (hmax >= MAX_HARMONIC) | |||
hmax = MAX_HARMONIC-1; | |||
@@ -784,11 +772,9 @@ int PeaksToHarmspect(wavegen_peaks_t *peaks, int pitch, int *htab, int control) | |||
htab[h++] += pk_shape[(f-fp)/(p->right>>8)] * p->height; | |||
} | |||
int y; | |||
int h2; | |||
// increase bass | |||
y = peaks[1].height * 10; // addition as a multiple of 1/256s | |||
h2 = (1000<<16)/pitch; // decrease until 1000Hz | |||
int y = peaks[1].height * 10; // addition as a multiple of 1/256s | |||
int h2 = (1000<<16)/pitch; // decrease until 1000Hz | |||
if (h2 > 0) { | |||
x = y/h2; | |||
h = 1; | |||
@@ -824,7 +810,7 @@ int PeaksToHarmspect(wavegen_peaks_t *peaks, int pitch, int *htab, int control) | |||
} | |||
// adjust the amplitude of the first harmonic, affects tonal quality | |||
h1 = htab[1] * option_harmonic1; | |||
int h1 = htab[1] * option_harmonic1; | |||
htab[1] = h1/8; | |||
// calc intermediate increments of LF harmonics | |||
@@ -840,14 +826,13 @@ static void AdvanceParameters() | |||
{ | |||
// Called every 64 samples to increment the formant freq, height, and widths | |||
int x; | |||
int ix; | |||
static int Flutter_ix = 0; | |||
// advance the pitch | |||
wdata.pitch_ix += wdata.pitch_inc; | |||
if ((ix = wdata.pitch_ix>>8) > 127) ix = 127; | |||
x = wdata.pitch_env[ix] * wdata.pitch_range; | |||
int x = wdata.pitch_env[ix] * wdata.pitch_range; | |||
wdata.pitch = (x>>8) + wdata.pitch_base; | |||
amp_ix += amp_inc; | |||
@@ -901,9 +886,7 @@ static void AdvanceParameters() | |||
#ifndef PLATFORM_RISCOS | |||
static double resonator(RESONATOR *r, double input) | |||
{ | |||
double x; | |||
x = r->a * input + r->b * r->x1 + r->c * r->x2; | |||
double x = r->a * input + r->b * r->x1 + r->c * r->x2; | |||
r->x2 = r->x1; | |||
r->x1 = x; | |||
@@ -916,16 +899,13 @@ static void setresonator(RESONATOR *rp, int freq, int bwidth, int init) | |||
// bwidth Bandwidth of resonator in Hz | |||
// init Initialize internal data | |||
double x; | |||
double arg; | |||
if (init) { | |||
rp->x1 = 0; | |||
rp->x2 = 0; | |||
} | |||
arg = minus_pi_t * bwidth; | |||
x = exp(arg); | |||
double arg = minus_pi_t * bwidth; | |||
double x = exp(arg); | |||
rp->c = -(x * x); | |||
@@ -939,12 +919,11 @@ static void setresonator(RESONATOR *rp, int freq, int bwidth, int init) | |||
void InitBreath(void) | |||
{ | |||
#ifndef PLATFORM_RISCOS | |||
int ix; | |||
minus_pi_t = -PI / samplerate; | |||
two_pi_t = -2.0 * minus_pi_t; | |||
for (ix = 0; ix < N_PEAKS; ix++) | |||
for (int ix = 0; ix < N_PEAKS; ix++) | |||
setresonator(&rbreath[ix], 2000, 200, 1); | |||
#endif | |||
} | |||
@@ -952,12 +931,11 @@ void InitBreath(void) | |||
static void SetBreath() | |||
{ | |||
#ifndef PLATFORM_RISCOS | |||
int pk; | |||
if (wvoice->breath[0] == 0) | |||
return; | |||
for (pk = 1; pk < N_PEAKS; pk++) { | |||
for (int pk = 1; pk < N_PEAKS; pk++) { | |||
if (wvoice->breath[pk] != 0) { | |||
// breath[0] indicates that some breath formants are needed | |||
// set the freq from the current ynthesis formant and the width from the voice data | |||
@@ -971,14 +949,12 @@ static int ApplyBreath(void) | |||
{ | |||
int value = 0; | |||
#ifndef PLATFORM_RISCOS | |||
int noise; | |||
int ix; | |||
int amp; | |||
// use two random numbers, for alternate formants | |||
noise = (rand() & 0x3fff) - 0x2000; | |||
int noise = (rand() & 0x3fff) - 0x2000; | |||
for (ix = 1; ix < N_PEAKS; ix++) { | |||
for (int ix = 1; ix < N_PEAKS; ix++) { | |||
if ((amp = wvoice->breath[ix]) != 0) { | |||
amp *= (peaks[ix].height >> 14); | |||
value += (int)resonator(&rbreath[ix], noise) * amp; | |||
@@ -1309,7 +1285,6 @@ static int SetWithRange0(int value, int max) | |||
static void SetPitchFormants() | |||
{ | |||
int ix; | |||
int factor = 256; | |||
int pitch_value; | |||
@@ -1322,7 +1297,7 @@ static void SetPitchFormants() | |||
factor = 256 + (25 * (pitch_value - 50))/50; | |||
} | |||
for (ix = 0; ix <= 5; ix++) | |||
for (int ix = 0; ix <= 5; ix++) | |||
wvoice->freq[ix] = (wvoice->freq2[ix] * factor)/256; | |||
factor = embedded_value[EMBED_T]*3; | |||
@@ -1334,9 +1309,8 @@ void SetEmbedded(int control, int value) | |||
{ | |||
// there was an embedded command in the text at this point | |||
int sign = 0; | |||
int command; | |||
command = control & 0x1f; | |||
int command = control & 0x1f; | |||
if ((control & 0x60) == 0x60) | |||
sign = -1; | |||
else if ((control & 0x60) == 0x40) | |||
@@ -1407,13 +1381,10 @@ static void SetAmplitude(int length, unsigned char *amp_env, int value) | |||
void SetPitch2(voice_t *voice, int pitch1, int pitch2, int *pitch_base, int *pitch_range) | |||
{ | |||
int x; | |||
int base; | |||
int range; | |||
int pitch_value; | |||
if (pitch1 > pitch2) { | |||
x = pitch1; // swap values | |||
int x = pitch1; // swap values | |||
pitch1 = pitch2; | |||
pitch2 = x; | |||
} | |||
@@ -1424,8 +1395,8 @@ void SetPitch2(voice_t *voice, int pitch1, int pitch2, int *pitch_base, int *pit | |||
if (pitch_value < 0) | |||
pitch_value = 0; | |||
base = (voice->pitch_base * pitch_adjust_tab[pitch_value])/128; | |||
range = (voice->pitch_range * embedded_value[EMBED_R])/50; | |||
int base = (voice->pitch_base * pitch_adjust_tab[pitch_value])/128; | |||
int range = (voice->pitch_range * embedded_value[EMBED_R])/50; | |||
// compensate for change in pitch when the range is narrowed or widened | |||
base -= (range - voice->pitch_range)*18; | |||
@@ -1458,10 +1429,6 @@ void SetSynth(int length, int modn, frame_t *fr1, frame_t *fr2, voice_t *v) | |||
{ | |||
int ix; | |||
DOUBLEX next; | |||
int length2; | |||
int length4; | |||
int qix; | |||
int cmd; | |||
static int glottal_reduce_tab1[4] = { 0x30, 0x30, 0x40, 0x50 }; // vowel before [?], amp * 1/256 | |||
static int glottal_reduce_tab2[4] = { 0x90, 0xa0, 0xb0, 0xc0 }; // vowel after [?], amp * 1/256 | |||
@@ -1481,11 +1448,11 @@ void SetSynth(int length, int modn, frame_t *fr1, frame_t *fr2, voice_t *v) | |||
glottal_reduce = glottal_reduce_tab2[(modn >> 8) & 3]; | |||
} | |||
for (qix = wcmdq_head+1;; qix++) { | |||
for (int qix = wcmdq_head+1;; qix++) { | |||
if (qix >= N_WCMDQ) qix = 0; | |||
if (qix == wcmdq_tail) break; | |||
cmd = wcmdq[qix][0]; | |||
int cmd = wcmdq[qix][0]; | |||
if (cmd == WCMD_SPECT) { | |||
end_wave = 0; // next wave generation is from another spectrum | |||
break; | |||
@@ -1495,7 +1462,7 @@ void SetSynth(int length, int modn, frame_t *fr1, frame_t *fr2, voice_t *v) | |||
} | |||
// round the length to a multiple of the stepsize | |||
length2 = (length + STEPSIZE/2) & ~0x3f; | |||
int length2 = (length + STEPSIZE/2) & ~0x3f; | |||
if (length2 == 0) | |||
length2 = STEPSIZE; | |||
@@ -1503,7 +1470,7 @@ void SetSynth(int length, int modn, frame_t *fr1, frame_t *fr2, voice_t *v) | |||
samplecount_start = samplecount; | |||
nsamples += length2; | |||
length4 = length2/4; | |||
int length4 = length2/4; | |||
peaks[7].freq = (7800 * v->freq[7] + v->freqadd[7]*256) << 8; | |||
peaks[8].freq = (9000 * v->freq[8] + v->freqadd[8]*256) << 8; | |||
@@ -1549,9 +1516,7 @@ static int Wavegen2(int length, int modulation, int resume, frame_t *fr1, frame_ | |||
void Write4Bytes(FILE *f, int value) | |||
{ | |||
// Write 4 bytes to a file, least significant first | |||
int ix; | |||
for (ix = 0; ix < 4; ix++) { | |||
for (int ix = 0; ix < 4; ix++) { | |||
fputc(value & 0xff, f); | |||
value = value >> 8; | |||
} | |||
@@ -1706,13 +1671,12 @@ static int SpeedUp(short *outbuf, int length_in, int length_out, int end_of_text | |||
// Call WavegenFill2, and then speed up the output samples. | |||
int WavegenFill(int fill_zeros) | |||
{ | |||
int finished; | |||
unsigned char *p_start; | |||
p_start = out_ptr; | |||
// fill_zeros is ignored. It is now done in the portaudio callback | |||
finished = WavegenFill2(0); | |||
int finished = WavegenFill2(0); | |||
#if HAVE_SONIC_H | |||
if (sonicSpeed > 1.0) { |
@@ -127,7 +127,6 @@ USHORT voice_pcnt[N_PEAKS+1][3]; | |||
void DisplayVoices(FILE *f_out, char *language) | |||
{ | |||
int ix; | |||
const char *p; | |||
int len; | |||
int count; | |||
@@ -154,7 +153,7 @@ void DisplayVoices(FILE *f_out, char *language) | |||
fprintf(f_out, "Pty Language Age/Gender VoiceName File Other Languages\n"); | |||
for (ix = 0; (v = voices[ix]) != NULL; ix++) { | |||
for (int ix = 0; (v = voices[ix]) != NULL; ix++) { | |||
count = 0; | |||
p = v->languages; | |||
while (*p != 0) { | |||
@@ -224,13 +223,11 @@ static int OpenWaveFile(const char *path, int rate) | |||
static void CloseWaveFile() | |||
{ | |||
unsigned int pos; | |||
if ((f_wave == NULL) || (f_wave == stdout)) | |||
return; | |||
fflush(f_wave); | |||
pos = ftell(f_wave); | |||
unsigned int pos = ftell(f_wave); | |||
fseek(f_wave, 4, SEEK_SET); | |||
Write4Bytes(f_wave, pos - 8); | |||
@@ -238,21 +235,19 @@ static void CloseWaveFile() | |||
fseek(f_wave, 40, SEEK_SET); | |||
Write4Bytes(f_wave, pos - 44); | |||
fclose(f_wave); | |||
f_wave = NULL; | |||
} | |||
static int WavegenFile(void) | |||
{ | |||
int finished; | |||
unsigned char wav_outbuf[1024]; | |||
char fname[210]; | |||
out_ptr = out_start = wav_outbuf; | |||
out_end = wav_outbuf + sizeof(wav_outbuf); | |||
finished = WavegenFill(0); | |||
int finished = WavegenFill(0); | |||
if (quiet) | |||
return finished; | |||
@@ -334,8 +329,6 @@ static void init_path(char *argv0, char *path_specified) | |||
static int initialise(void) | |||
{ | |||
int param; | |||
int result; | |||
int srate = 22050; // default sample rate | |||
// It seems that the wctype functions don't work until the locale has been set | |||
@@ -350,6 +343,7 @@ static int initialise(void) | |||
} | |||
#endif | |||
int result; | |||
if ((result = LoadPhData(&srate)) != 1) { | |||
if (result == -1) { | |||
fprintf(stderr, "Failed to load espeak-data\n"); | |||
@@ -362,7 +356,7 @@ static int initialise(void) | |||
SetVoiceStack(NULL, ""); | |||
SynthesizeInit(); | |||
for (param = 0; param < N_SPEECH_PARAM; param++) | |||
for (int param = 0; param < N_SPEECH_PARAM; param++) | |||
param_stack[0].parameter[param] = param_defaults[param]; | |||
return 0; | |||
@@ -415,7 +409,6 @@ int main(int argc, char **argv) | |||
int c; | |||
int value; | |||
int speed = 175; | |||
int ix; | |||
char *optarg2; | |||
int amp = 100; // default | |||
int wordgap = 0; | |||
@@ -446,7 +439,6 @@ int main(int argc, char **argv) | |||
optind = 1; | |||
opt_string = ""; | |||
while (optind < argc) { | |||
int len; | |||
char *p; | |||
if ((c = *opt_string) == 0) { | |||
@@ -466,10 +458,10 @@ int main(int argc, char **argv) | |||
break; // -- means don't interpret further - as commands | |||
opt_string = ""; | |||
for (ix = 0;; ix++) { | |||
for (int ix = 0;; ix++) { | |||
if (long_options[ix].name == 0) | |||
break; | |||
len = strlen(long_options[ix].name); | |||
size_t len = strlen(long_options[ix].name); | |||
if (memcmp(long_options[ix].name, p, len) == 0) { | |||
c = long_options[ix].val; | |||
optarg2 = NULL; | |||
@@ -571,7 +563,7 @@ int main(int argc, char **argv) | |||
case 0x103: // --punct | |||
option_punctuation = 1; | |||
if (optarg2 != NULL) { | |||
ix = 0; | |||
int ix = 0; | |||
while ((ix < N_PUNCTLIST) && ((option_punctlist[ix] = optarg2[ix]) != 0)) ix++; | |||
option_punctlist[N_PUNCTLIST-1] = 0; | |||
option_punctuation = 2; | |||
@@ -738,7 +730,7 @@ int main(int argc, char **argv) | |||
InitText(0); | |||
SpeakNextClause(f_text, p_text, 0); | |||
ix = 1; | |||
int ix = 1; | |||
for (;;) { | |||
if (WavegenFile() != 0) { | |||
if (ix == 0) |