diff --git a/dictsource/dict_phonemes b/dictsource/dict_phonemes index 235a534f..b3239c04 100644 --- a/dictsource/dict_phonemes +++ b/dictsource/dict_phonemes @@ -68,26 +68,22 @@ Dictionary en_dict 0 3 3: @ @- @2 @5 @L a a2 A: A@ aa aI aI@ aU -aU@ E e@ eI I i I2 i: -i@ IR O O: o: O@ o@ OI -oU O~ U u: U@ V VR +aU@ E e@ eI I I2 i: i@ +IR O O: o: O@ o@ OI oU +O~ U u: U@ V VR : ; b C d D dZ f -g g- h j k l L m -n N p Q r r- s S -t T t2 tS v w x z -Z +g h j k l m n N +p Q r r- s S t T +t2 tS v w x z Z Dictionary eo_dict -@- a aI aU e eI eU i -o OI u uI +@- a aI aU e i o u -* b d dZ f g h j -k l m n p r R s -S t T tS ts v w x -z Z +* b d k l m n p +r R s t ts v z Z Dictionary es_dict @@ -346,3 +342,21 @@ I o r- u k k^ l l^ m n n^ p r R s S t tS ts v x z Z + + +Dictionary zh_dict + + + +Dictionary zhh_dict + +&? 0 0? @ @? @r @u A +A? E E~ i i&? i. i0 i; +i? i@ i@? i[ iA iA? iE iE~ +io io? iu i~ o u u&? u? +u@ u@? uA uA? uE uE~ ui u~ +y y? y@ y@? ya y~ + +c; f h k kh l m n +N p ph s s. t tc; tc; +th ts ts. ts. tsh v z. diff --git a/dictsource/sv_list b/dictsource/sv_list index 8e184059..3054b0fe 100755 --- a/dictsource/sv_list +++ b/dictsource/sv_list @@ -16,10 +16,10 @@ d de: e e: f Ef g ge: -h hO: +h ho: i i: j ji: -k kO: +k ko: l El m Em n En @@ -77,6 +77,9 @@ _0M3 bIlj'u:nER _1M3 bIlj'u:n _dpt p'8Nkt +(1 : a) f'Ws.ta + + // abbreviations //************** diff --git a/phsource/compile_report b/phsource/compile_report index 9e02f69d..9e6c4a19 100644 --- a/phsource/compile_report +++ b/phsource/compile_report @@ -1,4 +1,4 @@ -40 phoneme tables +42 phoneme tables new total base 96 96 base2 24 115 @@ -32,608 +32,1753 @@ pt_pt 20 131 ro 36 139 el 8 115 - grc 7 120 + grc 12 120 sv 25 118 no 28 122 is 32 121 vi 42 134 zhy 40 129 + zh 60 144 + zhh 38 175 sw 14 105 en_wi 30 144 - 3 b/b base hi ro - 2 b/b_ base hi - 2 b/b@ base hi - 2 b/b@2 base hi - 2 b/ba base hi - 2 b/be base hi - 3 b/bi base hi ro - 2 b/bo base hi - 2 b/bu base hi - 2 b/xb base hi - 15 d/d base base2 fi hi hu pl hr ru ro el sw - 15 d/d_ base base2 fi hi hu pl hr ru ro el sw - 16 d/dr base base2 fi hi hu pl hr ru ro el sw - 1 d/tap ro - 2 d/tap1 base - 2 d/tap2 base - 2 d/tap3 base - 1 d/tap_i ro - 13 d/xd base base2 fi hi hu pl hr ru ro el sw - 2 d/xd_pzd pl ru - 1 d/x_tap base - 6 dzh/dzh base hi mk ru - 6 dzh/dzh_ base hi mk ru - 2 dzh/dz_pzd base hi - 2 dzh/dz_pzd_ base hi - 6 dzh/xdzh base hi mk ru - 2 dzh/xdz_pzd base hi - 1 envelope/p_512 vi - 4 envelope/p_fall vi zhy - 1 envelope/p_fallrise vi - 3 envelope/p_level vi zhy - 3 envelope/p_rise vi zhy - 1 envelope/vi_5 vi - 1 envelope/vi_5amp vi - 1 envelope/vi_6 vi - 1 envelope/vi_6amp vi - 1 g2/g base - 1 g2/g_ base - 2 g2/xg base hi - 4 g/g base cy hi es - 4 g/g_ base cy hi es - 3 g/xg base cy es - 1 j2/_j2 base - 1 j2/j2@ base - 1 j2/j2a base - 1 j2/j2e base - 1 j2/j2i base - 1 j2/j2o base - 1 j2/j2u base - 1 j2/xj2 base - 1 j/_j base - 1 j/j_ base - 1 j/j@ base - 1 j/ja base - 1 j/je base - 1 j/ji base - 1 j/jo base - 1 j/_j_short de - 1 j/ju base - 6 j/xj base - 1 l^/j2@ base - 1 l^/j2a base - 1 l^/j2e base - 1 l^/j2i base - 1 l^/j2o base - 1 l^/j2u base - 1 l^/_l^ base - 1 l^/l^ base - 10 l/l base en af hu sk ru la pt ro en_wi - 12 l/_l base en af de hu sk ru la pt ro en_wi - 1 l/l_ base - 2 l/l@ base - 1 l/L1_aL base - 1 l/L1_eL base - 1 l/L1_iL base - 1 l/L1_@L base - 1 l/L1_oL base - 1 l/L1_uL base - 1 l/L2_aL base - 1 l/L2_eL base - 1 l/L2_iL base - 2 l/L2_@L base en_sc - 2 l/L2_oL base en_sc - 5 l/L2_uL base en en_n en_us en_rp - 2 l/l_3 de fr - 2 l/la base - 2 l/le base - 2 l/L_eL_af af - 2 l/li base - 4 l/l_long base fr la ro - 2 l/lo base - 2 l/lu base - 10 l/tl base en af hu sk ru la pt ro en_wi - 6 l/xl base - 3 m/_m base ru ro - 3 m/m_ base ru ro - 1 m/m@ base - 1 m/m#_ is - 1 m/ma base - 1 m/me base - 1 m/mi base - 3 m/mj base ru ro - 1 m/mo base - 1 m/mu base - 1 n^/_n^ base - 1 n^/n^_ base - 1 n^/n^@ base - 1 n^/n^#_ is - 4 n/_n base ro - 2 n/n_ base ro - 1 n/n@ base - 1 n/n#_ is - 1 n^/n^a base - 1 n/na base - 1 n^/n^e base - 1 n/ne base - 1 n^/n^i base - 1 n/ni base - 1 nn/inn base - 4 n/nj base ro - 2 nn/_nn base en - 2 nn/nn_ base en - 1 nn/nn@ base - 1 nn/nn#_ is - 1 nn/nna base - 1 nn/nne base - 1 nn/nni base - 1 nn/nnj base - 1 nn/nno base - 1 nn/nnu base - 1 n^/n^o base - 1 n/no base - 2 n/_nr base - 1 n/nr_ base - 1 n^/n^u base - 1 n/nu base - 1 r2/_r2 base - 1 r2/r2@ base - 1 r2/r2a base - 1 r2/r2e base - 1 r2/r2i base - 1 r2/r2o base - 1 r2/r2u base - 4 r3/r_ base af fr ru - 1 r3/r_@ base - 1 r3/r#_ is - 1 r3/r_a base - 1 r3/r_e base - 1 r3/r_i base - 2 r3/r_n base ru - 1 r3/r_o base - 11 r3/r_trill base af cy nl sk pt - 2 r3/r_trill2 base hr - 2 r3/r_trill2.wav base hr - 8 r3/r_trill3.wav base af cy nl - 3 r3/r_trill.wav base sk pt - 1 r3/r_u base - 18 r3/rx base af fr_ca ru pt_pt ro is - 2 r3/rz_cs sk - 2 r3/@tap base - 2 r3/@tap_i base - 5 r/r base en_sc de pt_pt - 3 r/_r base en_sc pt_pt - 9 r/r_ base en_sc de fi nl ru pt_pt ro sw - 1 r/r@ base - 1 r/ra base - 1 r/re base - 1 r/ri base - 1 r/ro base - 14 r/rr base af de fi nl ru ro sw - 1 r/ru base - 9 r/tr base en_sc pt_pt - 30 r/trr base af de fi nl ru ro sv sw - 11 r/xr base - 2 ufric/ch base de - 4 ufric/f base de ro grc - 2 ufric/f_ base ro - 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 - 11 ufric/s_ base fi fr hu es pt ro - 15 ufric/s! base fi hu es pt - 2 ufric/s_continue fi hu - 2 ufric/sh base pt_pt - 2 ufric/sh_ base pt_pt - 2 ufric/sh_pzd base ro - 3 ufric/sh_pzd_ base - 2 ufric/sh_rfx base - 3 ufric/s_pzd base ro - 2 ufric/s_pzd_ base - 1 ufric/sx_sv sv - 1 ufric/th base - 1 ufric/th_ base - 1 ufric/tl# is - 2 ufric/x base vi - 4 ufric/x2 af nl pt - 1 ufric/x_hr hr - 1 ustop/c base - 6 ustop/k base en fr hi zhy sw - 10 ustop/k_ base base2 en fi fr hi hu sk el sw - 15 ustop/ki base base2 en af fi fr hi hu sk mk is zhy ++ - 12 ustop/kl base base2 en fi fr hi hu sk el zhy sw - 14 ustop/kr base base2 en fi fr hi hu sk el zhy sw - 11 ustop/k_unasp base base2 fi hi hu sk el zhy - 4 ustop/p base fr hi zhy - 3 ustop/p_ base fr hi - 1 ustop/percus10 base - 10 ustop/pl base base2 fi fr hi hu sk la ro - 9 ustop/pr base base2 fi hi hu la ro - 9 ustop/p_unasp base base2 fi fr hi hu sk la ro - 7 ustop/p_unasp_ base2 fi hi hu sk la ro - 7 ustop/t base en fr hi zhy - 8 ustop/t_ base en fr hi sk el - 22 ustop/t_dnt base base2 en fi hi hu pl hr ru ro vi sw - 1 ustop/t_dnt2 vi - 2 ustop/t_hi hi - 4 ustop/t_pzd pl ru - 7 ustop/tr base en hi ru - 8 ustop/ts base2 de eo hu pl ru ro zhy - 2 ustop/tsh base zhy - 2 ustop/tsh_ base zhy - 3 ustop/t_short hi sk el - 8 ustop/ts_pzd base hi ru - 2 ustop/ts_pzd_ hi hu - 2 ustop/ts_pzd2 hi hu - 3 vdiph/0i pt grc vi - 3 vdiph/0i_2 en_sc no en_wi - 3 vdiph2/e@ en_sc en_wi - 1 vdiph2/ea ro - 1 vdiph2/ei_3 en_wm - 1 vdiph2/eo ro - 1 vdiph2/e[u ro - 1 vdiph2/i@ en_n - 1 vdiph2/i@_2 en_wm - 2 vdiph2/ie fi en_wi - 1 vdiph2/ii@ en - 1 vdiph2/ii@_3 vi - 3 vdiph2/iu base2 vi zhy - 1 vdiph2/iu_2 fi - 1 vdiph2/iu_3 af - 2 vdiph2/iu_4 cy - 1 vdiph2/iy fi - 1 vdiph2/o@ af - 1 vdiph2/oa ro - 2 vdiph2/o_oo is en_wi - 1 vdiph2/u-@ vi - 1 vdiph2/u#@ en_sc - 1 vdiph2/uo fi - 4 vdiph2/uu@ en en_n en_wm vi - 1 vdiph2/y#@ af - 1 vdiph2/yu nl - 1 vdiph2/y-y# fi - 1 vdiph/8u en_us - 1 vdiph/aai zhy - 2 vdiph/aai_2 af cy - 1 vdiph/aai_3 fi - 1 vdiph/aau fi - 5 vdiph/aau_2 de nl la zhy en_wi - 1 vdiph/aau_3 hi - 1 vdiph/aau_4 vi - 1 vdiph/ae fr_ca - 1 vdiph/ae_2 en_n - 8 vdiph/ai base2 eo sk hr it pt vi en_wi - 2 vdiph/ai_2 cy - 1 vdiph/ai_3 no - 1 vdiph/ai_4 af - 2 vdiph/ai_5 de la - 1 vdiph/ai_6 en_rp - 5 vdiph/ai_7 en_sc is - 1 vdiph/ai_en2 en - 3 vdiph/au en af vi - 1 vdiph/au# en_sc - 2 vdiph/au_2 en_us zhy - 1 vdiph/au_3 en_rp - 6 vdiph/au_4 base2 cy eo sk it is - 1 vdiph/ee-e hi - 5 vdiph/eei base2 en de nl vi - 3 vdiph/eei_2 en_us eo fi - 2 vdiph/eei_3 en_rp sk - 4 vdiph/eeu pt grc vi zhy - 2 vdiph/eeu_2 la pt_pt - 2 vdiph/eeu_3 en_n en_wm - 1 vdiph/eey fi - 7 vdiph/ei base2 nl la pt is vi zhy - 8 vdiph/eu base2 en cy eo nl sk pt vi - 1 vdiph/eu_2 fi - 2 vdiph/&i fi hi - 3 vdiph/@i_2 af cy - 1 vdiph/i@_2 af - 3 vdiph/@i_3 en_wm ro zhy - 1 vdiph/&i_3 vi - 1 vdiph/@i_4 vi - 1 vdiph/ii ro - 1 vdiph/i#i ro - 6 vdiph/oi base2 en_wm de it la vi - 1 vdiph/oi_2 af - 9 vdiph/ooi en en_n en_us cy eo fi no zhy - 1 vdiph/ooi_2 af - 2 vdiph/ooi_3 en_rp en_wm - 2 vdiph/oou cs grc - 2 vdiph/ou fi zhy - 2 vdiph/ou_2 sk ro - 2 vdiph/ou_3 is - 1 vdiph/@u en_wm - 1 vdiph/@u_2 en_rp - 1 vdiph/@u_3 ro - 3 vdiph/@u_en en vi - 6 vdiph/ui base2 en eo fi vi zhy - 1 vdiph/u-i vi - 1 vdiph/ui_2 af - 2 vdiph/ui_3 cy - 1 vdiph/Vi vi - 1 vdiph/Vu af - 1 vdiph/Vu_2 en_wm - 1 vdiph/Vu_3 nl - 2 vdiph/&y fi nl - 3 vdiph/yi fi grc no - 1 vdiph/y#i fi - 1 vdiph/y#i_2 is - 1 vdiph/yi_fr fr - 1 vdiph/y#y fi - 2 vdiph/y#y_2 af zhy - 1 vdiph/y#y_3 nl - 1 vnasal/aa_n en - 2 vnasal/aa_n3 af fr - 1 vnasal/a#_n pt - 2 vnasal/a#u_n pt pt_pt - 2 vnasal/ee_n en fr_ca - 3 vnasal/ee_n2 hi pl pt_pt - 2 vnasal/e_n af pt - 1 vnasal/i_n pt - 1 vnasal/m- sw - 1 vnasal/n- sw - 1 vnasal/nn- sw - 1 vnasal/oi_n pt - 2 vnasal/o_n hi pt - 1 vnasal/o_n2 af - 1 vnasal/o_n3 fr - 1 vnasal/oo_n en - 2 vnasal/oo_n2 hi pl - 2 vnasal/u_n hi pt - 3 vnasal/W_n en fr - 1 voc/bh base - 2 voc/dh base es - 2 voc/dh_ base es - 2 voc/Q base - 4 voc/Q_ base nl pt - 2 voc/Q_less nl pt - 6 voc/v base fi hi nl ro is - 9 voc/v_ base fi fr hi nl ro is - 4 vocw/dh base es - 2 vocw/Q base - 3 vocw/Q_ base nl - 1 vocw/Q2 nl - 8 vocw/v base fr ro - 4 vocw/zh base ro - 2 vocw/zh_rfx base - 3 voc/z base fr ro - 3 voc/z_ base fr ro - 4 voc/zh base sk ro - 3 voc/zh_ base ro - 1 voc/zh_2 sk - 2 voc/z_pzd base - 2 voc/z_pzd_ base - 13 vowel/@ base en en_us en_rp cy hi hr - 1 vowel/@- base - 4 vowel/& en_rp fi hi sv - 4 vowel/0 base2 en hi pt - 3 vowel/0_2 en_n pt_pt sw - 4 vowel/0_3 en_us en_sc en_rp hu - 2 vowel/@_2 fr - 2 vowel/&_2 en_us - 6 vowel/@_3 en_sc de hi - 1 vowel/3_2 en_n - 1 vowel/3_3 en_rp - 3 vowel/3_en en en_wm af - 1 vowel/@_4 nl - 2 vowel/8_2 en_us sv - 1 vowel/8_3 zhy - 16 vowel/a en_n en_wm cy de hu nl pl sk hr sr it la - 5 vowel/a# base2 en_sc pt en_wi - 11 vowel/a_2 base2 eo la pt pt_pt ro vi en_wi - 4 vowel/a#_2 hr sv is sw - 7 vowel/a_3 en_sc fr cs is - 12 vowel/a#_3 en en_n en_us en_wm de hi ru pt_pt vi zhy - 2 vowel/a_4 el vi - 3 vowel/a_5 it sv sw - 5 vowel/aa fi fr_ca no zhy - 2 vowel/aa# fi en_wi - 3 vowel/aa_2 en cy - 1 vowel/aa_3 af - 2 vowel/aa_4 sv vi - 3 vowel/aa_5 en_n en_wm - 2 vowel/aa_6 de - 1 vowel/aa_7 nl - 2 vowel/aa_8 en_us - 3 vowel/a_en en fr - 1 vowel/@_bck hi - 17 vowel/e base2 en en_n en_wm af cy eo fr hr it la pt ++ - 2 vowel/e# en_sc - 7 vowel/e_2 en_sc de hi it 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 - 8 vowel/ee_1 base2 en en_n pl la sv no zhy - 4 vowel/ee_2 en en_us cy nl - 1 vowel/ee#_2 sv - 4 vowel/ee_3 af pt vi - 3 vowel/ee_6 en_n sk sv - 12 vowel/e_mid en_rp fr_ca hi hu sk cs hr it es pt_pt no is - 10 vowel/e_mid2 af de fi nl sk ro el sw - 3 vowel/@_fnt hr en_wi - 1 vowel/@_hgh no - 18 vowel/i base2 en_n en_wm cy eo fr hu pl it pt pt_pt ro ++ - 2 vowel/i# en_rp cy - 6 vowel/i_2 en_rp de nl la sv - 3 vowel/i_3 af fr sk - 4 vowel/i_4 fi hu it is - 5 vowel/i_5 en_sc - 3 vowel/i#_5 pt_pt ro - 1 vowel/i_6 hr - 3 vowel/i_en en en_us vi - 3 vowel/i_fnt hi en_wi - 12 vowel/ii en_rp en_wm cy de fr_ca nl is zhy - 3 vowel/ii# cy pl ru - 1 vowel/ii_2 la - 6 vowel/ii_3 fi hi sk hr sv no - 5 vowel/ii_4 en en_n - 2 vowel/ii_5 en_wi - 2 vowel/ii_6 en_wm - 1 vowel/ii_en en - 10 vowel/@_low en_rp hi ro no - 10 vowel/o base2 en de hi it la pt_pt sv en_wi - 4 vowel/o_2 cy hi hu no - 2 vowel/o-_2 en_n en_wm - 3 vowel/o_3 en_sc fr - 1 vowel/o-_3 en_rp - 1 vowel/o_4 en_n - 1 vowel/o-_4 ro - 1 vowel/o_6 nl - 3 vowel/oe en af de - 1 vowel/oe_2 no - 1 vowel/oe_4 sv - 2 vowel/o_mid fr hu - 12 vowel/oo en_sc de eo la es el sv no zhy en_wi - 12 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 - 6 vowel/oo_4 en_wm hi pl it en_wi - 1 vowel/oo_5 is - 6 vowel/oo_en en en_n en_rp - 2 vowelr/aa_r en_sc - 1 vowelr/oo_r en_sc - 1 vowelr/o_r en_sc - 4 vowelr/r-voc hi sk hr - 2 vowelr/V3_r en en_sc - 1 vowelr/V_r en - 7 vowel/u cy de eo fr cs la en_wi - 5 vowel/u# en en_sc - 5 vowel/u_2 fi fr sk hr ro - 1 vowel/u#_2 sv - 2 vowel/u_3 en_us ro - 1 vowel/u_4 en_n - 2 vowel/u#_4 en_sc - 1 vowel/u_5 sw - 2 vowel/u_6 pt_pt - 1 vowel/u_7 vi - 17 vowel/u_bck base2 cy fi fr_ca hi hu nl pl sk hr it pt ++ - 1 vowel/u_fnt en_rp - 2 vowel/uu en en_wm - 3 vowel/uu_2 base2 de la - 1 vowel/uu_3 af - 2 vowel/uu_4 fi sv - 9 vowel/uu_bck en_n fr_ca hi hu pt no zhy en_wi - 1 vowel/V en_sc - 5 vowel/V_2 en en_us af ru - 3 vowel/V_3 en_rp hi vi - 1 vowel/V_4 en_sc - 6 vowel/y en de fi hu nl zhy - 10 vowel/y# en en_wm de fi fr hu nl ro vi zhy - 1 vowel/y## is - 2 vowel/y_2 fr - 2 vowel/y#_2 hu sv - 1 vowel/y_3 af - 1 vowel/y#_3 is - 1 vowel/y_4 no - 1 vowel/y_5 sv - 1 vowel/yy fr_ca - 1 vowel/yy_2 no - 1 vowel/yy_3 sv - 6 vowel/yy_4 de hu la grc is - 1 vwl_af/@ af - 1 vwl_af/I af - 2 vwl_af/r@ af - 5 vwl_en/aI@ en en_n en_us en_sc en_rp - 2 vwl_en/aI@_2 en_sc - 5 vwl_en/aU@ en en_n en_us en_sc en_wm - 12 vwl_en/@L en en_us en_sc en_rp en_wm af - 3 vwl_en/@L_2 en_sc - 1 vwl_en_n/aa_5 en_n - 2 vwl_en_n/O@ en_n - 1 vwl_en_n/u_ en_n - 1 vwl_en/ooi@ en_wm - 3 vwl_en_rp/aa en_rp - 1 vwl_en_rp/aU@ en_rp - 1 vwl_en_rp/e@ en_rp - 1 vwl_en_rp/i@ en_rp - 1 vwl_en_rp/oo en_rp - 1 vwl_en/u en - 4 vwl_en/u_L en en_n en_us en_rp - 2 vwl_en_us/3_us en_us - 1 vwl_en_us/aai en_us - 2 vwl_en_us/ar en_us - 1 vwl_en_us/er en_us - 1 vwl_en_us/i_final3 en_us - 2 vwl_en_us/ii en_us - 2 vwl_en_us/ir en_us en_sc - 1 vwl_en_us/oo en_us - 1 vwl_en_us/oor en_us - 3 vwl_en_us/or en_us en_sc - 1 vwl_en_us/ur en_us - 3 vwl_fr/@R fr pt_pt - 1 vwl_fr/@R2 fr_ca - 1 vwl_hi/A hi - 3 vwl_hi/l-voc hi sk - 2 vwl_no/& no - 1 vwl_no/au- no - 1 vwl_no/u# no - 1 vwl_no/u#2 no - 1 vwl_no/y# no - 1 vwl_no/y#y no - 1 vwl_ro/ii- ro - 1 vwl_ro/li ro - 2 vwl_ro/mi ru ro - 1 vwl_ro/ni ro - 1 vwl_ru/8 ru - 1 vwl_ru/a ru - 1 vwl_ru/aa ru - 1 vwl_ru/e ru - 2 vwl_ru/E@ ru - 1 vwl_ru/E# ru - 1 vwl_ru/ee ru - 1 vwl_ru/i ru - 1 vwl_ru/i# ru - 3 vwl_ru/ii ru - 1 vwl_ru/ii- ru - 1 vwl_ru/ii# ru - 1 vwl_ru/ja ru - 1 vwl_ru/ju ru - 1 vwl_ru/o ru - 1 vwl_ru/oo ru - 1 vwl_ru/u ru - 1 vwl_ru/u# ru - 1 vwl_ru/u#u ru - 1 vwl_sv/r_sv3 sv - 1 vwl_zh/aang zhy - 1 vwl_zh/ang zhy - 1 vwl_zh/eng zhy - 1 vwl_zh/ing zhy - 1 vwl_zh/ng zhy - 1 vwl_zh/oeng zhy - 1 vwl_zh/ong zhy - 1 vwl_zh/ung zhy - 2 w/w base fr - 2 w/_w base fr - 1 w/w_ base - 1 w/w@ base - 8 w/w2 base2 pl sk pt_pt - 1 w/wa base - 1 w/we base - 3 w/wi base vi zhy - 11 w/wi2 en en_n en_us en_sc en_rp de nl la sv no - 1 w/wo base - 1 w/wu base - 5 w/xw base - 20 x/b base hi ro is - 1 x/b_ base - 10 x/d base en_us hi hr el is - 13 x/d_ base base2 fi hi pl hr ru ro el is sw - 21 x/d_dnt base base2 fi hi hu pl ru ro sw - 6 x/d_pzd pl ru - 4 x/dzh base hi - 6 x/dzh_ base hi mk ru - 5 x/dz_pzd base hi mk ru - 1 x/dz_pzd_ hi - 4 x/g_ base cy es is - 5 x/g2 base cy hi es is - 3 x/g2_ base hi +Data file Used by +b/b [b] base + [b] hi + [b;] ro +b/b_ [b] base + [b] hi +b/b@ [b] base + [b] hi +b/b@2 [b] base + [b] hi +b/ba [b] base + [b] hi +b/be [b] base + [b] hi +b/bi [b] base + [b] hi + [b;] ro +b/bo [b] base + [b] hi +b/bu [b] base + [b] hi +b/xb [b] base + [b] hi +d/d [d] base + [d[] base + [d] base2 + [d] fi + [d] hi + [d.] hi + [d] hu + [d] pl + [d;] pl + [d] hr + [d] ru + [d;] ru + [d;] ro + [d] el + [d] sw +d/d_ [d] base + [d[] base + [d] base2 + [d] fi + [d] hi + [d.] hi + [d] hu + [d] pl + [d;] pl + [d] hr + [d] ru + [d;] ru + [d;] ro + [d] el + [d] sw +d/dr [*] base + [d] base + [d[] base + [d] base2 + [d] fi + [d] hi + [d.] hi + [d] hu + [d] pl + [d;] pl + [d] hr + [d] ru + [d;] ru + [d;] ro + [d] el + [d] sw +d/tap [*;] ro +d/tap1 [*] base +d/tap2 [*2] base +d/tap3 [*] base +d/tap_i [*;] ro +d/xd [d] base + [d[] base + [d] base2 + [d] fi + [d] hi + [d.] hi + [d] hu + [d] pl + [d] hr + [d] ru + [d;] ro + [d] el + [d] sw +d/xd_pzd [d;] pl + [d;] ru +d/x_tap [*2] base +dzh/dzh [dZ] base + [dZ;] base + [dz;] base + [J] hi + [dZ;] mk + [dZ;] ru +dzh/dzh_ [dZ] base + [dZ;] base + [dz;] base + [J] hi + [dZ;] mk + [dZ;] ru +dzh/dz_pzd [J] base + [J2] hi +dzh/dz_pzd_ [J] base + [J2] hi +dzh/xdzh [dZ] base + [dZ;] base + [dz;] base + [J] hi + [dZ;] mk + [dZ;] ru +dzh/xdz_pzd [J] base + [J2] hi +envelope/p_214 [214] zh +envelope/p_512 [8] vi +envelope/p_fall [2] vi + [7] vi + [1] zhy + [4] zhy + [11] zh + [21] zh + [51] zh + [22] zh + [33] zh + [53] zh +envelope/p_fallrise [4] vi +envelope/p_level [1] vi + [3] zhy + [6] zhy + [44] zh + [55] zh +envelope/p_rise [3] vi + [2] zhy + [5] zhy + [35] zh +envelope/vi_5 [5] vi +envelope/vi_5amp [5] vi +envelope/vi_6 [6] vi +envelope/vi_6amp [6] vi +g2/g [g-] base +g2/g_ [g-] base +g2/xg [g-] base + [g] hi +g/g [g] base + [g] cy + [g] hi + [g] es +g/g_ [g] base + [g] cy + [g] hi + [g] es +g/xg [g] base + [g] cy + [g] es +j2/_j2 [;] base +j2/j2@ [(@)] base +j2/j2a [(a)] base +j2/j2e [(e)] base +j2/j2i [(i)] base +j2/j2o [(o)] base +j2/j2u [(u)] base +j2/xj2 [(i)] base +j/_j [j] base + [j] zh +j/j_ [j/] base +j/j@ [(@)] base +j/ja [(a)] base +j/je [(e)] base +j/ji [(i)] base +j/j_long [i;] zhh +j/jo [(o)] base +j/_j_short [j] de +j/ju [(u)] base +j/xj [(@)] base + [(a)] base + [(e)] base + [(i)] base + [(o)] base + [(u)] base +l^/j2@ [(@)] base +l^/j2a [(a)] base +l^/j2e [(e)] base +l^/j2i [(i)] base +l^/j2o [(o)] base +l^/j2u [(u)] base +l^/_l^ [l^] base +l^/l^ [l^] base +l/l [l] base + [l] en + [l] af + [l] hu + [l] sk + [l] ru + [l] la + [l] pt + [l;] ro + [l] en_wi +l/_l [l] base + [l/] base + [l] en + [l] af + [l/] de + [l] hu + [l] sk + [l] ru + [l] la + [l] pt + [l;] ro + [l] zh + [l] en_wi +l/l_ [l/] base +l/l@ [(@)] base +l/L1_aL [(a)] base +l/L1_eL [(e)] base +l/L1_iL [(i)] base +l/L1_@L [(@)] base +l/L1_oL [(o)] base +l/L1_uL [(u)] base +l/L2_aL [(a)] base +l/L2_eL [(e)] base +l/L2_iL [(i)] base +l/L2_@L [(@)] base + [I] en_sc +l/L2_oL [(o)] base + [oU] en_sc +l/L2_uL [(u)] base + [u:] en + [u:] en_n + [u:] en_us + [u:] en_rp +l/l_3 [l/] de + [l] fr +l/la [(a)] base +l/le [(e)] base +l/L_eL_af [&] af + [&:] af +l/li [(i)] base + [l] zh +l/l_long [l] base + [l] fr + [l] la + [l;] ro +l/lo [(o)] base +l/lu [(u)] base +l/tl [l] base + [l] en + [l] af + [l] hu + [l] sk + [l] ru + [l] la + [l] pt + [l;] ro + [l] en_wi +l/xl [(@)] base + [(a)] base + [(e)] base + [(i)] base + [(o)] base + [(u)] base +m/_m [m] base + [m;] ru + [m;] ro + [m] zh +m/m_ [m] base + [m;] ru + [m;] ro +m/m@ [(@)] base +m/m#_ [m#] is +m/ma [(a)] base +m/me [(e)] base +m/mi [(i)] base +m/mj [m] base + [m;] ru + [m;] ro +m/mo [(o)] base +m/mu [(u)] base +n^/_n^ [n^] base +n^/n^_ [n^] base +n^/n^@ [(@)] base +n^/n^#_ [n^#] is +n/_n [n] base + [n;] ro + [n] zh +n/n_ [n] base + [n;] ro + [n] zh +n/n@ [(@)] base +n/n#_ [n#] is +n^/n^a [(a)] base +n/na [(a)] base +n^/n^e [(e)] base +n/ne [(e)] base +n^/n^i [(i)] base +n/ni [(i)] base + [n] zh +nn/inn [(i)] base + [N] zh +n/nj [n] base + [n.] base + [n^] base + [n;] ro +nn/_nn [N] base + [N] en + [N] zh +nn/nn_ [N] base + [N] en + [N] zh +nn/nn@ [(@)] base +nn/nn#_ [N#] is +nn/nna [(a)] base +nn/nne [(e)] base +nn/nni [(i)] base +nn/nnj [N] base +nn/nno [(o)] base +nn/nnu [(u)] base +n^/n^o [(o)] base +n/no [(o)] base +n/_nr [n.] base +n/nr_ [n.] base +n^/n^u [(u)] base +n/nu [(u)] base +r2/_r2 [r-] base +r2/r2@ [(@)] base +r2/r2a [(a)] base +r2/r2e [(e)] base +r2/r2i [(i)] base +r2/r2o [(o)] base +r2/r2u [(u)] base +r3/r_ [r/] base + [r/] af + [r/] fr + [r/] ru +r3/r_@ [(@)] base +r3/r#_ [r#] is +r3/r_a [(a)] base +r3/r_e [(e)] base +r3/r_i [(i)] base +r3/r_n [r/] base + [r/] ru +r3/r_o [(o)] base +r3/r_trill [R2] base + [R3] base + [r] af + [r] cy + [r] nl + [R] sk + [x] pt +r3/r_trill2 [R] base + [R] hr +r3/r_trill2.wav [R] base + [R] hr +r3/r_trill3.wav [R3] base + [r] af + [r] cy + [r] nl +r3/r_trill.wav [R2] base + [R] sk + [x] pt +r3/r_u [(u)] base +r3/rx [*] base + [**] base + [r/] base + [r/] af + [R] fr_ca + [r/] ru + [x] pt_pt + [*;] ro + [r#] is +r3/rz_cs [R^] sk + [R^/] sk +r3/@tap [**] base +r3/@tap_i [**] base +r/r [r] base + [r-] base + [r] en_sc + [r] de + [R] pt_pt +r/_r [r] base + [r] en_sc + [R] pt_pt +r/r_ [r] base + [r] en_sc + [r] de + [r] fi + [r2] nl + [r] ru + [R] pt_pt + [r] ro + [r] sw +r/r@ [(@)] base +r/ra [(a)] base +r/re [(e)] base +r/ri [(i)] base +r/ro [(o)] base +r/rr [r/] base + [r/] af + [r] de + [r] fi + [r2] nl + [r] ru + [r/] ru + [r] ro + [r] sw +r/ru [(u)] base +r/tr [r] base + [r] en_sc + [R] pt_pt +r/trr [r/] base + [r/] af + [r] de + [r] fi + [r2] nl + [r] ru + [r/] ru + [r] ro + [r] sv + [r] sw +r/xr [(@)] base + [(a)] base + [(e)] base + [(i)] base + [(o)] base + [(u)] base +ufric/c; [c;] zh +ufric/ch [C] base + [C2] de +ufric/f [f] base + [pF] de + [f;] ro + [f] grc + [f] zh +ufric/f_ [f] base + [f;] ro +ufric/h_ [h] base + [h] fi + [H] hi + [h] hi + [] la +ufric/h@ [h] base + [h] fi + [H] hi + [h] hi + [th] hi + [] la +ufric/ha [h] base + [h] fi + [H] hi + [h] hi + [] la +ufric/he [h] base + [h] fi + [H] hi + [h] hi + [] la +ufric/hi [h] base + [h] fi + [H] hi + [h] hi + [] la +ufric/ho [h] base + [H] hi + [h] hi + [] la +ufric/hu [h] base + [H] hi + [h] hi + [] la +ufric/hu_fi [h] fi +ufric/ll [L] base + [l#] is +ufric/s [s] base + [s] es + [s#] pt +ufric/s_ [s] base + [z] base + [s2] fi + [z2] fr + [s2] hu + [s] es + [s#] pt + [z;] ro +ufric/s! [s] base + [s2] fi + [s2] hu + [s] es + [s#] pt +ufric/s_continue [s2] fi + [s2] hu +ufric/sh [S] base + [s#] pt_pt +ufric/sh_ [S] base + [s#] pt_pt +ufric/sh_pzd [S;] base + [S;] ro +ufric/sh_pzd_ [S;] base + [Z;] base +ufric/sh_rfx [s.] base +ufric/s_pzd [s;] base + [z;] base + [s;] ro +ufric/s_pzd_ [s;] base + [z;] base +ufric/sx_sv [sx] sv +ufric/th [T] base +ufric/th_ [T] base +ufric/tl# [tl#] is +ufric/x [x] base + [kh] vi +ufric/x2 [x2] af + [x2] nl + [x2] pt +ufric/x_hr [x] hr +ustop/c [c] base +ustop/k [k] base + [k] en + [k] fr + [kh] hi + [k] zhy + [k] sw +ustop/k_ [k] base + [k] base2 + [k] en + [k] fi + [k] fr + [kh] hi + [k] hu + [k] sk + [k] el + [kh] zh + [k] sw +ustop/ki [c] base + [k] base + [k] base2 + [k] en + [c] af + [k] fi + [k] fr + [k] hi + [k] hu + [k] sk + [k^] mk + [c] is + [k] zhy + [k] sw +ustop/kl [k] base + [k] base2 + [k] en + [k] fi + [k] fr + [k] hi + [kh] hi + [k] hu + [k] sk + [k] el + [k] zhy + [k] sw +ustop/kr [k] base + [k] base2 + [k] en + [k] fi + [k] fr + [k] hi + [kh] hi + [k] hu + [k] sk + [k] el + [k] zhy + [k] sw +ustop/k_unasp [k] base + [q] base + [k] base2 + [k] fi + [k] hi + [k] hu + [k] sk + [k] el + [k] zhy +ustop/k_unasp_ [k] zh +ustop/p [p] base + [p] fr + [ph] hi + [p] zhy +ustop/p_ [p] base + [p] fr + [ph] hi + [ph] zh +ustop/percus10 [(X1] base +ustop/pl [p] base + [p] base2 + [p] fi + [p] fr + [p] hi + [ph] hi + [p] hu + [p] sk + [p] la + [p;] ro +ustop/pr [p] base + [p] base2 + [p] fi + [p] hi + [ph] hi + [p] hu + [p] la + [p;] ro +ustop/p_unasp [p] base + [p] base2 + [p] fi + [p] fr + [p] hi + [p] hu + [p] sk + [p] la + [p;] ro + [p] zh +ustop/p_unasp_ [p] base2 + [p] fi + [p] hi + [p] hu + [p] sk + [p] la + [p;] ro +ustop/t [t] base + [t2] en + [t] fr + [t2] fr + [t.h] hi + [t] zhy +ustop/t_ [t] base + [t2] en + [t] fr + [t2] fr + [t.] hi + [t.h] hi + [t] sk + [t] el + [th] zh +ustop/tc; [tc;] zh +ustop/tc;_unasp [tc;] zh +ustop/t_dnt [t] base + [t[] base + [t] base2 + [t2] en + [t] fi + [t] hi + [t] hu + [t] pl + [t] hr + [t] ru + [t;] ro + [t[] vi + [t] sw +ustop/t_dnt2 [t[] vi +ustop/t_hi [t] hi + [th] hi +ustop/t_pzd [t;] pl + [t;] ru +ustop/tr [t] base + [t[] base + [t2] en + [t.h] hi + [t] ru +ustop/ts [ts] base2 + [ts] de + [ts] eo + [ts] hu + [ts] pl + [ts] ru + [ts;] ro + [z] zhy + [tsh] zh +ustop/tsh [tS] base + [c] zhy +ustop/tsh_ [tS] base + [c] zhy +ustop/t_short [t.] hi + [t] sk + [t] el +ustop/ts_pzd [tS;] base + [ts;] base + [ch] hi + [tS;] ru +ustop/ts_pzd_ [c] hi + [c] hu +ustop/ts_pzd2 [c] hi + [c] hu +ustop/ts_rfx [ts.] zh +ustop/ts_rfx_unasp [ts.] zh +ustop/ts_unasp [ts] zh +ustop/t_unasp [t] zh +vdiph/0i [OI] pt + [OI] grc + [OI] vi +vdiph/0i_2 [OI] en_sc + [AI] no + [OI] en_wi +vdiph2/e@ [3:] en_sc + [e@] en_sc + [e@] en_wi +vdiph2/ea [ea] ro + [iA?] zhh +vdiph2/ei_3 [i:] en_wm +vdiph2/eo [eo] ro +vdiph2/e[u [e[u] ro +vdiph2/i@ [i@] en_n + [i@] zhh + [i@?] zhh +vdiph2/i@_2 [i@] en_wm +vdiph2/ie [ie] fi + [i@] en_wi +vdiph2/ii@ [i@] en +vdiph2/ii@_3 [i@] vi +vdiph2/iioo [io] zh + [i0] zhh + [io] zhh + [io?] zhh +vdiph2/iu [iU] base2 + [iU] vi + [iu] zhy +vdiph2/iu_2 [iu] fi +vdiph2/iu_3 [iu] af + [iu] zhh +vdiph2/iu_4 [Iu] cy + [Yu] cy + [y?] zhh +vdiph2/iy [iy] fi +vdiph2/o@ [o@] af + [u@] zh + [u@] zhh + [u@?] zhh +vdiph2/oa [Oa] ro +vdiph2/o_oo [o] is + [o@] en_wi +vdiph2/u-@ [y@] vi +vdiph2/u#@ [U@] en_sc +vdiph2/uo [uo] fi +vdiph2/uu@ [U@] en + [U@] en_n + [U@] en_wm + [u@] vi +vdiph2/y#@ [Y@] af + [y@] zh + [y@] zhh + [y@?] zhh +vdiph2/yu [yU] nl + [y] zh +vdiph2/y-y# [yY] fi +vdiph/8u [oU] en_us + [ou] zh +vdiph/aai [aai] zhy +vdiph/aai_2 [AI] af + [AY] cy +vdiph/aai_3 [ai] fi +vdiph/aau [au] fi +vdiph/aau_2 [aU] de + [VU] nl + [aU] la + [aau] zhy + [aU] en_wi +vdiph/aau_3 [aU] hi +vdiph/aau_4 [aU] vi +vdiph/ae [E:] fr_ca + [ai] zh +vdiph/ae_2 [aI] en_n +vdiph/ai [aI] base2 + [aI] eo + [aI] sk + [aI] hr + [aI] it + [aI] pt + [a:I] vi + [aI] en_wi +vdiph/ai_2 [aI] cy + [aY] cy +vdiph/ai_3 [aI] no +vdiph/ai_4 [aI] af +vdiph/ai_5 [aI] de + [aI] la +vdiph/ai_6 [aI] en_rp +vdiph/ai_7 [aI] en_sc + [aI2] en_sc + [aI] is +vdiph/ai_en2 [aI] en +vdiph/au [aU] en + [aU] af + [a:U] vi +vdiph/au# [aU] en_sc +vdiph/au_2 [aU] en_us + [au] zhy +vdiph/au_3 [aU] en_rp +vdiph/au_4 [aU] base2 + [aU] cy + [aU] eo + [aU] sk + [aU] it + [aU] is +vdiph/ee-e [E:] hi +vdiph/eei [EI] base2 + [eI] en + [EI] de + [EI] nl + [EI] vi +vdiph/eei_2 [eI] en_us + [eI] eo + [ei] fi +vdiph/eei_3 [eI] en_rp + [eI] sk +vdiph/eeu [EU] pt + [EU] grc + [EU] vi + [eu] zhy +vdiph/eeu_2 [EU] la + [EU] pt_pt +vdiph/eeu_3 [aU] en_n + [aU] en_wm +vdiph/eey [ey] fi +vdiph/ei [eI] base2 + [e:] nl + [eI] la + [eI] pt + [eI] is + [eI] vi + [ei] zhy + [ei] zh +vdiph/eu [eU] base2 + [eU] en + [eU] cy + [eU] eo + [eU] nl + [eU] sk + [eU] pt + [eU] vi +vdiph/eu_2 [eu] fi +vdiph/&i [&i] fi + [aI] hi +vdiph/@i_2 [eI] af + [@I] cy + [@Y] cy +vdiph/i@_2 [e@] af +vdiph/@i_3 [eI] en_wm + [@I] ro + [ai] zhy +vdiph/&i_3 [aI] vi +vdiph/@i_4 [@I] vi +vdiph/ii [iI] ro +vdiph/i#i [yI] ro +vdiph/oi [oI] base2 + [OI] en_wm + [OY] de + [oI] it + [OI] la + [oI] vi +vdiph/oi_2 [oI] af +vdiph/ooi [OI] en + [OI] en_n + [OI] en_us + [OI] cy + [OY] cy + [OI] eo + [oi] fi + [OI] no + [oi] zhy +vdiph/ooi_2 [OI] af +vdiph/ooi_3 [OI] en_rp + [aI] en_wm +vdiph/oou [oU] cs + [OU] grc +vdiph/ou [ou] fi + [ou] zhy +vdiph/ou_2 [oU] sk + [oU] ro +vdiph/ou_3 [oU] is + [oU2] is +vdiph/@u [u:] en_wm + [@u] zhh +vdiph/@u_2 [oU] en_rp +vdiph/@u_3 [@U] ro +vdiph/@u_en [oU] en + [@U] vi + [@:U] vi +vdiph/ui [uI] base2 + [uI] en + [uI] eo + [ui] fi + [uI] vi + [ui] zhy +vdiph/u-i [yI] vi +vdiph/ui_2 [uI] af +vdiph/ui_3 [uI] cy + [uY] cy +vdiph/ui_4 [ui] zhh +vdiph/Vi [@:I] vi +vdiph/Vu [@U] af +vdiph/Vu_2 [oU] en_wm +vdiph/Vu_3 [o:] nl +vdiph/&y [&y] fi + [Wy] nl +vdiph/yi [yi] fi + [yI] grc + [u-I] no +vdiph/y#i [Yi] fi +vdiph/y#i_2 [Yy] is +vdiph/yi_fr [w^i] fr +vdiph/y#y [Yy] fi +vdiph/y#y_2 [Yy] af + [eoi] zhy +vdiph/y#y_3 [Y:] nl +vnasal/aa_n [A~] en +vnasal/aa_n3 [A~] af + [A~] fr +vnasal/a#_n [&~] pt +vnasal/a#u_n [&U~] pt + [&U~] pt_pt +vnasal/ee_n [E~] en + [E~] fr_ca +vnasal/ee_n2 [E~] hi + [E~] pl + [&~] pt_pt +vnasal/e_n [e~] af + [e~] pt + [E~] zhh +vnasal/i_n [i~] pt + [i~] zhh +vnasal/m- [m-] sw +vnasal/n- [n-] sw +vnasal/nn- [N-] sw +vnasal/oi_n [oI~] pt +vnasal/o_n [o~] hi + [o~] pt +vnasal/o_n2 [o~] af +vnasal/o_n3 [O~] fr +vnasal/oo_n [O~] en +vnasal/oo_n2 [O~] hi + [O~] pl +vnasal/u_n [u~] hi + [u~] pt + [u~] zhh +vnasal/W_n [W~] en + [E~] fr + [W~] fr +voc/bh [B] base +voc/dh [D] base + [D] es +voc/dh_ [D] base + [D] es +voc/Q [Q] base + [Q^] base +voc/Q_ [Q] base + [Q^] base + [Q] nl + [x2] pt +voc/Q_less [Q] nl + [x2] pt +voc/v [v] base + [v] fi + [v] hi + [v2] nl + [v;] ro + [v] is +voc/v_ [B] base + [v] base + [v] fi + [v] fr + [v] hi + [v2] nl + [v;] ro + [v] is +vocw/dh [D] base + [D] es +vocw/Q [Q] base + [Q^] base +vocw/Q_ [Q] base + [Q^] base + [Q] nl +vocw/Q2 [Q] nl +vocw/v [B] base + [v] base + [v] fr + [v;] ro +vocw/zh [Z] base + [Z;] ro +vocw/zh_rfx [z.] base +voc/z [z] base + [z2] fr + [z;] ro +voc/z_ [z] base + [z2] fr + [z;] ro +voc/zh [Z] base + [z.] base + [R^] sk + [Z;] ro +voc/zh_ [Z] base + [z.] base + [Z;] ro +voc/zh_2 [R^/] sk +voc/z_pzd [Z;] base + [z;] base +voc/z_pzd_ [Z;] base + [z;] base +vowel/@ [@] base + [3] en + [@] en + [@2] en + [@5] en + [@] en_us + [@2] en_us + [@5] en_us + [3] en_rp + [@] en_rp + [V] cy + [@4] hi + [@] hr + [@] zhh + [@?] zhh +vowel/@- [@-] base +vowel/& [a] en_rp + [&] fi + [&:] hi + [&] sv +vowel/0 [O] base2 + [0] en + [O] hi + [O] pt + [O] grc + [0] zhh + [0?] zhh +vowel/0_2 [0] en_n + [O] pt_pt + [o] sw +vowel/0_3 [O:] en_us + [O] en_sc + [0] en_rp + [A] hu +vowel/@_2 [@] fr + [W] fr +vowel/&_2 [a] en_us + [aa] en_us + [&?] zhh +vowel/@_3 [@] en_sc + [I] en_sc + [@2] en_sc + [@5] en_sc + [@] de + [@3] hi +vowel/3_2 [3:] en_n + [@] zh +vowel/3_3 [3:] en_rp +vowel/3_en [3:] en + [e@] en_wm + [3:] af +vowel/@_4 [@] nl +vowel/8_2 [U] en_us + [8] sv +vowel/8_3 [eo] zhy +vowel/a [a] en_n + [aa] en_n + [a] en_wm + [aa] en_wm + [a] cy + [a] de + [a:] hu + [a:] nl + [a] pl + [a] sk + [a:] sk + [A] hr + [a] hr + [a] sr + [a] it + [a:] la + [a] zh +vowel/a# [a/] base2 + [a2] en_sc + [&] pt + [&/] pt + [a2] en_wi +vowel/a_2 [a] base2 + [a] eo + [a] la + [A] pt + [a] pt_pt + [a] ro + [a:] vi + [a] en_wi + [A:] en_wi + [A@] en_wi + [aa] en_wi +vowel/a#_2 [&] hr + [a2] sv + [&] is + [a/] sw +vowel/a_3 [a] en_sc + [a/] en_sc + [A:] en_sc + [aa] en_sc + [a] fr + [a:] cs + [a] is +vowel/a#_3 [a2] en + [a2] en_n + [a2] en_us + [a2] en_wm + [3] de + [@] de + [a] hi + [a#] ru + [&] pt_pt + [&/] pt_pt + [@] vi + [a] zhy +vowel/a_4 [a/] el + [a] vi +vowel/a_5 [a/] it + [a] sv + [a] sw +vowel/aa [a] fi + [A] fr_ca + [A] no + [A:] no + [aa] zhy + [A] zh + [A?] zhh +vowel/aa# [a2] fi + [0] en_wi +vowel/aa_2 [A:] en + [A@] en + [A:] cy + [A] zh +vowel/aa_3 [A:] af +vowel/aa_4 [A:] sv + [O] vi +vowel/aa_5 [A:] en_n + [A:] en_wm + [A@] en_wm +vowel/aa_6 [A] de + [A:] de +vowel/aa_7 [A] nl +vowel/aa_8 [0] en_us + [A:] en_us +vowel/a_en [a] en + [aa] en + [A] fr +vowel/@_bck [@] hi + [@] zh +vowel/e [e] base2 + [e:] en + [eI] en_n + [E] en_wm + [e:] af + [e:] cy + [e] eo + [e] fr + [E:] fr + [e] hr + [e/] it + [e:] la + [e] pt + [e] pt_pt + [e] grc + [e] vi + [E] en_wi + [eI] en_wi +vowel/e# [I] en_sc + [I2] en_sc +vowel/e_2 [eI] en_sc + [e:] de + [e] hi + [e:] hi + [e] it + [e:] sv + [e:] no +vowel/e_3 [e:] hu +vowel/e_5 [i] en_sc +vowel/ee [E] fr + [E] pl + [E] sv +vowel/e_e [E] en_sc + [e] is +vowel/ee_1 [E] base2 + [e@] en + [e@] en_n + [E] pl + [E] la + [E] grc + [E:] sv + [E:] no + [e] zhy +vowel/ee_2 [E] en + [E] en_us + [E] cy + [E2] nl + [E] zh +vowel/ee#_2 [E-] sv +vowel/ee_3 [&] af + [&:] af + [E] pt + [E] vi +vowel/ee_6 [E] en_n + [&] sk + [E3] sv +vowel/e_mid [E] en_rp + [E] fr_ca + [E] hi + [E] hu + [e:] sk + [e] cs + [E] hr + [E] it + [E] es + [E] pt_pt + [E] no + [E] is +vowel/e_mid2 [E] af + [E] de + [E2] de + [E:] de + [e] fi + [E] nl + [e] sk + [e] ro + [e] el + [e] sw +vowel/@_fnt [@2] hr + [@] en_wi + [@2] en_wi +vowel/@_hgh [@] no +vowel/i [i] base2 + [i:] en_n + [i] en_wm + [i:] cy + [i] eo + [I] fr + [i:] hu + [i] pl + [i] it + [y] pt + [i/] pt + [i] pt_pt + [i/] ro + [i] el + [i:] no + [i] zhy + [i] zh + [i?] zhh + [i] sw + [i] en_wi +vowel/i# [i] en_rp + [y:] cy +vowel/i_2 [i:] en_rp + [i2] de + [i:] de + [i] nl + [i:] la + [i:] sv +vowel/i_3 [i] af + [i] fr + [i:] sk +vowel/i_4 [i] fi + [i] hu + [I] it + [i] is +vowel/i_5 [i:] en_sc +vowel/i#_5 [y] pt_pt + [i/] pt_pt + [y] ro +vowel/i_6 [i] hr +vowel/i_en [i:] en + [i:] en_us + [i] vi +vowel/i_fnt [i] hi + [i:] hi + [i:] en_wi +vowel/ii [I] en_rp + [I2] en_rp + [I] en_wm + [I2] en_wm + [I] cy + [I] de + [I:] de + [I] fr_ca + [I] nl + [I] is + [i] zhy +vowel/ii# [Y] cy + [y] pl + [Y] ru +vowel/ii_2 [I] la + [i] zh +vowel/ii_3 [I] fi + [I] hi + [i] sk + [I] hr + [I] sv + [I] no +vowel/ii_4 [I] en + [I2] en + [I] en_n + [i] en_n + [I2] en_n +vowel/ii_5 [I] en_wi + [I2] en_wi +vowel/ii_6 [I] en_wm + [I2] en_wm +vowel/ii_en [i] en +vowel/@_low [3] en_rp + [@] en_rp + [@2] en_rp + [a2] en_rp + [@5] en_rp + [@] hi + [V] hi + [@2] hi + [@] ro + [@2] no +vowel/o [o] base2 + [o:] en + [o:] de + [o] hi + [o] it + [o/] it + [o:] la + [o] pt_pt + [o] grc + [o:] sv + [o] zh + [u] zh + [oU] en_wi +vowel/o- [o-] zh +vowel/o_2 [o:] cy + [o:] hi + [o:] hu + [o:] no +vowel/o-_2 [V] en_n + [V] en_wm +vowel/o_3 [oU] en_sc + [o] fr + [o] zhh +vowel/o-_3 [U] en_rp +vowel/o_4 [oU] en_n +vowel/o-_4 [o] ro +vowel/o_5 [o] zhh +vowel/o_6 [O] nl +vowel/oe [W] en + [W] af + [W] de +vowel/oe_2 [W] no +vowel/oe_4 [W] sv +vowel/o_mid [O] fr + [o] hu +vowel/oo [O:] en_sc + [O] de + [o] eo + [O] la + [o] es + [o] el + [O] sv + [O] no + [o] zhy + [O] en_wi + [O:] en_wi + [O@] en_wi +vowel/oo_1 [O:] en_n + [O:] en_rp + [O@] en_rp + [O] en_wm + [O:] en_wm + [O@] en_wm + [O:] af + [o] fi + [o] sk + [o:] sk + [o] hr + [o] vi +vowel/oo_2 [0] en_sc + [O] cy + [o] cs +vowel/oo_3 [O] af +vowel/oo_4 [0] en_wm + [O:] hi + [O] pl + [O] it + [V] en_wi + [3:] en_wi +vowel/oo_5 [O] is +vowel/oo_en [O] en + [O:] en + [O@] en + [o@] en + [O] en_n + [O] en_rp +vowelr/aa_r [A:] en_sc + [A@] en_sc +vowelr/oo_r [O@] en_sc +vowelr/o_r [o@] en_sc +vowelr/r-voc [r-] hi + [r-] sk + [r:] sk + [r-] hr +vowelr/V3_r [VR] en + [3] en_sc + [@r] zh +vowelr/V_r [IR] en +vowel/u [u:] cy + [u:] de + [u] eo + [U] fr + [u:] cs + [u:] la + [u] zh + [u:] en_wi +vowel/u# [u-] en + [u:] en_sc +vowel/u_2 [u1] fi + [u] fr + [u] sk + [U] hr + [u] ro +vowel/u#_2 [u-] sv +vowel/u_3 [u:] en_us + [yU] ro +vowel/u_4 [u:] en_n +vowel/u#_4 [U] en_sc + [u:] en_sc +vowel/u_5 [u] sw +vowel/u_6 [U] pt_pt + [u] pt_pt +vowel/u_7 [u] vi +vowel/u_bck [u] base2 + [U] cy + [u] fi + [u] fr_ca + [u:] hi + [u:] hu + [u] nl + [u] pl + [u:] sk + [u] hr + [U] it + [u] it + [u] pt + [u:] sv + [u:] no + [u] is + [u] zhy +vowel/u_fnt [u:] en_rp + [u] zhh + [u?] zhh +vowel/uu [U] en + [U] en_wm +vowel/uu_2 [U] base2 + [U] de + [U] la +vowel/uu_3 [u] af +vowel/uu_4 [U] fi + [U] sv +vowel/uu_bck [U] en_n + [U] fr_ca + [U] hi + [u] hu + [U] pt + [U] no + [u] zhy + [U] en_wi +vowel/V [3] en_sc +vowel/V_2 [V] en + [V] en_us + [a] af + [V] ru + [V#] ru +vowel/V_3 [V] en_rp + [V] hi + [@:] vi +vowel/V_4 [V] en_sc +vowel/y [y:] en + [y:] de + [y] fi + [y:] hu + [y] nl + [yu] zhy + [y] zh + [iu] zhh +vowel/y# [Y:] en + [3:] en_wm + [Y:] de + [Y] fi + [Y] fr + [Y:] hu + [8] nl + [Y] ro + [y] vi + [oe] zhy +vowel/y## [y#] is +vowel/y_2 [y] fr + [y"] fr +vowel/y#_2 [Y] hu + [Y:] sv +vowel/y_3 [y] af +vowel/y#_3 [W] is +vowel/y_4 [y:] no +vowel/y_5 [y:] sv +vowel/yy [y"] fr_ca +vowel/yy_2 [y] no +vowel/yy_3 [y] sv +vowel/yy_4 [y] de + [y] hu + [y] la + [y:] la + [y] grc + [y] is +vwl_af/@ [@] af +vwl_af/I [I] af +vwl_af/r@ [@] af + [I] af +vwl_en/aI@ [aI@] en + [aI@] en_n + [aI@] en_us + [aI@] en_sc + [aI@] en_rp +vwl_en/aI@_2 [aI] en_sc + [aI@] en_sc +vwl_en/aU@ [aU@] en + [aU@] en_n + [aU@] en_us + [aU@] en_sc + [aU@] en_wm +vwl_en/@L [@L] en + [@L] en_us + [@L] en_sc + [@L] en_rp + [@L] en_wm + [@L] af +vwl_en/@L_2 [aI] en_sc + [@L] en_sc +vwl_en_n/aa_5 [A@] en_n +vwl_en_n/O@ [O@] en_n + [o@] en_n +vwl_en_n/u_ [u:] en_n +vwl_en/ooi@ [aI@] en_wm +vwl_en_rp/aa [A:] en_rp + [A@] en_rp + [aa] en_rp +vwl_en_rp/aU@ [aU@] en_rp +vwl_en_rp/e@ [e@] en_rp +vwl_en_rp/i@ [i@] en_rp +vwl_en_rp/oo [U@] en_rp +vwl_en/u [u:] en +vwl_en/u_L [u:] en + [u:] en_n + [u:] en_us + [u:] en_rp +vwl_en_us/3_us [3] en_us + [3:] en_us +vwl_en_us/aai [aI] en_us +vwl_en_us/ar [A:] en_us + [A@] en_us +vwl_en_us/er [e@] en_us +vwl_en_us/i_final3 [i] en_us +vwl_en_us/ii [I] en_us + [I2] en_us +vwl_en_us/ir [i@] en_us + [i@] en_sc +vwl_en_us/oo [O] en_us +vwl_en_us/oor [O@] en_us +vwl_en_us/or [O:] en_us + [o@] en_us + [O:] en_sc +vwl_en_us/ur [U@] en_us +vwl_fr/@R [R] fr + [r] fr + [x] pt_pt +vwl_fr/@R2 [R] fr_ca +vwl_hi/A [a:] hi +vwl_hi/l-voc [l-] hi + [l-] sk + [l:] sk +vwl_no/& [a] no + [a:] no +vwl_no/au- [aU] no +vwl_no/u# [u-] no +vwl_no/u#2 [u-:] no +vwl_no/y# [Y:] no +vwl_no/y#y [Yy] no +vwl_ro/ii- [I^] ro +vwl_ro/li [I^] ro +vwl_ro/mi [I^] ru + [I^] ro +vwl_ro/ni [I^] ro +vwl_ru/8 [8] ru +vwl_ru/a [A] ru +vwl_ru/aa [a] ru +vwl_ru/e [E] ru +vwl_ru/E@ [E2] ru + [E3] ru +vwl_ru/E# [E#] ru +vwl_ru/ee [e] ru +vwl_ru/i [i] ru +vwl_ru/i# [y] ru +vwl_ru/ii [I] ru + [I2] ru + [I3] ru +vwl_ru/ii- [I^] ru +vwl_ru/ii# [I#] ru +vwl_ru/ja [ja] ru +vwl_ru/ju [ju] ru +vwl_ru/o [o] ru +vwl_ru/oo [O] ru +vwl_ru/u [u] ru +vwl_ru/u# [u#] ru +vwl_ru/u#u [u"] ru +vwl_sv/r_sv3 [r] sv +vwl_zh/aang [aan] zhy +vwl_zh/aau [Au] zh +vwl_zh/ang [ang] zhy +vwl_zh/eng [eng] zhy +vwl_zh/i& [i&?] zhh +vwl_zh/iaa [iA] zh +vwl_zh/iaau [iAu] zh +vwl_zh/i_dnt [i[] zh +vwl_zh/iee [iE] zh +vwl_zh/iee_n [iE~] zhh +vwl_zh/ing [ing] zhy +vwl_zh/iou [iou] zh +vwl_zh/i_rfx [i.] zh +vwl_zh/ng [ng] zhy +vwl_zh/oeng [oen] zhy +vwl_zh/ong [ong] zhy +vwl_zh/ua [u&?] zhh + [uA?] zhh +vwl_zh/uaa [uA] zh +vwl_zh/uai [uai] zh +vwl_zh/uee_n [uE~] zhh +vwl_zh/uei [uei] zh +vwl_zh/ung [ung] zhy +vwl_zh/uo [uo] zh +vwl_zh/y& [y&] zh +vwl_zh/ya [ya] zhh + [ya?] zhh +vwl_zh/yee [yE] zh +vwl_zh/y_n [y~] zhh +w/w [w] base + [w] fr +w/_w [w] base + [w] fr + [w] zh +w/w_ [w/] base +w/w@ [(@)] base +w/w2 [w2] base2 + [w] pl + [w] sk + [w] pt_pt +w/wa [(a)] base +w/we [(e)] base + [uE] zhh +w/wi [(i)] base + [i] vi + [i] zhy +w/wi2 [i:] en + [i:] en_n + [i:] en_us + [i:] en_sc + [i:] en_rp + [i2] de + [i:] de + [i] nl + [i:] la + [i:] sv + [i:] no +w/wo [(o)] base +w/wu [(u)] base +w/xw [(@)] base + [(a)] base + [(e)] base + [(o)] base + [(u)] base +x/b [b] base + [b] hi + [b;] ro + [b] is +x/b_ [b] base +x/d [d] base + [t#] en_us + [d.] hi + [d] hr + [d] el + [d] is +x/d_ [d] base + [d[] base + [d] base2 + [d] fi + [d] hi + [d.] hi + [d] pl + [d] hr + [d] ru + [d;] ro + [d] el + [d] is + [d] sw +x/d_dnt [*2] base + [d[] base + [d] base2 + [d] fi + [d] hi + [d] hu + [d] pl + [d] ru + [d;] ro + [d] sw +x/d_pzd [d;] pl + [d;] ru +x/dzh [J] base + [dZ] base + [J2] hi +x/dzh_ [dZ] base + [dZ;] base + [dz;] base + [J] hi + [dZ;] mk + [dZ;] ru +x/dz_pzd [dZ;] base + [dz;] base + [J] hi + [dZ;] mk + [dZ;] ru +x/dz_pzd_ [J2] hi +x/g_ [g] base + [g] cy + [g] es + [g] is +x/g2 [g] base + [g] cy + [g] hi + [g] es + [g] is +x/g2_ [g-] base + [g] hi diff --git a/phsource/ph_greek_ancient b/phsource/ph_greek_ancient index 47815de2..2c08836c 100644 --- a/phsource/ph_greek_ancient +++ b/phsource/ph_greek_ancient @@ -3,12 +3,43 @@ // Ancient Greek - based on base2 //==================================================== +phoneme : // Lengthen previous vowel by "length" + virtual + length 100 +endphoneme + + phoneme y vowel starttype (i) endtype (i) length 160 formants vowel/yy_4 endphoneme +phoneme e + vowel starttype (e) endtype (e) + length 140 + formants vowel/e +endphoneme + +phoneme E + vowel starttype (e) endtype (e) + length 150 + formants vowel/ee_1 +endphoneme + +phoneme o + vowel starttype (o) endtype (o) + length 140 + formants vowel/o +endphoneme + +phoneme O + vowel starttype (o) endtype (o) + length 150 + formants vowel/0 +endphoneme + + phoneme EU vowel starttype (e) endtype (u) length 230 diff --git a/phsource/phonemes b/phsource/phonemes index eb0d896b..a0bd6774 100644 --- a/phsource/phonemes +++ b/phsource/phonemes @@ -1236,6 +1236,13 @@ include ph_vi phonemetable zhy base include ph_zh_yue +phonemetable zh base +include ph_zh + +phonemetable zhh zh +include ph_zh_huai + + phonemetable sw base include ph_swahili diff --git a/phsource/vdiph/vowelchart.png b/phsource/vdiph/vowelchart.png index 83a6170e..e1f9e63e 100644 Binary files a/phsource/vdiph/vowelchart.png and b/phsource/vdiph/vowelchart.png differ diff --git a/phsource/vdiph2/vowelchart.png b/phsource/vdiph2/vowelchart.png index f4054b44..75c71829 100644 Binary files a/phsource/vdiph2/vowelchart.png and b/phsource/vdiph2/vowelchart.png differ diff --git a/phsource/vowel/vowelchart.png b/phsource/vowel/vowelchart.png index c5877180..bb41c90f 100644 Binary files a/phsource/vowel/vowelchart.png and b/phsource/vowel/vowelchart.png differ diff --git a/src/compiledata.cpp b/src/compiledata.cpp index 1c2b9027..37bf526d 100755 --- a/src/compiledata.cpp +++ b/src/compiledata.cpp @@ -80,13 +80,11 @@ extern int CompileDictionary(const char *dsource, const char *dict_name, FILE *l static int markers_used[8]; -#define N_USED_BY 12 typedef struct { void *link; int value; - short n_uses; - short n_used_by; - unsigned char used_by[N_USED_BY]; + int ph_mnemonic; + short ph_table; char string[1]; } REF_HASH_TAB; @@ -906,12 +904,17 @@ int Compile::LoadDataFile(const char *path, int control) FILE *f; int id; - int ix; int hash; + int addr = 0; int type_code=' '; REF_HASH_TAB *p, *p2; char buf[sizeof(path_source)+120]; + if(strcmp(path,"NULL")==0) + return(0); + if(strcmp(path,"DFT")==0) + return(1); + count_references++; hash = Hash8(path); @@ -920,102 +923,80 @@ int Compile::LoadDataFile(const char *path, int control) { if(strcmp(path,p->string)==0) { - int found = 0; - duplicate_references++; - p->n_uses++; - - // add the current phoneme table to a list of users of this data file, if not already listed - for(ix=0; (ix < p->n_used_by) && (ix < N_USED_BY); ix++) - { - if(p->used_by[ix] == n_phoneme_tabs) - { - found = 1; - break; - } - } - if(found == 0) - { - if(ix < N_USED_BY) - { - p->used_by[ix] = n_phoneme_tabs; - } - p->n_used_by++; - } - - return(p->value); // already loaded this data + addr = p->value; // already loaded this data + break; } p = (REF_HASH_TAB *)p->link; } - sprintf(buf,"%s%s",path_source,path); - - if(strcmp(path,"NULL")==0) - return(0); - if(strcmp(path,"DFT")==0) - return(1); - - if((f = fopen(buf,"rb")) == NULL) + if(addr == 0) { - sprintf(buf,"%s%s.wav",path_source,path); + sprintf(buf,"%s%s",path_source,path); + if((f = fopen(buf,"rb")) == NULL) { - Error("Can't read file",path); - return(0); + sprintf(buf,"%s%s.wav",path_source,path); + if((f = fopen(buf,"rb")) == NULL) + { + Error("Can't read file",path); + return(0); + } + } + + id = Read4Bytes(f); + rewind(f); + + if(id == 0x43455053) + { + addr = LoadSpect(path, control); + type_code = 'S'; + } + else + if(id == 0x46464952) + { + addr = LoadWavefile(f,path); + type_code = 'W'; + } + else + if(id == 0x43544950) + { + addr = LoadEnvelope(f,path); + type_code = 'E'; + } + else + if(id == 0x45564E45) + { + addr = LoadEnvelope2(f,path); + type_code = 'E'; + } + else + { + Error("File not SPEC or RIFF",path); + addr = -1; + } + fclose(f); + + if(addr > 0) + { + fprintf(f_phcontents,"%c 0x%.5x %s\n",type_code,addr & 0x7fffff,path); } } - id = Read4Bytes(f); -// fread(&id,1,4,f); - rewind(f); - - if(id == 0x43455053) - { - ix = LoadSpect(path, control); - type_code = 'S'; - } - else - if(id == 0x46464952) - { - ix = LoadWavefile(f,path); - type_code = 'W'; - } - else - if(id == 0x43544950) - { - ix = LoadEnvelope(f,path); - type_code = 'E'; - } - else - if(id == 0x45564E45) - { - ix = LoadEnvelope2(f,path); - type_code = 'E'; - } - else - { - Error("File not SPEC or RIFF",path); - ix = -1; - } - fclose(f); - - if(ix > 0) - { - fprintf(f_phcontents,"%c 0x%.5x %s\n",type_code,ix & 0x7fffff,path); - } - // add this item to the hash table - p = ref_hash_tab[hash]; - p2 = (REF_HASH_TAB *)malloc(sizeof(REF_HASH_TAB)+strlen(path)+1); - p2->value = ix; - p2->n_uses = 1; - p2->n_used_by = 1; - strcpy(p2->string,path); - p2->used_by[0] = n_phoneme_tabs; - p2->link = (char *)p; - ref_hash_tab[hash] = p2; + if(addr > 0) + { + p = ref_hash_tab[hash]; + p2 = (REF_HASH_TAB *)malloc(sizeof(REF_HASH_TAB)+strlen(path)+1); + p2->value = addr; + p2->ph_mnemonic = ph->mnemonic; // phoneme which uses this file + p2->ph_table = n_phoneme_tabs-1; + strcpy(p2->string,path); + p2->link = (char *)p; + ref_hash_tab[hash] = p2; + } - return(ix); + return(addr); } // end of Compile::LoadDataFile @@ -1892,12 +1873,21 @@ int Compile::LoadEnvelope2(FILE *f, const char *fname) static int ref_sorter(char **a, char **b) {//====================================== - - REF_HASH_TAB *p1 = (REF_HASH_TAB *)(*a); - REF_HASH_TAB *p2 = (REF_HASH_TAB *)(*b); + int ix; - return(strcoll(p1->string,p2->string)); -} /* end of strcmp2 */ + REF_HASH_TAB *p1 = (REF_HASH_TAB *)(*a); + REF_HASH_TAB *p2 = (REF_HASH_TAB *)(*b); + + ix = strcoll(p1->string,p2->string); + if(ix != 0) + return ix; + + ix = p1->ph_table - p2->ph_table; + if(ix != 0) + return ix; + + return(p1->ph_mnemonic - p2->ph_mnemonic); +} /* end of ref_sorter */ @@ -1909,10 +1899,13 @@ void Compile::Report(void) REF_HASH_TAB *p; REF_HASH_TAB **list; FILE *f_report; + const char *data_path; + int prev_table; + int prev_mnemonic; char fname[sizeof(path_source)+20]; // make a list of all the references and sort it - list = (REF_HASH_TAB **)malloc(count_references * sizeof(REF_HASH_TAB *)); + list = (REF_HASH_TAB **)malloc((count_references)* sizeof(REF_HASH_TAB *)); if(list == NULL) return; @@ -1932,6 +1925,7 @@ void Compile::Report(void) } fputc('\n',f_report); + fprintf(f_report,"Data file Used by\n"); ix = 0; for(hash=0; (hash < 256) && (ix < count_references); hash++) { @@ -1945,25 +1939,35 @@ void Compile::Report(void) n = ix; qsort((void *)list,n,sizeof(REF_HASH_TAB *),(int (*)(const void *,const void *))ref_sorter); + data_path = ""; + prev_mnemonic = 0; + prev_table = 0; for(ix=0; ixn_uses, list[ix]->string); - for(j = strlen(list[ix]->string); j < 14; j++) + if(strcmp(list[ix]->string, data_path) != 0) + { + data_path = list[ix]->string; + j = strlen(data_path); + fprintf(f_report,"%s",data_path); + } + else + { + if((list[ix]->ph_table == prev_table) && (list[ix]->ph_mnemonic == prev_mnemonic)) + continue; // same phoneme, don't list twice + } + + while(j < 14) { fputc(' ',f_report); // pad filename with spaces + j++; } - for(j=0; (j < list[ix]->n_used_by) && (jused_by[j]; - fprintf(f_report," %s",phoneme_tab_list2[ph_tab_num-1].name); - } - if(j < list[ix]->n_used_by) - { - fprintf(f_report," ++"); - } + + fprintf(f_report," [%s] %s",WordToString(prev_mnemonic = list[ix]->ph_mnemonic), phoneme_tab_list2[prev_table = list[ix]->ph_table].name); fputc('\n',f_report); + + free(list[ix]); } free(list); fclose(f_report); diff --git a/src/compiledict.cpp b/src/compiledict.cpp index 0491a002..2170c365 100755 --- a/src/compiledict.cpp +++ b/src/compiledict.cpp @@ -163,9 +163,9 @@ int compile_line(char *linebuf, char *dict_line, int *hash) char *p; char *word; char *phonetic; - int ix; + unsigned int ix; int step; - int n_flag_codes = 0; + unsigned int n_flag_codes = 0; int flag_offset; int length; int multiple_words = 0; @@ -181,10 +181,11 @@ int compile_line(char *linebuf, char *dict_line, int *hash) unsigned char flag_codes[100]; char encoded_ph[200]; unsigned char bad_phoneme[4]; +static char nullstring[] = {0}; comment = NULL; text_not_phonemes = 0; - phonetic = word = ""; + phonetic = word = nullstring; p = linebuf; // while(isspace2(*p)) p++; @@ -1219,7 +1220,7 @@ static int compile_dictrules(FILE *f_in, FILE *f_out, char *fname_temp) int n_rules=0; int count=0; int different; - char *prev_rgroup_name; + const char *prev_rgroup_name; unsigned int char_code; int compile_mode=0; char *buf; @@ -1247,16 +1248,6 @@ static int compile_dictrules(FILE *f_in, FILE *f_out, char *fname_temp) if(buf[0] == '\r') buf++; // ignore extra \r in \r\n } - if((buf != NULL) && (memcmp(buf,".L",2)==0)) - { - if(compile_lettergroup(&buf[2], f_out) != 0) - { - fprintf(f_log,"%5d: Bad lettergroup\n",linenum); - error_count++; - } - continue; - } - if((buf == NULL) || (buf[0] == '.')) { // next .group or end of file, write out the previous group @@ -1277,10 +1268,21 @@ static int compile_dictrules(FILE *f_in, FILE *f_out, char *fname_temp) { // end of the character replacements section fwrite(&n_rules,1,4,f_out); // write a zero word to terminate the replacemenmt list + compile_mode = 0; } if(buf == NULL) break; // end of file + if(memcmp(buf,".L",2)==0) + { + if(compile_lettergroup(&buf[2], f_out) != 0) + { + fprintf(f_log,"%5d: Bad lettergroup\n",linenum); + error_count++; + } + continue; + } + if(memcmp(buf,".replace",8)==0) { compile_mode = 2; diff --git a/src/dictionary.cpp b/src/dictionary.cpp index b1e56cb9..02daadf2 100755 --- a/src/dictionary.cpp +++ b/src/dictionary.cpp @@ -230,7 +230,7 @@ void Translator::InitGroups(void) if(p[0] == RULE_REPLACEMENTS) { - pw = (unsigned int *)(((int)p+4) & ~3); // advance to next word boundary + pw = (unsigned int *)(((long)p+4) & ~3); // advance to next word boundary langopts.replace_chars = pw; while(pw[0] != 0) { @@ -617,8 +617,8 @@ return(0); -int Translator::IsLetterGroup(char *word, int group) -{//================================================= +int Translator::IsLetterGroup(char *word, int group, int pre) +{//========================================================== // match the word against a list of utf-8 strings char *p; char *w; @@ -1484,7 +1484,7 @@ char *Translator::DecodeRule(const char *group, char *rule) if(rb == RULE_ENDING) { - static char *flag_chars = "ei vtfq t"; + static const char *flag_chars = "ei vtfq t"; flags = ((rule[0] & 0x7f)<< 8) + (rule[1] & 0x7f); suffix_char = 'S'; if(flags & (SUFX_P >> 8)) @@ -1802,9 +1802,9 @@ void Translator::MatchRule(char *word[], const char *group, char *rule, MatchRec failed = 1; break; - case RULE_LETTERGP2: // match against a list of utf-t strings + case RULE_LETTERGP2: // match against a list of utf-8 strings letter_group = *rule++ - 'A'; - if((n_bytes = IsLetterGroup(post_ptr-1,letter_group)) >0) + if((n_bytes = IsLetterGroup(post_ptr-1,letter_group,0)) >0) { match.points += (20-distance_right); post_ptr += (n_bytes-1); @@ -1983,6 +1983,17 @@ void Translator::MatchRule(char *word[], const char *group, char *rule, MatchRec failed = 1; break; + case RULE_LETTERGP2: // match against a list of utf-8 strings + letter_group = *rule++ - 'A'; + if((n_bytes = IsLetterGroup(pre_ptr-letter_xbytes,letter_group,1)) >0) + { + match.points += (20-distance_right); + pre_ptr -= (n_bytes-1); + } + else + failed =1; + break; + case RULE_NOTVOWEL: if(!IsLetter(letter_w,0)) { @@ -2345,7 +2356,7 @@ int Translator::TranslateRules(char *p_start, char *phonemes, int ph_size, char } } } - + if(match1.phonemes == NULL) match1.phonemes = ""; @@ -2567,10 +2578,10 @@ char *print_dflags(int flags) -int Translator::LookupDict2(char *word, char *word2, char *phonetic, unsigned int *flags, int end_flags) -//====================================================================================================== +const char *Translator::LookupDict2(const char *word, const char *word2, char *phonetic, unsigned int *flags, int end_flags) +//==================================================================================================================== /* Find an entry in the word_dict file for a specified word. - Returns 1 if an entry is found + Returns NULL if no match, else returns 'word_end' word zero terminated word to match word2 pointer to next word(s) in the input text (terminated by space) @@ -2590,8 +2601,8 @@ int Translator::LookupDict2(char *word, char *word2, char *phonetic, unsigned in int condition_failed=0; int n_chars; int no_phonemes; - char *word_end; - char *word1; + const char *word_end; + const char *word1; char word_buf[N_WORD_BYTES]; word1 = word; @@ -2801,7 +2812,7 @@ int Translator::LookupDict2(char *word, char *word2, char *phonetic, unsigned in fprintf(f_trans,"Found: %s [%s] %s\n",word1,ph_decoded,print_dflags(flags1)); } } - return(1); + return(word_end); } return(0); @@ -2818,12 +2829,13 @@ int Translator::LookupDictList(char **wordptr, char *ph_out, unsigned int *flags */ { int length; - int found; - char *word1; - char *word2; + const char *found; + const char *word1; + const char *word2; unsigned char c; int nbytes; int c2; + int len; char word[N_WORD_BYTES]; static char word_replacement[N_WORD_BYTES]; @@ -2896,10 +2908,14 @@ int Translator::LookupDictList(char **wordptr, char *ph_out, unsigned int *flags word_replacement[0] = 0; word_replacement[1] = ' '; strcpy(&word_replacement[2],ph_out); // replacement word, preceded by zerochar and space + + word1 = *wordptr; *wordptr = &word_replacement[2]; if(option_phonemes == 2) { + len = found - word1; + memcpy(word,word1,len); // include multiple matching words fprintf(f_trans,"Replace: %s %s\n",word,*wordptr); } } @@ -2917,10 +2933,11 @@ int Translator::LookupDictList(char **wordptr, char *ph_out, unsigned int *flags -int Translator::Lookup(char *word, char *ph_out) -{//============================================= +int Translator::Lookup(const char *word, char *ph_out) +{//=================================================== unsigned int flags; - return(LookupDictList(&word,ph_out,&flags,0)); + char *word1 = (char *)word; + return(LookupDictList(&word1,ph_out,&flags,0)); } diff --git a/src/espeak_command.cpp b/src/espeak_command.cpp index 86ab3195..0abe171c 100644 --- a/src/espeak_command.cpp +++ b/src/espeak_command.cpp @@ -490,22 +490,22 @@ int delete_espeak_command( t_espeak_command* the_command) case ET_VOICE_SPEC: { - espeak_VOICE* data = &(the_command->u.my_voice_spec); + espeak_VOICE* data = &(the_command->u.my_voice_spec); - if (data->name) - { - free(data->name); - } + if (data->name) + { + free((void *)data->name); + } - if (data->languages) - { - free(data->languages); - } + if (data->languages) + { + free((void *)data->languages); + } - if (data->identifier) - { - free(data->identifier); - } + if (data->identifier) + { + free((void *)data->identifier); + } } break; diff --git a/src/espeakedit.cpp b/src/espeakedit.cpp index 5c8b1a55..d51c074e 100755 --- a/src/espeakedit.cpp +++ b/src/espeakedit.cpp @@ -42,7 +42,7 @@ #include "prosodydisplay.h" -static char *about_string = "espeakedit: %s\nAuthor: Jonathan Duddington (c) 2007\n\n" +static const char *about_string = "espeakedit: %s\nAuthor: Jonathan Duddington (c) 2007\n\n" "Licensed under GNU General Public License version 3\n" "http://espeak.sourceforge.net/"; diff --git a/src/extras.cpp b/src/extras.cpp index bd45204c..1679ee64 100644 --- a/src/extras.cpp +++ b/src/extras.cpp @@ -308,7 +308,7 @@ void Lexicon_De() char phonemes2[80]; WORD_TAB winfo; - static char *vowels = "aeiouyAEIOUY29@"; + static const char *vowels = "aeiouyAEIOUY29@"; wxString fname = wxFileSelector(_T("German Lexicon"),path_dir1,_T(""),_T(""),_T("*"),wxOPEN); @@ -477,7 +477,7 @@ void Lexicon_Ru() int input_length; int sfx; - char *suffix; + const char *suffix; int wlen; int len; int check_root; @@ -495,7 +495,7 @@ void Lexicon_Ru() static char vowels[] = {0xa3,0xc0,0xc1,0xc5,0xc9,0xcf,0xd1,0xd5,0xd9,0xdc,0}; typedef struct { - char *suffix; + const char *suffix; int syllables; } SUFFIX; @@ -1173,7 +1173,7 @@ int x; #define TEXT "Hello world." #define TEXT_SSML ("" TEXT "") static void -speak(char *text) +speak(const char *text) { int result; result = espeak_Synth(text, strlen(text) + 1, 0, POS_CHARACTER, 0, espeakSSML, NULL, NULL); @@ -1216,7 +1216,7 @@ result = espeak_SetVoiceByProperties(&voice); } -char* text1 = "Hello World2. This is the second sentence"; +const char* text1 = "Hello World2. This is the second sentence"; void TestTest(int control) {//======================= diff --git a/src/intonation.cpp b/src/intonation.cpp index b71a9bce..14008fe8 100755 --- a/src/intonation.cpp +++ b/src/intonation.cpp @@ -811,10 +811,14 @@ void Translator::CalcPitches_Tone(int clause_tone) PHONEME_LIST *p; int ix; int count_stressed=0; - int count_stressed2=0; int final_stressed=0; int tone_ph; + PHONEME_TAB *tph; + PHONEME_TAB *prev_tph; // forget across word boundary + PHONEME_TAB *prevw_tph; // remember across word boundary + PHONEME_TAB *prev2_tph; // 2 tones previous + PHONEME_LIST *prev_p; int pitch_adjust = 13; // pitch gradient through the clause - inital value int pitch_decrement = 3; // decrease by this for each stressed syllable @@ -845,6 +849,62 @@ void Translator::CalcPitches_Tone(int clause_tone) } + prev_p = p = &phoneme_list[0]; + prev_tph = prevw_tph = phoneme_tab[phonPAUSE]; + + // perform tone sandhi + for(ix=0; ixnewword) && ((option_tone1 & 1)==0)) + { + prev_tph = phoneme_tab[phonPAUSE]; // forget across word boundaries + } + + if(p->type == phVOWEL) + { + tone_ph = p->tone_ph; + if(tone_ph == 0) + p->tone_ph = tone_ph = LookupPh("11"); // default tone 5 + + tph = phoneme_tab[tone_ph]; + + // Mandarin + if(translator_name == L('z','h')) + { + if(prev_tph->mnemonic == 0x343132) // [214] + { + if(tph->mnemonic == 0x343132) // [214] + prev_p->tone_ph = LookupPh("35"); + else + prev_p->tone_ph = LookupPh("21"); + } + if((prev_tph->mnemonic == 0x3135) && (tph->mnemonic == 0x3135)) // [51] + [51] + { + prev_p->tone_ph = LookupPh("53"); + } + + if(tph->mnemonic == 0x3131) // [11] Tone 5 + { + // tone 5, change its level depending on the previous tone (across word boundaries) + if(prevw_tph->mnemonic == 0x3535) + p->tone_ph = LookupPh("22"); + if(prevw_tph->mnemonic == 0x3533) + p->tone_ph = LookupPh("33"); + if(prevw_tph->mnemonic == 0x343132) + p->tone_ph = LookupPh("44"); + + // tone 5 is unstressed (shorter) + p->tone = 1; // diminished stress + } + } + + prev_p = p; + prev2_tph = prevw_tph; + prevw_tph = prev_tph = tph; + } + } + + // convert tone numbers to pitch p = &phoneme_list[0]; for(ix=0; ixtone_ph; - if(p->tone >= 2) + if(p->tone >= 0) // TEST, consider all syllables as stressed { - // a stressed syllable - if(p->tone >= 4) + if(ix == final_stressed) { - - count_stressed2++; - if(count_stressed2 == count_stressed) - { - // the last stressed syllable - pitch_adjust = pitch_low; - } - else - { - pitch_adjust -= pitch_decrement; - if(pitch_adjust <= pitch_low) - pitch_adjust = pitch_high; - } + // the last stressed syllable + pitch_adjust = pitch_low; + } + else + { + pitch_adjust -= pitch_decrement; + if(pitch_adjust <= pitch_low) + pitch_adjust = pitch_high; } if(tone_ph ==0) diff --git a/src/numbers.cpp b/src/numbers.cpp index de9bfc1e..9c9ade9e 100644 --- a/src/numbers.cpp +++ b/src/numbers.cpp @@ -19,7 +19,6 @@ #include "StdAfx.h" - #include #include #include @@ -211,7 +210,7 @@ int Translator::TranslateRoman(char *word, char *ph_out) unsigned int flags; char number_chars[N_WORD_BYTES]; - static char *roman_numbers = "ixcmvld"; + static const char *roman_numbers = "ixcmvld"; static int roman_values[] = {1,10,100,1000,5,50,500}; acc = 0; @@ -504,8 +503,8 @@ int Translator::LookupNum3(int value, char *ph_out, int suppress_null, int thous -static char *M_Variant(int value) -{//============================== +static const char *M_Variant(int value) +{//==================================== // returns M, or perhaps MA for some cases if(((value % 100)>20) || ((value % 100)<10)) // but not teens, 10 to 19 diff --git a/src/readclause.cpp b/src/readclause.cpp index fd172aa8..f91e6e02 100644 --- a/src/readclause.cpp +++ b/src/readclause.cpp @@ -38,7 +38,7 @@ #define N_XML_BUF 256 -char *xmlbase = ""; // base URL from +const char *xmlbase = ""; // base URL from int namedata_ix=0; int n_namedata = 0; @@ -454,23 +454,19 @@ static int GetC(void) static void UngetC(int c) {//====================== ungot_char = c; - - if((f_input != NULL) && feof(f_input)) - { -// ungetc(' ',f_input); - } } -const char *Translator::LookupSpecial(char *string) -{//================================================ +const char *Translator::LookupSpecial(const char *string) +{//====================================================== unsigned int flags; char phonemes[55]; char phonemes2[55]; static char buf[60]; + char *string1 = (char *)string; - if(LookupDictList(&string,phonemes,&flags,0)) + if(LookupDictList(&string1,phonemes,&flags,0)) { SetWordStress(phonemes,flags,-1,0); DecodePhonemes(phonemes,phonemes2); @@ -706,13 +702,13 @@ MNEM_TAB ssmltags[] = { -static char *VoiceFromStack() -{//========================== +static const char *VoiceFromStack() +{//================================ // Use the voice properties from the SSML stack to choose a voice, and switch // to that voice if it's not the current voice int ix; SSML_STACK *sp; - char *v_id; + const char *v_id; espeak_VOICE voice_select; char voice_name[40]; char language[40]; @@ -1083,7 +1079,7 @@ static int GetVoiceAttributes(wchar_t *pw, int tag_type) wchar_t *name; wchar_t *age; wchar_t *variant; - char *new_voice_id; + const char *new_voice_id; static const MNEM_TAB mnem_gender[] = { {"male", 1}, diff --git a/src/speak_lib.cpp b/src/speak_lib.cpp index 395ec789..f4b1dc3f 100644 --- a/src/speak_lib.cpp +++ b/src/speak_lib.cpp @@ -365,7 +365,9 @@ static espeak_ERROR Synthesize(unsigned int unique_identifier, const void *text, int length; int finished = 0; int count_buffers = 0; +#ifdef USE_ASYNC uint32_t a_write_pos=0; +#endif #ifdef DEBUG_ENABLED if (text) diff --git a/src/speak_lib.h b/src/speak_lib.h index 06d4d869..b29f6466 100644 --- a/src/speak_lib.h +++ b/src/speak_lib.h @@ -447,9 +447,9 @@ void espeak_CompileDictionary(const char *path, FILE *log); // voice table typedef struct { - char *name; // a given name for this voice. UTF8 string. - char *languages; // list of pairs of (byte) priority + (string) language (and dialect qualifier) - char *identifier; // the filename for this voice within espeak-data/voices + const char *name; // a given name for this voice. UTF8 string. + const char *languages; // list of pairs of (byte) priority + (string) language (and dialect qualifier) + const char *identifier; // the filename for this voice within espeak-data/voices unsigned char gender; // 0=none 1=male, 2=female, unsigned char age; // 0=not specified, or age in years unsigned char variant; // only used when passed as a parameter to espeak_SetVoiceByProperties diff --git a/src/synthdata.cpp b/src/synthdata.cpp index 156f5791..e6b42e37 100755 --- a/src/synthdata.cpp +++ b/src/synthdata.cpp @@ -35,7 +35,7 @@ #include "translate.h" #include "wave.h" -const char *version_string = "1.29.12 29.Oct.07"; +const char *version_string = "1.29.15 01.Nov.07"; const int version_phdata = 0x012901; int option_device_number = -1; diff --git a/src/synthesize.cpp b/src/synthesize.cpp index 7f6e996f..da505426 100755 --- a/src/synthesize.cpp +++ b/src/synthesize.cpp @@ -1541,6 +1541,10 @@ int SpeakNextClause(FILE *f_in, const void *text_in, int control) // entries in the wavegen command queue p_text = translator->TranslateClause(f_text,p_text,&clause_tone,&voice_change); + translator->CalcPitches(clause_tone); + translator->CalcLengths(); + + translator->GetTranslatedPhonemeString(translator->phon_out,sizeof(translator->phon_out)); if(option_phonemes > 0) { fprintf(f_trans,"%s\n",translator->phon_out); @@ -1550,8 +1554,6 @@ int SpeakNextClause(FILE *f_in, const void *text_in, int control) phoneme_callback(translator->phon_out); } - translator->CalcPitches(clause_tone); - translator->CalcLengths(); if(skipping_text) { diff --git a/src/tr_languages.cpp b/src/tr_languages.cpp index 373f8e52..c6238a3f 100644 --- a/src/tr_languages.cpp +++ b/src/tr_languages.cpp @@ -535,7 +535,7 @@ SetLengthMods(tr,3); // all equal { static int stress_amps_sk[8] = {16,16, 20,20, 20,24, 24,22 }; static int stress_lengths_sk[8] = {190,190, 210,210, 0,0, 210,210}; - static char *sk_voiced = "bdgjlmnrvwzaeiouy"; + static const char *sk_voiced = "bdgjlmnrvwzaeiouy"; tr = new Translator(); SetupTranslator(tr,stress_lengths_sk,stress_amps_sk); @@ -647,18 +647,18 @@ SetLengthMods(tr,3); // all equal break; case L('z','h'): - case L_qa + 'a': // Test qaa { - static int stress_lengths_qaa[8] = {200,200, 248,248, 248,0, 248,250}; - static int stress_amps_qaa[] = {16,16, 20,20, 24,24, 24,22 }; + static int stress_lengths_qaa[8] = {220,150, 230,230, 230,0, 230,250}; + static int stress_amps_qaa[] = {22,18, 22,22, 22,22, 22,22 }; tr = new Translator(); SetupTranslator(tr,stress_lengths_qaa,stress_amps_qaa); - tr->langopts.stress_rule = 0; + tr->langopts.stress_rule = 3; // stress on final syllable of a "word" + tr->langopts.stress_flags = 1; // don't automatically set diminished stress (may be set in the intonation module) tr->langopts.vowel_pause = 0; tr->langopts.intonation = 1; // Tone language, use CalcPitches_Tone() rather than CalcPitches() tr->langopts.length_mods0 = tr->langopts.length_mods; // don't lengthen vowels in the last syllable - tr->langopts.tone_numbers = 9; + tr->langopts.tone_numbers = 9; // a number after letters indicates a tone number (eg. pinyin or jyutping) tr->langopts.ideographs = 1; tr->langopts.word_gap = 0x5; // length of a final vowel is less dependent on the next consonant, don't merge consonant with next word } diff --git a/src/translate.cpp b/src/translate.cpp index 1e786e17..54010788 100755 --- a/src/translate.cpp +++ b/src/translate.cpp @@ -513,8 +513,8 @@ int utf8_out(unsigned int c, char *buf) } // end of utf8_out -int utf8_in(int *c, char *buf, int backwards) -{//========================================== +int utf8_in(int *c, const char *buf, int backwards) +{//================================================ int c1; int n_bytes; int ix; @@ -1116,7 +1116,7 @@ int Translator::TranslateWord2(char *word, WORD_TAB *wtab, int pre_pause, int ne int source_ix; int len; int sylimit; // max. number of syllables in a word to be combined with a preceding preposition - char *new_language; + const char *new_language; unsigned char bad_phoneme[4]; len = wtab->length; @@ -1769,6 +1769,12 @@ void *Translator::TranslateClause(FILE *f_text, const void *vp_input, int *tone_ prev_out2 = prev_out; utf8_in(&prev_out,&sbuf[ix-1],1); // prev_out = sbuf[ix-1]; + if(langopts.tone_numbers && isdigit(prev_out) && IsAlpha(prev_out2)) + { + // tone numbers can be part of a word, consider them as alphabetic + prev_out = 'a'; + } + if(prev_in2 != 0) { prev_in = prev_in2; @@ -2270,7 +2276,6 @@ if((c == '/') && (langopts.testing & 2) && isdigit(next_in) && IsAlpha(prev_out) prev_clause_pause = clause_pause; - GetTranslatedPhonemeString(phon_out,sizeof(phon_out)); *tone_out = tone; new_sentence = 0; diff --git a/src/translate.h b/src/translate.h index 3bc19465..b40b4d10 100755 --- a/src/translate.h +++ b/src/translate.h @@ -178,6 +178,7 @@ // match 1 pre 2 post 0 - use common phoneme string // match 1 pre 2 post 3 0 - empty phoneme string +typedef const char * constcharptr; typedef struct { int points; @@ -351,6 +352,7 @@ public: int LoadDictionary(const char *name, int no_error); virtual void CalcLengths(); virtual void CalcPitches(int clause_tone); + void GetTranslatedPhonemeString(char *phon_out, int n_phon_out); LANGUAGE_OPTIONS langopts; int translator_name; @@ -385,7 +387,6 @@ private: int TranslateWord2(char *word, WORD_TAB *wtab, int pre_pause, int next_pause); int TranslateLetter(char *letter, char *phonemes, int control); void SetSpellingStress(char *phonemes, int control); - void GetTranslatedPhonemeString(char *phon_out, int n_phon_out); void WriteMnemonic(int *ix, int mnem); void MakePhonemeList(int post_pause, int new_sentence); int SubstitutePhonemes(PHONEME_LIST2 *plist_out); @@ -393,8 +394,8 @@ private: int ReadClause(FILE *f_in, char *buf, unsigned short *charix, int n_buf); int AnnouncePunctuation(int c1, int c2, char *buf, int ix); - int LookupDict2(char *word, char *word2, char *phonetic, unsigned int *flags, int end_flags); - const char *LookupSpecial(char *string); + const char *LookupDict2(const char *word, const char *word2, char *phonetic, unsigned int *flags, int end_flags); + const char *LookupSpecial(const char *string); const char *LookupCharName(int c); int LookupNum2(int value, int control, char *ph_out); int LookupNum3(int value, char *ph_out, int suppress_null, int thousandplex, int prev_thousands); @@ -410,7 +411,7 @@ private: void ApplySpecialAttribute(char *phonemes, int dict_flags); int IsLetter(int letter, int group); - int IsLetterGroup(char *word, int group); + int IsLetterGroup(char *word, int group, int pre); void CalcPitches_Tone(int clause_tone); @@ -424,7 +425,7 @@ protected: int IsVowel(int letter); int LookupDictList(char **wordptr, char *ph_out, unsigned int *flags, int end_flags); - int Lookup(char *word, char *ph_out); + int Lookup(const char *word, char *ph_out); // groups1 and groups2 are indexes into data_dictrules, set up by InitGroups() @@ -521,7 +522,7 @@ void LoadConfig(void); int PhonemeCode(unsigned int mnem); void ChangeWordStress(Translator *tr, char *word, int new_stress); int TransposeAlphabet(char *text, int offset, int min, int max); -int utf8_in(int *c, char *buf, int backwards); +int utf8_in(int *c, const char *buf, int backwards); int utf8_out(unsigned int c, char *buf); int lookupwchar(const unsigned short *list,int c); int Eof(void); diff --git a/src/transldlg.cpp b/src/transldlg.cpp index 178701b8..02be6ae4 100755 --- a/src/transldlg.cpp +++ b/src/transldlg.cpp @@ -333,13 +333,14 @@ void TranslDlg::OnCommand(wxCommandEvent& event) while((vp != NULL) && (n_ph_list < N_PH_LIST)) { vp = translator->TranslateClause(NULL,vp,&clause_tone,NULL); + translator->CalcPitches(clause_tone); + translator->CalcLengths(); + translator->GetTranslatedPhonemeString(translator->phon_out,sizeof(translator->phon_out)); if(clause_count++ > 0) strcat(phon_out," ||"); strcat(phon_out,translator->phon_out); t_phonetic->SetValue(wxString(translator->phon_out,wxConvLocal)); - translator->CalcPitches(clause_tone); - translator->CalcLengths(); if((n_ph_list + n_phoneme_list) >= N_PH_LIST) { diff --git a/src/voice.h b/src/voice.h index 240f6d26..105d443d 100644 --- a/src/voice.h +++ b/src/voice.h @@ -67,7 +67,7 @@ extern USHORT voice_pcnt[N_PEAKS+1][3]; extern voice_t *voice; extern int tone_points[10]; -char *SelectVoice(espeak_VOICE *voice_select); +const char *SelectVoice(espeak_VOICE *voice_select); voice_t *LoadVoice(const char *voice_name, int control); voice_t *LoadVoiceVariant(const char *voice_name, int variant); void DoVoiceChange(voice_t *v); diff --git a/src/voices.cpp b/src/voices.cpp index 56c32d1b..52f56bcf 100755 --- a/src/voices.cpp +++ b/src/voices.cpp @@ -482,7 +482,7 @@ voice_t *LoadVoice(const char *vname, int control) char translator_name[40]; char new_dictionary[40]; char phonemes_name[40]; - char *language_type; + const char *language_type; char buf[200]; char path_voices[sizeof(path_home)+12]; char langname[4]; @@ -1005,7 +1005,7 @@ static int __cdecl VoiceScoreSorter(const void *p1, const void *p2) static int ScoreVoice(espeak_VOICE *voice_spec, int spec_n_parts, int spec_lang_len, espeak_VOICE *voice) {//====================================================================================================== int ix; - char *p; + const char *p; int c1, c2; int language_priority; int n_parts; @@ -1146,7 +1146,7 @@ static int SetVoiceScores(espeak_VOICE *voice_select, espeak_VOICE **voices, int int nv; // number of candidates int n_parts=0; int lang_len=0; - char *p; + const char *p; espeak_VOICE *vp; // count number of parts in the specified language @@ -1194,7 +1194,7 @@ static espeak_VOICE *SelectVoiceByName(espeak_VOICE **voices, const char *name) int match_fname = -1; int match_fname2 = -1; int match_name = -1; - char *id; + const char *id; int last_part_len; char last_part[41]; @@ -1236,8 +1236,8 @@ static espeak_VOICE *SelectVoiceByName(espeak_VOICE **voices, const char *name) -char *SelectVoice(espeak_VOICE *voice_select) -{//========================================== +char const *SelectVoice(espeak_VOICE *voice_select) +{//================================================ // Returns a path within espeak-voices, with a possible +variant suffix // variant is an output-only parameter int nv; // number of candidates @@ -1525,7 +1525,7 @@ espeak_ERROR SetVoiceByName(const char *name) espeak_ERROR SetVoiceByProperties(espeak_VOICE *voice_selector) {//============================================================ - char *voice_id; + const char *voice_id; voice_id = SelectVoice(voice_selector); diff --git a/src/vowelchart.cpp b/src/vowelchart.cpp index f4be56a6..e5053bcb 100644 --- a/src/vowelchart.cpp +++ b/src/vowelchart.cpp @@ -47,7 +47,7 @@ extern PHONEME_TAB_LIST phoneme_tab_list[N_PHONEME_TABS]; // size of the vowelchart png -#define WIDTH 1200 +#define WIDTH 1580 #define HEIGHT 800 @@ -131,8 +131,8 @@ static double log2a(double x) static int VowelX(int f2) {//====================== - return(WIDTH - int((log2a(f2) - 9.49)*WIDTH/1.8)); -// return(1024 - int((log2a(f2) - 9.50)*1020/1.8)); + return(WIDTH - int((log2a(f2) - 9.40)*WIDTH/1.9)); +// return(WIDTH - int((log2a(f2) - 9.49)*WIDTH/1.8)); } static int VowelY(int f1) @@ -168,7 +168,7 @@ static void DrawVowel(wxDC *dc, wxString name, int f1, int f2, int f3, int g1, i if(y < 0) y = 0; if(y > (HEIGHT-4)) y= (HEIGHT-4); if(x < 0) x = 0; - if(x > (WIDTH-8)) x = (WIDTH-8); + if(x > (WIDTH-12)) x = (WIDTH-12); r = z; g = 255; @@ -351,7 +351,7 @@ void VowelChart(int control, char *fname) if((ix % 100) == 0) dc.DrawText(wxString::Format(_T("%d"),ix),1,y); } - for(ix=800; ix<=2400; ix+=100) + for(ix=700; ix<=2400; ix+=100) { x = VowelX(ix); dc.DrawLine(x,0,x,HEIGHT); diff --git a/src/wave.cpp b/src/wave.cpp index cb3ab09a..cd9ccb2e 100755 --- a/src/wave.cpp +++ b/src/wave.cpp @@ -634,7 +634,7 @@ void wave_init() //> //