@@ -119,7 +119,7 @@ char wavefile[200]; | |||
int GetFileLength(const char *filename) | |||
{//==================================== | |||
{ | |||
struct stat statbuf; | |||
if(stat(filename,&statbuf) != 0) | |||
@@ -129,11 +129,11 @@ int GetFileLength(const char *filename) | |||
return(-2); // a directory | |||
return(statbuf.st_size); | |||
} // end of GetFileLength | |||
} | |||
void strncpy0(char *dest, const char *source, int size) | |||
{//==================================================== | |||
{ | |||
if(source!=NULL) | |||
{ | |||
strncpy(dest,source,size); | |||
@@ -142,7 +142,7 @@ void strncpy0(char *dest, const char *source, int size) | |||
} | |||
int utf8_in(int *c, const char *buf) | |||
{//================================= | |||
{ | |||
// Read a unicode characater from a UTF8 string | |||
// Returns the number of UTF8 bytes used. | |||
// backwards: set if we are moving backwards through the UTF8 string | |||
@@ -174,7 +174,7 @@ int utf8_in(int *c, const char *buf) | |||
void DisplayVoices(FILE *f_out, char *language) | |||
{//============================================ | |||
{ | |||
int ix; | |||
const char *p; | |||
int len; | |||
@@ -242,13 +242,13 @@ void DisplayVoices(FILE *f_out, char *language) | |||
} | |||
fputc('\n',f_out); | |||
} | |||
} // end of DisplayVoices | |||
} | |||
static void Write4Bytes(FILE *f, int value) | |||
{//================================= | |||
{ | |||
// Write 4 bytes to a file, least significant first | |||
int ix; | |||
@@ -262,7 +262,6 @@ static void Write4Bytes(FILE *f, int value) | |||
int OpenWavFile(char *path, int rate) | |||
//=================================== | |||
{ | |||
static unsigned char wave_hdr[44] = { | |||
'R','I','F','F',0x24,0xf0,0xff,0x7f,'W','A','V','E','f','m','t',' ', | |||
@@ -295,12 +294,11 @@ int OpenWavFile(char *path, int rate) | |||
Write4Bytes(f_wavfile,rate * 2); | |||
fwrite(&wave_hdr[32],1,12,f_wavfile); | |||
return(0); | |||
} // end of OpenWavFile | |||
} | |||
static void CloseWavFile() | |||
//======================== | |||
{ | |||
unsigned int pos; | |||
@@ -319,11 +317,11 @@ static void CloseWavFile() | |||
fclose(f_wavfile); | |||
f_wavfile = NULL; | |||
} // end of CloseWavFile | |||
} | |||
static int SynthCallback(short *wav, int numsamples, espeak_EVENT *events) | |||
{//======================================================================== | |||
{ | |||
char fname[210]; | |||
if(quiet) return(0); // -q quiet mode | |||
@@ -380,7 +378,7 @@ static int SynthCallback(short *wav, int numsamples, espeak_EVENT *events) | |||
static void PrintVersion() | |||
{//======================= | |||
{ | |||
const char *version; | |||
const char *path_data; | |||
espeak_Initialize(AUDIO_OUTPUT_SYNCHRONOUS, 0, NULL, espeakINITIALIZE_DONT_EXIT); | |||
@@ -407,16 +405,9 @@ static void PrintVersion() | |||
#endif | |||
int main (int argc, char **argv) | |||
//============================== | |||
{ | |||
static struct option long_options[] = | |||
{ | |||
/* These options set a flag. */ | |||
// {"verbose", no_argument, &verbose_flag, 1}, | |||
// {"brief", no_argument, &verbose_flag, 0}, | |||
/* These options don't set a flag. | |||
We distinguish them by their indices. */ | |||
{"help", no_argument, 0, 'h'}, | |||
{"stdin", no_argument, 0, 0x100}, | |||
{"compile-debug", optional_argument, 0, 0x101}, |
@@ -436,7 +436,7 @@ static void ReadPhondataManifest() | |||
} | |||
static const char *KeyToMnem(keywtab_t *ktab, int type, int value) | |||
{//=============================================================== | |||
{ | |||
while(ktab->mnem != NULL) | |||
{ | |||
if(ktab->data == value) | |||
@@ -450,7 +450,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; | |||
@@ -753,7 +753,7 @@ char item_string[N_ITEM_STRING]; | |||
static int ref_sorter(char **a, char **b) | |||
{//====================================== | |||
{ | |||
int ix; | |||
REF_HASH_TAB *p1 = (REF_HASH_TAB *)(*a); | |||
@@ -768,12 +768,12 @@ static int ref_sorter(char **a, char **b) | |||
return ix; | |||
return(p1->ph_mnemonic - p2->ph_mnemonic); | |||
} /* end of ref_sorter */ | |||
} | |||
static void CompileReport(void) | |||
{//============================ | |||
{ | |||
int ix; | |||
int hash; | |||
int n; | |||
@@ -862,7 +862,7 @@ static void CompileReport(void) | |||
free(list); | |||
list = NULL; | |||
fclose(f_report); | |||
} // end of CompileReport | |||
} | |||
#ifdef PLATFORM_WINDOWS | |||
@@ -886,7 +886,7 @@ int strcasecmp(const char *s1, const char *s2) | |||
static int ph_sorter(char **a, char **b) | |||
{//====================================== | |||
{ | |||
int ix; | |||
int t1, t2; | |||
char mnem1[6]; | |||
@@ -905,12 +905,12 @@ static int ph_sorter(char **a, char **b) | |||
strcpy(mnem1,WordToString(p1->mnemonic)); | |||
return(strcasecmp(mnem1,WordToString(p2->mnemonic))); | |||
} /* end of ph_sorter */ | |||
} | |||
static void PrintPhonemesUsed(FILE *f, const char *dsource, const char *dictname) | |||
{//============================================================================== | |||
{ | |||
int ix; | |||
PHONEME_TAB *ph; | |||
PHONEME_TAB *ph_tab[N_PHONEME_TAB]; | |||
@@ -978,12 +978,12 @@ static void PrintPhonemesUsed(FILE *f, const char *dsource, const char *dictname | |||
} | |||
} | |||
fputc('\n',f); | |||
} // end of PrintPhonemesUsed | |||
} | |||
static void error(const char *format, const char *string) | |||
{//====================================================== | |||
{ | |||
if(string==NULL) | |||
string = ""; | |||
fprintf(f_errors,"%4d: ",linenum-1); | |||
@@ -993,12 +993,12 @@ static void error(const char *format, const char *string) | |||
} | |||
static void Error(const char *string) | |||
{//================================== | |||
{ | |||
error("%s",string); | |||
} | |||
static FILE *fopen_log(FILE *f_log, const char *fname,const char *access) | |||
{//===================================================================== | |||
{ | |||
// performs fopen, but produces error message to f_log if it fails | |||
FILE *f; | |||
@@ -1012,7 +1012,7 @@ 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; | |||
@@ -1070,7 +1070,7 @@ static MNEM_TAB reserved_phonemes[] = { | |||
static void ReservePhCodes() | |||
{//========================= | |||
{ | |||
// Reserve phoneme codes which have fixed numbers so that they can be | |||
// referred to from the program code. | |||
unsigned int word; | |||
@@ -1086,11 +1086,11 @@ static void ReservePhCodes() | |||
n_phcodes = p->value+1; | |||
p++; | |||
} | |||
} // end of ReservePhCodes | |||
} | |||
static int LookupPhoneme(const char *string, int control) | |||
{//====================================================== | |||
{ | |||
// control = 0 explicit declaration | |||
// control = 1 declare phoneme if not found | |||
// control = 2 start looking after control & stress phonemes | |||
@@ -1143,12 +1143,12 @@ static int LookupPhoneme(const char *string, int control) | |||
phoneme_tab2[use].type = phINVALID; | |||
phoneme_tab2[use].program = linenum; // for error report if the phoneme remains undeclared | |||
return(use); | |||
} // end of Compile::LookupPhoneme | |||
} | |||
static unsigned int get_char() | |||
{//=========================== | |||
{ | |||
unsigned int c; | |||
c = fgetc(f_in); | |||
if(c == '\n') | |||
@@ -1157,7 +1157,7 @@ static unsigned int get_char() | |||
} | |||
static void unget_char(unsigned int c) | |||
{//=================================== | |||
{ | |||
ungetc(c,f_in); | |||
if(c == '\n') | |||
linenum--; | |||
@@ -1165,16 +1165,16 @@ static void unget_char(unsigned int c) | |||
int CheckNextChar() | |||
{//================ | |||
{ | |||
int c; | |||
while(((c = get_char()) == ' ') || (c == '\t')); | |||
unget_char(c); | |||
return(c); | |||
} // end of CheckNextChar | |||
} | |||
static int NextItem(int type) | |||
{//========================== | |||
{ | |||
int acc; | |||
unsigned char c=0; | |||
unsigned char c2; | |||
@@ -1300,12 +1300,12 @@ static int NextItem(int type) | |||
return(LookupPhoneme(item_string,2)); | |||
} | |||
return(-1); | |||
} // end of NextItem | |||
} | |||
static int NextItemMax(int max) | |||
{//============================== | |||
{ | |||
// Get a number, but restrict value to max | |||
int value; | |||
char msg[80]; | |||
@@ -1323,7 +1323,7 @@ static int NextItemMax(int max) | |||
static int NextItemBrackets(int type, int control) | |||
{//=============================================== | |||
{ | |||
// Expect a parameter inside parantheses | |||
// control: bit 0 0= need ( | |||
// bit 1 1= allow comma | |||
@@ -1352,16 +1352,16 @@ static int NextItemBrackets(int type, int control) | |||
static void UngetItem() | |||
{//==================== | |||
{ | |||
fseek(f_in,f_in_displ,SEEK_SET); | |||
linenum = f_in_linenum; | |||
} // end of UngetItem | |||
} | |||
static int Range(int value, int divide, int min, int max) | |||
{//====================================================== | |||
{ | |||
if(value < 0) | |||
value -= divide/2; | |||
else | |||
@@ -1377,7 +1377,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; | |||
@@ -1488,12 +1488,12 @@ int CompileVowelTransition(int which) | |||
prog_out += 4; | |||
return(0); | |||
} // end of VowelTransition | |||
} | |||
int LoadSpect(const char *path, int control) | |||
{//========================================= | |||
{ | |||
SpectSeq *spectseq; | |||
int peak; | |||
int displ; | |||
@@ -1692,12 +1692,12 @@ int LoadSpect(const char *path, int control) | |||
SpectSeqDestroy(spectseq); | |||
return(displ); | |||
} // end of LoadSpect | |||
} | |||
static int LoadWavefile(FILE *f, const char *fname) | |||
{//================================================ | |||
{ | |||
int displ; | |||
unsigned char c1; | |||
unsigned char c3; | |||
@@ -1863,12 +1863,12 @@ static int LoadWavefile(FILE *f, const char *fname) | |||
remove(fname_temp); | |||
} | |||
return(displ | 0x800000); // set bit 23 to indicate a wave file rather than a spectrum | |||
} // end of LoadWavefile | |||
} | |||
static int LoadEnvelope(FILE *f, const char *fname) | |||
{//================================================ | |||
{ | |||
int displ; | |||
char buf[128]; | |||
@@ -1889,13 +1889,12 @@ static int LoadEnvelope(FILE *f, const char *fname) | |||
} | |||
return(displ); | |||
} // end of LoadEnvelope | |||
} | |||
static int Hash8(const char *string) | |||
//================================== | |||
/* Generate a hash code from the specified string */ | |||
static int Hash8(const char *string) | |||
{ | |||
int c; | |||
int chars=0; | |||
@@ -1910,12 +1909,12 @@ static int Hash8(const char *string) | |||
} | |||
return((hash+chars) & 0xff); | |||
} // end of Hash8 | |||
} | |||
static int LoadEnvelope2(FILE *f, const char *fname) | |||
{//=================================================== | |||
{ | |||
int ix, ix2; | |||
int n; | |||
int x, y; | |||
@@ -1985,7 +1984,7 @@ static int LoadEnvelope2(FILE *f, const char *fname) | |||
} | |||
static int LoadDataFile(const char *path, int control) | |||
{//=================================================== | |||
{ | |||
// load spectrum sequence or sample data from a file. | |||
// return index into spect or sample data area. bit 23=1 if a sample | |||
@@ -2084,11 +2083,11 @@ static int LoadDataFile(const char *path, int control) | |||
} | |||
return(addr); | |||
} // end of LoadDataFile | |||
} | |||
static int CompileToneSpec(void) | |||
{//============================= | |||
{ | |||
int pitch1=0; | |||
int pitch2=0; | |||
int pitch_env = 0; | |||
@@ -2132,12 +2131,12 @@ static int CompileToneSpec(void) | |||
} | |||
return(0); | |||
} // end of CompileToneSpec | |||
} | |||
int CompileSound(int keyword, int isvowel) | |||
{//======================================= | |||
{ | |||
int addr; | |||
int value = 0; | |||
char path[N_ITEM_STRING]; | |||
@@ -2177,7 +2176,7 @@ int CompileSound(int keyword, int isvowel) | |||
*prog_out++ = sound_instns[keyword-kFMT] + ((value & 0xff) << 4) + ((addr >> 16) & 0xf); | |||
*prog_out++ = addr & 0xffff; | |||
return(0); | |||
} // end of CompileSound | |||
} | |||
@@ -2194,7 +2193,7 @@ bit 8-11 | |||
*/ | |||
int CompileIf(int elif) | |||
{//==================== | |||
{ | |||
int key; | |||
int finish = 0; | |||
int word = 0; | |||
@@ -2322,11 +2321,11 @@ int CompileIf(int elif) | |||
*prog_out++ = i_JUMP_FALSE; | |||
return(0); | |||
} // end of CompileIf | |||
} | |||
void FillThen(int add) | |||
{//=================== | |||
{ | |||
USHORT *p; | |||
int offset; | |||
@@ -2358,11 +2357,11 @@ void FillThen(int add) | |||
} | |||
then_count = 0; | |||
} // end of FillThen | |||
} | |||
int CompileElse(void) | |||
{//================== | |||
{ | |||
USHORT *ref; | |||
USHORT *p; | |||
@@ -2394,11 +2393,11 @@ int CompileElse(void) | |||
} | |||
return(0); | |||
} // end of CompileElse | |||
} | |||
int CompileElif(void) | |||
{//=================== | |||
{ | |||
if(if_level < 1) | |||
{ | |||
error("ELIF not expected",NULL); | |||
@@ -2412,7 +2411,7 @@ int CompileElif(void) | |||
int CompileEndif(void) | |||
{//=================== | |||
{ | |||
USHORT *p; | |||
int chain; | |||
int offset; | |||
@@ -2444,11 +2443,11 @@ int CompileEndif(void) | |||
if_level--; | |||
return(0); | |||
} // end of CompileEndif | |||
} | |||
static int CompileSwitch(int type) | |||
{//=============================== | |||
{ | |||
// Type 0: EndSwitch | |||
// 1: SwitchPrevVowelType | |||
// 2: SwitchNextVowelType | |||
@@ -2464,12 +2463,12 @@ static int CompileSwitch(int type) | |||
if(type == 2) | |||
*prog_out++ = i_SWITCH_NEXTVOWEL+6; | |||
return(0); | |||
} // end of CompileSwitch | |||
} | |||
static PHONEME_TAB_LIST *FindPhonemeTable(const char *string) | |||
{//========================================================== | |||
{ | |||
int ix; | |||
for(ix=0; ix<n_phoneme_tabs; ix++) | |||
@@ -2481,12 +2480,12 @@ static PHONEME_TAB_LIST *FindPhonemeTable(const char *string) | |||
} | |||
error("Unknown phoneme table: '%s'",string); | |||
return(NULL); | |||
} // end of FindPhonemeTable | |||
} | |||
static PHONEME_TAB *FindPhoneme(const char *string) | |||
{//================================================ | |||
{ | |||
PHONEME_TAB_LIST *phtab = NULL; | |||
int ix; | |||
unsigned int mnem; | |||
@@ -2527,7 +2526,7 @@ static PHONEME_TAB *FindPhoneme(const char *string) | |||
static void ImportPhoneme(void) | |||
{//============================ | |||
{ | |||
unsigned int ph_mnem; | |||
unsigned int ph_code; | |||
PHONEME_TAB *ph; | |||
@@ -2547,11 +2546,11 @@ static void ImportPhoneme(void) | |||
phoneme_out->end_type = 0; // voicingswitch, this must be set later to refer to a local phoneme | |||
} | |||
} // end of ImportPhoneme | |||
} | |||
static void CallPhoneme(void) | |||
{//========================== | |||
{ | |||
PHONEME_TAB *ph; | |||
int ix; | |||
int addr = 0; | |||
@@ -2589,17 +2588,17 @@ static void CallPhoneme(void) | |||
*prog_out++ = i_CALLPH + (addr >> 16); | |||
*prog_out++ = addr; | |||
} // end of CallPhoneme | |||
} | |||
static void DecThenCount() | |||
{//======================= | |||
{ | |||
if(then_count >0) | |||
then_count--; | |||
} | |||
static void InstnPlusPhoneme(int instn) | |||
{//==================================== | |||
{ | |||
int phcode; | |||
phcode = NextItemBrackets(tPHONEMEMNEM,0); | |||
@@ -2608,7 +2607,7 @@ static void InstnPlusPhoneme(int instn) | |||
int CompilePhoneme(int compile_phoneme) | |||
{//==================================== | |||
{ | |||
int endphoneme = 0; | |||
int keyword; | |||
int value; | |||
@@ -3024,14 +3023,14 @@ int CompilePhoneme(int compile_phoneme) | |||
} | |||
return(0); | |||
} // end of CompilePhoneme | |||
} | |||
static void WritePhonemeTables() | |||
{//============================= | |||
{ | |||
int ix; | |||
int j; | |||
int n; | |||
@@ -3084,11 +3083,11 @@ static void WritePhonemeTables() | |||
fwrite(&p[n],sizeof(PHONEME_TAB),1,f_phtab); // include the extra list-terminator phoneme entry | |||
free(p); | |||
} | |||
} // end of WritePhonemeTables | |||
} | |||
static void EndPhonemeTable() | |||
{//========================== | |||
{ | |||
int ix; | |||
int *pw; | |||
int length; | |||
@@ -3128,7 +3127,7 @@ static void EndPhonemeTable() | |||
static void StartPhonemeTable(const char *name) | |||
{//============================================ | |||
{ | |||
int ix; | |||
int j; | |||
PHONEME_TAB *p; | |||
@@ -3185,11 +3184,11 @@ static void StartPhonemeTable(const char *name) | |||
} | |||
n_phoneme_tabs++; | |||
} // end of StartPhonemeTable | |||
} | |||
static void CompileEquivalents() | |||
{//============================= | |||
{ | |||
// a list of phonemes in another language and the equivalent phoneme strings in this language | |||
int ix; | |||
@@ -3290,12 +3289,12 @@ static void CompileEquivalents() | |||
n_bytes = n_bytes / 4; | |||
p_start[2] = n_bytes >> 8; // index of next table | |||
p_start[3] = n_bytes; | |||
} // end of CompileEquivalents | |||
} | |||
static void CompilePhonemeFiles() | |||
{//============================== | |||
{ | |||
int item; | |||
FILE *f; | |||
char buf[sizeof(path_home)+120]; | |||
@@ -3381,12 +3380,12 @@ static void CompilePhonemeFiles() | |||
} | |||
} | |||
phoneme_tab2[n_phcodes+1].mnemonic = 0; // terminator | |||
} // end of CompilePhonemeFiles | |||
} | |||
static espeak_ng_STATUS CompilePhonemeData2(const char *source, FILE *log) | |||
{//================================================ | |||
{ | |||
char fname[sizeof(path_home)+40]; | |||
sprintf(fname,"%s/../phsource",path_home); | |||
@@ -3515,7 +3514,7 @@ fprintf(f_errors,"\nRefs %d, Reused %d\n",count_references,duplicate_references | |||
ReadPhondataManifest(); | |||
return ENS_OK; | |||
} // end of CompilePhonemeData | |||
} | |||
static const char *preset_tune_names[] = { | |||
@@ -3550,15 +3549,8 @@ MNEM_TAB envelope_names[] = { | |||
{"rise-fall-rise", 18}, | |||
{NULL, -1} }; | |||
// env_fallrise3, env_fallrise3, | |||
// env_fallrise4, env_fallrise4, | |||
// env_fall2, env_fall2, | |||
// env_rise2, env_rise2, | |||
// env_risefallrise, env_risefallrise | |||
int LookupEnvelopeName(const char *name) | |||
{//================================= | |||
{ | |||
return(LookupMnem(envelope_names, name)); | |||
} | |||
@@ -3566,7 +3558,7 @@ int LookupEnvelopeName(const char *name) | |||
#pragma GCC visibility push(default) | |||
espeak_ng_STATUS espeak_ng_CompileIntonation(FILE *log) | |||
{//===================== | |||
{ | |||
int ix; | |||
char *p; | |||
char c; | |||
@@ -3861,7 +3853,7 @@ espeak_ng_STATUS espeak_ng_CompileIntonation(FILE *log) | |||
LoadPhData(NULL); | |||
return error_count > 0 ? ENE_COMPILE_ERRORS : ENS_OK; | |||
} // end of CompileIntonation | |||
} | |||
@@ -1,7 +1,7 @@ | |||
/*************************************************************************** | |||
* Copyright (C) 2005 to 2014 by Jonathan Duddington * | |||
* email: [email protected] * | |||
* Copyright (C) 2015 by Reece H. Dunn * | |||
* Copyright (C) 2015 Reece H. Dunn * | |||
* * | |||
* This program is free software; you can redistribute it and/or modify * | |||
* it under the terms of the GNU General Public License as published by * | |||
@@ -158,7 +158,7 @@ typedef struct { | |||
int isspace2(unsigned int c) | |||
{//========================= | |||
{ | |||
// can't use isspace() because on Windows, isspace(0xe1) gives TRUE ! | |||
int c2; | |||
@@ -170,7 +170,7 @@ int isspace2(unsigned int c) | |||
static FILE *fopen_log(const char *fname,const char *access) | |||
{//================================================== | |||
{ | |||
// performs fopen, but produces error message to f_log if it fails | |||
FILE *f; | |||
@@ -183,9 +183,8 @@ static FILE *fopen_log(const char *fname,const char *access) | |||
} | |||
const char *LookupMnemName(MNEM_TAB *table, const int value) | |||
//========================================================== | |||
/* Lookup a mnemonic string in a table, return its name */ | |||
const char *LookupMnemName(MNEM_TAB *table, const int value) | |||
{ | |||
while(table->mnem != NULL) | |||
{ | |||
@@ -194,11 +193,11 @@ const char *LookupMnemName(MNEM_TAB *table, const int value) | |||
table++; | |||
} | |||
return(""); /* not found */ | |||
} /* end of LookupMnemValue */ | |||
} | |||
void print_dictionary_flags(unsigned int *flags, char *buf, int buf_len) | |||
{//======================================================================== | |||
{ | |||
int stress; | |||
int ix; | |||
const char *name; | |||
@@ -232,7 +231,7 @@ void print_dictionary_flags(unsigned int *flags, char *buf, int buf_len) | |||
char *DecodeRule(const char *group_chars, int group_length, char *rule, int control) | |||
{//================================================================================= | |||
{ | |||
/* Convert compiled match template to ascii */ | |||
unsigned char rb; | |||
@@ -402,13 +401,13 @@ char *DecodeRule(const char *group_chars, int group_length, char *rule, int cont | |||
output[ix++]=' '; | |||
output[ix]=0; | |||
return(output); | |||
} /* end of DecodeRule */ | |||
} | |||
static int compile_line(char *linebuf, char *dict_line, int *hash) | |||
{//=============================================================== | |||
{ | |||
// Compile a line in the language_list file | |||
unsigned char c; | |||
char *p; | |||
@@ -759,12 +758,12 @@ static int compile_line(char *linebuf, char *dict_line, int *hash) | |||
return(length); | |||
} /* end of compile_line */ | |||
} | |||
static void compile_dictlist_start(void) | |||
{//===================================== | |||
{ | |||
// initialise dictionary list | |||
int ix; | |||
char *p; | |||
@@ -786,7 +785,7 @@ static void compile_dictlist_start(void) | |||
static void compile_dictlist_end(FILE *f_out) | |||
{//========================================== | |||
{ | |||
// Write out the compiled dictionary list | |||
int hash; | |||
int length; | |||
@@ -823,7 +822,7 @@ static void compile_dictlist_end(FILE *f_out) | |||
static int compile_dictlist_file(const char *path, const char* filename) | |||
{//===================================================================== | |||
{ | |||
int length; | |||
int hash; | |||
char *p; | |||
@@ -879,7 +878,7 @@ static int compile_dictlist_file(const char *path, const char* filename) | |||
fprintf(f_log,"\t%d entries\n",count); | |||
fclose(f_in); | |||
return(0); | |||
} /* end of compile_dictlist_file */ | |||
} | |||
@@ -908,7 +907,7 @@ int isHexDigit(int c) | |||
static void copy_rule_string(char *string, int *state_out) | |||
{//======================================================= | |||
{ | |||
// state 0: conditional, 1=pre, 2=match, 3=post, 4=phonemes | |||
static char *outbuf[5] = {rule_cond, rule_pre, rule_match, rule_post, rule_phonemes}; | |||
static int next_state[5] = {2,2,4,4,4}; | |||
@@ -1174,12 +1173,12 @@ static void copy_rule_string(char *string, int *state_out) | |||
} | |||
*state_out = next_state[state]; | |||
} // end of copy_rule_string | |||
} | |||
static char *compile_rule(char *input) | |||
{//=================================== | |||
{ | |||
int ix; | |||
unsigned char c; | |||
int wc; | |||
@@ -1360,11 +1359,11 @@ static char *compile_rule(char *input) | |||
prule = (char *)malloc(len); | |||
memcpy(prule,output,len); | |||
return(prule); | |||
} // end of compile_rule | |||
} | |||
int __cdecl string_sorter(char **a, char **b) | |||
{//=========================================== | |||
{ | |||
char *pa, *pb; | |||
int ix; | |||
@@ -1373,11 +1372,11 @@ int __cdecl string_sorter(char **a, char **b) | |||
pa += (strlen(pa)+1); | |||
pb += (strlen(pb)+1); | |||
return(strcmp(pa,pb)); | |||
} /* end of string_sorter */ | |||
} | |||
static int __cdecl rgroup_sorter(RGROUP *a, RGROUP *b) | |||
{//=================================================== | |||
{ | |||
// Sort long names before short names | |||
int ix; | |||
ix = strlen(b->name) - strlen(a->name); | |||
@@ -1390,7 +1389,7 @@ 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; | |||
@@ -1495,9 +1494,8 @@ static void print_rule_group(FILE *f_out, int n_rules, char **rules, char *name) | |||
#endif | |||
//#define LIST_GROUP_INFO | |||
static void output_rule_group(FILE *f_out, int n_rules, char **rules, char *name) | |||
{//============================================================================== | |||
{ | |||
int ix; | |||
int len1; | |||
int len2; | |||
@@ -1558,12 +1556,12 @@ static void output_rule_group(FILE *f_out, int n_rules, char **rules, char *name | |||
printf("Group %s %c %d\n",name,ix,nextchar_count[ix]); | |||
} | |||
#endif | |||
} // end of output_rule_group | |||
} | |||
static int compile_lettergroup(char *input, FILE *f_out) | |||
{//===================================================== | |||
{ | |||
char *p; | |||
char *p_start; | |||
int group; | |||
@@ -1644,7 +1642,7 @@ static int compile_lettergroup(char *input, FILE *f_out) | |||
static int compile_dictrules(FILE *f_in, FILE *f_out, char *fname_temp) | |||
{//==================================================================== | |||
{ | |||
char *prule; | |||
unsigned char *p; | |||
int ix; | |||
@@ -1888,12 +1886,12 @@ static int compile_dictrules(FILE *f_in, FILE *f_out, char *fname_temp) | |||
fprintf(f_log,"\t%d rules, %d groups (%d)\n\n",count,n_rgroups,n_groups3); | |||
return(0); | |||
} // end of compile_dictrules | |||
} | |||
int CompileDictionary(const char *dsource, const char *dict_name, FILE *log, char *fname_err, int flags) | |||
{//===================================================================================================== | |||
{ | |||
// fname: space to write the filename in case of error | |||
// flags: bit 0: include source line number information, for debug purposes. | |||
@@ -1979,5 +1977,4 @@ int CompileDictionary(const char *dsource, const char *dict_name, FILE *log, cha | |||
LoadDictionary(translator, dict_name, 0); | |||
return(error_count); | |||
} // end of compile_dictionary | |||
} |
@@ -81,7 +81,7 @@ static unsigned char remove_accent[N_REMOVE_ACCENT] = { | |||
void strncpy0(char *to,const char *from, int size) | |||
{//=================================================== | |||
{ | |||
// strcpy with limit, ensures a zero terminator | |||
strncpy(to,from,size); | |||
to[size-1] = 0; | |||
@@ -89,7 +89,7 @@ void strncpy0(char *to,const char *from, int size) | |||
int Reverse4Bytes(int word) | |||
{//========================== | |||
{ | |||
// reverse the order of bytes from little-endian to big-endian | |||
#ifdef ARCH_BIG | |||
int ix; | |||
@@ -108,7 +108,7 @@ int Reverse4Bytes(int word) | |||
int LookupMnem(MNEM_TAB *table, const char *string) | |||
{//================================================== | |||
{ | |||
while(table->mnem != NULL) | |||
{ | |||
if(strcmp(string,table->mnem)==0) | |||
@@ -119,14 +119,8 @@ int LookupMnem(MNEM_TAB *table, const char *string) | |||
} | |||
//============================================================================================= | |||
// Read pronunciation rules and pronunciation lookup dictionary | |||
// | |||
//============================================================================================= | |||
static void InitGroups(Translator *tr) | |||
{//=================================== | |||
{ | |||
// Called after dictionary 1 is loaded, to set up table of entry points for translation rule chains | |||
// for single-letters and two-letter combinations | |||
@@ -230,12 +224,12 @@ static void InitGroups(Translator *tr) | |||
p++; | |||
} | |||
} // end of InitGroups | |||
} | |||
int LoadDictionary(Translator *tr, const char *name, int no_error) | |||
{//=============================================================== | |||
{ | |||
int hash; | |||
char *p; | |||
int *pw; | |||
@@ -315,14 +309,13 @@ int LoadDictionary(Translator *tr, const char *name, int no_error) | |||
} | |||
return(0); | |||
} // end of LoadDictionary | |||
} | |||
int HashDictionary(const char *string) | |||
//==================================== | |||
/* Generate a hash code from the specified string | |||
This is used to access the dictionary_2 word-lookup dictionary | |||
*/ | |||
int HashDictionary(const char *string) | |||
{ | |||
int c; | |||
int chars=0; | |||
@@ -336,25 +329,17 @@ int HashDictionary(const char *string) | |||
} | |||
return((hash+chars) & 0x3ff); // a 10 bit hash code | |||
} // end of HashDictionary | |||
//============================================================================================= | |||
// Translate between internal representation of phonemes and a mnemonic form for display | |||
// | |||
//============================================================================================= | |||
} | |||
const char *EncodePhonemes(const char *p, char *outptr, int *bad_phoneme) | |||
/******************************************************************/ | |||
/* Translate a phoneme string from ascii mnemonics to internal phoneme numbers, | |||
from 'p' up to next blank . | |||
Returns advanced 'p' | |||
outptr contains encoded phonemes, unrecognized phoneme stops the encoding | |||
bad_phoneme must point to char array of length 2 of more | |||
*/ | |||
const char *EncodePhonemes(const char *p, char *outptr, int *bad_phoneme) | |||
{ | |||
int ix; | |||
unsigned char c; | |||
@@ -467,12 +452,12 @@ const char *EncodePhonemes(const char *p, char *outptr, int *bad_phoneme) | |||
/* terminate the encoded string */ | |||
*outptr = 0; | |||
return(p); | |||
} // end of EncodePhonemes | |||
} | |||
void DecodePhonemes(const char *inptr, char *outptr) | |||
{//================================================== | |||
{ | |||
// Translate from internal phoneme codes into phoneme mnemonics | |||
unsigned char phcode; | |||
unsigned char c; | |||
@@ -512,7 +497,7 @@ void DecodePhonemes(const char *inptr, char *outptr) | |||
} | |||
} | |||
*outptr = 0; /* string terminator */ | |||
} // end of DecodePhonemes | |||
} | |||
// using Kirschenbaum to IPA translation, ascii 0x20 to 0x7f | |||
@@ -531,7 +516,7 @@ 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; | |||
@@ -628,12 +613,12 @@ char *WritePhMnemonic(char *phon_out, PHONEME_TAB *ph, PHONEME_LIST *plist, int | |||
phon_out = &phon_out[ix]; | |||
*phon_out = 0; | |||
return(phon_out); | |||
} // end of WritePhMnemonic | |||
} | |||
const char *GetTranslatedPhonemeString(int phoneme_mode) | |||
{//======================================================= | |||
{ | |||
/* Called after a clause has been translated into phonemes, in order | |||
to display the clause in phoneme mnemonic form. | |||
@@ -789,19 +774,12 @@ const char *GetTranslatedPhonemeString(int phoneme_mode) | |||
phon_out_buf[phon_out_ix] = 0; | |||
return(phon_out_buf); | |||
} // end of GetTranslatedPhonemeString | |||
//============================================================================================= | |||
// Is a word Unpronouncable - and so should be spoken as individual letters | |||
// | |||
//============================================================================================= | |||
} | |||
static int IsLetterGroup(Translator *tr, char *word, int group, int pre) | |||
{//===================================================================== | |||
{ | |||
// match the word against a list of utf-8 strings | |||
char *p; | |||
char *w; | |||
@@ -841,7 +819,7 @@ static int IsLetterGroup(Translator *tr, char *word, int group, int pre) | |||
static int IsLetter(Translator *tr, int letter, int group) | |||
{//======================================================= | |||
{ | |||
int letter2; | |||
if(tr->letter_groups[group] != NULL) | |||
@@ -875,7 +853,7 @@ static int IsLetter(Translator *tr, int letter, int group) | |||
int IsVowel(Translator *tr, int letter) | |||
{//==================================== | |||
{ | |||
return(IsLetter(tr, letter, LETTERGP_VOWEL2)); | |||
} | |||
@@ -883,7 +861,7 @@ int IsVowel(Translator *tr, int letter) | |||
static int Unpronouncable2(Translator *tr, char *word) | |||
{//=================================================== | |||
{ | |||
int c; | |||
int end_flags; | |||
char ph_buf[N_WORD_PHONEMES]; | |||
@@ -900,7 +878,7 @@ static int Unpronouncable2(Translator *tr, char *word) | |||
int Unpronouncable(Translator *tr, char *word, int posn) | |||
{//===================================================== | |||
{ | |||
/* Determines whether a word in 'unpronouncable', i.e. whether it should | |||
be spoken as individual letters. | |||
@@ -978,19 +956,12 @@ int Unpronouncable(Translator *tr, char *word, int posn) | |||
return(0); | |||
} /* end of Unpronounceable */ | |||
//============================================================================================= | |||
// Determine the stress pattern of a word | |||
// | |||
//============================================================================================= | |||
} | |||
static int GetVowelStress(Translator *tr, unsigned char *phonemes, signed char *vowel_stress, int *vowel_count, int *stressed_syllable, int control) | |||
{//================================================================================================================================================= | |||
{ | |||
// control = 1, set stress to 1 for forced unstressed vowels | |||
unsigned char phcode; | |||
PHONEME_TAB *ph; | |||
@@ -1117,7 +1088,7 @@ static int GetVowelStress(Translator *tr, unsigned char *phonemes, signed char * | |||
*stressed_syllable = primary_posn; | |||
*vowel_count = count; | |||
return(max_stress); | |||
} // end of GetVowelStress | |||
} | |||
@@ -1127,7 +1098,7 @@ static char stress_phonemes[] = {phonSTRESS_D, phonSTRESS_U, phonSTRESS_2, phonS | |||
void ChangeWordStress(Translator *tr, char *word, int new_stress) | |||
{//============================================================== | |||
{ | |||
int ix; | |||
unsigned char *p; | |||
int max_stress; | |||
@@ -1176,12 +1147,12 @@ void ChangeWordStress(Translator *tr, char *word, int new_stress) | |||
*word++ = *p++; | |||
} | |||
*word = 0; | |||
} // end of ChangeWordStress | |||
} | |||
void SetWordStress(Translator *tr, char *output, unsigned int *dictionary_flags, int tonic, int control) | |||
{//===================================================================================================== | |||
{ | |||
/* Guess stress pattern of word. This is language specific | |||
'output' is used for input and output | |||
@@ -1822,21 +1793,12 @@ void SetWordStress(Translator *tr, char *output, unsigned int *dictionary_flags, | |||
*output++ = 0; | |||
return; | |||
} /* end of SetWordStress */ | |||
//============================================================================================= | |||
// Look up a word in the pronunciation rules | |||
// | |||
//============================================================================================= | |||
} | |||
void AppendPhonemes(Translator *tr, char *string, int size, const char *ph) | |||
{//======================================================================== | |||
{ | |||
/* Add new phoneme string "ph" to "string" | |||
Keeps count of the number of vowel phonemes in the word, and whether these | |||
can be stressed syllables. These values can be used in translation rules | |||
@@ -1881,12 +1843,12 @@ void AppendPhonemes(Translator *tr, char *string, int size, const char *ph) | |||
if(string != NULL) | |||
strcat(string,ph); | |||
} /* end of AppendPhonemes */ | |||
} | |||
static void MatchRule(Translator *tr, char *word[], char *word_start, int group_length, char *rule, MatchRecord *match_out, int word_flags, int dict_flags) | |||
{//======================================================================================================================================================== | |||
{ | |||
/* Checks a specified word against dictionary rules. | |||
Returns with phoneme code string, or NULL if no match found. | |||
@@ -2579,13 +2541,13 @@ static void MatchRule(Translator *tr, char *word[], char *word_start, int group_ | |||
if(best.points == 0) | |||
best.phonemes = ""; | |||
memcpy(match_out,&best,sizeof(MatchRecord)); | |||
} /* end of MatchRule */ | |||
} | |||
int TranslateRules(Translator *tr, char *p_start, char *phonemes, int ph_size, char *end_phonemes, int word_flags, unsigned int *dict_flags) | |||
{//===================================================================================================================================== | |||
{ | |||
/* Translate a word bounded by space characters | |||
Append the result to 'phonemes' and any standard prefix/suffix in 'end_phonemes' */ | |||
@@ -2885,11 +2847,11 @@ int TranslateRules(Translator *tr, char *p_start, char *phonemes, int ph_size, c | |||
memcpy(p_start,word_copy,strlen(word_copy)); | |||
return(0); | |||
} /* end of TranslateRules */ | |||
} | |||
void ApplySpecialAttribute2(Translator *tr, char *phonemes, int dict_flags) | |||
{//======================================================================== | |||
{ | |||
// apply after the translation is complete | |||
int ix; | |||
int len; | |||
@@ -2922,20 +2884,12 @@ void ApplySpecialAttribute2(Translator *tr, char *phonemes, int dict_flags) | |||
} | |||
} | |||
} | |||
} // end of ApplySpecialAttribute2 | |||
} | |||
//============================================================================================= | |||
// Look up a word in the pronunciation dictionary list | |||
// - exceptions which override the usual pronunciation rules, or which give a word | |||
// special properties, such as pronounce as unstressed | |||
//============================================================================================= | |||
int TransposeAlphabet(Translator *tr, char *text) | |||
{//============================================== | |||
{ | |||
// transpose cyrillic alphabet (for example) into ascii (single byte) character codes | |||
// return: number of bytes, bit 6: 1=used compression | |||
int c; | |||
@@ -3043,14 +2997,11 @@ int TransposeAlphabet(Translator *tr, char *text) | |||
{ | |||
return(strlen(text)); | |||
} | |||
} // end of TransposeAlphabet | |||
} | |||
static const char *LookupDict2(Translator *tr, const char *word, const char *word2, | |||
char *phonetic, unsigned int *flags, int end_flags, WORD_TAB *wtab) | |||
//===================================================================================== | |||
/* Find an entry in the word_dict file for a specified word. | |||
Returns NULL if no match, else returns 'word_end' | |||
@@ -3061,6 +3012,8 @@ static const char *LookupDict2(Translator *tr, const char *word, const char *wor | |||
end_flags: indicates whether this is a retranslation after removing a suffix | |||
*/ | |||
static const char *LookupDict2(Translator *tr, const char *word, const char *word2, | |||
char *phonetic, unsigned int *flags, int end_flags, WORD_TAB *wtab) | |||
{ | |||
char *p; | |||
char *next; | |||
@@ -3402,17 +3355,16 @@ static const char *LookupDict2(Translator *tr, const char *word, const char *wor | |||
} | |||
return(0); | |||
} // end of LookupDict2 | |||
} | |||
int LookupDictList(Translator *tr, char **wordptr, char *ph_out, unsigned int *flags, int end_flags, WORD_TAB *wtab) | |||
//================================================================================================================== | |||
/* Lookup a specified word in the word dictionary. | |||
Returns phonetic data in 'phonetic' and bits in 'flags' | |||
end_flags: indicates if a suffix has been removed | |||
*/ | |||
int LookupDictList(Translator *tr, char **wordptr, char *ph_out, unsigned int *flags, int end_flags, WORD_TAB *wtab) | |||
{ | |||
int length; | |||
const char *found; | |||
@@ -3561,13 +3513,13 @@ int LookupDictList(Translator *tr, char **wordptr, char *ph_out, unsigned int *f | |||
ph_out[0] = 0; | |||
return(0); | |||
} // end of LookupDictList | |||
} | |||
extern char word_phonemes[N_WORD_PHONEMES]; // a word translated into phoneme codes | |||
int Lookup(Translator *tr, const char *word, char *ph_out) | |||
{//========================================================= | |||
{ | |||
// Look up in *_list, returns dictionary flags[0] and phonemes | |||
int flags0; | |||
@@ -3598,7 +3550,7 @@ int Lookup(Translator *tr, const char *word, char *ph_out) | |||
int LookupFlags(Translator *tr, const char *word, unsigned int **flags_out) | |||
{//=========================================================================== | |||
{ | |||
char buf[100]; | |||
static unsigned int flags[2]; | |||
char *word1 = (char *)word; | |||
@@ -3612,7 +3564,7 @@ int LookupFlags(Translator *tr, const char *word, unsigned int **flags_out) | |||
int RemoveEnding(Translator *tr, char *word, int end_type, char *word_copy) | |||
{//======================================================================== | |||
{ | |||
/* Removes a standard suffix from a word, once it has been indicated by the dictionary rules. | |||
end_type: bits 0-6 number of letters | |||
bits 8-14 suffix flags | |||
@@ -3755,7 +3707,4 @@ int RemoveEnding(Translator *tr, char *word, int end_type, char *word_copy) | |||
end_flags &= ~FLAG_SUFX; // don't consider 's as an added suffix | |||
return(end_flags); | |||
} /* end of RemoveEnding */ | |||
} |
@@ -1,6 +1,6 @@ | |||
/*************************************************************************** | |||
* Copyright (C) 2007, Gilles Casse <[email protected]> * | |||
* Copyright (C) 2013 Reece H. Dunn * | |||
* Copyright (C) 2013-2015 Reece H. Dunn * | |||
* * | |||
* This program is free software; you can redistribute it and/or modify * | |||
* it under the terms of the GNU General Public License as published by * | |||
@@ -18,8 +18,6 @@ | |||
* 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * | |||
***************************************************************************/ | |||
// This source file is only used for asynchronious modes | |||
#include "speech.h" | |||
#include "espeak_command.h" | |||
#include <stdlib.h> |
@@ -325,7 +325,6 @@ static int no_tonic; | |||
static void count_pitch_vowels(int start, int end, int clause_end) | |||
/****************************************************************/ | |||
{ | |||
int ix; | |||
int stress; | |||
@@ -389,14 +388,13 @@ static void count_pitch_vowels(int start, int end, int clause_end) | |||
// no primary stress. Use the highest stress | |||
syllable_tab[tone_posn].stress = PRIMARY_LAST; | |||
} | |||
} /* end of count_pitch_vowels */ | |||
} | |||
static int count_increments(int ix, int end_ix, int min_stress) | |||
/*************************************************************/ | |||
/* Count number of primary stresses up to tonic syllable or body_reset */ | |||
static int count_increments(int ix, int end_ix, int min_stress) | |||
{ | |||
int count = 0; | |||
int stress; | |||
@@ -411,14 +409,13 @@ static int count_increments(int ix, int end_ix, int min_stress) | |||
count++; | |||
} | |||
return(count); | |||
} /* end of count_increments */ | |||
} | |||
static void set_pitch(SYLLABLE *syl, int base, int drop) | |||
/******************************************************/ | |||
// 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; | |||
@@ -443,11 +440,11 @@ static void set_pitch(SYLLABLE *syl, int base, int drop) | |||
syl->pitch1 = pitch1; | |||
syl->pitch2 = pitch2; | |||
syl->flags |= flags; | |||
} /* end of set_pitch */ | |||
} | |||
static int CountUnstressed(int start, int end, int limit) | |||
{//====================================================== | |||
{ | |||
int ix; | |||
for(ix=start; ix <= end; ix++) | |||
@@ -459,7 +456,7 @@ static int CountUnstressed(int start, int end, int limit) | |||
} | |||
static int SetHeadIntonation(TUNE *tune, int syl_ix, int end_ix, int control) | |||
{//========================================================================== | |||
{ | |||
int stress; | |||
SYLLABLE *syl; | |||
int ix; | |||
@@ -601,15 +598,14 @@ int secondary=2; // 2 | |||
} | |||
return(syl_ix); | |||
} // end of SetBodyIntonation | |||
} | |||
static int calc_pitch_segment(int ix, int end_ix, TONE_HEAD *th, TONE_NUCLEUS *tn, int min_stress, int continuing) | |||
/**********************************************************************************************/ | |||
/* Calculate pitches until next RESET or tonic syllable, or end. | |||
Increment pitch if stress is >= min_stress. | |||
Used for tonic segment */ | |||
static int calc_pitch_segment(int ix, int end_ix, TONE_HEAD *th, TONE_NUCLEUS *tn, int min_stress, int continuing) | |||
{ | |||
int stress; | |||
int pitch=0; | |||
@@ -719,12 +715,12 @@ static int calc_pitch_segment(int ix, int end_ix, TONE_HEAD *th, TONE_NUCLEUS *t | |||
ix++; | |||
} | |||
return(ix); | |||
} /* end of calc_pitch_segment */ | |||
} | |||
static void SetPitchGradient(int start_ix, int end_ix, int start_pitch, int end_pitch) | |||
{//==================================================================================== | |||
{ | |||
// Set a linear pitch change over a number of syllables. | |||
// Used for pre-head, unstressed syllables in the body, and the tail | |||
@@ -772,13 +768,12 @@ static void SetPitchGradient(int start_ix, int end_ix, int start_pitch, int end_ | |||
set_pitch(syl, (pitch >> 8), drop); | |||
} | |||
} | |||
} // end of SetPitchGradient | |||
} | |||
static int calc_pitches2(int start, int end, int tune_number) | |||
//============================================================ | |||
// 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; | |||
@@ -831,13 +826,12 @@ static int calc_pitches2(int start, int end, int tune_number) | |||
SetPitchGradient(ix, end, tune->tail_start, tune->tail_end); | |||
return(tone_pitch_env); | |||
} /* end of calc_pitches2 */ | |||
} | |||
static int calc_pitches(int control, 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; | |||
@@ -906,7 +900,7 @@ static int calc_pitches(int control, int start, int end, int tune_number) | |||
SetPitchGradient(ix, end, tn->tail_start, tn->tail_end); | |||
return(tone_pitch_env); | |||
} /* end of calc_pitches */ | |||
} | |||
@@ -914,7 +908,7 @@ static int calc_pitches(int control, int start, int end, int tune_number) | |||
static void CalcPitches_Tone(Translator *tr, int clause_tone) | |||
{//========================================================== | |||
{ | |||
// clause_tone: 0=. 1=, 2=?, 3=! 4=none | |||
PHONEME_LIST *p; | |||
int ix; | |||
@@ -1088,12 +1082,12 @@ static void CalcPitches_Tone(Translator *tr, int clause_tone) | |||
} | |||
} // end of Translator::CalcPitches_Tone | |||
} | |||
void CalcPitches(Translator *tr, int clause_type) | |||
{//============================================== | |||
{ | |||
// clause_type: 0=. 1=, 2=?, 3=! 4=none | |||
PHONEME_LIST *p; | |||
SYLLABLE *syl; | |||
@@ -1313,6 +1307,4 @@ if(p->tone_ph) | |||
} | |||
} | |||
} // end of CalcPitches | |||
} |
@@ -494,7 +494,7 @@ if(option_log_frames) | |||
} | |||
} | |||
return(0); | |||
} // end of parwave | |||
} | |||
@@ -998,7 +998,7 @@ static double klattp_inc[N_KLATTP]; | |||
int Wavegen_Klatt(int resume) | |||
{//========================== | |||
{ | |||
int pk; | |||
int x; | |||
int ix; | |||
@@ -1106,7 +1106,7 @@ int Wavegen_Klatt(int resume) | |||
void SetSynth_Klatt(int length, int modn, frame_t *fr1, frame_t *fr2, voice_t *v, int control) | |||
{//=========================================================================================== | |||
{ | |||
int ix; | |||
DOUBLEX next; | |||
int qix; | |||
@@ -1263,11 +1263,11 @@ if(option_log_frames) | |||
peaks[ix].ap_inc = ((next - peaks[ix].ap1) * STEPSIZE) / length; | |||
} | |||
} | |||
} // end of SetSynth_Klatt | |||
} | |||
int Wavegen_Klatt2(int length, int modulation, int resume, frame_t *fr1, frame_t *fr2) | |||
{//=================================================================================== | |||
{ | |||
if(resume==0) | |||
SetSynth_Klatt(length, modulation, fr1, fr2, wvoice, 1); | |||
@@ -1323,4 +1323,4 @@ void KlattInit() | |||
kt_frame.AB = 0; | |||
kt_frame.AVpdb = 0; | |||
kt_frame.Gain0 = 62; // 60 | |||
} // end of KlattInit | |||
} |
@@ -393,7 +393,7 @@ static const unsigned short letter_accents_250[] = { | |||
}; | |||
static int LookupLetter2(Translator *tr, unsigned int letter, char *ph_buf) | |||
{ //======================================================================== | |||
{ | |||
int len; | |||
char single_letter[10]; | |||
@@ -416,7 +416,7 @@ static int LookupLetter2(Translator *tr, unsigned int letter, char *ph_buf) | |||
void LookupAccentedLetter(Translator *tr, unsigned int letter, char *ph_buf) | |||
{//========================================================================= | |||
{ | |||
// lookup the character in the accents table | |||
int accent_data = 0; | |||
int accent1 = 0; | |||
@@ -498,12 +498,12 @@ void LookupAccentedLetter(Translator *tr, unsigned int letter, char *ph_buf) | |||
} | |||
} | |||
} | |||
} // end of LookupAccentedLetter | |||
} | |||
void LookupLetter(Translator *tr, unsigned int letter, int next_byte, char *ph_buf1, int control) | |||
{//============================================================================================== | |||
{ | |||
// control, bit 0: not the first letter of a word | |||
int len; | |||
@@ -580,7 +580,7 @@ void LookupLetter(Translator *tr, unsigned int letter, int next_byte, char *ph_b | |||
dict_flags[1] = 0; | |||
SetWordStress(tr, ph_buf1, dict_flags, -1, control & 1); | |||
} // end of LookupLetter | |||
} | |||
// unicode ranges for non-ascii digits 0-9 | |||
@@ -592,7 +592,7 @@ static const int number_ranges[] = { | |||
int NonAsciiNumber(int letter) | |||
{//============================ | |||
{ | |||
// Change non-ascii digit into ascii digit '0' to '9', (or -1 if not) | |||
const int *p; | |||
int base; | |||
@@ -683,7 +683,7 @@ static const char *hex_letters[] = {"'e:j","b'i:","s'i:","d'i:","'i:","'ef"}; / | |||
int IsSuperscript(int letter) | |||
{//=========================== | |||
{ | |||
// is this a subscript or superscript letter ? | |||
int ix; | |||
int c; | |||
@@ -701,7 +701,7 @@ int IsSuperscript(int letter) | |||
int TranslateLetter(Translator *tr, char *word, char *phonemes, int control) | |||
{//========================================================================= | |||
{ | |||
// get pronunciation for an isolated letter | |||
// return number of bytes used by the letter | |||
// control bit 0: a non-initial letter in a word | |||
@@ -990,12 +990,12 @@ int TranslateLetter(Translator *tr, char *word, char *phonemes, int control) | |||
strcpy(&phonemes[len],ph_buf2); | |||
} | |||
return(n_bytes); | |||
} // end of TranslateLetter | |||
} | |||
void SetSpellingStress(Translator *tr, char *phonemes, int control, int n_chars) | |||
{//============================================================================= | |||
{ | |||
// Individual letter names, reduce the stress of some. | |||
int ix; | |||
unsigned int c; | |||
@@ -1054,7 +1054,7 @@ void SetSpellingStress(Translator *tr, char *phonemes, int control, int n_chars) | |||
if(control >= 2) | |||
*phonemes++ = phonPAUSE_NOLINK; | |||
*phonemes = 0; | |||
} // end of SetSpellingStress | |||
} | |||
@@ -1065,7 +1065,7 @@ static char ph_ordinal2x[12]; | |||
static int CheckDotOrdinal(Translator *tr, char *word, char *word_end, WORD_TAB *wtab, int roman) | |||
{//============================================================================================== | |||
{ | |||
int ordinal = 0; | |||
int c2; | |||
@@ -1117,11 +1117,11 @@ static int CheckDotOrdinal(Translator *tr, char *word, char *word_end, WORD_TAB | |||
} | |||
} | |||
return(ordinal); | |||
} // end of CheckDotOrdinal | |||
} | |||
static int hu_number_e(const char *word, int thousandplex, int value) | |||
{//================================================================== | |||
{ | |||
// lang-hu: variant form of numbers when followed by hyphen and a suffix starting with 'a' or 'e' (but not a, e, az, ez, azt, ezt, att. ett | |||
if((word[0] == 'a') || (word[0] == 'e')) | |||
@@ -1135,12 +1135,12 @@ static int hu_number_e(const char *word, int thousandplex, int value) | |||
return(1); | |||
} | |||
return(0); | |||
} // end of hu_numnber_e | |||
} | |||
int TranslateRoman(Translator *tr, char *word, char *ph_out, WORD_TAB *wtab) | |||
{//========================================================================= | |||
{ | |||
int c; | |||
char *p; | |||
const char *p2; | |||
@@ -1275,11 +1275,11 @@ int TranslateRoman(Translator *tr, char *word, char *ph_out, WORD_TAB *wtab) | |||
strcat(ph_out,ph_roman); | |||
return(1); | |||
} // end of TranslateRoman | |||
} | |||
static const char *M_Variant(int value) | |||
{//==================================== | |||
{ | |||
// returns M, or perhaps MA or MB for some cases | |||
int teens = 0; | |||
@@ -1326,7 +1326,7 @@ static const char *M_Variant(int value) | |||
static int LookupThousands(Translator *tr, int value, int thousandplex, int thousands_exact, char *ph_out) | |||
{//======================================================================================================= | |||
{ | |||
// thousands_exact: bit 0 no hundreds,tens,or units, bit 1 ordinal numberr | |||
int found; | |||
int found_value=0; | |||
@@ -1430,11 +1430,11 @@ static int LookupThousands(Translator *tr, int value, int thousandplex, int thou | |||
return(1); | |||
return(found_value); | |||
} // end f LookupThousands | |||
} | |||
static int LookupNum2(Translator *tr, int value, int thousandplex, const int control, char *ph_out) | |||
{//============================================================================= | |||
{ | |||
// Lookup a 2 digit number | |||
// control bit 0: ordinal number | |||
// control bit 1: final tens and units (not number of thousands) (use special form of '1', LANG=de "eins") | |||
@@ -1739,11 +1739,11 @@ static int LookupNum2(Translator *tr, int value, int thousandplex, const int con | |||
} | |||
} | |||
return(used_and); | |||
} // end of LookupNum2 | |||
} | |||
static int LookupNum3(Translator *tr, int value, char *ph_out, int suppress_null, int thousandplex, int control) | |||
{//============================================================================================================= | |||
{ | |||
// Translate a 3 digit number | |||
// control bit 0, previous thousands | |||
// bit 1, ordinal number | |||
@@ -1996,11 +1996,11 @@ static int LookupNum3(Translator *tr, int value, char *ph_out, int suppress_null | |||
sprintf(ph_out,"%s%s%c%s",buf1,ph_hundred_and,phonEND_WORD,buf2); | |||
return(0); | |||
} // end of LookupNum3 | |||
} | |||
bool CheckThousandsGroup(char *word, int group_len) | |||
{//================================================ | |||
{ | |||
// Is this a group of 3 digits which looks like a thousands group? | |||
int ix; | |||
@@ -2017,7 +2017,7 @@ bool CheckThousandsGroup(char *word, int group_len) | |||
static int TranslateNumber_1(Translator *tr, char *word, char *ph_out, unsigned int *flags, WORD_TAB *wtab, int control) | |||
{//===================================================================================================================== | |||
{ | |||
// Number translation with various options | |||
// the "word" may be up to 4 digits | |||
// "words" of 3 digits may be preceded by another number "word" for thousands or millions | |||
@@ -2328,8 +2328,6 @@ static int TranslateNumber_1(Translator *tr, char *word, char *ph_out, unsigned | |||
while(IsDigit09(word[n_digits+decimal_count])) | |||
decimal_count++; | |||
// if(decimal_count > 1) | |||
{ | |||
max_decimal_count = 2; | |||
switch(decimal_mode = (tr->langopts.numbers & 0xe000)) | |||
{ | |||
@@ -2393,7 +2391,6 @@ static int TranslateNumber_1(Translator *tr, char *word, char *ph_out, unsigned | |||
strcat(ph_out, buf1); | |||
} | |||
} | |||
} | |||
while(IsDigit09(c = word[n_digits]) && (strlen(ph_out) < (N_WORD_PHONEMES - 10))) | |||
{ | |||
@@ -2438,12 +2435,12 @@ static int TranslateNumber_1(Translator *tr, char *word, char *ph_out, unsigned | |||
if(skipwords) | |||
dictionary_skipwords = skipwords; | |||
return(1); | |||
} // end of TranslateNumber_1 | |||
} | |||
int TranslateNumber(Translator *tr, char *word1, char *ph_out, unsigned int *flags, WORD_TAB *wtab, int control) | |||
{//============================================================================================================= | |||
{ | |||
if((option_sayas == SAYAS_DIGITS1) || (wtab[0].flags & FLAG_INDIVIDUAL_DIGITS)) | |||
return(0); // speak digits individually | |||
@@ -2452,5 +2449,4 @@ int TranslateNumber(Translator *tr, char *word1, char *ph_out, unsigned int *fla | |||
return(TranslateNumber_1(tr, word1, ph_out, flags, wtab, control)); | |||
} | |||
return(0); | |||
} // end of TranslateNumber | |||
} |
@@ -1,7 +1,7 @@ | |||
/*************************************************************************** | |||
* Copyright (C) 2005 to 2010 by Jonathan Duddington * | |||
* email: [email protected] * | |||
* Copyright (C) 2015 by Reece H. Dunn * | |||
* Copyright (C) 2015 Reece H. Dunn * | |||
* * | |||
* This program is free software; you can redistribute it and/or modify * | |||
* it under the terms of the GNU General Public License as published by * |
@@ -38,7 +38,7 @@ extern PHONEME_LIST2 ph_list2[N_PHONEME_LIST]; // first stage of text->phonemes | |||
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; | |||
@@ -100,12 +100,12 @@ static int SubstitutePhonemes(Translator *tr, PHONEME_LIST *plist_out) | |||
n_plist_out++; | |||
} | |||
return(n_plist_out); | |||
} // end of SubstitutePhonemes | |||
} | |||
void MakePhonemeList(Translator *tr, int post_pause, int start_sentence) | |||
{//===================================================================== | |||
{ | |||
int ix=0; | |||
int j; | |||
@@ -656,6 +656,4 @@ void MakePhonemeList(Translator *tr, int post_pause, int start_sentence) | |||
phlist[ix++].ph = phoneme_tab[phonPAUSE_SHORT]; | |||
n_phoneme_list = ix; | |||
} // end of MakePhonemeList | |||
} |
@@ -1,7 +1,7 @@ | |||
/*************************************************************************** | |||
* Copyright (C) 2005 to 2015 by Jonathan Duddington * | |||
* email: [email protected] * | |||
* Copyright (C) 2015 by Reece H. Dunn * | |||
* Copyright (C) 2015 Reece H. Dunn * | |||
* * | |||
* This program is free software; you can redistribute it and/or modify * | |||
* it under the terms of the GNU General Public License as published by * | |||
@@ -513,7 +513,7 @@ int towupper2(unsigned int c) | |||
} | |||
static int IsRomanU(unsigned int c) | |||
{//================================ | |||
{ | |||
if((c=='I') || (c=='V') || (c=='X') || (c=='L')) | |||
return(1); | |||
return(0); | |||
@@ -521,7 +521,7 @@ static int IsRomanU(unsigned int c) | |||
static void GetC_unget(int c) | |||
{//========================== | |||
{ | |||
// This is only called with UTF8 input, not wchar input | |||
if(f_input != NULL) | |||
ungetc(c,f_input); | |||
@@ -534,7 +534,7 @@ static void GetC_unget(int c) | |||
} | |||
int Eof(void) | |||
{//========== | |||
{ | |||
if(ungot_char != 0) | |||
return(0); | |||
@@ -546,7 +546,7 @@ int Eof(void) | |||
static int GetC_get(void) | |||
{//====================== | |||
{ | |||
unsigned int c; | |||
unsigned int c2; | |||
@@ -599,7 +599,7 @@ static int GetC_get(void) | |||
static int GetC(void) | |||
{//================== | |||
{ | |||
// Returns a unicode wide character | |||
// Performs UTF8 checking and conversion | |||
@@ -688,17 +688,17 @@ static int GetC(void) | |||
if(c1 >= 0xa0) | |||
return(translator->charset_a0[c1-0xa0]); | |||
return(c1); | |||
} // end of GetC | |||
} | |||
static void UngetC(int c) | |||
{//====================== | |||
{ | |||
ungot_char = c; | |||
} | |||
const char *WordToString2(unsigned int word) | |||
{//============================================ | |||
{ | |||
// Convert a language mnemonic word into a string | |||
int ix; | |||
static char buf[5]; | |||
@@ -716,7 +716,7 @@ const char *WordToString2(unsigned int word) | |||
static const char *LookupSpecial(Translator *tr, const char *string, char* text_out) | |||
{//================================================================================= | |||
{ | |||
unsigned int flags[2]; | |||
char phonemes[55]; | |||
char phonemes2[55]; | |||
@@ -735,7 +735,7 @@ static const char *LookupSpecial(Translator *tr, const char *string, char* text_ | |||
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 | |||
@@ -824,7 +824,7 @@ static const char *LookupCharName(Translator *tr, int c, int only) | |||
} | |||
int Read4Bytes(FILE *f) | |||
{//==================== | |||
{ | |||
// Read 4 bytes (least significant first) into a word | |||
int ix; | |||
unsigned char c; | |||
@@ -840,7 +840,7 @@ int Read4Bytes(FILE *f) | |||
static int LoadSoundFile(const char *fname, int index) | |||
{//=================================================== | |||
{ | |||
FILE *f; | |||
char *p; | |||
int *ip; | |||
@@ -922,11 +922,11 @@ static int LoadSoundFile(const char *fname, int index) | |||
soundicon_tab[index].length = (*ip) / 2; // length in samples | |||
soundicon_tab[index].data = p; | |||
return(0); | |||
} // end of LoadSoundFile | |||
} | |||
static int LookupSoundicon(int c) | |||
{//============================== | |||
{ | |||
// Find the sound icon number for a punctuation chatacter | |||
int ix; | |||
@@ -947,7 +947,7 @@ static int LookupSoundicon(int c) | |||
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) | |||
@@ -976,7 +976,7 @@ static int LoadSoundFile2(const char *fname) | |||
static int AnnouncePunctuation(Translator *tr, int c1, int *c2_ptr, char *output, int *bufix, int end_clause) | |||
{//============================================================================================================= | |||
{ | |||
// announce punctuation names | |||
// c1: the punctuation character | |||
// c2: the following character | |||
@@ -1105,7 +1105,7 @@ static int AnnouncePunctuation(Translator *tr, int c1, int *c2_ptr, char *output | |||
return(attributes); | |||
return(short_pause); | |||
} // end of AnnouncePunctuation | |||
} | |||
#define SSML_SPEAK 1 | |||
#define SSML_VOICE 2 | |||
@@ -1169,7 +1169,7 @@ static MNEM_TAB ssmltags[] = { | |||
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; | |||
@@ -1249,12 +1249,12 @@ static const char *VoiceFromStack() | |||
return(voice_name); | |||
} | |||
return(v_id); | |||
} // end of VoiceFromStack | |||
} | |||
static void ProcessParamStack(char *outbuf, int *outix) | |||
{//==================================================== | |||
{ | |||
// Set the speech parameters from the parameter stack | |||
int param; | |||
int ix; | |||
@@ -1306,11 +1306,11 @@ static void ProcessParamStack(char *outbuf, int *outix) | |||
*outix += strlen(buf); | |||
} | |||
} | |||
} // end of ProcessParamStack | |||
} | |||
static PARAM_STACK *PushParamStack(int tag_type) | |||
{//============================================= | |||
{ | |||
int ix; | |||
PARAM_STACK *sp; | |||
@@ -1324,11 +1324,11 @@ static PARAM_STACK *PushParamStack(int tag_type) | |||
sp->parameter[ix] = -1; | |||
} | |||
return(sp); | |||
} // end of PushParamStack | |||
} | |||
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; | |||
@@ -1348,12 +1348,12 @@ static void PopParamStack(int tag_type, char *outbuf, int *outix) | |||
n_param_stack = top; | |||
} | |||
ProcessParamStack(outbuf, outix); | |||
} // end of PopParamStack | |||
} | |||
static wchar_t *GetSsmlAttribute(wchar_t *pw, const char *name) | |||
{//============================================================ | |||
{ | |||
// Gets the value string for an attribute. | |||
// Returns NULL if the attribute is not present | |||
int ix; | |||
@@ -1384,11 +1384,11 @@ static wchar_t *GetSsmlAttribute(wchar_t *pw, const char *name) | |||
pw++; | |||
} | |||
return(NULL); | |||
} // end of GetSsmlAttribute | |||
} | |||
static int attrcmp(const wchar_t *string1, const char *string2) | |||
{//============================================================ | |||
{ | |||
int ix; | |||
if(string1 == NULL) | |||
@@ -1404,7 +1404,7 @@ static int attrcmp(const wchar_t *string1, const char *string2) | |||
static int attrlookup(const wchar_t *string1, const MNEM_TAB *mtab) | |||
{//================================================================ | |||
{ | |||
int ix; | |||
for(ix=0; mtab[ix].mnem != NULL; ix++) | |||
@@ -1417,7 +1417,7 @@ static int attrlookup(const wchar_t *string1, const MNEM_TAB *mtab) | |||
static int attrnumber(const wchar_t *pw, int default_value, int type) | |||
{//================================================================== | |||
{ | |||
int value = 0; | |||
if((pw == NULL) || !IsDigit09(*pw)) | |||
@@ -1433,12 +1433,12 @@ static int attrnumber(const wchar_t *pw, int default_value, int type) | |||
value *= 1000; | |||
} | |||
return(value); | |||
} // end of attrnumber | |||
} | |||
static int attrcopy_utf8(char *buf, const wchar_t *pw, int len) | |||
{//============================================================ | |||
{ | |||
// Convert attribute string into utf8, write to buf, and return its utf8 length | |||
unsigned int c; | |||
int ix = 0; | |||
@@ -1458,12 +1458,12 @@ static int attrcopy_utf8(char *buf, const wchar_t *pw, int len) | |||
} | |||
buf[ix] = 0; | |||
return(ix); | |||
} // end of attrcopy_utf8 | |||
} | |||
static int attr_prosody_value(int param_type, const wchar_t *pw, int *value_out) | |||
{//============================================================================= | |||
{ | |||
int sign = 0; | |||
wchar_t *tail; | |||
double value; | |||
@@ -1519,11 +1519,11 @@ static int attr_prosody_value(int param_type, const wchar_t *pw, int *value_out) | |||
*value_out = (int)value; | |||
return(sign); // -1, 0, or 1 | |||
} // end of attr_prosody_value | |||
} | |||
int AddNameData(const char *name, int wide) | |||
{//======================================== | |||
{ | |||
// Add the name to the namedata and return its position | |||
// (Used by the Windows SAPI wrapper) | |||
int ix; | |||
@@ -1553,11 +1553,11 @@ int AddNameData(const char *name, int wide) | |||
memcpy(&namedata[ix = namedata_ix],name,len); | |||
namedata_ix += len; | |||
return(ix); | |||
} // end of AddNameData | |||
} | |||
void SetVoiceStack(espeak_VOICE *v, const char *variant_name) | |||
{//========================================================== | |||
{ | |||
SSML_STACK *sp; | |||
sp = &ssml_stack[0]; | |||
@@ -1582,7 +1582,7 @@ void SetVoiceStack(espeak_VOICE *v, const char *variant_name) | |||
static int GetVoiceAttributes(wchar_t *pw, int tag_type) | |||
{//===================================================== | |||
{ | |||
// Determines whether voice attribute are specified in this tag, and if so, whether this means | |||
// a voice change. | |||
// If it's a closing tag, delete the top frame of the stack and determine whether this implies | |||
@@ -1657,11 +1657,11 @@ static int GetVoiceAttributes(wchar_t *pw, int tag_type) | |||
} | |||
return(0); | |||
} // end of GetVoiceAttributes | |||
} | |||
static void SetProsodyParameter(int param_type, wchar_t *attr1, PARAM_STACK *sp) | |||
{//============================================================================= | |||
{ | |||
int value; | |||
int sign; | |||
@@ -1729,11 +1729,11 @@ static void SetProsodyParameter(int param_type, wchar_t *attr1, PARAM_STACK *sp) | |||
sp->parameter[param_type] = speech_parameters[param_type] + (value*sign); | |||
} | |||
} | |||
} // end of SetProsodyParemeter | |||
} | |||
static int ReplaceKeyName(char *outbuf, int index, int *outix) | |||
{//=========================================================== | |||
{ | |||
// Replace some key-names by single characters, so they can be pronounced in different languages | |||
static MNEM_TAB keynames[] = { | |||
{"space ",0xe020}, | |||
@@ -1759,7 +1759,7 @@ static int ReplaceKeyName(char *outbuf, int index, int *outix) | |||
static int ProcessSsmlTag(wchar_t *xml_buf, char *outbuf, int *outix, int n_outbuf, int self_closing) | |||
{//================================================================================================== | |||
{ | |||
// xml_buf is the tag and attributes with a zero terminator in place of the original '>' | |||
// returns a clause terminator value. | |||
@@ -2213,16 +2213,16 @@ terminator=0; // ?? Sentence intonation, but no pause ?? | |||
return(CLAUSE_PARAGRAPH); | |||
} | |||
return(0); | |||
} // end of ProcessSsmlTag | |||
} | |||
static void RemoveChar(char *p) | |||
{//======================= | |||
{ | |||
// Replace a UTF-8 character by spaces | |||
int c; | |||
memset(p, ' ', utf8_in(&c, p)); | |||
} // end of RemoveChar | |||
} | |||
static MNEM_TAB xml_char_mnemonics[] = { | |||
@@ -2236,7 +2236,7 @@ static MNEM_TAB xml_char_mnemonics[] = { | |||
int ReadClause(Translator *tr, FILE *f_in, char *buf, short *charix, int *charix_top, int n_buf, int *tone_type, char *voice_change) | |||
{//================================================================================================================================= | |||
{ | |||
/* Find the end of the current clause. | |||
Write the clause into buf | |||
@@ -2936,11 +2936,11 @@ if(option_ssml) parag=1; | |||
buf[ix] = ' '; | |||
buf[ix+1] = 0; | |||
return(CLAUSE_EOF); // end of file | |||
} // end of ReadClause | |||
} | |||
void InitNamedata(void) | |||
{//==================== | |||
{ | |||
namedata_ix = 0; | |||
if(namedata != NULL) | |||
{ | |||
@@ -2952,7 +2952,7 @@ void InitNamedata(void) | |||
void InitText2(void) | |||
{//================= | |||
{ | |||
int param; | |||
ungot_char = 0; | |||
@@ -2978,4 +2978,3 @@ void InitText2(void) | |||
xmlbase = NULL; | |||
} | |||
@@ -133,12 +133,10 @@ static int speed3 = 118; | |||
//#define TEST_SPEED | |||
#ifdef INCLUDE_SONIC | |||
void SetSpeed(int control) | |||
{//======================= | |||
{ | |||
int x; | |||
int s1; | |||
int wpm; | |||
@@ -297,12 +295,12 @@ speed.min_sample_len = (speed.min_sample_len * samplerate_native) / 22050; | |||
speed.clause_pause_factor = 16; | |||
} | |||
} | |||
} // end of SetSpeed | |||
} | |||
#else // not using sonic speed-up | |||
void SetSpeed(int control) | |||
{//======================= | |||
{ | |||
// This is the earlier version of SetSpeed() before sonic speed-up was added | |||
int x; | |||
int s1; | |||
@@ -420,13 +418,13 @@ void SetSpeed(int control) | |||
speed.clause_pause_factor = 16; | |||
} | |||
} | |||
} // end of SetSpeed | |||
} | |||
#endif // of INCLUDE_SONIC | |||
void SetParameter(int parameter, int value, int relative) | |||
{//====================================================== | |||
{ | |||
// parameter: reset-all, amp, pitch, speed, linelength, expression, capitals, number grouping | |||
// relative 0=absolute 1=relative | |||
@@ -485,12 +483,12 @@ void SetParameter(int parameter, int value, int relative) | |||
default: | |||
break; | |||
} | |||
} // end of SetParameter | |||
} | |||
static void DoEmbedded2(int *embix) | |||
{//================================ | |||
{ | |||
// There were embedded commands in the text at this point | |||
unsigned int word; | |||
@@ -509,7 +507,7 @@ static void DoEmbedded2(int *embix) | |||
void CalcLengths(Translator *tr) | |||
{//============================== | |||
{ | |||
int ix; | |||
int ix2; | |||
PHONEME_LIST *prev; | |||
@@ -971,5 +969,4 @@ if(p->type != phVOWEL) | |||
break; | |||
} | |||
} | |||
} // end of CalcLengths | |||
} |
@@ -80,7 +80,7 @@ extern int saved_parameters[N_SPEECH_PARAM]; //Parameters saved on synthesis sta | |||
void WVoiceChanged(voice_t *wvoice) | |||
{//================================= | |||
{ | |||
// Voice change in wavegen | |||
voice_samplerate = wvoice->samplerate; | |||
} | |||
@@ -89,7 +89,7 @@ void WVoiceChanged(voice_t *wvoice) | |||
#ifdef USE_ASYNC | |||
static int dispatch_audio(short* outbuf, int length, espeak_EVENT* event) | |||
{//====================================================================== | |||
{ | |||
ENTER("dispatch_audio"); | |||
int a_wave_can_be_played = fifo_is_command_enabled(); | |||
@@ -187,7 +187,7 @@ static int dispatch_audio(short* outbuf, int length, espeak_EVENT* event) | |||
static int create_events(short* outbuf, int length, espeak_EVENT* event, uint32_t the_write_pos) | |||
{//===================================================================== | |||
{ | |||
int finished; | |||
int i=0; | |||
@@ -224,7 +224,7 @@ static int create_events(short* outbuf, int length, espeak_EVENT* event, uint32_ | |||
int sync_espeak_terminated_msg( uint32_t unique_identifier, void* user_data) | |||
{//===================================================================== | |||
{ | |||
ENTER("sync_espeak_terminated_msg"); | |||
int finished=0; | |||
@@ -265,7 +265,7 @@ int sync_espeak_terminated_msg( uint32_t unique_identifier, void* user_data) | |||
static void select_output(espeak_AUDIO_OUTPUT output_type) | |||
{//======================================================= | |||
{ | |||
my_mode = output_type; | |||
my_audio = NULL; | |||
synchronous_mode = 1; | |||
@@ -291,13 +291,13 @@ static void select_output(espeak_AUDIO_OUTPUT output_type) | |||
WavegenInitSound(); | |||
break; | |||
} | |||
} // end of select_output | |||
} | |||
int GetFileLength(const char *filename) | |||
{//==================================== | |||
{ | |||
struct stat statbuf; | |||
if(stat(filename,&statbuf) != 0) | |||
@@ -307,11 +307,11 @@ int GetFileLength(const char *filename) | |||
return(-2); // a directory | |||
return(statbuf.st_size); | |||
} // end of GetFileLength | |||
} | |||
char *Alloc(int size) | |||
{//================== | |||
{ | |||
char *p; | |||
if((p = (char *)malloc(size)) == NULL) | |||
fprintf(stderr,"Can't allocate memory\n"); // I was told that size+1 fixes a crash on 64-bit systems | |||
@@ -319,7 +319,7 @@ char *Alloc(int size) | |||
} | |||
void Free(void *ptr) | |||
{//================= | |||
{ | |||
if(ptr != NULL) | |||
free(ptr); | |||
} | |||
@@ -327,7 +327,7 @@ void Free(void *ptr) | |||
static void init_path(const char *path) | |||
{//==================================== | |||
{ | |||
#ifdef PLATFORM_WINDOWS | |||
HKEY RegKey; | |||
unsigned long size; | |||
@@ -382,7 +382,7 @@ static void init_path(const char *path) | |||
} | |||
static int initialise(int control) | |||
{//=============================== | |||
{ | |||
int param; | |||
int result; | |||
int srate = 22050; // default sample rate 22050 Hz | |||
@@ -418,7 +418,7 @@ static int initialise(int control) | |||
static espeak_ERROR Synthesize(unsigned int unique_identifier, const void *text, int flags) | |||
{//======================================================================================== | |||
{ | |||
// Fill the buffer with output sound | |||
int length; | |||
int finished = 0; | |||
@@ -550,7 +550,7 @@ static espeak_ERROR Synthesize(unsigned int unique_identifier, const void *text, | |||
} | |||
} | |||
return(EE_OK); | |||
} // end of Synthesize | |||
} | |||
#ifdef DEBUG_ENABLED | |||
static const char* label[] = { | |||
@@ -568,7 +568,7 @@ static const char* label[] = { | |||
void MarkerEvent(int type, unsigned int char_position, int value, int value2, unsigned char *out_ptr) | |||
{//================================================================================================== | |||
{ | |||
// type: 1=word, 2=sentence, 3=named mark, 4=play audio, 5=end, 7=phoneme | |||
ENTER("MarkerEvent"); | |||
espeak_EVENT *ep; | |||
@@ -609,7 +609,7 @@ void MarkerEvent(int type, unsigned int char_position, int value, int value2, un | |||
{ | |||
ep->id.number = value; | |||
} | |||
} // end of MarkerEvent | |||
} | |||
@@ -617,7 +617,7 @@ void MarkerEvent(int type, unsigned int char_position, int value, int value2, un | |||
espeak_ERROR sync_espeak_Synth(unsigned int unique_identifier, const void *text, size_t size, | |||
unsigned int position, espeak_POSITION_TYPE position_type, | |||
unsigned int end_position, unsigned int flags, void* user_data) | |||
{//=========================================================================== | |||
{ | |||
#ifdef DEBUG_ENABLED | |||
ENTER("sync_espeak_Synth"); | |||
@@ -660,7 +660,7 @@ espeak_ERROR sync_espeak_Synth(unsigned int unique_identifier, const void *text, | |||
SHOW_TIME("LEAVE sync_espeak_Synth"); | |||
return aStatus; | |||
} // end of sync_espeak_Synth | |||
} | |||
@@ -668,7 +668,7 @@ espeak_ERROR sync_espeak_Synth(unsigned int unique_identifier, const void *text, | |||
espeak_ERROR sync_espeak_Synth_Mark(unsigned int unique_identifier, const void *text, size_t size, | |||
const char *index_mark, unsigned int end_position, | |||
unsigned int flags, void* user_data) | |||
{//========================================================================= | |||
{ | |||
espeak_ERROR aStatus; | |||
InitText(flags); | |||
@@ -689,12 +689,12 @@ espeak_ERROR sync_espeak_Synth_Mark(unsigned int unique_identifier, const void * | |||
SHOW_TIME("LEAVE sync_espeak_Synth_Mark"); | |||
return (aStatus); | |||
} // end of sync_espeak_Synth_Mark | |||
} | |||
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; | |||
@@ -714,7 +714,7 @@ void sync_espeak_Key(const char *key) | |||
void sync_espeak_Char(wchar_t character) | |||
{//===================================== | |||
{ | |||
// is there a system resource of character names per language? | |||
char buf[80]; | |||
my_unique_identifier = 0; | |||
@@ -727,7 +727,7 @@ void sync_espeak_Char(wchar_t character) | |||
void sync_espeak_SetPunctuationList(const wchar_t *punctlist) | |||
{//========================================================== | |||
{ | |||
// Set the list of punctuation which are spoken for "some". | |||
my_unique_identifier = 0; | |||
my_user_data = NULL; | |||
@@ -738,7 +738,7 @@ void sync_espeak_SetPunctuationList(const wchar_t *punctlist) | |||
wcsncpy(option_punctlist, punctlist, N_PUNCTLIST); | |||
option_punctlist[N_PUNCTLIST-1] = 0; | |||
} | |||
} // end of sync_espeak_SetPunctuationList | |||
} | |||
@@ -747,7 +747,7 @@ void sync_espeak_SetPunctuationList(const wchar_t *punctlist) | |||
ESPEAK_API void espeak_SetSynthCallback(t_espeak_callback* SynthCallback) | |||
{//====================================================================== | |||
{ | |||
ENTER("espeak_SetSynthCallback"); | |||
synth_callback = SynthCallback; | |||
#ifdef USE_ASYNC | |||
@@ -756,19 +756,19 @@ ESPEAK_API void espeak_SetSynthCallback(t_espeak_callback* SynthCallback) | |||
} | |||
ESPEAK_API void espeak_SetUriCallback(int (* UriCallback)(int, const char*, const char *)) | |||
{//======================================================================================= | |||
{ | |||
ENTER("espeak_SetUriCallback"); | |||
uri_callback = UriCallback; | |||
} | |||
ESPEAK_API void espeak_SetPhonemeCallback(int (* PhonemeCallback)(const char*)) | |||
{//=========================================================================== | |||
{ | |||
phoneme_callback = PhonemeCallback; | |||
} | |||
ESPEAK_API int espeak_Initialize(espeak_AUDIO_OUTPUT output_type, int buf_length, const char *path, int options) | |||
{//============================================================================================================= | |||
{ | |||
ENTER("espeak_Initialize"); | |||
int param; | |||
@@ -841,7 +841,7 @@ ESPEAK_API espeak_ERROR espeak_Synth(const void *text, size_t size, | |||
espeak_POSITION_TYPE position_type, | |||
unsigned int end_position, unsigned int flags, | |||
unsigned int* unique_identifier, void* user_data) | |||
{//===================================================================================== | |||
{ | |||
#ifdef DEBUG_ENABLED | |||
ENTER("espeak_Synth"); | |||
SHOW("espeak_Synth > position=%d, position_type=%d, end_position=%d, flags=%d, user_data=0x%x, text=%s\n", position, position_type, end_position, flags, user_data, text); | |||
@@ -896,7 +896,7 @@ ESPEAK_API espeak_ERROR espeak_Synth(const void *text, size_t size, | |||
#endif | |||
return a_error; | |||
} // end of espeak_Synth | |||
} | |||
@@ -906,7 +906,7 @@ ESPEAK_API espeak_ERROR espeak_Synth_Mark(const void *text, size_t size, | |||
unsigned int flags, | |||
unsigned int* unique_identifier, | |||
void* user_data) | |||
{//========================================================================= | |||
{ | |||
#ifdef DEBUG_ENABLED | |||
ENTER("espeak_Synth_Mark"); | |||
SHOW("espeak_Synth_Mark > index_mark=%s, end_position=%d, flags=%d, text=%s\n", index_mark, end_position, flags, text); | |||
@@ -962,12 +962,12 @@ ESPEAK_API espeak_ERROR espeak_Synth_Mark(const void *text, size_t size, | |||
#endif | |||
return a_error; | |||
} // end of espeak_Synth_Mark | |||
} | |||
ESPEAK_API espeak_ERROR espeak_Key(const char *key) | |||
{//================================================ | |||
{ | |||
ENTER("espeak_Key"); | |||
// symbolic name, symbolicname_character - is there a system resource of symbolicnames per language | |||
@@ -998,7 +998,7 @@ ESPEAK_API espeak_ERROR espeak_Key(const char *key) | |||
ESPEAK_API espeak_ERROR espeak_Char(wchar_t character) | |||
{//=========================================== | |||
{ | |||
ENTER("espeak_Char"); | |||
// is there a system resource of character names per language? | |||
@@ -1031,24 +1031,24 @@ ESPEAK_API espeak_ERROR espeak_Char(wchar_t character) | |||
ESPEAK_API espeak_ERROR espeak_SetVoiceByName(const char *name) | |||
{//============================================================ | |||
{ | |||
ENTER("espeak_SetVoiceByName"); | |||
return(SetVoiceByName(name)); | |||
} // end of espeak_SetVoiceByName | |||
} | |||
ESPEAK_API espeak_ERROR espeak_SetVoiceByProperties(espeak_VOICE *voice_selector) | |||
{//============================================================================== | |||
{ | |||
ENTER("espeak_SetVoiceByProperties"); | |||
return(SetVoiceByProperties(voice_selector)); | |||
} // end of espeak_SetVoiceByProperties | |||
} | |||
ESPEAK_API int espeak_GetParameter(espeak_PARAMETER parameter, int current) | |||
{//======================================================================== | |||
{ | |||
ENTER("espeak_GetParameter"); | |||
// current: 0=default value, 1=current value | |||
if(current) | |||
@@ -1059,11 +1059,11 @@ ESPEAK_API int espeak_GetParameter(espeak_PARAMETER parameter, int current) | |||
{ | |||
return(param_defaults[parameter]); | |||
} | |||
} // end of espeak_GetParameter | |||
} | |||
ESPEAK_API espeak_ERROR espeak_SetParameter(espeak_PARAMETER parameter, int value, int relative) | |||
{//============================================================================================= | |||
{ | |||
ENTER("espeak_SetParameter"); | |||
if(f_logespeak) | |||
@@ -1095,7 +1095,7 @@ ESPEAK_API espeak_ERROR espeak_SetParameter(espeak_PARAMETER parameter, int valu | |||
ESPEAK_API espeak_ERROR espeak_SetPunctuationList(const wchar_t *punctlist) | |||
{//================================================================ | |||
{ | |||
ENTER("espeak_SetPunctuationList"); | |||
// Set the list of punctuation which are spoken for "some". | |||
@@ -1119,11 +1119,11 @@ ESPEAK_API espeak_ERROR espeak_SetPunctuationList(const wchar_t *punctlist) | |||
sync_espeak_SetPunctuationList(punctlist); | |||
return(EE_OK); | |||
#endif | |||
} // end of espeak_SetPunctuationList | |||
} | |||
ESPEAK_API void espeak_SetPhonemeTrace(int phonememode, FILE *stream) | |||
{//=================================================================== | |||
{ | |||
ENTER("espeak_SetPhonemes"); | |||
/* phonememode: Controls the output of phoneme symbols for the text | |||
bits 0-2: | |||
@@ -1142,11 +1142,11 @@ ESPEAK_API void espeak_SetPhonemeTrace(int phonememode, FILE *stream) | |||
if(stream == NULL) | |||
f_trans = stderr; | |||
} // end of espeak_SetPhonemes | |||
} | |||
ESPEAK_API const char *espeak_TextToPhonemes(const void **textptr, int textmode, int phonememode) | |||
{//================================================================================================= | |||
{ | |||
/* phoneme_mode | |||
bit 1: 0=eSpeak's ascii phoneme names, 1= International Phonetic Alphabet (as UTF-8 characters). | |||
bit 7: use (bits 8-23) as a tie within multi-letter phonemes names | |||
@@ -1160,14 +1160,14 @@ ESPEAK_API const char *espeak_TextToPhonemes(const void **textptr, int textmode, | |||
ESPEAK_API void espeak_CompileDictionary(const char *path, FILE *log, int flags) | |||
{//============================================================================= | |||
{ | |||
ENTER("espeak_CompileDictionary"); | |||
CompileDictionary(path, dictionary_name, log, NULL, flags); | |||
} // end of espeak_CompileDirectory | |||
} | |||
ESPEAK_API espeak_ERROR espeak_Cancel(void) | |||
{//=============================== | |||
{ | |||
#ifdef USE_ASYNC | |||
ENTER("espeak_Cancel"); | |||
fifo_stop(); | |||
@@ -1185,11 +1185,11 @@ ESPEAK_API espeak_ERROR espeak_Cancel(void) | |||
SetParameter(i, saved_parameters[i], 0); | |||
return EE_OK; | |||
} // end of espeak_Cancel | |||
} | |||
ESPEAK_API int espeak_IsPlaying(void) | |||
{//================================== | |||
{ | |||
#ifdef USE_ASYNC | |||
if((my_mode == AUDIO_OUTPUT_PLAYBACK) && wave_is_busy(my_audio)) | |||
return(1); | |||
@@ -1198,11 +1198,11 @@ ESPEAK_API int espeak_IsPlaying(void) | |||
#else | |||
return(0); | |||
#endif | |||
} // end of espeak_IsPlaying | |||
} | |||
ESPEAK_API espeak_ERROR espeak_Synchronize(void) | |||
{//============================================= | |||
{ | |||
espeak_ERROR berr = err; | |||
#ifdef USE_ASYNC | |||
SHOW_TIME("espeak_Synchronize > ENTER"); | |||
@@ -1214,14 +1214,14 @@ ESPEAK_API espeak_ERROR espeak_Synchronize(void) | |||
err = EE_OK; | |||
SHOW_TIME("espeak_Synchronize > LEAVE"); | |||
return berr; | |||
} // end of espeak_Synchronize | |||
} | |||
extern void FreePhData(void); | |||
extern void FreeVoiceList(void); | |||
ESPEAK_API espeak_ERROR espeak_Terminate(void) | |||
{//=========================================== | |||
{ | |||
ENTER("espeak_Terminate"); | |||
#ifdef USE_ASYNC | |||
fifo_stop(); | |||
@@ -1250,10 +1250,10 @@ ESPEAK_API espeak_ERROR espeak_Terminate(void) | |||
} | |||
return EE_OK; | |||
} // end of espeak_Terminate | |||
} | |||
ESPEAK_API const char *espeak_Info(const char **ptr) | |||
{//================================================= | |||
{ | |||
if(ptr != NULL) | |||
{ | |||
*ptr = path_home; | |||
@@ -1262,5 +1262,3 @@ ESPEAK_API const char *espeak_Info(const char **ptr) | |||
} | |||
#pragma GCC visibility pop | |||
@@ -1,7 +1,7 @@ | |||
/*************************************************************************** | |||
* Copyright (C) 2005 to 2007 by Jonathan Duddington * | |||
* email: [email protected] * | |||
* Copyright (C) 2013-2015 by Reece H. Dunn * | |||
* Copyright (C) 2013-2015 Reece H. Dunn * | |||
* * | |||
* This program is free software; you can redistribute it and/or modify * | |||
* it under the terms of the GNU General Public License as published by * | |||
@@ -58,7 +58,7 @@ static double read_double(FILE *stream) | |||
} | |||
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; | |||
@@ -92,11 +92,11 @@ float polint(float xa[],float ya[],int n,float x) | |||
y += ((2*ns < (n-m) ? c[ns+1] : d[ns--])); | |||
} | |||
return(y); | |||
} // end of polint | |||
} | |||
static void PeaksZero(peak_t *sp, peak_t *zero) | |||
{//===================================== | |||
{ | |||
int pk; | |||
memcpy(zero,sp,sizeof(peak_t)*N_PEAKS); | |||
@@ -104,7 +104,7 @@ static void PeaksZero(peak_t *sp, peak_t *zero) | |||
for(pk=0; pk<N_PEAKS; pk++) | |||
zero[pk].pkheight = 0; | |||
} // end of PeaksZero | |||
} | |||
static SpectFrame *SpectFrameCreate() | |||
{ | |||
@@ -151,7 +151,7 @@ static void SpectFrameDestroy(SpectFrame *frame) | |||
int LoadFrame(SpectFrame *frame, FILE *stream, int file_format_type) | |||
{//============================================================== | |||
{ | |||
short ix; | |||
short x; | |||
unsigned short *spect_data; | |||
@@ -215,12 +215,12 @@ int LoadFrame(SpectFrame *frame, FILE *stream, int file_format_type) | |||
frame->spect = spect_data; | |||
return(0); | |||
} // End of SpectFrame::Load | |||
} | |||
double GetFrameRms(SpectFrame *frame, int seq_amplitude) | |||
{//========================================= | |||
{ | |||
int h; | |||
float total=0; | |||
int maxh; | |||
@@ -271,7 +271,7 @@ SpectSeq *SpectSeqCreate() | |||
} | |||
void SpectSeqDestroy(SpectSeq *spect) | |||
{//================== | |||
{ | |||
int ix; | |||
if(spect->frames != NULL) | |||
{ | |||
@@ -288,7 +288,7 @@ void SpectSeqDestroy(SpectSeq *spect) | |||
static float GetFrameLength(SpectSeq *spect, int frame) | |||
{//=============================================================== | |||
{ | |||
int ix; | |||
float adjust=0; | |||
@@ -305,7 +305,7 @@ static float GetFrameLength(SpectSeq *spect, int frame) | |||
int LoadSpectSeq(SpectSeq *spect, const char *filename) | |||
{//======================================= | |||
{ | |||
short n, temp; | |||
int ix; | |||
uint32_t id1, id2, name_len; | |||
@@ -418,4 +418,4 @@ else | |||
spect->frames[ix]->length_adjust = spect->frames[ix]->length - GetFrameLength(spect,ix); | |||
} | |||
return(0); | |||
} // end of SpectSeq::Load | |||
} |
@@ -1,7 +1,7 @@ | |||
/*************************************************************************** | |||
* Copyright (C) 2005 to 2007 by Jonathan Duddington * | |||
* email: [email protected] * | |||
* Copyright (C) 2013-2015 by Reece H. Dunn * | |||
* Copyright (C) 2013-2015 Reece H. Dunn * | |||
* * | |||
* This program is free software; you can redistribute it and/or modify * | |||
* it under the terms of the GNU General Public License as published by * |
@@ -108,7 +108,7 @@ static int mbrola_control = 0; | |||
static int mbr_name_prefix = 0; | |||
espeak_ERROR LoadMbrolaTable(const char *mbrola_voice, const char *phtrans, int *srate) | |||
{//=================================================================================== | |||
{ | |||
// Load a phoneme name translation table from espeak-data/mbrola | |||
int size; | |||
@@ -194,11 +194,11 @@ espeak_ERROR LoadMbrolaTable(const char *mbrola_voice, const char *phtrans, int | |||
strcpy(mbrola_name,mbrola_voice); | |||
mbrola_delay = 1000; // improve synchronization of events | |||
return(EE_OK); | |||
} // end of LoadMbrolaTable | |||
} | |||
static int GetMbrName(PHONEME_LIST *plist, PHONEME_TAB *ph, PHONEME_TAB *ph_prev, PHONEME_TAB *ph_next, int *name2, int *split, int *control) | |||
{//========================================================================================================================================== | |||
{ | |||
// Look up a phoneme in the mbrola phoneme name translation table | |||
// It may give none, 1, or 2 mbrola phonemes | |||
MBROLA_TAB *pr; | |||
@@ -288,7 +288,7 @@ 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; | |||
@@ -401,11 +401,11 @@ static char *WritePitch(int env, int pitch1, int pitch2, int split, int final) | |||
if(final) | |||
sprintf(output,"\t100 %d\n",p_end); | |||
return(output); | |||
} // end of WritePitch | |||
} | |||
int MbrolaTranslate(PHONEME_LIST *plist, int n_phonemes, int resume, FILE *f_mbrola) | |||
{//================================================================================= | |||
{ | |||
// Generate a mbrola pho file | |||
unsigned int name; | |||
int len; | |||
@@ -628,11 +628,11 @@ int MbrolaTranslate(PHONEME_LIST *plist, int n_phonemes, int resume, FILE *f_mbr | |||
} | |||
return 0; | |||
} // end of MbrolaTranslate | |||
} | |||
int MbrolaGenerate(PHONEME_LIST *phoneme_list, int *n_ph, int resume) | |||
{//================================================================== | |||
{ | |||
FILE *f_mbrola = NULL; | |||
if(*n_ph == 0) | |||
@@ -652,7 +652,7 @@ int MbrolaGenerate(PHONEME_LIST *phoneme_list, int *n_ph, int resume) | |||
int MbrolaFill(int length, int resume, int amplitude) | |||
{//================================================== | |||
{ | |||
// Read audio data from Mbrola (length is in millisecs) | |||
static int n_samples; | |||
@@ -690,7 +690,7 @@ int MbrolaFill(int length, int resume, int amplitude) | |||
void MbrolaReset(void) | |||
{//=================== | |||
{ | |||
// Reset the Mbrola engine and flush the pending audio | |||
reset_MBR(); |
@@ -1,7 +1,7 @@ | |||
/*************************************************************************** | |||
* Copyright (C) 2005 to 2014 by Jonathan Duddington * | |||
* email: [email protected] * | |||
* Copyright (C) 2015 by Reece H. Dunn * | |||
* Copyright (C) 2015 Reece H. Dunn * | |||
* * | |||
* This program is free software; you can redistribute it and/or modify * | |||
* it under the terms of the GNU General Public License as published by * | |||
@@ -71,7 +71,7 @@ int FormantTransition2(frameref_t *seq, int *n_frames, unsigned int data1, unsig | |||
static char *ReadPhFile(void *ptr, const char *fname, int *size) | |||
{//============================================================= | |||
{ | |||
FILE *f_in; | |||
char *p; | |||
unsigned int length; | |||
@@ -105,11 +105,11 @@ static char *ReadPhFile(void *ptr, const char *fname, int *size) | |||
if(size != NULL) | |||
*size = length; | |||
return(p); | |||
} // end of ReadPhFile | |||
} | |||
int LoadPhData(int *srate) | |||
{//======================== | |||
{ | |||
int ix; | |||
int n_phonemes; | |||
int version; | |||
@@ -169,11 +169,11 @@ int LoadPhData(int *srate) | |||
if(srate != NULL) | |||
*srate = rate; | |||
return(result); | |||
} // end of LoadPhData | |||
} | |||
void FreePhData(void) | |||
{//================== | |||
{ | |||
Free(phoneme_tab_data); | |||
Free(phoneme_index); | |||
Free(phondata_ptr); | |||
@@ -186,7 +186,7 @@ void FreePhData(void) | |||
int PhonemeCode(unsigned int mnem) | |||
{//=============================== | |||
{ | |||
int ix; | |||
for(ix=0; ix<n_phoneme_tab; ix++) | |||
@@ -201,7 +201,7 @@ int PhonemeCode(unsigned int mnem) | |||
int LookupPhonemeString(const char *string) | |||
{//======================================== | |||
{ | |||
int ix; | |||
unsigned char c; | |||
unsigned int mnem; | |||
@@ -222,7 +222,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; | |||
@@ -370,12 +370,12 @@ frameref_t *LookupSpect(PHONEME_TAB *this_ph, int which, FMT_PARAMS *fmt_params, | |||
*n_frames = nf; | |||
return(frames); | |||
} // end of LookupSpect | |||
} | |||
unsigned char *GetEnvelope(int index) | |||
{//================================== | |||
{ | |||
if(index==0) | |||
{ | |||
fprintf(stderr,"espeak: No envelope\n"); | |||
@@ -386,7 +386,7 @@ unsigned char *GetEnvelope(int index) | |||
static void SetUpPhonemeTable(int number, int recursing) | |||
{//===================================================== | |||
{ | |||
int ix; | |||
int includes; | |||
int ph_code; | |||
@@ -415,20 +415,20 @@ static void SetUpPhonemeTable(int number, int recursing) | |||
if(recursing == 0) | |||
phoneme_tab_flags[ph_code] |= 1; // not inherited | |||
} | |||
} // end of SetUpPhonemeTable | |||
} | |||
void SelectPhonemeTable(int number) | |||
{//================================ | |||
{ | |||
n_phoneme_tab = 0; | |||
SetUpPhonemeTable(number,0); // recursively for included phoneme tables | |||
n_phoneme_tab++; | |||
current_phoneme_table = number; | |||
} // end of SelectPhonemeTable | |||
} | |||
int LookupPhonemeTable(const char *name) | |||
{//===================================== | |||
{ | |||
int ix; | |||
for(ix=0; ix<n_phoneme_tables; ix++) | |||
@@ -447,7 +447,7 @@ int LookupPhonemeTable(const char *name) | |||
int SelectPhonemeTableName(const char *name) | |||
{//========================================= | |||
{ | |||
// Look up a phoneme set by name, and select it if it exists | |||
// Returns the phoneme table number | |||
int ix; | |||
@@ -457,13 +457,13 @@ int SelectPhonemeTableName(const char *name) | |||
SelectPhonemeTable(ix); | |||
return(ix); | |||
} // end of DelectPhonemeTableName | |||
} | |||
void LoadConfig(void) | |||
{//================== | |||
{ | |||
// Load configuration file, if one exists | |||
char buf[sizeof(path_home)+10]; | |||
FILE *f; | |||
@@ -524,7 +524,7 @@ void LoadConfig(void) | |||
} | |||
} | |||
fclose(f); | |||
} // end of LoadConfig | |||
} | |||
@@ -533,13 +533,13 @@ PHONEME_DATA this_ph_data; | |||
static void InvalidInstn(PHONEME_TAB *ph, int instn) | |||
{//==================================================== | |||
{ | |||
fprintf(stderr,"Invalid instruction %.4x for phoneme '%s'\n", instn, WordToString(ph->mnemonic)); | |||
} | |||
static bool StressCondition(Translator *tr, PHONEME_LIST *plist, int condition, int control) | |||
{//======================================================================================== | |||
{ | |||
// condition: | |||
// 0 if diminished, 1 if unstressed, 2 if not stressed, 3 if stressed, 4 if max stress | |||
@@ -597,11 +597,11 @@ static bool StressCondition(Translator *tr, PHONEME_LIST *plist, int condition, | |||
} | |||
return(false); | |||
} // end of StressCondition | |||
} | |||
static int CountVowelPosition(PHONEME_LIST *plist) | |||
{//=============================================== | |||
{ | |||
int count = 0; | |||
for(;;) | |||
@@ -613,11 +613,11 @@ static int CountVowelPosition(PHONEME_LIST *plist) | |||
plist--; | |||
} | |||
return(count); | |||
} // end of CoundVowelPosition | |||
} | |||
static bool InterpretCondition(Translator *tr, int control, PHONEME_LIST *plist, USHORT *p_prog, WORD_PH_DATA *worddata) | |||
{//======================================================================================================================== | |||
{ | |||
int which; | |||
int ix; | |||
unsigned int data; | |||
@@ -880,11 +880,11 @@ static bool InterpretCondition(Translator *tr, int control, PHONEME_LIST *plist, | |||
} | |||
} | |||
return(false); | |||
} // end of InterpretCondition | |||
} | |||
static void SwitchOnVowelType(PHONEME_LIST *plist, PHONEME_DATA *phdata, USHORT **p_prog, int instn_type) | |||
{//======================================================================================================== | |||
{ | |||
USHORT *prog; | |||
int voweltype; | |||
signed char x; | |||
@@ -909,11 +909,11 @@ static void SwitchOnVowelType(PHONEME_LIST *plist, PHONEME_DATA *phdata, USHORT | |||
} | |||
*p_prog += 12; | |||
} // end of SwitchVowelType | |||
} | |||
int NumInstnWords(USHORT *prog) | |||
{//============================ | |||
{ | |||
int instn; | |||
int instn2; | |||
int instn_type; | |||
@@ -963,12 +963,12 @@ int NumInstnWords(USHORT *prog) | |||
} | |||
return(2); | |||
} | |||
} // end of NumInstnWords | |||
} | |||
void InterpretPhoneme(Translator *tr, int control, PHONEME_LIST *plist, PHONEME_DATA *phdata, WORD_PH_DATA *worddata) | |||
{//=================================================================================================================== | |||
{ | |||
// control: | |||
//bit 0: PreVoicing | |||
//bit 8: change phonemes | |||
@@ -1269,11 +1269,11 @@ void InterpretPhoneme(Translator *tr, int control, PHONEME_LIST *plist, PHONEME_ | |||
plist->phontab_addr = phdata->sound_addr[1]; // WAV address | |||
plist->sound_param = phdata->sound_param[1]; | |||
} | |||
} // end of InterpretPhoneme | |||
} | |||
void InterpretPhoneme2(int phcode, PHONEME_DATA *phdata) | |||
{//===================================================== | |||
{ | |||
// Examine the program of a single isolated phoneme | |||
int ix; | |||
PHONEME_LIST plist[4]; | |||
@@ -1290,4 +1290,4 @@ void InterpretPhoneme2(int phcode, PHONEME_DATA *phdata) | |||
plist[2].sourceix = 1; | |||
InterpretPhoneme(NULL, 0, &plist[1], phdata, NULL); | |||
} // end of InterpretPhoneme2 | |||
} |
@@ -76,7 +76,7 @@ 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]; | |||
@@ -90,7 +90,7 @@ const char *WordToString(unsigned int word) | |||
void SynthesizeInit() | |||
{//================== | |||
{ | |||
last_pitch_cmd = 0; | |||
last_amp_cmd = 0; | |||
last_frame = NULL; | |||
@@ -104,7 +104,7 @@ void SynthesizeInit() | |||
static void EndAmplitude(void) | |||
{//=========================== | |||
{ | |||
if(amp_length > 0) | |||
{ | |||
if(wcmdq[last_amp_cmd][1] == 0) | |||
@@ -116,7 +116,7 @@ static void EndAmplitude(void) | |||
static void EndPitch(int voice_break) | |||
{//================================== | |||
{ | |||
// posssible end of pitch envelope, fill in the length | |||
if((pitch_length > 0) && (last_pitch_cmd >= 0)) | |||
{ | |||
@@ -134,12 +134,12 @@ static void EndPitch(int voice_break) | |||
syllable_centre = -1; | |||
memset(vowel_transition,0,sizeof(vowel_transition)); | |||
} | |||
} // end of EndPitch | |||
} | |||
static void DoAmplitude(int amp, unsigned char *amp_env) | |||
{//===================================================== | |||
{ | |||
long64 *q; | |||
last_amp_cmd = wcmdq_tail; | |||
@@ -151,12 +151,12 @@ static void DoAmplitude(int amp, unsigned char *amp_env) | |||
q[2] = (long64)amp_env; | |||
q[3] = amp; | |||
WcmdqInc(); | |||
} // end of DoAmplitude | |||
} | |||
static void DoPitch(unsigned char *env, int pitch1, int pitch2) | |||
{//============================================================ | |||
{ | |||
long64 *q; | |||
EndPitch(0); | |||
@@ -180,12 +180,12 @@ static void DoPitch(unsigned char *env, int pitch1, int pitch2) | |||
q[2] = (long64)env; | |||
q[3] = (pitch1 << 16) + pitch2; | |||
WcmdqInc(); | |||
} // end of DoPitch | |||
} | |||
int PauseLength(int pause, int control) | |||
{//==================================== | |||
{ | |||
unsigned int len; | |||
if(control == 0) | |||
@@ -207,7 +207,7 @@ int PauseLength(int pause, int control) | |||
static void DoPause(int length, int control) | |||
{//========================================= | |||
{ | |||
// length in nominal mS | |||
// control = 1, less shortening at fast speeds | |||
unsigned int len; | |||
@@ -242,14 +242,14 @@ static void DoPause(int length, int control) | |||
wcmdq[wcmdq_tail][1] = fmt_amplitude = 0; | |||
WcmdqInc(); | |||
} | |||
} // end of DoPause | |||
} | |||
extern int seq_len_adjust; // temporary fix to advance the start point for playing the wav sample | |||
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; | |||
@@ -390,12 +390,12 @@ static int DoSample2(int index, int which, int std_length, int control, int leng | |||
} | |||
return(length); | |||
} // end of DoSample2 | |||
} | |||
int DoSample3(PHONEME_DATA *phdata, int length_mod, int amp) | |||
{//========================================================= | |||
{ | |||
int amp2; | |||
int len; | |||
EndPitch(1); | |||
@@ -425,13 +425,13 @@ int DoSample3(PHONEME_DATA *phdata, int length_mod, int amp) | |||
} | |||
last_frame = NULL; | |||
return(len); | |||
} // end of DoSample3 | |||
} | |||
static frame_t *AllocFrame() | |||
{//========================= | |||
{ | |||
// Allocate a temporary spectrum frame for the wavegen queue. Use a pool which is big | |||
// enough to use a round-robin without checks. | |||
// Only needed for modifying spectra for blending to consonants | |||
@@ -448,7 +448,7 @@ static frame_t *AllocFrame() | |||
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 | |||
@@ -491,12 +491,12 @@ static void set_frame_rms(frame_t *fr, int new_rms) | |||
h = fr->fheight[ix] * x; | |||
fr->fheight[ix] = h/0x200; | |||
} | |||
} /* end of set_frame_rms */ | |||
} | |||
static void formants_reduce_hf(frame_t *fr, int level) | |||
{//==================================================== | |||
{ | |||
// change height of peaks 2 to 8, percentage | |||
int ix; | |||
int x; | |||
@@ -513,7 +513,7 @@ static void formants_reduce_hf(frame_t *fr, int level) | |||
static frame_t *CopyFrame(frame_t *frame1, int copy) | |||
{//================================================= | |||
{ | |||
// create a copy of the specified frame in temporary buffer | |||
frame_t *frame2; | |||
@@ -535,7 +535,7 @@ static frame_t *CopyFrame(frame_t *frame1, int copy) | |||
static frame_t *DuplicateLastFrame(frameref_t *seq, int n_frames, int length) | |||
{//========================================================================== | |||
{ | |||
frame_t *fr; | |||
seq[n_frames-1].length = length; | |||
@@ -547,7 +547,7 @@ 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; | |||
@@ -593,7 +593,7 @@ static void AdjustFormants(frame_t *fr, int target, int min, int max, int f1_adj | |||
static int VowelCloseness(frame_t *fr) | |||
{//=================================== | |||
{ | |||
// return a value 0-3 depending on the vowel's f1 | |||
int f1; | |||
@@ -608,7 +608,7 @@ 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; | |||
@@ -756,12 +756,12 @@ if(voice->klattv[0]) | |||
if(flags & 16) | |||
return(len); | |||
return(0); | |||
} // end of FormantTransition2 | |||
} | |||
static void SmoothSpect(void) | |||
{//========================== | |||
{ | |||
// Limit the rate of frequence change of formants, to reduce chirping | |||
long64 *q; | |||
@@ -961,11 +961,11 @@ static void SmoothSpect(void) | |||
} | |||
syllable_start = syllable_end; | |||
} // end of SmoothSpect | |||
} | |||
static void StartSyllable(void) | |||
{//============================ | |||
{ | |||
// start of syllable, if not already started | |||
if(syllable_end == syllable_start) | |||
syllable_end = wcmdq_tail; | |||
@@ -974,7 +974,7 @@ static void StartSyllable(void) | |||
int DoSpect2(PHONEME_TAB *this_ph, int which, FMT_PARAMS *fmt_params, PHONEME_LIST *plist, int modulation) | |||
{//======================================================================================================== | |||
{ | |||
// which: 0 not a vowel, 1 start of vowel, 2 body and end of vowel | |||
// length_mod: 256 = 100% | |||
// modulation: -1 = don't write to wcmdq | |||
@@ -1189,13 +1189,13 @@ if(which==1) | |||
return(total_len); | |||
} // end of DoSpect | |||
} | |||
void DoMarker(int type, int char_posn, int length, int value) | |||
{//========================================================== | |||
{ | |||
// This could be used to return an index to the word currently being spoken | |||
// Type 1=word, 2=sentence, 3=named marker, 4=play audio, 5=end | |||
if(WcmdqFree() > 5) | |||
@@ -1205,11 +1205,11 @@ void DoMarker(int type, int char_posn, int length, int value) | |||
wcmdq[wcmdq_tail][2] = value; | |||
WcmdqInc(); | |||
} | |||
} // end of DoMarker | |||
} | |||
void DoPhonemeMarker(int type, int char_posn, int length, char *name) | |||
{//================================================================== | |||
{ | |||
// This could be used to return an index to the word currently being spoken | |||
// Type 7=phoneme | |||
int *p; | |||
@@ -1223,22 +1223,22 @@ void DoPhonemeMarker(int type, int char_posn, int length, char *name) | |||
wcmdq[wcmdq_tail][3] = p[1]; | |||
WcmdqInc(); | |||
} | |||
} // end of DoMarker | |||
} | |||
#ifdef INCLUDE_SONIC | |||
void DoSonicSpeed(int value) | |||
{//========================= | |||
{ | |||
// value, multiplier * 1024 | |||
wcmdq[wcmdq_tail][0] = WCMD_SONIC_SPEED; | |||
wcmdq[wcmdq_tail][1] = value; | |||
WcmdqInc(); | |||
} // end of DoSonicSpeed | |||
} | |||
#endif | |||
void DoVoiceChange(voice_t *v) | |||
{//=========================== | |||
{ | |||
// allocate memory for a copy of the voice data, and free it in wavegenfill() | |||
voice_t *v2; | |||
@@ -1251,7 +1251,7 @@ void DoVoiceChange(voice_t *v) | |||
void DoEmbedded(int *embix, int sourceix) | |||
{//====================================== | |||
{ | |||
// There were embedded commands in the text at this point | |||
unsigned int word; // bit 7=last command for this word, bits 5,6 sign, bits 0-4 command | |||
unsigned int value; | |||
@@ -1311,7 +1311,7 @@ void DoEmbedded(int *embix, int sourceix) | |||
int Generate(PHONEME_LIST *phoneme_list, int *n_ph, int resume) | |||
{//============================================================ | |||
{ | |||
static int ix; | |||
static int embedded_ix; | |||
static int word_count; | |||
@@ -1816,7 +1816,7 @@ int Generate(PHONEME_LIST *phoneme_list, int *n_ph, int resume) | |||
} | |||
return(0); // finished the phoneme list | |||
} // end of Generate | |||
} | |||
@@ -1825,7 +1825,7 @@ static int timer_on = 0; | |||
static int paused = 0; | |||
int SynthOnTimer() | |||
{//=============== | |||
{ | |||
if(!timer_on) | |||
{ | |||
return(WavegenCloseSound()); | |||
@@ -1846,14 +1846,14 @@ int SynthOnTimer() | |||
int SynthStatus() | |||
{//============== | |||
{ | |||
return(timer_on | paused); | |||
} | |||
int SpeakNextClause(FILE *f_in, const void *text_in, int control) | |||
{//============================================================== | |||
{ | |||
// Speak text from file (f_in) or memory (text_in) | |||
// control 0: start | |||
// either f_in or text_in is set, the other must be NULL | |||
@@ -1994,5 +1994,4 @@ int SpeakNextClause(FILE *f_in, const void *text_in, int control) | |||
} | |||
return(1); | |||
} // end of SpeakNextClause | |||
} |
@@ -1,7 +1,7 @@ | |||
/*************************************************************************** | |||
* Copyright (C) 2005 to 2014 by Jonathan Duddington * | |||
* email: [email protected] * | |||
* Copyright (C) 2015 by Reece H. Dunn * | |||
* Copyright (C) 2015 Reece H. Dunn * | |||
* * | |||
* This program is free software; you can redistribute it and/or modify * | |||
* it under the terms of the GNU General Public License as published by * |
@@ -106,7 +106,7 @@ ALPHABET alphabets [] = { | |||
ALPHABET *AlphabetFromName(const char *name) | |||
{//========================================== | |||
{ | |||
ALPHABET *alphabet; | |||
for(alphabet=alphabets; alphabet->name != NULL; alphabet++) | |||
@@ -119,7 +119,7 @@ ALPHABET *AlphabetFromName(const char *name) | |||
ALPHABET *AlphabetFromChar(int c) | |||
{//=============================== | |||
{ | |||
// Find the alphabet from a character. | |||
ALPHABET *alphabet = alphabets; | |||
@@ -144,12 +144,12 @@ static void Translator_Russian(Translator *tr); | |||
static void SetLetterVowel(Translator *tr, int c) | |||
{//============================================== | |||
{ | |||
tr->letter_bits[c] = (tr->letter_bits[c] & 0x40) | 0x81; // keep value for group 6 (front vowels e,i,y) | |||
} | |||
static void ResetLetterBits(Translator *tr, int groups) | |||
{//==================================================== | |||
{ | |||
// Clear all the specified groups | |||
unsigned int ix; | |||
unsigned int mask; | |||
@@ -163,7 +163,7 @@ static void ResetLetterBits(Translator *tr, int groups) | |||
} | |||
static void SetLetterBits(Translator *tr, int group, const char *string) | |||
{//===================================================================== | |||
{ | |||
int bits; | |||
unsigned char c; | |||
@@ -173,7 +173,7 @@ static void SetLetterBits(Translator *tr, int group, const char *string) | |||
} | |||
static void SetLetterBitsRange(Translator *tr, int group, int first, int last) | |||
{//=========================================================================== | |||
{ | |||
int bits; | |||
int ix; | |||
@@ -203,7 +203,7 @@ const char string_ordinal[] = {0xc2,0xba,0}; // masculine ordinal character, UT | |||
static Translator* NewTranslator(void) | |||
{//=================================== | |||
{ | |||
Translator *tr; | |||
int ix; | |||
static const unsigned char stress_amps2[] = {18,18, 20,20, 20,22, 22,20 }; | |||
@@ -394,7 +394,7 @@ static const unsigned char ru_vowels[] = {0x10,0x15,0x31,0x18,0x1e,0x23,0x2b,0x2 | |||
static const unsigned char ru_consonants[] = {0x11,0x12,0x13,0x14,0x16,0x17,0x19,0x1a,0x1b,0x1c,0x1d,0x1f,0x20,0x21,0x22,0x24,0x25,0x26,0x27,0x28,0x29,0x2a,0x2c, 0x73,0x7b,0x83,0x9b,0}; | |||
static void SetCyrillicLetters(Translator *tr) | |||
{//=========================================== | |||
{ | |||
// character codes offset by 0x420 | |||
static const char ru_soft[] = {0x2c,0x19,0x27,0x29,0}; // letter group B [k ts; s;] | |||
static const char ru_hard[] = {0x2a,0x16,0x26,0x28,0}; // letter group H [S Z ts] | |||
@@ -417,11 +417,11 @@ static void SetCyrillicLetters(Translator *tr) | |||
SetLetterBits(tr,LETTERGP_G,ru_voiced); | |||
SetLetterBits(tr,LETTERGP_Y,ru_ivowels); | |||
SetLetterBits(tr,LETTERGP_VOWEL2,(char *)ru_vowels); | |||
} // end of SetCyrillicLetters | |||
} | |||
void SetIndicLetters(Translator *tr) | |||
{//================================= | |||
{ | |||
// Set letter types for Indic scripts, Devanagari, Tamill, etc | |||
static const char dev_consonants2[] = {0x02,0x03,0x58,0x59,0x5a,0x5b,0x5c,0x5d,0x5e,0x5f,0x7b,0x7c,0x7e,0x7f,0}; | |||
static const char dev_vowels2[] = {0x60,0x61, 0x55,0x56,0x57,0x62,0x63,0}; // non-consecutive vowels and vowel-signs | |||
@@ -447,7 +447,7 @@ void SetIndicLetters(Translator *tr) | |||
void SetupTranslator(Translator *tr, const short *lengths, const unsigned char *amps) | |||
{//================================================================================== | |||
{ | |||
if(lengths != NULL) | |||
memcpy(tr->stress_lengths,lengths,sizeof(tr->stress_lengths)); | |||
if(amps != NULL) | |||
@@ -456,7 +456,7 @@ void SetupTranslator(Translator *tr, const short *lengths, const unsigned char * | |||
Translator *SelectTranslator(const char *name) | |||
{//=========================================== | |||
{ | |||
int name2 = 0; | |||
Translator *tr; | |||
@@ -1668,11 +1668,11 @@ SetLengthMods(tr,3); // all equal | |||
ProcessLanguageOptions(&tr->langopts); | |||
return(tr); | |||
} // end of SelectTranslator | |||
} | |||
void ProcessLanguageOptions(LANGUAGE_OPTIONS *langopts) | |||
{//===================================================== | |||
{ | |||
if(langopts->numbers & NUM_DECIMAL_COMMA) | |||
{ | |||
// use . and ; for thousands and decimal separators | |||
@@ -1685,13 +1685,9 @@ void ProcessLanguageOptions(LANGUAGE_OPTIONS *langopts) | |||
} | |||
} | |||
//********************************************************************************************************** | |||
static void Translator_Russian(Translator *tr) | |||
{//=========================================== | |||
{ | |||
static const unsigned char stress_amps_ru[] = {16,16, 18,18, 20,24, 24,22 }; | |||
static const short stress_lengths_ru[8] = {150,140, 220,220, 0,0, 260,280}; | |||
static const char ru_ivowels2[] = {0x2c,0x15,0x18,0x2e,0x2f,0}; // add more vowels to letter group Y (iotated vowels & soft-sign) | |||
@@ -1711,4 +1707,4 @@ static void Translator_Russian(Translator *tr) | |||
tr->langopts.phoneme_change = 1; | |||
tr->langopts.testing = 2; | |||
} // end of Translator_Russian | |||
} |
@@ -313,7 +313,7 @@ static unsigned char length_mods_en[100] = { | |||
105,120,100,105,105,122,125,110,105, 100, /* r */ | |||
105,120, 95,105,100,115,120,110,100, 100, /* N */ | |||
100,120,100,100,100,100,100,100,100, 100 | |||
}; // SPARE | |||
}; | |||
// as above, but for the last syllable in a word | |||
static unsigned char length_mods_en0[100] = { | |||
@@ -328,7 +328,7 @@ static unsigned char length_mods_en0[100] = { | |||
105,150,100,105,105,122,135,120,105, 100, /* r */ | |||
105,150,100,105,105,115,135,110,105, 100, /* N */ | |||
100,100,100,100,100,100,100,100,100, 100 | |||
}; // SPARE | |||
}; | |||
static unsigned char length_mods_equal[100] = { | |||
@@ -343,7 +343,7 @@ static unsigned char length_mods_equal[100] = { | |||
110,120,100,110,110,110,110,110,110, 110, /* r */ | |||
110,120,100,110,110,110,110,110,110, 110, /* N */ | |||
110,120,100,110,110,110,110,110,110, 110 | |||
}; // SPARE | |||
}; | |||
static unsigned char *length_mod_tabs[6] = { | |||
@@ -357,7 +357,7 @@ static unsigned char *length_mod_tabs[6] = { | |||
void SetLengthMods(Translator *tr, int value) | |||
{//========================================== | |||
{ | |||
int value2; | |||
tr->langopts.length_mods0 = tr->langopts.length_mods = length_mod_tabs[value % 100]; | |||
@@ -370,7 +370,7 @@ void SetLengthMods(Translator *tr, int value) | |||
int IsAlpha(unsigned int c) | |||
{//======================== | |||
{ | |||
// Replacement for iswalph() which also checks for some in-word symbols | |||
static const unsigned short extra_indic_alphas[] = { | |||
@@ -428,14 +428,14 @@ int IsAlpha(unsigned int c) | |||
} | |||
int IsDigit09(unsigned int c) | |||
{//============================ | |||
{ | |||
if((c >= '0') && (c <= '9')) | |||
return(1); | |||
return(0); | |||
} | |||
int IsDigit(unsigned int c) | |||
{//======================== | |||
{ | |||
if(iswdigit(c)) | |||
return(1); | |||
@@ -446,21 +446,19 @@ int IsDigit(unsigned int c) | |||
} | |||
int IsSpace(unsigned int c) | |||
{//======================== | |||
{ | |||
if(c == 0) | |||
return(0); | |||
if((c >= 0x2500) && (c < 0x25a0)) | |||
return(1); // box drawing characters | |||
if((c >= 0xfff9) && (c <= 0xffff)) | |||
return(1); // unicode specials | |||
// if(wcschr(chars_space,c)) | |||
// return(1); | |||
return(iswspace(c)); | |||
} | |||
void DeleteTranslator(Translator *tr) | |||
{//================================== | |||
{ | |||
if(tr->data_dictlist != NULL) | |||
Free(tr->data_dictlist); | |||
Free(tr); | |||
@@ -468,7 +466,7 @@ void DeleteTranslator(Translator *tr) | |||
int lookupwchar(const unsigned short *list,int c) | |||
{//============================================== | |||
{ | |||
// Is the character c in the list ? | |||
int ix; | |||
@@ -482,7 +480,7 @@ int lookupwchar(const unsigned short *list,int c) | |||
int lookupwchar2(const unsigned short *list,int c) | |||
{//============================================== | |||
{ | |||
// Replace character c by another character. | |||
// Returns 0 = not found, 1 = delete character | |||
int ix; | |||
@@ -497,7 +495,7 @@ int lookupwchar2(const unsigned short *list,int c) | |||
int IsBracket(int c) | |||
{//================= | |||
{ | |||
if((c >= 0x2014) && (c <= 0x201f)) | |||
return(1); | |||
return(lookupwchar(brackets,c)); | |||
@@ -505,7 +503,7 @@ int IsBracket(int c) | |||
int utf8_out(unsigned int c, char *buf) | |||
{//==================================== | |||
{ | |||
// write a unicode character into a buffer as utf8 | |||
// returns the number of bytes written | |||
int n_bytes; | |||
@@ -538,11 +536,11 @@ int utf8_out(unsigned int c, char *buf) | |||
buf[j+1] = 0x80 + ((c >> shift) & 0x3f); | |||
} | |||
return(n_bytes+1); | |||
} // end of utf8_out | |||
} | |||
int utf8_nbytes(const char *buf) | |||
{//============================= | |||
{ | |||
// Returns the number of bytes for the first UTF-8 character in buf | |||
unsigned char c = (unsigned char)buf[0]; | |||
if(c < 0x80) | |||
@@ -556,7 +554,7 @@ int utf8_nbytes(const char *buf) | |||
int utf8_in2(int *c, const char *buf, int backwards) | |||
{//================================================= | |||
{ | |||
// Read a unicode characater from a UTF8 string | |||
// Returns the number of UTF8 bytes used. | |||
// backwards: set if we are moving backwards through the UTF8 string | |||
@@ -598,7 +596,7 @@ int utf8_in2(int *c, const char *buf, int backwards) | |||
int utf8_in(int *c, const char *buf) | |||
{//================================= | |||
{ | |||
// Read a unicode characater from a UTF8 string | |||
// Returns the number of UTF8 bytes used. | |||
return(utf8_in2(c,buf,0)); | |||
@@ -606,7 +604,7 @@ int utf8_in(int *c, const char *buf) | |||
char *strchr_w(const char *s, int c) | |||
{//================================= | |||
{ | |||
// return NULL for any non-ascii character | |||
if(c >= 0x80) | |||
return(NULL); | |||
@@ -615,7 +613,7 @@ char *strchr_w(const char *s, int c) | |||
int IsAllUpper(const char *word) | |||
{//============================= | |||
{ | |||
int c; | |||
while((*word != 0) && !isspace2(*word)) | |||
{ | |||
@@ -628,7 +626,7 @@ int IsAllUpper(const char *word) | |||
static char *SpeakIndividualLetters(Translator *tr, char *word, char *phonemes, int spell_word) | |||
{//============================================================================================ | |||
{ | |||
int posn = 0; | |||
int capitals = 0; | |||
int non_initial = 0; | |||
@@ -652,12 +650,12 @@ static char *SpeakIndividualLetters(Translator *tr, char *word, char *phonemes, | |||
} | |||
SetSpellingStress(tr,phonemes,spell_word,posn); | |||
return(word); | |||
} // end of SpeakIndividualLetters | |||
} | |||
static int CheckDottedAbbrev(char *word1, WORD_TAB *wtab) | |||
{//===================================================== | |||
{ | |||
int wc; | |||
int count = 0; | |||
int nbytes; | |||
@@ -717,13 +715,13 @@ static int CheckDottedAbbrev(char *word1, WORD_TAB *wtab) | |||
dictionary_skipwords = (count - 1)*2; | |||
} | |||
return(count); | |||
} // end of CheckDottedAbbrev | |||
} | |||
extern char *phondata_ptr; | |||
int ChangeEquivalentPhonemes(Translator *tr, int lang2, char *phonemes) | |||
{//==================================================================== | |||
{ | |||
// tr: the original language | |||
// lang2: phoneme table number for the temporary language | |||
// phonemes: the phonemes to be replaced | |||
@@ -808,13 +806,13 @@ int ChangeEquivalentPhonemes(Translator *tr, int lang2, char *phonemes) | |||
fprintf(f_trans,"%s\n\n", phonbuf); | |||
} | |||
return(1); | |||
} // end of ChangeEquivalentPhonemes | |||
} | |||
int TranslateWord(Translator *tr, char *word_start, int next_pause, WORD_TAB *wtab, char *word_out) | |||
{//================================================================================================== | |||
{ | |||
// word1 is terminated by space (0x20) character | |||
char *word1; | |||
@@ -1611,12 +1609,12 @@ int TranslateWord(Translator *tr, char *word_start, int next_pause, WORD_TAB *wt | |||
dictionary_flags[0] |= was_unpronouncable; | |||
memcpy(word_start, word_copy2, word_copy_length); | |||
return(dictionary_flags[0]); | |||
} // end of TranslateWord | |||
} | |||
static void SetPlist2(PHONEME_LIST2 *p, unsigned char phcode) | |||
{//========================================================== | |||
{ | |||
p->phcode = phcode; | |||
p->stresslevel = 0; | |||
p->tone_ph = 0; | |||
@@ -1626,7 +1624,7 @@ static void SetPlist2(PHONEME_LIST2 *p, unsigned char phcode) | |||
} | |||
static int CountSyllables(unsigned char *phonemes) | |||
{//=============================================== | |||
{ | |||
int count = 0; | |||
int phon; | |||
while((phon = *phonemes++) != 0) | |||
@@ -1639,7 +1637,7 @@ static int CountSyllables(unsigned char *phonemes) | |||
void Word_EmbeddedCmd() | |||
{//==================== | |||
{ | |||
// Process embedded commands for emphasis, sayas, and break | |||
int embedded_cmd; | |||
int value; | |||
@@ -1668,11 +1666,11 @@ void Word_EmbeddedCmd() | |||
break; | |||
} | |||
} while(((embedded_cmd & 0x80) == 0) && (embedded_read < embedded_ix)); | |||
} // end of Word_EmbeddedCmd | |||
} | |||
int SetTranslator2(const char *new_language) | |||
{//========================================= | |||
{ | |||
// Set translator2 to a second language | |||
int new_phoneme_tab; | |||
const char *new_phtab_name; | |||
@@ -1733,12 +1731,12 @@ int SetTranslator2(const char *new_language) | |||
if(translator2 != NULL) | |||
translator2->phonemes_repeat[0] = 0; | |||
return(new_phoneme_tab); | |||
} // end of SetTranslator2 | |||
} | |||
static int TranslateWord2(Translator *tr, char *word, WORD_TAB *wtab, int pre_pause, int next_pause) | |||
{//================================================================================================= | |||
{ | |||
int flags=0; | |||
int stress; | |||
int next_stress; | |||
@@ -2283,12 +2281,12 @@ static int TranslateWord2(Translator *tr, char *word, WORD_TAB *wtab, int pre_pa | |||
tr->prev_dict_flags[0] = flags; | |||
return(flags); | |||
} // end of TranslateWord2 | |||
} | |||
static int EmbeddedCommand(unsigned int *source_index_out) | |||
{//======================================================= | |||
{ | |||
// An embedded command to change the pitch, volume, etc. | |||
// returns number of commands added to embedded_list | |||
@@ -2349,12 +2347,12 @@ static int EmbeddedCommand(unsigned int *source_index_out) | |||
embedded_list[embedded_ix++] = cmd + sign + (value << 8); | |||
*source_index_out = source_index; | |||
return(1); | |||
} // end of EmbeddedCommand | |||
} | |||
static int SubstituteChar(Translator *tr, unsigned int c, unsigned int next_in, int *insert, int *wordflags) | |||
{//========================================================================================= | |||
{ | |||
int ix; | |||
unsigned int word; | |||
unsigned int new_c, c2, c_lower; | |||
@@ -2423,7 +2421,7 @@ static int SubstituteChar(Translator *tr, unsigned int c, unsigned int next_in, | |||
static int TranslateChar(Translator *tr, char *ptr, int prev_in, unsigned int c, unsigned int next_in, int *insert, int *wordflags) | |||
{//================================================================================================================ | |||
{ | |||
// To allow language specific examination and replacement of characters | |||
int code; | |||
@@ -2506,7 +2504,7 @@ static int TranslateChar(Translator *tr, char *ptr, int prev_in, unsigned int c, | |||
static const char *UCase_ga[] = {"bp","bhf","dt","gc","hA","mb","nd","ng","ts","tA","nA",NULL}; | |||
int UpperCaseInWord(Translator *tr, char *word, int c) | |||
{//===================================================== | |||
{ | |||
int ix; | |||
int len; | |||
const char *p; | |||
@@ -2532,7 +2530,7 @@ int UpperCaseInWord(Translator *tr, char *word, int c) | |||
void *TranslateClause(Translator *tr, FILE *f_text, const void *vp_input, int *tone_out, char **voice_change) | |||
{//========================================================================================================== | |||
{ | |||
int ix; | |||
int c; | |||
int cc; | |||
@@ -3496,14 +3494,14 @@ void *TranslateClause(Translator *tr, FILE *f_text, const void *vp_input, int *t | |||
return((void *)p_wchar_input); | |||
else | |||
return((void *)p_textinput); | |||
} // end of TranslateClause | |||
} | |||
void InitText(int control) | |||
{//======================= | |||
{ | |||
count_sentences = 0; | |||
count_words = 0; | |||
end_character_position = 0; | |||
@@ -3529,4 +3527,3 @@ void InitText(int control) | |||
InitNamedata(); | |||
} | |||
} | |||
@@ -1,7 +1,7 @@ | |||
/*************************************************************************** | |||
* Copyright (C) 2005 to 2014 by Jonathan Duddington * | |||
* email: [email protected] * | |||
* Copyright (C) 2015 by Reece H. Dunn * | |||
* Copyright (C) 2015 Reece H. Dunn * | |||
* * | |||
* This program is free software; you can redistribute it and/or modify * | |||
* it under the terms of the GNU General Public License as published by * | |||
@@ -603,7 +603,7 @@ typedef struct { | |||
typedef struct | |||
{//=========== | |||
{ | |||
LANGUAGE_OPTIONS langopts; | |||
int translator_name; |
@@ -1,7 +1,7 @@ | |||
/*************************************************************************** | |||
* Copyright (C) 2005 to 2007 by Jonathan Duddington * | |||
* email: [email protected] * | |||
* Copyright (C) 2015 by Reece H. Dunn * | |||
* Copyright (C) 2015 Reece H. Dunn * | |||
* * | |||
* This program is free software; you can redistribute it and/or modify * | |||
* it under the terms of the GNU General Public License as published by * |
@@ -1,7 +1,7 @@ | |||
/*************************************************************************** | |||
* Copyright (C) 2005 to 2015 by Jonathan Duddington * | |||
* email: [email protected] * | |||
* Copyright (C) 2015 by Reece H. Dunn * | |||
* Copyright (C) 2015 Reece H. Dunn * | |||
* * | |||
* This program is free software; you can redistribute it and/or modify * | |||
* it under the terms of the GNU General Public License as published by * | |||
@@ -190,7 +190,7 @@ voice_t *voice = &voicedata; | |||
static char *fgets_strip(char *buf, int size, FILE *f_in) | |||
{//====================================================== | |||
{ | |||
// strip trailing spaces, and truncate lines at // comment | |||
int len; | |||
char *p; | |||
@@ -216,7 +216,7 @@ static char *fgets_strip(char *buf, int size, FILE *f_in) | |||
static int LookupTune(const char *name) | |||
{//==================================== | |||
{ | |||
int ix; | |||
for(ix=0; ix<n_tunes; ix++) | |||
@@ -225,12 +225,12 @@ static int LookupTune(const char *name) | |||
return(ix); | |||
} | |||
return(-1); | |||
} // end of LookupTune | |||
} | |||
static void SetToneAdjust(voice_t *voice, int *tone_pts) | |||
{//===================================================== | |||
{ | |||
int ix; | |||
int pt; | |||
int y; | |||
@@ -269,7 +269,7 @@ static void SetToneAdjust(voice_t *voice, int *tone_pts) | |||
void ReadTonePoints(char *string, int *tone_pts) | |||
{//============================================= | |||
{ | |||
// tone_pts[] is int[12] | |||
int ix; | |||
@@ -286,7 +286,7 @@ void ReadTonePoints(char *string, int *tone_pts) | |||
static espeak_VOICE *ReadVoiceFile(FILE *f_in, const char *fname, const char*leafname) | |||
{//=================================================================================== | |||
{ | |||
// Read a Voice file, allocate a VOICE_DATA and set data from the | |||
// file's language, gender, name lines | |||
@@ -391,13 +391,13 @@ static espeak_VOICE *ReadVoiceFile(FILE *f_in, const char *fname, const char*lea | |||
voice_data->variant = 0; | |||
voice_data->xx1 = n_variants; | |||
return(voice_data); | |||
} // end of ReadVoiceFile | |||
} | |||
void VoiceReset(int tone_only) | |||
{//=========================== | |||
{ | |||
// Set voice to the default values | |||
int pk; | |||
@@ -464,11 +464,11 @@ void VoiceReset(int tone_only) | |||
option_quiet = 0; | |||
LoadMbrolaTable(NULL,NULL,0); | |||
} | |||
} // end of VoiceReset | |||
} | |||
static void VoiceFormant(char *p) | |||
{//============================== | |||
{ | |||
// Set parameters for a formant | |||
int ix; | |||
int formant; | |||
@@ -498,7 +498,7 @@ static void VoiceFormant(char *p) | |||
static void PhonemeReplacement(int type, char *p) | |||
{//============================================== | |||
{ | |||
int n; | |||
int phon; | |||
int flags = 0; | |||
@@ -516,12 +516,12 @@ static void PhonemeReplacement(int type, char *p) | |||
replace_phonemes[n_replace_phonemes].old_ph = phon; | |||
replace_phonemes[n_replace_phonemes].new_ph = LookupPhonemeString(phon_string2); | |||
replace_phonemes[n_replace_phonemes++].type = flags; | |||
} // end of PhonemeReplacement | |||
} | |||
static int Read8Numbers(char *data_in,int *data) | |||
{//============================================= | |||
{ | |||
// Read 8 integer numbers | |||
memset(data, 0, 8+sizeof(int)); | |||
return(sscanf(data_in,"%d %d %d %d %d %d %d %d", | |||
@@ -530,7 +530,7 @@ 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; | |||
@@ -545,7 +545,7 @@ static unsigned int StringToWord2(const char *string) | |||
voice_t *LoadVoice(const char *vname, int control) | |||
{//=============================================== | |||
{ | |||
// control, bit 0 1= no_default | |||
// bit 1 1 = change tone only, not language | |||
// bit 2 1 = don't report error on LoadDictionary | |||
@@ -1129,11 +1129,11 @@ voice_t *LoadVoice(const char *vname, int control) | |||
} | |||
return(voice); | |||
} // end of LoadVoice | |||
} | |||
static char *ExtractVoiceVariantName(char *vname, int variant_num, int add_dir) | |||
{//=========================================================================== | |||
{ | |||
// Remove any voice variant suffix (name or number) from a voice name | |||
// Returns the voice variant name | |||
@@ -1174,12 +1174,12 @@ static char *ExtractVoiceVariantName(char *vname, int variant_num, int add_dir) | |||
} | |||
return(variant_name); | |||
} // end of ExtractVoiceVariantName | |||
} | |||
voice_t *LoadVoiceVariant(const char *vname, int variant_num) | |||
{//========================================================== | |||
{ | |||
// Load a voice file. | |||
// Also apply a voice variant if specified by "variant", or by "+number" or "+name" in the "vname" | |||
@@ -1203,7 +1203,7 @@ voice_t *LoadVoiceVariant(const char *vname, int variant_num) | |||
static int __cdecl VoiceNameSorter(const void *p1, const void *p2) | |||
{//======================================================= | |||
{ | |||
int ix; | |||
espeak_VOICE *v1 = *(espeak_VOICE **)p1; | |||
espeak_VOICE *v2 = *(espeak_VOICE **)p2; | |||
@@ -1218,7 +1218,7 @@ static int __cdecl VoiceNameSorter(const void *p1, const void *p2) | |||
static int __cdecl VoiceScoreSorter(const void *p1, const void *p2) | |||
{//======================================================== | |||
{ | |||
int ix; | |||
espeak_VOICE *v1 = *(espeak_VOICE **)p1; | |||
espeak_VOICE *v2 = *(espeak_VOICE **)p2; | |||
@@ -1230,7 +1230,7 @@ static int __cdecl VoiceScoreSorter(const void *p1, const void *p2) | |||
static int ScoreVoice(espeak_VOICE *voice_spec, const char *spec_language, int spec_n_parts, int spec_lang_len, espeak_VOICE *voice) | |||
{//========================================================================================================================= | |||
{ | |||
int ix; | |||
const char *p; | |||
int c1, c2; | |||
@@ -1369,11 +1369,11 @@ static int ScoreVoice(espeak_VOICE *voice_spec, const char *spec_language, int s | |||
if(score < 1) | |||
score = 1; | |||
return(score); | |||
} // end of ScoreVoice | |||
} | |||
static int SetVoiceScores(espeak_VOICE *voice_select, espeak_VOICE **voices, int control) | |||
{//====================================================================================== | |||
{ | |||
// control: bit0=1 include mbrola voices | |||
int ix; | |||
int score; | |||
@@ -1439,13 +1439,13 @@ static int SetVoiceScores(espeak_VOICE *voice_select, espeak_VOICE **voices, int | |||
qsort(voices,nv,sizeof(espeak_VOICE *),(int (__cdecl *)(const void *,const void *))VoiceScoreSorter); | |||
return(nv); | |||
} // end of SetVoiceScores | |||
} | |||
espeak_VOICE *SelectVoiceByName(espeak_VOICE **voices, const char *name2) | |||
{//====================================================================== | |||
{ | |||
int ix; | |||
int match_fname = -1; | |||
int match_fname2 = -1; | |||
@@ -1505,13 +1505,13 @@ espeak_VOICE *SelectVoiceByName(espeak_VOICE **voices, const char *name2) | |||
return(NULL); | |||
return(voices[match_name]); | |||
} // end of SelectVoiceByName | |||
} | |||
char const *SelectVoice(espeak_VOICE *voice_select, int *found) | |||
{//============================================================ | |||
{ | |||
// Returns a path within espeak-voices, with a possible +variant suffix | |||
// variant is an output-only parameter | |||
int nv; // number of candidates | |||
@@ -1655,12 +1655,12 @@ char const *SelectVoice(espeak_VOICE *voice_select, int *found) | |||
} | |||
return(vp->identifier); | |||
} // end of SelectVoice | |||
} | |||
static void GetVoices(const char *path) | |||
{//==================================== | |||
{ | |||
FILE *f_voice; | |||
espeak_VOICE *voice_data; | |||
int ftype; | |||
@@ -1802,12 +1802,12 @@ static void GetVoices(const char *path) | |||
closedir(dir); | |||
#endif | |||
#endif | |||
} // end of GetVoices | |||
} | |||
espeak_ERROR SetVoiceByName(const char *name) | |||
{//========================================= | |||
{ | |||
espeak_VOICE *v; | |||
int ix; | |||
espeak_VOICE voice_selector; | |||
@@ -1862,12 +1862,12 @@ espeak_ERROR SetVoiceByName(const char *name) | |||
} | |||
} | |||
return(EE_INTERNAL_ERROR); // voice name not found | |||
} // end of SetVoiceByName | |||
} | |||
espeak_ERROR SetVoiceByProperties(espeak_VOICE *voice_selector) | |||
{//============================================================ | |||
{ | |||
const char *voice_id; | |||
int voice_found; | |||
@@ -1881,11 +1881,11 @@ espeak_ERROR SetVoiceByProperties(espeak_VOICE *voice_selector) | |||
SetVoiceStack(voice_selector, ""); | |||
return(EE_OK); | |||
} // end of SetVoiceByProperties | |||
} | |||
void FreeVoiceList() | |||
{//================= | |||
{ | |||
int ix; | |||
for(ix=0; ix<n_voices_list; ix++) | |||
{ | |||
@@ -1899,14 +1899,11 @@ void FreeVoiceList() | |||
} | |||
//======================================================================= | |||
// Library Interface Functions | |||
//======================================================================= | |||
#pragma GCC visibility push(default) | |||
ESPEAK_API const espeak_VOICE **espeak_ListVoices(espeak_VOICE *voice_spec) | |||
{//======================================================================== | |||
{ | |||
char path_voices[sizeof(path_home)+12]; | |||
@@ -1962,15 +1959,13 @@ ESPEAK_API const espeak_VOICE **espeak_ListVoices(espeak_VOICE *voice_spec) | |||
} | |||
return((const espeak_VOICE **)voices); | |||
#endif | |||
} // end of espeak_ListVoices | |||
} | |||
ESPEAK_API espeak_VOICE *espeak_GetCurrentVoice(void) | |||
{//================================================== | |||
{ | |||
return(¤t_voice_selected); | |||
} | |||
#pragma GCC visibility pop | |||
@@ -1,6 +1,6 @@ | |||
/*************************************************************************** | |||
* Copyright (C) 2007, Gilles Casse <[email protected]> * | |||
* Copyright (C) 2015 by Reece H. Dunn * | |||
* Copyright (C) 2015 Reece H. Dunn * | |||
* based on AudioIO.cc (Audacity-1.2.4b) and wavegen.cpp * | |||
* * | |||
* This program is free software; you can redistribute it and/or modify * | |||
@@ -414,7 +414,7 @@ static int pa_callback(void *inputBuffer, void *outputBuffer, | |||
#endif | |||
return(aResult); | |||
} // end of WaveCallBack | |||
} | |||
void wave_flush(void* theHandler) |
@@ -1,6 +1,6 @@ | |||
/*************************************************************************** | |||
* Copyright (C) 2007, Gilles Casse <[email protected]> * | |||
* Copyright (C) 2015 by Reece H. Dunn * | |||
* Copyright (C) 2015 Reece H. Dunn * | |||
* eSpeak driver for PulseAudio * | |||
* based on the XMMS PulseAudio Plugin * | |||
* * |
@@ -264,7 +264,7 @@ unsigned char pitch_adjust_tab[MAX_PITCH_VALUE+1] = { | |||
#ifdef LOG_FRAMES | |||
static void LogMarker(int type, int value, int value2) | |||
{//=================================================== | |||
{ | |||
char buf[20]; | |||
int *p; | |||
@@ -294,7 +294,7 @@ static void LogMarker(int type, int value, int value2) | |||
#endif | |||
void WcmdqStop() | |||
{//============= | |||
{ | |||
wcmdq_head = 0; | |||
wcmdq_tail = 0; | |||
@@ -315,7 +315,7 @@ void WcmdqStop() | |||
int WcmdqFree() | |||
{//============ | |||
{ | |||
int i; | |||
i = wcmdq_head - wcmdq_tail; | |||
if(i <= 0) i += N_WCMDQ; | |||
@@ -323,19 +323,19 @@ int WcmdqFree() | |||
} | |||
int WcmdqUsed() | |||
{//============ | |||
{ | |||
return(N_WCMDQ - WcmdqFree()); | |||
} | |||
void WcmdqInc() | |||
{//============ | |||
{ | |||
wcmdq_tail++; | |||
if(wcmdq_tail >= N_WCMDQ) wcmdq_tail=0; | |||
} | |||
static void WcmdqIncHead() | |||
{//======================= | |||
{ | |||
wcmdq_head++; | |||
if(wcmdq_head >= N_WCMDQ) wcmdq_head=0; | |||
} | |||
@@ -531,7 +531,7 @@ static int WaveCallback(const void *inputBuffer, void *outputBuffer, | |||
return(result); | |||
#endif | |||
} // end of WaveCallBack | |||
} | |||
#if USE_PORTAUDIO == 19 | |||
@@ -578,7 +578,7 @@ static PaError Pa_OpenDefaultStream2( PaStream** stream, | |||
int WavegenOpenSound() | |||
{//=================== | |||
{ | |||
PaError err, err2; | |||
PaError active; | |||
@@ -643,7 +643,7 @@ int WavegenOpenSound() | |||
int WavegenCloseSound() | |||
{//==================== | |||
{ | |||
PaError active; | |||
// check whether speaking has finished, and close the stream | |||
@@ -673,7 +673,7 @@ int WavegenCloseSound() | |||
int WavegenInitSound() | |||
{//=================== | |||
{ | |||
PaError err; | |||
if(option_quiet) | |||
@@ -691,22 +691,22 @@ int WavegenInitSound() | |||
} | |||
#else | |||
int WavegenOpenSound() | |||
{//=================== | |||
{ | |||
return(0); | |||
} | |||
int WavegenCloseSound() | |||
{//==================== | |||
{ | |||
return(0); | |||
} | |||
int WavegenInitSound() | |||
{//=================== | |||
{ | |||
return(0); | |||
} | |||
#endif | |||
void WavegenInit(int rate, int wavemult_fact) | |||
{//========================================== | |||
{ | |||
int ix; | |||
double x; | |||
@@ -757,11 +757,11 @@ void WavegenInit(int rate, int wavemult_fact) | |||
remove("log-espeakedit"); | |||
remove("log-klatt"); | |||
#endif | |||
} // end of WavegenInit | |||
} | |||
int GetAmplitude(void) | |||
{//=================== | |||
{ | |||
int amp; | |||
// normal, none, reduced, moderate, strong | |||
@@ -774,7 +774,7 @@ int GetAmplitude(void) | |||
static void WavegenSetEcho(void) | |||
{//============================= | |||
{ | |||
int delay; | |||
int amp; | |||
@@ -812,12 +812,12 @@ static void WavegenSetEcho(void) | |||
// compensate (partially) for increase in amplitude due to echo | |||
general_amplitude = GetAmplitude(); | |||
general_amplitude = ((general_amplitude * (500-amp))/500); | |||
} // end of WavegenSetEcho | |||
} | |||
int PeaksToHarmspect(wavegen_peaks_t *peaks, int pitch, int *htab, int control) | |||
{//============================================================================ | |||
{ | |||
// Calculate the amplitude of each harmonics from the formants | |||
// Only for formants 0 to 5 | |||
@@ -942,12 +942,12 @@ int h2; | |||
} | |||
return(hmax); // highest harmonic number | |||
} // end of PeaksToHarmspect | |||
} | |||
static void AdvanceParameters() | |||
{//============================ | |||
{ | |||
// Called every 64 samples to increment the formant freq, height, and widths | |||
int x; | |||
@@ -1014,12 +1014,12 @@ static void AdvanceParameters() | |||
harm_sqrt[ix] += harm_sqrt_inc[ix]; | |||
} | |||
#endif | |||
} // end of 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; | |||
@@ -1032,7 +1032,7 @@ static double resonator(RESONATOR *r, double input) | |||
static void setresonator(RESONATOR *rp, int freq, int bwidth, int init) | |||
{//==================================================================== | |||
{ | |||
// freq Frequency of resonator in Hz | |||
// bwidth Bandwidth of resonator in Hz | |||
// init Initialize internal data | |||
@@ -1055,12 +1055,12 @@ static void setresonator(RESONATOR *rp, int freq, int bwidth, int init) | |||
rp->b = x * cos(arg) * 2.0; | |||
rp->a = 1.0 - rp->b - rp->c; | |||
} // end if setresonator | |||
} | |||
#endif | |||
void InitBreath(void) | |||
{//================== | |||
{ | |||
#ifndef PLATFORM_RISCOS | |||
int ix; | |||
@@ -1072,12 +1072,12 @@ void InitBreath(void) | |||
setresonator(&rbreath[ix],2000,200,1); | |||
} | |||
#endif | |||
} // end of InitBreath | |||
} | |||
static void SetBreath() | |||
{//==================== | |||
{ | |||
#ifndef PLATFORM_RISCOS | |||
int pk; | |||
@@ -1094,11 +1094,11 @@ static void SetBreath() | |||
} | |||
} | |||
#endif | |||
} // end of SetBreath | |||
} | |||
static int ApplyBreath(void) | |||
{//========================= | |||
{ | |||
int value = 0; | |||
#ifndef PLATFORM_RISCOS | |||
int noise; | |||
@@ -1123,7 +1123,7 @@ static int ApplyBreath(void) | |||
int Wavegen() | |||
{//========== | |||
{ | |||
unsigned short waveph; | |||
unsigned short theta; | |||
int total; | |||
@@ -1389,11 +1389,11 @@ int Wavegen() | |||
return(1); | |||
} | |||
return(0); | |||
} // end of Wavegen | |||
} | |||
static int PlaySilence(int length, int resume) | |||
{//=========================================== | |||
{ | |||
static int n_samples; | |||
int value=0; | |||
@@ -1425,12 +1425,12 @@ static int PlaySilence(int length, int resume) | |||
return(1); | |||
} | |||
return(0); | |||
} // end of PlaySilence | |||
} | |||
static int PlayWave(int length, int resume, unsigned char *data, int scale, int amp) | |||
{//================================================================================= | |||
{ | |||
static int n_samples; | |||
static int ix=0; | |||
int value; | |||
@@ -1490,7 +1490,7 @@ static int PlayWave(int length, int resume, unsigned char *data, int scale, int | |||
static int SetWithRange0(int value, int max) | |||
{//========================================= | |||
{ | |||
if(value < 0) | |||
return(0); | |||
if(value > max) | |||
@@ -1500,7 +1500,7 @@ static int SetWithRange0(int value, int max) | |||
static void SetPitchFormants() | |||
{//=========================== | |||
{ | |||
int ix; | |||
int factor = 256; | |||
int pitch_value; | |||
@@ -1527,7 +1527,7 @@ static void SetPitchFormants() | |||
void SetEmbedded(int control, int value) | |||
{//===================================== | |||
{ | |||
// there was an embedded command in the text at this point | |||
int sign=0; | |||
int command; | |||
@@ -1572,7 +1572,7 @@ void SetEmbedded(int control, int value) | |||
void WavegenSetVoice(voice_t *v) | |||
{//============================= | |||
{ | |||
static voice_t v2; | |||
memcpy(&v2,v,sizeof(v2)); | |||
@@ -1596,7 +1596,7 @@ void WavegenSetVoice(voice_t *v) | |||
static void SetAmplitude(int length, unsigned char *amp_env, int value) | |||
{//==================================================================== | |||
{ | |||
amp_ix = 0; | |||
if(length==0) | |||
amp_inc = 0; | |||
@@ -1611,7 +1611,7 @@ 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; | |||
@@ -1642,7 +1642,7 @@ void SetPitch2(voice_t *voice, int pitch1, int pitch2, int *pitch_base, int *pit | |||
void SetPitch(int length, unsigned char *env, int pitch1, int pitch2) | |||
{//================================================================== | |||
{ | |||
// length in samples | |||
#ifdef LOG_FRAMES | |||
@@ -1672,14 +1672,14 @@ if(option_log_frames) | |||
flutter_amp = wvoice->flutter; | |||
} // end of SetPitch | |||
} | |||
void SetSynth(int length, int modn, frame_t *fr1, frame_t *fr2, voice_t *v) | |||
{//======================================================================== | |||
{ | |||
int ix; | |||
DOUBLEX next; | |||
int length2; | |||
@@ -1787,11 +1787,11 @@ if(option_log_frames) | |||
} | |||
} | |||
} | |||
} // end of SetSynth | |||
} | |||
static int Wavegen2(int length, int modulation, int resume, frame_t *fr1, frame_t *fr2) | |||
{//==================================================================================== | |||
{ | |||
if(resume==0) | |||
SetSynth(length, modulation, fr1, fr2, wvoice); | |||
@@ -1799,7 +1799,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; | |||
@@ -1813,7 +1813,7 @@ void Write4Bytes(FILE *f, int value) | |||
int WavegenFill2(int fill_zeros) | |||
{//============================ | |||
{ | |||
// Pick up next wavegen commands from the queue | |||
// return: 0 output buffer has been filled | |||
// return: 1 input command queue is now empty | |||
@@ -1962,13 +1962,13 @@ int WavegenFill2(int fill_zeros) | |||
} | |||
return(0); | |||
} // end of WavegenFill2 | |||
} | |||
#ifdef INCLUDE_SONIC | |||
/* Speed up the audio samples with libsonic. */ | |||
static int SpeedUp(short *outbuf, int length_in, int length_out, int end_of_text) | |||
{//============================================================================== | |||
{ | |||
if(length_in >0) | |||
{ | |||
if(sonicSpeedupStream == NULL) | |||
@@ -1991,13 +1991,13 @@ static int SpeedUp(short *outbuf, int length_in, int length_out, int end_of_text | |||
sonicFlushStream(sonicSpeedupStream); | |||
} | |||
return sonicReadShortFromStream(sonicSpeedupStream, outbuf, length_out); | |||
} // end of SpeedUp | |||
} | |||
#endif | |||
/* Call WavegenFill2, and then speed up the output samples. */ | |||
int WavegenFill(int fill_zeros) | |||
{//============================ | |||
{ | |||
int finished; | |||
unsigned char *p_start; | |||
@@ -2021,5 +2021,5 @@ int WavegenFill(int fill_zeros) | |||
} | |||
#endif | |||
return finished; | |||
} // end of WavegenFill | |||
} | |||
@@ -130,7 +130,7 @@ USHORT voice_pcnt[N_PEAKS+1][3]; | |||
void DisplayVoices(FILE *f_out, char *language) | |||
{//============================================ | |||
{ | |||
int ix; | |||
const char *p; | |||
int len; | |||
@@ -198,11 +198,10 @@ void DisplayVoices(FILE *f_out, char *language) | |||
} | |||
fputc('\n',f_out); | |||
} | |||
} // end of DisplayVoices | |||
} | |||
static int OpenWaveFile(const char *path, int rate) | |||
//================================================= | |||
{ | |||
// Set the length of 0x7ffff000 for --stdout | |||
// This will be changed to the correct length for -w (write to file) | |||
@@ -240,13 +239,12 @@ static int OpenWaveFile(const char *path, int rate) | |||
return(0); | |||
} | |||
return(1); | |||
} // end of OpenWaveFile | |||
} | |||
static void CloseWaveFile() | |||
//========================= | |||
{ | |||
unsigned int pos; | |||
@@ -266,13 +264,13 @@ static void CloseWaveFile() | |||
fclose(f_wave); | |||
f_wave = NULL; | |||
} // end of CloseWaveFile | |||
} | |||
static int WavegenFile(void) | |||
{//========================= | |||
{ | |||
int finished; | |||
unsigned char wav_outbuf[1024]; | |||
char fname[210]; | |||
@@ -308,12 +306,12 @@ static int WavegenFile(void) | |||
fwrite(wav_outbuf, 1, out_ptr - wav_outbuf, f_wave); | |||
} | |||
return(finished); | |||
} // end of WavegenFile | |||
} | |||
static void init_path(char *argv0, char *path_specified) | |||
{//===================================================== | |||
{ | |||
if(path_specified) | |||
{ | |||
@@ -375,7 +373,7 @@ static void init_path(char *argv0, char *path_specified) | |||
static int initialise(void) | |||
{//======================== | |||
{ | |||
int param; | |||
int result; | |||
int srate = 22050; // default sample rate | |||
@@ -434,16 +432,9 @@ static int initialise(void) | |||
#endif | |||
int main (int argc, char **argv) | |||
//============================== | |||
{ | |||
static struct option long_options[] = | |||
{ | |||
/* These options set a flag. */ | |||
// {"verbose", no_argument, &verbose_flag, 1}, | |||
// {"brief", no_argument, &verbose_flag, 0}, | |||
/* These options don't set a flag. | |||
We distinguish them by their indices. */ | |||
{"help", no_argument, 0, 'h'}, | |||
{"stdin", no_argument, 0, 0x100}, | |||
{"compile-debug", optional_argument, 0, 0x101}, |