mirror of
https://github.com/rhasspy/espeak-ng.git
synced 2026-10-31 05:35:35 +00:00
[1.29.15] Fix compiler warning, conversion from string constant to 'char *'.
espeakedit: Change compile_report file to include the phoneme name as well as phoneme table which uses each data file. git-svn-id: https://espeak.svn.sourceforge.net/svnroot/espeak/trunk@95 d46cf337-b52f-0410-862d-fd96e6ae7743
This commit is contained in:
+27
-13
@@ -68,26 +68,22 @@ Dictionary en_dict
|
||||
|
||||
0 3 3: @ @- @2 @5 @L
|
||||
a a2 A: A@ aa aI aI@ aU
|
||||
aU@ E e@ eI I i I2 i:
|
||||
i@ IR O O: o: O@ o@ OI
|
||||
oU O~ U u: U@ V VR
|
||||
aU@ E e@ eI I I2 i: i@
|
||||
IR O O: o: O@ o@ OI oU
|
||||
O~ U u: U@ V VR
|
||||
|
||||
: ; b C d D dZ f
|
||||
g g- h j k l L m
|
||||
n N p Q r r- s S
|
||||
t T t2 tS v w x z
|
||||
Z
|
||||
g h j k l m n N
|
||||
p Q r r- s S t T
|
||||
t2 tS v w x z Z
|
||||
|
||||
|
||||
Dictionary eo_dict
|
||||
|
||||
@- a aI aU e eI eU i
|
||||
o OI u uI
|
||||
@- a aI aU e i o u
|
||||
|
||||
* b d dZ f g h j
|
||||
k l m n p r R s
|
||||
S t T tS ts v w x
|
||||
z Z
|
||||
* b d k l m n p
|
||||
r R s t ts v z Z
|
||||
|
||||
|
||||
Dictionary es_dict
|
||||
@@ -346,3 +342,21 @@ I o r- u
|
||||
k k^ l l^ m n n^ p
|
||||
r R s S t tS ts v
|
||||
x z Z
|
||||
|
||||
|
||||
Dictionary zh_dict
|
||||
|
||||
|
||||
|
||||
Dictionary zhh_dict
|
||||
|
||||
&? 0 0? @ @? @r @u A
|
||||
A? E E~ i i&? i. i0 i;
|
||||
i? i@ i@? i[ iA iA? iE iE~
|
||||
io io? iu i~ o u u&? u?
|
||||
u@ u@? uA uA? uE uE~ ui u~
|
||||
y y? y@ y@? ya y~
|
||||
|
||||
c; f h k kh l m n
|
||||
N p ph s s. t tc; tc;
|
||||
th ts ts. ts. tsh v z.
|
||||
|
||||
+5
-2
@@ -16,10 +16,10 @@ d de:
|
||||
e e:
|
||||
f Ef
|
||||
g ge:
|
||||
h hO:
|
||||
h ho:
|
||||
i i:
|
||||
j ji:
|
||||
k kO:
|
||||
k ko:
|
||||
l El
|
||||
m Em
|
||||
n En
|
||||
@@ -77,6 +77,9 @@ _0M3 bIlj'u:nER
|
||||
_1M3 bIlj'u:n
|
||||
_dpt p'8Nkt
|
||||
|
||||
(1 : a) f'Ws.ta
|
||||
|
||||
|
||||
// abbreviations
|
||||
//**************
|
||||
|
||||
|
||||
+1743
-598
File diff suppressed because it is too large
Load Diff
@@ -3,12 +3,43 @@
|
||||
// Ancient Greek - based on base2
|
||||
//====================================================
|
||||
|
||||
phoneme : // Lengthen previous vowel by "length"
|
||||
virtual
|
||||
length 100
|
||||
endphoneme
|
||||
|
||||
|
||||
phoneme y
|
||||
vowel starttype (i) endtype (i)
|
||||
length 160
|
||||
formants vowel/yy_4
|
||||
endphoneme
|
||||
|
||||
phoneme e
|
||||
vowel starttype (e) endtype (e)
|
||||
length 140
|
||||
formants vowel/e
|
||||
endphoneme
|
||||
|
||||
phoneme E
|
||||
vowel starttype (e) endtype (e)
|
||||
length 150
|
||||
formants vowel/ee_1
|
||||
endphoneme
|
||||
|
||||
phoneme o
|
||||
vowel starttype (o) endtype (o)
|
||||
length 140
|
||||
formants vowel/o
|
||||
endphoneme
|
||||
|
||||
phoneme O
|
||||
vowel starttype (o) endtype (o)
|
||||
length 150
|
||||
formants vowel/0
|
||||
endphoneme
|
||||
|
||||
|
||||
phoneme EU
|
||||
vowel starttype (e) endtype (u)
|
||||
length 230
|
||||
|
||||
@@ -1236,6 +1236,13 @@ include ph_vi
|
||||
phonemetable zhy base
|
||||
include ph_zh_yue
|
||||
|
||||
phonemetable zh base
|
||||
include ph_zh
|
||||
|
||||
phonemetable zhh zh
|
||||
include ph_zh_huai
|
||||
|
||||
|
||||
phonemetable sw base
|
||||
include ph_swahili
|
||||
|
||||
|
||||
Binary file not shown.
|
Before Width: | Height: | Size: 86 KiB After Width: | Height: | Size: 96 KiB |
Binary file not shown.
|
Before Width: | Height: | Size: 37 KiB After Width: | Height: | Size: 39 KiB |
Binary file not shown.
|
Before Width: | Height: | Size: 62 KiB After Width: | Height: | Size: 64 KiB |
+110
-106
@@ -80,13 +80,11 @@ extern int CompileDictionary(const char *dsource, const char *dict_name, FILE *l
|
||||
|
||||
static int markers_used[8];
|
||||
|
||||
#define N_USED_BY 12
|
||||
typedef struct {
|
||||
void *link;
|
||||
int value;
|
||||
short n_uses;
|
||||
short n_used_by;
|
||||
unsigned char used_by[N_USED_BY];
|
||||
int ph_mnemonic;
|
||||
short ph_table;
|
||||
char string[1];
|
||||
} REF_HASH_TAB;
|
||||
|
||||
@@ -906,12 +904,17 @@ int Compile::LoadDataFile(const char *path, int control)
|
||||
|
||||
FILE *f;
|
||||
int id;
|
||||
int ix;
|
||||
int hash;
|
||||
int addr = 0;
|
||||
int type_code=' ';
|
||||
REF_HASH_TAB *p, *p2;
|
||||
char buf[sizeof(path_source)+120];
|
||||
|
||||
if(strcmp(path,"NULL")==0)
|
||||
return(0);
|
||||
if(strcmp(path,"DFT")==0)
|
||||
return(1);
|
||||
|
||||
count_references++;
|
||||
|
||||
hash = Hash8(path);
|
||||
@@ -920,102 +923,80 @@ int Compile::LoadDataFile(const char *path, int control)
|
||||
{
|
||||
if(strcmp(path,p->string)==0)
|
||||
{
|
||||
int found = 0;
|
||||
|
||||
duplicate_references++;
|
||||
p->n_uses++;
|
||||
|
||||
// add the current phoneme table to a list of users of this data file, if not already listed
|
||||
for(ix=0; (ix < p->n_used_by) && (ix < N_USED_BY); ix++)
|
||||
{
|
||||
if(p->used_by[ix] == n_phoneme_tabs)
|
||||
{
|
||||
found = 1;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if(found == 0)
|
||||
{
|
||||
if(ix < N_USED_BY)
|
||||
{
|
||||
p->used_by[ix] = n_phoneme_tabs;
|
||||
}
|
||||
p->n_used_by++;
|
||||
}
|
||||
|
||||
return(p->value); // already loaded this data
|
||||
addr = p->value; // already loaded this data
|
||||
break;
|
||||
}
|
||||
p = (REF_HASH_TAB *)p->link;
|
||||
}
|
||||
|
||||
sprintf(buf,"%s%s",path_source,path);
|
||||
|
||||
if(strcmp(path,"NULL")==0)
|
||||
return(0);
|
||||
if(strcmp(path,"DFT")==0)
|
||||
return(1);
|
||||
|
||||
if((f = fopen(buf,"rb")) == NULL)
|
||||
if(addr == 0)
|
||||
{
|
||||
sprintf(buf,"%s%s.wav",path_source,path);
|
||||
sprintf(buf,"%s%s",path_source,path);
|
||||
|
||||
if((f = fopen(buf,"rb")) == NULL)
|
||||
{
|
||||
Error("Can't read file",path);
|
||||
return(0);
|
||||
sprintf(buf,"%s%s.wav",path_source,path);
|
||||
if((f = fopen(buf,"rb")) == NULL)
|
||||
{
|
||||
Error("Can't read file",path);
|
||||
return(0);
|
||||
}
|
||||
}
|
||||
|
||||
id = Read4Bytes(f);
|
||||
rewind(f);
|
||||
|
||||
if(id == 0x43455053)
|
||||
{
|
||||
addr = LoadSpect(path, control);
|
||||
type_code = 'S';
|
||||
}
|
||||
else
|
||||
if(id == 0x46464952)
|
||||
{
|
||||
addr = LoadWavefile(f,path);
|
||||
type_code = 'W';
|
||||
}
|
||||
else
|
||||
if(id == 0x43544950)
|
||||
{
|
||||
addr = LoadEnvelope(f,path);
|
||||
type_code = 'E';
|
||||
}
|
||||
else
|
||||
if(id == 0x45564E45)
|
||||
{
|
||||
addr = LoadEnvelope2(f,path);
|
||||
type_code = 'E';
|
||||
}
|
||||
else
|
||||
{
|
||||
Error("File not SPEC or RIFF",path);
|
||||
addr = -1;
|
||||
}
|
||||
fclose(f);
|
||||
|
||||
if(addr > 0)
|
||||
{
|
||||
fprintf(f_phcontents,"%c 0x%.5x %s\n",type_code,addr & 0x7fffff,path);
|
||||
}
|
||||
}
|
||||
|
||||
id = Read4Bytes(f);
|
||||
// fread(&id,1,4,f);
|
||||
rewind(f);
|
||||
|
||||
if(id == 0x43455053)
|
||||
{
|
||||
ix = LoadSpect(path, control);
|
||||
type_code = 'S';
|
||||
}
|
||||
else
|
||||
if(id == 0x46464952)
|
||||
{
|
||||
ix = LoadWavefile(f,path);
|
||||
type_code = 'W';
|
||||
}
|
||||
else
|
||||
if(id == 0x43544950)
|
||||
{
|
||||
ix = LoadEnvelope(f,path);
|
||||
type_code = 'E';
|
||||
}
|
||||
else
|
||||
if(id == 0x45564E45)
|
||||
{
|
||||
ix = LoadEnvelope2(f,path);
|
||||
type_code = 'E';
|
||||
}
|
||||
else
|
||||
{
|
||||
Error("File not SPEC or RIFF",path);
|
||||
ix = -1;
|
||||
}
|
||||
fclose(f);
|
||||
|
||||
if(ix > 0)
|
||||
{
|
||||
fprintf(f_phcontents,"%c 0x%.5x %s\n",type_code,ix & 0x7fffff,path);
|
||||
}
|
||||
|
||||
// add this item to the hash table
|
||||
p = ref_hash_tab[hash];
|
||||
p2 = (REF_HASH_TAB *)malloc(sizeof(REF_HASH_TAB)+strlen(path)+1);
|
||||
p2->value = ix;
|
||||
p2->n_uses = 1;
|
||||
p2->n_used_by = 1;
|
||||
strcpy(p2->string,path);
|
||||
p2->used_by[0] = n_phoneme_tabs;
|
||||
p2->link = (char *)p;
|
||||
ref_hash_tab[hash] = p2;
|
||||
if(addr > 0)
|
||||
{
|
||||
p = ref_hash_tab[hash];
|
||||
p2 = (REF_HASH_TAB *)malloc(sizeof(REF_HASH_TAB)+strlen(path)+1);
|
||||
p2->value = addr;
|
||||
p2->ph_mnemonic = ph->mnemonic; // phoneme which uses this file
|
||||
p2->ph_table = n_phoneme_tabs-1;
|
||||
strcpy(p2->string,path);
|
||||
p2->link = (char *)p;
|
||||
ref_hash_tab[hash] = p2;
|
||||
}
|
||||
|
||||
return(ix);
|
||||
return(addr);
|
||||
} // end of Compile::LoadDataFile
|
||||
|
||||
|
||||
@@ -1892,12 +1873,21 @@ int Compile::LoadEnvelope2(FILE *f, const char *fname)
|
||||
|
||||
static int ref_sorter(char **a, char **b)
|
||||
{//======================================
|
||||
|
||||
REF_HASH_TAB *p1 = (REF_HASH_TAB *)(*a);
|
||||
REF_HASH_TAB *p2 = (REF_HASH_TAB *)(*b);
|
||||
int ix;
|
||||
|
||||
return(strcoll(p1->string,p2->string));
|
||||
} /* end of strcmp2 */
|
||||
REF_HASH_TAB *p1 = (REF_HASH_TAB *)(*a);
|
||||
REF_HASH_TAB *p2 = (REF_HASH_TAB *)(*b);
|
||||
|
||||
ix = strcoll(p1->string,p2->string);
|
||||
if(ix != 0)
|
||||
return ix;
|
||||
|
||||
ix = p1->ph_table - p2->ph_table;
|
||||
if(ix != 0)
|
||||
return ix;
|
||||
|
||||
return(p1->ph_mnemonic - p2->ph_mnemonic);
|
||||
} /* end of ref_sorter */
|
||||
|
||||
|
||||
|
||||
@@ -1909,10 +1899,13 @@ void Compile::Report(void)
|
||||
REF_HASH_TAB *p;
|
||||
REF_HASH_TAB **list;
|
||||
FILE *f_report;
|
||||
const char *data_path;
|
||||
int prev_table;
|
||||
int prev_mnemonic;
|
||||
char fname[sizeof(path_source)+20];
|
||||
|
||||
// make a list of all the references and sort it
|
||||
list = (REF_HASH_TAB **)malloc(count_references * sizeof(REF_HASH_TAB *));
|
||||
list = (REF_HASH_TAB **)malloc((count_references)* sizeof(REF_HASH_TAB *));
|
||||
if(list == NULL)
|
||||
return;
|
||||
|
||||
@@ -1932,6 +1925,7 @@ void Compile::Report(void)
|
||||
}
|
||||
fputc('\n',f_report);
|
||||
|
||||
fprintf(f_report,"Data file Used by\n");
|
||||
ix = 0;
|
||||
for(hash=0; (hash < 256) && (ix < count_references); hash++)
|
||||
{
|
||||
@@ -1945,25 +1939,35 @@ void Compile::Report(void)
|
||||
n = ix;
|
||||
qsort((void *)list,n,sizeof(REF_HASH_TAB *),(int (*)(const void *,const void *))ref_sorter);
|
||||
|
||||
data_path = "";
|
||||
prev_mnemonic = 0;
|
||||
prev_table = 0;
|
||||
for(ix=0; ix<n; ix++)
|
||||
{
|
||||
int j, ph_tab_num;
|
||||
int j = 0;
|
||||
|
||||
fprintf(f_report,"%3d %s",list[ix]->n_uses, list[ix]->string);
|
||||
for(j = strlen(list[ix]->string); j < 14; j++)
|
||||
if(strcmp(list[ix]->string, data_path) != 0)
|
||||
{
|
||||
data_path = list[ix]->string;
|
||||
j = strlen(data_path);
|
||||
fprintf(f_report,"%s",data_path);
|
||||
}
|
||||
else
|
||||
{
|
||||
if((list[ix]->ph_table == prev_table) && (list[ix]->ph_mnemonic == prev_mnemonic))
|
||||
continue; // same phoneme, don't list twice
|
||||
}
|
||||
|
||||
while(j < 14)
|
||||
{
|
||||
fputc(' ',f_report); // pad filename with spaces
|
||||
j++;
|
||||
}
|
||||
for(j=0; (j < list[ix]->n_used_by) && (j<N_USED_BY); j++)
|
||||
{
|
||||
ph_tab_num = list[ix]->used_by[j];
|
||||
fprintf(f_report," %s",phoneme_tab_list2[ph_tab_num-1].name);
|
||||
}
|
||||
if(j < list[ix]->n_used_by)
|
||||
{
|
||||
fprintf(f_report," ++");
|
||||
}
|
||||
|
||||
fprintf(f_report," [%s] %s",WordToString(prev_mnemonic = list[ix]->ph_mnemonic), phoneme_tab_list2[prev_table = list[ix]->ph_table].name);
|
||||
fputc('\n',f_report);
|
||||
|
||||
free(list[ix]);
|
||||
}
|
||||
free(list);
|
||||
fclose(f_report);
|
||||
|
||||
+16
-14
@@ -163,9 +163,9 @@ int compile_line(char *linebuf, char *dict_line, int *hash)
|
||||
char *p;
|
||||
char *word;
|
||||
char *phonetic;
|
||||
int ix;
|
||||
unsigned int ix;
|
||||
int step;
|
||||
int n_flag_codes = 0;
|
||||
unsigned int n_flag_codes = 0;
|
||||
int flag_offset;
|
||||
int length;
|
||||
int multiple_words = 0;
|
||||
@@ -181,10 +181,11 @@ int compile_line(char *linebuf, char *dict_line, int *hash)
|
||||
unsigned char flag_codes[100];
|
||||
char encoded_ph[200];
|
||||
unsigned char bad_phoneme[4];
|
||||
static char nullstring[] = {0};
|
||||
|
||||
comment = NULL;
|
||||
text_not_phonemes = 0;
|
||||
phonetic = word = "";
|
||||
phonetic = word = nullstring;
|
||||
|
||||
p = linebuf;
|
||||
// while(isspace2(*p)) p++;
|
||||
@@ -1219,7 +1220,7 @@ static int compile_dictrules(FILE *f_in, FILE *f_out, char *fname_temp)
|
||||
int n_rules=0;
|
||||
int count=0;
|
||||
int different;
|
||||
char *prev_rgroup_name;
|
||||
const char *prev_rgroup_name;
|
||||
unsigned int char_code;
|
||||
int compile_mode=0;
|
||||
char *buf;
|
||||
@@ -1247,16 +1248,6 @@ static int compile_dictrules(FILE *f_in, FILE *f_out, char *fname_temp)
|
||||
if(buf[0] == '\r') buf++; // ignore extra \r in \r\n
|
||||
}
|
||||
|
||||
if((buf != NULL) && (memcmp(buf,".L",2)==0))
|
||||
{
|
||||
if(compile_lettergroup(&buf[2], f_out) != 0)
|
||||
{
|
||||
fprintf(f_log,"%5d: Bad lettergroup\n",linenum);
|
||||
error_count++;
|
||||
}
|
||||
continue;
|
||||
}
|
||||
|
||||
if((buf == NULL) || (buf[0] == '.'))
|
||||
{
|
||||
// next .group or end of file, write out the previous group
|
||||
@@ -1277,10 +1268,21 @@ static int compile_dictrules(FILE *f_in, FILE *f_out, char *fname_temp)
|
||||
{
|
||||
// end of the character replacements section
|
||||
fwrite(&n_rules,1,4,f_out); // write a zero word to terminate the replacemenmt list
|
||||
compile_mode = 0;
|
||||
}
|
||||
|
||||
if(buf == NULL) break; // end of file
|
||||
|
||||
if(memcmp(buf,".L",2)==0)
|
||||
{
|
||||
if(compile_lettergroup(&buf[2], f_out) != 0)
|
||||
{
|
||||
fprintf(f_log,"%5d: Bad lettergroup\n",linenum);
|
||||
error_count++;
|
||||
}
|
||||
continue;
|
||||
}
|
||||
|
||||
if(memcmp(buf,".replace",8)==0)
|
||||
{
|
||||
compile_mode = 2;
|
||||
|
||||
+36
-19
@@ -230,7 +230,7 @@ void Translator::InitGroups(void)
|
||||
|
||||
if(p[0] == RULE_REPLACEMENTS)
|
||||
{
|
||||
pw = (unsigned int *)(((int)p+4) & ~3); // advance to next word boundary
|
||||
pw = (unsigned int *)(((long)p+4) & ~3); // advance to next word boundary
|
||||
langopts.replace_chars = pw;
|
||||
while(pw[0] != 0)
|
||||
{
|
||||
@@ -617,8 +617,8 @@ return(0);
|
||||
|
||||
|
||||
|
||||
int Translator::IsLetterGroup(char *word, int group)
|
||||
{//=================================================
|
||||
int Translator::IsLetterGroup(char *word, int group, int pre)
|
||||
{//==========================================================
|
||||
// match the word against a list of utf-8 strings
|
||||
char *p;
|
||||
char *w;
|
||||
@@ -1484,7 +1484,7 @@ char *Translator::DecodeRule(const char *group, char *rule)
|
||||
|
||||
if(rb == RULE_ENDING)
|
||||
{
|
||||
static char *flag_chars = "ei vtfq t";
|
||||
static const char *flag_chars = "ei vtfq t";
|
||||
flags = ((rule[0] & 0x7f)<< 8) + (rule[1] & 0x7f);
|
||||
suffix_char = 'S';
|
||||
if(flags & (SUFX_P >> 8))
|
||||
@@ -1802,9 +1802,9 @@ void Translator::MatchRule(char *word[], const char *group, char *rule, MatchRec
|
||||
failed = 1;
|
||||
break;
|
||||
|
||||
case RULE_LETTERGP2: // match against a list of utf-t strings
|
||||
case RULE_LETTERGP2: // match against a list of utf-8 strings
|
||||
letter_group = *rule++ - 'A';
|
||||
if((n_bytes = IsLetterGroup(post_ptr-1,letter_group)) >0)
|
||||
if((n_bytes = IsLetterGroup(post_ptr-1,letter_group,0)) >0)
|
||||
{
|
||||
match.points += (20-distance_right);
|
||||
post_ptr += (n_bytes-1);
|
||||
@@ -1983,6 +1983,17 @@ void Translator::MatchRule(char *word[], const char *group, char *rule, MatchRec
|
||||
failed = 1;
|
||||
break;
|
||||
|
||||
case RULE_LETTERGP2: // match against a list of utf-8 strings
|
||||
letter_group = *rule++ - 'A';
|
||||
if((n_bytes = IsLetterGroup(pre_ptr-letter_xbytes,letter_group,1)) >0)
|
||||
{
|
||||
match.points += (20-distance_right);
|
||||
pre_ptr -= (n_bytes-1);
|
||||
}
|
||||
else
|
||||
failed =1;
|
||||
break;
|
||||
|
||||
case RULE_NOTVOWEL:
|
||||
if(!IsLetter(letter_w,0))
|
||||
{
|
||||
@@ -2345,7 +2356,7 @@ int Translator::TranslateRules(char *p_start, char *phonemes, int ph_size, char
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
if(match1.phonemes == NULL)
|
||||
match1.phonemes = "";
|
||||
|
||||
@@ -2567,10 +2578,10 @@ char *print_dflags(int flags)
|
||||
|
||||
|
||||
|
||||
int Translator::LookupDict2(char *word, char *word2, char *phonetic, unsigned int *flags, int end_flags)
|
||||
//======================================================================================================
|
||||
const char *Translator::LookupDict2(const char *word, const char *word2, char *phonetic, unsigned int *flags, int end_flags)
|
||||
//====================================================================================================================
|
||||
/* Find an entry in the word_dict file for a specified word.
|
||||
Returns 1 if an entry is found
|
||||
Returns NULL if no match, else returns 'word_end'
|
||||
|
||||
word zero terminated word to match
|
||||
word2 pointer to next word(s) in the input text (terminated by space)
|
||||
@@ -2590,8 +2601,8 @@ int Translator::LookupDict2(char *word, char *word2, char *phonetic, unsigned in
|
||||
int condition_failed=0;
|
||||
int n_chars;
|
||||
int no_phonemes;
|
||||
char *word_end;
|
||||
char *word1;
|
||||
const char *word_end;
|
||||
const char *word1;
|
||||
char word_buf[N_WORD_BYTES];
|
||||
|
||||
word1 = word;
|
||||
@@ -2801,7 +2812,7 @@ int Translator::LookupDict2(char *word, char *word2, char *phonetic, unsigned in
|
||||
fprintf(f_trans,"Found: %s [%s] %s\n",word1,ph_decoded,print_dflags(flags1));
|
||||
}
|
||||
}
|
||||
return(1);
|
||||
return(word_end);
|
||||
|
||||
}
|
||||
return(0);
|
||||
@@ -2818,12 +2829,13 @@ int Translator::LookupDictList(char **wordptr, char *ph_out, unsigned int *flags
|
||||
*/
|
||||
{
|
||||
int length;
|
||||
int found;
|
||||
char *word1;
|
||||
char *word2;
|
||||
const char *found;
|
||||
const char *word1;
|
||||
const char *word2;
|
||||
unsigned char c;
|
||||
int nbytes;
|
||||
int c2;
|
||||
int len;
|
||||
char word[N_WORD_BYTES];
|
||||
static char word_replacement[N_WORD_BYTES];
|
||||
|
||||
@@ -2896,10 +2908,14 @@ int Translator::LookupDictList(char **wordptr, char *ph_out, unsigned int *flags
|
||||
word_replacement[0] = 0;
|
||||
word_replacement[1] = ' ';
|
||||
strcpy(&word_replacement[2],ph_out); // replacement word, preceded by zerochar and space
|
||||
|
||||
word1 = *wordptr;
|
||||
*wordptr = &word_replacement[2];
|
||||
|
||||
if(option_phonemes == 2)
|
||||
{
|
||||
len = found - word1;
|
||||
memcpy(word,word1,len); // include multiple matching words
|
||||
fprintf(f_trans,"Replace: %s %s\n",word,*wordptr);
|
||||
}
|
||||
}
|
||||
@@ -2917,10 +2933,11 @@ int Translator::LookupDictList(char **wordptr, char *ph_out, unsigned int *flags
|
||||
|
||||
|
||||
|
||||
int Translator::Lookup(char *word, char *ph_out)
|
||||
{//=============================================
|
||||
int Translator::Lookup(const char *word, char *ph_out)
|
||||
{//===================================================
|
||||
unsigned int flags;
|
||||
return(LookupDictList(&word,ph_out,&flags,0));
|
||||
char *word1 = (char *)word;
|
||||
return(LookupDictList(&word1,ph_out,&flags,0));
|
||||
}
|
||||
|
||||
|
||||
|
||||
+13
-13
@@ -490,22 +490,22 @@ int delete_espeak_command( t_espeak_command* the_command)
|
||||
|
||||
case ET_VOICE_SPEC:
|
||||
{
|
||||
espeak_VOICE* data = &(the_command->u.my_voice_spec);
|
||||
espeak_VOICE* data = &(the_command->u.my_voice_spec);
|
||||
|
||||
if (data->name)
|
||||
{
|
||||
free(data->name);
|
||||
}
|
||||
if (data->name)
|
||||
{
|
||||
free((void *)data->name);
|
||||
}
|
||||
|
||||
if (data->languages)
|
||||
{
|
||||
free(data->languages);
|
||||
}
|
||||
if (data->languages)
|
||||
{
|
||||
free((void *)data->languages);
|
||||
}
|
||||
|
||||
if (data->identifier)
|
||||
{
|
||||
free(data->identifier);
|
||||
}
|
||||
if (data->identifier)
|
||||
{
|
||||
free((void *)data->identifier);
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
|
||||
+1
-1
@@ -42,7 +42,7 @@
|
||||
#include "prosodydisplay.h"
|
||||
|
||||
|
||||
static char *about_string = "espeakedit: %s\nAuthor: Jonathan Duddington (c) 2007\n\n"
|
||||
static const char *about_string = "espeakedit: %s\nAuthor: Jonathan Duddington (c) 2007\n\n"
|
||||
"Licensed under GNU General Public License version 3\n"
|
||||
"http://espeak.sourceforge.net/";
|
||||
|
||||
|
||||
+5
-5
@@ -308,7 +308,7 @@ void Lexicon_De()
|
||||
char phonemes2[80];
|
||||
WORD_TAB winfo;
|
||||
|
||||
static char *vowels = "aeiouyAEIOUY29@";
|
||||
static const char *vowels = "aeiouyAEIOUY29@";
|
||||
|
||||
wxString fname = wxFileSelector(_T("German Lexicon"),path_dir1,_T(""),_T(""),_T("*"),wxOPEN);
|
||||
|
||||
@@ -477,7 +477,7 @@ void Lexicon_Ru()
|
||||
int input_length;
|
||||
|
||||
int sfx;
|
||||
char *suffix;
|
||||
const char *suffix;
|
||||
int wlen;
|
||||
int len;
|
||||
int check_root;
|
||||
@@ -495,7 +495,7 @@ void Lexicon_Ru()
|
||||
static char vowels[] = {0xa3,0xc0,0xc1,0xc5,0xc9,0xcf,0xd1,0xd5,0xd9,0xdc,0};
|
||||
|
||||
typedef struct {
|
||||
char *suffix;
|
||||
const char *suffix;
|
||||
int syllables;
|
||||
} SUFFIX;
|
||||
|
||||
@@ -1173,7 +1173,7 @@ int x;
|
||||
#define TEXT "Hello world."
|
||||
#define TEXT_SSML ("<speak>" TEXT "</speak>")
|
||||
static void
|
||||
speak(char *text)
|
||||
speak(const char *text)
|
||||
{
|
||||
int result;
|
||||
result = espeak_Synth(text, strlen(text) + 1, 0, POS_CHARACTER, 0, espeakSSML, NULL, NULL);
|
||||
@@ -1216,7 +1216,7 @@ result = espeak_SetVoiceByProperties(&voice);
|
||||
}
|
||||
|
||||
|
||||
char* text1 = "Hello World2. <audio src=\"here\"> Some text</audio> This is the second sentence";
|
||||
const char* text1 = "Hello World2. <audio src=\"here\"> Some text</audio> This is the second sentence";
|
||||
|
||||
void TestTest(int control)
|
||||
{//=======================
|
||||
|
||||
+71
-17
@@ -811,10 +811,14 @@ void Translator::CalcPitches_Tone(int clause_tone)
|
||||
PHONEME_LIST *p;
|
||||
int ix;
|
||||
int count_stressed=0;
|
||||
int count_stressed2=0;
|
||||
int final_stressed=0;
|
||||
|
||||
int tone_ph;
|
||||
PHONEME_TAB *tph;
|
||||
PHONEME_TAB *prev_tph; // forget across word boundary
|
||||
PHONEME_TAB *prevw_tph; // remember across word boundary
|
||||
PHONEME_TAB *prev2_tph; // 2 tones previous
|
||||
PHONEME_LIST *prev_p;
|
||||
|
||||
int pitch_adjust = 13; // pitch gradient through the clause - inital value
|
||||
int pitch_decrement = 3; // decrease by this for each stressed syllable
|
||||
@@ -845,6 +849,62 @@ void Translator::CalcPitches_Tone(int clause_tone)
|
||||
}
|
||||
|
||||
|
||||
prev_p = p = &phoneme_list[0];
|
||||
prev_tph = prevw_tph = phoneme_tab[phonPAUSE];
|
||||
|
||||
// perform tone sandhi
|
||||
for(ix=0; ix<n_phoneme_list; ix++, p++)
|
||||
{
|
||||
if((p->newword) && ((option_tone1 & 1)==0))
|
||||
{
|
||||
prev_tph = phoneme_tab[phonPAUSE]; // forget across word boundaries
|
||||
}
|
||||
|
||||
if(p->type == phVOWEL)
|
||||
{
|
||||
tone_ph = p->tone_ph;
|
||||
if(tone_ph == 0)
|
||||
p->tone_ph = tone_ph = LookupPh("11"); // default tone 5
|
||||
|
||||
tph = phoneme_tab[tone_ph];
|
||||
|
||||
// Mandarin
|
||||
if(translator_name == L('z','h'))
|
||||
{
|
||||
if(prev_tph->mnemonic == 0x343132) // [214]
|
||||
{
|
||||
if(tph->mnemonic == 0x343132) // [214]
|
||||
prev_p->tone_ph = LookupPh("35");
|
||||
else
|
||||
prev_p->tone_ph = LookupPh("21");
|
||||
}
|
||||
if((prev_tph->mnemonic == 0x3135) && (tph->mnemonic == 0x3135)) // [51] + [51]
|
||||
{
|
||||
prev_p->tone_ph = LookupPh("53");
|
||||
}
|
||||
|
||||
if(tph->mnemonic == 0x3131) // [11] Tone 5
|
||||
{
|
||||
// tone 5, change its level depending on the previous tone (across word boundaries)
|
||||
if(prevw_tph->mnemonic == 0x3535)
|
||||
p->tone_ph = LookupPh("22");
|
||||
if(prevw_tph->mnemonic == 0x3533)
|
||||
p->tone_ph = LookupPh("33");
|
||||
if(prevw_tph->mnemonic == 0x343132)
|
||||
p->tone_ph = LookupPh("44");
|
||||
|
||||
// tone 5 is unstressed (shorter)
|
||||
p->tone = 1; // diminished stress
|
||||
}
|
||||
}
|
||||
|
||||
prev_p = p;
|
||||
prev2_tph = prevw_tph;
|
||||
prevw_tph = prev_tph = tph;
|
||||
}
|
||||
}
|
||||
|
||||
// convert tone numbers to pitch
|
||||
p = &phoneme_list[0];
|
||||
for(ix=0; ix<n_phoneme_list; ix++, p++)
|
||||
{
|
||||
@@ -852,24 +912,18 @@ void Translator::CalcPitches_Tone(int clause_tone)
|
||||
{
|
||||
tone_ph = p->tone_ph;
|
||||
|
||||
if(p->tone >= 2)
|
||||
if(p->tone >= 0) // TEST, consider all syllables as stressed
|
||||
{
|
||||
// a stressed syllable
|
||||
if(p->tone >= 4)
|
||||
if(ix == final_stressed)
|
||||
{
|
||||
|
||||
count_stressed2++;
|
||||
if(count_stressed2 == count_stressed)
|
||||
{
|
||||
// the last stressed syllable
|
||||
pitch_adjust = pitch_low;
|
||||
}
|
||||
else
|
||||
{
|
||||
pitch_adjust -= pitch_decrement;
|
||||
if(pitch_adjust <= pitch_low)
|
||||
pitch_adjust = pitch_high;
|
||||
}
|
||||
// the last stressed syllable
|
||||
pitch_adjust = pitch_low;
|
||||
}
|
||||
else
|
||||
{
|
||||
pitch_adjust -= pitch_decrement;
|
||||
if(pitch_adjust <= pitch_low)
|
||||
pitch_adjust = pitch_high;
|
||||
}
|
||||
|
||||
if(tone_ph ==0)
|
||||
|
||||
+3
-4
@@ -19,7 +19,6 @@
|
||||
|
||||
#include "StdAfx.h"
|
||||
|
||||
|
||||
#include <stdio.h>
|
||||
#include <ctype.h>
|
||||
#include <stdlib.h>
|
||||
@@ -211,7 +210,7 @@ int Translator::TranslateRoman(char *word, char *ph_out)
|
||||
unsigned int flags;
|
||||
char number_chars[N_WORD_BYTES];
|
||||
|
||||
static char *roman_numbers = "ixcmvld";
|
||||
static const char *roman_numbers = "ixcmvld";
|
||||
static int roman_values[] = {1,10,100,1000,5,50,500};
|
||||
|
||||
acc = 0;
|
||||
@@ -504,8 +503,8 @@ int Translator::LookupNum3(int value, char *ph_out, int suppress_null, int thous
|
||||
|
||||
|
||||
|
||||
static char *M_Variant(int value)
|
||||
{//==============================
|
||||
static const char *M_Variant(int value)
|
||||
{//====================================
|
||||
// returns M, or perhaps MA for some cases
|
||||
|
||||
if(((value % 100)>20) || ((value % 100)<10)) // but not teens, 10 to 19
|
||||
|
||||
+9
-13
@@ -38,7 +38,7 @@
|
||||
#define N_XML_BUF 256
|
||||
|
||||
|
||||
char *xmlbase = ""; // base URL from <speak>
|
||||
const char *xmlbase = ""; // base URL from <speak>
|
||||
|
||||
int namedata_ix=0;
|
||||
int n_namedata = 0;
|
||||
@@ -454,23 +454,19 @@ static int GetC(void)
|
||||
static void UngetC(int c)
|
||||
{//======================
|
||||
ungot_char = c;
|
||||
|
||||
if((f_input != NULL) && feof(f_input))
|
||||
{
|
||||
// ungetc(' ',f_input);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
const char *Translator::LookupSpecial(char *string)
|
||||
{//================================================
|
||||
const char *Translator::LookupSpecial(const char *string)
|
||||
{//======================================================
|
||||
unsigned int flags;
|
||||
char phonemes[55];
|
||||
char phonemes2[55];
|
||||
static char buf[60];
|
||||
char *string1 = (char *)string;
|
||||
|
||||
if(LookupDictList(&string,phonemes,&flags,0))
|
||||
if(LookupDictList(&string1,phonemes,&flags,0))
|
||||
{
|
||||
SetWordStress(phonemes,flags,-1,0);
|
||||
DecodePhonemes(phonemes,phonemes2);
|
||||
@@ -706,13 +702,13 @@ MNEM_TAB ssmltags[] = {
|
||||
|
||||
|
||||
|
||||
static char *VoiceFromStack()
|
||||
{//==========================
|
||||
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;
|
||||
SSML_STACK *sp;
|
||||
char *v_id;
|
||||
const char *v_id;
|
||||
espeak_VOICE voice_select;
|
||||
char voice_name[40];
|
||||
char language[40];
|
||||
@@ -1083,7 +1079,7 @@ static int GetVoiceAttributes(wchar_t *pw, int tag_type)
|
||||
wchar_t *name;
|
||||
wchar_t *age;
|
||||
wchar_t *variant;
|
||||
char *new_voice_id;
|
||||
const char *new_voice_id;
|
||||
|
||||
static const MNEM_TAB mnem_gender[] = {
|
||||
{"male", 1},
|
||||
|
||||
@@ -365,7 +365,9 @@ static espeak_ERROR Synthesize(unsigned int unique_identifier, const void *text,
|
||||
int length;
|
||||
int finished = 0;
|
||||
int count_buffers = 0;
|
||||
#ifdef USE_ASYNC
|
||||
uint32_t a_write_pos=0;
|
||||
#endif
|
||||
|
||||
#ifdef DEBUG_ENABLED
|
||||
if (text)
|
||||
|
||||
+3
-3
@@ -447,9 +447,9 @@ void espeak_CompileDictionary(const char *path, FILE *log);
|
||||
|
||||
// voice table
|
||||
typedef struct {
|
||||
char *name; // a given name for this voice. UTF8 string.
|
||||
char *languages; // list of pairs of (byte) priority + (string) language (and dialect qualifier)
|
||||
char *identifier; // the filename for this voice within espeak-data/voices
|
||||
const char *name; // a given name for this voice. UTF8 string.
|
||||
const char *languages; // list of pairs of (byte) priority + (string) language (and dialect qualifier)
|
||||
const char *identifier; // the filename for this voice within espeak-data/voices
|
||||
unsigned char gender; // 0=none 1=male, 2=female,
|
||||
unsigned char age; // 0=not specified, or age in years
|
||||
unsigned char variant; // only used when passed as a parameter to espeak_SetVoiceByProperties
|
||||
|
||||
+1
-1
@@ -35,7 +35,7 @@
|
||||
#include "translate.h"
|
||||
#include "wave.h"
|
||||
|
||||
const char *version_string = "1.29.12 29.Oct.07";
|
||||
const char *version_string = "1.29.15 01.Nov.07";
|
||||
const int version_phdata = 0x012901;
|
||||
|
||||
int option_device_number = -1;
|
||||
|
||||
+4
-2
@@ -1541,6 +1541,10 @@ int SpeakNextClause(FILE *f_in, const void *text_in, int control)
|
||||
// entries in the wavegen command queue
|
||||
p_text = translator->TranslateClause(f_text,p_text,&clause_tone,&voice_change);
|
||||
|
||||
translator->CalcPitches(clause_tone);
|
||||
translator->CalcLengths();
|
||||
|
||||
translator->GetTranslatedPhonemeString(translator->phon_out,sizeof(translator->phon_out));
|
||||
if(option_phonemes > 0)
|
||||
{
|
||||
fprintf(f_trans,"%s\n",translator->phon_out);
|
||||
@@ -1550,8 +1554,6 @@ int SpeakNextClause(FILE *f_in, const void *text_in, int control)
|
||||
phoneme_callback(translator->phon_out);
|
||||
}
|
||||
|
||||
translator->CalcPitches(clause_tone);
|
||||
translator->CalcLengths();
|
||||
|
||||
if(skipping_text)
|
||||
{
|
||||
|
||||
@@ -535,7 +535,7 @@ SetLengthMods(tr,3); // all equal
|
||||
{
|
||||
static int stress_amps_sk[8] = {16,16, 20,20, 20,24, 24,22 };
|
||||
static int stress_lengths_sk[8] = {190,190, 210,210, 0,0, 210,210};
|
||||
static char *sk_voiced = "bdgjlmnrvwzaeiouy";
|
||||
static const char *sk_voiced = "bdgjlmnrvwzaeiouy";
|
||||
|
||||
tr = new Translator();
|
||||
SetupTranslator(tr,stress_lengths_sk,stress_amps_sk);
|
||||
@@ -647,18 +647,18 @@ SetLengthMods(tr,3); // all equal
|
||||
break;
|
||||
|
||||
case L('z','h'):
|
||||
case L_qa + 'a': // Test qaa
|
||||
{
|
||||
static int stress_lengths_qaa[8] = {200,200, 248,248, 248,0, 248,250};
|
||||
static int stress_amps_qaa[] = {16,16, 20,20, 24,24, 24,22 };
|
||||
static int stress_lengths_qaa[8] = {220,150, 230,230, 230,0, 230,250};
|
||||
static int stress_amps_qaa[] = {22,18, 22,22, 22,22, 22,22 };
|
||||
tr = new Translator();
|
||||
SetupTranslator(tr,stress_lengths_qaa,stress_amps_qaa);
|
||||
|
||||
tr->langopts.stress_rule = 0;
|
||||
tr->langopts.stress_rule = 3; // stress on final syllable of a "word"
|
||||
tr->langopts.stress_flags = 1; // don't automatically set diminished stress (may be set in the intonation module)
|
||||
tr->langopts.vowel_pause = 0;
|
||||
tr->langopts.intonation = 1; // Tone language, use CalcPitches_Tone() rather than CalcPitches()
|
||||
tr->langopts.length_mods0 = tr->langopts.length_mods; // don't lengthen vowels in the last syllable
|
||||
tr->langopts.tone_numbers = 9;
|
||||
tr->langopts.tone_numbers = 9; // a number after letters indicates a tone number (eg. pinyin or jyutping)
|
||||
tr->langopts.ideographs = 1;
|
||||
tr->langopts.word_gap = 0x5; // length of a final vowel is less dependent on the next consonant, don't merge consonant with next word
|
||||
}
|
||||
|
||||
+9
-4
@@ -513,8 +513,8 @@ int utf8_out(unsigned int c, char *buf)
|
||||
} // end of utf8_out
|
||||
|
||||
|
||||
int utf8_in(int *c, char *buf, int backwards)
|
||||
{//==========================================
|
||||
int utf8_in(int *c, const char *buf, int backwards)
|
||||
{//================================================
|
||||
int c1;
|
||||
int n_bytes;
|
||||
int ix;
|
||||
@@ -1116,7 +1116,7 @@ int Translator::TranslateWord2(char *word, WORD_TAB *wtab, int pre_pause, int ne
|
||||
int source_ix;
|
||||
int len;
|
||||
int sylimit; // max. number of syllables in a word to be combined with a preceding preposition
|
||||
char *new_language;
|
||||
const char *new_language;
|
||||
unsigned char bad_phoneme[4];
|
||||
|
||||
len = wtab->length;
|
||||
@@ -1769,6 +1769,12 @@ void *Translator::TranslateClause(FILE *f_text, const void *vp_input, int *tone_
|
||||
prev_out2 = prev_out;
|
||||
utf8_in(&prev_out,&sbuf[ix-1],1); // prev_out = sbuf[ix-1];
|
||||
|
||||
if(langopts.tone_numbers && isdigit(prev_out) && IsAlpha(prev_out2))
|
||||
{
|
||||
// tone numbers can be part of a word, consider them as alphabetic
|
||||
prev_out = 'a';
|
||||
}
|
||||
|
||||
if(prev_in2 != 0)
|
||||
{
|
||||
prev_in = prev_in2;
|
||||
@@ -2270,7 +2276,6 @@ if((c == '/') && (langopts.testing & 2) && isdigit(next_in) && IsAlpha(prev_out)
|
||||
|
||||
prev_clause_pause = clause_pause;
|
||||
|
||||
GetTranslatedPhonemeString(phon_out,sizeof(phon_out));
|
||||
*tone_out = tone;
|
||||
|
||||
new_sentence = 0;
|
||||
|
||||
+7
-6
@@ -178,6 +178,7 @@
|
||||
// match 1 pre 2 post 0 - use common phoneme string
|
||||
// match 1 pre 2 post 3 0 - empty phoneme string
|
||||
|
||||
typedef const char * constcharptr;
|
||||
|
||||
typedef struct {
|
||||
int points;
|
||||
@@ -351,6 +352,7 @@ public:
|
||||
int LoadDictionary(const char *name, int no_error);
|
||||
virtual void CalcLengths();
|
||||
virtual void CalcPitches(int clause_tone);
|
||||
void GetTranslatedPhonemeString(char *phon_out, int n_phon_out);
|
||||
|
||||
LANGUAGE_OPTIONS langopts;
|
||||
int translator_name;
|
||||
@@ -385,7 +387,6 @@ private:
|
||||
int TranslateWord2(char *word, WORD_TAB *wtab, int pre_pause, int next_pause);
|
||||
int TranslateLetter(char *letter, char *phonemes, int control);
|
||||
void SetSpellingStress(char *phonemes, int control);
|
||||
void GetTranslatedPhonemeString(char *phon_out, int n_phon_out);
|
||||
void WriteMnemonic(int *ix, int mnem);
|
||||
void MakePhonemeList(int post_pause, int new_sentence);
|
||||
int SubstitutePhonemes(PHONEME_LIST2 *plist_out);
|
||||
@@ -393,8 +394,8 @@ private:
|
||||
int ReadClause(FILE *f_in, char *buf, unsigned short *charix, int n_buf);
|
||||
int AnnouncePunctuation(int c1, int c2, char *buf, int ix);
|
||||
|
||||
int LookupDict2(char *word, char *word2, char *phonetic, unsigned int *flags, int end_flags);
|
||||
const char *LookupSpecial(char *string);
|
||||
const char *LookupDict2(const char *word, const char *word2, char *phonetic, unsigned int *flags, int end_flags);
|
||||
const char *LookupSpecial(const char *string);
|
||||
const char *LookupCharName(int c);
|
||||
int LookupNum2(int value, int control, char *ph_out);
|
||||
int LookupNum3(int value, char *ph_out, int suppress_null, int thousandplex, int prev_thousands);
|
||||
@@ -410,7 +411,7 @@ private:
|
||||
void ApplySpecialAttribute(char *phonemes, int dict_flags);
|
||||
|
||||
int IsLetter(int letter, int group);
|
||||
int IsLetterGroup(char *word, int group);
|
||||
int IsLetterGroup(char *word, int group, int pre);
|
||||
|
||||
void CalcPitches_Tone(int clause_tone);
|
||||
|
||||
@@ -424,7 +425,7 @@ protected:
|
||||
|
||||
int IsVowel(int letter);
|
||||
int LookupDictList(char **wordptr, char *ph_out, unsigned int *flags, int end_flags);
|
||||
int Lookup(char *word, char *ph_out);
|
||||
int Lookup(const char *word, char *ph_out);
|
||||
|
||||
|
||||
// groups1 and groups2 are indexes into data_dictrules, set up by InitGroups()
|
||||
@@ -521,7 +522,7 @@ void LoadConfig(void);
|
||||
int PhonemeCode(unsigned int mnem);
|
||||
void ChangeWordStress(Translator *tr, char *word, int new_stress);
|
||||
int TransposeAlphabet(char *text, int offset, int min, int max);
|
||||
int utf8_in(int *c, char *buf, int backwards);
|
||||
int utf8_in(int *c, const char *buf, int backwards);
|
||||
int utf8_out(unsigned int c, char *buf);
|
||||
int lookupwchar(const unsigned short *list,int c);
|
||||
int Eof(void);
|
||||
|
||||
+3
-2
@@ -333,13 +333,14 @@ void TranslDlg::OnCommand(wxCommandEvent& event)
|
||||
while((vp != NULL) && (n_ph_list < N_PH_LIST))
|
||||
{
|
||||
vp = translator->TranslateClause(NULL,vp,&clause_tone,NULL);
|
||||
translator->CalcPitches(clause_tone);
|
||||
translator->CalcLengths();
|
||||
|
||||
translator->GetTranslatedPhonemeString(translator->phon_out,sizeof(translator->phon_out));
|
||||
if(clause_count++ > 0)
|
||||
strcat(phon_out," ||");
|
||||
strcat(phon_out,translator->phon_out);
|
||||
t_phonetic->SetValue(wxString(translator->phon_out,wxConvLocal));
|
||||
translator->CalcPitches(clause_tone);
|
||||
translator->CalcLengths();
|
||||
|
||||
if((n_ph_list + n_phoneme_list) >= N_PH_LIST)
|
||||
{
|
||||
|
||||
+1
-1
@@ -67,7 +67,7 @@ extern USHORT voice_pcnt[N_PEAKS+1][3];
|
||||
extern voice_t *voice;
|
||||
extern int tone_points[10];
|
||||
|
||||
char *SelectVoice(espeak_VOICE *voice_select);
|
||||
const char *SelectVoice(espeak_VOICE *voice_select);
|
||||
voice_t *LoadVoice(const char *voice_name, int control);
|
||||
voice_t *LoadVoiceVariant(const char *voice_name, int variant);
|
||||
void DoVoiceChange(voice_t *v);
|
||||
|
||||
+7
-7
@@ -482,7 +482,7 @@ voice_t *LoadVoice(const char *vname, int control)
|
||||
char translator_name[40];
|
||||
char new_dictionary[40];
|
||||
char phonemes_name[40];
|
||||
char *language_type;
|
||||
const char *language_type;
|
||||
char buf[200];
|
||||
char path_voices[sizeof(path_home)+12];
|
||||
char langname[4];
|
||||
@@ -1005,7 +1005,7 @@ static int __cdecl VoiceScoreSorter(const void *p1, const void *p2)
|
||||
static int ScoreVoice(espeak_VOICE *voice_spec, int spec_n_parts, int spec_lang_len, espeak_VOICE *voice)
|
||||
{//======================================================================================================
|
||||
int ix;
|
||||
char *p;
|
||||
const char *p;
|
||||
int c1, c2;
|
||||
int language_priority;
|
||||
int n_parts;
|
||||
@@ -1146,7 +1146,7 @@ static int SetVoiceScores(espeak_VOICE *voice_select, espeak_VOICE **voices, int
|
||||
int nv; // number of candidates
|
||||
int n_parts=0;
|
||||
int lang_len=0;
|
||||
char *p;
|
||||
const char *p;
|
||||
espeak_VOICE *vp;
|
||||
|
||||
// count number of parts in the specified language
|
||||
@@ -1194,7 +1194,7 @@ static espeak_VOICE *SelectVoiceByName(espeak_VOICE **voices, const char *name)
|
||||
int match_fname = -1;
|
||||
int match_fname2 = -1;
|
||||
int match_name = -1;
|
||||
char *id;
|
||||
const char *id;
|
||||
int last_part_len;
|
||||
char last_part[41];
|
||||
|
||||
@@ -1236,8 +1236,8 @@ static espeak_VOICE *SelectVoiceByName(espeak_VOICE **voices, const char *name)
|
||||
|
||||
|
||||
|
||||
char *SelectVoice(espeak_VOICE *voice_select)
|
||||
{//==========================================
|
||||
char const *SelectVoice(espeak_VOICE *voice_select)
|
||||
{//================================================
|
||||
// Returns a path within espeak-voices, with a possible +variant suffix
|
||||
// variant is an output-only parameter
|
||||
int nv; // number of candidates
|
||||
@@ -1525,7 +1525,7 @@ espeak_ERROR SetVoiceByName(const char *name)
|
||||
|
||||
espeak_ERROR SetVoiceByProperties(espeak_VOICE *voice_selector)
|
||||
{//============================================================
|
||||
char *voice_id;
|
||||
const char *voice_id;
|
||||
|
||||
voice_id = SelectVoice(voice_selector);
|
||||
|
||||
|
||||
+5
-5
@@ -47,7 +47,7 @@ extern PHONEME_TAB_LIST phoneme_tab_list[N_PHONEME_TABS];
|
||||
|
||||
|
||||
// size of the vowelchart png
|
||||
#define WIDTH 1200
|
||||
#define WIDTH 1580
|
||||
#define HEIGHT 800
|
||||
|
||||
|
||||
@@ -131,8 +131,8 @@ static double log2a(double x)
|
||||
|
||||
static int VowelX(int f2)
|
||||
{//======================
|
||||
return(WIDTH - int((log2a(f2) - 9.49)*WIDTH/1.8));
|
||||
// return(1024 - int((log2a(f2) - 9.50)*1020/1.8));
|
||||
return(WIDTH - int((log2a(f2) - 9.40)*WIDTH/1.9));
|
||||
// return(WIDTH - int((log2a(f2) - 9.49)*WIDTH/1.8));
|
||||
}
|
||||
|
||||
static int VowelY(int f1)
|
||||
@@ -168,7 +168,7 @@ static void DrawVowel(wxDC *dc, wxString name, int f1, int f2, int f3, int g1, i
|
||||
if(y < 0) y = 0;
|
||||
if(y > (HEIGHT-4)) y= (HEIGHT-4);
|
||||
if(x < 0) x = 0;
|
||||
if(x > (WIDTH-8)) x = (WIDTH-8);
|
||||
if(x > (WIDTH-12)) x = (WIDTH-12);
|
||||
|
||||
r = z;
|
||||
g = 255;
|
||||
@@ -351,7 +351,7 @@ void VowelChart(int control, char *fname)
|
||||
if((ix % 100) == 0)
|
||||
dc.DrawText(wxString::Format(_T("%d"),ix),1,y);
|
||||
}
|
||||
for(ix=800; ix<=2400; ix+=100)
|
||||
for(ix=700; ix<=2400; ix+=100)
|
||||
{
|
||||
x = VowelX(ix);
|
||||
dc.DrawLine(x,0,x,HEIGHT);
|
||||
|
||||
+2
-2
@@ -634,7 +634,7 @@ void wave_init()
|
||||
//>
|
||||
//<wave_open
|
||||
|
||||
void* wave_open(char* the_api)
|
||||
void* wave_open(const char* the_api)
|
||||
{
|
||||
ENTER("wave_open");
|
||||
static int once=0;
|
||||
@@ -1022,7 +1022,7 @@ void *wave_test_get_write_buffer()
|
||||
|
||||
|
||||
void wave_init() {}
|
||||
void* wave_open(char* the_api) {return (void *)1;}
|
||||
void* wave_open(const char* the_api) {return (void *)1;}
|
||||
size_t wave_write(void* theHandler, char* theMono16BitsWaveBuffer, size_t theSize) {return theSize;}
|
||||
int wave_close(void* theHandler) {return 0;}
|
||||
int wave_is_busy(void* theHandler) {return 0;}
|
||||
|
||||
+1
-1
@@ -9,7 +9,7 @@ extern int option_device_number;
|
||||
|
||||
extern void wave_init();
|
||||
// TBD: the arg could be "alsa", "oss",...
|
||||
extern void* wave_open(char* the_api);
|
||||
extern void* wave_open(const char* the_api);
|
||||
|
||||
extern size_t wave_write(void* theHandler, char* theMono16BitsWaveBuffer, size_t theSize);
|
||||
extern int wave_close(void* theHandler);
|
||||
|
||||
Reference in New Issue
Block a user