mirror of
https://github.com/rhasspy/espeak-ng.git
synced 2026-11-12 08:50:01 +00:00
Merge branch 'development'
This commit is contained in:
+23
-5
@@ -745,6 +745,7 @@ static void CompileReport(void)
|
||||
REF_HASH_TAB **list;
|
||||
const char *data_path;
|
||||
int prev_table;
|
||||
int procedure_num;
|
||||
int prev_mnemonic;
|
||||
|
||||
if(f_report == NULL)
|
||||
@@ -802,7 +803,17 @@ static void CompileReport(void)
|
||||
j++;
|
||||
}
|
||||
|
||||
fprintf(f_report," [%s] %s",WordToString(prev_mnemonic = list[ix]->ph_mnemonic), phoneme_tab_list2[prev_table = list[ix]->ph_table].name);
|
||||
prev_mnemonic = list[ix]->ph_mnemonic;
|
||||
if((prev_mnemonic >> 24) == 'P')
|
||||
{
|
||||
// a procedure, not a phoneme
|
||||
procedure_num = atoi(WordToString(prev_mnemonic));
|
||||
fprintf(f_report," %s %s", phoneme_tab_list2[prev_table = list[ix]->ph_table].name, proc_names[procedure_num]);
|
||||
}
|
||||
else
|
||||
{
|
||||
fprintf(f_report," [%s] %s",WordToString(prev_mnemonic), phoneme_tab_list2[prev_table = list[ix]->ph_table].name);
|
||||
}
|
||||
fputc('\n',f_report);
|
||||
}
|
||||
|
||||
@@ -1856,7 +1867,7 @@ static int LoadWavefile(FILE *f, const char *fname)
|
||||
}
|
||||
|
||||
sprintf(command,"sox \"%s%s.wav\" -r %d -c1 -t wav %s\n",path_source,fname2,samplerate_native, fname_temp);
|
||||
if(system(command) < 0)
|
||||
if(system(command) != 0)
|
||||
{
|
||||
failed = 1;
|
||||
}
|
||||
@@ -2761,6 +2772,8 @@ int CompilePhoneme(int compile_phoneme)
|
||||
}
|
||||
strcpy(proc_names[n_procs], item_string);
|
||||
phoneme_out = &phoneme_out2;
|
||||
sprintf(number_buf,"%.3dP", n_procs);
|
||||
phoneme_out->mnemonic = StringToWord(number_buf);
|
||||
}
|
||||
|
||||
phoneme_out->code = phcode;
|
||||
@@ -3498,10 +3511,11 @@ static void CompilePhonemeData2(const char *source)
|
||||
make_envs();
|
||||
#endif
|
||||
|
||||
wxLogStatus(_T("Compiling phoneme data: ")+wxString(path_source,wxConvLocal));
|
||||
n_envelopes = 0;
|
||||
error_count = 0;
|
||||
resample_count = 0;
|
||||
memset(markers_used,0,sizeof(markers_used));
|
||||
memset(markers_used,0,sizeof(markers_used));
|
||||
|
||||
f_errors = stderr;
|
||||
|
||||
@@ -3668,7 +3682,7 @@ fprintf(f_errors,"\nRefs %d, Reused %d\n",count_references,duplicate_references
|
||||
|
||||
if(error_count > 0)
|
||||
{
|
||||
report += _T(" See file: 'phsource/error_log'.");
|
||||
report += _T(" See file: '")+wxString(path_source,wxConvLocal)+_T("phsource/error_log'.");
|
||||
wxLogError(report);
|
||||
}
|
||||
wxLogStatus(report + report_dict);
|
||||
@@ -4138,7 +4152,11 @@ void CompilePhonemeData()
|
||||
void CompileSampleRate()
|
||||
{
|
||||
long value;
|
||||
value = wxGetNumberFromUser(_T("Compile phoneme data with a specified sample rate"), _T("Sample rate"), _T("Resample (needs sox)"), 22050, 5000, 48000);
|
||||
#ifndef PLATFORM_POSIX
|
||||
wxLogError(_T("Change Sample Rate needs the 'sox' program. It probably doesn't work on Windows"));
|
||||
#endif
|
||||
|
||||
value = wxGetNumberFromUser(_T("Compile phoneme data with a specified sample rate"), _T("Sample rate"), _T("Resample (needs 'sox' program)"), 22050, 5000, 48000);
|
||||
|
||||
if(value > 1000)
|
||||
{
|
||||
|
||||
+2
-2
@@ -91,8 +91,8 @@ wxMenuBar *MakeMenu(int type, const char *dict_name)
|
||||
data_menu = new wxMenu;
|
||||
data_menu->Append(MENU_COMPILE_DICT, _("Compile &dictionary"));
|
||||
data_menu->Append(MENU_COMPILE_DICT_DEBUG, _("Compile dictionary (debu&g)"));
|
||||
data_menu->Append(MENU_COMPILE_PH, _("Compile &phoneme data"));
|
||||
data_menu->Append(MENU_COMPILE_PH2, _("Change sample &rate"));
|
||||
data_menu->Append(MENU_COMPILE_PH, _("Compile &phoneme data 22050Hz"));
|
||||
data_menu->Append(MENU_COMPILE_PH2, _("Compile at sample &rate"));
|
||||
data_menu->AppendSeparator();
|
||||
data_menu->Append(MENU_COMPILE_MBROLA, _("Compile &mbrola phonemes list..."));
|
||||
data_menu->Append(MENU_COMPILE_INTONATION, _("Compile &intonation data"));
|
||||
|
||||
+1
-1
@@ -35,7 +35,7 @@
|
||||
#include "translate.h"
|
||||
#include "wave.h"
|
||||
|
||||
const char *version_string = "1.46.51 15.Mar.13";
|
||||
const char *version_string = "1.46.53 16.Mar.13";
|
||||
const int version_phdata = 0x014640;
|
||||
|
||||
int option_device_number = -1;
|
||||
|
||||
+1
-1
@@ -82,7 +82,7 @@ const char *WordToString(unsigned int word)
|
||||
int ix;
|
||||
static char buf[5];
|
||||
|
||||
for(ix=0; ix<3; ix++)
|
||||
for(ix=0; ix<4; ix++)
|
||||
buf[ix] = word >> (ix*8);
|
||||
buf[4] = 0;
|
||||
return(buf);
|
||||
|
||||
@@ -455,6 +455,7 @@ Translator *SelectTranslator(const char *name)
|
||||
static const short stress_lengths_sk[8] = {190,190, 210,210, 0,0, 210,210};
|
||||
|
||||
static const short stress_lengths_ta[8] = {200, 200, 210, 210, 0, 0, 230, 230};
|
||||
static const short stress_lengths_ta2[8] = {230, 230, 240, 240, 0, 0, 260, 260};
|
||||
static const unsigned char stress_amps_ta[8] = {18,18, 18,18, 20,20, 22,22 };
|
||||
|
||||
// convert name string into a word of up to 4 characters, for the switch()
|
||||
@@ -731,6 +732,7 @@ Translator *SelectTranslator(const char *name)
|
||||
if(name2 == L('a','n'))
|
||||
{
|
||||
tr->langopts.stress_flags = S_FINAL_SPANISH | S_FINAL_DIM_ONLY | S_FINAL_NO_2;
|
||||
tr->langopts.numbers2 = 0;
|
||||
}
|
||||
else
|
||||
if(name2 == L_pap)
|
||||
@@ -1423,7 +1425,7 @@ SetLengthMods(tr,3); // all equal
|
||||
case L('m','r'): // Marathi
|
||||
case L('t','e'): // Telugu
|
||||
{
|
||||
SetupTranslator(tr,stress_lengths_ta,stress_amps_ta);
|
||||
SetupTranslator(tr,stress_lengths_ta2, stress_amps_ta);
|
||||
tr->langopts.length_mods0 = tr->langopts.length_mods; // don't lengthen vowels in the last syllable
|
||||
|
||||
tr->langopts.stress_rule = STRESSPOSN_1L;
|
||||
@@ -1433,9 +1435,12 @@ SetLengthMods(tr,3); // all equal
|
||||
|
||||
if(name2 == L('t','a'))
|
||||
{
|
||||
SetupTranslator(tr,stress_lengths_ta, NULL);
|
||||
tr->letter_bits_offset = OFFSET_TAMIL;
|
||||
tr->langopts.numbers = NUM_OMIT_1_THOUSAND ;
|
||||
tr->langopts.param[LOPT_WORD_MERGE] = 1; // don't break vowels betwen words
|
||||
}
|
||||
else
|
||||
if(name2 == L('m','r'))
|
||||
{
|
||||
tr->letter_bits_offset = OFFSET_DEVANAGARI;
|
||||
@@ -1458,9 +1463,8 @@ SetLengthMods(tr,3); // all equal
|
||||
tr->letter_bits_offset = OFFSET_TELUGU;
|
||||
tr->langopts.numbers = 0x1;
|
||||
}
|
||||
tr->langopts.param[LOPT_WORD_MERGE] = 1; // don't break vowels betwen words
|
||||
SetIndicLetters(tr); // call this after setting OFFSET_
|
||||
SetLetterBitsRange(tr,LETTERGP_B,0x4e,0x4e); // chillu-virama (unofficial)
|
||||
SetLetterBitsRange(tr,LETTERGP_B,0x4e,0x4e); // chillu-virama (unofficial)
|
||||
}
|
||||
break;
|
||||
|
||||
|
||||
+5
-2
@@ -842,7 +842,7 @@ int TranslateWord(Translator *tr, char *word_start, int next_pause, WORD_TAB *wt
|
||||
char prefix_chars[0x3f + 2];
|
||||
int found=0;
|
||||
int end_flags;
|
||||
char c_temp; // save a character byte while we temporarily replace it with space
|
||||
int c_temp; // save a character byte while we temporarily replace it with space
|
||||
int first_char;
|
||||
int last_char = 0;
|
||||
int add_plural_suffix = 0;
|
||||
@@ -912,7 +912,9 @@ int TranslateWord(Translator *tr, char *word_start, int next_pause, WORD_TAB *wt
|
||||
if((word_length == 1) && (wflags & FLAG_TRANSLATOR2))
|
||||
{
|
||||
// retranslating a 1-character word using a different language, say its name
|
||||
spell_word = 1;
|
||||
utf8_in(&c_temp, wordx+1); // the next character
|
||||
if(!IsAlpha(c_temp) || (AlphabetFromChar(last_char) != AlphabetFromChar(c_temp)))
|
||||
spell_word = 1;
|
||||
}
|
||||
|
||||
if(option_sayas == SAYAS_KEY)
|
||||
@@ -1938,6 +1940,7 @@ static int TranslateWord2(Translator *tr, char *word, WORD_TAB *wtab, int pre_pa
|
||||
if(ok)
|
||||
{
|
||||
*p2 = '-'; // replace next space by hyphen
|
||||
wtab[0].flags &= ~FLAG_ALL_UPPER; // prevent it being considered an abbreviation
|
||||
flags = TranslateWord(translator, word, next_pause, wtab, NULL); // translate the combined word
|
||||
if((sylimit > 0) && (CountSyllables(p) > (sylimit & 0x1f)))
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user