Bug fixes. git-svn-id: https://espeak.svn.sourceforge.net/svnroot/espeak/trunk@166 d46cf337-b52f-0410-862d-fd96e6ae7743master
| @@ -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: | |||
| @@ -4,7 +4,7 @@ | |||
| // 2006-11-18 Gilles Casse <[email protected]> | |||
| // | |||
| // Updated: 2008-03-05 Michel Such <[email protected]> | |||
| // Updated: 2008-03-10 Michel Such <[email protected]> | |||
| // | |||
| // * 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 | |||
| @@ -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& | |||
| @@ -66,7 +66,7 @@ | |||
| #define M_IMPLOSIVE M_HOOK | |||
| typedef struct { | |||
| char *name; | |||
| const char *name; | |||
| int flags; | |||
| } ACCENTS; | |||
| @@ -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 <sub> ... </sub> 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]; | |||
| @@ -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; | |||
| @@ -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]; | |||
| @@ -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; | |||
| @@ -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,24 +1472,27 @@ 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) | |||
| { | |||
| // 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; | |||
| 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(ok) | |||
| { | |||
| *p2 = '-'; // replace next space by hyphen | |||
| @@ -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; | |||