diff --git a/dictsource/dict_phonemes b/dictsource/dict_phonemes index 94fd27ff..54a0080c 100644 --- a/dictsource/dict_phonemes +++ b/dictsource/dict_phonemes @@ -157,8 +157,8 @@ o: u u: y Y y: Y: * : b c C d dZ f g h j J k l m n -N n^ p r R s S s2 -t tS ts v z Z z2 +N n^ p r R R2 s S +s2 t tS ts v z Z z2 Dictionary it_dict @@ -321,3 +321,27 @@ f g h j J k l l# m m# n N n# N# n^ n^# p Q r R r# R2 s S t T tl# v x z + + +Dictionary la_dict + +@- a a: aI aU E e: EU +I i: O o: OI U u: y +y: + +* : b d f g h +j k l m n N p r +R s t w z + + +Dictionary sr_dict + +& @ @- @2 a A a: aI +aU E e e: E~ i I i: +l- o o: oU r- u U u: +y + +* b d dZ dZ; f g h +j k l l^ m n N n^ +p r R s S t tS ts +tS; v x z Z diff --git a/dictsource/hu_list b/dictsource/hu_list index 640b1203..9fa3a6e3 100644 --- a/dictsource/hu_list +++ b/dictsource/hu_list @@ -45,13 +45,23 @@ km kilo:me:tER mm milime:tER a.m An^n^i||m'int $dot +dr doktoR $dot gpu $abbrev +id idY:SEb: $dot ill illEdvE $dot +ifj ifjAb: $dot mta $abbrev pl pe:lda:ul $dot stb SAtYb:i $dot +ú.n u:JnEvEzEt: vö v'EZd||_'Yss2E +ii kEttY: $abbrev +iii ha:Rom $abbrev +iv ne:J $abbrev +vi hAt $abbrev +vii he:t $abbrev +viii n^olts $abbrev // Articles @@ -135,6 +145,7 @@ be $u ra $u re $u ik $u +as $u es $u os $u ós $u @@ -251,6 +262,9 @@ _. pont // Names -ricárd RiCArd +Engels ENgEls +Kéthly ke:thli +ricárd RiCARd richard RiCARd - +Szamuelly sAmuElli +Szamuely sAmuElli diff --git a/dictsource/hu_rules b/dictsource/hu_rules index bcf550c1..d7b7ac5c 100644 --- a/dictsource/hu_rules +++ b/dictsource/hu_rules @@ -21,6 +21,7 @@ cc ts: cs tS ccs tS: + cz ts anar) ch (i C hierar) ch (i C @@ -130,6 +131,7 @@ _minde) gy (ik J: .group k k k kk k: + _) köz kYz .group l l l @@ -143,7 +145,7 @@ _minde) gy (ik J: .group m m m - ko) mm (unis m + ko) mm (uni m .group n @@ -183,11 +185,11 @@ _minde) gy (ik J: qu kv .group r - r R - A) r (A * - C) r (A R - r (C R - rr R* + r R2 + A) r (A R2 + C) r (A R2 + r (C R2 + rr R2* .group s s S @@ -196,6 +198,7 @@ _minde) gy (ik J: hel) s (inki z ki) s (ebb SS +_munká) s S _o) slo slo: _o) sló slo: diff --git a/dictsource/it_list b/dictsource/it_list index 95c61f63..6d948d1e 100644 --- a/dictsource/it_list +++ b/dictsource/it_list @@ -29,9 +29,9 @@ _= ugwale _> kj,uza'angolo _? p'untointeRogat'ivo _@ ki'otS:ola -_[ ap'eRtakw'ad@-*a +_[ ap'eRtakw2'ad@-*a _\ bakslaS -_] kj,uzakw'ad@-*a +_] kj,uzakw2'ad@-*a _^ kap:utS:o __ 'undeRskoRe _` bakp@-*aIm @@ -47,8 +47,8 @@ _0 dz'eRo _1 'uno _2 d'ue _3 tR'e -_4 kw'at:Ro -_5 tS'inkwe +_4 kw2'at:Ro +_5 tS'inkw2e _6 s'ej _7 s'Et:e _8 'Ot:o @@ -57,16 +57,16 @@ _10 di'etSi _11 'unditSi _12 d'oditSi _13 t@-*'editSi -_14 kwat:'ORditSi -_15 kw'imditSi +_14 kw2at:'ORditSi +_15 kw2'imditSi _16 s'editSi _17 ditSas:'Et:e _18 ditS'Ot:o _19 ditSann'ove _2X v'ente _3X t@-*'enta -_4X kwaR'anta -_5X tSinkw'anta +_4X kw2aR'anta +_5X tSinkw2'anta _6X sess'anta _7X set:'anta _8X ot'anta @@ -348,6 +348,8 @@ facevano $u+ // If a letter has a "word" pronunciation which is different from its // "letter" name, then include the letter name here, with the letter // prefixed by a _ character. +_a a: +a a: $atend _e e: e e: $atend _i i: diff --git a/dictsource/it_rules b/dictsource/it_rules index f9ee8b5c..cbc238b0 100644 --- a/dictsource/it_rules +++ b/dictsource/it_rules @@ -214,8 +214,8 @@ .group q _) q(_ ku: - q kw - qu kw + q kw2 + qu kw2 .group r _) r(_ ER*e diff --git a/phsource/compile_report b/phsource/compile_report index c6beb6df..13134906 100644 --- a/phsource/compile_report +++ b/phsource/compile_report @@ -1,4 +1,4 @@ -35 phoneme tables +37 phoneme tables new total base 96 96 base2 24 114 @@ -19,11 +19,13 @@ hu 24 114 nl 26 117 pl 15 107 - sk 26 124 - cs 5 124 - hr 25 133 + sk 29 125 + cs 5 125 + hr 19 129 + sr 2 129 ru 36 124 it 12 114 + la 21 114 es 6 114 pt 28 131 pt_pt 20 131 @@ -104,8 +106,8 @@ 1 l^/j2u base 1 l^/_l^ base 1 l^/l^ base - 7 l/l base en af sk ru pt ro - 10 l/_l base en af de fr sk ru pt ro + 8 l/l base en af sk ru la pt ro + 11 l/_l base en af de fr sk ru la pt ro 1 l/l_ base 2 l/l@ base 1 l/L1_aL base @@ -126,10 +128,10 @@ 2 l/le base 1 l/L_eL_af af 2 l/li base - 3 l/l_long base fr ro + 4 l/l_long base fr la ro 2 l/lo base 2 l/lu base - 8 l/tl base en af fr sk ru pt ro + 9 l/tl base en af fr sk ru la pt ro 6 l/xl base 2 m/_m base ro 2 m/m_ base ro @@ -212,13 +214,13 @@ 2 ufric/ch base de 3 ufric/f base de ro 2 ufric/f_ base ro - 4 ufric/h_ base fi hi - 5 ufric/h@ base fi hi - 4 ufric/ha base fi hi - 4 ufric/he base fi hi - 4 ufric/hi base fi hi - 3 ufric/ho base hi - 3 ufric/hu base hi + 5 ufric/h_ base fi hi la + 6 ufric/h@ base fi hi la + 5 ufric/ha base fi hi la + 5 ufric/he base fi hi la + 5 ufric/hi base fi hi la + 4 ufric/ho base hi la + 4 ufric/hu base hi la 2 ufric/hu_fi fi 2 ufric/ll base is 3 ufric/s base es pt @@ -241,18 +243,18 @@ 1 ufric/x_hr hr 1 ustop/c base 5 ustop/k base en fr hi sw - 9 ustop/k_ base base2 en fi fr hi hu el sw - 12 ustop/ki base base2 en af fi fr hi hu is sw - 10 ustop/kl base base2 en fi fr hi hu el sw - 11 ustop/kr base base2 en fi fr hi hu el sw - 9 ustop/k_unasp base base2 fi hi hu el + 10 ustop/k_ base base2 en fi fr hi hu sk el sw + 13 ustop/ki base base2 en af fi fr hi hu sk is sw + 11 ustop/kl base base2 en fi fr hi hu sk el sw + 12 ustop/kr base base2 en fi fr hi hu sk el sw + 10 ustop/k_unasp base base2 fi hi hu sk el 2 ustop/p base hi 2 ustop/p_ base hi 1 ustop/percus10 base - 8 ustop/pl base base2 fi hi hu hr ro - 8 ustop/pr base base2 fi hi hu ro - 7 ustop/p_unasp base base2 fi hi hu hr ro - 6 ustop/p_unasp_ base2 fi hi hu hr ro + 9 ustop/pl base base2 fi hi hu sk la ro + 9 ustop/pr base base2 fi hi hu la ro + 8 ustop/p_unasp base base2 fi hi hu sk la ro + 7 ustop/p_unasp_ base2 fi hi hu sk la ro 3 ustop/t base en hi 6 ustop/t_ base en hi sk el 27 ustop/t_dnt base base2 en fi fr hi hu pl hr ru ro vi ++ @@ -297,16 +299,16 @@ 2 vdiph/aai_2 af cy 1 vdiph/aai_3 fi 1 vdiph/aau fi - 3 vdiph/aau_2 de nl zh_yue + 4 vdiph/aau_2 de nl la zh_yue 1 vdiph/aau_3 hi 1 vdiph/aau_4 vi 1 vdiph/ae fr_ca 1 vdiph/ae_2 en_n - 6 vdiph/ai base2 eo hr it pt vi + 7 vdiph/ai base2 eo sk hr it pt vi 3 vdiph/ai_2 en_us cy 1 vdiph/ai_3 no 1 vdiph/ai_4 af - 1 vdiph/ai_5 de + 2 vdiph/ai_5 de la 1 vdiph/ai_6 en_rp 5 vdiph/ai_7 en_sc is 1 vdiph/ai_en en @@ -321,11 +323,10 @@ 3 vdiph/eei_3 en_us en_rp sk 1 vdiph/eei_4 nl 3 vdiph/eeu pt vi zh_yue - 1 vdiph/eeu_2 pt_pt + 2 vdiph/eeu_2 la pt_pt 2 vdiph/eeu_3 en_n en_wm 1 vdiph/eey fi - 6 vdiph/ei base2 nl pt is vi zh_yue - 1 vdiph/ei_2 hr + 7 vdiph/ei base2 nl la pt is vi zh_yue 8 vdiph/eu base2 en cy eo nl sk pt vi 1 vdiph/eu_2 fi 2 vdiph/&i fi hi @@ -334,13 +335,13 @@ 3 vdiph/@i_3 en_wm ro zh_yue 1 vdiph/&i_3 vi 1 vdiph/@i_4 vi - 2 vdiph/ii hr ro + 1 vdiph/ii ro 1 vdiph/i#i ro - 5 vdiph/oi base2 en_wm de it vi + 6 vdiph/oi base2 en_wm de it la vi 1 vdiph/oi_2 af 10 vdiph/ooi en en_n en_us en_rp cy eo fi no zh_yue 1 vdiph/ooi_2 af - 2 vdiph/ooi_3 en_wm hr + 1 vdiph/ooi_3 en_wm 2 vdiph/ou fi zh_yue 2 vdiph/ou_2 sk ro 2 vdiph/ou_3 is @@ -352,7 +353,6 @@ 1 vdiph/u-i vi 1 vdiph/ui_2 af 2 vdiph/ui_3 cy - 1 vdiph/ui_4 hr 1 vdiph/Vi vi 1 vdiph/Vu af 1 vdiph/Vu_2 en_wm @@ -417,12 +417,12 @@ 1 vowel/3_2 en_n 1 vowel/3_3 en_rp 3 vowel/3_en en en_wm af - 2 vowel/@_4 nl hr + 1 vowel/@_4 nl 2 vowel/8_2 en_us sv 1 vowel/8_3 zh_yue - 11 vowel/a en_n cy de hu nl pl sk hr + 13 vowel/a en_n cy de hu nl pl sk hr sr la 5 vowel/a# base2 en_sc it pt - 7 vowel/a_2 base2 eo it pt pt_pt ro vi + 8 vowel/a_2 base2 eo it la pt pt_pt ro vi 4 vowel/a#_2 hr sv is sw 6 vowel/a_3 en_sc cs is 12 vowel/a#_3 en en_n en_us en_wm de hi ru pt_pt vi zh_yue @@ -438,14 +438,14 @@ 1 vowel/aa_7 nl 4 vowel/a_en en fr 1 vowel/@_bck hi - 14 vowel/e base2 en en_n af cy eo fr hu hr it pt pt_pt ++ + 15 vowel/e base2 en en_n af cy eo fr hu hr it la pt ++ 2 vowel/e# en_sc 6 vowel/e_2 en_sc de hi sv no 1 vowel/e_3 hu 1 vowel/e_5 en_sc 3 vowel/ee fr pl sv 2 vowel/e_e en_sc is - 7 vowel/ee_1 base2 en en_n pl sv no zh_yue + 8 vowel/ee_1 base2 en en_n pl la sv no zh_yue 3 vowel/ee_2 en cy nl 1 vowel/ee#_2 sv 3 vowel/ee_3 af pt vi @@ -456,7 +456,7 @@ 1 vowel/@_hgh no 19 vowel/i base2 en_n en_rp en_wm cy eo fr hu pl it pt pt_pt ++ 1 vowel/i# cy - 3 vowel/i_2 de nl sv + 4 vowel/i_2 de nl la sv 2 vowel/i_3 af sk 3 vowel/i_4 fi hu is 5 vowel/i_5 en_sc @@ -466,11 +466,12 @@ 2 vowel/i_fnt hi 10 vowel/ii en_wm cy de fr_ca nl is zh_yue 3 vowel/ii# cy pl ru + 1 vowel/ii_2 la 7 vowel/ii_3 en_rp fi hi sk hr sv no 2 vowel/ii_4 en_rp 6 vowel/ii_en en en_n 5 vowel/@_low hi ro no - 10 vowel/o base2 en en_wm de fr hi it pt_pt sv + 11 vowel/o base2 en en_wm de fr hi it la pt_pt sv 4 vowel/o_2 cy hi hu no 2 vowel/o-_2 en_n en_wm 2 vowel/o_3 en_sc @@ -482,11 +483,11 @@ 1 vowel/oe_2 no 1 vowel/oe_4 sv 2 vowel/o_mid fr hu - 8 vowel/oo en_sc de eo es el sv no zh_yue + 9 vowel/oo en_sc de eo la es el sv no zh_yue 11 vowel/oo_1 en_n en_rp en_wm af fi sk hr vi 3 vowel/oo_2 en_sc cy cs 1 vowel/oo_3 af - 2 vowel/oo_4 hi pl + 3 vowel/oo_4 hi pl it 1 vowel/oo_5 is 6 vowel/oo_en en en_n en_rp 2 vowelr/aa_r en_sc @@ -495,7 +496,7 @@ 4 vowelr/r-voc hi sk hr 2 vowelr/V3_r en en_sc 1 vowelr/V_r en - 7 vowel/u en_n cy de eo fr cs + 8 vowel/u en_n cy de eo fr cs la 5 vowel/u# en en_sc 4 vowel/u_2 fi sk hr ro 1 vowel/u#_2 sv @@ -508,7 +509,7 @@ 1 vowel/u_7 vi 16 vowel/u_bck base2 cy fi fr_ca hi hu nl pl sk hr it pt ++ 2 vowel/uu en en_wm - 2 vowel/uu_2 base2 de + 3 vowel/uu_2 base2 de la 1 vowel/uu_3 af 2 vowel/uu_4 fi sv 7 vowel/uu_bck fr_ca hi hu pt no zh_yue @@ -528,7 +529,7 @@ 1 vowel/yy fr_ca 1 vowel/yy_2 no 1 vowel/yy_3 sv - 3 vowel/yy_4 de hu is + 5 vowel/yy_4 de hu la is 1 vwl_af/@ af 1 vwl_af/I af 2 vwl_af/r@ af @@ -606,7 +607,7 @@ 1 w/wa base 1 w/we base 3 w/wi base vi zh_yue - 10 w/wi2 en en_n en_us en_sc en_rp en_wm de nl sv no + 11 w/wi2 en en_n en_us en_sc en_rp en_wm de nl la sv no 1 w/wo base 1 w/wu base 5 w/xw base diff --git a/phsource/ph_croatian b/phsource/ph_croatian index 058c938f..5e1907af 100644 --- a/phsource/ph_croatian +++ b/phsource/ph_croatian @@ -10,12 +10,6 @@ phoneme @2 // Schwa (raised) length 140 endphoneme -phoneme @3 // Schwa (raised) - vowel starttype (@) endtype (@) - formants vowel/@_4 - length 140 -endphoneme - phoneme a vowel starttype (a) endtype (a) @@ -84,10 +78,10 @@ phoneme u reduceto U 4 endphoneme + phoneme U vowel starttype (u) endtype (u) length 140 -// formants vowel/uu_bck formants vowel/u_2 endphoneme @@ -99,48 +93,6 @@ phoneme aI endphoneme -phoneme eI - vowel starttype (e) endtype (i) - length 250 - formants vdiph/ei_2 - linkout ; -endphoneme - - -phoneme iI - vowel starttype (i) endtype (i) - length 250 - formants vdiph/ii - linkout ; -endphoneme - - -phoneme oI - vowel starttype (o) endtype (i) - length 250 - formants vdiph/ooi_3 - linkout ; -endphoneme - - -phoneme uI - vowel starttype (u) endtype (i) - length 250 - formants vdiph/ui_4 - linkout ; -endphoneme - - -phoneme p - vls blb stop - vowelin f1=0 f2=1000 -50 -100 f3=-200 80 - vowelout f1=0 f2=1000 -500 -350 f3=-300 80 rms=30 - lengthmod 2 - wave ustop/p_unasp%120 - before _ ustop/p_unasp_%80 - before l ustop/pl - switchvoicing b -endphoneme phoneme t // dental variant of /t/ diff --git a/phsource/ph_hungarian b/phsource/ph_hungarian index d14db0d4..2c34380b 100644 --- a/phsource/ph_hungarian +++ b/phsource/ph_hungarian @@ -89,7 +89,7 @@ endphoneme phoneme Y: vowel starttype (@) endtype (@) - length 240 + length 270 formants vowel/y# endphoneme diff --git a/phsource/ph_italian b/phsource/ph_italian index 2eca8488..d7be7903 100644 --- a/phsource/ph_italian +++ b/phsource/ph_italian @@ -52,7 +52,7 @@ endphoneme phoneme O vowel starttype (o) endtype (o) length 170 -// formants vowel/oo_4 + formants vowel/oo_4 // formants vowel/0 reduceto o 4 // [O] only in stressed syllables endphoneme diff --git a/phsource/ph_slovak b/phsource/ph_slovak index 40873b4c..86db3d2e 100644 --- a/phsource/ph_slovak +++ b/phsource/ph_slovak @@ -87,6 +87,13 @@ phoneme oU formants vdiph/ou_2 endphoneme + +phoneme aI + vowel starttype (a) endtype (i) + length 270 + formants vdiph/ai +endphoneme + phoneme eI vowel starttype (e) endtype (i) length 260 @@ -176,4 +183,29 @@ phoneme t switchvoicing d endphoneme +phoneme p + vls blb stop + vowelin f1=0 f2=1000 -50 -100 f3=-200 80 + vowelout f1=0 f2=1000 -500 -350 f3=-300 80 rms=30 + lengthmod 2 + wave ustop/p_unasp%120 + before _ ustop/p_unasp_%80 + before l ustop/pl + switchvoicing b +endphoneme + + +phoneme k + vls vel stop + vowelin f1=0 f2=2300 200 400 f3=-100 80 + vowelout f1=0 f2=2300 300 400 f3=-100 80 rms=20 + lengthmod 2 + wave ustop/k_unasp%60 // weaker + before _ ustop/k_ + before r ustop/kr + before l ustop/kl + before (i) ustop/ki + switchvoicing g +endphoneme + diff --git a/phsource/phonemes b/phsource/phonemes index 2a4f3bf2..c7258866 100644 --- a/phsource/phonemes +++ b/phsource/phonemes @@ -1188,6 +1188,9 @@ include ph_czech phonemetable hr sk include ph_croatian +phonemetable sr hr +include ph_serbian + phonemetable ru base include ph_russian @@ -1195,6 +1198,9 @@ include ph_russian phonemetable it base2 include ph_italian +phonemetable la base +include ph_latin + phonemetable es base2 include ph_spanish diff --git a/src/menus.cpp b/src/menus.cpp index e744cd15..5bbea790 100755 --- a/src/menus.cpp +++ b/src/menus.cpp @@ -129,7 +129,7 @@ wxMenuBar *MakeMenu(int type) menu_bar->Append(voice_menu, _T("&Voice")); menu_bar->Append(option_menu, _T("&Options")); menu_bar->Append(tools_menu, _T("&Tools")); - menu_bar->Append(data_menu, _T("&Data")); + menu_bar->Append(data_menu, _T("&Compile")); menu_bar->Append(help_menu, _T("&Help")); return(menu_bar); diff --git a/src/readclause.cpp b/src/readclause.cpp index 195baf17..197ce4a0 100644 --- a/src/readclause.cpp +++ b/src/readclause.cpp @@ -239,8 +239,11 @@ static int GetC(void) int c; int c1; int c2; + int cbuf[4]; + int ix; int n_bytes; unsigned char m; + static int ungot2 = 0; static const unsigned char mask[4] = {0xff,0x1f,0x0f,0x07}; static const unsigned char mask2[4] = {0,0x80,0x20,0x30}; @@ -250,7 +253,16 @@ static int GetC(void) return(c1); } - c1 = GetC_get(); + if(ungot2 != 0) + { + c1 = ungot2; + ungot2 = 0; + } + else + { + c1 = GetC_get(); + } + if(option_multibyte == espeakCHARS_WCHAR) { count_characters++; @@ -271,14 +283,13 @@ static int GetC(void) if(((c1 & 0xf8) == 0xf0) && ((c1 & 0x0f) <= 4)) n_bytes = 3; - if(n_bytes > 0) + if((ix = n_bytes) > 0) { - c = c1 & mask[n_bytes]; - m = mask2[n_bytes]; - while(n_bytes > 0) + c = c1 & mask[ix]; + m = mask2[ix]; + while(ix > 0) { - c2 = GetC_get(); - if(c2 == 0) + if((c2 = cbuf[ix] = GetC_get()) == 0) { if(option_multibyte==espeakCHARS_AUTO) option_multibyte=espeakCHARS_8BIT; // change "auto" option to "no" @@ -288,14 +299,17 @@ static int GetC(void) if((c2 & 0xc0) != 0x80) { + // This is not UTF8. Change to 8-bit characterset. + if(n_bytes > 1) + ungot2 = cbuf[2]; GetC_unget(c2); break; } m = 0x80; c = (c << 6) + (c2 & 0x3f); - n_bytes--; + ix--; } - if(n_bytes == 0) + if(ix == 0) { count_characters++; return(c); diff --git a/src/spect.cpp b/src/spect.cpp index 0a379023..d723f432 100755 --- a/src/spect.cpp +++ b/src/spect.cpp @@ -377,6 +377,21 @@ void SpectFrame::ToggleMarker(int n) } +void SpectFrame::ApplyVoiceMods() +{//============================== + // apply the modifications to the formants which are defined in the current voice + int pk; + + for(pk=0; pkfreq2[pk])/256; + peaks[pk].pkheight = (peaks[pk].pkheight * voice->height2[pk])/256; + peaks[pk].pkwidth = (peaks[pk].pkwidth * voice->width2[pk])/256; + peaks[pk].pkright = (peaks[pk].pkright * voice->width2[pk])/256; + } +} + + double SpectFrame::GetRms(int seq_amplitude) {//========================================= diff --git a/src/spect.h b/src/spect.h index 7f005bae..95aed01e 100755 --- a/src/spect.h +++ b/src/spect.h @@ -98,6 +98,7 @@ public: void ZeroPeaks(); void CopyPeaks(SpectFrame *sf); void ToggleMarker(int n); + void ApplyVoiceMods(); void MakeWave(int peaks, PitchEnvelope &pitch, int amplitude, int duration); void MakeHtab(int numh, int *htab, int pitch); diff --git a/src/spectdisplay.cpp b/src/spectdisplay.cpp index 4229a66a..6cd44b03 100755 --- a/src/spectdisplay.cpp +++ b/src/spectdisplay.cpp @@ -468,7 +468,7 @@ void SpectDisplay::OnMenu(wxCommandEvent& event) int code; wxKeyEvent keyevent; SpectFrame *sf; - static int key[] = {0x1044,0x3044,0x104e,0x1047,0x105a,0x1051,0x3051,WXK_F1,WXK_F2,0x1049}; + static int key[] = {0x1044,0x3044,0x104e,0x1047,0x105a,0x1051,0x3051,WXK_F1,WXK_F2,0x1049,WXK_F10}; id = event.GetId(); @@ -773,6 +773,11 @@ void SpectDisplay::OnKey(wxKeyEvent& event) display = 2; break; + case WXK_F10: + sf->ApplyVoiceMods(); + display = 2; + break; + case WXK_F2: // make and play sequence ReadDialogValues(); @@ -1002,6 +1007,7 @@ void InitSpectrumDisplay() menu_spectdisplay->Append(207,_T("Hide Interpolation CTRL+SHIFT+Q")); menu_spectdisplay->Append(205,_T("Zero Peaks CTRL+Z")); menu_spectdisplay->Append(210,_T("Toggle Marker"),menu_markers); + menu_spectdisplay->Append(211,_T("Apply the formant adjustments from current voice")); menu_spectdisplay->AppendSeparator(); menu_spectdisplay->Append(208,_T("Play Selected Frame F1")); menu_spectdisplay->Append(209,_T("Play All F2")); diff --git a/src/synth_mbrola.cpp b/src/synth_mbrola.cpp index a1faea4f..794c1479 100755 --- a/src/synth_mbrola.cpp +++ b/src/synth_mbrola.cpp @@ -196,6 +196,7 @@ int GetMbrName(PHONEME_LIST *plist, PHONEME_TAB *ph, PHONEME_TAB *ph_prev, PHONE // bit 0 skip the next phoneme // bit 1 match this and Previous phoneme // bit 2 only at the start of a word + // bit 4 don't match two phonemes across a word boundary pr = mbrola_tab; while(pr->name != 0) @@ -205,9 +206,17 @@ int GetMbrName(PHONEME_LIST *plist, PHONEME_TAB *ph, PHONEME_TAB *ph_prev, PHONE if(pr->next_phoneme == 0) found = 1; else + if((pr->next_phoneme == ':') && (plist->synthflags & SFLAG_LENGTHEN)) + { + found = 1; + } + else { if(pr->control & 2) other_ph = ph_prev; + else + if((pr->control & 8) && ((plist+1)->newword)) + other_ph = phoneme_tab[phPAUSE]; // don't match the next phoneme over a word boundary else other_ph = ph_next; diff --git a/src/synthdata.cpp b/src/synthdata.cpp index 28b2317b..5f1249dd 100755 --- a/src/synthdata.cpp +++ b/src/synthdata.cpp @@ -35,7 +35,7 @@ #include "translate.h" #include "wave.h" -const char *version_string = "1.26.04 13.Jun.07"; +const char *version_string = "1.26.05 14.Jun.07"; const int version_phdata = 0x012601; int option_device_number = -1; diff --git a/src/tr_languages.cpp b/src/tr_languages.cpp index 99f62f02..dfc3f69e 100644 --- a/src/tr_languages.cpp +++ b/src/tr_languages.cpp @@ -271,6 +271,7 @@ Translator *SelectTranslator(const char *name) case L('h','r'): // Croatian + case L('s','r'): // Serbian { static const wchar_t replace_chars_hr[] = {0x430,0x431,0x446,0x45b,0x447,0x434,0x452,0x45f, @@ -389,6 +390,10 @@ Translator *SelectTranslator(const char *name) tr = new Translator(); tr->charset_a0 = charsets[4]; // ISO-8859-4, includes a,e,i,o,u-macron tr->langopts.stress_rule = 2; + tr->langopts.stress_flags = 0x21; + tr->langopts.unstressed_wd1 = 0; + tr->langopts.unstressed_wd2 = 2; + tr->langopts.param[LOPT_DIERESES] = 1; } break; diff --git a/src/translate.cpp b/src/translate.cpp index 5e3638d0..4afd3d2b 100755 --- a/src/translate.cpp +++ b/src/translate.cpp @@ -1601,6 +1601,7 @@ void *Translator::TranslateClause(FILE *f_text, const void *vp_input, int *tone_ int dict_flags; // returned from dictionary lookup int word_flags; // set here int embedded_count = 0; + int letter_count = 0; char *word; char *p; int j, k; @@ -1854,6 +1855,8 @@ if((c == '/') && (langopts.testing & 2) && isdigit(next_in) && IsAlpha(prev_out) { if(!IsAlpha(prev_out) || (langopts.ideographs && (c >= 0x3000))) { + letter_count = 0; + if((prev_out != ' ') && (prev_out != '\'')) { // start of word, insert space if not one there already @@ -1875,6 +1878,8 @@ if((c == '/') && (langopts.testing & 2) && isdigit(next_in) && IsAlpha(prev_out) } } + letter_count++; + if(iswupper(c)) { c = towlower(c); @@ -1909,7 +1914,7 @@ if((c == '/') && (langopts.testing & 2) && isdigit(next_in) && IsAlpha(prev_out) source_index = prev_source_index; // unget } #endif - if((all_upper_case) && ((ix - words[word_count].start) > 1)) + if((all_upper_case) && (letter_count > 2)) { if((c == 's') && (next_in==' ')) {