Mbrola translations, option to not match across a word boundary. Mbrola translations, allow check of lengthen indicator [:]. espeakedit, add operation to apply a voice's formants modifications to a keyframe. git-svn-id: https://espeak.svn.sourceforge.net/svnroot/espeak/trunk@47 d46cf337-b52f-0410-862d-fd96e6ae7743master
| @@ -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: | |||
| * : <h> 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 | |||
| @@ -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 | |||
| @@ -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: | |||
| @@ -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: | |||
| @@ -214,8 +214,8 @@ | |||
| .group q | |||
| _) q(_ ku: | |||
| q kw | |||
| qu kw | |||
| q kw2 | |||
| qu kw2 | |||
| .group r | |||
| _) r(_ ER*e | |||
| @@ -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 | |||
| @@ -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/ | |||
| @@ -89,7 +89,7 @@ endphoneme | |||
| phoneme Y: | |||
| vowel starttype (@) endtype (@) | |||
| length 240 | |||
| length 270 | |||
| formants vowel/y# | |||
| endphoneme | |||
| @@ -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 | |||
| @@ -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 | |||
| @@ -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 | |||
| @@ -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); | |||
| @@ -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); | |||
| @@ -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; pk<N_PEAKS; pk++) | |||
| { | |||
| peaks[pk].pkfreq = (peaks[pk].pkfreq * voice->freq2[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) | |||
| {//========================================= | |||
| @@ -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); | |||
| @@ -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")); | |||
| @@ -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; | |||
| @@ -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; | |||
| @@ -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; | |||
| @@ -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==' ')) | |||
| { | |||