diff --git a/dictsource/en_list b/dictsource/en_list index b479bdf4..c30a7894 100644 --- a/dictsource/en_list +++ b/dictsource/en_list @@ -306,7 +306,7 @@ eur jU@ hmm h@m (http ://) eItSti:ti:'pi:_ ibm $abbrev -ie aIi:_! $pause +ie aIi:_! $pause $only i.e aIi:_! $pause irc $abbrev lbs paUndz @@ -1103,6 +1103,7 @@ heroic hI2roUIk heroin hEroUIn heroism hEroUIz@m heroine hEroUIn +heron hEr@n herpes h3:pi:z hideout haIdaUt hindu hIndu: diff --git a/dictsource/fr_rules b/dictsource/fr_rules index 091509bd..0cc16cae 100755 --- a/dictsource/fr_rules +++ b/dictsource/fr_rules @@ -4,7 +4,7 @@ // 2006-11-18 Gilles Casse // -// Updated: 2008-03-05 Michel Such +// Updated: 2008-03-10 Michel Such // // * The rules are based on Cicero TTS. // Y @@ -256,7 +256,7 @@ ontin) en (t_ A~ // continent, incontinent erm) en (t_ A~ // ferment, serment Vferm) en (t_ // ferment, referment (verbe) - Arp) en (t_ A~ // arpent, serpent + XArp) en (t_ A~ // arpent, serpent CArr) en (t_ A~ // conncurrent, torrent _appar) en (t_ A~ // apparent spar) en (t_ A~ // transparent @@ -274,6 +274,7 @@ xcell) en (t_ A~ // excellent nn) en (t_ t2 // prennent, viennent, sonnent + iCam) en (t_ A~ mm) en (t_ A~ em) en (t_ A~ // vitement mom) en (t_ A~ // moment @@ -281,6 +282,7 @@ Caim) en (t_ A~ dum) en (t_ A~ gum) en (t_ A~ + jum) en (t_ A~ oCum) en (t_ A~ rum) en (t_ A~ @@ -693,16 +695,12 @@ _) half _^_en .group j j Z // adjoint joujoux -// group j: English section - ject (_ _^_en - .group k k k // kafka // group k: English section - AC) k _^_en // blank, black, dark ke (X _^_en // basket, make, take key _^_en ky (_ _^_en @@ -1046,6 +1044,9 @@ C) te (_ t@- // patte // group t: English section C) th (_ _^_en // month + _) th (eX _^_en // the, then + _) th (aX _^_en // than, that + _) th (As _^_en // these those there _) time _^_en tle (_ _^_en too _^_en @@ -1224,3 +1225,4 @@ C) te (_ t@- // patte + diff --git a/dictsource/pt_list b/dictsource/pt_list index b3c6fb9a..84242786 100755 --- a/dictsource/pt_list +++ b/dictsource/pt_list @@ -116,7 +116,7 @@ _" 'abRi;'asp&||d'upl&s# ?1 _1 'um ?2 _1 'uN _2 d'oIs# - _3 tr'es# + _3 tR'es# ?1 _4 kw'atru ?2 _4 kw'atRu _5 s'iNku @@ -145,7 +145,7 @@ _15 k'iNzy ?2_19 dezen'Ovi ?1_2X v'iNty ?2_2X v'iNtSi -_3X tr'iNt& +_3X tR'iNt& ?1_4X kw&*'eNt& ?2_4X kwa*'eINt& diff --git a/src/numbers.cpp b/src/numbers.cpp index a4250750..629c54ea 100644 --- a/src/numbers.cpp +++ b/src/numbers.cpp @@ -66,7 +66,7 @@ #define M_IMPLOSIVE M_HOOK typedef struct { -char *name; +const char *name; int flags; } ACCENTS; diff --git a/src/readclause.cpp b/src/readclause.cpp index eb85bc34..bdfc9782 100644 --- a/src/readclause.cpp +++ b/src/readclause.cpp @@ -54,7 +54,7 @@ int ungot_char2 = 0; char *p_textinput; wchar_t *p_wchar_input; int ungot_char; -char *ungot_word = NULL; +const char *ungot_word = NULL; int end_of_input; int ignore_text=0; // set during ... to ignore text which has been replaced by an alias @@ -528,7 +528,7 @@ const char *Translator::LookupCharName(int c) char single_letter[24]; char phonemes[60]; char phonemes2[60]; - char *lang_name = NULL; + const char *lang_name = NULL; char *string; static char buf[60]; diff --git a/src/synthdata.cpp b/src/synthdata.cpp index 52888805..b142b001 100755 --- a/src/synthdata.cpp +++ b/src/synthdata.cpp @@ -35,7 +35,7 @@ #include "translate.h" #include "wave.h" -const char *version_string = "1.36 09.Mar.08"; +const char *version_string = "1.36.01 11.Mar.08"; const int version_phdata = 0x013400; int option_device_number = -1; diff --git a/src/synthesize.cpp b/src/synthesize.cpp index 8ce6dc02..8b2c8de3 100755 --- a/src/synthesize.cpp +++ b/src/synthesize.cpp @@ -1093,6 +1093,7 @@ int Generate(PHONEME_LIST *phoneme_list, int *n_ph, int resume) int stress; int modulation; int pre_voiced; + int free_min; unsigned char *pitch_env=NULL; unsigned char *amp_env; PHONEME_TAB *ph; @@ -1125,11 +1126,20 @@ int Generate(PHONEME_LIST *phoneme_list, int *n_ph, int resume) while(ix < (*n_ph)) { - if(WcmdqFree() <= MIN_WCMDQ) + p = &phoneme_list[ix]; + + if(p->type == phPAUSE) + free_min = 5; + else + if(p->type != phVOWEL) + free_min = 10; // we need less Q space for non-vowels, and we need to generate phonemes after a vowel so that the pitch_length is filled in + else + free_min = MIN_WCMDQ; // 22 + + if(WcmdqFree() <= free_min) return(1); // wait prev = &phoneme_list[ix-1]; - p = &phoneme_list[ix]; next = &phoneme_list[ix+1]; next2 = &phoneme_list[ix+2]; diff --git a/src/synthesize.h b/src/synthesize.h index 922d81db..025a9985 100755 --- a/src/synthesize.h +++ b/src/synthesize.h @@ -189,7 +189,7 @@ extern unsigned char pitch_adjust_tab[MAX_PITCH_VALUE+1]; #define N_WCMDQ 160 -#define MIN_WCMDQ 20 // need this many free entries before adding new phoneme +#define MIN_WCMDQ 22 // need this many free entries before adding new phoneme extern long wcmdq[N_WCMDQ][4]; extern int wcmdq_head; diff --git a/src/translate.cpp b/src/translate.cpp index b5e34f42..75ce20c0 100755 --- a/src/translate.cpp +++ b/src/translate.cpp @@ -864,7 +864,7 @@ if((wmark > 0) && (wmark < 8)) if((word_length == 1) && IsAlpha(wc)) { posn = 0; - while(*wordx != ' ') + while((*wordx != ' ') && (*wordx != 0)) { wordx += TranslateLetter(wordx, phonemes, 4, word_length); posn++; @@ -1439,8 +1439,9 @@ int Translator::TranslateWord2(char *word, WORD_TAB *wtab, int pre_pause, int ne } else { + int c2; ix = 0; - while((word_copy[ix] = word[ix]) != ' ') ix++; + while(((c2 = word_copy[ix] = word[ix]) != ' ') && (c2 != 0)) ix++; word_copy_len = ix; flags = translator->TranslateWord(word, next_pause, wtab); @@ -1471,22 +1472,25 @@ int Translator::TranslateWord2(char *word, WORD_TAB *wtab, int pre_pause, int ne ok =0; } - if(sylimit & 0x100) + if(ok != 0) { - // only if the second word has $alt attribute - strcpy(ph_buf,word_phonemes); - flags2 = translator->TranslateWord(p2+1, 0, wtab+1); - if((flags2 & FLAG_ALT_TRANS) == 0) + if(sylimit & 0x100) { - ok = 0; - strcpy(word_phonemes,ph_buf); + // only if the second word has $alt attribute + strcpy(ph_buf,word_phonemes); + flags2 = translator->TranslateWord(p2+1, 0, wtab+1); + if((flags2 & FLAG_ALT_TRANS) == 0) + { + ok = 0; + strcpy(word_phonemes,ph_buf); + } + } + + if((sylimit & 0x200) && ((wtab+1)->flags & FLAG_LAST_WORD)) + { + // not if the next word is end-of-sentence + ok = 0; } - } - - if((sylimit & 0x200) && ((wtab+1)->flags & FLAG_LAST_WORD)) - { - // not if the next word is end-of-sentence - ok = 0; } if(ok) @@ -1995,10 +1999,9 @@ void *Translator::TranslateClause(FILE *f_text, const void *vp_input, int *tone_ } } + memset(&ph_list2[0],0,sizeof(ph_list2[0])); ph_list2[0].phcode = phonPAUSE_SHORT; - ph_list2[0].stress = 0; - ph_list2[0].tone_number = 0; - ph_list2[0].sourceix = 0; + n_ph_list2 = 1; prev_last_stress = 0; prepause_timeout = 0;