diff --git a/dictsource/dict_phonemes b/dictsource/dict_phonemes index a8c80cfc..138e4184 100644 --- a/dictsource/dict_phonemes +++ b/dictsource/dict_phonemes @@ -129,10 +129,10 @@ e: E: E~ I i: O o: O: O~ r- U u: V : b c ch d d. f g -h H j J k kh l m -n N n. n^ p ph Q q -r s S s. t T t. t.h -th v w x z +h H j J k kh l l. +m n N n. n^ p ph Q +q r s S s. t T t. +t.h th v w x z Dictionary hu_dict diff --git a/dictsource/en_rules b/dictsource/en_rules index f06a7fe7..5985dd4d 100644 --- a/dictsource/en_rules +++ b/dictsource/en_rules @@ -2278,7 +2278,7 @@ phab) et (_ Et ber) et (_ eI gr) et (+ Et - f) et (a i: + f) et (a i:t _m) et (e i:t _p) et (e i:t et (itor 'Et diff --git a/dictsource/fr_list b/dictsource/fr_list index c1cf7641..8dff1aa3 100755 --- a/dictsource/fr_list +++ b/dictsource/fr_list @@ -5,7 +5,7 @@ // 2006-11-18 Gilles Casse // -// Updated 2008-02-14 Michel Such +// Updated 2008-02-20 Michel Such // // * Numbers, a few abbreviations and exceptions. // @@ -32,7 +32,7 @@ e @ f Ef g Ze h aS -i i +// i i ï i:tRema j Zi k ka @@ -197,6 +197,8 @@ mbrola Em'bRola mlle mad@mwazEl mme madam mr m@sjY +nsi $abbrev +nsis $abbrev nti $abbrev nvda $abbrev ong $abbrev @@ -366,6 +368,7 @@ tout t'ut2 $u // Letters which can be words //=========================== à a:aksA~gRav $atend +i i $atend y i:gR'Ek $atend @@ -375,6 +378,7 @@ y i:gR'Ek $atend consent kO~s'A~t2 scient si bénéficient benefisi $verb +coing kwE~ concurrent kO~kyR'A~ content kO~t@-t2 $verb couvent k'uvt2 $verb @@ -386,9 +390,11 @@ divers divErz2 évident evidt2 $verb ferment fErm'A~ ferment f'Ermt2 $verb +firent f'irt2 parent paR'A~ parent p'art2 $verb pastis pastis +poing pwE~ président pRezid'A~ président pRezidt2 $verb résident Rezid'A~ @@ -400,6 +406,7 @@ sergent sErZ'A~ serment sErm'A~ serpent sErp'A~ torrent tOR'A~ +tunis tynis // MAIN WORD DICTIONARY @@ -436,6 +443,7 @@ fils fis imprudent E~pRydA~ iris iris juin ZyE~ +laser lazEr malus malys mars maRs minus minys @@ -533,49 +541,44 @@ flirt fl@Rt // words from other languages about _^_en acer asEr -again _^_en -against _^_en alone _^_en also _^_en and _^_en amazon amaz'On -any Eni apple _^_en +april _^_en at _^_en (audible manager) odibl||manadZ@r be _^_en -being _^_en +bit _^_en bluetooth blut'us both _^_en -browser _^_en can _^_en computer _^_en -(cyber link) sibEr||link +(cyber link) _^_en debian dEbjAn -does _^_en -doesn't _^_en don't _^_en driver _^_en -edit edit emacs Emaks emacspeak Emakspi:k end _^_en -enter 'Ent@r epson EpsOn espeak @spi:k ethernet etERnEt +ever _^_en exit egzit eye _^_en eyes _^_en +false _^_en (file zilla) fajl||zija -fire _^_en -firefox faj@RfOks +for _^_en get _^_en google gu:g@l gnome gnom gnu gnu hamburger _!A~b@rg@r help _^_en +hot _^_en in _^_en into _^_en inside _^_en @@ -585,20 +588,29 @@ internet E~tERnEt is _^_en it _^_en its _^_en +june _^_en +july _^_en klaxon klaksOn +later _^_en +latest _^_en layer _^_en let _^_en liszt list lite _^_en +login _^_en logon _^_en (mac os x) makoEsiks made _^_en mail _^_en +march _^_en media medja messenger _^_en my _^_en name _^_en +never _^_en not _^_en +null _^_en +october _^_en of _^_en often _^_en ok oke @@ -606,13 +618,16 @@ open Op'@n outlook autluk outside _^_en outsider _^_en +paint _^_en player _^_en redhat REdat same _^_en sametime _^_en +she _^_en schubert SubER since _^_en sun _^_en +sure _^_en (text aloud) tEkst||@lawd their _^_en there _^_en @@ -620,16 +635,14 @@ these _^_en those _^_en they _^_en thus _^_en -thunderbird D'@ndYR||b@Rd -time _^_en -timer _^_en +true _^_en ubuntu ubuntu up _^_en viking vikiN was _^_en won't _^_en yacht jot -yes jEs $brk +yes _^_en // tions (tjO~ instead of sjO~) diff --git a/dictsource/fr_rules b/dictsource/fr_rules index f3a58f1c..d2ecee44 100755 --- a/dictsource/fr_rules +++ b/dictsource/fr_rules @@ -4,7 +4,7 @@ // 2006-11-18 Gilles Casse // -// Updated: 2008-02-14 Michel Such +// Updated: 2008-02-20 Michel Such // // * The rules are based on Cicero TTS. // Y @@ -15,6 +15,9 @@ // Y front vowels: e i y é ê è î // K not a vowel (i.e. consonant, space, ) +.L01 a b c d e f g h i l p q r t v +.L02 a e i o u y + .group a ae (_ e // reggae vitae @@ -51,11 +54,18 @@ // group a: English section _C) ad (_ _^_en // bad, had, sad + _) again (X _^_en // again, against alk _^_en // talk, walk - all (_ _^_en // football handball f) all (en_ _^_en // fallen sm) all _^_en // small, smaller - ally (_ _^_en // really, naturally + ank _^_en // tank, blank + ark _^_en // dark, park + ainl _^_en + ainm _^_en + _C) ast (_ _^_en + _C) ast (eX _^_en + ather (_ _^_en // rather + aunc _^_en a (wC _^_en @@ -65,13 +75,16 @@ b b // aube // group b: English section + back _^_en + bbl _^_en bird _^_en // bird + _) blue (X _^_en // probably bly (_ _^_en // probably board _^_en // board, keyboard box (_ _^_en // box, inbox, outbox bug (_ _^_en // bug, debug bug (g _^_en // debugger - buil _^_en // build, built + buil _^_en _) buy _^_en _) by _^_en // by, bye, bypass @@ -119,7 +132,8 @@ // group c: English section cast (_ _^_en // broadcast - calt (_ _^_en // difficult + chme _^_en + cult (_ _^_en // difficult cut (_ _^_en // cut, shortcut cy (_ _^_en // currency, frequency @@ -149,8 +163,14 @@ // group d: English section ') d (_ _^_en - lor) d (_ _^_en day (_ _^_en + _) dec _^_en + dece _^_en + _) def _^_en + dele _^_en + deter _^_en + _) devic _^_en + diffe _^_en dle (X _^_en // bundle, handle dly (_ _^_en dy (_ _^_en @@ -259,8 +279,11 @@ _Ch) er (_ ER // cher _env) er (_ ER _hi) er (_ ER // hier + _hyp) er (_ ER // hyper _hiv) er (_ ER // hiver + _sup) er (_ ER // super _trav) er (_ ER + _univ) er (_ ER _ti) er (_ ER @@ -378,8 +401,10 @@ e @ // menue // group e: English section + eac _^_en C) ead _^_en // read, head eaf _^_en // leaf + eag _^_en // eagle eak _^_en // break, speak Cr) eam _^_en // stream Cl) ean _^_en // clean @@ -388,21 +413,33 @@ ear _^_en // ear, search eas _^_en // please eat _^_en // eat, seat - ed (_ _^_en - ee _^_en // meeting eave _^_en // leave + ed (_ _^_en + _) edit _^_en + ee _^_en // meeting eft (_ _^_en // left + ehen _^_en // comprehensive + eing _^_en // being, goeing eive _^_en // receive eith _^_en // either neither + ej _^_en + _) el (AC _^_en // element, eliminate + eld (_ _^_en // field + elf (_ _^_en // shelf + elves (_ _^_en // shelves + ember (_ _^_en + enter (_ _^_en // enter, center ely (_ _^_en // lately + _) enhan _^_en ooC) er (_ _^_en // scooter - _ov) er _^_en // over + ern (_ _^_en // western _C) etter (_ _^_en // letter, better ack) et (_ _^_en // racket, packet ock) et (_ _^_en // rocket, pocket - ery (_ _^_en // query qu) est (_ _^_en // request qu) este (X_ _^_en // requested, requester + _) ev _^_en // even, ever, event + oC) ever _^_en // forever, however .group ë @@ -420,11 +457,12 @@ fail (_ _^_en // fail fail (A _^_en // failure faith _^_en // failure + _) fire _^_en fly _^_en ford (_ _^_en + _) frame _^_en + _) freq _^_en friend _^_en // friend, friendly - full (_ _^_en - fully (_ _^_en fy (_ _^_en @@ -470,6 +508,8 @@ g Z // congé george // group g: English section + _) game (X _^_en + @@) gate (X _^_en gh _^_en // high, higher girl _^_en // girl gly (_ _^_en @@ -591,15 +631,29 @@ _) h (As_ _^_en // has, his ique (_ ik // group i: English section + A_) i (_ _^_en + C_) i (_ _^_en + _) i (_A _^_en + _) i (_C _^_en + L02C) ic (_ _^_en + L02CC) ic (_ _^_en + @C) id (_ _^_en + idd _^_en + iev _^_en + ife (_ _^_en + igg _^_en ike (X _^_en // bike, like - ill (_ _^_en // ill, will, fill - C) illy (_ _^_en // silly + ild _^_en + ilt _^_en ing (_ _^_en // parking ind (_ _^_en // find, mind - ind (er_ _^_en // finder, reminder + _C) ind (er_ _^_en // finder, reminder + _AC) ind (er_ _^_en // finder, reminder ink _^_en // link, pink + ip (_ _^_en // chip, ship ious (_ _^_en // various iously (_ _^_en // previously + ist (_ _^_en // tourist ism (_ _^_en // tourism ize _^_en // realize @@ -628,6 +682,7 @@ _) h (As_ _^_en // has, his // group k: English section ke (X _^_en // basket, make, take + key _^_en ky (_ _^_en .group l @@ -642,7 +697,12 @@ _) h (As_ _^_en // has, his ') ld (_ _^_en ') ll (_ _^_en less (_ _^_en // noiseless + _) live _^_en + ll (_ _^_en + lly (_ _^_en + lk (_ _^_en lessly (_ _^_en // endlessly + lord (_ _^_en .group m @@ -650,6 +710,7 @@ _) h (As_ _^_en // has, his mm m // pomme // group m: English section + ') m (_ _^_en mail (A _^_en // mailer may _^_en mov (A _^_en // move, movy @@ -667,6 +728,7 @@ _) h (As_ _^_en // has, his // group n: English section n't (_ _^_en + nunc _^_en ny (_ _^_en @@ -684,10 +746,6 @@ _) h (As_ _^_en // has, his _) oi (gnon O // oignons oin (C wE~ oin (_ wE~ // coin -C) oing (_ o'iN // going -c) oing (_ wE~ // coing -p) oing (_ wE~ // poing - oing (_ wE~ // poing, coing oi wa // poil oid (_ wa // froid oê (l wa // poêle @@ -719,7 +777,6 @@ p) oing (_ wE~ // poing z) oo o // zoo z) oo (C oo // zoologue z) oo (m u // zoom - oo (X u // pool _gal) op (_ o // galop _sir) op (_ o // sirop @@ -748,16 +805,26 @@ p) oing (_ wE~ // poing o O // sobre notions émotions // group o: English section - C) oad (_ _^_en // load, road - C) oad (eX _^_en // loaded - C) oat _^_en // boat + oa (X _^_en // approach, load + oa (CeX _^_en + oach _^_en + oes (_ _^_en old (er_ _^_en // folder, older +C) oing (_ _^_en // going + _aC) ong (_ _^_en // along, among oo (Ce _^_en // boomer + oo (X _^_en // pool C) oot _^_en // bootable football + _) one _^_en + _) onl _^_en + orm (_ _^_en + _sC) ot _^_en + othe _^_en // other, mother C) ou (ld_ _^_en // could, should oun (C _^_en // bounce, found _C) ouse _^_en // mouse, house C) outh _^_en // mouth, south + _) over _^_en // over ow _^_en // cow, town, down oy (X _^_en // boy, toy @@ -790,8 +857,12 @@ p) oing (_ wE~ // poing se) pt (iè t // septième // group p: English section + pad (_ _^_en plug _^_en // plug + pmen _^_en ply (_ _^_en // simply + _) pre (L01 _^_en + press (_ _^_en print (_ _^_en // print printer (_ _^_en // printer _) prove (X _^_en // prove @@ -826,6 +897,10 @@ mou) rr RR // mourrai r r // rien // group r: English section + AC) ram (_ _^_en + _) real _^_en + rese _^_en + rst (_ _^_en _) rule (X _^_en // rule ry (_ _^_en // theory @@ -903,15 +978,18 @@ e) s (_h z2 s (v z // group s: English section - ') s (_ _^_en // possessive + ') s (_ _^_en + sh (_ _^_en + she (C_ _^_en ship _^_en // friendship shop _^_en // shop sh (At _^_en // shut, shot shout _^_en - sky _^_en + sk _^_en _) smil _^_en // smile, smiley spy _^_en A) ss (_ _^_en // boss, cross + _) state _^_en // state, statement C) s (ton _^_en // winston stone (_ _^_en sy (_ _^_en @@ -979,11 +1057,19 @@ C) te (_ t@- // patte _ce) t (_ t // group t: English section + tch (_ _^_en _) th (AX _^_en // that, this, then, than C) th (_ _^_en // month + _) time _^_en + tle (_ _^_en + too _^_en + ttl _^_en try (_ _^_en // try, country sCar) t (_ _^_en // smart, start sCar) t (er_ _^_en // starter + tme _^_en + tne _^_en + _) tun (AX _^_en ty (_ _^_en // party, buty @@ -1020,8 +1106,14 @@ C) te (_ t@- // patte // group u: English section C) u (ch_ _^_en // much such C) ui (ce _^_en // produice, juice - up (C _^_en // upper, update + umber (_ _^_en + ump (_ _^_en + unch _^_en + _C) unct _^_en // function, punctuation under _^_en // under, understand, thunder + _) up (C _^_en // upper, update + upt (_ _^_en + up (_ _^_en // setup C) ur (ch _^_en // church urn (X _^_en // burn, turn ust (_ _^_en // just, trust @@ -1033,7 +1125,8 @@ C) te (_ t@- // patte // goup v: English section ') ve (_ _^_en - voice (_ _^_en + vail (A _^_en + voice (X _^_en void (_ _^_en vy (_ _^_en @@ -1045,11 +1138,13 @@ C) te (_ t@- // patte // group w: English section A) w _^_en wa (Ce_ _^_en // hardware software wave + _) wan _^_en wr _^_en // write - w (ACh _^_en // wash, wish, with + w (ACC _^_en // wash, wish, with way _^_en // way, away wh _^_en // what, which, who - _) wi _^_en // winner, window, wire + _) wi _^_en // wire + win _^_en // winner, window wise _^_en _) wom _^_en // woman wor _^_en // word, world @@ -1082,6 +1177,9 @@ C) te (_ t@- // patte si) x (iè z // sixième deu) x (iè z // deuxième +// group x: English section + xamp _^_en + .group y y i // cryogénique myope diff --git a/dictsource/hi_list b/dictsource/hi_list index fd0a8723..7accf8e2 100755 --- a/dictsource/hi_list +++ b/dictsource/hi_list @@ -154,6 +154,7 @@ _dpt _d@s@ml'o:_ // ?? what is Hi for "." ? य j@ र r@ ऱ r@ +ळ l.@ व v@ श S@ ष s.@ // should be retroflex [S] diff --git a/dictsource/hi_rules b/dictsource/hi_rules index 5fb319f4..957b450f 100755 --- a/dictsource/hi_rules +++ b/dictsource/hi_rules @@ -343,16 +343,16 @@ ्) ल (_ lV .group ळ - ळ lV // (temporary) same as [l] - ळ (B l -?1 ल (_ l - ्) ल (_ lV + ळ l.V + ळ (B l. +?1 ल (_ l. + ्) ल (_ l.V .group ऴ - ऴ lV // (temporary) same as [l] - ऴ (B l -?1 ल (_ l - ्) ल (_ lV + ऴ l.V // (temporary) same as [l.] + ऴ (B l. +?1 ल (_ l. + ्) ल (_ l.V .group व व vV diff --git a/dictsource/tr_list b/dictsource/tr_list index eaad0544..a3b88304 100644 --- a/dictsource/tr_list +++ b/dictsource/tr_list @@ -48,6 +48,8 @@ _7 jedi _8 sekiz _9 dokuz _10 on +_11 'onbir +_12 'oniki _1X on _2X jirmi _3X otuz @@ -58,10 +60,14 @@ _7X jetmiS _8X seksEn _9X doksan _0C jyz +_2C 'ikijyz _0M1 bIn +_1M1 bIn _0M2 miljon +_1M2 miljon _0M3 miljar -_dpt _virg,Yl +_1M3 miljar +_dpt _virg,Yl_| diff --git a/dictsource/tr_rules b/dictsource/tr_rules index 9bd26d4a..ae61856f 100644 --- a/dictsource/tr_rules +++ b/dictsource/tr_rules @@ -6,6 +6,8 @@ .group a a a + avru (pa avr'u + .group b b b @@ -18,6 +20,8 @@ .group d d d + _) d (eğil 'd + .group e e e diff --git a/dictsource/zh_rules b/dictsource/zh_rules index b16a4c7a..60585cfa 100644 --- a/dictsource/zh_rules +++ b/dictsource/zh_rules @@ -263,3 +263,5 @@ language). 4 51 5 11 + | _| + diff --git a/espeak-data/voices/es_la b/espeak-data/voices/es-la similarity index 100% rename from espeak-data/voices/es_la rename to espeak-data/voices/es-la diff --git a/phsource/compile_report b/phsource/compile_report index 13c1f02b..6e08d14d 100644 --- a/phsource/compile_report +++ b/phsource/compile_report @@ -17,8 +17,8 @@ fi 40 130 fr 44 125 fr_ca 11 125 - hi 50 135 - ta 16 138 + hi 51 136 + ta 15 138 hu 23 115 nl 28 122 pl 15 110 @@ -47,7 +47,7 @@ th 50 142 id 14 120 tr 14 123 - ku 12 120 + ku 13 120 ja 7 104 Data file Used by @@ -361,7 +361,7 @@ l/l_long [l] base [l;] ro l/lo [(o)] base [l] fr -l^/l_rfx [l.] ta +l^/l_rfx [l.] hi l/lu [(u)] base [l] fr l/tl [l] base @@ -952,6 +952,7 @@ vdiph/eeu_2 [EU] la [EU] pt_pt vdiph/eeu_3 [aU] en_n [aU] en_wm + [eU] ku vdiph/eey [ey] fi vdiph/ei [eI] base2 [e:] nl diff --git a/phsource/ph_hindi b/phsource/ph_hindi index 8e87ab51..6d9526c1 100644 --- a/phsource/ph_hindi +++ b/phsource/ph_hindi @@ -216,6 +216,13 @@ endphoneme // CONSONANTS //=========== +phoneme l. + liquid rfx + lengthmod 7 + formants l^/l_rfx +endphoneme + + phoneme v // no fricative noise vcd lbd frc diff --git a/phsource/ph_tamil b/phsource/ph_tamil index e643e9fa..650d6948 100644 --- a/phsource/ph_tamil +++ b/phsource/ph_tamil @@ -96,13 +96,6 @@ phoneme u- endphoneme -phoneme l. - liquid rfx - lengthmod 7 - formants l^/l_rfx -endphoneme - - // ?? This is standard [v]. Should be it [v] without the fricative noise? phoneme v vcd lbd frc diff --git a/src/compiledict.cpp b/src/compiledict.cpp index 406e5c84..664e617f 100755 --- a/src/compiledict.cpp +++ b/src/compiledict.cpp @@ -1510,8 +1510,8 @@ int CompileDictionary(const char *dsource, const char *dict_name, FILE *log, cha fprintf(f_log,"Using phonemetable: '%s'\n",PhonemeTabName()); compile_dictlist_file(path,"roots"); - compile_dictlist_file(path,"listx"); compile_dictlist_file(path,"list"); + compile_dictlist_file(path,"listx"); compile_dictlist_file(path,"extra"); compile_dictlist_end(f_out); diff --git a/src/intonation.cpp b/src/intonation.cpp index e684bd3d..4b45e6c6 100755 --- a/src/intonation.cpp +++ b/src/intonation.cpp @@ -233,7 +233,7 @@ typedef struct { int *body_drops; unsigned char body_max_steps; - unsigned char body_lower_u; + char body_lower_u; char n_overflow; short *overflow; @@ -270,8 +270,8 @@ static TONE_HEAD tone_head_table[N_TONE_HEAD_TABLE] = { {20, 25, 34, 22, drops_0, 3, 3, 5, oflow}, // 8 pitch raises at end of sentence {20, 25, 34, 20, drops_0, 3, 3, 5, oflow}, // 9 comma {20, 25, 34, 22, drops_0, 3, 3, 5, oflow}, // 10 question - {20, 25, 24, 22, drops_0, 3, 3, 5, oflow_less}, // 11 test - {19, 26, 36, 20, drops_0, 2, 4, 5, oflow_test2}, // 12 test + {15, 18, 18, 14, drops_0, 3, 3, 5, oflow_less}, // 11 test + {20, 25, 24, 22, drops_0, 3, 3, 5, oflow_less}, // 12 test }; static TONE_NUCLEUS tone_nucleus_table[N_TONE_NUCLEUS_TABLE] = { @@ -1069,6 +1069,10 @@ void Translator::CalcPitches(int clause_type) { p->env = PITCHrise; } + else + if(p->tone > 5) + p->env = syl->env; + if(p->pitch1 > p->pitch2) { // swap so that pitch2 is the higher @@ -1076,8 +1080,7 @@ void Translator::CalcPitches(int clause_type) p->pitch1 = p->pitch2; p->pitch2 = x; } - if(p->tone > 5) - p->env = syl->env; + if(syl->flags & SYL_EMPHASIS) { diff --git a/src/numbers.cpp b/src/numbers.cpp index f64f2f7a..fcaba504 100644 --- a/src/numbers.cpp +++ b/src/numbers.cpp @@ -37,8 +37,8 @@ -void Translator::LookupLetter(int letter, int next_byte, char *ph_buf1) -{//================================================================== +void Translator::LookupLetter(unsigned int letter, int next_byte, char *ph_buf1) +{//============================================================================= int len; unsigned char *p; static char single_letter[10] = {0,0}; @@ -643,6 +643,7 @@ int Translator::TranslateNumber_1(char *word, char *ph_out, unsigned int *flags, int this_value; static int prev_value; int decimal_count; + int max_decimal_count; char string[12]; // for looking up entries in de_list char buf1[100]; char ph_append[50]; @@ -783,8 +784,11 @@ int Translator::TranslateNumber_1(char *word, char *ph_out, unsigned int *flags, if(decimal_count > 1) { - switch(langopts.numbers & 0x6000) + max_decimal_count = 2; + switch(langopts.numbers & 0xe000) { + case 0x8000: + max_decimal_count = 5; case 0x4000: // French/Polish decimal fraction while(word[n_digits] == '0') @@ -794,7 +798,7 @@ int Translator::TranslateNumber_1(char *word, char *ph_out, unsigned int *flags, decimal_count--; n_digits++; } - if(decimal_count < 6) + if(decimal_count <= max_decimal_count) { LookupNum3(atoi(&word[n_digits]),buf1,0,0,0); strcat(ph_out,buf1); diff --git a/src/speak.cpp b/src/speak.cpp index 175f2e50..ea6ec81e 100755 --- a/src/speak.cpp +++ b/src/speak.cpp @@ -59,7 +59,7 @@ int (* uri_callback)(int, const char *, const char *) = NULL; int (* phoneme_callback)(const char *) = NULL; FILE *f_wave = NULL; - int quiet = 0; +int quiet = 0; unsigned int samples_total = 0; unsigned int samples_split = 0; unsigned int wavefile_count = 0; @@ -304,6 +304,9 @@ static int WavegenFile(void) finished = WavegenFill(0); + if(quiet) + return(finished); + if(f_wave == NULL) { sprintf(fname,"%s_%.2d%s",wavefile,++wavefile_count,filetype); @@ -794,15 +797,19 @@ int main (int argc, char **argv) InitText(0); SpeakNextClause(f_text,p_text,0); + ix = 1; for(;;) { if(WavegenFile() != 0) { - break; // finished, wavegen command queue is empty + if(ix == 0) + break; // finished, wavegen command queue is empty } if(Generate(phoneme_list,&n_phoneme_list,1)==0) - SpeakNextClause(NULL,NULL,1); + { + ix = SpeakNextClause(NULL,NULL,1); + } } CloseWaveFile(); diff --git a/src/synthdata.cpp b/src/synthdata.cpp index fbddb27e..c488e61b 100755 --- a/src/synthdata.cpp +++ b/src/synthdata.cpp @@ -35,7 +35,7 @@ #include "translate.h" #include "wave.h" -const char *version_string = "1.31.12 16.Feb.08"; +const char *version_string = "1.31.13 21.Feb.08"; const int version_phdata = 0x013105; int option_device_number = -1; diff --git a/src/synthesize.cpp b/src/synthesize.cpp index 35d529e0..063810c5 100755 --- a/src/synthesize.cpp +++ b/src/synthesize.cpp @@ -100,6 +100,12 @@ void SynthesizeInit() // next_pause.ph = phoneme_tab[phonPAUSE]; // this must be done after voice selection next_pause.type = phPAUSE; next_pause.newword = 0; + + if(!iswalpha(0x010d)) + { + // check that c-caron is recognized as an alphabetic character + fprintf(stderr,"iswalpha() Accented letters are not recognized\n"); + } } diff --git a/src/tr_languages.cpp b/src/tr_languages.cpp index 18dd761e..d8428e44 100644 --- a/src/tr_languages.cpp +++ b/src/tr_languages.cpp @@ -277,7 +277,7 @@ Translator *SelectTranslator(const char *name) tr->langopts.stress_flags = 0x0024; // don't use secondary stress tr->langopts.param[LOPT_IT_LENGTHEN] = 1; // remove lengthen indicator from unstressed syllables - tr->langopts.numbers = 0x1509 + 0x4000 + NUM_NOPAUSE | NUM_ROMAN; + tr->langopts.numbers = 0x1509 + 0x8000 + NUM_NOPAUSE | NUM_ROMAN; SetLetterVowel(tr,'y'); } break; @@ -642,7 +642,7 @@ SetLengthMods(tr,3); // all equal } break; - case L('t','a'): + case L('t','a'): // Tamil { static const short stress_lengths_ta[8] = {190, 190, 200, 200, 0, 0, 220, 220}; static const unsigned char stress_amps_ta[8] = {18,18, 18,18, 20,20, 22,22 }; @@ -693,7 +693,7 @@ SetLengthMods(tr,3); // all equal tr->langopts.stress_rule = 7; // stress on the last syllable, before any explicitly unstressed syllable - tr->langopts.numbers = 0x1d09; + tr->langopts.numbers = 0x1d09 + 0x4000; tr->langopts.max_initial_consonants = 2; } break; @@ -734,7 +734,7 @@ SetLengthMods(tr,3); // all equal case L('z','h'): case L_zhy: { - static const short stress_lengths_zh[8] = {230,150, 230,230, 230,0, 240,290}; + static const short stress_lengths_zh[8] = {230,150, 230,230, 230,0, 240,250}; // 1=tone5. end-of-sentence, 6=tone 1&4, 7=tone 2&3 static const unsigned char stress_amps_zh[] = {22,16, 22,22, 22,22, 22,22 }; tr = new Translator; diff --git a/src/translate.cpp b/src/translate.cpp index c6f366db..5c0a7091 100755 --- a/src/translate.cpp +++ b/src/translate.cpp @@ -363,7 +363,7 @@ int IsAlpha(unsigned int c) return(1); // Devanagari vowel signs and other signs if((c >= 0xb81) && (c <= 0xbe5)) - return(1); // Devanagari vowel signs and other signs + return(1); // Tamil vowel signs and other signs if((c >= 0x300) && (c <= 0x36f)) return(1); // combining accents @@ -2049,7 +2049,7 @@ if((c == '/') && (langopts.testing & 2) && IsDigit09(next_in) && IsAlpha(prev_ou else if(IsAlpha(c)) { - if(!IsAlpha(prev_out) || (langopts.ideographs && ((c >= 0x3000) || (prev_out >= 0x3000)))) + if(!IsAlpha(prev_out) || (langopts.ideographs && ((c > 0x3040) || (prev_out > 0x3040)))) { if(wcschr(punct_within_word,prev_out) == 0) letter_count = 0; // don't reset count for an apostrophy within a word diff --git a/src/translate.h b/src/translate.h index 4968a951..da3e2979 100755 --- a/src/translate.h +++ b/src/translate.h @@ -428,7 +428,7 @@ private: const char *LookupDict2(const char *word, const char *word2, char *phonetic, unsigned int *flags, int end_flags, WORD_TAB *wtab); const char *LookupSpecial(const char *string); const char *LookupCharName(int c); - void LookupLetter(int letter, int next_byte, char *ph_buf); + void LookupLetter(unsigned int letter, int next_byte, char *ph_buf); int LookupNum2(int value, int control, char *ph_out); int LookupNum3(int value, char *ph_out, int suppress_null, int thousandplex, int prev_thousands); int LookupThousands(int value, int thousandplex, char *ph_out);