From 20f52f03012d64873ab79bb7693bfadbd376d144 Mon Sep 17 00:00:00 2001 From: jonsd Date: Sun, 20 Dec 2009 07:48:33 +0000 Subject: [PATCH] [1.42.21] New format for phoneme source files. Update phoneme data for Klatt synthesizer. git-svn-id: https://espeak.svn.sourceforge.net/svnroot/espeak/trunk@235 d46cf337-b52f-0410-862d-fd96e6ae7743 --- dictsource/dict_phonemes | 106 +- dictsource/hu_list | 8 + dictsource/hu_rules | 57 +- dictsource/ta_list | 13 +- dictsource/ta_rules | 155 +- phsource/b/xb | Bin 2914 -> 3172 bytes phsource/compile_report | 1240 ++---- phsource/d/d | Bin 2913 -> 3171 bytes phsource/d/d_ | Bin 2914 -> 3172 bytes phsource/d/dr | Bin 652 -> 824 bytes phsource/d/tap1 | Bin 2916 -> 3174 bytes phsource/d/tap3 | Bin 3880 -> 4224 bytes phsource/d/xd | Bin 2914 -> 3172 bytes phsource/dzh/dzh | Bin 971 -> 1229 bytes phsource/dzh/dzh_ | Bin 2915 -> 3174 bytes phsource/dzh/xdz_pzd | Bin 2919 -> 3177 bytes phsource/dzh/xdzh | Bin 2916 -> 3174 bytes phsource/g/g | Bin 969 -> 1227 bytes phsource/g/g_ | Bin 2914 -> 1228 bytes phsource/g/xg | Bin 2914 -> 3172 bytes phsource/j/_j | Bin 682 -> 854 bytes phsource/j/j@ | Bin 1337 -> 1678 bytes phsource/j/j_ | Bin 1012 -> 1270 bytes phsource/j/ja | Bin 1336 -> 1680 bytes phsource/j/je | Bin 1310 -> 1654 bytes phsource/j/ji | Bin 984 -> 1242 bytes phsource/j/jo | Bin 1630 -> 2060 bytes phsource/j/ju | Bin 1310 -> 1654 bytes phsource/j/xj | Bin 682 -> 854 bytes phsource/j2/_j2 | Bin 26051 -> 28373 bytes phsource/j2/j2@ | Bin 26050 -> 28373 bytes phsource/j2/j2a | Bin 33763 -> 36773 bytes phsource/j2/j2e | Bin 26051 -> 28373 bytes phsource/j2/j2i | Bin 23159 -> 25223 bytes phsource/j2/j2o | Bin 13519 -> 14723 bytes phsource/j2/j2u | Bin 26050 -> 28373 bytes phsource/j2/xj2 | Bin 683 -> 855 bytes phsource/l/L1_@L | Bin 4355 -> 5387 bytes phsource/l/L1_aL | Bin 4031 -> 4977 bytes phsource/l/L1_eL | Bin 3641 -> 4501 bytes phsource/l/L1_iL | Bin 3989 -> 4935 bytes phsource/l/L1_oL | Bin 3985 -> 4931 bytes phsource/l/L1_uL | Bin 3171 -> 3945 bytes phsource/l/L2_@L | Bin 4355 -> 5387 bytes phsource/l/L2_aL | Bin 4031 -> 4977 bytes phsource/l/L2_eL | Bin 3641 -> 4501 bytes phsource/l/L2_iL | Bin 3989 -> 4935 bytes phsource/l/L2_oL | Bin 3985 -> 4931 bytes phsource/l/L2_uL | Bin 3171 -> 3945 bytes phsource/l/_l | Bin 1018 -> 1276 bytes phsource/l/l | Bin 673 -> 845 bytes phsource/l/l@ | Bin 986 -> 1244 bytes phsource/l/l_ | Bin 674 -> 846 bytes phsource/l/la | Bin 690 -> 862 bytes phsource/l/le | Bin 682 -> 854 bytes phsource/l/li | Bin 484 -> 742 bytes phsource/l/lo | Bin 1264 -> 1608 bytes phsource/l/lu | Bin 988 -> 1246 bytes phsource/l/xl | Bin 1032 -> 1290 bytes phsource/l^/_l^ | Bin 1327 -> 1671 bytes phsource/l^/j2@ | Bin 26050 -> 28373 bytes phsource/l^/j2a | Bin 33763 -> 36773 bytes phsource/l^/j2e | Bin 26051 -> 28373 bytes phsource/l^/j2i | Bin 23159 -> 25223 bytes phsource/l^/j2o | Bin 13519 -> 14723 bytes phsource/l^/j2u | Bin 26051 -> 28373 bytes phsource/l^/l^ | Bin 1326 -> 1670 bytes phsource/l^/l_rfx | Bin 999 -> 1261 bytes phsource/ph_afrikaans | 230 +- phsource/ph_albanian | 309 +- phsource/ph_armenian | 154 +- phsource/ph_base2 | 179 +- phsource/ph_catalan | 59 +- phsource/ph_consonants | 125 + phsource/ph_croatian | 213 +- phsource/ph_czech | 20 +- phsource/ph_danish | 96 +- phsource/ph_dutch | 157 +- phsource/ph_english | 421 +- phsource/ph_english_n | 185 +- phsource/ph_english_rp | 208 +- phsource/ph_english_sc | 308 +- phsource/ph_english_us | 242 +- phsource/ph_english_wi | 152 +- phsource/ph_english_wm | 181 +- phsource/ph_esperanto | 56 +- phsource/ph_finnish | 246 +- phsource/ph_french | 874 +++-- phsource/ph_french_ca | 47 +- phsource/ph_german | 276 +- phsource/ph_greek | 64 +- phsource/ph_greek_ancient | 40 +- phsource/ph_hindi | 468 +-- phsource/ph_hungarian | 177 +- phsource/ph_icelandic | 202 +- phsource/ph_indonesian | 73 +- phsource/ph_italian | 80 +- phsource/ph_kinyarwanda | 153 +- phsource/ph_korean | 129 - phsource/ph_kurdish | 103 +- phsource/ph_latin | 113 +- phsource/ph_latvian | 176 +- phsource/ph_lojban | 20 +- phsource/ph_macedonian | 24 +- phsource/ph_norwegian | 126 +- phsource/ph_polish | 170 +- phsource/ph_portugal | 117 +- phsource/ph_pt_brazil | 168 +- phsource/ph_romanian | 285 +- phsource/ph_russian | 456 ++- phsource/ph_serbian | 148 +- phsource/ph_slovak | 156 +- phsource/ph_spanish | 80 +- phsource/ph_swahili | 84 +- phsource/ph_swedish | 121 +- phsource/ph_tamil | 260 +- phsource/ph_turkish | 111 +- phsource/ph_vi | 172 +- phsource/ph_welsh | 142 +- phsource/ph_zh | 372 +- phsource/ph_zh_yue | 227 +- phsource/phonemes | 1644 ++++---- phsource/r/_r | Bin 1006 -> 1264 bytes phsource/r/a_ | Bin 5202 -> 5632 bytes phsource/r/r | Bin 1005 -> 1263 bytes phsource/r/r@ | Bin 998 -> 1256 bytes phsource/r/ra | Bin 994 -> 1252 bytes phsource/r/re | Bin 998 -> 1256 bytes phsource/r/ri | Bin 982 -> 1240 bytes phsource/r/ro | Bin 952 -> 1210 bytes phsource/r/rr | Bin 1006 -> 1264 bytes phsource/r/ru | Bin 1014 -> 1272 bytes phsource/r/tr | Bin 678 -> 850 bytes phsource/r/trr | Bin 1006 -> 1265 bytes phsource/r2/r2@ | Bin 47259 -> 51473 bytes phsource/r2/r2a | Bin 21231 -> 23123 bytes phsource/r2/r2e | Bin 47259 -> 51473 bytes phsource/r2/r2i | Bin 22195 -> 24173 bytes phsource/r2/r2o | Bin 24123 -> 26273 bytes phsource/r2/r2u | Bin 47259 -> 51473 bytes phsource/r3/@tap | Bin 3540 -> 3970 bytes phsource/r3/@tap2 | Bin 3541 -> 3971 bytes phsource/r3/r_ | Bin 4166 -> 4510 bytes phsource/r3/r_n | Bin 4167 -> 4511 bytes phsource/r3/r_trill | Bin 5811 -> 6327 bytes phsource/r3/r_trill2 | Bin 4848 -> 5278 bytes phsource/r3/r_uvl | Bin 6241 -> 6757 bytes phsource/vdiph/aae | Bin 2319 -> 2921 bytes phsource/vdiph/ae_2 | Bin 8462 -> 10698 bytes phsource/vdiph/ai | Bin 6238 -> 6754 bytes phsource/vdiph/ai_2 | Bin 2320 -> 2922 bytes phsource/vdiph/ai_5 | Bin 6238 -> 6756 bytes phsource/vdiph/ai_6 | Bin 2320 -> 2922 bytes phsource/vdiph/ai_8 | Bin 7276 -> 7878 bytes phsource/vdiph/aoo | Bin 1557 -> 1987 bytes phsource/vdiph/au | Bin 8538 -> 11032 bytes phsource/vdiph/au_3 | Bin 8538 -> 11034 bytes phsource/vdiph/eei | Bin 7835 -> 9897 bytes phsource/vdiph/vowelchart.png | Bin 103615 -> 103689 bytes phsource/vdiph2/ee@_2 | Bin 7872 -> 9939 bytes phsource/voc/dh | Bin 4842 -> 5272 bytes phsource/voc/dh_ | Bin 4843 -> 5273 bytes phsource/voc/j | Bin 5805 -> 6321 bytes phsource/voc/z | Bin 5805 -> 5271 bytes phsource/voc/z_ | Bin 4842 -> 5272 bytes phsource/voc/z_pzd | Bin 4845 -> 5275 bytes phsource/voc/z_pzd_ | Bin 4846 -> 5276 bytes phsource/vowel/& | Bin 6237 -> 6753 bytes phsource/vowel/0 | Bin 1265 -> 1609 bytes phsource/vowel/@ | Bin 995 -> 1253 bytes phsource/vowel/@- | Bin 996 -> 1254 bytes phsource/vowel/V_3 | Bin 6239 -> 6755 bytes phsource/vowel/a | Bin 1281 -> 1625 bytes phsource/vowel/a_2 | Bin 6239 -> 6755 bytes phsource/vowel/a_3 | Bin 9347 -> 10121 bytes phsource/vowel/a_4 | Bin 1281 -> 1627 bytes phsource/vowel/a_5 | Bin 8311 -> 8999 bytes phsource/vowel/a_6 | Bin 12455 -> 13487 bytes phsource/vowel/aa_2 | Bin 8480 -> 10716 bytes phsource/vowel/aa_5 | Bin 9938 -> 12520 bytes phsource/vowel/ee | Bin 6016 -> 6790 bytes phsource/vowel/ee_1 | Bin 7872 -> 9938 bytes phsource/vowel/ee_5 | Bin 9346 -> 10122 bytes phsource/vowel/ii_2 | Bin 4020 -> 4536 bytes phsource/vowel/ii_4 | Bin 1268 -> 1612 bytes phsource/vowel/ii_final | Bin 7280 -> 7882 bytes phsource/vowel/vowelchart.png | Bin 73659 -> 73539 bytes phsource/vowelr/r-voc | Bin 12457 -> 13489 bytes phsource/vwl_en/aI@ | Bin 7515 -> 9493 bytes phsource/vwl_en/aU@ | Bin 7687 -> 9665 bytes phsource/vwl_en_rp/aU@ | Bin 7687 -> 9665 bytes phsource/vwl_hi/l-voc | Bin 38585 -> 42025 bytes phsource/vwl_ro/ii- | Bin 997 -> 1255 bytes phsource/w/_w | Bin 1006 -> 1264 bytes phsource/w/iw_ | Bin 1013 -> 1271 bytes phsource/w/w | Bin 679 -> 851 bytes phsource/w/w@ | Bin 982 -> 1240 bytes phsource/w/w_ | Bin 1012 -> 1270 bytes phsource/w/wa | Bin 974 -> 1232 bytes phsource/w/we | Bin 986 -> 1244 bytes phsource/w/wi | Bin 962 -> 1220 bytes phsource/w/wi2 | Bin 1283 -> 1627 bytes phsource/w/wo | Bin 942 -> 1200 bytes phsource/w/wu | Bin 970 -> 1228 bytes phsource/w/xw | Bin 686 -> 858 bytes platforms/windows/windows_cmd/src/speech.h | 2 +- platforms/windows/windows_dll/src/speech.h | 1 + platforms/windows/windows_sapi/src/speech.h | 2 +- src/compiledata.cpp | 3818 +++++++++++-------- src/dictionary.cpp | 141 +- src/espeak.cpp | 10 +- src/espeakedit.cpp | 6 +- src/extras.cpp | 15 +- src/intonation.cpp | 4 +- src/klatt.cpp | 137 +- src/phoneme.h | 29 +- src/phonemelist.cpp | 314 +- src/prosodydisplay.cpp | 7 +- src/setlengths.cpp | 14 +- src/speak.cpp | 10 +- src/spectdisplay.cpp | 1 + src/spectseq.cpp | 6 +- src/synth_mbrola.cpp | 23 +- src/synthdata.cpp | 815 ++-- src/synthesize.cpp | 444 ++- src/synthesize.h | 147 +- src/tr_languages.cpp | 93 +- src/translate.cpp | 10 +- src/translate.h | 11 +- src/vowelchart.cpp | 16 +- src/wavegen.cpp | 24 +- 231 files changed, 10132 insertions(+), 8946 deletions(-) create mode 100644 phsource/ph_consonants delete mode 100644 phsource/ph_korean diff --git a/dictsource/dict_phonemes b/dictsource/dict_phonemes index 15ba6c5a..df81e304 100644 --- a/dictsource/dict_phonemes +++ b/dictsource/dict_phonemes @@ -15,18 +15,20 @@ n N p r s S t T tS v w x x2 z Z -Dictionary bn_dict +Dictionary ne_dict -& a a: a~ e E e~ i -I i: i:~ i~ l- o O o: -O~ o~ r- U u u: u:~ u~ -V +@ @/ @2 @3 a aI aU a~ +e E eI eU e~ E~ i I +i~ l- o O o: oI oU O~ +o~ r- u uI u~ V VI VU +V~ -* b B bh c C ch d -d. dh dh. g gh h j J -Jh k kh l m n N n. -n^ p ph Q r r. s S -s. t t. th th. tS x z +- : b bh c ch d d. +dh f g gh h H j J +Jh k kh l l. m n N +n. n^ p ph Q q r r. +s S s. t T t. th v +w x z z. Dictionary ca_dict @@ -141,18 +143,6 @@ N n^ p Q R R2 s t T tS v v# w x z -Dictionary eu_dict - -a aI aU e eI eU i o -oI u Y - -* ** : ; b B c d -D f g h j J k l -l^ m n n^ p Q r R -s S t tS ts tz v w -x z - - Dictionary fi_dict & &i &y a a2 ai au e @@ -222,9 +212,9 @@ A a: E e: i i: o o: u u: Y y y: Y: - : b c d dZ f g -h j J k l m n n^ -p r R R2 s S s2 t -tS ts v z Z +h j J k l m n N +n^ p r R R2 s S s2 +t tS ts v z Z Dictionary hy_dict @@ -283,20 +273,6 @@ k l m n N p R s S t tS v w x z Z -Dictionary kn_dict - -a a: aI aU e E e: i -I i: o o: r- u u: V -y - -: b bh c ch d d. dh -dh. dZ f g gh h j J -Jh k kh l l. m n N -n. n^ p ph r R R2 s -S s. S; t t. th th. tS -v w z - - Dictionary ku_dict 8 a e E E# eI eU i @@ -357,31 +333,6 @@ S; t t. th th. tS v w z z. -Dictionary mn_dict - -a e i o O o: U u - -: ; c f g j k L -m n p p# R s S t -t# tS ts ts# w x - - -Dictionary ne_dict - -@ @/ @2 @3 a aI aU a~ -e E eI eU e~ E~ i I -i~ l- o O o: oI oU O~ -o~ r- u uI u~ V VI VU -V~ - -- : b bh c ch d d. -dh f g gh h H j J -Jh k kh l l. m n N -n. n^ p ph Q q r r. -s S s. t T t. th v -w x z z. - - Dictionary nl_dict 8 @ @- A a: E e: EI @@ -421,7 +372,7 @@ Dictionary pa_dict @ a a~ e E e~ E~ i I i~ I~ o O O~ o~ r- -U u u~ U~ V V~ +U u U~ u~ V V~ : ; b bh c ch d d. dh dh. f g gh h H j @@ -437,10 +388,10 @@ a E E# E~ i O O~ u y : ; b c C d d; dZ -dz dz; f g h j k l -m n N n^ p r R s -S s; S; t t; tS ts ts; -tS; v w x z Z Z; +dz f g h j k l m +n N n^ p r R s S +s; S; t t; tS ts tS; v +w x z Z Z; Dictionary prs_dict @@ -483,7 +434,7 @@ z; Z; Dictionary ru_dict -8 @- A a E e E# E2 +8 @- a A e E E# E2 E3 i I I# I2 I3 I^ ja ju o O u u" u# V V# y Y @@ -491,8 +442,8 @@ y Y * ; b d d; dZ; f g j k l l^ m m; n n^ p r R s S s; S; t -t; ts ts; tS; v x z Z -z; Z; +t; ts tS; v x z Z z; +Z; Dictionary rw_dict @@ -585,7 +536,7 @@ u@ uI y y@ yI b c d D f g h j J k kh l m n N n^ -p Q r s s. t t[ ts; +p Q r s s. s; t t[ tS; v w x z Z z. @@ -596,11 +547,10 @@ i i. i[ iA iE io iou N- o o- ong ou u u@ ua uai uei uo y y& y@ yE yi yu -(u) ; C f h j k kh -l L m n N p ph q -r s s. S; t th ts ts. -ts. tS; tS; tsh v w x X -z. +; f h j k kh l l. +l^ m n N p ph r s +s. S; t th ts ts. ts. tS; +tS; tsh v w x z. Dictionary zhy_dict diff --git a/dictsource/hu_list b/dictsource/hu_list index 09d28cb5..7d03770b 100755 --- a/dictsource/hu_list +++ b/dictsource/hu_list @@ -146,6 +146,7 @@ _0-áig a:ig $alt2 (0-ra) nul:a:R2A (0-nál) nul:a:na:l (0-hoz) nul:a:hoz +(0-s) nul:a:S // entries with a single digit such as (2-i) also apply to 22, 32, etc, unless $only @@ -184,6 +185,8 @@ _0-áig a:ig $alt2 (3-ashoz) ha:R2mAShoz (3-at) ha:R2mAt (3-al) ha:R2om:Al +(3-asok) ha:R2mASok +(3-asoknak) ha:R2mASoknAk //4 number suffixes (4-el) ne:J:El //Nneed J: phoneme, not J phoneme contains one suffix) @@ -209,6 +212,10 @@ _0-áig a:ig $alt2 (7-től) he:t:Y:l (7-től) hEtEdike:tY:l $alt2 (7-essel) hEtES:El +(7-esen) hEtESEN +(7-eseknek) hEtESEknEk +(7-et) hEtEt +(7-em) hEtEm (10-es) tizES // use [i] not [i:] (10-est) tizESt (10-essel) tizES:El @@ -310,6 +317,7 @@ GYESEV JESEv $allcaps HÉV he:v $allcaps IPTV $abbrev $allcaps GDP dZi:di:pi: $allcaps +?2 GDP $abbrev $allcaps HSDPA $abbrev $allcaps ORTT $abbrev $allcaps ORFK oEREfka: $abbrev $allcaps diff --git a/dictsource/hu_rules b/dictsource/hu_rules index 953d3042..b9de82a3 100644 --- a/dictsource/hu_rules +++ b/dictsource/hu_rules @@ -16,6 +16,7 @@ 000_-) al (_ Al // ... but not 1000-al _) alattvaló AlAtvAlo: ahhoz Ahoz +?!2 auschwitz AuSvits .group á á a: @@ -149,6 +150,7 @@ hierar) ch (i h nyála) d (z d ren) dsz (erint d|s szaba) d (szájú d +menetren) dsz (erű d|s .group dz fogó) dz (kod ts @@ -265,10 +267,9 @@ _minde) gy (ik J: na) gysz (a Js na) gy (sokára J na) gy (siet J - ú) gy (se J + ú) gys (e J|S seho) gy (se J ho) gy (se J - ú) gy (se J na) gy (ság J he) gy (ség J e) gy (ség J @@ -278,6 +279,8 @@ _minde) gy (ik J: e) gy (sor J né) gy (sor J e) gy (es-egyedül J //need one J phoneme with this word, not J: phoneme + ú) gy (sem J + né) gy (sarok J .group h h h @@ -330,7 +333,6 @@ _minde) gy (ik J: fe) l (jegy l fe) l (jelen l fe) l (jár l - e) l (jö l lj l^j cé) l (já jj @@ -340,7 +342,7 @@ _minde) gy (ik J: A) lj (A l^j e) l (jut l e) l (jus l - + _e) lj (ö lj á) ll (j j beszé) lj jj bére) lj jj @@ -420,6 +422,10 @@ tulajdo) n (jog n elle) n (játék n elle) n (javallt n fé) ny (jel n^ + i) nj (ekció n^ + elle) n (jegy n + fe) nn (tartás n + fe) nn (sík n .group o o o @@ -486,6 +492,8 @@ danubiu) s s //a radio station name juventu) s s //a radio station name va) s (s S óriá) s S + látá) s (zavar S + hallá) s (zavar S @@ -647,7 +655,7 @@ motoro) ssz (emüveg Ss bőgé) ssz (erű Ss kavará) ssz (erű Ss _sa) ssz (eg Ss - + ké) ssz (úrás Ss .group sz sz s @@ -745,7 +753,7 @@ vörösmar) ty ti á) t (cikáz t á) t (caplat t á) t (sza t - á) t (jár t + á) tj (ár t|j á) t (szö t á) t (sző t á) t (szú t @@ -772,7 +780,6 @@ folyama) t (jel t szé) t t szé) tt t: á) t (sor t - á) t (sé t á) t (sze t á) t (sug t á) t (suh t @@ -817,6 +824,7 @@ fejeze) t (jel t ké) t (jegyű t krike) tt (játék t: mene) t (jegy t + mene) t (jeggy t szüne) t (jel t ú) t (jelző t ú) t (jog t @@ -826,6 +834,10 @@ folyama) t (sáv t ada) t (szolgáltat t _ú) t (sáv t négyze) t (centi t + á) tj (öt t|j + á) tj (ön t|j + á) t (süvít t + bará) tj (ára c: .group ts ts (_S2 tS //general rule with word end of ts letters @@ -895,6 +907,8 @@ indula) tsz (ó t|s dró) tsz (őr t|s lá) tsz (erész t|s skó) tsz (okny t|s + söté) tsz (őke t|s + á) ts (é t|S .group u u u @@ -944,7 +958,6 @@ indula) tsz (ó t|s befeje) z (te s bi) z (tons s bi) z (tos s - bron) z (sz z csontvá) z z e) z (t s ho) z (ta s @@ -956,37 +969,31 @@ csontvá) z z lefeje) z (te s lefeje) z (ték s pén) z (tár s - ré) z (sz z ré) z (serpenyő z tartó) z s - gá) z (sz z + gá) z (cső z - gé) z (sz z + ké) z (sz zz há) z (so z - há) z (sz z - lá) z (sz z + + má) zc (sz z mé) zc (sz z nehé) z (sé S nehé) z (súlyú z iga) zs (ág SS - iga) z (szí z + ga) zs (ág SS pén) z z - szá) z (sz z - tí) z (sz z - tű) z (sz z - ví) z (sz z - tor) z (szülött z tor) z (ság z _vité) z z _ví) z (s z ga) zs (ág zS - _gá) zsz (ámla zs: - _gá) zsz (ámlá zs: + _gá) zsz (ámla zs + _gá) zsz (ámlá zs _ré) zs (ó zS ő) zs (uta zS _vá) zs (or zS @@ -1004,15 +1011,14 @@ _szára) zs (ág SS ké) z (zsibbadás z ké) z (sérül z szű) z (sült z - házho) z (szállít z + gő) z (sugár z találko) z (t s eszkö) z (sor z gő) z (síp z matró) z (sapka z nehé) z (súly z - raj) z (szeg z - raj) z (szög z + zsz z|s //general exception. Need difference first z and second sz phoneme. For example, rajzszög, rajzszeg, mézszín words. pén) z (t s rende) z (ked s kocká) z (tat s @@ -1022,11 +1028,8 @@ különbö) z (tet s válto) z (tass s tájéko) z (tat s tájéko) z (tass s - mé) z (szín z bi) z (tat s rá) z (kód s - raj) z (szak z - hiú) z (szem z .group diff --git a/dictsource/ta_list b/dictsource/ta_list index c7e589e2..0e0fdcab 100644 --- a/dictsource/ta_list +++ b/dictsource/ta_list @@ -179,7 +179,6 @@ tamil தமிழ் $text பானம் $alt பாணம் $alt பாறம் $alt -பாரதி $alt பாரதம் $alt பரதம் $alt பாப $alt @@ -206,7 +205,11 @@ tamil தமிழ் $text போனஸ் $alt போகி $alt பாலா $alt +பூத $alt பாபா ba:ba: +பாக்கி $alt +பலி $alt +போதி $alt // initial த as [d] @@ -230,6 +233,12 @@ tamil தமிழ் $text தனம் $alt திக்கற்ற $alt தானு $alt +திட $alt + + + // initial ச as [tS] +சீ tSi: +சே tSe: கக $alt // initial க as [g] @@ -250,6 +259,8 @@ tamil தமிழ் $text கோபி $alt கச்சாமி $alt குரு $alt +கோர $alt பப pVpV +தீப் di:p diff --git a/dictsource/ta_rules b/dictsource/ta_rules index aff7c305..262bfad0 100644 --- a/dictsource/ta_rules +++ b/dictsource/ta_rules @@ -46,11 +46,14 @@ L01) க kV L01) க (B k க (ிரு k + க (ூட k க (ீத g க (ஜ gV _) க (ௌ g + _) க (ௌட்டில்ய k + _) கௌட (ில்ய kaUt. _) க (ம்பீர gV _) க (ந்தர்வ gV _) க (ோவிந்த g @@ -96,6 +99,26 @@ _) க (ுருவாய g _) க (ும்மிடிப்பூண் g _) க (ுஜராத g + _) க (ிரிதர g + _) க (ிரிஜா g + _) க (ோரம g + _) க (ோரப g + _) க (ோரக g + _) க (ோரத g + _) க (ர்ப gV + _) க (ோவா g + _) க (ாண்டீப g + _) க (ர்வ gV + _) க (ுருவா g + + _கல்) க (ி k + _கல்) க (ண்ட kV + _கல்) க (த்தா kV + கொல்) க (த்தா kV +கோயில்) க (ாளை k + _) குல்க (ந்த gulkV + _ராஜ) க (ும k + _ராஜ) க (ுல k .group ங @@ -119,6 +142,7 @@ ச் (_ tS ச்_) ச tSV // previous word ends in ச் ச்_) ச (B tS + _) ச (ெண்ட tS _) ச (ிட் tS _) ச (ின் tS @@ -130,11 +154,21 @@ _) ச (க்கரவர்த்தி tSV _) ச (ென்னை tS _) ச (ீன tS + _) ச (ீனிவா s _) ச (ித்தப்ப tS + _) ச (ிதம்பர tS + _) ச (ித்ரா tS + _) ச (ெல்லம tS + _) ச (துர் tSV + வி) ச (ித்திர tS _) சிரு (ஷ்டி sri ச (ாந்தி s. ச (ண்மு s.V + சங்க (ர s.VNkV + ச (ண்பக s.V + ச (ெண்பக s. + .group ஜ ஜ dZV @@ -158,7 +192,7 @@ _) ட (ோக்கியோ t. ிங்) ட (ன் t.V // -ington _) ட (ாக்க t. // talkies - + _) டிராக்ட (ர t.ira:gt.V .group ண ண n.V @@ -210,7 +244,10 @@ _) த (ூப d _) த (ீப d _) த (ைரிய d - _) த (ிட d + _) த (ிடீர d + _) த (ிடப d + _) த (ிடம d + _) த (ிடும d _) த (ிரவ d _) த (ிடீ d _) த (ிவச d @@ -263,7 +300,6 @@ _) த (ேவாம்ச d _) த (ிவ்ய d _) த (ிண்டிவன d - _) த (ுறை d _) த (ிண்டுக்கல d _) த (மயந்தி dV _) த (ுரோண d @@ -272,7 +308,14 @@ _) த (ிரௌபதி d _) த (கன dV _) த (ானுவ d - + _) த (னுஷ dV + _) த (ிடுக் d + _) த (டவை dV + _) த (ேவேந் d + _) த (ரிசி dV + _) த (ுரை d + _) த (ேவ d + _) த (ூசி d யு) த்த ddV யு) த்த(B dd @@ -299,8 +342,11 @@ _கோம) த (ி t _) திரு (ஷ்டி dri _) திரு (திரா dri - _) துர (ோண tr - _) திர (ௌபதி tr + _) து (ரோண t + _) தி (ரௌபதி t + _) து(ரோக d + _) தி (யாக t + .group ந @@ -328,8 +374,6 @@ _கோம) த (ி t ற்) ப (B p று) ப _pV று) ப(B _p - ன்) ப pV - ன்) ப (B p ம) ப pV ம) ப (ா p @@ -367,7 +411,7 @@ _கோம) த (ி t _) ப (ூதேவி b _) ப (ம்பாய bV _) ப (ாதுஷா b - _) ப (க்த bV + _) பக் (த bVk _) ப (லம bV _) ப (லவான bV _) ப (ிராமண b @@ -377,9 +421,9 @@ _கோம) த (ி t _) ப (ூமி b _) ப (ூலோக b _) ப (ூகோல b - _) ப (ூத b + _) ப (ூதம b + _) ப (ூதங் b _) ப (ுதன b - _) ப (லி bV _) ப (கவான bV _) ப (ௌதிக b _) ப (ரோட bV @@ -396,9 +440,11 @@ _கோம) த (ி t _) ப (ெங்களூர b _) ப (ூபாள b _) புத்த(K buddV + _) புத்த (ம்_புது puttV + _) புத்த (ம்_புதிய puttV + _) புத்த (க puttV _) புத் (தJ_புத+ put _) ப (னியன bV - கோ) ப (ி p _) ப (ாலச b _) ப (ாலக b _) ப (ாலமு b @@ -408,7 +454,7 @@ _கோம) த (ி t _) ப (ிரகதீ b _) ப (ொம்மை b _) ப (ொம்மல b - _) ப (ாக்கி b + _) ப (ாக்கிய b _) ப (ஸ bV _) ப (ாஷை b _) ப (ிரம்மை b @@ -421,28 +467,79 @@ _கோம) த (ி t _) ப (ாலாஜி b _) ப (ேட்டரி b _) ப (ோதை b - _) ப (ோதி b _) ப (ிக்கு b + _) ப (ீரங்கி b + _) ப (ூதத் b + _) ப (ந்தம bV + _) ப (ந்தங்கள bV + _) ப (ந்தத் bV + _) ப (வ்ய bV + _) ப (ுல்லாக்க b + _) ப (ாகம b + _) ப (ாகத b + _) ப (ாகங்க b + _) ப (ாசு b + _) ப (ாஸ்மதி b + _) ப (ாணி b + _) ப (லவீன bV + _) ப (லவந்த bV + _) ப (ாரதி b + _) ப (ாஸ்கர b + _) ப (யங்கர bV + _) ப (ர்மா bV + _) ப (யப் bV + _) ப (யந் bV + _) ப (யத் bV + _) ப (லிய bV + _) ப (ோதித் b + _) ப (ோதன b - _) பிர (ம்மன brV - _) பிர (ாமணன br - _) பிர (கஸ்பதி brV - _) பிர (கதீ brV - _) பிர (கலாதன prV - _) பிர (காஷ prV - _) பிர (காச prV - _) பிர (சாத prV - _) பிர (ே pr + கோ) ப (ி p + முரன்) ப (ாட p + சமன்) ப (ாட p + முன்) ப (கல pV + நன்) ப (கல pV + பின்) ப (கல pV + + _) பி (ரம்மன b + _) பி (ராமணன b + _) பி (ரகஸ்பதி b + _) பி (ரகதீ b + _) பி (ரகலாதன p + _) பி (ரகாஷ p + _) பி (ரகாச p + _) பி (ரசாத p + _) பி (ரே p _) பிரு (கன்நளை bri - _) பிர (சாந்தி prV - _) பிர (ம்மை brV - _) பிர (சன்ன prV - _) பிர (ச்சனை prV - _) பிர (ப prV - _) பிர (தீ prV + _) பி (ரசாந்தி p + _) பி (ரம்மை b + _) பி (ரசன்ன p + _) பி (ரச்சனை p + _) பி (ரப p + _) பி (ரதீ p _) பி (ரிட b _) பிரு (ந்தா bri + _) பி (ரியா_ p + _) பி (ரியாவின p + _) பி (ரியாவு p + _) பி (ரியாவிடம p + _) பி (ரியாவை p + _) பி (ரலய p + _) பி (ராணன p + _) பி (ரியம p + _) பி (ரதம p + _) பி (ரமாத p + _) பி (ரயா p + _) பி (ராய p + _) பி (ரயோஜன p + _) பி (ரகார p + _) பி (ரார்தன p + _) பி (ராதித் p + _) பி (ரதேச p + _) பி (ரசித்தி p + _) பி (ரம்ம b + // musical notes சா) ப (ா p diff --git a/phsource/b/xb b/phsource/b/xb index 636cbbbfa952c4fa98425ee830969615b3fe2edc..4eac1106a0dde8b293573c711b52da37005bbaf0 100644 GIT binary patch delta 628 zcmaDP_C$gsIKb68BskD$B8OFdCIbwVFfgzxFe@-e0tF%&b~5TPoM2#J4gx|Ophy&h z0J{f+6bl2>J0Q#hiu5puauqP7aWF8lv9Pf;0Yz9C4SByXyx?VElwy%$VPOP`RPwVi zNeD17?qS-)1Q7u$WT+8kU;v4HaRn;+0>lgq6>?A^xQK=_vWO8#5g34+g9qxmF;UzQQwC*mAb_Q_@o4lU-%^VoHUk#_(q`CMH9 delta 381 zcmaDN@kop#IKb68B-k}@B8OFdEdvOYFfgzxFe@}o8JOMy zp(s}YgAEr0BO41Fiy`k9h8MgHj8ZI8ES3ChOcDYNjC+{&FoDde5oKV2u`A>dYz<`y zn@#YtfTrM5;ltu#GQSnJs?Ogm&gjaVhw6wcjCycKaI^cs9ihZk1$TrA?`F6oV)$hl U5snb&AmoV63anuRV5b%{0PhS&vH$=8 diff --git a/phsource/compile_report b/phsource/compile_report index d92285d0..320ee1d7 100644 --- a/phsource/compile_report +++ b/phsource/compile_report @@ -1,246 +1,168 @@ -62 phoneme tables +58 phoneme tables new total - base 104 104 - base2 26 125 - en 51 150 - en_n 32 150 - en_us 36 151 - en_sc 39 152 - en_rp 34 150 - en_wm 31 150 - en_wi 30 150 - af 39 136 - cy 29 130 - de 33 131 - eo 13 116 - jbo 4 117 - fi 40 135 - fr 55 142 - fr_ca 11 142 - hi 62 152 - ta 20 155 - hu 23 120 - lv 29 127 - nl 28 127 - pl 20 118 - sk 28 136 - cs 6 136 - hr 26 141 - mk 3 142 - sr 14 141 - ru 39 135 - it 17 128 - la 21 122 - es 9 125 - es_la 1 125 - ca 11 127 - pt 30 142 - pt_pt 20 142 - ro 36 147 - el 8 125 - grc 12 129 - sv 25 126 - no 28 130 - is 33 130 - vi 41 141 - zhy 41 138 - zh 66 155 - sw 14 113 - tr 18 128 - ku 18 129 - id 15 127 - sq 35 128 - hy 24 120 - da 20 119 - rw 15 132 - ml 13 154 - kn 15 154 - bn 59 159 - ne 18 160 - mr 12 152 - eu 6 126 - mn 15 115 - pa 14 154 - prs 8 111 + base 99 99 +consonants 9 107 + base2 26 120 + en 47 141 + en_n 32 141 + en_us 37 142 + en_sc 39 143 + en_rp 33 141 + en_wm 30 141 + en_wi 30 141 + af 39 131 + cy 29 125 + de 32 126 + eo 13 111 + jbo 2 111 + fi 40 130 + fr 56 138 + fr_ca 11 138 + hi 58 145 + ta 20 148 + hu 23 115 + lv 29 122 + nl 24 119 + pl 20 113 + sk 28 130 + cs 6 130 + hr 26 135 + mk 3 136 + sr 14 135 + it 18 123 + la 21 117 + es 8 120 + es_la 1 120 + ca 11 122 + pt 29 135 + pt_pt 20 135 + ro 36 143 + el 8 120 + grc 12 124 + sv 23 121 + no 28 125 + is 32 125 + ru 39 130 + vi 41 136 + zhy 41 133 + zh 62 150 + sw 12 108 + tr 18 123 + ku 18 124 + id 15 122 + sq 33 121 + hy 23 114 + da 20 114 + rw 15 127 + ml 13 147 + ne 18 153 + pa 14 147 + prs 8 106 Data file Used by b/b [b] base [b] fr - [b] hi [b;] ro - [b] bn b/b_ [b] base [b] fr - [b] hi - [b] bn b/b@ [b] base - [b] hi - [b] bn b/b@2 [b] base - [b] hi - [b] bn b/ba [b] base - [b] hi - [b] bn b/be [b] base - [b] hi - [b] bn b/bi [b] base - [b] hi [b;] ro - [b] bn b/bo [b] base - [b] hi - [b] bn b/bu [b] base - [b] hi - [b] bn b/xb [b] base [b] fr - [b] hi [bh] hi - [b] bn d/d [d] base [d[] base [d] base2 [d] fi [d] fr - [d] hi - [d.] hi - [d] hu [d] pl [d;] pl [d] hr - [d] ru - [d;] ru - [d;] ro - [d] el - [d] sw - [d] id [d] sq - [d] bn - [d.] bn d/d_ [d] base [d[] base [d] base2 [d] fi [d] fr - [d] hi [d.] hi - [d] hu [d] pl [d;] pl [d] hr - [d] ru - [d;] ru - [d;] ro - [d] el - [d] sw - [d] id [d] sq - [d] bn - [d.] bn d/d_dnt [d] sr d/dr [*] base - [d] base [d[] base [d] base2 [d] fi [d] fr - [d] hi [d.] hi - [d] hu + [dh.] hi [d] pl [d;] pl [d] hr - [d] ru - [d;] ru - [d;] ro - [d] el - [d] sw - [d] id [d] sq - [d] bn - [d.] bn d/tap [*;] ro d/tap1 [*] base d/tap2 [t#] en [*] pt d/tap3 [*] base -d/tap4 [r] es d/tap_i [*;] ro d/xd [d] base [d[] base + [dz] consonants [d] base2 [d] fi [d] fr - [d] hi [d.] hi [dh] hi [dh.] hi - [d] hu [d] pl - [dz] pl [d] hr - [d] ru - [d;] ro - [d] el - [d] sw - [d] id + [d] sr [d] sq - [dz] sq - [dz] hy - [d] bn - [d.] bn d/xd3 [dh] hi d/xd_pzd [d;] pl - [d;] ru -d/xdz [dz] pl - [dz] sq - [dz] hy +d/xdz [dz] consonants d/x_tap [t#] en [*] pt dzh/dzh [dZ] base [dZ;] base - [dz;] base - [J] hi [dZ;] mk [dZ] sr [dZ;] sr - [dZ;] ru [dZ;] sq - [J] bn dzh/dzh_ [dZ] base [dZ;] base - [dz;] base - [J] hi [dZ] hr [dZ;] hr [dZ;] mk [dZ;] ru [dZ;] sq - [J] bn dzh/dzh2 [dZ] hr [dZ;] hr dzh/dz_pzd [J] base [J] tr [J] ku - [J2] bn dzh/dz_pzd_ [J] base - [J2] bn dzh/xdzh [dZ] base [dZ;] base - [dz;] base - [J] hi [dZ] hr [dZ;] hr [dZ;] mk + [dZ] sr + [dZ;] sr [dZ;] ru [dZ;] sq - [J] bn dzh/xdz_pzd [J] base [Jh] hi - [J2] bn + [J] tr + [J] ku envelope/i_risefall [11] zh envelope/i_risefall2 [+2] rw envelope/p_214 [5] vi @@ -270,375 +192,320 @@ envelope/p_rise [3] vi [35] zh envelope/vi_5amp [5] vi envelope/vi_6amp [6] vi -g2/g [g-] base - [g] fr -g2/g_ [g-] base -g2/xg [g-] base - [g] hi - [gh] hi - [g] bn +g2/xg [gh] hi g/g [g] base + [g-] en [g] cy [g] fr - [g] hi [g] es - [g] bn g/g_ [g] base + [g-] en [g] cy [g] fr - [g] hi [g] es - [g] bn g/xg [g] base + [g-] en [g] cy [g] fr [g] es h/h_ [h] base [h] fi - [H] hi - [h] hi [] la - [H] bn - [h] bn h/h@ [h] base [h] fi - [H] hi - [h] hi [h] sr [] la - [H] bn - [h] bn - [th] bn h/ha [h] base [h] fi - [H] hi - [h] hi [] la - [H] bn - [h] bn h/he [h] base [h] fi - [H] hi - [h] hi [] la - [H] bn - [h] bn h/hi [h] base [h] fi - [H] hi - [h] hi [] la - [H] bn - [h] bn h/ho [h] base - [H] hi - [h] hi [] la - [H] bn - [h] bn h/hu [h] base - [H] hi - [h] hi [] la - [H] bn - [h] bn h/hu_fi [h] fi 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 +j2/j2@ [;] base +j2/j2a [;] base +j2/j2e [;] base +j2/j2i [;] base +j2/j2o [;] base +j2/j2u [;] base +j2/xj2 [;] 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/jo [(o)] base +j/j_ [j] base + [j] de +j/j@ [j] base + [j] de +j/ja [j] base + [j] de +j/je [j] base + [j] de +j/ji [j] base + [j] de +j/jo [j] base + [j] de 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 +j/ju [j] base + [j] de +j/xj [j] base + [j] de +klatt/b [b] base +klatt/bh [B] base +klatt/dz_pzd [J] base +klatt/dz_pzd_ [J] base +klatt/m [m] base +klatt/m_ [m] base +klatt/n [n] base +klatt/n^ [n^] base +klatt/n^@ [n^] base +klatt/nn [N] base +klatt/nr [n.] base +klatt/qqh [Q] base +klatt/qqh_ [Q] base +klatt/tap2 [t#] en +klatt/v [v] base +klatt/v_ [B] base + [v] base +klatt/x_tap [t#] en +klatt/zh [Z] base + [z.] base +klatt/zh_ [Z] base + [z.] base +l^/j2@ [l^] base + [L] sq +l^/j2a [l^] base + [L] sq +l^/j2e [l^] base + [L] sq +l^/j2i [l^] base + [L] sq +l^/j2o [l^] base + [L] sq +l^/j2u [l^] base + [L] sq l^/_l^ [l^] base + [L] sq l^/l^ [l^] base l/l [l] base - [l] en - [l] en_wi - [l] af [l] fr [l] hu - [l] sk - [l] ru - [l] la - [l] ca - [l] pt - [l;] ro l/_l [l] base - [l/] base - [l/3] base - [l] en - [l] en_wi - [l] af - [l/] de [l] fr [l/] fr [l] hu - [l] sk - [l] ru - [l] la - [l] ca - [l] pt - [l;] ro - [l] zh l/l_ [l/] base [l/3] base [l/] fr -l/l_@ [(@)] base - [@] fr +l/l_@ [l/3] base [W] fr [Y] fr -l/l@ [(@)] base + [l/] fr +l/l@ [] base + [L] base [W] fr [Y] fr -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] fr +l/L1_aL [l/] base + [l/] de +l/L1_eL [l/] base + [l/] de +l/L1_iL [l/] base + [l/] de +l/L1_@L [l/] base + [l/] de +l/L1_oL [l/] base + [l/] de +l/L1_uL [l/] base + [l/] de +l/L2_aL [l/2] base +l/L2_eL [l/2] base +l/L2_iL [l/2] base [i] sq -l/L2_@L [(@)] base +l/L2_@L [l/2] base [I] en_sc -l/L2_oL [(o)] base - [oU] en_sc -l/L2_uL [(u)] base - [u:] en +l/L2_oL [l/2] base +l/L2_uL [l/2] base l/l_3 [l/] de l/l_4 [ll] sq -l/la [(a)] base - [a] fr -l/l_a [(a)] base +l/la [] base + [L] base [a] fr + [l] fr +l/l_a [l/3] base + [l/] fr [wA] fr - [A~] fr -l/le [(e)] base - [E] fr - [e] fr - [E2] fr - [E:] fr -l/l_e [(e)] base - [E] fr - [E2] fr - [E:] fr +l/le [] base + [L] base + [l] fr +l/l_e [l/3] base + [l/] fr l/L_eL_af [&] af [&:] af l/l_front [L] sq l/l_front_ [l/4] sq -l/li [(i)] base - [i] fr - [i-] fr - [i:] fr - [l] zh -l/l_i [(i)] base - [i] fr - [i:] fr - [w^i] fr +l/li [] base + [L] base + [l] fr +l/l_i [l/3] base + [l/] fr [i] sq l/l_long [l] base [l] fr - [l] la - [l;] ro -l/lo [(o)] base - [O] fr - [o] fr - [O2] fr +l/lo [] base + [L] base + [l] fr +l/l_o [l/3] base + [l/] fr [o2] fr - [wA] fr -l/l_o [(o)] base - [O] fr - [o] fr - [O2] fr - [o2] fr -l^/l_rfx [l.] hi - [l.] bn -l/lu [(u)] base - [u] fr - [y] fr - [u:] fr +l^/l_rfx [l.] base +l/lu [] base + [L] base + [l] fr [w^i] fr -l/l_u [(u)] base - [u] fr - [u:] fr +l/l_u [l/3] base + [l/] fr l/l_vi [l] vi l/l_y [y] fr l/tl [l] base - [l] en - [l] en_wi - [l] af [l] fr [l] hu - [l] sk - [l] ru - [l] la - [l] ca - [l] pt - [l;] ro -l/xl [(@)] base - [(a)] base - [(e)] base - [(i)] base - [(o)] base - [(u)] base +l/xl [L] base + [l] base [e] fr + [l] fr + [l] hu + [ll] sq m/_m [m] base - [m;] ru - [m;] ro - [m] zh m/m_ [m] base - [m;] ru - [m;] ro -m/m@ [(@)] base +m/m@ [m] base m/m#_ [m#] is -m/ma [(a)] base -m/me [(e)] base -m/mi [(i)] base +m/ma [m] base +m/me [m] base +m/mi [m] base m/mj [m] base - [m;] ru - [m;] ro -m/mo [(o)] base -m/mu [(u)] base +m/mo [m] base +m/mu [m] base n^/_n^ [n^] base n^/n^_ [n^] base -n^/n^@ [(@)] base +n^/n^@ [n^] base n^/n^#_ [n^#] is n/_n [n] base - [n;] ro [n] zh n/n_ [n] base - [n2] fr - [n;] ro -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/n@ [n] base + [n.] base + [n#] is [n] zh -nn/inn [(i)] base +n/n#_ [n#] is +n^/n^a [n^] base +n/na [n] base + [n.] base + [n#] is + [n] zh +n^/n^e [n^] base +n/ne [n] base + [n.] base + [n#] is + [n] zh +n^/n^i [n^] base +n/ni [n] base + [n.] base + [n#] is + [n] zh +nn/inn [N] base n/nj [n] base [n.] base - [n^] base - [n;] ro n/n_long_ [n] zh nn/_nn [N] base - [N] en_n - [N] en_wm [N] zh nn/nn_ [N] base - [N] en_n - [N] en_wm -nn/nn@ [(@)] base +nn/nn@ [N] base + [N#] is + [N] zh nn/nn#_ [N#] is nn/nn2_ [N] zh [N-] zh -nn/nna [(a)] base -nn/nne [(e)] base -nn/nni [(i)] base +nn/nna [N] base + [N#] is + [N] zh +nn/nne [N] base + [N#] is + [N] zh +nn/nni [N] base + [N#] is + [N] zh nn/nnj [N] base -nn/nno [(o)] base -nn/nnu [(u)] base -n^/n^o [(o)] base -n/no [(o)] base +nn/nno [N] base + [N#] is + [N] zh +nn/nnu [N] base + [N#] is + [N] zh +n^/n^o [n^] base +n/no [n] base + [n.] base + [n#] is + [n] zh n/_nr [n.] base n/nr_ [n.] base -n/nr@ [(@)] base -n/nra [(a)] base -n/nre [(e)] base -n/nri [(i)] base -n/nro [(o)] base -n/nru [(u)] 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 +n^/n^u [n^] base +n/nu [n] base + [n.] base + [n#] is + [n] zh +r2/r2@ [r-] en +r2/r2a [r-] en +r2/r2e [r-] en +r2/r2i [r-] en +r2/r2o [r-] en +r2/r2u [r-] en r3/r_ [r/] base [r/] af [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/2] fr [r/] ru -r3/r_o [(o)] base r3/r_ru [R4] ru r3/r_ru2 [R4] ru -r3/r_sr [r.] bn r3/r_trill [R2] base [R3] base [r] af [R2] lv - [r] nl [R] pl [r*] sr [x] pt r3/r_trill2 [R] base [r] cy - [R] hr r3/r_trill2.wav [R] base [r] cy - [R] hr r3/r_trill3.wav [R3] base [r] af - [r] nl -r3/r_trill_short [r] fi +r3/r_trill_short [R2] fi r3/r_trill.wav [R2] base - [r] fi + [R2] fi [R2] lv [R] pl [r*] sr [x] pt -r3/r_u [(u)] base r3/r_uvl [r"] base -r3/r_uvl.wav [r"] base - [R] fr [r] fr [r/2] fr +r3/r_uvl.wav [r"] base r3/rx [*] base [r/] base [r/] af [R] fr_ca - [r/] ru [x] pt_pt [*;] ro [r#] is - [Q2] hy + [r/] ru r3/rz_cs [R^] sk [R^/] sk r3/@tap [**] base @@ -647,111 +514,85 @@ r3/@tap_rfx [r.] base r/a_ [r] da r/aa [R] da r/r [r] base - [r-] base - [r] en_sc - [r] de + [r-] en r/_r [r] base - [r] en_sc - [r.] bn -r/r_ [r] base - [r] en_sc - [r] de - [r2] nl - [r] ru +r/r@ [r] base + [R3] base + [r] af [r] ro - [r] sw - [r.] bn -r/r@ [(@)] base -r/ra [(a)] base -r/re [(e)] base -r/ri [(i)] base -r/ro [(o)] base + [r] ru +r/ra [r] base + [R3] base + [r] af + [r] ro + [r] ru +r/re [r] base + [R3] base + [r] af + [r] ro + [r] ru +r/ri [r] base + [R3] base + [r] af + [r] ro + [r] ru +r/ro [r] base + [R3] base + [r] af + [r] ro + [r] ru r/rr [r/] base - [r/] af - [r] de - [r2] nl - [r] ru - [r/] ru [r] ro - [r] sw -r/ru [(u)] base + [r] ru +r/ru [r] base + [R3] base + [r] af + [r] ro + [r] ru r/tr [r] base - [r] en_sc - [r.] bn r/trr [r/] base - [r/] af - [r] de - [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 + [r] ru +r/xr [r] base + [R3] base + [r-] en + [r] af + [r] ro ufric/ch [C] base [J^] base - [C2] de ufric/ch_ [C] base ufric/ch_sr [h] sr [x] sr ufric/f [f] base [pF] de [f] pl - [f;] ro [f] grc [f] zh ufric/f_ [f] base [f] pl - [f;] ro ufric/ll [L] base [l#] is ufric/s [s] base [s] fr - [z2] fr [s] es - [s#] pt [z] sq - [s] eu - [z] eu ufric/s_ [s] base [z] base - [s2] fi + [s2] consonants [s] fr [z] fr - [z2] fr - [z3] fr - [s2] hu - [s2] lv [s] es - [s#] pt [z;] ro - [s2] is [z] sq - [s] eu - [z] eu ufric/s! [s] base - [s2] fi [s] fr - [s2] hu - [s2] lv [s] es - [s#] pt - [s2] is -ufric/s_continue [s2] fi - [s2] hu +ufric/s_continue [s2] consonants [s2] lv - [s2] is ufric/sh [S] base [S] fr - [s#] pt_pt ufric/sh_ [S] base [S] fr - [s#] pt_pt ufric/sh3 [S] hr [Z] hr ufric/sh_pzd [S;] base @@ -770,16 +611,13 @@ ufric/s_pzd [s;] base [s;] ro ufric/s_pzd_ [s;] base [z;] base -ufric/sx_sv [Sx] nl - [sx] sv +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 [x] ku ufric/x_hr [x] base [x] hr @@ -789,250 +627,123 @@ ufric/xx [X] base [Q"] base ustop/c [c] base ustop/k [k] base - [k] en [k] fr [k] zhy - [k] sw - [kh] bn ustop/k_ [k] base [k] base2 - [k] en - [k] fi [k] fr - [k] hu [k] lv - [k] sk [k] el - [k] sw [k] sq - [kh] bn -ustop/k_asp [gh] hi - [kh] hi +ustop/k_asp [kh] consonants + [gh] hi [kh] zh ustop/ki [k] base [k] base2 - [k] en [c] af - [k] fi [k] fr - [k] hu [k] lv - [k] sk [k^] mk - [c] is [k] zhy - [k] sw [J] tr [c] tr [J] ku [c] ku ustop/kl [k] base + [kh] consonants [k] base2 - [k] en - [k] fi [k] fr - [kh] hi - [k] hu [k] lv - [k] sk [k] el [k] zhy - [k] sw - [kh] bn ustop/kr [k] base [k] base2 - [k] en - [k] fi - [kh] hi - [k] hu - [k] lv - [k] sk [k] el [k] zhy - [k] sw - [kh] bn ustop/k_unasp [k] base + [k-] consonants [k] base2 - [k] fi - [k] hi - [k] hu [k] lv - [k] sk [k] el [k] zhy [k] sq - [k] hy - [k] bn ustop/k_unasp_ [k] zh ustop/null [?] base ustop/p [p] base - [p] fr [p2] fr [p] zhy - [ph] bn ustop/p_ [p] base + [ph] consonants [p] fr - [p2] fr - [ph] hi - [p#] hy - [ph] bn - [p#] mn -ustop/p_asp [bh] hi - [ph] hi +ustop/p_asp [ph] consonants + [bh] hi [ph] zh [p#] hy - [p#] mn -ustop/percus10 [(X1] base +ustop/percus10 [#X1] base ustop/pl [p] base + [p-] consonants + [ph] consonants [p] base2 - [p] fi [p] fr - [p] hi - [ph] hi - [p] hu [p] lv [p] sk - [p] la - [p;] ro [p] sq - [p] hy - [p#] hy - [p] bn - [ph] bn - [p] mn - [p#] mn ustop/pr [p] base + [p-] consonants + [ph] consonants [p] base2 - [p] fi - [p] hi - [ph] hi - [p] hu - [p] la - [p;] ro - [p] hy - [p#] hy - [p] bn - [ph] bn - [p] mn - [p#] mn ustop/p_unasp [p] base + [p-] consonants [p] base2 - [p] fi [p] fr - [p] hi - [p] hu [p] lv [p] sk - [p] la - [p;] ro [p] zh [p] sq - [p] hy - [p] bn - [p] mn -ustop/p_unasp_ [p] base2 - [p] fi +ustop/p_unasp_ [p-] consonants + [p] base2 [p] fr - [p] hi - [p] hu [p] lv - [p] sk - [p] la - [p;] ro [p] sq - [p] hy - [p] bn - [p] mn ustop/q [q] base ustop/q_u [q] base ustop/t [t] base - [t2] en + [t] en_us [dh.] hi [th.] hi [t] zhy - [t.h] bn ustop/t_ [t] base - [t2] en + [t] en_us [t] fr - [t2] fr - [t3] fr - [t.] hi [t] lv [t] sk [t] el [th] zh - [t.] bn - [t.h] bn ustop/t_dnt [t] base [t[] base [t] base2 - [t2] en - [t] fi - [t] hi + [t] en_us [dh] hi [th] hi - [t] ta [t] hu [t] pl [t] hr - [t] ru - [t;] ro - [t] sw - [t] sq - [t] hy - [t] bn - [t] mn ustop/t_dnt2 [t] base2 - [t] ta ustop/t_hi [t[] base - [t] hi - [t] sq - [t] hy - [t] bn - [th] bn - [t] mn ustop/t_pzd [c] base [t;] pl - [t;] ru ustop/tr [t] base - [t2] en - [t] ru - [t.h] bn -ustop/ts [ts] base2 - [ts] de - [ts] eo + [t] en_us +ustop/ts [ts] consonants + [dz] consonants [ts] hu - [ts] pl - [dz] pl - [ts] ru - [ts;] ro [z] zhy [tsh] zh - [ts] sq - [dz] sq - [dz] hy - [ts#] hy - [ts] eu - [tz] eu - [ts#] mn -ustop/ts_ [ts] base2 - [ts] de - [ts] eo +ustop/ts_ [ts] consonants + [dz] consonants [ts] lv - [ts] pl - [dz] pl - [ts] ru - [ts;] ro - [ts] sq - [dz] sq - [dz] hy - [ts#] hy - [ts] eu - [tz] eu - [ts#] mn ustop/ts2 [ts] lv [ts] hy - [ts] mn ustop/tsh [tS] base [c] zhy ustop/tsh_ [tS] base @@ -1041,31 +752,19 @@ ustop/tsh2 [tS] hr [dZ] hr ustop/t_short [t] fr [t2] fr - [t3] fr [t.] hi [t] lv [t] sk [t] el - [t.] bn ustop/tsh_pzd [tS;] zh ustop/tsh_pzd_unasp [tS;] zh ustop/tsh_sr [tS] sr ustop/ts_pzd [tS;] base - [ts;] base [Jh] hi - [ch] hi [tS;] ru - [c] sq [dZ;] sq - [ch] bn -ustop/ts_pzd_ [c] hi - [c] hu - [c] hy - [c] bn -ustop/ts_pzd2 [c] hi - [c] hu - [c] hy - [c] bn +ustop/ts_pzd_ [c2] consonants +ustop/ts_pzd2 [c2] consonants ustop/ts_pzd3 [tS;] hr [dZ;] hr ustop/t_sr [d] sr @@ -1158,10 +857,7 @@ vdiph/aau_2 [aU] en_wi [aau] zhy vdiph/aau_3 [aU] hi [aU] ta - [aU] kn - [aU] bn [aU] ne - [aU] mr vdiph/aau_4 [aU] vi vdiph/ae [E:] fr_ca [aI] la @@ -1176,7 +872,6 @@ vdiph/ai [aI] base2 [a:I] vi [aI] id [aI] hy - [aI] kn vdiph/ai_2 [aI] en [aI] cy [aY] cy @@ -1188,7 +883,6 @@ vdiph/ai_6 [aI] en_rp vdiph/ai_7 [aI] en_sc [aI2] en_sc [aI] is - [aI] mr vdiph/ai_8 [aI] ta vdiph/aoo [aU] en_us vdiph/au [aU] en @@ -1206,7 +900,6 @@ vdiph/au_4 [aU] base2 [aU] is [aU] id vdiph/ee-e [E:] hi - [E:] bn vdiph/eei [EI] base2 [eI] en [EI] de @@ -1239,7 +932,6 @@ vdiph/ei [eI] base2 [eI] vi [ei] zhy vdiph/eu [eU] base2 - [eU] en [eU] cy [eU] eo [eU] nl @@ -1252,7 +944,6 @@ vdiph/@i [@I] vi [@:I] vi vdiph/&i [&i] fi [aI] hi - [aI] bn vdiph/@i_2 [eI] af [@I] cy [@Y] cy @@ -1332,28 +1023,22 @@ vdiph/y#y_2 [Yy] af [eoi] zhy vdiph/y#y_3 [Y:] nl vnasal/aa_n [a~] hi - [a~] bn vnasal/aa_n2 [A~] en vnasal/aa_n3 [A~] af vnasal/aa_n4 [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_n [E~] fr_ca vnasal/ee_n2 [a] en_us [E~] hi [&~] pt_pt - [E~] bn vnasal/ee_u_n [E~] pl vnasal/e_n [e~] af [e~] hi [e~] pt - [e~] bn vnasal/ii_n [I~] hi vnasal/i_n [i~] pt - [i~] bn - [i:~] bn vnasal/i_n2 [i~] hi vnasal/m- [m-] sw vnasal/n- [n-] sw @@ -1361,26 +1046,21 @@ vnasal/nn- [N-] sw vnasal/oi_n [oI~] pt vnasal/o_n [o~] hi [o~] pt - [o~] bn vnasal/o_n2 [o~] af [O~] fr vnasal/oo_n2 [O~] en [O~] hi [o] zh - [O~] bn vnasal/oo_n3 [O~] pl vnasal/u_n [U~] hi [u~] hi [u~] pt [u] zh - [u~] bn - [u:~] bn vnasal/V_n [V~] hi vnasal/W_n [E~] fr [W~] fr voc/bh [B] base voc/dh [D] base - [D] es voc/dh_ [D] base [D] es voc/j [J^] base @@ -1389,40 +1069,21 @@ voc/Q [Q] base voc/Q_ [Q] base [Q^] base [Q] nl - [x2] pt voc/Q_less [Q] nl - [x2] pt voc/Q_ulv [Q"] base voc/v [v] base [v] fi [v] fr - [v] ta - [v2] nl [v;] ro - [v] is - [v] da - [v] bn - [v] pa voc/v_ [B] base [v] base [v] fi [v] fr - [v] ta - [v2] nl [v#] es [v;] ro - [v] is - [v] da - [v] bn - [v] pa voc/v# [v#] base - [v] hi voc/v#_ [v#] base - [v] hi voc/v2 [v#] es -voc/vj [v] base - [v] fr - [v] pa vocw/dh [D] base [D] es vocw/Q [Q] base @@ -1434,28 +1095,20 @@ vocw/Q2 [Q] nl vocw/v [B] base [v] base [v] fr - [v] ta [v#] es [v;] ro - [v] pa vocw/zh [Z] base [Z;] ro vocw/zh_rfx [z.] base voc/z [z] base [z] fr - [z2] fr - [z3] fr [z;] ro [z] sq voc/z_ [z] base + [dz] consonants [z] fr - [z2] fr - [z3] fr - [dz] pl [z;] ro [z] sq - [dz] sq - [dz] hy voc/zh [Z] base [z.] base [R^] sk @@ -1476,15 +1129,12 @@ vowel/@ [@] base [@] en [@2] en [@5] en - [3] en_rp [@] en_rp [V] cy [W] fr [@4] hi [@] hy [@] ml - [@] kn - [@4] bn vowel/@- [@-] base [r*] hr vowel/& [a] en_rp @@ -1493,8 +1143,6 @@ vowel/& [a] en_rp [&] lv [&:] lv [&] sv - [&] bn - [&:] bn vowel/0 [0] en [O] hi [O] pt @@ -1518,7 +1166,6 @@ vowel/@_3 [@] en_sc [@] de [@3] hi [@] da - [@3] bn [@3] ne vowel/3_2 [3:] en_n [@] zh @@ -1532,7 +1179,6 @@ vowel/@_4 [@] en_us vowel/8 [o-] zh vowel/8_2 [U] en_us [8] sv - [o] mn vowel/8_3 [eo] zhy vowel/8_5 [8] ku vowel/8_6 [V] sq @@ -1556,9 +1202,8 @@ vowel/a [a] en [a] it [a] zh [a] id - [a:] mr - [a] mn -vowel/a# [a/] base2 +vowel/a# [a] base2 + [a/] base2 [a2] en_sc [a2] en_wi [&] sr @@ -1580,7 +1225,6 @@ vowel/a#_2 [a#] pl [a2] sv [&] is [a/] sw - [a] kn vowel/a_3 [a] en_sc [a/] en_sc [A:] en_sc @@ -1600,17 +1244,19 @@ vowel/a#_3 [a2] en [3] de [@] de [a] hi - [a#] ru [a#] ca [&] pt [&/] pt [&] pt_pt [&/] pt_pt + [a] ru + [a#] ru [a] zhy + [A] sq + [a] sq [a/] sq [3] da [a] ml - [a] bn vowel/a_4 [a/] el [a] vi vowel/a_5 [a:] ta @@ -1620,7 +1266,6 @@ vowel/a_5 [a:] ta [a] sw [a] tr [a:] ml - [a:] kn vowel/a_6 [a] fr [a] ca [a:] vi @@ -1643,6 +1288,7 @@ vowel/aa_3 [A:] af vowel/aa_4 [A:] sv [O] vi vowel/aa_5 [A:] en_n + [A@] en_n [A:] en_wm [A@] en_wm vowel/aa_6 [A] de @@ -1652,14 +1298,11 @@ vowel/aa_8 [0] en_us [A:] en_us vowel/aa_9 [a] fi [a:] hi - [a:] bn [a] ne [a] pa -vowel/a_en [A] fr vowel/@_bck [@] hi [@/] hi [@] zh - [@] bn [V] ne [@/] ne [@] pa @@ -1689,11 +1332,8 @@ vowel/e [e] base2 [e#] rw [e] ml [e:] ml - [e:] kn [e] ne - [e] mn vowel/e# [I] en_sc - [I2] en_sc vowel/e_2 [eI] en_sc [e:] de [e] hi @@ -1701,14 +1341,11 @@ vowel/e_2 [eI] en_sc [e] it [e:] sv [e:] no - [e] bn - [e:] bn [e] pa vowel/e_3 [i] en_n [e:] hu [e] ku vowel/e_5 [i] en_sc -vowel/e_6 [e] mr vowel/e_8 [e] fr vowel/e_9 [E2] fr vowel/ee [E] en_n @@ -1743,7 +1380,6 @@ vowel/ee_6 [&] sk [E] ku vowel/e_mid [E] en_rp [E] fr - [E:] fr [E~] fr [E] fr_ca [E] hi @@ -1765,7 +1401,6 @@ vowel/e_mid [E] en_rp [E] id [E2] id [e] hy - [E] bn [E] prs vowel/e_mid2 [E] af [E] de @@ -1780,9 +1415,8 @@ vowel/e_mid2 [E] af [e] el [e] sw [e] tr - [e#] sq + [e] sq [E] da - [e] kn vowel/@_fnt [@] en_wi [@2] en_wi [@2] hr @@ -1797,7 +1431,6 @@ vowel/i [i] base2 [i] en_wi [i:] cy [i] eo - [I] fr [i:] ta [i:] hu [i] it @@ -1812,9 +1445,7 @@ vowel/i [i] base2 [i] rw [i#] rw [i:] ml - [i:] kn [i] ne - [i] mn [i] prs vowel/i# [y:] cy vowel/i_2 [i2] de @@ -1846,8 +1477,6 @@ vowel/i_6 [i] hi [i] ku [i] id [i] ml - [i] kn - [I] mr vowel/i#_6 [i.] zh vowel/i_7 [i] pl [i] sq @@ -1856,16 +1485,12 @@ vowel/i_en [i:] en [i:] en_us vowel/i_fnt [i:] en_wi [i:] hi - [i] bn - [i:] bn - [i:] mr [i] pa vowel/ii [I] en_n [I2] en_n [I] en_rp [I2] en_rp [I] en_wm - [I2] en_wm [I] de [I:] de [I] fr_ca @@ -1879,7 +1504,6 @@ vowel/ii# [Y] cy [I] ku [i] sq [y] ml - [y] kn vowel/ii_2 [I] en [i] zh vowel/ii#_2 [y] pl @@ -1891,7 +1515,6 @@ vowel/ii_3 [I] cy [I] sv [I] no [I] tr - [I] bn [I] pa vowel/ii#_3 [I2] en_us vowel/ii_4 [I2] en @@ -1899,7 +1522,6 @@ vowel/ii_4 [I2] en vowel/ii_5 [I] la [i] zh vowel/ii_6 [I] en_wm - [I2] en_wm [I] en_wi [I2] en_wi [I] sr @@ -1911,8 +1533,7 @@ vowel/ii_en [i] en [i] sq vowel/ii_final [i] en_us [i] en_rp -vowel/@_low [3] en_rp - [@] en_rp +vowel/@_low [@] en_rp [@2] en_rp [a2] en_rp [@5] en_rp @@ -1922,13 +1543,8 @@ vowel/@_low [3] en_rp [@] ro [@2] no [@] id - [@] bn - [V] bn - [@2] bn [V] ne [@/] ne - [@] mr - [V] mr [@] pa [V] pa vowel/@_low2 [@/] en_us @@ -1941,6 +1557,7 @@ vowel/o [o] base2 [o2] fr [o] hi [o] ta + [o:] ta [o] it [o/] it [O] la @@ -1954,11 +1571,6 @@ vowel/o [o] base2 [o#] rw [o] ml [o:] ml - [o] kn - [o:] kn - [o] bn - [o] mr - [o:] mn [o:] pa vowel/o_2 [o:] cy [o:] hi @@ -1967,11 +1579,9 @@ vowel/o_2 [o:] cy [o:] no [o] vi [o] da - [o:] bn vowel/o-_2 [V] en_n [V] en_wm vowel/o_3 [oU] en_sc - [o:] ta vowel/o-_3 [U] en_rp vowel/o-_4 [o] ro vowel/o_5 [O] nl @@ -1979,8 +1589,7 @@ vowel/o_5 [O] nl vowel/o_6 [O:] nl vowel/o_7 [o] ku vowel/o_8 [o] fr -vowel/oe [W] en - [W] af +vowel/oe [W] af [W] de [W] hy [W] da @@ -2023,12 +1632,11 @@ vowel/oo_1 [O:] en_n [o] sk [o:] sk [o] hr - [O/] sq + [O] sq vowel/oo_2 [0] en_sc [O] cy [o] cs [0] da - [O] mn vowel/oo_3 [O] af vowel/oo_4 [O] base2 [0] en_wm @@ -2036,7 +1644,6 @@ vowel/oo_4 [O] base2 [3:] en_wi [O:] hi [O] it - [O] bn [O] pa vowel/oo_5 [O] pl [O] is @@ -2052,12 +1659,10 @@ vowelr/aa_r [A:] en_sc vowelr/i_r [i@3] en_sc vowelr/oo_r [O@] en_sc vowelr/o_r [o@] en_sc -vowelr/r-voc [r-] jbo - [r-] hi +vowelr/r-voc [r-] base [r-] sk [r:] sk [r-] hr - [r-] bn vowelr/V3_r [VR] en [3] en_sc [@r] zh @@ -2066,19 +1671,13 @@ vowel/u [u:] en_wi [u:] cy [u:] de [u] eo - [U] fr - [u] ta [u] lv [u:] lv [u:] cs [U] la - [u2] pt [u] id [u] ml [u:] ml - [u] kn - [u:] kn - [u] bn [u] prs vowel/u# [u:] en_sc [Y] tr @@ -2095,7 +1694,8 @@ vowel/u#_4 [U] en_sc [u:] en_sc vowel/u_5 [u] sw vowel/u#_5 [y] vi -vowel/u_6 [u:] ta +vowel/u_6 [u] ta + [u:] ta [U] pt_pt [u] pt_pt [u] ku @@ -2125,11 +1725,7 @@ vowel/u_bck [u] base2 [u] da [u] rw [u#] rw - [u:] bn [u] ne - [U] mr - [u:] mr - [u] mn [u] pa vowel/u_bck2 [u] fr [u:] fr @@ -2154,8 +1750,6 @@ vowel/uu_bck [U] en_wi [U] pt [U] no [u] zhy - [U] bn - [U] mn [U] pa vowel/V [3] en_sc vowel/V_2 [V] en @@ -2166,16 +1760,12 @@ vowel/V_2 [V] en vowel/V_3 [V] en_rp [V] hi [V] ta - [V] bn [V] pa vowel/V_4 [V] en_sc [V] da vowel/V_6 [V] en_us [a#] lv -vowel/V_7 [@] mr - [V] mr vowel/y [y] base2 - [y:] en [y:] de [y] fi [y:] hu @@ -2185,7 +1775,6 @@ vowel/y [y] base2 [y] sq [y] da vowel/y# [Y] base2 - [Y:] en [3:] en_wm [Y:] de [Y] fi @@ -2194,10 +1783,8 @@ vowel/y# [Y] base2 [8] nl [Y] ro [oe] zhy - [Y] eu vowel/y## [y#] is vowel/y_2 [y] fr - [y"] fr [y:] la [y] zh vowel/y#_2 [Y] hu @@ -2223,7 +1810,6 @@ vwl_af/r@ [@] af [I] af vwl_en/aI@ [aI@] en [aI@] en_n - [aI@] en_sc [aI@] en_rp vwl_en/aI@_2 [aI] en_sc [aI@] en_sc @@ -2233,13 +1819,8 @@ vwl_en/aU@ [aU@] en [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/@L_2 [@L] en_sc vwl_en_n/O@ [O@] en_n [o@] en_n vwl_en/ooi@ [aI@] en_wm @@ -2252,7 +1833,6 @@ vwl_en/u_L [u:] en vwl_en_us/3_us [3] en_us vwl_en_us/3_us2 [3:] en_us vwl_en_us/a [a] en_us - [aa] en_us vwl_en_us/ai@ [aI@] en_us vwl_en_us/ar [A:] en_us [A@] en_us @@ -2268,87 +1848,38 @@ vwl_en_us/or [o@] en_us vwl_en_us/ur [U@] en_us vwl_fr/r [r] fr [r2] fr -vwl_fr/_r [R] fr - [r] fr +vwl_fr/_r [r] fr vwl_fr/r_ [r/2] fr -vwl_fr/r_@ [W] fr - [Y] fr -vwl_fr/r@ [@] fr - [W] fr - [Y] fr - [@2] fr - [E~] fr - [W~] fr +vwl_fr/r_@ [r/2] fr +vwl_fr/r@ [r] fr vwl_fr/@R [x] pt_pt -vwl_fr/_r2 [R] fr +vwl_fr/_r2 [r] fr vwl_fr/@R2 [R] fr_ca -vwl_fr/@R3 [Q2] hy -vwl_fr/@R4 [Q2] hy -vwl_fr/@R5 [Q2] hy -vwl_fr/ra [a] fr -vwl_fr/r_a [a] fr - [wA] fr +vwl_fr/ra [r] fr +vwl_fr/r_a [r/2] fr vwl_fr/r_a~ [A~] fr vwl_fr/rA~ [A~] fr -vwl_fr/re [E] fr - [e] fr - [E2] fr - [E:] fr -vwl_fr/r_e [E] fr - [E2] fr - [E:] fr +vwl_fr/re [r] fr +vwl_fr/r_e [r/2] fr vwl_fr/ri [i] fr - [i-] fr - [i:] fr -vwl_fr/r_i [i] fr - [i:] fr - [w^i] fr -vwl_fr/ro [O] fr - [o] fr - [O2] fr + [r] fr +vwl_fr/r_i [r/2] fr +vwl_fr/ro [r] fr +vwl_fr/r_o [o] fr [o2] fr - [wA] fr - [O~] fr -vwl_fr/r_o [O] fr - [o] fr - [O2] fr - [o2] fr -vwl_fr/ru [u] fr - [u:] fr -vwl_fr/r_u [u] fr + [r/2] fr +vwl_fr/ru [r] fr + [u] fr +vwl_fr/r_u [r/2] fr vwl_fr/ry [y] fr [w^i] fr vwl_fr/r_y [y] fr vwl_fr/tr [r] fr vwl_fr/w_a [wA] fr -vwl_fr/xr [@] fr - [E] fr - [O] fr - [W] fr - [Y] fr - [a] fr - [e] fr - [i] fr - [o] fr - [u] fr - [y] fr - [@2] fr - [E2] fr - [O2] fr - [o2] fr - [E:] fr - [i:] fr - [wA] fr - [A~] fr - [E~] fr - [O~] fr - [W~] fr - [w^i] fr -vwl_hi/l-voc [l-] jbo - [l-] hi +vwl_fr/xr [r] fr +vwl_hi/l-voc [l-] base [l-] sk [l:] sk - [l-] bn vwl_no/& [a] no [a:] no vwl_no/au- [aU] no @@ -2358,8 +1889,8 @@ 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/mi [I^] ro + [I^] ru vwl_ro/ni [I^] ro vwl_ru/8 [8] ru vwl_ru/a [A] ru @@ -2379,11 +1910,9 @@ 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/a_n [a] zh @@ -2405,22 +1934,17 @@ vwl_zh/ung [ung] zhy vwl_zh/uo [uo] zh vwl_zh/y& [y&] zh vwl_zh/yee [yE] zh -w/iw_ [w/] base -w/w [w] base +w/iw_ [w] base w/_w [w] base - [w] zh -w/w_ [w/] base -w/w@ [(@)] base +w/w_ [w] base +w/w@ [w] base w/w2 [w2] base2 [w] pl - [w] sk - [w] pt_pt [w] sq -w/wa [(a)] base -w/we [(e)] base -w/wi [(i)] base +w/wa [w] base +w/we [w] base +w/wi [w] base [i] vi - [i] zhy w/wi2 [i:] en [i:] en_n [i:] en_sc @@ -2428,85 +1952,48 @@ w/wi2 [i:] en [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 - [(i)] base - [(o)] base - [(u)] base +w/wo [w] base +w/wu [w] base +w/xw [w] base x/b [b] base [b] fr - [b] hi [b;] ro [b] is - [b] bn x/b_ [b] base [b] fr x/d [d] base [t#] en [d] fr [d.] hi - [dh.] hi [d] hr [*] pt - [d] el [d] is - [d] id [d] sq - [d.] bn x/d_ [d] base [d[] base [d] base2 [d] fi [d] fr - [d] hi [d.] hi [d] pl [d] hr - [d] ru - [r] es - [d;] ro - [d] el [d] is - [d] sw - [d] id [d] sq - [d] bn - [d.] bn x/d_dnt [d[] base [d] base2 [d] fi - [d] hi - [d] hu [d] pl - [d] ru - [d;] ro - [d] sw - [d] bn x/d_pzd [d;] pl - [d;] ru x/dzh [J] base [dZ] base - [J2] bn x/dzh_ [dZ] base [dZ;] base - [dz;] base - [J] hi [dZ;] mk [dZ;] ru - [J] bn x/dz_pzd [dZ;] base - [dz;] base - [J] hi [dZ;] mk - [dZ;] ru - [J] bn -x/dz_pzd_ [J2] bn x/g [g] fr x/g_ [g] base [g] cy @@ -2515,11 +2002,6 @@ x/g_ [g] base [g] is x/g2 [g] base [g] cy - [g] hi [g] es [g] is - [g] bn -x/g2_ [g-] base - [g] fr - [g] hi - [g] bn +x/g2_ [g-] en diff --git a/phsource/d/d b/phsource/d/d index 37df0250e373c25e3289e3de88e4bfaaaa1720ed..152576a2729bce874d42422b1de52682a262756d 100644 GIT binary patch delta 606 zcmaDT_E>@=IKb68BskD$B8PoF0}ymD9AH)e!bl)Hl3^#K4#Nos2KFH4AZ8n&NECwr zy9a{<8w2w@rguy!K#?8>QLX|84K4;IHWoIPRX`CIMnm2&3@>;Y7^PUGSXdZAB9;7X zOcDYNjC+{&FhN9s3K?od85lq!Uw~?W*d8cUA%`La6wy#d7BL6u0|N~h15R&TAH$5r z4_6rV(EPy7?gR1z3&IadTvZ@HFeCh6!n+yd2PT9cV)$hl(fuIKL53ep;V#DX!{%ZZ wte#+HQbY3u7kdDjCuF!Dpm`#ecQ=|RO!&1iJW=CJgeNS~A_A``%sI4}0nn^n6aWAK delta 392 zcmaDX@lcE-IKb68B-k}@B8Po_2Ll6(0dYz<`y zn@#YtfTrM5;ltu#GQSnJs?OIsq|a>{v{{DHl{o|Eh%1bGa7S>n`+yw50&;{BR~5(+ z%pgaY@NNb&?YH-`Q*aP6U$#6Y@+ZM~a8*ZBk uzc!L>HO|;=vt)pIIaT(!9GlWv)g;Xdoj-bi4dxq3o18Qi*c`wq%nSh0XHXFU diff --git a/phsource/d/d_ b/phsource/d/d_ index 728497747d861b3522a03ece33dc05198dce5b61..92ed51b85a4c9c155019afbb276738b000d7599c 100644 GIT binary patch delta 644 zcmaDP_C!KDIKb68BskEBiGhJ3C7zif1xQ1|L}}f65VM4VfklB?fjJV$j%2vPsK;;u zC=$dR#2f__iDKYp_hE2gV_sQyU{#j!mo|tnHpyzJY$LG Y8AG_!F+H={f$AFM`02tk4p8x;= delta 406 zcmaDN@kmTMIKb68B-k~OiGhJ3#hRHR1xPb6*#A1YJ9DD6ZhZ*@1FHhF0`nC{J%$$y z49r15$j$D2uFcubmfF^#4-@qprOJiYa zO=V@Xo^vmY#Gc*E%$YNDXK&8zWOR0NIT`m1fa$HllyUVL`u9aTbk8MPau;wIE!d~x z5%3+`u~%edzz3P!=5|1Q9hgrKJ2!Kq@5FgWRhZPJ?uCp?)bv$H(spg9OjZ=FCX$(% znUVn>b^$TptjmD=ga1tTaFyw+DLma0EaMICaEd-!*hd4K*v1}x6C3cT@vR_56&X=I z#EibeJcDH=3w3$*WIUsOL+=7o7CBE;A&xO+=0YtpmYH%F>Jh8^_~&(&hPw{^+w#sO z_~UX?f_~D?g}o@61;-yT daLR?`Rkb{&v(nuLUX|EUPKw<=bZfF^`~oe2M9lyI delta 280 zcmdnN*2BsX9N_9466_i{k;AUO^ZyZs3N8=kC5#L}aE9>)%Lj%GFk72Ng7E5`tn1h(3fFe;0 z0_+|P4r~m}@0i{(^#DbB7(}@W82)fD0Qv8jSQr@?SQrg?zcB3JW?(X5HerT{RPwVi zrSLN_?EylF2v93SjVJ>HNaPDp7ZBS6g(~Dwgn%L%%E%%{Abnt<0b{`FjhkYavH0N% zqaMQzMg~rVAGq0lKz?9D_(6%Qia`Oz4<@{uL4IIF_#uX0mJ!_#;v8i7K_Bj7Oh0Tc yW5MbPRwgwxPjImZpm{=u>j9c4VtIF?dBTKW8^aSd&O~^^5-lR|dculBix~hj>0loK delta 392 zcmaDR@kERxIKb68B-k}@B8O9b2Ll760*PzG|9N_945*%nWk;AE;0SG!67#J0p6__J|>_~>4j5-V)Obo0+%t6diK#?d0 z0d@}t2Q~(lcTDe?dVnH545C~G41YKnfc$q%EQ|~cER2S{Ul?|9GccJjn=nH}D*4%% zQurB|_5dM71gMpvMwEd8B=QBQ3yAH3LKSi-LO>A>Wn>X!kUlWbfHC0o<}wx?=E?V% z4XEuAMjCiT7w&AV9*JSb;)yGadT6o1&F+I18%kVNXt80!yBQQ4NS=t{mt{nc4RH=K zVgs)ytT?cGf|W@P%@bVg0cf6(;d+4PiCEsfO`tanU?yk8i0a5FHOFq<$}^0P6e@G~&&0YU~Ks1apgfUzs&5Nr))2%Amt zvVf-GQsKkmVKToJwyMt8I;78S8njuS(UqATM=(;?5u(hK{WuIVV4-n^Q4by(-0VK^ z&`{#4f`^6)?`BYFfE^OUFUyDs4RH=ap|RP9GX~*pRwgyLZCvaDaNA_K9>8sj<=qXp w&4gbY$+jA2?6z4lz`{ON_P89I(pl9c%?h1AdVdY(8%dj-G!@vK%PY(b0Al5E>;M1& diff --git a/phsource/d/xd b/phsource/d/xd index f0df7bcdf76766778db47b8c475daf702355e424..7ad0392a84abb7a7ad89c7ca680b32ccd4a32580 100644 GIT binary patch delta 610 zcmaDP_C$gsIKb68BskD$B8Njg0}zxjFt92xD=6je+SM5T*b{dKg5x3K%rF7#P`D*jQEpMOYXOdA~5c;ALQxVv%BDVFZa(^0P5X z2rw}2VcNq45dkV>s1apg0Ev77ssUnqpiqSziV#plLm64b2&4}TK+Zu08#lx-WAVck wMm;n?aI^cM`9X=R3e68DyqnSd5W_Fai0%h*4l4U$vjvA1^W=H#M#I7*0L61#&;S4c delta 369 zcmaDN@kop#IKb68B-k}@B8NkL2?GPG0W@v-`jup~O|ia0BWH6W+}X c2cV9K;g@9$fIC8*gODROE3n4U)iy0=02xz9xc~qF diff --git a/phsource/dzh/dzh b/phsource/dzh/dzh index 9ca3eb3bce3111ff60dcfb6e58a0a6242d9a8584..42581cbe3316e6b4ef4abd102e80c49bbe06f0fd 100644 GIT binary patch literal 1229 zcmeHFJ5B>J6dbR;yC!_XrvQS4BGIHy0Syu>0SyiL&_Dx4gg5|2#0`)*1P93x5CsKw zPC!LP6K3q}CKrfAfvxvEZ{FBi&D(zG{Pe2dZCe0?rw5Ax!Tc)H&uLk>*Ai9SC0upm zc`^jjrfu45>J)%Ch3na#Jtn@1OpfG>yTj@wFm4$pbD3K+fMWn-G7Z;osuYvSM;&IA zjFOT8?)IoNWAn|v0vPTC(#)9F!8~&$QCO`KROdY&afU9|)VH4ZT>sUpK8h4Hi zOYlT1;q=ToYY)qg4}E26Jnu-KFuQRR5?UHNVUuTE5yFGY14)OuNO{Lkd?&EyxZm|%zi literal 971 zcmeHDp-uxq5Pf&McegzXS3pqGgpgpGfFKAgO`u7Gfl?Hzq9OeNM1#ig7YIJ10)ap@ zh>{TGNn`~IbIjYl>s8>e+~(fAc{8)wdA;-Y@nx^wRR9LJLxq8m#jh2-=V?nn6l|`Y zLE}o)`|KH`xT79DwoJSaJ;TuQU0wH5In-;FlBY{AaC(+alY#^NMl;ue(H1cF$3AD9 zJC0xD1}8W~9h*q7f;DUi*078Kv787YDlo#THX6Z5aswq5W9vlr7@1+eFQ_eJ=CnXq zB;3VNGHq*4QIav&w(dB)kG?14kk3Ucc(rj6O6@{q=ky&uO-DI@zPxR<=Q-crl=0Kt zwi!ow_ diff --git a/phsource/dzh/dzh_ b/phsource/dzh/dzh_ index 407d575e2ec0368be575e6cdf52978839612c3a7..569081a647a977d99ebf0d34fe49b17b6461576c 100644 GIT binary patch delta 618 zcmaDX_Dn(`IKb68BskEBg@J(~r79zSBEMBVkjYTOz`&}&tiT)zWJfYwVbo(_VPs$q z0zw<0NE8D%yAJ~gI|I`@APfMC^e`xKRWYz|GcdBTu(9wlG62<^@NQ;!02Gm8kzxVr z28zV+%Q9Z#XJFjJw1){I!oVQTks!^$@PP3F;}@VBAhrh@S0Ts108#`M0*YuTBa4^= zMIb-}#(>isH^wky@dGQ98k!%t*aOh~Aj9yV3k$!mo|thZ<)h{9s9fA2wTZ OXfaQo&u%mfX3=GUcK*-JR!?1*n zf$1F(DsfdY*l;m0vaztSnDB09c)`oSD8(Yh62mXcC?UYWxQA&E69a=dM~x^01BA`M zP$7q4YbZn5F9iKWpGj#cJX8_UyriRJU~2r|bfJaGW_djB&mvAnzCjxgcZMsh@rGj>NtaBphypcC|3bP0}lh!3+5Nhe2feXER2S{Ul>aG7#Kk!EMSpJem15I z0S3lBOnaChB0#MS3DOJ<4;UXXegUchVtb%ag&YF|ND)*BD59Z^EMf@K2L>SLpn{EC zW0T3njg5?ebD@%#8rjn2NT}SXnu&{mt{ovgE$A3{jk}VLyLLxVs@ip;Sm70 C#bylv delta 350 zcmaDU@m!1}IKb68B-k}@B8O{62?GPG09~IaNDjh>cMT}X7_>Hro>eRx6OoiGu*ZqepyC@ZQ>jRZL{apVxH{JVMJdW0faa} AMF0Q* diff --git a/phsource/dzh/xdzh b/phsource/dzh/xdzh index c85efd1f5174b938fb7304513ff822dd5774b854..0051aca939c0ba3f81f8bcbcfac26a8c009604d3 100644 GIT binary patch delta 610 zcmaDN_Dq5!IKb68BskD$B8O8w0}zxjFt92xD=|Q42&Y@38o81S^4@z8BXnru^-Hhgk7=BqsbU%o5P}vWgtvIxpCof<(8WtV_0Mo5v<^TWy delta 373 zcmaDR@kERxIKb68B-k}@B8O9b2?GPG0QmEPA%riJ{(5$wGjYneMe3J diff --git a/phsource/g/g b/phsource/g/g index 108957dbd0be35c4f039b9951025545889f27e69..be07cc7561252620b2174b91dba0f1e039b9a7e0 100644 GIT binary patch literal 1227 zcmeHEF;2rk5FDTF*aSiX2oV|zXi}#@6p@GoG&B$blA%WMffN*c0Er?MuW^ki5G8M* zq@bcPGkdWK^pPky>vm^m_fF^8;qk%V>2S~u09=Q-WSU<6_;o`2;d_ZH?FdnI;;tA0 z@i-U<=j_u4o~UFlb3NhG0h?V@P6ek#E2Dv-O} zeXy<#+-&?-I$P7qj+$(BN>Jr1jIfVww6TsR7O{*q#ugfgQRkPShB>4}3zk#Hggiya zN@{gQ^`tzbe#aOY67yP2lo0z|Ba5u&m5@w4vbx9W-u-;eYxdTD{8GKS1mD^TrL$7z zAI)YOz^tb+z#+O=;WV0bBcnqiu_kfN#~ cPwA|D4^3Caca%5z?%29@v+nqx$={pF7vSPzUH||9 literal 969 zcmdr|El&eM5Pf&M*Dgol_z;vdAtab4AP54>CD5e7Kq(4UL4Y5C=nuf~FDm#M6$k{P zseptaD=SZ+2+1*T_dY5>Vz|w{dGlswv-7&At;6$ftK$Kxi(36|4y^VF3X`IaO3J2P3RzqYTX&q@2cM&1h0jGCjBT8SQaclwz5#cbnznNOe0ZB`$8)~DD&tQw z-=-!hJlU=F3qFWS-fNWnC*L|a#vWG1w@BV?#GPfqP=3CfdvjkRU2&UnSI=(B4YhTU s(a$tUovtz`BeJSwinDY`S)CQvk>BLH1KZ7;dB@+l_xOu@FaONFZ@Q9Vq5uE@ diff --git a/phsource/g/g_ b/phsource/g/g_ index f31219e530e28709df1bb1ee0cf1a9d88e6c49c6..37ba3f63352d0e2e42087efe34390d9b1ac597ed 100644 GIT binary patch literal 1228 zcmeHEp-uxq6r9_;?Hz^E0wENG08?E-5F|7K3<-f!M8RMP{6GZ)g(E>!@io;1L6Cd{ zAArJ?nYVXs0SgI&z3h84^WJXu=5-Etw~ssRrUP(!7UP_Ga<%+RPFwzFgbM8d3HEdK zcGv@aKk7#(RJ4IdDqYugo5ZK4JftA+x_h!aQ&y)DNvTIb!VSDuf+D6p9M)@}72tXi z7`TCZV_h4#TKTFp)+Ut=HQ8zuV3aS=!w%L_$1TJbH5h#@Z33 zW+C&BerFoMPfTO{&hOJ`V~_u_z-d(JMn=!)7|YypLvG4NMR^_kl7o@?C*KmAi?Yi# knqiu_kfN$FPwA|Dk4;x4bQCv*Zg1VXS$F);Px# literal 2914 zcmeH|Yfu&E8OImS?!K43o!g$>v%BYhI2_J7A{B^GKoAl@jiQk>Izotv%2)|T;|(Il zprr8xqDh)e;`S2l91*3E z3RxsLqGTfxbujv%egp~57YX7%6U02{4;=K}=XTR5@v;(fxB0Dce~m;Ek`w!rH>M<| zoyl04H7O@0w{ha+3dE9;wNH*cvw6tUK8iq zc1kyo*AwV zZHEHwkH`+WOg<_1$yekWxl0-&owseZowOxNO;WWy!TyZ$Yt`s@&spTAy{mjz{XH?e z17z&=KxJTiOszk~SMP~)Z*ZnMOj^47N9Ap0uX0l`!R>RP&0Z5 zy@U!-4C;ri@ME|KZiK7hA~+q6gF|2dnjwHR6rd9hglYQZ5$J~)eg*yv_JcaG8q|O} zU=kPw1_KW;0th(Z1Zm(|uo4^v-5>;i1}pXT>fm;`3+{!7;Td=XDrgw0LVMAd$cabe zm+`x}5x3&Y_;0uYufQYmU9<^3irV2Sm<@Zt9#9JG-~?Skr_wfBrE}@!^m*C_Qb00b zz!7>fEz*6|Q2GQt5&R3J!SOH?UIz=nEqXeAm)b_nqe`eJsC+7w@>0=M3;7N?m5e37 zFzhfaHdGpx8Fm`Z8Tt%fGK(BfmXp=wI&u$ritHpA%0q=HC)G=yBzKS($(N}KbUKLE z@5hYBqMxH8l!&_FJ~&gq6B@RGl z9feAstm-Z#NsUsTTrHQ&M!7;dXzLVJG1ofHQe`eP1&r(YdUgt~0JEran9gkHZVCD3 z53Ko8uf18@=Bo1kB<9`N({by=)&V2q#|=zMIFfKGA(C(;epTd1+~R=f+v%F4t+S^~ z%fwf$J(f2uAEvZFzrq2$?U?G`y4xzb+ggzRpvA16w}O{VOp6^ zrjNm_NiWRyGdGwk`t0va8`I8oF}Im-nLEra=HJX^=5yvx%zkDqQ_2LGzu+?5i(W@T zbPoOozM`kWBDfCz{$36+$bn)}2t{<0vQaUrM(^pl^))hJ1HOqqM<1chXf>)uZ=!9e z0kxn`)Q12Dn7}vCMf8dO_Ak*~^b8t_GEou=>lx-k3KEeKF^EP{s0VhzOYkf_rth~I zu7%6={pZ4IZ~`2mCs{gt9L|F8!+uzR)}khKSMXurPZbo30uD%Dqv9JW?*DvVPlbCWME)nH01rl@Pe0tQHn*1g#|29$C_+FH4P|5z1CTy2067O0Y}^pTjKvRE x81>Nnz|HQ1<_9INDl|Ws@NP!)LkzzxBf1~NIjHQ1%@!P5%#-J_8x0GO007!nTfqPT delta 369 zcmaDN@kop#IKb68B-k}@B8NkL2?GPG0W@v-`jup~O`McZ3P=X1F6_ X_+=Rpju7V{5{YOKyd~NQYET401SNve#>PUlut{N=2kD?mmDP?&04v^PQR5IXm^s)06A^RmA}JPlgBW(WmBiizB}_)f*p# ztU-+PG3^iA;0&BLw<1lwq(5xV zbmLK?paRB{FJ)N4>k@QK$AqL@ijt}g@}Kg=2=)?(+)!eRMLbeud`-(vlhDdaIlbp7 zDr!~d%d+;UvconTY;wQ_`&8tutF<*&$TO=dGk%Sf@{?MgcB@fk`z23*&(r)mq#t6o;*=)3jN^t%sd5nP6lH3TOUeL4QC`J6rf#(Z{z3;h52`~U%I BSG@oL literal 682 zcmWFzaCHs|b`4}=U|@*PVq!=E(#XJp^?(9|@4$QlDuED-U|?bJ28!PJzlFho@d4u& zunJj50p2ByG9V)vc5;ZZMKEPBg4idx8aN*SRe{(FygED(_Kp7~e81RW;taAPOfYtZ z90S81rafSDG?XE1Wd=Kja0X=teFiB84hC)pUNB|{vUwOdfsh}F1%RY5g91>M8c<#l z$TDRxW-w$hV9;gIW3XlLWw2r}0`jyNWEs>MR2XC!gn*{-fz99s>gNJN4j>J}5R*YR zaRB|w0T*Kf@>qd9R-g)2upW?0xPYz@0GcMwAPO{(A1Gq~t6^IS$iobXPy=((#3F!v QP}t`?ksp#C*~2*`0g`k`1poj5 diff --git a/phsource/j/j@ b/phsource/j/j@ index c28d7dacc3e7a1a2ca7f1585c52b8bff04bc71fc..62819aa88d487a734846a9d24a0b850f83e3418c 100644 GIT binary patch literal 1678 zcmb`HO-~b16o%g^{g`Q|-&7C_DI$?dF^B@nhaJEIVpSASa6y8iHeg6}WlS`6;|dZN z{(vrsG0~-oG3la-8-E0g{sa~-Kuq+#ciK(|RwT~Nx%b?6?!7Z}o;hc3HZw6lcc;$* zV9ju1m1F&7xJr3*ZZv$V+_1Do)bGe5?B(JWjQyW{6 z#%-LzIkX}K9X|MJZZ) zSYhs!L|pRZ2vxyPP!dh2Z+c#->+A#ECsvvK%$d%WI?}%nPR~dhhU;gQigUN>)wBg$ z{_FtEgnB;jm3%bCC|dcm z9G;?x6~?ujQEf+pEILT6o4L`?h~L0EDa>LXIlLpwSxnI~xQS(K;05nbVOsJz%d8qA zrB5w*zdyB3?v%7;2KU)1HWJ?g#se8{dO z1FMI!s}Ns1W@Q_$ea2BToy>;}Bl{Z9_`l!67+DOkQcYtKZ?TOxc!cxJl`-bW1~X=o zZ4j5aCrdKxxQC09>4fZ)%&jiw(+I~nt6`KaCM#WtaSk)SVHtf@0hqmoD~j_0l&!$a#sg!A@_%53u@}f>F~isuatsW6nD#J%%+XMW zuw@zS8T=Vk7_=B<83Y)37`PdDftYQwEaQ6Sg`MV;&oheGS8exUZ~>YEbB!5q2BQwt zHOt_x>EYVI1+(b~&k9}`dnf-rb{Kns%q5_&Ag;&e8byX6hE$+ybQz==1c5H$1GE&bL zfQc`VvBK*TO@?5GbcQ_)i40Z@+6OmQ1sA#yzrdv*Ah@oG_yvAL zKEY4O+O;d)cqY+Fn(D%xI>XJ}d*;r`ot)g}?$+jhbFY>GaB3%tiJ?;8q zBgR_LaG=ufaFx5yJc}bD(tuOpTjwGW$MmHEj|K{*Odupz#P?vr3Yen_KpN1tkxwE| zb<;sMi2&u2N0vam@PstrattY?>Q)lSs!R$;_0v(SiwzvY#T-Upz=9oGj(!1oPKQ?H za}Z@_Rk%M+ZwZT7z&vI!i*@W^4K+s77{w$eP{IIN`a=$j=S@z7tF(w&zRBPhG!&L) zq%+c)p@(N=B_^vVl5H46V-|4fhZrQ6(;}_|(qU!ty`n+{Iw<&$p s^$=^;BG^zHU+Dw8yMKKCEIs{`>+TKqPYPlG=-oL#@1JE==ik@o9o#~JTmS$7 literal 1012 zcmWFzaCHs|b`4}=U|`6KXJ$wN(#XJp^?(9|@4(Unl|YC^Ft9L$f<@;rtYDwV^okM0 zNoIV&ox%73%wEUAz$3#1VK3lf;C=uVkKtwDgs?BzbMZ5MP{b;A{s~CEe2Tzbp{m%83rMsDSTivxPkh)fRF=7gD}KokWCywzjDCE*nm7% zAdeNOf)%U>svN@%kH diff --git a/phsource/j/ja b/phsource/j/ja index d20f80909f7d27712366835efa19729382e574da..8c6c99bf61fe817681816557b43e4be108ccb521 100644 GIT binary patch literal 1680 zcmb`H$xjqP6vn?Ere}IqW??Zf5M&Vq1VmgAa5@Nts1Oi@!37mG0b?{Kqd^jr@#cZ6 zXEEXEK@*~wkl02|JbUsu2TA+`JQ!T!_j;CYm=lTp@~U3FuBxeizxirnZ1D8t#CWFz zz^&^}++c5ibk(TIjP;_Q*%wwW0Vihj)7Jqdt*m2)8F8RW(fw;m%yE&iIPg|8)P!R} zSz#;=eD=bV<~pYWhyyi&ly7Gy8BDo$W>95tO_;6uQ4H)B6Mv|@UQZ4@<}b%5{pGdhYRIE)S)LL2%pf|Kavs2Npg zL_K1NaF?LDhmY&MG>yG@W@q^&jTO}LITuGNM=EEi<{CMPm!}AEw{nznzhY+M+o{({ z^YpsH22F9U4F9;siK|FQ^g3Rl{LlU^UAH8G%P+}J;p8?DSsg!xOef1 zrT!zIR*do=wSqZTxEe(Wvm!xSDN0!97#dKEW4MA|avZ=E=J62caTep4WOfmEahvf7 z&fx;ONv)eRTS&43`)E<_5~4@wVR|_&$~p)6D{fX_2naW~$;!(iu{TMe{(SBA}RMEj+RF%XtGU&%a#7X8J9^oo3 zk;^bwT*Do*nI)Az3}T4hhA!$##|bK^mTbz%BT6#DM*0#~KEjFzOaeZ#$*9Q%(T?a! zG#BQasM$u?`b=IzGl2N7FI%PNx9IA-)%-_g11pzcCZ`Sv-RXZqmWG_&ak#RCRq7yEa3si z3s}Ymp5s3CFhepry_Y-|sgfDydZ?69GMUF^W{0V)UfK}vw|d@t%_P~3R`Z4{Cn4b? gx)Cd;1n+a delta 536 zcmbQhyMv1(IKb68B-k}@B8Nl$76vZH2aH=7KtPtUf@cY%3=@dGlj9U?1XBhhh<$>K zkMjXg6^O0CJB1s@F5z3p24geGz5}X&sHu=+VA#X72W*apGK8(nV8;;7pv<7pAjQDJ zz|Fu5#_W@28P_v^v5cI2o>9EMYWo(34xot;*Gy$R$NPYB3E0++>``zR+~9lwcR>Ts zE;ze{Pk|lg0tT5ycwM8z;KvZj(8G|#V8kHDz|0`Xz{9{dc{kGrCW*s3)~?cY%PKjOb~CXaIOG~L)bDruXrGAeU1{odq@sBf!8704BiYb3_%Qy z45`3?abmD!Fk~=bFqj<8ay;V+!v-#x`KrtrLa^xg!xA736Mw<6Kmf+x!Tpa9#ungH Uf(Oh4=`}zXjGn0felrtN!Nn% zg0ZZC(DPbRDJpISkQGP;^SWJG%M`+SpIrfrq`^5w}qCQl*glAVdB2;Ir#o0|70T}2y{0v96Ptuk2)7!D<^x+8|iImSrJZ~ZSO zt=utpagu%}=~TGnn@-QdBvMPS>(PL{=;gT6m_QdU;WqBz3it3NuHg}Gau*)O33TEJ zpB`YFVhNIpR`S#jpBaa!#mqMc*y_|&wvvcN!$VK~rYdQK8OO-CmQl!DSLV;B_i2-a z@O({KNQ8T(!ltZc9c&gL)S|L!%a@Oeh^;F#N;O~J_zeBAgUts`gq*(r3K))j0Se)* zY_Lr>-KEuoyZzrw(BE5F!E^5acI-zhYl_*in^7By93+z`q%e$&xX)2}lI+JgMsOa} zxW|&=h%*>K2MMJx$ZvF#W)m|bLC@ptCGiM-POy!WisYh`iw9m-A0w4SEFMv^h;mo# zBAsYyZVfVMv>YE*&%JegrkgWL^%U!JU5?89s8T6<`|1Ka>=|=a z`w@3ic^6o$u`6kHASB;x&nhDs=Xt?58oyj2ULOoW&`Q=pmUF9Om2(5^bQf33I1g=TVq0%kxm? ejHIBGhz>9FLUM7NipIP0i6(PSo`qJ9h42>>l+ZN* delta 535 zcmeyyGmncSIKb68B-k}@B8NkL3BwbH2aH=7K;R+6AFd^g5lkTVQ;sqY8KxzSAhrW{ z1Lp(A2Vk}W?-Xtb`-1%f{z>dG@dGj^fGQwrD&!a#_Au=Mo1>u&VH+|8FnBPiGAJ;} zF-S6qf}t>j@MKxW#r5-c1c9t!a9};^0A?_RF|aVCfSD}}H9%7#?&Dp(MP4ywh9Bchv^+`Ykh4_yG}$L_yy$d5|gSy<(Vw3K9Lth#DPr* zwjhQEhy!bG&xs=&o-*S|zp||h@|8Qpfk*p*EqzN5kyc6#F8hkydLGr1hja4#QBMUry zz)_ZLSmZ{OGRcZ4G=(OPQa;^tQYzVGT^M)CYf#N* zT%hNDOftj_p5oA5W{E2DCj?`GnR%W+LeEi68_gdd%^m*=D*b6ad6y8o$faoKw2inr z4Xr&ESLdyT(YQLV><`5_^E zB~&nuJs9JA9DCVIGrmvb7@jfX4!U@Pr+CQs13bn{zR%z$S~y9)TC{mgaCe#9mdNlZ iSuHZoGxmJGMPo7B?;BOFBinKDjZi1tzY2!C^Opd_- delta 389 zcmcb`d4ruJIKb68B-k}@B8NkL2*W$Z2aGz53_$RofsH2v$OEy}Ikh+*K-o*UCAeVh z7~Uz|Fm^k?8#|2sK;{w?j9nqez_5pD4-?274P^*hp22~^i$Q}ykwJoi3kW$G*co^j zxF*Xo9tXN%5!?;G7%G5nSORrJ11HSPCEUB<_QvoE@WRB~`8(KPYzLVic-^4P;KvZg zpapb=7y~a5@&Pd?1Lx$OOeZr!82ngZ;b6_^Ck}JNIt~V5nE4C1PKdzR7kJi)LfFO} Xule)fZgY^yVuq=~77mjgSY`nLiiS}$ diff --git a/phsource/j/jo b/phsource/j/jo index dd5e52d07a7140d7a4cef42f5713f19287a456f3..20a6a266d6504848d16e4f46785b8292670ace6c 100644 GIT binary patch literal 2060 zcmb_dNl#Nz6#iZZI`_4-1v*gBf`Al6Avi$fA`UE!sp0~OMjRGs;t+>Kjf>}kNQ_Hk zT)H5xT%d^&6BD~JF>ZC?!bSgqE?lXJe&@FIwUxw}_)gxv=YIFR;eOve=gt)NO&y&% zyv+gN{3SQevah|A`^9{Dtejtd{nDv$PJ8yRG=Pt6Na}Q>C6asxNAz-z~AhmG{+ zYLO8M(pT@AQ|8YbG%LQ7~9uT@);Z5kPDM4oMieiA9PBZqzr({|DJpn!uo zz|jt8mD91c;Z zqnN=yswW(Cd$A9&H)*0pfEFb4N&0bk*h+*Tequ4U@>GyBJ~WZrFgp1kX?{D-nK;K$ zK9Ru059{!I&AW1cTvNr#ylB7*4f-foeJ14%#On1~^eA(gxn*b4yssFn=l(&k=&MKi z!o>y+J2T+7{w0$}D}N9CnMvDm4J%}QGr4KzPHkb1wCf$+L#}hw;x2RT7_Q?qCeWv| zXOQ`$aDmWsh2$aHOGGP?9rNp^zN6vFS!!s7evj_QA|r^hUA<1LvTW=3?e&9OEO;2!hnB=caBDim1t zr?7*ZZy{qt^p0Sbh+_0!&i9f%sf=;5DOJitZA01uR3WB!e27>?k6NhuX1=MLN@S@} zihYV+H`VUqUXUu<%2*QJC26g7sR+GfoXUgABnX&3J{?uX|XK(?paFg86 zVG+-;AE&UDY;7VZ9eRg$u#QaQ3hpp7`l-$&BhC>UqdHqz_oi9PHj={>`R^v13GQyG pfO4Xk)m|!Ci1kOZC(I1kz}Ph3(#5YxHfA{zFGVFppBSHS!*4Ruh`okm9h(djg#Cbf z2m1rY2Vij%UJq^h%Q9BRnuer|^8@gt0aG?!g_QAj1SS2NERMygNC7 z}Fm?$imk5l#gL@A!upxfX0KnFN AfdBvi diff --git a/phsource/j/ju b/phsource/j/ju index 32768cca87b28fbb418451b768f83f719fc68b38..a8951a92afb92cb9219661857622104189119b8d 100644 GIT binary patch literal 1654 zcmb7^%}*0i6vfXB9XivN4wNdOBgltR1^fVkDw;mUsxbzsEeUF(MvXz;nUD|?lgh@J zXyVeuEsL()vT0%$MrGs5h0FN^T)1#yaO1f%^ke8kotHav=gfOE^X~7Rm!Hqh7V^1q z9l)dI5N`9@cqrq`_N{99QO#=FHH2_~TV35)L{WG26*p zAJtwmm*6=9%hg;hqyZAZ{x-yd%KLc52r8~q;TTu@$q^F3N-t2>%X(c&4K^wh(#bng z)ueVE#0)OsAoijg?T90WHt@GNJIUhABFy$+3<@WC9!Cb#IED${rIE!P&Y%Y)7{WgE zp^JSjw6e)N!aTR|+`?ud>V-U$9$_|vSCe0oTvYjD%xe+q@^w)o$ZVC&&)y#^<5TU= zt4Up3pybzDo-Hz(m|!Wu%AGrqHr>-b8Yz~7k6$S-F;69pBfLM%HjV@6=lCQ; zY8v(GEY*&($_ekzV4Xu=gsB;9CYktLLf#YMAS)r_y+bmS<1<^oKF)iyP{yY6=c9}@ zKS5n9@Evp8s*tH@K{5qR*^a){;FdB!9waklsrDe5Qmoh(ROl8nsQkZMCTsuMOlAsq z>D^~^fWy`9u&#Yv{SN&xKnIK5?PT6XKPIT#Uh|R|NiBpD22h8r_ z;^Tb4_yEjS;AP{1vG?iguW;0e fz}PEz^q}sk+PuGpwrs#O7sC diff --git a/phsource/j/xj b/phsource/j/xj index 7d107118312a7ffe83a63005198827ee8fb24af8..5448888966c97c1131a664d0ac8b44bfd08f34b1 100644 GIT binary patch literal 854 zcmd^+ze)o^5XOIZ=HhuVe^5k`L?RIlf>9$j0rfxx8zBt4PAym`JGSb>$YzyQkGo)>3o&)pp9 zIHROePc?z{p$Y>{zXAh$U`I@~5@#AFDO}YbXJRWHa!G}4mT}3D4KXc$mKp85P|!I~ zSy}74UzNAd9=q(YMU4Z_Xi!(QNr?^CC^Dxmxv)n@^`5pXYcTF?UUEqZKU`XoqsUQ) z6V{kXJWWwhw?!7zFE8fk^YPsar;oIle1?eotIsH*PbZ;IGojCELZ63U`an0gl+fqp HAM5i4RI67V literal 682 zcmWFzaCHs|b`4}=U|^`oVq!=E(#XJp^?(9|@4);4DuED-0E$3#Y+?Ao@PKg(ScNQO z2KN$18IX|-J2?VaBbYK6LF^M;9vlxCAAs2kybHJ>Y`yIzd=hLhaR%8PKot-*6>W`AQk|U!VC&PRcb(aMIg(R z!I;62!GJ-RL65pWP2swZ>2t!N;*~G!X z0>m&eHXx4`$YTYnU7eEk$xPezT zfD*e3l~{l@DNSnRl}5O1SEbALaK*;oYeTQ&26!Fe?+I6mj3>4t1K_-LUJ6(EN8$6S z;Yx7m7vK$E`ZSr8cqJpnTzNh8xuL&|k(<%imX;0jkinx;#Wc)>X@a6cQ26yy$*-Fg zes%=?%&gesNK^K3*93~?{Ab20JnD-p0w3Epg&7p##td*1M3)N4FH;n4_LEW@iQ=K| z$A_F1iZuL>Z+E0)`@{%*=_mq=)N!&%=UJo^#&h*6cup8y+M1Xy&71|YeTXEBZbvJ0 zPt35+BAOKy_{TmDV+L=G8HDjz?S#jKk*cR)Dp^wPY@^&x7Pf1^Dvz-p0UmNj4(=#M{=pq-=49Ist-g))s`qaV|V;; zXB^^FrWIQ;JfxNsl?J2ihuX;+cnUO3Yl0_2E31tD1ES{(r zz{xj^NEUcn- z;%rDHU2#SI0>38A?seb);#%^7WO+81+iCTBFTNEY4d z4(K3#QKTm$?Tg3keW5ST8of5LF91kigh#DqU+~r$X`Z~1CIE}RC{MG@A`_=WCdr~# z-3h%Ui=cfK2FbQ}m3@L&Nfu2;liVaMsKG%pXeVLYn>BBwxrHN0KE^>lVZ0U#$S>3G z-C*}(17RFy18|ryYK`CIT7e-fsY%%O9%KzO1_y7F8C8e|6cWbL*dK5yVPx6kFpDsJ zOh+GKR2oH6?ukSvv-?twub6)MiJKME?>?#0`vx8w9aZ z-3KcPV!zf8`w60ieFG%~amqN0rv!x1+}1Pd%wQCV@87gU+{XmCPY_M!e*7!c~?C zujBzQL9{3x&_WPi-Vbug31YEk;9`O(V8@_< zAa)xc;%)))LenWK#5?OO5u2o3*hCNqm1}U2Abi>u^btfAI}KF?k?8EeL??Z&uxM=G zHZh5l(TrHv#&HfF#Zo2|6UG6h2M!QMf%YpF5Jnxl1a*Xw=X6SW6Ei}`z>j<)BdUW( zSH(Dt6;e8^AdE`o98?lUs#YSU62@M35%v;BuW=rGCtgw^hHK3EDXJxPWb-`vUoXC4 ACIA2c delta 3348 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 delta 3348 zcmb7`eQ*@@8ONVzH_2@_ySI1AU2?gE%jNCf-#8PnAXEtlOvY+7sZdR^5jzqpm2&A= zQkg^w1;+4lDs^fL6%@r89HC1Mq*Q`Xap+7ZNe8Ay6N;L^&=LuRW@=y3UGBNvWhP4f zV`qMIlganWapIF6>= zdzA;k!+4nY@;K#5pJV1z5HqL$J|T@}B_x2O%u)4!!83OK{3Dls_Eo0Oe=Fb$>Ma%l z%}(2l;yb1lxzCqxtZ>RMtYcS1xC}-i`k_$6SgK*9ghnPMq%l(B&oL#YF*cb!rcDac zmt#b@42E2u-OMh}sJYPxZc;nL0V>Z;(?|05Fh|JrMInV36=iiuJ!UWV+*S=hQ=6Up zFx#QK^D6GVr1v@ZDtu0QXZZWG&+ut&6rV#RcjwH9;oMiy+iP_cyiz#obeFwbv9av^rWk~sgjnT zvfg646a!F7dV}0*7$iNfP=j95yDmP4*GaEYy396e&59WGT9@g1t&eAhe4yY#yRUfv zw2AVq)wRCA_}2sifkJtgeIeWNqEgJmco>T?0-S=-$MiA%+)lWpAiU4K&r}IFV7`K| zo?Xvg6+O60K^S6(Seu2-?lK_s6zC0em+EJqJAEFppDg;UWVaiu_xS3AgP{k*zX=6{ z6LL?nQtoK-0|g^}$0FJt8{vKpBQ%LJVF1c#5(8p34$ve{TkCU9TXi{o@&NiI4CVga zv}WCODOPBvN4aBQQEs$qdNS{yP)er%Eb_RYOz*Rp45k65Hm#_U>H6Z2o%>zB$|t-R z1CNIHMGi!M5^fG2l1IxE`VDhn88|5X6Wm5PL6-9c0rSc7n79(h$ntLUQg*jiw%e~2 zd93eMlP4Qj%sf z`(srRVCMW<87Rvwz21_Qy*Gc~<@lDf#bv8p=ZyzH4R=H__S0yS><%bp%cShbBJh*t zVQw7^ljZTedvTnW%1QBQJV};!NITdaTG=Kir%qX4DqY1-mGqVUqw2r@wum|Yvzkw8 zKdb$FO_O|AL@k@PNoz45Y6&Bh3#dFdcUxy(3_A(qC2;~?B8)ca6Shsm_&+B9^|&(m z$;piE`6$7B(wmd}4$dLHa9%!!NiQi1m?XUxDZ#XS1-<93p8Qc;iL=rDj_1SB+IZ{C zj@iBP_h%&31$zk~TaEuAWpj2SIG<#mWR7qXu$}`>jXyW@1X<~rqul1AOym*ntQLPXnXF9z-ktx8e8FZbwz+qC!_m$e%jUdZS0!(nwNP*T zN(Esh%^}785mFTYUOs|*X~)kL5ogjIM$9kZh}QTe-M5Qh-ZEFY zSWaqd_;FZ6YH=|SMd=$+N#z1N@!xDUXjHfkIlz%fv! zE|dw=N%+(RLVyjhP5d>uiw8+<)P3S%SR{hw8hedhCmlnd1YEjN5ksQ@^hN<>8g>kxf-Kx`7_f~Af=&6%Qa{elnl8gxQ~EC7$)AHe$?|mZ zMVL;OmrAX;RI_Y+g+>go>}XOOu+(ViRE&v0jMNUA`r#m{#gsT>q!tu^1wm4KS$Z8` z*3^t22*%fxKHxsP;Mi9Bjq>j5-ToV)ozczHe;fbi9dF8aFIMhyrr7r|m2eM1w3)6# z8$smoBIXc;ReT$)1mTvN(5*qV8?I4%w_a==Vo3UB!QI76T&F8`c=q`(2j_-U;qlOM z`Qb+lb6?CvVKG5;n1-N(AZGCr&LW69aVOLf#0KfRxIu&XqGIb1^0yx~%)Ob3Lo=yu zH~k*AlUkC09FwHhD(-_;Qgc}P(P7Da9vD+juF@^<(XLTHzfpR?zQMVmtgEudYY#x^ zPoZ@opS*S1EuY|v7(Xl`jBTbt*hUz2{Kr^F813S5XeW#si-oC~5@SVD$1s#F^~5dT zhw~UO%p<)PQ#Z7bUKQWKRFU3hu@^Rz-mr8Oho>B})lhDI$hkQV;aTfLh5gPU*W!x& Q>Pwyz-h*=Q_w4Nd0O>H{lmGw# diff --git a/phsource/j2/j2a b/phsource/j2/j2a index 1a9ac505a57a6ee771601423c393f925eac874ad..4c806852d9d51b648c6801f81e54bcfd378d5472 100644 GIT binary patch delta 6932 zcmcK94@{J090&04?|EOi_uhNo_s+D;Qc;`?F`P)rlvJ?Na<(*TB1#kIC>!PIk0IzZ z!Zp*aniyJEG-Kf`j4l$BilWH56*_ET*_C0sm1Tcy{V`Y1aVK}bmv`iOa@!5|+rjbK z@A>|o=Q+9`7j-WREpOgUH{6jof6~)h?pnyle)-H7`C_5`x)8%DTRwp^bcPCKr2rY) z7Wo8HM2grXE1RHu(n$A&Dyn>~O0&#em}Q23PpER%I)t+p&>~tys3Lz9t1k~#&h)$k zX2??6NLG@S)G^VO?BLJ!JW|hp)BCltak1iHm`qui%naGuJ;-K;5uR@`f*G>R<;Y@& zlh#U{yck2ecHsv9!>S`9lSUzvA?9eOF^3_NJ%^FZ5EINrn7|N6tOs!9Vi2)3!aqfG zL}bwrWHCgN=Ak5pcu)TV@9EL2DbuV*CPVyYJ&NB39C6MwQz6=%;~mzss9FIf5{xP2 zLoLB`TpSmnU?gcfFwq5_-G) zX|*s|KZ*{fx1I24MkPR!3d$;HWElNU1uJ z${6R2qc~?o52<6;2RPRMvdWcj6W@^X-!jxO8)Y;SWem~oN}_g#Q1tPnFhsY}j&6pi zx9+F<{t*=Sr1hIuhkG$hGf=!kb24d`Nw0&6xE*cku* z%Qg(>UX<^NVb~rT8SaHo{>hPWe?r5c31F(28V>h3*JNsuh)B41x;0uN5s`4eW4s{4 z4Mf7-Y8f=d3-k$h&py~2Za{`Rx+IsF40lwezg^G2B{_`v889P=03{(+z*izl!ibK< zNpwvj^a$c{w?U`e@C1}Vc>26#w4%jmbw?0>YYc6-a$L~}Ku)Nr;nTCAZXeD{60v?1 zl*ok23Pz{r;V_{VrZ}cTi0Kfr6Or@Bn#8%ZCNVnNtKE0fYPOu}jDJwameVdPlXlsb z(@fbq4u%L=MHH|hGBlQnV6-!|cn(qi zW9g2F95D?!46!#MoAxF|ccRffmKqtN$@m;i3^Ce!JB^l^7|@fTzb?ZOFjHbYb- zbfbbHUUAQ*R~Vwrs7D(^v|3-I)z*nC`*tGEonrZQ;UT+x86UDG;u(}MhC6}C%@~UQ z75HAU-}n>z8DqHj1{&UfFPw*LZY)DKeM-0&hmqq;Q__^s)nbciM7_Wjk@@t4dI()A zE{n{kEd3h<=hH!PFnn#OGmc@R0V6V>j#~;nWI?M^s(MdQz>`<7VKf7iw9>2j32LGy z=Tp=W>vzcha(%cL8MY0tQZg!8FHWf~IHgACVys?`v25RNH{L`$>qVh=3Kd>VFJd~F zH|2yG<86$`#0PkcF^;HD;Rs_a)!VR?G1`oSwqz{x4y9!_hHXX#msFfHYSoR7@!lx@ zz($5>R;$p=5Jmbf6fwm2hM@0RFXnjDXpRkW>3551H-~$%;t?M2CxnZhV2o|*c5Gve zrFxyM7ki90>|u;N?^MdOF&ugk=aizkj=k6_KEYOos8TnhiXn>iohW9#c*}SmZ!tu! z*GIWF#Mr*0w(o+3|~!EpkLOi*0CTh>dDFHZnw&yl+=A#0g_7PO#O@S->9f1S^NDO93U&w&budPm>PH!4EYY`P31fU}+=EXUqs!WhuKpR$ z$BzlIM0?v($6mZEUdFo&QK~+PQihnRKZltNane|flMGSqy^N}D3(9s;y#)8|!eU3n zK2eH&46#{mc$*o*&={~#Cef&^v+bJ%=&0_Suj)()|S{z`A3Uvc2 z7~-`1L7ZlX@?!H&6f?wb-?OyahHywla$KJ=`@g%-5m6)NqlO_mRfRekVw^sm#<5N; zGC#y3hN$sXQqBJ(;@q=$mO3IfiF|Bgi1dW%l+NxI3HnD!V2DcdASxN6#5aaY1{`tU z!;XjwF%K0C(V!ki1M9?9`fgms5G&12tYnBnUlA4B5bI|2xoxkT5!Y=yW0fOft(c6p z46$B)2-;~Df|b`9 cB3Nl=|FZ~IUS)`2rS@VFF&#Yiu1iz?1AX>b6951J delta 4338 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 spq4;=K6cX;*#$70HBq%G6&{@0|91n77fWO z`2*l#9`>$DJe^Q40~}+=7=Hz9acJ?=xmsLY5R3nwDyBACt!A`1 z?bVqTIqB|8dE4`yN-ow3kB7uKMjDntnu@Vn#R!|5S=b!I2unZ5uoT1CVeuGtaHRjo z2#Fd-g&4H%na z0CBxW>u+s>L&{9f+2dYYu)gS5o-aJTN>lO*L3Q5CQ}zb0B9fZ+B5u@n1?dm6n#KDf=Bd-_tPw z>4Y#M?t>9E<(m*s`MTu6>x5vp3W;`Wywnm=LtsoxSy&cNdD3w@{nM<2ZY+AaxY0LW zcAx)^GM{fw8P4PtABn`BcW{h&<4uacgGs`0nMc7zPK-*4I7%4jY>i3hY;g>|6Z2P~ z^81`sTCrtgzUuq5cpRolEn@mNM5x|Bkc{{Nsr6e8iT!HQU)|=7nIAg`a*GSrdasr~ z?C%d84m{&u1O=PkC|q&!o^ zi*4PSxWz@71x2JcCU(IX>D8Nav7Yp%r0?Mr=^c?L5{{_FrcZkQV%wkb9cNpvy`aY% z^8MA{U5>#Ym$xYHQeCl?U^k1xXL>WA%sTJ-SK${W8v~ZmPb)vE`n2jFl`YD*0zRSp)_{gu;q7g%=%|K1On?XZ z=V0V8K++j@hE-t-G$BY#U_x0k;G$$mOcTW(8ajneVWa$s zutwgR5F5LLk=880c>Gun@SPCd3WJeAKL1_dUz9sTx++|TGAtuE7AL=ni)q>TO)2On zH#SIS+(2%$$@Q#FbwgkCn};+vwC;b-=1G~hXE~eQZ+b44b%oX~?EdD7nw3gtb)9|) z-Ooqr{e*E;oP(ouD9NTrFqtrFq|c#-FhK4?m=`0cTQ(ZTP|AxbX1hJp?%wb9mv60p zbnz>7h02aQR%mm#gClehLRkD0gbCr0F@T3?_%DXZ`bL<)@qUo!&kq#d^dyx2r|dW7S)q=~OVtOy zaaeh0DIa<3-S6?5i!RZ#m9 z*m(;^uXFDkuEF~RvB)?EiwI(Y^gJveh}H5sT&+S>==N(sXE9^(<)+BZy1ELo00c?x zb;Ag}PHI7Zpg~geNxuLesl6b-f-k6Qw@X=Tr1K7Q#-8lE@`j2ImfS4cSH5$>+o5k) zyr$GX@TGoU!U|vsVQe&9hmC}hWRx(8Fl^Ew*a*Wdx1jqgF|^C$NAgRlwVAEC=kohJ z{Uz6YHU6-FR%v~R_p=M#rt?BJdw`Y0U97=wW#?J9;UkD79dK;nC4Yxe#w*DuQZM6W ztdsUZyVM{@<8AU|D9a6|XdE5Qm$Od_6yN!DZWoKi(Zg@N6)WF;nEUSH|Bb4xVj->u z5LMf2_ybqtUUIb!#x-1xzm30joz&0OVsVCbgsa8km|8r>TesIZMf8-T@rZG|e6M4h zbGfUxpwjCog|a`F^^_GWyC2nU^9EJ|4dnVB!#M0A*XxWQV;#A^Svm=u$@NOBl~t-& z3Vo@~KU9?PTHej^*|C&)VJWG#8HS*Z)C!GFtdP`pN+)0^sZGeoa6&y}{p{%I)UA#L LwXlEv{Ziq7W(DG8 diff --git a/phsource/j2/j2i b/phsource/j2/j2i index 49b13317901bfd2f31e5ca2a4558d5ec1a089dd9..fe60d416f4558a16f01db1013837b24c86d82b58 100644 GIT binary patch delta 4763 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 Qbe>RNi;5E5SB>?;f5sUD_W%F@ delta 1875 zcmb7_Z%kWN7{=doZvWi2x3?`&*vj9+ia;r2Z9$m9p~8e_&>5HlR2_i)c`YvQ8&_V(tc z&vSmy``NKi0G6y09Im!%BR3OhS zsm19ZXAatL6^5N}?(B8fd$TJX6;omkN@G;_q7lDPsVX~&KovtVRE_fBc?7AecomPb z5g27bL(GgBo@B-hpeE0kI1l=f11&K>!Z+a+9@JCJ6gek!W&%=-NoFLAvdOZ1c^2(z zr=)uOJDcERU569~ttb;(DT5X5EUakdb6fR?u~je6bKDV_<75Vt{AHNr6K72@0Qffs z;v+gDyV>`G(9I>#_aQs-72~52i~CAmiTmK_vq(5LPF?5}-cNG{e+DpaqD}NA za>HE&8RfVf*J~a}zpB9y#Zi1f$Ki`Q(30@aa-YDE6n=mSFglYDJxKWPnuaYi)(P8t zxotZ>EIM8K=gzzCiHb(?oK@PyjnSvR5~jDgf=d#TX55T#qCx;^!-?v=dL5lq%Lgyk zH6Upfx1L|(z6WU)w|W#cokt@Q1Z5Q+8HxQ!gyUtURov=MOZH&S5&Hqh(c))avGQq8 ztm5g1U#=PuFKs8`oYx#v!tr?i5sn78gGTa2`ij+K7*k*Ux&qWs!0an6n$D!UK%aETG~;%B(B;?IAZt}LE}giwifq8Erqa8^%?9_ z$>HqRPs4uNoMrA8Sf&tWP1R^NerY8`a3?j#%PP$ge{&EBGsmwBdBq9Yy^`!+D%+qs z2@O;>pg#)%DtnEag=pqK2KdtudyA>-k#TyU%6w^QSeZexVtP}a&x8Q zu+YBC*&T>TMb(kaefV`kKf4F_;2f0*8_ZBj9j?PS^b;_k2OX)*H{4CAq}}%>#h&<9eQo~BGM%=Zu_S>wnrpSE<-e9cBKB5VnZE(Px4d}( diff --git a/phsource/j2/j2u b/phsource/j2/j2u index 6d03ad5cb5189d79383f414ea2aba4b1963a14de..a4314c7ae5103d73af0e8f7985189305da91108d 100644 GIT binary patch delta 5356 zcmcJTYfKbp6o%h#7T9lgznQIwqLE6akrE@JMO;d~utcc-utCKOyBZ@!jlozisg)n3 zUSgvrl3Fy@rb{%&L~2M>FnB{lTG9|}C^5CRp%+b!(O4Tr68l3-XP9Mo&g=v_P)T-o za>8Doec$(-^X=E)v75g#wQNDjoW*4eb6o(caz9fFwrdy2=N;O8xl}F%wZ|a-!6EGi z^s-(S(jG%7=8qGLIglx3O8d3Se(aIE*&f-bBrqU>Em3~Q62*8Oqq2U~7HRz`pjB#> zjEeSD)QmAIz1p*Si?lnSdZMY+U&(siT$!Q&Q~zJqz(w@&?3op=ehSJkfqjAr`a47! z7Rg*%6#2vkLyPyv#1^laVU?23RuP6tqrkP>U#yfW^9O zvSugFklZD8Nk*65$Dd<2Z%Y&|;W9c@*i*u)J#C2%QbVMJj#myrC_8wItHovX)Tin< zSnY$$+-0Zp*{NW9rN7G>N(9oO6{01rXI-0Qu1t^i)U4>$z(uo|5J^RzCESAfA&3^c z_zvtMT0HR-vnNE0S;{8NB3d;1ils(NkMhT-Vp?1(92u%>qOGA6HWdnic))Mr0f7jJ zIw_z9S)YN%H(#yHVbuiUoNv7A+~5$p7V*(`1aT-M0&zhLrJwnkF}BBOsaVIL#tgMf zE@ELBNijpc>upU6cwsWsNfBgS0`8chI@Q~{p%To7^4l3IWuoD_h{xg#l|SGf*chrj z(^iSGEE8ji5;u4^ZV)A|dESw(5j%B?%* z%rY!ZwuwJM6M@+2`Gf5w5En%)E)s~lDr0wt)1Ms8?c3S55Gk6SQiu{^`7da8GHro{ zp4CZ(1fpJSMm>SJqW**{!+|*6=U`Htc*_+xlYRCNQ!ObXXUKKKee#O`qLS) zO~>%+uVa8Us$Zf}g=~&CaC*FH3`94m{(%yU_F6J42HVJ+rxw_1kP&D8m(c-fDEiMnOMSQd!Y4Lbw1frEFk;7&ni$Kif8?k~w2+ut?g=iOF z;BNxq_1y(5{ptVTpUwqrmB?k&kV_ykcnBE;;)VRZ>jhEbkvNY>1VZus0_CMcR2SPq zV%?czO52-*+R@E47c2C zam#I<6d}14A;NG;EW#ziP~Z!rU_XGz*f;xhcE|;)$g0W4k#5STuhZ;bK zB^8$bq)&>zz7b)}Ulzg0wVWz~Yz=}0W2?IoTM0&v{2t387zebueSlzetEK238Y6xo zcXZZ%Wx1`TD%o;W5{L@-CR7lJrSfsMlt6^V280R3Gj$oB4Gv+P@J6J?4=ZgU^qygC s0Ruk<>XkDI=5Xtk3*?71z0ydIMtbF#CER^|acy>F4XXLb`%_&10xOYHR{#J2 delta 3299 zcmb7{YfKbZ7>2(y1MHdIGqVDV+*a8|L7)P5!36|iQP9NLpr9ydtpvPbR5Y=gmU@eg zwUMf5tWB}rBc-%h$Knl*t;SMo(P-2fTCLF-jhBd8^@mDl+;3;531;IDlJ5uMect!H z-#Np@zsWDZ6R~7W;qY-Kg=0AYs9rB+EzO|q$~cjm$i0G%@JgAVkSC;oJ`60N0P$Qr zw@TnUc3h5Mepy=4qm{`4hCrB+SI=WwPE_axUW7Z^z+V1VJ~b8Z976Yh0F|2 z?)6ma5Rb77vYm|NXZjGL$)^xaya>et<%&_Z)p9AY)#62%D#nnhh~Nwcs{HstST@{; zAUgvm>uRxND8!;#2i-F5M^`?lp#cuIhQmc#3NP-kC^wAk4sf>T!YA<`YC5n{gibGd0y~j zeyQ(3Lr4OIpxQ*b4<@487W21c3#x%w2Y{9@O7r2Orsls>4r#A-R_NXE8v9y@)W1D` zS3-T_7m2&&ZDEBvL@0@aP=u(Zn@BA}RGa6KYJ{NTTA&DVU77~h-vVNeIL2BPDn)!_ zZ*#c&KZrk@a3=9aqC-9$S;)_903hmig($gG0wL$PbKGkB0#?%FfsAK-gSn6_HXjdc z(>yVt?3{P&PCLD`e6){Jwsfs*jJScJ z=@oPttU%LU<^s}%riY3(FceKUTMM{mt=w+IIj0%U8NgTW-&jDejIa?=oqbQn-i&)E zVMAh6QoDT5Y1n3w3IVx z0o(fef(Ot7wj>#f-J8TiZ}fJacEWk|cG^6IJB{&nupQ8WYm{nrajBX&n;~AeAzqud z%MoETd`0wGhbjL1q?(k_cW1atTvrF>%Q-1Zr`qwx4k5AHcI~5Gun!@Yn{SZi2yuwj z!6AgWDG_qhZ?O#*Sf0yZ*`@?+L(2`q15g5feS~@Ds-Qen+rs9<7F0Vb{Rv0?s7fUM<(S4ZCb7$zVr_THzK~ix4M;1wkiqZe-Qa zh!A_E&9KKWgx;xDwiCU7jXvtUG+<})A1<1~hHTB=o*gZJK4iFhi|)eYn+rC=@f$0I{zpn1m07Mr_OuXA{E1;Zhy1%H8e{g__nqsQr}?Z7R4eox#6C6`PeX}Y;9;cm1IK#LX4#IU@}55^DUDP;w1YDo+E_CdJ{lvy#K3Q{&|Gq zZFZ3~aG_c(Er(cCdnugdU!vvv>;T+HHPQMPh;O6TIm!@lx}uhjY8F}q7F4Sj`f&BA zc8sltW2p8>+60fZfX|%KAI0e&{ZZ5deje3o@8vuge{CR5yO4Q%=)d{<3c3n+%dDt? zpOx2+31^W4$U+LB9|9mng)o*>AjMWT6}BP;v#tX6HlD2|2G1kOSQv?Fmrc{*vdO#7 zK zp$H)kn5Mu1geVcNLJ2|~Vso_{j9EW>gXLR!Jq3Tzam@*FRf!cTAElLM{*W`m^KjUj zf?&CP((85hB|nCg!WhJ;H!XmA#E20JNep5vVpCudX3;Krpj|tEW4F7zd%}?4|3G=1 zUE1SZMy5d->Mb-?!a~$b72YGMsJBkJ#nz!-r&I);J?a@>M*SnKCi;qfp~D?FC22`& zX?k1c+MJfW0C`QN;c>1clb{k2Doiy{fe59-4pNE;4QviHAi^_g0zB&x0iZ|A>t`6& tS!uZPe}(tMUY+*_c*~~F2l2yRotyDfK%KW~W$W(N7wipc-_1_q{{v!cy+r^3 diff --git a/phsource/j2/xj2 b/phsource/j2/xj2 index 0191fa6e2f9a967c6e176b1e311151d8541469f3..097077b25e5bc6e6a23d0ebaba637c5560f62f91 100644 GIT binary patch literal 855 zcmeH^y-EW?6otRp>?WIy`9TpuqpYlG5d4dz5!6KyY=lSze`*WS!q(CUu=523^AHv( z@)(wR0vm1YJhL&`kiih6n8l|+F+omzg1mNFsOX#`RMxWI z7sVQEv&ANBth37rJJc1eGS3Q2RGCzlQqrTK`as*)ZPD*+zvSZz11+n_Q{*YbOKR*S qfu^Xa+YHm{SC+E>{rdcoOrLr&{25Yh)Svru0Wy$*1M2|=2;YHu{=PCW6CoA>LrezQ#KFJ< z#4s^7AdeNuV+E>U1?vI1gbU~j0ibE(45C2u_<PP(m diff --git a/phsource/l/L1_@L b/phsource/l/L1_@L index a306100829a1b1878cd86caa893f55c5d8720c68..c135ee01c711ad8a43562397c84c8d66c202ad3b 100644 GIT binary patch literal 5387 zcmds*TWnm#8OJ}b_ju1_*Xv8XcH)>^OfJ}o$Yqa#04-^_gmP)9xCntIKuEk4 zl@|+mKoEq)6GClOfsm+FM0m0UQM(d6_JJ3kijbd?kfI792#ECepV`^7Yl}2e-G}1Q zoSE~TnK@^_-}!&v9G|)4r!&t(M z&n{mu%iouo$lQ-r)hy05%IjS#UB98PYBnDwL+f4ZUFYblax5ezS+ZSbs%ERDq_5L* zwr@4xX|eG}B+J*#P&IpY%IresLMFA$&$e5ZG|2tUhfb@Vw&S*BH}P9uv1J>x?KW@I zw$~2WX?xMm*b&=hJ8Z_PRV%3Ih&<3pEwy}mUeO9u9t3@mYi!En)D^mI?qs*^SrdgwElQuzH;W$Puvs#(; zwoyvVt$+LBJ1@B3lSJ<&tsmCxq_#(}1Y%F$5XPm%f+ZyuEGe;INr`Q=-1@{uOE~wm zu8!Ez)}+nEYL?h_R<{QrwrC^p*-cr*^AFhXA$E|m7q3s@#WCljIooH~!0Zr&m*I7s z`U|@k!q+ixA7{syvy(a7VJ)AJFn55teemd|7C4Gd4v)w5@{U$)Jrv(BKxGJ0OYcgVXPAJ#))|G>5d24+8l~F2)i1pozusi_*TmCGvge!F zk|@~PnVJ2=RyRdP8|aLT=d($_B3i1myNk(&$oOe#b%W*aeT|%EwP|rnBjYSl@i1P$ z2S&@V*$1y9Fg$CIqnsVYHfd}ae+@xR?{$&>ICSt6^HDt92aO(T#4&GK$4lDEK~G0TM%4m$h)|DLm!e@6Vxv&feJebRsFhh!5moH# zmo7Yavm=y5?=+gIT1{$u3|oket;;Tx`D_+!AvSgggUe(-n*~!FkESVD4#gYCq?R;y z{ikeprPw%$#}C5ov^|KF zoc6oSw!rvFR915lRJ^AcFJ&nI^s+`CLa}wjC(C-$Sh9yFBlSGTSI? zPB+;ppGj|8ug_JH6Z!h3uRi{pb666+9URwcQ`-u*|2@0KP3%(3*08JK1!7vosCkZ(=mK3`tr0i zCHmr{JSK%{KOr5*RPj>w^ZOD-(;}mLsd@q(y&~1`qr|RAtyy|KR{#FBFF$GW`{Q&A zT(grz!S*DUpXPV@a+n#kms-+z8O8*qg>%2Jlr{a^JZ5Y7)!2m`VkdD6`;a=`F5`Rc zEoOPwYj|BnUeo?ht%~-A(xNn_-NOuPY^POZ8zZhsc|OK%Bhrn-(ML_~0mV=&iI0zy zq8PcpZxu_G>$#!Q1V;9r;Meuc3!ruO(`x@|H1n0Ajp7o7+&skDNZ}c{@8k1U9`fY<{b-a<$ zn5*Y_r7wbUi0wv+%RK2I48}O$11srbhGQA8D^E!)D#~6(j^a5;ufiOCB`CA?b6#eJ z31Y0~`v^D4HAUfJ#;fQJP|i};QuS*qVk#EuT!eL$GS!Q@dy%U6t^K6b8lFYObzLJp zzmMY|oBaNiG_kdsBnmcd+=C8Ro(==H`upJ7g|Ko;G+3^l-<5LUFnLbIPLRL%K&*s@ z=FmA-zYMpLM{rk`VdDuBBiT?0V z@K|V5TYEJ9f2KGAGwmdgp~3|S_Cj^9i+UxFiktF%2@lD4@?H^NNe4R9H=Ebp9B;rl ztjcbO=rg70`|LKt8{t)|St|O*^KmrzUlc@D?8HJua;{Z$&A>~#^x09dAVg#TR{7|x zcR_R`IDT`{?-x^Mfua#J1KW0v=}u#-)tKHns4=})P~&3!-|R>y$Ywj)i!AUBup8f$ zIiEm5%3vk*wBJotVR6f-xlK`3|6NhhJK(p#5o{6*)!Bzp6q)Q`TG+MeQ> zLR77-owG)^Ju5E7>s?9dzD$}GYis3bwIeGo#e5BRWW3ti8@);QdRtapj92;_9hTY} zFMLNQU?SkKYaE zozL@*kpFH_wA0?w=QvRlC7o}>*9EF{B&GRXh~LZT4$_kJD19ordOa$(>a2@a)WWVv Qn$rq;uCN>Oa{~Q;0|DQunE(I) delta 1444 zcmeCyYF6S14sdl233d&f$e~`}xhtLl1RPk`JAfGsi9jj^h_C+N!@$QG!6d^366at# zA@YDRgAv5mVD%Ax!1w^n?%@jJfw3ES()eKPXuf5fFgAnqDOMP}LXLr957Qp7nHtIr ztYFS$PR395`A#6S$paqQxb&gf2ewX;!GXbq!JZ+8p_{>!L5xA2L5o3a@&%^*S@d(m zN6*4EC@xgA0Q>(8FO2 zMGTG%@(j8RdJGl}wv(;cUdJE;jv2wk$uj0ZNFlQs7_bHO=IiWSj3nA%iev*a8;1>( zIe8f4{{Kg~3Ym=%C6djP+6+Jq&fMu&CfCn zvOr(!1M`M0F#I_gM1Xvm$#p`XvlO@YFdSfk#Jw5E1I7xT2qsY6D{dEI?SRI&8Ak|r s2{eusx6j~pVTQ!9DMyCD9VlCIJAT0Jlc9JOBUy diff --git a/phsource/l/L1_aL b/phsource/l/L1_aL index 4bd24b638d89864d879402907360dd091ea35e81..4f004f8e1f12437f07ba4c16e93f3edacc995c63 100644 GIT binary patch literal 4977 zcmds*%WoT16voeZJkI!?hwU~G$8lRyw@KU7BsP$?9{QjK3TkO03J56WQC^ims?o7N|Q|6ydV!hChIv1uT%*u;_v|LgD-F_4TzAkpu}O)Qs-Toiq1d z+vj(`bI#=0kpuhYjvXy~B64`=lTRIv%QNV9{srEbb$uVWzqcM(+taYv8Q(}FdOUPI z^a!kMB9Dg}eHWeQok!7U6S?NrvrT6t^d|ajBBfY8*>svt*b!k9*`KJVx-D;|8h*Fs z!blLN{w_;nw4~%7(W0n_hM#JqF5n@a}3uwu0DD_xUv_O2+k3FN*Fd{je)IZ*DpKroMqAw7PBUaXeIw;Dm?E{dvoT%~sN-Mfw`Qi1n*qlK(}v9?=< zT@jwY9qjf)YcIj~v*^DnXAu9&avMBfKx|^9Oe@b(D^cuw(i_FRGUiRnHqfs~0PStT zoFbIQV;rlEgXEYRAIF>sd{1iRL_(hGN1(8AMBv!A~_rrMmgT9#WWUXDUx6Nq;;0OdWq`OAB;ndR?QAyZrcRAchbk`_z@y3$+<5D7sHan`8sz0A@ zL^>__4*9^PW$pAgGf>h|c@SA_2!0;~zX6a+<4lif&$FUn4C@D# z5@O{PGFu6%+lJXw;64mqjF-$x1t>2EOBCa|0)4FWnydI}-BE?qVi;E**@L-<1XGGAJvfNb8!?*PSe526cPp%eAiPc;+zV;=mP%m_NmbF~B&1`hi@PxH zNKdoVBz?qCYEj2k9d)VQFy^so3pL94%Dl=|T=k^3@YR{?>X!%J$3fc#t&X*IlQiT0 zzV>v@5cRg8-x!Q(d7Lzs<+Z1^texaav2+O0ZWAJ54R1QLP*e`e8V8XgeBTT2aHrGr z5j5^}9=c}K)%pNfaWvyDb(;an^(tGXF@xIU3iNYSd70HB*V3A#tp~J7&*VJnj|X|U zcg5(h>XA?LS;CEL4R7eCqqKCD|sSR4A@EUc&r!mlD z&65GgEC>#vN98eBkyZ+RWjy9CAdk56zs`d^>qD=mIXQ}#RwqA^R_f2iiu`=8qraKv zOB+{rl$Auo*c-KlpRP_SX9eDe)@iMtwXLGanwe@i!cnci{})GA9;{7f@HV&^^m3pv zihMSNE8pB0zetjvqd)0Y(x58!J00V!u6!2}maO_2d_-rKton2Dy2^JZk}fVzC%Y{ozoi3J*O)QWevl8k zvSh_ytxjDjOBSG=BC3-zYSn3Q^x=8_&x8Me;rkdf5Q#8O@~kTj_H=aAS7s>QYl4iU zR1bNx#x!{`tdvUL+TR?u($@- z3f>2d55VFsJe&An>|VY@95D6*nGzNlyF!kEVGq+Dh+bs~TYhtX7;A z;9;!yU=RZ)f+fJbZq6~4k&OouE#@2|te_wVMTX>3>*x?3?d9tlh+9y1^^pTnrr|7 diff --git a/phsource/l/L1_eL b/phsource/l/L1_eL index c1594169b83648bf1e05c75c1d89ec6113833e81..7d3591b36906d7b4c49bf57d3de3c59250e71e4a 100644 GIT binary patch literal 4501 zcmb`KU1%It6vxlZ?(9xByV>k+ve|rWKDteeNt@D`FKKm$+M+_#YAZ$yDpsK)1t0QI z^kpBU`p|+<5EapawLbL0Vg<3Zm=`gR3MzeEp$}p~6cqaLu>Sw|?9A-$fFdTt%suzq zbBFBt&Hvnc4;?)4z~MuW&pRTry8F48R#WmK%+^28xxAr$FaAbzAoLx9C!BFjYKb*_ z&3+nQ-Xi<$jf`inThGAeEpj<7xw>`EIt80I=BK=_x>dL0mI!Z=@k}k%?)kb$+;)#w z-iXulCuZ;#IWa17#lB*Pp6N=fXNf`PZ`wD4wqJJ0U9wy5mnY>RnUi~D5AH{0T^^B1 z*(uv)Oh#l#2Bjp!u(rz-W-KCRPAZ6)kzG=ied58Im3fTq#*7jo89$6?UV0@XY3Y^} z?k+t2tIPCUanY)smL5d+m}gFkc*}t4=g}76xbLnjGW12?jdlnv_ z(raIShaNK*Qku0zJo{J+r5ECix!6WYXN8o~nNH8Oo=%UH)e|!LH%fbgpAn^0L~ges z;|sDX2TZ0{WJ#Wqqu{VhCO~2cS?Nc93&>gly-~!Eg5MHmP2-;_qc?@OBB z<~bK?!H;Yjq3J}Z$;^x9eF!D_XQRli}i`H!q_rrXKbayr6lV`M8?4T9AqRInF{ zT7eeQ=r79?av#3tDU;%r@chG=SYuMy-r%JZozP zStad$+yi(P%qW$cFbq^bR1yir@iyf~4aUSWF}4{YF^(~Yj2Y?2E7h18;hY#QzK;>4 z$bMX^ci#T-e3Rn);~_t_JjeGPha=SDI(l{M-GE}F@jWOm*y91kM&o3J;@Jqr=x$|i zR+)u*tq-ebYbcUdAL{0W?8k~WZYYdlE$ah`GRRO*+{-0EgB(~(sU+r%gnDstzsH@U z>a7cws+Wwpui!3`YZ-TxT(`(k)#$H&apTpB>1$GHtJah_X;FcphB->|Y?U9a1ilIA z@y>)g?9Pvs4u_PWgw5jDh4gH|7mH z&pA_Xf!N_|C+T6dZXIhOc@-o_?BC59PtSR;Mo4aUkX&&WA|!8gkQAwPkZd$MNj4ho z=e#|^&xoENxaTNh4>M+Vm`U`8K(>O)*aMc_$K#-BGD$75(#6nHL;Ut*hFk)1R3D?s zj=OtmS?#om(Y=wXii+0RB*8awUDJB2oLFsDUFs(x_SLUzBkMeg+PEydgERG3)mHEP zd}gjm?R1a<-|!sYcN||`SY17tj<4A*XTj=KYe%|`WVO$kG5gZio$9(ddxw>CA#)RN zX+6W=$e!%*)P^?^@n3eTi~hfly-epH2^3Ht$DqhjRN5h|cszfV&?bzkNQD>q=x&}T z4Q7?fq*kd}av(=N9bJ9YMd%kb;?*;zM@Hw N-vQsR@8CEi{sz7Esiyz{ delta 1189 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 Zt)-)xP&KN%d5Wr$WEqReR@Ir1zX9z}g7g3Y delta 1201 zcmX@EHdUS@IKb68B-k}@B8OxB)&B<=SU4h>9xyTh!Fxs@;RlQmwi{a!kR8DU55A#7;|69!!d8-_53S_XFpZ3bZm zWd_;Fa*PkN*8KV4?`L9Tj3Lh^OkG%QC}-iKtqqfn*?!cQWFKI#VM9b) z4=_qHz)>i|8pR2Vwh-q{YoOk;~u~dMIF{6QD2`en=-DV8pfh9c+ sRt8|wTLMmo8QeeM$;yLw8#65YL-}3c><7{(u*8c62du=HoGWw-05yQ0+W-In diff --git a/phsource/l/L1_oL b/phsource/l/L1_oL index b7621bc00ac7e97d356ab53476bc05329ec90912..f3ae3dcb2794c9447d63a715be67d65be75376b0 100644 GIT binary patch literal 4931 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 delta 990 zcmaDU_gI1>IKb68B-k}@B8PhY#*88c5O84KngC`n!~&@lAg@apOpBP+RLFy6{OuRylfng8R9wv~P8p;f; zV9sPt#vd^t5o!Q58z2^JX8J{<1y$Q|IR>i*@hqfTfXjFW2CNovvwf%sMhHg)lMXl% zl7SJj1R5b5SmtoRA|!Ugn)xfi@}q@kD-Vmgu$9Y7KpVN zR2c*qBqv{Be@;Xw+HfGehRjBYf>;PoT5tdp0wkI;IsYM9z>KN`D-YQMWHzz|;FJcj zK$81g#u|ou?66SmW_-X62}Ndx4J-|uh)_Jh0!y+5yh~USp=bnWD@dIHhAkvZAbf+c iZ1Y(jHbxw_F))a*60(hf!G<4Z8v_F&+a^!sy8!^r508-m diff --git a/phsource/l/L2_@L b/phsource/l/L2_@L index 962d93579edd49a1f6a6b55881140e577b83d93d..7c4d93041077b42607c2d2b5c80c2e2f63035651 100644 GIT binary patch literal 5387 zcmds*O=w(I6vxkeyv&=AOui<`d?aZmY0|X$XqtA?U_a)iwpMMe)mE)-rBy@&Dg_ZN zx(Vu{*oxq)h>ECP2#UB0XwZSWaN)v@D~n_;2t|r$E7t%2p1E^p5{MP!LUXzA-gn-; z_q{p4_dn;p967x2_M=DcoAN~D;MA$$U`ifGxBf5iJ_+9*%U=AJ^D-+rStldXFJrPr4#_KW zL}p}ztd{}FOIDh397M@W0oV7)y|PnolO3{8PRIjtw@k>8Ov!GUM4Od9ltC$C#k_P# zyR=EGv|tS_X-P@K)Fdnk@g*j4Nuso(bYp%Ir5|hLrB`~;W^v4+X0TcY>$RYyFt_~c zXO~_!zbEiM4r)KF+HtnWV6nu`?6Kn7(eti=(t7DsHk<<6&;TkN^gx;0`uYLiwH zD@q{Sq%0>vtR!9Fvk9dH&!3bRKx_(S3|{Yp7jwo(!!j-#!E7rC&w|%3)Vt&%5Z;D) z<2c)iIYXGU4y@_(F3fGi+%$MJqb6`9oftgsqZc={d}%__egafFK&oJfWzp*ezkKy9 zhiiH1#JcTRGbQEUKL7M*^BWzX+D{f|`@b+70J9SO{)oIP2jGeIC?n9zZh2M?LVxSw zt6q3NXT07CA7!Dr4N%|x(Ajp-nE~;ADEDCW1{pS%&1m~DN41fyGNZ1@D2A3j54{*T zdDR{*p1G31eKJN{d{;7fh91!8I^AH^0sdV^jZ|%1%GY1>->5SCC{S8K^s6eiz_Ye` zW+LCn{EEmZZHgAza1G%)u%^vuJvqZ5K(bE zy#62<&4SH1c+G&}33(FAS&!I8jdj9b9iYbdI*EP(bS4oE_haS^qT?=R!+JSZmZ}$NF)d3GNcTfe)BAxJKH@Iy9 zvsug^1E)!o*(NZ)7b+{72uj|47*Ay||1@KbI0*R?0iP(=qt0T6V-wD4;ng_CrNAzZ z_k@|P8*BDg*)g9{Z(J{JD#?+2`T9?nzc3C9y!Wl+YOS-)!S?U7E3IJXENjCq3m;E{ zzyWz4{?Y6)f(&&S_9Fb=3olV;%u5>MsE#Bo?I4l@KPq$(;}~1VWi$HRg-~bRsMKi= zJ|=y7nwlbg@?jpM!nmKHj(t?}V)oO038QHeqnlCr1U#xD*-xYRrckX>^qQo6(DZ?7lAEqdTf&a z(XXoxb+$Q-w>r%G7qE+I{35s(3b41oYQ6^ai{N;q(zMi&_l_n5V{wcwHdmq?<1BNn zvdl7HsDwG@);X@0_X;4k2}+#BleU9F4(Fp_MO_Twn1R=sr>GScX0IfUzMC(rN=$ z`dm4XOOu4*`7qQL!;uPP24sogoLXW}Ga|Ld7^|7F7567gW==jAcS9V_BiD(bly6-5 ze!Fp0;JtO)dd#-YRv%6O%M^RSj62DlP~ij!HiPPziFzp<88_+s6g))V(R)ewiaOvK zzu8oG!*~Mui32&Z-lCpvsn0zr*YK!pA<-y?8t&dVy0zu4TBeTso9aS zz(!+zt28?ET_9Z#9Dlj0`$fmhQWV5Y%eJ1Q+i9$|8r_|(8r{9D8cY5^*^%}jn+;(v zGJ$V^P4GF|sUNRgF_q>V-U{4V4@`5gLH&ujYq=o>XMhg$yS-_N~t)wnP4-aPI6 zs6A(U2G3-pYH{I$RHF4+aoS%BolPAJyR2ATn24Nf$coec(d2Ut8Lzl-v3YM~sV*y) z{JGXE4VL196fzB2ae4*E;zHy9$+p#g#z?JaJB*y%;S7UgC$!WIO))z1{~r9G6%|OO zsCw9H{?XlF-1t0h2*xg6D{hhV*mgE delta 1457 zcmeCyYF6S14sdl233d&f$e~`}xhtLl1RPk`JAfGsi9jj^h_C+N!@$QG!6d^366at# zA@YDRgAv5mVD%Ax!1w^n?%@jJfw3ES()eKPXuf5fFgAnqDOMP}LXLr957Qp7nHtIr ztYFS$PR395`A#6S$paqQxb&gf2ewX;!GXbq!JZ+8p_{>!L5xA2L5o3a@&%^*S@d(m zzr zSbq7!=m5+MAHYhYn6I$Gq9}wr3C^Cu`-}x9o*|$CXE#V+VuFdIIRuhl7EALo)@S5H z>?en;(8Hw*%|39l5oJ(iP-f6(uw#e>l1dCb42leDlRxl%%%YzgHZK(5V5~;H diff --git a/phsource/l/L2_aL b/phsource/l/L2_aL index 5415658c7da76c528089a5711d526abcb2ab7612..56daf002dfdbd22d254a3843cc65c7e0334ea57e 100644 GIT binary patch literal 4977 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 TFI&E%NssRV*Vi>TPLIC2P%FkfF3gvRFmx zAVF|&s8Dp%Km@Tin9YET-HKC&(!qilP^r`TyWi#BduXtC@a}uZkN5fhzW07la_`b& zc4q4O?b)eYkHy96z2~1GxSXNQHVG)>W1i#=Jczs8<-yAh{=;^7g#~)kD5bh=gY>+4 zC(&hH(pkGr+?c-XphcdGzQ)RYm&BdcE%1M=9E#1Mi!@LLKnyENv-Uc-nHt`i(ndURp z(94)+)>L{|HdhocwC0>cnrm(!5v;mKwDA7~&KzFCH3rW#+L}gFQBH`Sq)iAogqDIc za2j$j1~>5+=in5s7htUZD$(;QVm*kvx%!-`zf_;G1R1f>Zt5VlS|9^h#?~i@?19^(`0RR91 diff --git a/phsource/l/L2_iL b/phsource/l/L2_iL index 186280486eeb540270ee9217072f67b29a4eaa9a..66d501ed1819beb850f395f583aa22b9d7632028 100644 GIT binary patch literal 4935 zcmdUz+iP4^6vo$F&dix>W+t~uCT)|ZNv28K*h`vB(=sQtjjfi_iaNRJa~` z3RWH>zl4JBdZ-?H8e<+JOEFqbh2O%MhsZYx$#YILB*H@^oe8q-mRs2%*>0(q#G~al zR`3vcW4*}r@b$2>lt)`FyEw^w%68B^mt?1Gkv;OHT#-j*O1foK*2%c6m$FRAjLgb2 zvMfhrQRZY?Hlc0BtmATC&SEqtJJ9B30c#J#x?A?*x+=Rcn!-LCWFz`P>6NtPB_$ag zY)OepSmNU0?4w07j^jId7$?ws=sD_=0@n7*fb^r!OICW&=kYCb7;~qX*`<2ts~;B4 zZwkDRSDHVrF>p2#v(!GnXXiO;*5asHi=$>Oj#{V1?flm{j?sgtE!b^AqVqFme0&Jh z-jvf)f{#Z*W&-`VOoG5g@Hqr}+dyFheAth+5%%36whuICKz&9Y!Bqw19+M@^+=(`a zXJOQMdr*opgkwPZ;BAsinwAC03|ay$4sN8!am=vu497U`r@$_UzdQhL1yEz(j~)B4 zK8g8!1`<;Jy>{_u^Wy^Vqcfeq(%H`8mgVMVtu;5d^S{Nd2p^Y?UaImO{ILa8Cc$VL z*1fPCfO4i`TMugEGK?7;;4vz)jM1dg+XT)tXwy*LEOr=?%^*Jv{_C)g#ELkVu$C%G z89GUvQy`T_qv!QnwMdH{(VoSsJZSaeFZbXoYxXI?O71DM1NW)kedo%{#$`@l&V$a@ zsyTQ6|Hp0}JiY_!smM9#WeODX@c355&P7;f;r}8?W#FeF_$`Ol4;BL;F$PLg;7OuG z;5Y`t+i*33(Fknh-G`M_S{9x!Ks)p_Rh9&`n9+-G#$ls4_AxZ7k9Vmh4{A(eC3Tm< zK55uUkI#TIXPkxR?tcBp+YN3Xt|*ZpdZU3R@T~0uzM0kBYcJJAVx1Xo8M*30ONQ%> z28s3z7fsdtdRvA&osoE}Cf#U0jv?d00=%ROD1p`}=1qgt5c1d{R*ZmUH&{_&)LEa2ZRDK; z_cZQh(36|SMP?|DeG?n?DvoP1iyL~(eVj`r#?g}!?{Wq8OUk-i0{5zSZy$Tz{NBJ@ zG3VAU@Kzd^mvFZH8YZ0Xue(Td(!=Dsif@-$e$KKsxsI8OIc*8?kr|FTWV6u^D~oX8JM57ijO5r>u0kbqb5XdD-KAJo)?ts1npOW4yfye72{ z4c-g|nN|%(QcaeR$mvY2%~J7Cb}bvl**O)zUJ9^gtu$ByvCUw(fEsZe zJhD(x863KdcIf*)*m8(r5z$ypXAC$a;!qN_H5!SK^S8M;33tnGOi z9YZ_A>hNB(3bi$-vpkFr?Y{aZL5}XTHaaXpg;R*6M`S-#m@|=(d8-FLXQtuvPCj|C zU|mjcvChk)r_a00j3_K=_)zNzttja8B<7Jz#(3C=g*@oYozuu>~2`?#XQ_-@8KB*yjnHkO2!sWz)P zQlN&_N;;}0#>xn0g>mq#8ja#QY-Ur5B(GfUvrt|A>AOMW>cD&djPtpUoQ+lK{prm% zGnS?2ES8?L*of%m~A(F#y&{4}&mwHB}!-=?WS%}<<}#?D%GF#0lAF`scCvZB5;W@;Sd zHR+HZY1z1_*Q$Q%m5p3AJLWqL%g9~KQ$^p(@FNRXk%T3G*&vEn_a{>niG$W7d$= pqf%j9WTYgw5cX73HljuhTT4eXp=wlDa~D-3$ubs`t*SF2e*)Adf^z@> delta 1201 zcmX@EHdUS@IKb68B-k}@B8OxB)&B<=SU4h>9xyTh!Fxs@;RlQmwi{a!kR8DU55A#7;|69!!d8-_53S_XFpZ3bZm zWd_;Fa*PkN*8KV4?`L9Tj3Lh^OkG%QC}-iKtqqfn*?!cQWFKI#VM9b) z4=_qHz)>j562%FNHWuy|9Iz;f;ZEau`H}U zGUjEXZMxX}oR5n!&J-z}aj}v8VUDEU0)>s$7fS`W7&96emaxK--fhMp9$3<|WM%*+ ow&!6vxlJH*bFbYzx!Up&eQ%rM4hYK%g>Den^Z65)4)iG7A&@MKHky?q*?h zqYD#bV%%UP1XgOm7?s7uL>I;de*lXnvT-9OnxNDKzu$Z2&YjN00g~FA_vXIy?!E85 z^LgKM&g-$K5A1v9*wHP4h#cB-^30*Myo7H1Ul@Gb(Bm-rcJqX@y#R}waZ@BY@6CJ9 z!OBf!!jt?$WFhiA`rJg`@#_Uz-b0@o_9;oz5{-y(6PeF+S}x|o*wQieawAI1pP0c- z#|!Oll3woWf_sxvPyHCVJpj+tdTwPtW;%(JR%2VzwDGz*fwC)l#F9UNe0Y}6~b1O0$LU=gQoiwdTF#2 zTC%kzC2p*F$xA=3Tf$XWVxz zC|Qf6WG#+Tr)4hDX|cyj=>90}ZcXZ@GzwooETJ3*rBkvE#LnQkri_>R;F|Y>qG;?VuqxN($}#K{Xfaq4AV#XBTS6mm z@}fEmIM2HwttduU@4UNz#<)KWE{Dn?^v`QYoQ#`oNdW!jkxR zBh^UJ;#geD)H^Jxd}sWtm1P;@-+Dx^S=o!I{gxb&P0+($Xl5LZvM7UsUe53< z8s${Leygy?&6BLyl;`~1~- zNu?Fd8q{XOtdPZeY4lT|76WbQ?9SKqZH7`9eAdJj`U}P);AU;7U~$~8N+UM!U5GfH z-HL=Ad28ISCrQag#OZVxr^Ru*o@sPssf#%YmX4{F8y+q9ud`lxYe;5{R-TfR@+3&m z|1(g?F!Bbe72u&Pd_|wplia8Y>LHI270lj*c~sac^ajD3IcF8<4WdW?tA?m7^77$t zA1egV3H227Nby-v&Su6*V!_fM}^l&rwxGstI0MdXN@Dn;FG#~G>rb-bgi?UhQ$%QDq*x! ze~sKiNp=7TKxFD>9p;fZ7E4R#A@+wtA?>!bQTv$?X3USq8*`M2ps4BmPd<2h=3zd;4aiE zGvK!dwaQvB)!e6AWWHhMB3W%($1{he!6geutO5&Q$*PhB8E46vBbf83K(b_o!nZ@S zp4KQN!^TX;D68sJwZ_d6>1mwhT=FNmm_)E?RMs_U<@-U()y40B_{F#j`fE79Y0ueu zlXUYeNoVOnvT8@Q*mhg&5c3^Jn)m*e>lIa5MUF#}JCPALfaxIeTNy+cy=*?>uV*Y; zVKBC7g`Y9J`k=)jLy_MVWUZ{I;v_g1z*7~@cS4VCd{jnSagqiJQgbH7{!{CwGh89^sAaVmGuYJmjmGejEG}nyp6%4N+dNZ z%|%jG9jP&HGFmdOQ+qt)VY9K6*HP}IrmK*=)=N6Ox_Eo*qiNv^RHA3@!;R8a F{skukjG6!d delta 1288 zcmX@CHc_4&|+|A$Yuzf zoX2vv9yv(gGcv$~aUwGt4=jl8aQ)$eu~+bP!P#8=h#*anVZs@tAP=iESTdL}I59*r zR5JK8=rc$I*?tVllNHz=XKZ1(!WO}_1RRy`84KXis?5BM6K1atcMdy@eSzl+JSvy* z@vy?g6J#zi!PwYBVe>(D9!8{SWhNZV4Aw}|ip*wUz-Ghbdd?U1XD4QY4R&Ci-2ky6 z7f3-;@D_#=7KB%C@I7Fx0Ln2l6f>1^=s;7m4z~^5dlz_?K)q+fv5e1!8R9(~js%%S zK-G}ckLD0oaB|-4$SuYg_a7;RA+sUQB85b=1Y!p_uLN><;xx}5Nd}pXB#b>gH(%u= z&IS~daB;BuVZHzlWBnF}Q@~)>0jI#tj8nKHm_C3F`Oc)kz62gEAT^L6SK!rvr}kxh qSeItK}e{p z><|L}0fa;rS)oc$l&Vt6!pjPY{~-v8Ei70-y5aj~e0}X$q6!Ku@M!Lxdpt8YKEL_S zIazuB^3t`H7iJs)S7&Z~cr}hUIBfm6&b>AJ?1sN>eBs+(q2+qRdi(xEAif&h3cO5< zI`CD%?cNRS1~kXcTMoI2-N07hGg{Pv&BR7TbHV{Y9VnzWqV1N?GuSt$oUaEp=Xb79 z2Rvglemm33dmvrz34|5TZS!-6cUIb z42Rb=`cUS)Coswt(>RGd=MQjx31hVNapWMv7H5x|v13+7xkHRL2O-+EW7ItBs+|+) z;hXd}y(NJpdx~rHy}c%BkJB1O?T_v2znI_QI@`_P;|+YuD9 ziZtIN-FTXFNGfhfTbovBhuYr9KUlrE&UYK0r@XswyFt_cL02WzsHI!vHH#xu)+EO1 z=^+d>UqY)ljL0DeT*FC?>Mh9vdT2PuCZli zW1IApTW+@7PJ3uzN#``J%{&kjVc*t zui_Z_3>q&=f%BFi#Nm87K(GnfoTFtO}_Ycpo9nZnIvBQMQv-9J7nfJ*p?vLj1-?xCo!b zQYRy2ls&*bq;8LOkdx`o1}J(-af~Bi7K)6T|c8z26BC}|Z* zvcfD_F!iM7CAfzw26IyWLK{&v6Gqs_bD z8~?h_rfVJThHcHQ3dFO$O+CJ2zvlH0>e2R?_-UY?Y>kN_JPd8bJ7QvZw58BxB+wtgwo|NW~1&&kIytnJO73lN>!RR*Gq!HxouF zHljso@8|4U&Mz^ZKFRnv%Y91p_6S#v8?E(lq^O!S(N6hH^c2;+_@>%Xm80%KGm;+F zbUH-Lo)$5(b%^Q{sZ;Y*Z(6;|nxO6;l&+ZH>^fg=Hh+9$;M>;uH~G4IJVWNbf4~r6 zUTb3r9Gu~)=FjM4I7P)gg$uZXr&&wL`%`4NjAzJlh`x&$e#&UdGV-5nwqDm=8A(~L zpX~^JlB355NVULGk-H7C53;2>tCuU44^uoDQghnuCI*(5jgz7wx~e(EMrTKgv$0f~ URSlw5`rpk`mWI9aptIrNFOOe8F#rGn delta 984 zcmaDU_gI1>IKb68B-k}@B8Ovr)%Ft%44e^6OBfk|U_N7<-~+}7V73c$3fBWhi1-4o zb!;$k8J->NFm^AW7+hRI>Jk%7yh4tFVGq+DCXksL$`H0ZgC~P2Lq0rBS{MwNq!7P3?aZsk_BQd22}%I6EFHXP^9F*WB7!nW=A}a6-L}Y&u#&hQQ{NK8J|IY38?%GuYZ0`7M zX&rvj;9b_wQ~%)Ti@df;fxCnDk7UssbHGDYtiuzJ@}Af89x1jCPXofH+4Ej1whrs% zH0Y_P;DL4cR3#j)93H-}G1jx&%zWGPMLVo(@)_7S`zEinTf>!Ww#hy1pTS^l(II7x z^DK}sL5n8S%(2Qv>Kvy;m7+e2vQSo5UZqBZv&?XcW6qk)(&iGEHD_7gV4l-V5o=;Z zWiX+logsm=^JO;j6^9skPNMx~MP-@o>U@3s`m?)B8hpt5 zmr4t}{eZl-p;L0c_sGnSdFJJ`w!O4s*^JPNdfxH~t#K01B~5RL-;MZ1ZJg-rOloXT z&gO4uEpVMKk6GcQ)SVQmhLpdeY9hT8=~Z&dl%!6dT%ASPG)v;UBwOL8>>L-wcu_tl zg%fF95$%#9%b_SQI7*=-Rd8DSj!@*t6h$m{J@!1ie@gGlq`aa+F*sKmN@asS6e`50kYaM~- delta 370 zcmeyv`HP(+IKb68B-k}@B8Nl$8HP#hQ{{Q;v6)D1jvyIOcnI3ae~aI#z=Y2YlLJ`ROio}n0$Uitl!3*<9Rw_7U?9~(0B=-GIsgCw diff --git a/phsource/l/l b/phsource/l/l index e55a53dd418969b7e44b5879c0b41dfd628eda7a..6e868a53ea7c8637c260e8ed593cd2c40e2f20fe 100644 GIT binary patch literal 845 zcmdUsy-or_6otPTb{9kls2~P^0x>9&N{!kniLtZLpv0e+g2D%|+`>TPWB3>pB(^>T z4`F5H8AKL{g_h3b?A-b0-r1Qsjf=C>tH$M?0Uj(Z4U?_zzlLA)y4N2qM68L&^@zeb zp}nzfb1UKmZ9{6!zL-13PSEnhc*k_ivtlQBOyUj9z<4@=6Fj8}rb#zLY?_qTL+i-9 zDx9>>2J~#tMx?qqNe*1nuvNc<@mS%A2KVfwPffL4V=RW}#C&oem&$lui diff --git a/phsource/l/l@ b/phsource/l/l@ index b0f500e79008c3e9a4dd735d93e1d8bd22e54ff8..dccde6301b2c03a5c46db88f832eb2b45885cb2c 100644 GIT binary patch literal 1244 zcmb7@y>HV{6vdC7I0<%~?+<7KDYPYNnhro)N{bXjRU#0AmZVS+6J;n>1)UH=3>E_{ zFu{l*hy{s10EQ0P5Qu?=J%0gWU_f2MxlS58>VWXm^?N?P*Y-O<-}=(xLZiNXTm`Uc z`EZ-F_pr3jcK6y+o4p&ZwgP{@;%(<5TI#C0u3TrH1W-}zNLy(uH@KDnQkorZD;4D# z*AhU(utSpLR{#lM%WRom<>AMtQ9IyOfM(wEiSnBj62OB)z_z-rx=Lxpt4vFhbCh-$ z{do*Etl=`s$Z`y0KaTKR#R`%bMFtU=jJPvm(3v-nA|`PPvrg2Qc?A`m#018v7m?zK zGGAw%ju1x#VLrt~km~?^oK?;mBZz%4ct>|uVP?jh`WWj|{GK$1xJpnrQ2q1n#ZTwE zE$wToy8+Aps<#tYt9!@*k6;Dc$}fjXm&_-{j*H?Y1BcZB8ACjF$xNA6)T_Md+>OeU zy*bUi{hwrJdS4IhB{PW&xQZvZg)wrNKn~M%|0eF!`FRv@fc|9YQkr7~M{yq4cwNM4 zvRK42HnD{>qiIB!avbW(cz|hfvAzee$Lx zpOEEWlAtD))txUf+u4PseH-p?r?+smI+fiH`_cIhOBe6lelb-f^6E>~rLv*fL()?N zRFZ>^zYn)!gUa(r_sK4~W*$xlx!v)vewpoWV=t957U=F8?qD5D*xW|qUHTKgS&aunx(Su8{aF$myZIPxTw#$WG0nmYgh delta 424 zcmcb^d5fJRIKb68B-k}@B8Lj|{C#B;^~LKK{`XpvI*dJh4;UYS*&?j- zcpfn7fY~A3b2wn)1-$2YA?&K{?fmQ5VB!m8T$o|(3ONRbJxqI;KxS$vL)fYe?hMHc z{tQ|S;y|dtAifA#+bh7>NC9$qFH zAsMDAU{7SRPLhHJQV919VVIf~JjVoJ>|Q>E-UTvZ@PNS<7+MU@46eZ7$YjW12w=!! O2x16fh?wlnG7$jp`(9oE diff --git a/phsource/l/l_ b/phsource/l/l_ index 1922dbdde9f0026ff4ce2bd22f9d7c068b1903ae..37fb0bb1b220e1d9dea6b28be35d271a2e186294 100644 GIT binary patch literal 846 zcmd^6J5Iwu6rA0}AM#NGBm@P55}`muDt@8@EFroSfFs05h!hklasUd1QbbO}F*pQ; zI~ocOkwZ{XG0%YQm?N-H#aaM#O_-kY)Dvp~nJkQnny9n_1i&bdnK-j=j|)yh zQ?EH%G#{K00QW0^uYDact<^ZQE23bvev2?Su?H8|*v2ACm`4>A)Uipnh$SMA46?BK z6!3VM!y2QCHkw46lLw4-Y@k8D!C2tjEOJz4SedXmW%0fY!X#3J%_>D!x^|$@%%YL+ z$$SZAo~O*WRJbpaKm2_6jo{>w58;m>;=~&_Y;@r13*Ddc=IoC*FILi~ObulSTb03_A($bW!I(jUL4-k= kL5e|~L4m<=vMl3qup1(nGQj4ex?u-9em5{MP{$2Z0SXH;ZvX%Q diff --git a/phsource/l/la b/phsource/l/la index 7f426a507af5ae6cc1fefd5f8dcd6871a268a678..a338919d1130082dfc8eae8a2c50a5751df445fc 100644 GIT binary patch delta 409 zcmdnQdXJ4GIKb68BskD$B8Oc)0}x#OKZSvTV;18q#z-I!gc%qr7#sMOFlI1D0ofqT zz>vbq!1<5yA7c-Y4Z;izA>0gH4;UXXvM@3*fG`7t0`CDHRFQW618k@w4`dpcKq6m& zI=(o9wN=P5FzjL4!vq!ri)bh#iKo$AOcL2?s4`div;a*^5um?JZkQc1s4#xDtC1Lr@+e_(b9 zHv`uL#s^@w0`Dsx7`vVS3LA|5K&Fie#;%ZKVA#X7hY4h+hBAb$!r;je#8A)R!l2H; z&!EGg%%H(wJ6W3XVnzt#18yE>i0SOi&%|YzmVj-V$&w@qGcknQiyy|mz;jFh#{S6n U2kx>5GCZs>acnM_yozZH0LuzGW&i*H diff --git a/phsource/l/le b/phsource/l/le index c61ddffe855f9179bb78be47c09c637c47421a2f..1a9f8fcdb5ee61cb4933c35576eb36896c14819c 100644 GIT binary patch delta 409 zcmZ3*dX0@EIKb68BskD$B8Oc)0}x#Oe}Tb)BZ4V|F%rlFVFreuj17Db7#}c30ofqT zz_5Uofd?eg17w3R149Tm12;&7g^_^)gc%r2cpboM5F+jT4D6_C4#*r}0*QP9>iFUa z)>a|Mz_5pD4-;4jETW-|EMf{W8w@mH3^+Y;!y~XKE-)P6dccV61yiO5QIJIlFRWp0 zkOqmMcmb>i;b0zK1`$*TEAxX)M)u|b83$&N2-LmyK*tdBf;HU1m|mFti*W-0f?!Fn delta 280 zcmcb{wu+S_IKb68B-k}@B8Of5)&Cb5$~YpJG8h?v;3wlIz6XpC!0ZLA3_LJ)2sZ;a zjBUaj1Q&1TS73*UACS4k1Y=joF)-|5+QS4gQ$rcTR%CEuuw)2eC}N0W;9_uQuwl?< zFr6&Tc((om!!@o4j1U)?GOZDXnX-m;jx>xN!Yu+9=i%iNfr%^g{{iZSxcGof7Bh^E g%>`Nv-at2aGbA!hW=LXiWpDvvCkCI%dzoee05PpTw*UYD diff --git a/phsource/l/li b/phsource/l/li index 2457c844dab2139beaf1cd3b28309eb861331cc2..92d7b36a43a33f2985c83908f2ad6fa9b5df14d1 100644 GIT binary patch literal 742 zcmWFzaCHs|4m4t7U|`6}WM)VK(#XJp^#n2(%tjT1>3C<# zn130xIv5;SQT@Av@c{o4#w}pKLi`)T#=wK_-veBzeu?3AKoQYqxy0|limFCI<^a&Q zr1;ky?mJBX+W&6V_5;hK`VFE5RSfQ5h7JZEH2-EW&Jd1ZLXO`V90npFcOu8{K4CP! Y@G_u@T;iXDmIf4L){q##)_D920PaO+XaE2J literal 484 zcmWFzaCHs|b`4}=U|`6}WM)VK(#XJp^#n2(%tjRh>3Cl}^FYIu0R0M$U)?fe~VFt&n>70?ujc!eAT!ycwRV7(g3 z2sX$p1_p#H99WxpywJozT(DoXIv65YVJ_Rj_=tZA;})>m5H>a*gv+jR!EBA;O@Xqt zSuXKMu)@R@WZnVYh1+HJzgxBau($#&gydQf9}>zP3_Ng`WiZYVj$nd>*$fT?5tvOO Z-1~%KYz1BhIQtU+9C%nN$gIH|W&m5;Pf7p) diff --git a/phsource/l/lo b/phsource/l/lo index 943b483988cc74be709bb4d816cde37edf5ad71a..1483c3c8d3bd71bd510bbd76856672026f91452a 100644 GIT binary patch literal 1608 zcmb`HO-K}B9LAs7?~mDWc30ipb#>J>w^Az2tOR{24NW6U1&iqWU=bArQQ%>rhzs!iox*@|kpc{pdB2mA}3MeQudNd?9=n5){Nc8;-BVA@v-uWG&8 zQ^rz(xoF8(*2k&ww6BY_Ok=)xFwl0`Rqu@5aI*~lo%wh%K(D#wH(Y!X|! zX?EGJdWlld?UDCdF;RATWW%fI8n;L4NxaZYVJ8V--9Vjda+!*=Y)AafBSV#K@V?z6 z2XG2k@fyQawtyR0qOLt;k!R_!ywFTlqtqr&z4Ew%!*s(WPl5@u8X$uK@<~&<7&%1f zoh0eVA1-c*ahCk$LZE>~)NkbIG+B3%VVY}*;|hFZraCvpbrKl;{pjHn>${b|e5tm9 zYGCK4n6Wu5;Uo3yb(~e7w2`bRYM)hiyuVr`<2Ghd)<5tu?W+naBBJ=MY zhHKl{&fyRpaTy=*7-z`f9cG}gpZ|QPrI~2kOs#~>K^(;cEaD>feGeDNWDrNtk16)0 usc$Do7O1uOr&8pUin3JnkCIHlqSV3lrR1#Bt&j8a^g=h+$nu$@GyVX;6}=Mx delta 563 zcmX@X^MR8iIKb68B-k}@B8Lj|{C#B;^(E_L7>rmWm@*g{fWVbePhbfngzdv}hI0v{ z4p=;d`x(mv#s^@w2X6-(jQx@C9y^S^K*og`#;%ZKVA#X7hY4h+hBAb$%izP1$q>Py z!XU;V1SHiN>>2DB6er6vuB@MwHw~ne!GZOb1DL_!%fP~r0%pcAEJ1Q#oFL47FPJNM z5boQ+1+#kvPXGsmtI8EYFw|fng>cCfo===GSMBE$gNK@e^Z|HiqJT4Lz z0Chu5y~t=M3p1&J`IjV&9m4%h5XN@lL9qAp<#EHr7f7vx+l*!#*xMEip$v%(M;Y1} Wf*5KTHZlY-I4~G8Xih%KS`Pqn_IH2) diff --git a/phsource/l/lu b/phsource/l/lu index efc4a1b5280cad48d18c12bdb64925160d361ef2..378ba1608a56f729a54a6083076415a9491c27b6 100644 GIT binary patch literal 1246 zcmb7@Pfrt36vfXBZE4GNI@3~WON$~Es*E5g5G|%n3f-w-ORUD7Cb~eysKMo|jV62m z7cRPF>5{}*7>#k`#>8b!`~WTtF~+Fpz1B`=SQzK!zCY*Qc{A_+-mR~#RvY#8c@@Cs zqXFFH*#A_5Z|%;yqB>oNt8F0Ad*kEp>#)_PYAIJ4Ck#j`h_@6=xyHFL;BgRJ zaxM&L3?bT9+DbqHgaKz_j_y@H>6Nfou}2+MDBt*oFz!4C?5TUIs}v{tl?4$bpW@$1 zZ=6OG_b`h&q>)DsW5{3xqd1EOmgP#U2kFglmBk8bh+`ZDDyP`4;65%>wXld86zR(# z1p{H|oJTRl7D0k0v;_MEl8hLJ#$7cwlbXR^#F_LNd~cX7%rVJbl2jA)mcPGF-If1c z3BGeW2dD&|cTeJKjXpBKE}XEJ%#LE4E#<4E(jl`JM6Br}V{6{5ABovMGOrGhX=j~* z|0A>5{d+KT{>Q>P?%)Yd;{*=VKh1WWIj-Rbi7k;zo<#EWO;DZ3Mc%xEBsqf;>g4i( zOfHZ|2`4ehjHbzBL}ql5Sr(ZO$uU9_QOP1EiAAV~5Tu!sh|WIEZ{^s>B}0P*P0n>P zEC2XV*pfeA3BG^fKZUE+>2hmq7Zx-8QdUc+Vs?~Y0idn)FO_Qvok z&-9{g6lt>xt0q6 delta 425 zcmcb|d54`NIKb68B-k}@B8Lj|{+hQF^~LM2{*Pf;!xX`!!^i*x!i*~XOBf;S3RVVA z8Kxy*@epnat_O?{z-$xVe|#|Z4ZZ*l7`s9G2NR54A;-Y5hiMNJ$V?4o2wR&Wf+3$l zpTUqpoI#dBhCz-&l0j^;G~?>}*(p&Vg$xd?Cl7!b3?U3G3@Kpd8ip4fFxO3BY!O_- z_yH^)z{NJL`c14QbYiGhiMsVtoP670lOYUldt_+6iO@ALEh$)$I1UcE1Eyf6TK z+D~DZbLSOWXXVy&Xr8whV($aYsN(bSK9Kro?5R!WiGTxD_i{!>Z7~)B7iKxrRI}AcE0*yA}2o<8j^F(3K91i2Wm#mh@IkOr?VnS`YPT9(L9AE zl(3BjJVHPEFoGfEF;6$ZDCNOHFKpgLJRTlmnqvern4)G_xyJDn&rzUX;231x1Gvm| z7^RV6Rfhets5F(LY(^=%vTExLgR|tw`=q`f13b?FcNyYyK!5%Bk6(^Hd1xKAzu@%p zsvX7N4xN{67pS7_d^fH%mlm5HRrf3GV9e&Hi5{U9vpI6gq}9o$;nnSK=fn>aIfuEr zDLFBTzp+`4&iN-cYj};f7)Ozv2rz-i$l)0lsXk=cr(Sm1){I=;>j1uHm?s0t2r$g* z2|U3Z2^B~!ulbI#t3HRz;c*97?H(F;>h->-8)d3E?bPWHn3I z<-Jw4esiBy^r`4(75{lvrX*Pb_gEpx3g{-&@RH7npL7m$E$81^twta4f3dm+0iA>^ delta 370 zcmeC;>fqoA4sdl233d&f$YEDswLOPHjyZxUgOLFUY8cP)$}lYfv!Ai-V1K}<17=rn z@vuH%d;n&*@S1SK*zNpvaB&6M1SXhxg&YIJ9;Q7^ATu?TA#7C!bB17sXa-{j2?h}c zVFoD%aR!CS(u^lF)-ZH&O=0=~Qp^y?_=tZA)TZ?;e4H@XY~h*&bPdD>S9o7=z}P$a zbKv3&WS+6W#IdAY05j|gFM_?3AHiNAgJ9#b F5CA4gPFVl| diff --git a/phsource/l^/_l^ b/phsource/l^/_l^ index 78096e2bcadef08ed55092c39e096d2ab1294911..8d7752c513b3d5b8cd32c25421ba8781f0297dd9 100644 GIT binary patch literal 1671 zcmd^;yG{a86h-$u7)Bm~3ZnRk#GphPA5lA<#F&^E6AZ@qNTjha#t*QxptSZ2`~(^k z3KK0T_yh||N((D(+-C-72C#s{#xOUVIkWFMmwRW;DHe8jj*5q?8i3Nxg^o)G{>uuy z+&Ryde&3q#ykqFtchk#&+E6Mur6U5GfcdCQt7nWwbWF);iLR_Mkt zMMV)p7$$#3Q4C=e3mj?Wk)`si+~Qco5;F8N9OJATL4=thMh1ec3i5pgD1*`{laWSO zW=%Uo2H75tA@REkAtPxT4(V*VN-HXNH%=Oem3twq@B$Z z*_^0XJ~oXoI@s)Wu_?r4Wk0`%zS*q1`~2r@zUr^n_E|g*mexO;CNSK^M)@N)5L#ZB l3{2nr!p8mV;PH~aIdCV+SnlYX9@!Y}J<&_wUjJ38y)bC<^4prWJA@#da;?tL%0A8*iX>>USfFQyh5GoJr<-`~ zo43P_)H{KR1L<}EJ<_^T4*=(0o7cr+;0Qm`gnn^hC;HKYljv?f&FRgi`g#!v^-!L( zwjApkwh`bATbMx+Q>dVfC2Z0yV2||z!=WE@M@q~$ zd(u%oL9r#>4mQXtruYiv5{eI`c&cAYicuDy6!#U1%{*8elfD}zitqjBwxpv_G=58w sy*RE=)c!~j3DJMwi(gP2HX^5#tmwrE52m(=#Q*>R diff --git a/phsource/l^/j2@ b/phsource/l^/j2@ index 19067470117c7945b3e465e4cbc8efddbc70fde5..3eae6f6eba3fe352173de72425e6e6f567c7ab63 100644 GIT binary patch delta 5363 zcmcK74@i_}90%~r;_Hs>b#^@>(91QNro(kvFr~rTZ4=O@r0FI zBw?)RqK*}9L5y0h27^`?%OuE^D`_xPW(>*xY||nrtQ@fj+;iUP`~Kd06>r(WamT}* z=jXof_xC(^-e*i_)>i*|@7&?fE`QiZfyJg$bxm@4i712}+d z#L5~_;!0781IUuHB%fIE!4*4`uGm8>Ht|{;dYsq6;|%?s&`PoP*jB6oT#_zHp%w8~ z_nq(ZvA8-4Mk^`*GM)kM{*D7-{H>Z+2#5^VkS{7I?h~|n4ytI$Pm@0}fl`tN$PIyEZnT`z1B$re(Un@5g#x3V%>6VF+&qy(X zj2Y}ziVEj*+$9sfX)Ks3sYa;OLWJPT_C z;a=1Io+Gt`Xq6tX1#nVfXv%2-1xP?8kRBH!C4-f5h*ZquyoW9Oic zWRd3Rgfx;xCy&8SlEsbq_hN6vzwRmJm}Z$p3Qjj=@t9o(m)J1$EC%iWLJG;^53b@5 zB#YB7B_a!eabzJz?fA23PqiGi$(RPoq!m}$7jTs%k>GG(0!iWt--1s_633jC@-b7n zCw$in9GpHVwdo@Xb!Ih!SJ2Yxfq=8rnFNyCDz?;#czX;z9E)CsshM$Z)1}d^Fv&h9H$R%0y zvYpUNvKX+J;sDw9TKT8gO0qbl9g+{3$~`zp2JHlFdntLt@u4_NG$2gfENu?&7#G=dXk@_jX2jXoW4{Wq zdNbbUFG1`Wae6aA+m2-#*o@7{XM2(iH3+8RW;adE$oG0P3@^g@BR#Na#>RP;&DbIk zTSyju_8a&~Gft{*JV{Pc^Eu*tl0~2MOYAdEsfr5|-HcgpSt5KG4?cp}$nL^Mg4m`G zz&3&?;C3t^h(zr(Of+3kRdo@Fnp*P#q%J>-14#d3OT=}Y1lI{-Iok`%31Xl61oja` z8UG&22;!7>9#5GNrgB@)s5666AkM#QiMWG_aEBl~%m*HVs8`>>dV;9solr{<_q1nt z@Bbj8I+$-Q3M1M96usC3m<&vUG=0l^uC&763OMrQJlQ8&=7W{$Q&_BmrWgBt-UKBa zTuLLq(_)8`Fc&+xDi7hNV%#eh zsNJxDBr%5{ggGRMO060zO-Yyz=v%&pdfh=r<#3kjl-AB94K*rk1fyG)324X3CO zrK>Cv>!bo$M-T^;U*G^ic-0N)C5UQ%8mb8*+0}u`F8bTZq7vR3a}vj+nXs<4Bj=7b za(pV0a-oDU_A5QGpD+s5Ke3Q7>iN%5PZ)DuE@|%AjNrLrlh@3MrrCktD@S20ld@qM sVN@v>po%au)iNoQF!t~k*h3h-+9m8A`;rPW;v)uBRF~9O>+|IQ0R0eXivR!s delta 3348 zcmb7`eQ*@@8ONVzH_2@_ySI1AU2?gE%jNCf-#8PnAXEtlOvY+7sZdR^5jzqpm2&A= zQkg^w1;+4lDs^fL6%@r89HC1Mq*Q`Xap+7ZNe8Ay6N;L^&=LuRW@=y3UGBNvWhP4f zV`qMIlganWapIF6>= zdzA;k!+4nY@;K#5pJV1z5HqL$J|T@}B_x2O%u)4!!83OK{3Dls_Eo0Oe=Fb$>Ma%l z%}(2l;yb1lxzCqxtZ>RMtYcS1xC}-i`k_$6SgK*9ghnPMq%l(B&oL#YF*cb!rcDac zmt#b@42E2u-OMh}sJYPxZc;nL0V>Z;(?|05Fh|JrMInV36=iiuJ!UWV+*S=hQ=6Up zFx#QK^D6GVr1v@ZDtu0QXZZWG&+ut&6rV#RcjwH9;oMiy+iP_cyiz#obeFwbv9av^rWk~sgjnT zvfg646a!F7dV}0*7$iNfP=j95yDmP4*GaEYy396e&59WGT9@g1t&eAhe4yY#yRUfv zw2AVq)wRCA_}2sifkJtgeIeWNqEgJmco>T?0-S=-$MiA%+)lWpAiU4K&r}IFV7`K| zo?Xvg6+O60K^S6(Seu2-?lK_s6zC0em+EJqJAEFppDg;UWVaiu_xS3AgP{k*zX=6{ z6LL?nQtoK-0|g^}$0FJt8{vKpBQ%LJVF1c#5(8p34$ve{TkCU9TXi{o@&NiI4CVga zv}WCODOPBvN4aBQQEs$qdNS{yP)er%Eb_RYOz*Rp45k65Hm#_U>H6Z2o%>zB$|t-R z1CNIHMGi!M5^fG2l1IxE`VDhn88|5X6Wm5PL6-9c0rSc7n79(h$ntLUQg*jiw%e~2 zd93eMlP4Qj%sf z`(srRVCMW<87Rvwz21_Qy*Gc~<@lDf#bv8p=ZyzH4R=H__S0yS><%bp%cShbBJh*t zVQw7^ljZTedvTnW%1QBQJV};!NITdaTG=Kir%qX4DqY1-mGqVUqw2r@wum|Yvzkw8 zKdb$FO_O|AL@k@PNoz45Y6&Bh3#dFdcUxy(3_A(qC2;~?B8)ca6Shsm_&+B9^|&(m z$;piE`6$7B(wmd}4$dLHa9%!!NiQi1m?XUxDZ#XS1-<93p8Qc;iL=rDj_1SB+IZ{C zj@iBP_h%&31$zk~TaEuAWpj2SIG<#mWR7qXu$}`>jXyW@1X<~rqul1AOym*ntQLPXnXF9z-ktx8e8FZbwz+qC!_m$e%jUdZS0!(nwNP*T zN(Esh%^}785mFTYUOs|*X~)kL5ogjIM$9kZh}QTe-M5Qh-ZEFY zSWaqd_;FZ6YH=|SMd=$+N#z1N@!xDUXjHfkIlz%fv! zE|dw=N%+(RLVyjhP5d>uiw8+<)P3S%SR{hw8hedhCmlnd1YEjN5ksQ@^hN<>8g>kxf-Kx`7_f~Af=&6%Qa{elnl8gxQ~EC7$)AHe$?|mZ zMVL;OmrAX;RI_Y+g+>go>}XOOu+(ViRE&v0jMNUA`r#m{#gsT>q!tu^1wm4KS$Z8` z*3^t22*%fxKHxsP;Mi9Bjq>j5-ToV)ozczHe;fbi9dF8aFIMhyrr7r|m2eM1w3)6# z8$smoBIXc;ReT$)1mTvN(5*qV8?I4%w_a==Vo3UB!QI76T&F8`c=q`(2j_-U;qlOM z`Qb+lb6?CvVKG5;n1-N(AZGCr&LW69aVOLf#0KfRxIu&XqGIb1^0yx~%)Ob3Lo=yu zH~k*AlUkC09FwHhD(-_;Qgc}P(P7Da9vD+juF@^<(XLTHzfpR?zQMVmtgEudYY#x^ zPoZ@opS*S1EuY|v7(Xl`jBTbt*hUz2{Kr^F813S5XeW#si-oC~5@SVD$1s#F^~5dT zhw~UO%p<)PQ#Z7bUKQWKRFU3hu@^Rz-mr8Oho>B})lhDI$hkQV;aTfLh5gPU*W!x& Q>Pwyz-h*=Q_w4Nd0O>H{lmGw# diff --git a/phsource/l^/j2a b/phsource/l^/j2a index 1a9ac505a57a6ee771601423c393f925eac874ad..1c0c58725bfb1defe66700a33f9ceec66330f700 100644 GIT binary patch delta 6932 zcmcK94@{J090&04?|EOi_uhNo_pY?eQc;`?F`P)jlvJ?Na<(jLB1#kIC>!PIk0IzZ z!Zp*aniyJEG-Kf`j4l$BilWH56*_ET*_C0sm1Tcy{V`Y1aVK}bmv`iOa@!5|+rjbK z@A>|o=Q(;F7xga+Eq~sP*WZzU+vKOUyfu)Ieezi#3d92Wbpb|Dj(h^A=`=6kRaE&}m1dbcG0P17o>1kCbr5GPpjEVrP(}VIR$UgVobG)G z%#fw>QLH2@sbixnIl-UneWafIrtfQ0(;~&ekVV;9^^2?NYA$z$qd=%GGsHu z32OyTT!7MxOk{||)&n?vA&6KS;h&;8 zBC=^HvKb;t^H35)yr+MG_w?x1lxfx=lOcYy9>s5ijyUU?sSs_-^$zb{RBeC~3C0xi zp^o4=CXR_vFp{+GnB;;>C_)JZW1Id9QuVd23Z+5`E&8cuGe(=a+J0q!xN=-lhI(@o z4aEpoAmg=u7$_K(zF=f%?W0&pzG!wb7`6vTg?r(Xe{v+;pU`k<0+=eMhQmGHl|`)*5efGWw?>O4A`Qn8=s?@A;x%br!g`UgL)G5*Jn5)W{YynW{Ap! z9#k^KEAF}U3PZFT4QOYGHtTD&**bAW|4ziYQ!KkSJY<(GJC8AH*( z0^ck48Gm9QV~p@#Pa_8Ih4YZji)F~BPYL(p5ORHKN}3Y7T5J|gXb`wOGM|1>529Pe zrIGoRt$%~yd^#Wwgs%9gJc=B>KjAmf6R(2IXK~2)+ ze2N-k0}k0=t_$}f!?xj7Nk$dx#YwdlC)Ma&jMHl{j_unW#+&G1y(scdp`r`vMN9|t z=G-u2f{pQ*_yCVF#$oj-9A=CqdOMadM!RvqmW-v|VYJl7u+6C8l8SRit-Qf8-W$Xp z*uW4iYBgFIqFCRFVutwM5cECk#T;)M&9Naa{%$etrf@HoKf>evgmBRljImYShOLaT zM6b8?Vz<$b-Heg%ol5yOhC?snoKiH`u@_s!C)mOe)#@fxGen8L10}2%ZyC?yEr!VR z`Y6wa7}tN)_FqsLvD~^py44Z!hS-ZY7@|gf05uHJtpAN>h6ot%BVa?g`XSD1LB)hv zpYMoxTXf-VhNxBVMlD11=>MRHA=1q+kw`l&Mdmj3H*~&tWD*oG=#Q1Vhw#FQppWg0fvyFT#DhsKgPm zSCnBdLu`^8-X?}H^hGcjVuCpj6Id#S_~z3PA3v1ac8ZH|vlw%)BVxa}2KyPJQeBTq zhB)PZ5U1Foyu`c{B@D64_blzQAskYX9M@;e{_pN{MAVAgP|FZqszO~1FN@w?q1pOlKjX?gO0fG zVMj!zn1@P+XjBiOk#*uqeHX4|h!tiRRxm`7ub7H#h_y5N-L}`xi0ihUvCSBn1cdQ85rjtV^`Y)%Lc8cFuIU<6e^@Kj;I`_|`VC8j& c2v%Cy|15%)R~aH$sk;zFOb3rWYtxkf0F^sf6aWAK delta 4338 zcmb7{e@ql-8pogaorRs9ot<3}Sbi@HEU>%m!nzi!R7HuBcqZr1NCZ8pR;-dL)p!&% za)@meYukuLt+ljP#q&gQN(Dtlxq8H&VuP2%ig=2rcb-?Rn!8hLdNb~`v-1ar@CV5o zLil{1=lwp<%7P-r>2B1UO&HVK1lq*+)! zu^{a<_XC{fd=2&*>cES%N5b#m(J*L{@ekw2S{Ekwrsg}}cW?A~M=i?=e>F}lH8`1d zFRlo3nG+i<@@2s`qJhE}rw#x{zW>q01PuiAx9BZuVfR3$7POS1%r5RHNaL!s6-)&) z#?S%@hFtbMbDp^^>4h0{gL#H$KuXI-GZ0@EJZxut;GCZbw4IScA}$Y+x*_3S#BH*K znS2Lq_kD7-})hoK;z zjGN1>i(>sHH<37KLf$*tVDb*~e$*9_A9cR+d-*2lMc!N?pUhQwzx*=zpjRC8r#>pQ zBHR+QD#32^+IOeFo57F#)u>tGJ*!l*Ny5rmyFj9Vl_EKYj-hsK7HO9hngIXh=es^=Ohgwbt>e zD{4a-qt5B~)AphUk=O!^fG4;#2+ z4?Ea07sroOm7Gh*LN3zUf^tY(kgw!sosBdjt%d(9v>?rDoI$M8b^4ncpaBd<>k$gV z+%eY^-nF^y{mw?$5w|^Ke#RkjMb@Oidd;WhkdG3TK?6{U68m*i$$pgRAEz5v*`I&WZmFDZAu$Y>^u6yDJB z{w{icY;ZzWa%kFE=RQ|S#(~WBp8tpsrsN0WR!jd2wW!dlsex8hDCQ1AF)G~UDY=U! zPcb^k6h&d^F~1tSApRfLyS7dCrRi(kH#06|mUy~64@CagQsx*;F&8UMn8u^{n1JGU`HXSHi61)YNSIZpTXJNoTpUS!OZ z)q*`vd*C=q)N4wh9wi32pJ4zcT!yRQ!q=Cz#$vKo>BP$;k;8IkK_rp7N#_{#cEv16HP$WPI) z;1nv9X+DH9RG7$p3KLP`4qpU!P@&EkO6rupzwA{haLe|PppfrOVIiMM-M<|lEsgGvm()$+{) z5kG|Q4tqG_jj%o84 z4@&eKlW4z^clG6~`>q=C;`ddb-|`E{WBd@2&qt6ZpIhJffd+zFs;OcS zq>2%{XebKO+LCHPOw-kBg5djsg<=8`NlhDD5pUb{h-I?GB-! zZm8qrA^~SZ0>S8&cR(+}$gs}C41)2BZ^2gtqe6WyRT$EpCzEss&qXNdb{&if>O~yp zLL7nUlutt^fk?Cd1=Nd|JRM&W2z#UyZjYql4o3o^6%=DeFQk$Xy!ar_=Y`vSUo>?NsqE_Ggxlc7 z6oh+ydQdO2Fb=W^M8A9h`U%9aWhD-ig1XH=!P^9)S#6e@4G@jRW5Qh!V+?n82=j+4 zadwe}czknCoM#Mab$<^KahKio4O8Un{wUaI#gyVO6Vt!iVKehg`KSIq#_6wffFInwIhmIy-dNggFP zRd*9E@Q+TJ{;Sao*VCM!j+CGZCB%^><{xnhnFw<%(U?OV*~zWAlQ>eNma-ayBZfYu zwcCcvMn^(gGg{`3v-GVM)5KbW(JqfbJ1H!)Web`K#!~(UmJ$q5_aRJ-p?TpLGZKb` zQ9D1V7j*)njzBo&pTS8WT9jODA+yv%j<}FO4A_q2!2jNFHA`siG{HAA#irRUd0cAo>x+O2=B@rP$qPf!}}zQcm+CBiTH|M#&KEDM&?kbx?>RmH|ZsqQ-O? rY6wJ{QqIx{#9@9N4ikue^(yuoGGSQqG>E$TF{5Bu2>t2gmf6z3KZR(- delta 3368 zcmb7`du&tp701u{-6X!TeSPi3&ck`wdD%%EJH~myx{(G#Ac|<4Hd&jsj4mw|p=;C( zm|7T7P$~wf;o+{?w6-wlMw@EcLU(CXQdXcasF*a7OjKQH3bad@*piYF7Om^*{fv+A zz14!M{&D4F%evps`Tox1cVQe){Sn3Hruw>;=K6cX;*#$70HBq%G6&{@0|91n77fWO z`2*l#9`>$DJe^Q40~}+=7=Hz9acJ?=xmsLY5R3nwDyBACt!A`1 z?bVqTIqB|8dE4`yN-ow3kB7uKMjDntnu@Vn#R!|5S=b!I2unZ5uoT1CVeuGtaHRjo z2#Fd-g&4H%na z0CBxW>u+s>L&{9f+2dYYu)gS5o-aJTN>lO*L3Q5CQ}zb0B9fZ+B5u@n1?dm6n#KDf=Bd-_tPw z>4Y#M?t>9E<(m*s`MTu6>x5vp3W;`Wywnm=LtsoxSy&cNdD3w@{nM<2ZY+AaxY0LW zcAx)^GM{fw8P4PtABn`BcW{h&<4uacgGs`0nMc7zPK-*4I7%4jY>i3hY;g>|6Z2P~ z^81`sTCrtgzUuq5cpRolEn@mNM5x|Bkc{{Nsr6e8iT!HQU)|=7nIAg`a*GSrdasr~ z?C%d84m{&u1O=PkC|q&!o^ zi*4PSxWz@71x2JcCU(IX>D8Nav7Yp%r0?Mr=^c?L5{{_FrcZkQV%wkb9cNpvy`aY% z^8MA{U5>#Ym$xYHQeCl?U^k1xXL>WA%sTJ-SK${W8v~ZmPb)vE`n2jFl`YD*0zRSp)_{gu;q7g%=%|K1On?XZ z=V0V8K++j@hE-t-G$BY#U_x0k;G$$mOcTW(8ajneVWa$s zutwgR5F5LLk=880c>Gun@SPCd3WJeAKL1_dUz9sTx++|TGAtuE7AL=ni)q>TO)2On zH#SIS+(2%$$@Q#FbwgkCn};+vwC;b-=1G~hXE~eQZ+b44b%oX~?EdD7nw3gtb)9|) z-Ooqr{e*E;oP(ouD9NTrFqtrFq|c#-FhK4?m=`0cTQ(ZTP|AxbX1hJp?%wb9mv60p zbnz>7h02aQR%mm#gClehLRkD0gbCr0F@T3?_%DXZ`bL<)@qUo!&kq#d^dyx2r|dW7S)q=~OVtOy zaaeh0DIa<3-S6?5i!RZ#m9 z*m(;^uXFDkuEF~RvB)?EiwI(Y^gJveh}H5sT&+S>==N(sXE9^(<)+BZy1ELo00c?x zb;Ag}PHI7Zpg~geNxuLesl6b-f-k6Qw@X=Tr1K7Q#-8lE@`j2ImfS4cSH5$>+o5k) zyr$GX@TGoU!U|vsVQe&9hmC}hWRx(8Fl^Ew*a*Wdx1jqgF|^C$NAgRlwVAEC=kohJ z{Uz6YHU6-FR%v~R_p=M#rt?BJdw`Y0U97=wW#?J9;UkD79dK;nC4Yxe#w*DuQZM6W ztdsUZyVM{@<8AU|D9a6|XdE5Qm$Od_6yN!DZWoKi(Zg@N6)WF;nEUSH|Bb4xVj->u z5LMf2_ybqtUUIb!#x-1xzm30joz&0OVsVCbgsa8km|8r>TesIZMf8-T@rZG|e6M4h zbGfUxpwjCog|a`F^^_GWyC2nU^9EJ|4dnVB!#M0A*XxWQV;#A^Svm=u$@NOBl~t-& z3Vo@~KU9?PTHej^*|C&)VJWG#8HS*Z)C!GFtdP`pN+)0^sZGeoa6&y}{p{%I)UA#L LwXlEv{Ziq7W(DG8 diff --git a/phsource/l^/j2i b/phsource/l^/j2i index 0ba10875848aa2e56e12de711a93bae4ae820eb2..4613dc5f27a4f3c838dc412700b9ee4e13af04f3 100644 GIT binary patch delta 4763 zcmb`Le@v8h9LGQ3=edh7JU{L(py&q&Cj}=$f^;~I2xc|hsMOPdTM@eDiejxvPEyk` zNt!HmVQVW}v)EdqOAiJkB&cvY|8PoSoAzs*qs@jez?jMG`*06;&*#gda>%pY?)KUJ z*o*g%&-dZq7P7mSQ17Z|R;=}|Ub3GS?f`b3VvkaxR48N5W#A&o>;W)F#)ywieDF4{ zW)FZ=AysH#lLjc2Hj+{)II*zzT8LNq7`#gGdxDc%+bW^f2GA*V3c(5cC~S)lPR6Ew z0iI%`ElxCI6L*Sn@`U!esmne6BJ_Ohm`|Ky@K8*VL^2==Q8ds(Xh0N$^5%cvi6ClhqF6H*h+G-|){xEg?jTlQXNC?F8CTv#pyTlNQ9 z1NLZ$&JwcpmVH*Pg?$oO8-+&wFTYeh4?inlEfR~waHqD|Ks2_jhmPK7C{V4R0OFiL zv^VL+%O=+r7$>>fo2D-J^o!85UwOz>3rf;~A}vnS@8C4jVp3{^NfhlY^*6|xixxL; z@+BLQ7U!J07P)jgLknwh9ah2v3?r1-sg9trzMIOPb{Z843VF1b4-q47D_59}`2BrG~UPg|x7f9Izuxbj6QlC`VdC9WF_4Q zW3M8Ty$Iu={j&9-9cy87hRT_N;fZAFHD#M>kx9}Z6G6mB$BOaM#^Y?UR6~jp#IXDe z46_XqUV3NMIN>a_n6YR%L(Rh(>UEEk*Y32qxiZ5B2g0-y0^9L9SbMw{9LZ5)P4GVbmk$=_OFnhYOF1RsLf zO3%Yq1Th-(6O6_fZ;{634KR+hXji|6b`BzEW=k!(yLi_;Z3eqThC3Q}wev7X&stVa-M=oUD`LG0lmhUM*C(OyvZ!vzk))rRi4wW7_P zVJBBx1WT{?1yhK1>}GWxg6N pYe%o(;d1(aINIb}i*e~`lXirmO`6f>)+TqjNt%b6eXb;3{2xhP_(=c& delta 2946 zcmb7`c}x^%7{=dkhAkh=vAY6t?#;5x>2fU;wtxp}8=@#8gnH6w43!!Ju~M|QMr&KO z)|MXDYK%v0Dq7<}A&3W7jfO^}ShZE#CIU9GMG>?_A$ErSc4lfdqrbP<8xbxl%%3=`D1XKlJbv|A04SwODGM@#1py480aS%+pb7)TP%%^~vlx{!-ggoA zITUf;@2}AoQfssTZB!d2{sgQHQQj+z%G+u4zRw1%54_3k98(?I6M5bgWZPjcb)-98 zf)P!mE7GwK!-NvRL@+ku@vxC#+-7&6+pHJk26vmjK`<({4*yCSBONOk71avHxN0AU zVA0H>m-y6-$OT5CwieHawM4Ce%|iu5t&*FlsU&LG`Mu~m?=zRIQUg%b0A#i7fH|}r zaTsz!7*X4g*Ta6Ic7{0)XGp{q++L_4YNxf!sME5y=S57*YE@h;Kct%#QZ8SyY(UXqAP`6KEjUUbOl%G^5zB3yjcy|lwOX349TmcjWy{O-D$9Cg z2R%_chU?)NQR`%1K%GRbh~Lc=iJ?keSi^TijU4dvEGq%O7?M6VH_Q-G9{E~Sk71fQ z%vNLnIYuk&49Qn==aB_?0&xWoz!d_aWB&jhfr#h#Ks?jQ5LeNl9sb&t>*F1B{fxEcT?c^e}p4+sLYs4VIvt_58H1h^;{HJM!lA2Xn- zr|PK;{t{f~Kr@w|N=q1xTA;lXmX7DVAj^R+7br%cQ1Ml?P0 z7W(YsJd0{05f4I=sJ4}n)PBXk!Iv2PCAA-zE07>YEU88D2SLaGsFBp9h{Z~ihyk8b z`)|ZdTp7LEEpICwN(G(V-Vf#W9$EzjLNoB?+;~|nnU)5 z{t{Vb{wliPQ5d&7zCXSs{-KbSG)0+b8?u3oAT)|~ZX|W?VqT}Z2!e&1fh=U6Z|NWT z-I5X9suh-wl{(K}B+qkhifB1lw(Jmx$wBlw@nPsBdM6kSIzjX{b2Qpa^tS7|HQRMQ z%jyN4s?tlB_s9JRk0H^z$8jNHMsjyrVaD9do{S#h4fhmfo)eJ+5(z>`KoA`g;Jph4 zOf4!P2=~~Z;GQ_!QV(9>gT;>zVf3YPGQw$?Zq+&WCw8PHWo*jY?MZtn+Vg?%Vb;j0 zdIx}(el{7!f)jyZkQ$^u!|Q1Ac=(%XGabWt&`JiF2D*XnWj_Tom#6Qdx~OaX@8Hye z|8i>i$i+;E@HL(uKQMxLN4=L+p65+D|7x}zvC=ujb{U?F%1H7h%t2H_Y~NwugFD1_ z6W;|*vTb#x)y<}?vFcDNd@w5Bdf8EzcrNA5j7iy#Us@@&O~_Z@=b6X|GYP~3+y@H? zgdgLF{A7r?Wr$|J9hzkbb@`tSA+%3c-RCl7fHI<1hc7`LQR@#p1^t2Esy|@M;Q_JS z!hZuTvRbODxl^9mY{KhWr*Cu(;Co8T@{>t*LbFHvjfTcBN58@;c# zhA)gfWHQ=911mXZ*3I_;;hS>%h67Uea1cnGi zAO9`%$q;EO%WpL+^Q=@^&=#pIFBI?dLZa4zS3rlXwn0|A$F7n`=_0;`4nMXXQa`%oe5z1Z_=Q&y4Y|=3p gAQ;m7ke|1~q<0I!klqbsvq|s&^EW}5J3o&82YGjS`2YX_ diff --git a/phsource/l^/j2o b/phsource/l^/j2o index c53166b05b83eb1f74987012ea91523c8981bd16..5fd6b1bd3d3cb29ede5df8e754df2c50c8e03b53 100644 GIT binary patch delta 2932 zcmb`JeMlQ;9LK-UbC=|Dce%uh2(^`|RIJWYP1YeBt=p`#IBcXvRD=%3V2%!Dn;_Yn zPzG)|Y;%mQQrK8JWinQ~OjAZFY$~{a+HRDZWps-$%AnBp580~S%AUJRd-o(k7uLXW z$B*Zd`{es_&!zrjuWdUN-v7+uL!FHRfR`HwG_;P8DD(PjDUc{sm>;S51H63GLh-|G$`h832_gUX#O>X($5N`Q_^YlEm zChS(cSz=9A&0oMiL=wa0+=wlzsd7%9Fzz!yHTN$boX?)E6U00EnL#}*>@r~p#5740 zi=~M?fqdEU0f|L3JuKt6jjXwy82EjVa%Kz(SOXH%SIf@?4Gnl9G>RfK*_Bqv`To zLl;MLP#zWzax^jZ3&c2@Y3*lBXVFw7a(ot)vVB&O`0qZ8|D!OP_3;-*^hf>qXeP;C zOmZ{}?jo|_c4`yzwhJ+@Q=6!I8c~iWt)-C8qREq*|EbM)euL)g%H#U&Ef&omfbSl; zm&wf!q!D)rN_W%UncVDmKTU4CprmLj(*ZAfRXXE^$Ii_u^$bQ>ZX!Y?lM=5#Og7EU zK9-5ia`V_mxp}v^PSDn`%=DRynq4=RW&JBpm01Uu*{p+hWV&sIR09;S`(V+vM#fxD zm3DgD2#+gcdAM7Y~))wowT$Mr+>jOuoHtM$cfl@=I zzdmZwhqvbQoSPnoo6*=!O)ljRmo5|9l)SzTREUx7rOo*NYpkWmpn+jFbl3*bFBtNsaz^W2`mrHA9W z$2aoakL3osaG> zngSYW+L-4l_HM`xP_Ph{w$~awSNfy+bM+QaB*ALiYey(d-!ojd{U|+}sqJzxj=zPG zEiJSqQ`^_%DGbZ-+O_?Yx`GxJie1}V18ZQl?cwW(bv(%=|jXh5KbSr@+sWhRy3tvM2gcV?f(VotQ3X#f-`tR OIVmcr;687t75)X!`2+X> delta 1875 zcmb7_Z%kWN7{=doZvWi2x3?`&*vj9+ia;r2Z9$m9p~8e_&>5HlR2_i)c`YvQ8&_V(tc z&vSmy``NKi0G6y09Im!%BR3OhS zsm19ZXAatL6^5N}?(B8fd$TJX6;omkN@G;_q7lDPsVX~&KovtVRE_fBc?7AecomPb z5g27bL(GgBo@B-hpeE0kI1l=f11&K>!Z+a+9@JCJ6gek!W&%=-NoFLAvdOZ1c^2(z zr=)uOJDcERU569~ttb;(DT5X5EUakdb6fR?u~je6bKDV_<75Vt{AHNr6K72@0Qffs z;v+gDyV>`G(9I>#_aQs-72~52i~CAmiTmK_vq(5LPF?5}-cNG{e+DpaqD}NA za>HE&8RfVf*J~a}zpB9y#Zi1f$Ki`Q(30@aa-YDE6n=mSFglYDJxKWPnuaYi)(P8t zxotZ>EIM8K=gzzCiHb(?oK@PyjnSvR5~jDgf=d#TX55T#qCx;^!-?v=dL5lq%Lgyk zH6Upfx1L|(z6WU)w|W#cokt@Q1Z5Q+8HxQ!gyUtURov=MOZH&S5&Hqh(c))avGQq8 ztm5g1U#=PuFKs8`oYx#v!tr?i5sn78gGTa2`ij+K7*k*Ux&qWs!0an6n$D!UK%aETG~;%B(B;?IAZt}LE}giwifq8Erqa8^%?9_ z$>HqRPs4uNoMrA8Sf&tWP1R^NerY8`a3?j#%PP$ge{&EBGsmwBdBq9Yy^`!+D%+qs z2@O;>pg#)%DtnEag=pqK2KdtudyA>-k#TyU%6w^QSeZexVtP}a&x8Q zu+YBC*&T>TMb(kaefV`kKf4F_;2f0*8_ZBj9j?PS^b;_k2OX)*H{4CAq}}%>#h&<9eQo~BGM%=Zu_S>wnrpSE<-e9cBKB5VnZE(Px4d}( diff --git a/phsource/l^/j2u b/phsource/l^/j2u index 4efec05b3a5fca6809929bbac827d641951ab904..21d246f13188422ded9a1928340b9b1533dd5cc6 100644 GIT binary patch delta 5351 zcmcJTeP~l>6vm(TrfuGv+z+bNDpfl>?24>(t2L!_H7VA)f!b>QXsSrNsxZa*0Zs>H zIzd!unXAqzwkWcpD+NENQ>!?1qd4ihLFY#IB@XZ1{la)f`OFy$D(2;X$o*R&ZiT#E+*eAKQcyew@h|p@3+Q8gtV%pq zp_KofT*`rLDO;)+m3r)uyV(xetRyiYi7ixr!$Q^kJ7#5d>IP|bD$pjiNoGa76?LP` zN}qUFUx~N_HczmWLY187t(9rUi$b@YfhUp2lP8zDLKKuCgKbBK@d*)z`7)R0hrhAO zaMt@n@>#Eyp<2yk)r4VUD!91fF);YWx3M#9o$>z}PH#+dgvesW$RZFO{4nbvLNs`` zxEefG2*3Ih`~+f+UgcV&4*|l*6M!h1vgVmSM$FcFL=-Y|we7U^s<(g{Y8*CR+UT0GNP3&H4BYSF7$V{t`Wjw?2d zLLL)~LT&sZ~ofZ6~MExNSz=(0iBvhAD;AOTBl zAL$4&l1;)$0#V2Ju{r{=%CnZOA`o2t0GvSF(pKQsGlzI1Jq#hbj?2e<%?=c`kOO_e!_dS0Y(GFEiCC)1i285+@TVqT> zSSrSUbb7jVHwrBuX|@H*XF!B@7Bm0x7O2y=avd{~ChU|(GSMXeg(k8=`8~^1{3O`T z%6c>th)dd!xHOa|d%Qn^N%85+ju7KmF2)gvI{A)NMj_cffpQKH2!yKt4E32qyj$uBQ6L}+ z2!xlH!Al?-I@e+M8GHS#=GLnsa@)i^{b6nzJjL8J(XPmVdKCPcwzJ4!K&&BH7LanrpLH{Is4 zR4+cY9#wLixUB2b1!X=i5QrkZ2}OfII3BiLi5x1vDszM=W3y34AkMj$;T(aekbgx5 zfjFoUgmQw>=-z-vf{`iDWSInGld=q(2u8aW zK)Wp#wga9qD*F3}g)wJw7$e_ytO&9d2oj8q?pkal7mPasli^08{V03F`=pGy+ zb|X*du${WZ(NeW+32F&Mje8wx2*e`!2wOxTnv^wYA`p+X#ds7S;wcP^u4Rr8M$<62 r$bnx2jmn86Yq*Wd7vz^TqtZ&wMn>hZE!_S6F@1KJ9qPcFlU@G-L9Rw2 delta 3294 zcmb7{YfKbZ6vxk<0r$@C%&f>FuT^$ez=aCf1s9OVE&`euD=3P9)ROXbI{=`FDPms37I-b!Psvk~Lm&I+P=IJAnpwwn zlXaY@o+;dbnS$r{ivyN3ivs{!nN~*rGpGqt>s2Gw+CIut#|FJLtuXBl+&XMwK-|!0 zVyDo~Uy{sZ61&ig5KcaaaNrwNAQ|bYjB|`Za8W-lOIcu7L~Hs*ELUm2ogNC-teNaV6{;r*FU^#0nv( zmqovVEYzE!A5CVU9ud|9LB0FpYPc^BrkCu~+ofZuGF7*nOw}!`5Yp0sIqVwm zLWdDM3`4addKijOZM*(EvK`exXaK;LFN@3IvQKSrPg%r6#zlemgR9LOEMjCw^j>>o z%$G6yq@6*zDnuZOf1d1Wwnp-W- z$Vbr^?H6Kh#aN`1p}FkBdH~i*oMf0hcOYP#%1mYI=u0T&K&PaxNuNvH24IysRM-Mt zJoqd16Y&gG7(uRzW6X z=yOO9Hk~0Ro3@5Dl&kzi81#{}5XpANcM9M}gz|*eoeM z-s36oc*>?gfC6!t_9zhjC;6xPTZ*Up>l1u~0?}XJ7739d`fKIH&J0!$7nASAb}A74 zN2=sF6nO4##xotkh@Y{nF~BYNsa4W)cTxgs9=}Ff|BqmRmmLEY=73N;rTJ`^9are^3b3 zQ|nA;hW{GgX1y|cPuw34n#_;ik+v%>T>4^swsMN@m8YhdDvFE+3juQ%)5Q$u8kr;t zLlisz#M%8HaGv@Qzf!?4D8FwOzky~EIB#lOLe&Jzrzq?Fe!e%&4VjwB$B|5k!=}6F z6WE49y2~Bp?qbuM`2(;Sn?5C;gHr=G?Hn-6k)d^AX(K0(dSu@b|1z;9Wl8$e%wTti z)ILErTPwDlK+?dD5R>Rqn1c|!{*KNIahCrYULb_Qcw0`RYB2TU08lRub@I|L6E%0U zgCv3j)oio`Y^e5%yU4!6mLKxR;329B#=k*$8@2AqngJ)tYDuVOpm|_GwMK3P(}-&A zd>yo-TCcbjdVK@Fa6#>DzI&kFUW6Sr549eTzA=U-UP`%}@n6>AoSxi$5}%jDE^>9? zgi}clq#^~-4*`&(jGIQvkYWd43OkU3H?9NzZF)8qXnLMRrokjsyQ-THS9P8fxrA$l z5>z|MPluDJmTGK*)Irr)-vu!%EYK`k&PDEtSsP!F$flH}o7@j3v`Fq*nmFf?DUgQ{ z$8>Yy7(x_q*P#F*PVh_Mgsd-HcBGrQYc?TVJ0Vus5iEzc`ltAGwOLDF6Tf diff --git a/phsource/l^/l^ b/phsource/l^/l^ index 6328d4ca8da4f3266afe9375d5d5e82e27b49fc3..e26ad126cbb8c9362a03e288564a75ddee75ef4e 100644 GIT binary patch literal 1670 zcmeH`y-or_6otQCmVY*)f+!LrQItrfCfX^9vC;ywhD1%Qtc;$>wfD1=;- zby|V^5p3Uj=0c1Cs3ZMkmF!F925_3h@h#tKD>r~rhPYuI3k=}h?Q24&Ju}LDESbH0 z>q{L5aK8c_yJLq;b#0j0Gos$8{w2X&VIPkxc3C9HJVgquvMn~tvfz>;O+sG-mn3s+ zD2mjm2sL#cC^p%mEWWH*P~R*WDO1W~#MKqYAu7a#h>%bg5o@Z6p2F5_G-f~3pChmH z-j~-`!5Eck71(@4)f_DuECSV^Cqp1BU*ScF_wXaw4<$k7K-5>rF)-|5+5OOzzW1{K+Fup96%N`P!uG~ z0an2Tq(N#x_JQ<^Fo*)(BMLM{9LN^{irfD>vxg1jaRx+)VGl)?(NM%4ioees$wCiB o<`ZBM907z!&ZN-8QJ!oo+eq%g7d z5iEEJD=W_+vgiY7!~8irXU?2|F8OEcM~4R|_2aDoxV^f&X?a|WjX@8Al|7|dl zXbpT$hxR7eGut%hQXC*QL`(M3T!=eJ3CVO!$J~oMXyX)q&-9FMzyY2kf}hIM^lwjT zxow^2T^SD0T7jqGVCktQsugY#URKO2Z-yy3Gh!hrW$CH}LMV7bTFjH`X48F#Rqs4*KbM~) xuk+-!NW3)DmYxBqd%_s0=d#eBd literal 999 zcmeH_Jx;?=5QINJ|HK$90we^5A0fU_2&b~O>XSWlf#ntxFF?` zb9QL3MVl5K&ZO4a6=EV*3H7#!Sz(hSMVmf7p|8$M#WAOJrFRwE>f2yVm62FLO -phoneme (l) virtual +phoneme #l virtual // Used for l and l/ endphoneme +phoneme #r virtual +// Used for r and r/2 +endphoneme + phoneme : // Lengthen previous vowel by "length" virtual length 40 // shorter than for fr-ca endphoneme + +phoneme r + liquid rhotic uvl + lengthmod 7 + starttype #r endtype #r + + IF nextPh(isNotVowel) THEN + ChangePhoneme(r/2) + ENDIF + + VowelEnding(vwl_fr/xr) + + NextVowelStarts + VowelStart(vwl_fr/r@) + VowelStart(vwl_fr/ra) + VowelStart(vwl_fr/re) + VowelStart(vwl_fr/ri) + VowelStart(vwl_fr/ro) + VowelStart(vwl_fr/ru) + EndSwitch + + IF prevPh(isPause) OR prevPhW(r/2) THEN + FMT(vwl_fr/_r) + ELIF prevPhW(p) OR prevPhW(k) THEN + FMT(vwl_fr/tr) + ELIF prevPhW(t) THEN + FMT(vwl_fr/tr) addWav(r3/r_uvl,30) + ENDIF + + IF thisPh(isWordStart) THEN + IF prevPh(isVowel) OR prevPh(isPause) OR prevPh(#l) OR prevPh(r/2) THEN + FMT(vwl_fr/_r) + ENDIF + FMT(vwl_fr/_r2) addWav(r3/r_uvl, 25) + ENDIF + + FMT(vwl_fr/r) addWav(r3/r_uvl,25) +endphoneme + + +phoneme R // First letter of a word + import_phoneme fr/r + lengthmod 0 +endphoneme + + +phoneme r2 // silent unless followed by vowel + liquid rhotic uvl + starttype #r endtype #r + lengthmod 7 + Vowelin f1=0 f2=1600 -300 300 f3=-200 80 + Vowelout f1=2 f2=1600 -300 300 f3=-300 80 + + IF nextPh(isNotVowel) THEN + ChangePhoneme(NULL) + ENDIF + FMT(vwl_fr/r) +endphoneme + + + +phoneme r/2 // variant of [r] when not preceding a vowel + liquid uvl + starttype #r endtype #r + Vowelout f1=2 f2=1600 -300 300 f3=-300 100 + lengthmod 2 + + PrevVowelEndings + VowelEnding(vwl_fr/r_@) + VowelEnding(vwl_fr/r_a) + VowelEnding(vwl_fr/r_e) + VowelEnding(vwl_fr/r_i) + VowelEnding(vwl_fr/r_o) + VowelEnding(vwl_fr/r_u) + EndSwitch + + IF prevPh(isVowel) THEN + FMT(vwl_fr/r_) addWav(r3/r_uvl, 30) + ELIF prevPh(m) OR prevPh(n) THEN + FMT(r3/r_n) + ENDIF + + FMT(vwl_fr/r_) +endphoneme + + +phoneme l + liquid + lengthmod 7 + + IF nextPh(isNotVowel) THEN + ChangePhoneme(l/) + ENDIF + + NextVowelStarts + VowelStart(l/l@) + VowelStart(l/la, -10) + VowelStart(l/le, -15) + VowelStart(l/li, -15) + VowelStart(l/lo, -10) + VowelStart(l/lu, -20) + EndSwitch + + IF prevPh(#@) THEN + VowelEnding(l/xl, -50) + ELIF prevPh(isVowel) THEN + VowelEnding(l/xl, -40) + ENDIF + + IF prevPh(isPause) THEN + FMT(l/_l) + ENDIF + IF prevPh(r/2) THEN + FMT(l/_l) + ENDIF + + IF prevPh(t) THEN + FMT(l/tl) + ENDIF + + IF prevPh(l/) THEN + FMT(l/l_long) // double l, make it longer + ENDIF + + FMT(l/l) +endphoneme + + +phoneme l/ // used for [l] when not before a vowel + liquid + lengthmod 7 + + IF nextPh(isVowel) THEN + ChangePhoneme(l) + ENDIF + + PrevVowelEndings + VowelEnding(l/l_@) + VowelEnding(l/l_a) + VowelEnding(l/l_e) + VowelEnding(l/l_i) + VowelEnding(l/l_o) + VowelEnding(l/l_u, -20) + EndSwitch + + IF prevPh(i) THEN + FMT(l/l_) + ENDIF + FMT(l/_l) +endphoneme + + // Vowels //======= phoneme @ - vowel starttype (@) endtype (@) + vowel starttype #@ endtype #@ length 170 - formants vowel/@_hgh - after (r) vwl_fr/r@ - before l/ DFT+l/l_@ - before (r) DFT+vwl_fr/xr + FMT(vowel/@_hgh) endphoneme phoneme @2 - vowel starttype (@) endtype (@) + vowel starttype #@ endtype #@ length 160 - formants vowel/@_fr - after (r) vwl_fr/r@ - before (r) DFT+vwl_fr/xr + FMT(vowel/@_fr) endphoneme phoneme a - vowel starttype (a) endtype (a) + vowel starttype #a endtype #a length 170 - formants vowel/a_6 - after l l/la-15 - after (r) vwl_fr/ra - before l/ DFT+l/l_a - before (r) DFT+vwl_fr/xr - before r/2 DFT+vwl_fr/r_a + + IF prevPh(l) THEN + VowelStart(l/la, -15) + ENDIF + + FMT(vowel/a_6) endphoneme phoneme e - vowel starttype (e) endtype (e) + vowel starttype #e endtype #e length 170 - formants vowel/e_8 - after (l) l/le-15 - after (r) vwl_fr/re - before l/ DFT-20+l/xl - before (r) DFT+vwl_fr/xr + + IF nextPh(l/) THEN + VowelEnding(l/xl, -20) + ENDIF + + FMT(vowel/e_8) endphoneme phoneme E - vowel starttype (e) endtype (e) + vowel starttype #e endtype #e length 170 - formants vowel/e_mid - after (l) l/le-15 - after (r) vwl_fr/re - before l/ DFT+l/l_e - before (r) DFT+vwl_fr/xr - before r/2 DFT+vwl_fr/r_e + + FMT(vowel/e_mid) endphoneme phoneme E2 // Between e and E - vowel starttype (e) endtype (e) + vowel starttype #e endtype #e length 170 - formants vowel/e_9 - after (l) l/le-15 - after (r) vwl_fr/re - before l/ DFT+l/l_e - before (r) DFT+vwl_fr/xr - before r/2 DFT+vwl_fr/r_e + + FMT(vowel/e_9) endphoneme phoneme i - vowel starttype (i) endtype (i) + vowel starttype #i endtype #i length 160 - formants vowel/i_2 - linkout ; - after (l) l/li-15 - after (r) vwl_fr/ri-30 - before l/ DFT+l/l_i - before (r) DFT+vwl_fr/xr - before r/2 DFT+vwl_fr/r_i + + IfNextVowelAppend(;) + + IF prevPh(#r) THEN + VowelStart(vwl_fr/ri, -30) + ENDIF + + FMT(vowel/i_2) endphoneme phoneme i- // shorter - vowel starttype (i) endtype (i) + vowel starttype #i endtype #i length 110 - formants vowel/i_2 - after (l) l/li-15 - after (r) vwl_fr/ri + + FMT(vowel/i_2) endphoneme phoneme i: // longer than i - vowel starttype (i) endtype (i) + vowel starttype #i endtype #i length 240 - formants vowel/i_3 - linkout ; - after (l) l/li-15 - after (r) vwl_fr/ri - before l/ DFT+l/l_i - before (r) DFT+vwl_fr/xr - before r/2 DFT+vwl_fr/r_i + + IfNextVowelAppend(;) + + FMT(vowel/i_3) endphoneme phoneme o - vowel starttype (o) endtype (o) + vowel starttype #o endtype #o length 170 - formants vowel/o_8 - after (l) l/lo-10 - after (r) vwl_fr/ro - before l/ DFT+l/l_o - before (r) DFT+vwl_fr/xr - before r/2 vowel/o_mid2+vwl_fr/r_o - reduceto o2 1 + + ChangeIfUnstressed(o2) + + IF nextPh(r/2) THEN + VowelEnding(vwl_fr/r_o) + FMT(vowel/o_mid2) + ENDIF + + FMT(vowel/o_8) endphoneme phoneme o2 - vowel starttype (o) endtype (o) + vowel starttype #o endtype #o length 170 - formants vowel/o - after (l) l/lo-10 - after (r) vwl_fr/ro - before l/ vowel/o_mid2+l/l_o - before (r) DFT+vwl_fr/xr - before r/2 vowel/o_mid2+vwl_fr/r_o + + IF nextPh(r/2) THEN + VowelEnding(vwl_fr/r_o) + FMT(vowel/o_mid2) + ENDIF + IF nextPh(l/) THEN + VowelEnding(l/l_o) + FMT(vowel/o_mid2) + ENDIF + + FMT(vowel/o) endphoneme phoneme O - vowel starttype (o) endtype (o) + vowel starttype #o endtype #o length 170 - formants vowel/o_mid2 - after (l) l/lo-10 - after (r) vwl_fr/ro - before l/ DFT+l/l_o - before (r) DFT+vwl_fr/xr - before r/2 DFT+vwl_fr/r_o - reduceto o2 1 + + ChangeIfUnstressed(o2) + + FMT(vowel/o_mid2) endphoneme phoneme O2 // Like O but no reduceto - vowel starttype (o) endtype (o) + vowel starttype #o endtype #o length 170 - formants vowel/o_mid2 - after (l) l/lo-10 - after (r) vwl_fr/ro - before l/ DFT+l/l_o - before (r) DFT+vwl_fr/xr - before r/2 DFT+vwl_fr/r_o + FMT(vowel/o_mid2) endphoneme phoneme o3 // almost like english oU - vowel starttype (@) endtype (u) + vowel starttype #@ endtype #u length 220 - formants vdiph/@u_3 + FMT(vdiph/@u_3) endphoneme phoneme u - vowel starttype (u) endtype (u) + vowel starttype #u endtype #u length 170 - formants vowel/u_bck2 - after l l/lu-20 - after (r) vwl_fr/ru - after R vwl_fr/ru-10 - before l/ DFT-20+l/l_u - before (r) DFT+vwl_fr/xr - before r/2 DFT+vwl_fr/r_u - before i DFT-50 + + IF nextPh(i) THEN + Length 50 + ENDIF + + IF prevPh(R) THEN + VowelStart(vwl_fr/ru, -10) + ENDIF + + FMT(vowel/u_bck2) endphoneme phoneme u: // slitely longer than u - vowel starttype (u) endtype (u) + vowel starttype #u endtype #u length 240 - formants vowel/u_bck2 - after l l/lu-20 - after (r) vwl_fr/ru - before l/ DFT-20+l/l_u + FMT(vowel/u_bck2) endphoneme phoneme y - vowel starttype (u) endtype (u) + vowel starttype #u endtype #u length 170 - formants vowel/y_2 - after l l/lu-20 - after (r) vwl_fr/ry - before l/ DFT-30+l/l_y - before (r) DFT+vwl_fr/xr - before r/2 DFT+vwl_fr/r_y - before E~ DFT-50 + + IF prevPh(#r) THEN + VowelStart(vwl_fr/ry) + ENDIF + + IF nextPh(l/) THEN + VowelEnding(l/l_y, -30) + ENDIF + IF nextPh(r/2) THEN + VowelEnding(vwl_fr/r_y) + ENDIF + IF nextPh(E~) THEN + Length 120 + ENDIF + + FMT(vowel/y_2) endphoneme phoneme Y - vowel starttype (@) endtype (@) + vowel starttype #@ endtype #@ length 170 - formants vowel/y# - after (l) l/l@-20 - after (r) vwl_fr/r@ - before l/ DFT-20+l/l_@ - before (r) DFT+vwl_fr/xr - before r/2 DFT+vwl_fr/r_@ - reduceto W 1 + + ChangeIfUnstressed(W) + + IF prevPh(l) THEN + VowelStart(l/l@, -20) + ENDIF + + IF nextPh(l/) THEN + VowelEnding(l/l_@, -20) + ENDIF + + FMT(vowel/y#) endphoneme phoneme W - vowel starttype (@) endtype (@) + vowel starttype #@ endtype #@ length 180 - formants vowel/@ - after (l) l/l@-20 - after (r) vwl_fr/r@ - before l/ DFT-20+l/l_@ - before (r) DFT+vwl_fr/xr - before r/2 DFT+vwl_fr/r_@ + + IF prevPh(l) THEN + VowelStart(l/l@, -20) + ENDIF + + IF nextPh(l/) THEN + VowelEnding(l/l_@, -20) + ENDIF + + FMT(vowel/@) endphoneme phoneme wA - vowel starttype (o) endtype (a) + vowel starttype #o endtype #a length 220 - formants vwl_fr/w_a - after (l) l/lo-10 - after (r) vwl_fr/ro - before l/ DFT-10+l/l_a - before j DFT - before (r) DFT+vwl_fr/xr - before r/2 DFT+vwl_fr/r_a + + IF nextPh(l/) THEN + VowelEnding(l/l_a) + ENDIF + IF nextPh(j) THEN + VowelEnding(NULL) + ENDIF + + FMT(vwl_fr/w_a) endphoneme phoneme w^i - vowel starttype (u) endtype (i) + vowel starttype #u endtype #i length 240 - formants vdiph/yi_fr - after l l/lu-20 - after (r) vwl_fr/ry - before l/ DFT+l/l_i - before (r) DFT+vwl_fr/xr - before r/2 DFT+vwl_fr/r_i + + IF prevPh(l) THEN + VowelStart(l/lu, -20) + ENDIF + IF prevPh(#r) THEN + VowelStart(vwl_fr/ry) + ENDIF + + FMT(vdiph/yi_fr) endphoneme phoneme A~ - vowel starttype (a) endtype (a) + vowel starttype #a endtype #a length 190 - formants vnasal/aa_n4 - after (r) vwl_fr/rA~ - before l/ DFT+l/l_a - before (r) DFT+vwl_fr/xr - before r/2 DFT+vwl_fr/r_a~ + + IF prevPh(#r) THEN + VowelStart(vwl_fr/rA~) + ENDIF + IF nextPh(r/2) THEN + VowelEnding(vwl_fr/r_a~) + ENDIF + + FMT(vnasal/aa_n4) endphoneme -phoneme E~ // same as W~ for fr-fr - vowel starttype (e) endtype (e) +phoneme E~ // same as W~ for fr-fr + vowel starttype #e endtype #e length 190 - formants vnasal/W_n - after (r) vwl_fr/r@ - before n2 vowel/e_mid - before (r) DFT+vwl_fr/xr + + IF nextPh(n2) THEN + FMT(vowel/e_mid) + ENDIF + FMT(vnasal/W_n) endphoneme phoneme O~ - vowel starttype (o) endtype (o) + vowel starttype #o endtype #o length 190 - formants vnasal/o_n2 - after (r) vwl_fr/ro - before (r) DFT+vwl_fr/xr + FMT(vnasal/o_n2) endphoneme phoneme W~ - vowel starttype (@) endtype (@) + vowel starttype #@ endtype #@ length 190 - formants vnasal/W_n - after (r) vwl_fr/r@ - before (r) DFT+vwl_fr/xr + FMT(vnasal/W_n) endphoneme @@ -303,39 +466,23 @@ endphoneme // These vowels map to others in fr-fr, but are distinct in fr-ca phoneme I // same as [i] - vowel starttype (i) endtype (i) - length 158 - formants vowel/i - linkout ; + import_phoneme fr/i endphoneme phoneme U // same as [u] - vowel starttype (u) endtype (u) - length 174 - formants vowel/u + import_phoneme fr/u endphoneme phoneme y" // same as [y] - vowel starttype (u) endtype (u) - length 148 - formants vowel/y_2 + import_phoneme fr/y endphoneme phoneme E: // slightly longer than [E] - vowel starttype (e) endtype (e) - length 212 - formants vowel/e_mid - after (l) l/le-15 - after (r) vwl_fr/re - before l/ DFT+l/l_e - before (r) DFT+vwl_fr/xr - before r/2 DFT+vwl_fr/r_e + import_phoneme E endphoneme phoneme A // same as [a] - vowel starttype (a) endtype (a) - length 166 - formants vowel/a_en + import_phoneme a endphoneme @@ -347,292 +494,261 @@ endphoneme phoneme b vcd blb stop - vowelout f1=2 f2=1000 -500 -300 f3=-300 80 brk - formants b/b+x/b%70 - before _ b/b_+x/b_ - before (l) b/b_+x/b_ - after _ NULL - after @ b/xb%50 + voicingswitch p lengthmod 5 - switchvoicing p + Vowelout f1=2 f2=1000 -500 -300 f3=-300 80 brk + + IF KlattSynth THEN + CALL base/b + RETURN + ENDIF + + IF PreVoicing THEN + FMT(b/xb, 50) + ENDIF + + IF nextPh(isPause2) OR nextPh(#l) THEN + FMT(b/b_) addWav(x/b_) + ENDIF + + FMT(b/b) addWav(x/b, 70) endphoneme + phoneme d vcd alv stop - vowelin f1=0 f2=1700 -300 300 f3=-100 80 amp=20 - vowelout f1=0 f2=1700 -300 300 f3=-100 80 - formants d/d+x/d%40 - before _ d/d_+x/d_%50 - before (r) d/dr+x/d%50 - before r/2 d/dr+x/d%50 - after _ d/d+x/d%50 - after (@) d/xd + voicingswitch t lengthmod 5 - switchvoicing t + Vowelin f1=0 f2=1700 -300 300 f3=-100 80 amp=20 + Vowelout f1=0 f2=1700 -300 300 f3=-100 80 + + IF PreVoicing THEN + FMT(d/xd) + ENDIF + + IF nextPh(isPause2) THEN + FMT(d/d_) addWav(x/d_, 50) + ELIF nextPh(#r) THEN + FMT(d/dr) addWav(x/d, 50) + ELIF prevPh(isPause) THEN + FMT(d/d) addWav(x/d, 50) + ENDIF + + FMT(d/d) addWav(x/d, 40) endphoneme phoneme g vcd vel stop - vowelin f1=2 f2=2300 200 300 f3=-300 80 - vowelout f1=2 f2=2300 250 300 f3=-300 80 brk - formants g/g+x/g%20 - before _ g/g_+x/g_ -// before (r) g/g_+x/g_%25 - after _ NULL - after (@) g/xg%30 - after n g2/g+x/g2_ + voicingswitch k lengthmod 5 - switchvoicing k + Vowelin f1=2 f2=2300 200 300 f3=-300 80 + Vowelout f1=2 f2=2300 250 300 f3=-300 80 brk + + IF PreVoicing THEN + FMT(g/xg) + ENDIF + + IF nextPh(isPause2) THEN + FMT(g/g_) addWav(x/g_) + ENDIF + + FMT(g/g) addWav(x/g, 20) 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 + voicingswitch g lengthmod 2 - wave ustop/k%40 // reduce strength of noise burst - before _ ustop/k_ - before (r) ustop/k%50 - before r/2 ustop/k%60 - before (l) ustop/kl%45 - before (i) ustop/ki%45 - switchvoicing g + Vowelin f1=0 f2=2300 200 400 f3=-100 80 + Vowelout f1=0 f2=2300 300 400 f3=-100 80 rms=20 + + IF nextPh(isPause2) THEN + WAV(ustop/k_) + ELIF nextPh(#r) THEN + WAV(ustop/k, 50) + ELIF nextPh(#i) OR nextPh(;) THEN + WAV(ustop/ki, 45) + ELIF nextPh(#l) THEN + WAV(ustop/kl, 45) + ENDIF + + WAV(ustop/k, 40) endphoneme -phoneme l - liquid starttype (l) endtype (l) - vowelout f1=1 f2=1600 -300 300 f3=100 80 brk - length 100 - lengthmod 7 - beforenotvowel l/ - formants l/l - after _ l/_l - after r/2 l/_l - after t l/tl - after l/ l/l_long // double l, make it longer -endphoneme - - -phoneme l/ // used for [l] when not before a vowel - liquid palatal starttype (l) endtype (l) - length 100 - lengthmod 7 - formants l/_l - after (i) l/l_ - beforevowel l -endphoneme - phoneme n2 - beforenotvowel NULL vcd alv nasal - vowelout f1=2 f2=1700 -300 250 f3=-100 80 rms=20 brk - length 100 - lengthmod 4 - formants n/n_ - before _ n/n_ + IF nextPh(isNotVowel) THEN + ChangePhoneme(NULL) + ENDIF + ChangePhoneme(n) endphoneme phoneme p vls blb stop - vowelin f1=0 f2=1000 -50 -100 f3=-200 80 amp=11 - vowelout f1=0 f2=1000 -500 -350 f3=-300 80 rms=22 + voicingswitch b lengthmod 2 - wave ustop/p_unasp_%90 - after _ ustop/p%70 - before _ ustop/p_%70 -// before (r) ustop/pr%45 - before @- ustop/p_unasp%60 - before (l) ustop/pl%30 - switchvoicing b + Vowelin f1=0 f2=1000 -50 -100 f3=-200 80 amp=11 + Vowelout f1=0 f2=1000 -500 -350 f3=-300 80 rms=22 + + IF nextPh(isPause2) THEN + WAV(ustop/p_, 70) + ELIF nextPh(@-) THEN + WAV(ustop/p_unasp, 60) + ELIF nextPh(l) THEN + WAV(ustop/pl, 30) + ENDIF + WAV(ustop/p_unasp_, 90) endphoneme phoneme p2 // silent unless followed by vowel - beforenotvowel NULL vls blb stop - vowelin f1=0 f2=1000 -50 -100 f3=-200 80 amp=11 - vowelout f1=0 f2=1000 -500 -350 f3=-300 80 rms=22 lengthmod 2 - wave ustop/p%45 - before _ ustop/p_%45 -endphoneme + Vowelin f1=0 f2=1000 -50 -100 f3=-200 80 amp=11 + Vowelout f1=0 f2=1000 -500 -350 f3=-300 80 rms=22 + IF nextPh(isNotVowel) THEN + ChangePhoneme(NULL) + ENDIF -phoneme r - liquid uvl starttype (r) endtype (r) - vowelin f1=0 f2=1600 -300 300 f3=-200 80 len=20 - vowelout f1=2 f2=1600 -300 300 f3=-300 80 - length 100 - lengthmod 7 - beforenotvowel r/2 - formants vwl_fr/r+r3/r_uvl.wav%25 - after _ vwl_fr/_r - after k vwl_fr/tr - after p vwl_fr/tr - after t vwl_fr/tr+r3/r_uvl.wav%30 - after r/2 vwl_fr/_r -endphoneme - - -phoneme R // First letter of a word - liquid uvl starttype (r) endtype (r) - vowelin f1=0 f2=1600 -300 300 f3=-200 80 len=20 - vowelout f1=2 f2=1600 -300 300 f3=-300 80 - length 100 - lengthmod 0 - beforenotvowel r/2 - formants vwl_fr/_r2+r3/r_uvl.wav%25 - after _ vwl_fr/_r - after (a) vwl_fr/_r - after (e) vwl_fr/_r - after (@) vwl_fr/_r - after (i) vwl_fr/_r - after (o) vwl_fr/_r - after (u) vwl_fr/_r - after y vwl_fr/_r - after (l) vwl_fr/_r - after r/2 vwl_fr/_r -endphoneme - - -phoneme r2 // silent unless followed by vowel - liquid uvl starttype (r) endtype (r) - vowelin f1=0 f2=1600 -300 300 f3=-200 80 - vowelout f1=2 f2=1600 -300 300 f3=-300 80 - length 100 - lengthmod 7 - beforenotvowel NULL - formants vwl_fr/r -endphoneme - - -phoneme r/2 // variant of [r] when not preceding a vowel - liquid uvl starttype r/2 endtype r/2 - vowelout f1=2 f2=1600 -300 300 f3=-300 100 - length 100 - lengthmod 2 - formants vwl_fr/r_ - after (a) vwl_fr/r_+r3/r_uvl.wav%30 - after (e) vwl_fr/r_+r3/r_uvl.wav%30 - after (@) vwl_fr/r_+r3/r_uvl.wav%30 - after (i) vwl_fr/r_+r3/r_uvl.wav%30 - after (o) vwl_fr/r_+r3/r_uvl.wav%30 - after (u) vwl_fr/r_+r3/r_uvl.wav%30 - before m r3/r_n - before n r3/r_n + WAV(ustop/p, 45) endphoneme phoneme s vls alv frc sibilant - vowelin f1=0 f2=1700 -300 300 f3=-100 80 - vowelout f1=0 f2=1700 -300 250 f3=-100 80 rms=20 + voicingswitch z lengthmod 3 - wave ufric/s%45 - before _ ufric/s_%45 - before p ufric/s!%45 - before t ufric/s!%45 - before k ufric/s!%45 - switchvoicing z + Vowelin f1=0 f2=1700 -300 300 f3=-100 80 + Vowelout f1=0 f2=1700 -300 250 f3=-100 80 rms=20 + + IF nextPh(isPause) THEN + WAV(ufric/s_, 45) + ELIF nextPh(p) OR nextPh(t) OR nextPh(k) THEN + WAV(ufric/s!, 45) + ENDIF + WAV(ufric/s, 45) endphoneme phoneme S vls pla frc sibilant - vowelin f1=0 f2=1900 100 300 f3=-100 80 - vowelout f1=0 f2=1900 100 300 f3=-100 80 - length 100 + voicingswitch Z lengthmod 3 - wave ufric/sh%45 - before _ ufric/sh_%45 - switchvoicing Z + Vowelin f1=0 f2=1900 100 300 f3=-100 80 + Vowelout f1=0 f2=1900 100 300 f3=-100 80 + + IF nextPh(isPause) THEN + WAV(ufric/sh_, 45) + ENDIF + WAV(ufric/sh, 45) endphoneme + phoneme t vls alv stop - vowelin f1=0 f2=1600 -300 300 f3=-100 80 - vowelout f1=0 f2=1600 -300 250 f3=-100 80 brk + voicingswitch d lengthmod 2 - wave ustop/t_short%40 - before _ ustop/t_%40 - before (r) ustop/t_short%40 - before r/2 ustop/t_short%50 - switchvoicing d + Vowelin f1=0 f2=1600 -300 300 f3=-100 80 + Vowelout f1=0 f2=1600 -300 250 f3=-100 80 brk + + IF nextPh(isPause2) THEN + WAV(ustop/t_, 40) + ELIF nextPh(r/2) THEN + WAV(ustop/t_short, 50) + ENDIF + WAV(ustop/t_short, 40) + endphoneme phoneme t2 // silent unless followed by vowel - beforenotvowel NULL vls alv stop - vowelin f1=0 f2=1600 -300 300 f3=-100 80 - vowelout f1=0 f2=1600 -300 250 f3=-100 80 rms=20 + Vowelin f1=0 f2=1600 -300 300 f3=-100 80 + Vowelout f1=0 f2=1600 -300 250 f3=-100 80 rms=20 lengthmod 2 - wave ustop/t_short%30 - before _ ustop/t_%40 + + IF nextPh(isNotVowel) THEN + ChangePhoneme(NULL) + ENDIF + + WAV(ustop/t_short, 30) endphoneme phoneme t3 // silent unless followed by vowel or pause - beforepause t - beforenotvowel NULL vls alv stop - vowelin f1=0 f2=1600 -300 300 f3=-100 80 - vowelout f1=0 f2=1600 -300 250 f3=-100 80 rms=20 lengthmod 2 - wave ustop/t_short%30 - before _ ustop/t_%40 + IF nextPh(isPause) THEN + ChangePhoneme(t) + ELIF nextPh(isNotVowel) THEN + ChangePhoneme(NULL) + ELSE + ChangePhoneme(t2) + ENDIF endphoneme phoneme v vcd lbd frc - vowelin f1=0 f2=1000 -100 -100 f3=-300 100 - vowelout f1=0 f2=1000 -100 -100 f3=-300 100 + voicingswitch f lengthmod 6 - formants voc/v+vocw/v%75 - before (r) voc/vj+vocw/v%75 - before _ voc/v_+vocw/v - switchvoicing f + Vowelin f1=0 f2=1000 -300 -200 f3=-300 100 + Vowelout f1=0 f2=1000 -500 -300 f3=-300 60 len=50 + + IF KlattSynth THEN + CALL base/v + RETURN + ENDIF + + IF nextPh(isPause2) THEN + FMT(voc/v_) addWav(vocw/v) + ENDIF + IF thisPh(isWordStart) AND nextPhW(isLiquid) THEN + Length 70 + ENDIF + FMT(voc/v) addWav(vocw/v, 75) endphoneme phoneme z vcd alv frc sibilant - vowelout f1=0 f2=1700 -300 300 f3=-100 60 len=50 - formants voc/z+ufric/s_%35 - before _ voc/z_+ufric/s_%45 + voicingswitch s lengthmod 6 - switchvoicing s + Vowelout f1=0 f2=1700 -300 300 f3=-100 60 len=50 + + IF nextPh(isPause2) THEN + FMT(voc/z_) addWav(ufric/s_, 45) + ENDIF + FMT(voc/z) addWav(ufric/s_, 45) endphoneme phoneme z2 // silent unless followed by vowel - beforenotvowel NULL vcd alv frc sibilant - vowelout f1=0 f2=1700 -300 300 f3=-100 60 len=50 - formants voc/z+ufric/s_%45 - before _ voc/z_+ufric/s%45 - lengthmod 6 + IF nextPh(isVowel) THEN + ChangePhoneme(z) + ELSE + ChangePhoneme(NULL) + ENDIF endphoneme + phoneme z3 // "six" and "dix". [s] before pause, [z] before vowel, else [] - beforepause s - beforenotvowel NULL vcd alv frc sibilant - vowelout f1=0 f2=1700 -300 300 f3=-100 60 len=50 - formants voc/z+ufric/s_%45 - before _ voc/z_+ufric/s_%45 - lengthmod 6 + IF nextPh(isPause) THEN + ChangePhoneme(s) + ELIF nextPh(isVowel) THEN + ChangePhoneme(z) + ELSE + ChangePhoneme(NULL) + ENDIF endphoneme - - - - diff --git a/phsource/ph_french_ca b/phsource/ph_french_ca index cea2fc6a..c08bd18b 100644 --- a/phsource/ph_french_ca +++ b/phsource/ph_french_ca @@ -16,56 +16,56 @@ endphoneme phoneme E - vowel starttype (e) endtype (e) + vowel starttype #e endtype #e length 164 - formants vowel/e_mid + FMT(vowel/e_mid) endphoneme phoneme u - vowel starttype (u) endtype (u) + vowel starttype #u endtype #u length 174 - formants vowel/u_bck + FMT(vowel/u_bck) endphoneme phoneme E~ - vowel starttype (e) endtype (e) + vowel starttype #e endtype #e length 192 - formants vnasal/ee_n + FMT(vnasal/ee_n) endphoneme phoneme I - vowel starttype (i) endtype (i) + vowel starttype #i endtype #i length 158 - formants vowel/ii - linkout ; + IfNextVowelAppend(;) + FMT(vowel/ii) endphoneme phoneme U - vowel starttype (u) endtype (u) + vowel starttype #u endtype #u length 150 - formants vowel/uu_bck + FMT(vowel/uu_bck) endphoneme phoneme y" - vowel starttype (u) endtype (u) + vowel starttype #u endtype #u length 140 - formants vowel/yy // was sv_y2 + FMT(vowel/yy) // was sv_y2 endphoneme phoneme E: // [ae] diphthong - vowel starttype (@) endtype (e) + vowel starttype #@ endtype #e length 230 - formants vdiph/ae + FMT(vdiph/ae) endphoneme phoneme A - vowel starttype (a) endtype (a) + vowel starttype #a endtype #a length 166 - formants vowel/aa + FMT(vowel/aa) endphoneme @@ -77,12 +77,11 @@ endphoneme // uses the consonants in file "phonemes", unless overridden here phoneme R - liquid - vowelin f1=0 f2=1500 -400 400 f3=-400 80 - length 100 + liquid trill lengthmod 7 - beforenotvowel r/ - trill - formants vwl_fr/@R2+r3/rx%120 + Vowelin f1=0 f2=1500 -400 400 f3=-400 80 + IF nextPh(isNotVowel) THEN + ChangePhoneme(r/) + ENDIF + FMT(vwl_fr/@R2) addWav(r3/rx, 120) endphoneme - diff --git a/phsource/ph_german b/phsource/ph_german index 6f585468..c3920e2a 100755 --- a/phsource/ph_german +++ b/phsource/ph_german @@ -7,204 +7,238 @@ phoneme @ // Schwa - vowel starttype (@) endtype (@) - formants vowel/@_3 + vowel starttype #@ endtype #@ unstressed - before r/ vowel/a#_3 // replace [@r] by [3] length 125 + IF nextPh(r/) THEN + FMT(vowel/a#_3) // replace [@r] by [3] + ENDIF + FMT(vowel/@_3) endphoneme phoneme 3 // open Schwa - vowel starttype (@) endtype (@) -// formants vwl_de/3 - formants vowel/a#_3 + vowel starttype #@ endtype #@ unstressed - // length 160 length 125 + FMT(vowel/a#_3) endphoneme phoneme a - vowel starttype (a) endtype (a) - // length 140 + vowel starttype #a endtype #a length 110 - formants vowel/a - before * DFT+40 + IF nextPh(*) THEN + length 150 + ENDIF + FMT(vowel/a) endphoneme phoneme E - vowel starttype (e) endtype (e) + vowel starttype #e endtype #e length 120 - formants vowel/e_mid2 - before * DFT+40 + IF nextPh(*) THEN + length 160 + ENDIF + FMT(vowel/e_mid2) endphoneme phoneme E2 // as[E] but reduces to @ if unstressed - vowel starttype (e) endtype (e) + vowel starttype #e endtype #e length 120 - formants vowel/e_mid2 - before * DFT+40 - reduceto @ 0 + ChangeIfDiminished(@) + IF nextPh(*) THEN + length 160 + ENDIF + FMT(vowel/e_mid2) endphoneme phoneme I - vowel starttype (i) endtype (i) + vowel starttype #i endtype #i length 120 - formants vowel/ii - before * DFT+40 - linkout ; + IF nextPh(*) THEN + length 160 + ENDIF + IfNextVowelAppend(;) + FMT(vowel/ii) endphoneme phoneme I: - vowel starttype (i) endtype (i) + vowel starttype #i endtype #i length 190 - formants vowel/ii + FMT(vowel/ii) endphoneme phoneme O - vowel starttype (o) endtype (o) + vowel starttype #o endtype #o length 120 - formants vowel/oo - before * DFT+40 + IF nextPh(*) THEN + length 160 + ENDIF + FMT(vowel/oo) endphoneme phoneme U - vowel starttype (u) endtype (u) + vowel starttype #u endtype #u length 140 - formants vowel/uu_2 - before * DFT+40 + IF nextPh(*) THEN + length 180 + ENDIF + FMT(vowel/uu_2) endphoneme phoneme A: - vowel starttype (a) endtype (a) + vowel starttype #a endtype #a length 250 - formants vowel/aa_6 + FMT(vowel/aa_6) endphoneme -phoneme A - vowel starttype (a) endtype (a) + +phoneme A // reduces to [a] if not stressed + vowel starttype #a endtype #a length 240 - formants vowel/aa_6 - reduceto a 4 // ?? + ChangeIfNotStressed(a) + FMT(vowel/aa_6) endphoneme phoneme i: - vowel starttype (i) endtype (i) + vowel starttype #i endtype #i length 180 - formants vowel/i_2 - after w w/wi2 - before * DFT+40 + IF nextPh(*) THEN + length 220 + ENDIF + IF prevPh(w) THEN + VowelStart(w/wi2) + ENDIF + FMT(vowel/i_2) endphoneme + phoneme i2 - vowel starttype (i) endtype (i) + vowel starttype #i endtype #i length 180 - formants vowel/i_2 - after w w/wi2 - before * DFT+40 - reduceto I 4 + IF nextPh(*) THEN + length 220 + ENDIF + ChangeIfNotStressed(I) + IF prevPh(w) THEN + VowelStart(w/wi2) + ENDIF + FMT(vowel/i_2) endphoneme phoneme u: - vowel starttype (u) endtype (u) + vowel starttype #u endtype #u length 190 -// formants vwl_de/u: - formants vowel/u - before * DFT+40 + IF nextPh(*) THEN + length 230 + ENDIF + FMT(vowel/u) endphoneme phoneme aU - vowel starttype (a) endtype (u) + vowel starttype #a endtype #u length 220 - formants vdiph/aau_2 + FMT(vdiph/aau_2) endphoneme phoneme aI - vowel starttype (a) endtype (i) + vowel starttype #a endtype #i length 210 - formants vdiph/ai_5 + FMT(vdiph/ai_5) endphoneme phoneme EI - vowel starttype (e) endtype (i) + vowel starttype #e endtype #i length 210 - formants vdiph/eei + FMT(vdiph/eei) endphoneme phoneme OY - vowel starttype (o) endtype (i) + vowel starttype #o endtype #i length 220 - formants vdiph/oi + FMT(vdiph/oi) endphoneme phoneme E: - vowel starttype (e) endtype (e) + vowel starttype #e endtype #e length 190 - formants vowel/e_mid2 + FMT(vowel/e_mid2) endphoneme phoneme e: - vowel starttype (e) endtype (e) + vowel starttype #e endtype #e length 190 - formants vowel/e_2 - before * DFT+40 + IF nextPh(*) THEN + length 230 + ENDIF + FMT(vowel/e_2) endphoneme phoneme o: - vowel starttype (o) endtype (o) + vowel starttype #o endtype #o length 200 - formants vowel/o - before * DFT+40 + IF nextPh(*) THEN + length 240 + ENDIF + FMT(vowel/o) endphoneme phoneme y: - vowel starttype (u) endtype (u) + vowel starttype #u endtype #u length 200 - formants vowel/y - before * DFT+40 + IF nextPh(*) THEN + length 240 + ENDIF + FMT(vowel/y) endphoneme phoneme y - vowel starttype (u) endtype (u) + vowel starttype #u endtype #u length 130 - formants vowel/yy_4 - before * DFT+40 + IF nextPh(*) THEN + length 170 + ENDIF + FMT(vowel/yy_4) endphoneme phoneme Y: - vowel starttype (@) endtype (@) + vowel starttype #@ endtype #@ length 220 - formants vowel/y# - before * DFT+40 + IF nextPh(*) THEN + length 260 + ENDIF + FMT(vowel/y#) endphoneme phoneme W - vowel starttype (@) endtype (@) + vowel starttype #@ endtype #@ length 160 - formants vowel/oe - before * DFT+40 + IF nextPh(*) THEN + length 200 + ENDIF + FMT(vowel/oe) endphoneme @@ -213,73 +247,85 @@ endphoneme //=========== phoneme ts - vls alv afr sibilant - vowelin f1=0 f2=1700 -300 300 f3=-100 80 - vowelout f1=0 f2=1700 -300 250 f3=-100 80 rms=20 - lengthmod 2 - wave ustop/ts - before _ ustop/ts_ + import_phoneme consonants/ts endphoneme phoneme pF vls blb afr - vowelout f1=0 f2=1000 -500 -350 f3=-200 80 + Vowelout f1=0 f2=1000 -500 -350 f3=-200 80 lengthmod 2 - wave ufric/f // could replace this with a [pf] wav file + WAV(ufric/f) // could replace this with a [pf] wav file endphoneme + phoneme C2 // for "ig" -> [IC] or [Ig] vls pal frc palatal - beforevowel g - vowelin f1=0 f2=2700 400 600 f3=200 70 - vowelout f1=0 f2=2700 400 600 f3=200 70 rms=20 - length 100 lengthmod 3 - wave ufric/ch + IF nextPh(isVowel) THEN + ChangePhoneme(g) + ENDIF + CALL C endphoneme phoneme l/ // used for [l] when not before a vowel liquid - length 100 lengthmod 7 - formants l/l_3 - before (r) l/_l - beforevowel l + + IF nextPh(isVowel) THEN + ChangePhoneme(l) + ENDIF + + PrevVowelEndings + VowelEnding(l/L1_@L, -60) + VowelEnding(l/L1_aL, -40) + VowelEnding(l/L1_eL, -30) + VowelEnding(l/L1_iL, -30) + VowelEnding(l/L1_oL, -40) + VowelEnding(l/L1_uL, -40) + EndSwitch + + FMT(l/l_3) endphoneme + phoneme j - liquid - palatal - length 100 - beforenotvowel j/ - formants NULL - after _ j/_j_short + liquid palatal lengthmod 7 + + IF nextPh(isVowel) THEN + NextVowelStarts + VowelStart(j/j@) + VowelStart(j/ja) + VowelStart(j/je) + VowelStart(j/ji) + VowelStart(j/jo) + VowelStart(j/ju) + EndSwitch + + VowelEnding(j/xj, -30) + + IF prevPh(isPause) THEN + FMT(j/_j_short) // difference from base/j + ENDIF + ELSE + // no vowel follows + Vowelout len=70 + FMT(j/j_) + ENDIF endphoneme + // This is actually the ENGLISH "rolling r". For german, we now use * in the dictionary, // so this phoneme will only be used in english words in german texts. phoneme r - liquid starttype #r endtype #r - lengthmod 7 - beforenotvowel r/ + liquid rhotic trill - formants r/r - after _ r/rr - after t r/trr p r/trr k r/trr - before _ r/r_ -endphoneme - - -phoneme r/ // variant of [r] when not preceding a vowel, in english words only - liquid vowel2 - length 100 - lengthmod 7 // - formants NULL + lengthmod 7 + CALL base/r endphoneme diff --git a/phsource/ph_greek b/phsource/ph_greek index e5a6170a..2730915c 100644 --- a/phsource/ph_greek +++ b/phsource/ph_greek @@ -5,28 +5,28 @@ phoneme a/ - vowel starttype (@) endtype (@) + vowel starttype #@ endtype #@ length 180 - formants vowel/a_4 + FMT(vowel/a_4) endphoneme phoneme e - vowel starttype (e) endtype (e) + vowel starttype #e endtype #e length 180 - formants vowel/e_mid2 + FMT(vowel/e_mid2) endphoneme phoneme i - vowel starttype (i) endtype (i) + vowel starttype #i endtype #i length 140 - formants vowel/i - linkout ; + IfNextVowelAppend(;) + FMT(vowel/i) endphoneme phoneme o - vowel starttype (o) endtype (o) + vowel starttype #o endtype #o length 180 - formants vowel/oo + FMT(vowel/oo) endphoneme @@ -35,39 +35,37 @@ endphoneme phoneme t // revert to alveolar /t/ vls alv stop - vowelin f1=1 f2=1600 -300 300 f3=-100 80 amp=11 - vowelout f1=0 f2=1600 -300 250 f3=-100 80 rms=20 lengthmod 2 - wave ustop/t_short%80 - before _ ustop/t_ - switchvoicing d + voicingswitch d + Vowelin f1=1 f2=1600 -300 300 f3=-100 80 amp=11 + Vowelout f1=0 f2=1600 -300 250 f3=-100 80 rms=20 + IF nextPh(isPause2) THEN + WAV(ustop/t_) + ENDIF + WAV(ustop/t_short, 80) endphoneme + phoneme d // revert to alveolar /d/ - vcd alv stop - vowelin f1=2 f2=1700 -300 300 f3=-100 80 - vowelout f1=2 f2=1700 -300 300 f3=-100 80 - formants d/d+x/d - before _ d/d_+x/d_ - before r d/dr+x/d - after _ NULL - after @ d/xd - lengthmod 5 - switchvoicing t + import_phoneme base/d + voicingswitch t 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%70 - before _ ustop/k_ - before r ustop/kr - before l ustop/kl -// before (i) ustop/ki - - switchvoicing g + voicingswitch g + Vowelin f1=0 f2=2300 200 400 f3=-100 80 + Vowelout f1=0 f2=2300 300 400 f3=-100 80 rms=20 + + IF nextPh(isPause2) THEN + WAV(ustop/k_) + ELIF nextPh(isRhotic) THEN + WAV(ustop/kr) + ELIF nextPh(l) THEN + WAV(ustop/kl) + ENDIF + WAV(ustop/k_unasp, 70) endphoneme diff --git a/phsource/ph_greek_ancient b/phsource/ph_greek_ancient index 2c08836c..3c537781 100644 --- a/phsource/ph_greek_ancient +++ b/phsource/ph_greek_ancient @@ -10,66 +10,66 @@ endphoneme phoneme y - vowel starttype (i) endtype (i) + vowel starttype #i endtype #i length 160 - formants vowel/yy_4 + FMT(vowel/yy_4) endphoneme phoneme e - vowel starttype (e) endtype (e) + vowel starttype #e endtype #e length 140 - formants vowel/e + FMT(vowel/e) endphoneme phoneme E - vowel starttype (e) endtype (e) + vowel starttype #e endtype #e length 150 - formants vowel/ee_1 + FMT(vowel/ee_1) endphoneme phoneme o - vowel starttype (o) endtype (o) + vowel starttype #o endtype #o length 140 - formants vowel/o + FMT(vowel/o) endphoneme phoneme O - vowel starttype (o) endtype (o) + vowel starttype #o endtype #o length 150 - formants vowel/0 + FMT(vowel/0) endphoneme phoneme EU - vowel starttype (e) endtype (u) + vowel starttype #e endtype #u length 230 - formants vdiph/eeu + FMT(vdiph/eeu) endphoneme phoneme OI - vowel starttype (o) endtype (i) + vowel starttype #o endtype #i length 230 - formants vdiph/0i + FMT(vdiph/0i) endphoneme phoneme OU - vowel starttype (o) endtype (u) + vowel starttype #o endtype #u length 230 - formants vdiph/oou + FMT(vdiph/oou) endphoneme phoneme yI - vowel starttype (i) endtype (i) + vowel starttype #i endtype #i length 230 - formants vdiph/yi + FMT(vdiph/yi) endphoneme phoneme f // consider this an affrictive vls blb afr - vowelout f1=0 f2=1000 -500 -350 f3=-200 80 lengthmod 2 - wave ufric/f // could replace this with a [pf] wav file + Vowelout f1=0 f2=1000 -500 -350 f3=-200 80 + WAV(ufric/f) // could replace this with a [pf] wav file endphoneme diff --git a/phsource/ph_hindi b/phsource/ph_hindi index 5255d560..d94a1d4d 100644 --- a/phsource/ph_hindi +++ b/phsource/ph_hindi @@ -9,151 +9,155 @@ phoneme : // Lengthen the previous vowel by "length" endphoneme phoneme @ - vowel starttype (@) endtype (@) + vowel starttype #@ endtype #@ length 130 - formants vowel/@_bck - before H vowel/@_low - reduceto @- 0 + ChangeIfDiminished(@-) + IF nextPh(H) THEN + FMT(vowel/@_low) + ENDIF + FMT(vowel/@_bck) endphoneme phoneme @/ - vowel starttype (@) endtype (@) + vowel starttype #@ endtype #@ length 130 - formants vowel/@_bck + FMT(vowel/@_bck) endphoneme phoneme V - vowel starttype (@) endtype (@) + vowel starttype #@ endtype #@ length 130 - formants vowel/V_3 - before H vowel/@_low - reduceto @ 4 + ChangeIfNotStressed(@) + IF nextPh(H) THEN + FMT(vowel/@_low) + ENDIF + FMT(vowel/V_3) endphoneme phoneme @2 - vowel starttype (@) endtype (@) + vowel starttype #@ endtype #@ length 130 - formants vowel/@_low + FMT(vowel/@_low) endphoneme phoneme @3 - vowel starttype (@) endtype (@) + vowel starttype #@ endtype #@ length 130 - formants vowel/@_3 - reduceto @- 0 + ChangeIfDiminished(@-) + FMT(vowel/@_3) endphoneme phoneme @4 - vowel starttype (@) endtype (@) + vowel starttype #@ endtype #@ length 130 - formants vowel/@ + FMT(vowel/@) endphoneme phoneme i: - vowel long starttype (i) endtype (i) + vowel long starttype #i endtype #i length 230 - formants vowel/i_fnt - linkout ; + IfNextVowelAppend(;) + FMT(vowel/i_fnt) endphoneme phoneme i // as [i:] but not marked as 'long' - vowel starttype (i) endtype (i) + vowel starttype #i endtype #i length 230 - formants vowel/i_6 - linkout ; + IfNextVowelAppend(;) + FMT(vowel/i_6) endphoneme phoneme I - vowel starttype (i) endtype (i) + vowel starttype #i endtype #i length 100 - formants vowel/ii_3 - linkout ; + IfNextVowelAppend(;) + FMT(vowel/ii_3) endphoneme phoneme e: - vowel long starttype (e) endtype (e) + vowel long starttype #e endtype #e length 220 - formants vowel/e_2 + FMT(vowel/e_2) endphoneme phoneme e - vowel starttype (e) endtype (e) + vowel starttype #e endtype #e length 130 - formants vowel/e_2 + FMT(vowel/e_2) endphoneme phoneme E: - vowel long starttype (e) endtype (e) + vowel long starttype #e endtype #e length 220 - formants vdiph/ee-e + FMT(vdiph/ee-e) endphoneme phoneme E - vowel starttype (e) endtype (e) + vowel starttype #e endtype #e length 130 - formants vowel/e_mid + FMT(vowel/e_mid) endphoneme phoneme &: - vowel long starttype (a) endtype (a) + vowel long starttype #a endtype #a length 220 - formants vowel/& + FMT(vowel/&) endphoneme phoneme a: - vowel long starttype (a) endtype (a) + vowel long starttype #a endtype #a length 230 - formants vowel/aa_9 + FMT(vowel/aa_9) endphoneme phoneme a - vowel long starttype (a) endtype (a) + vowel long starttype #a endtype #a length 130 - formants vowel/a#_3 + FMT(vowel/a#_3) endphoneme phoneme o: - vowel long starttype (o) endtype (o) + vowel long starttype #o endtype #o length 220 - formants vowel/o_2 + FMT(vowel/o_2) endphoneme phoneme o - vowel starttype (o) endtype (o) + vowel starttype #o endtype #o length 130 - formants vowel/o + FMT(vowel/o) endphoneme phoneme O: - vowel long starttype (o) endtype (o) + vowel long starttype #o endtype #o length 210 - formants vowel/oo_4 + FMT(vowel/oo_4) endphoneme phoneme O - vowel starttype (o) endtype (o) + vowel starttype #o endtype #o length 130 - formants vowel/0 + FMT(vowel/0) endphoneme phoneme U - vowel starttype (u) endtype (u) + vowel starttype #u endtype #u length 120 - formants vowel/uu_bck + FMT(vowel/uu_bck) endphoneme phoneme u: - vowel long starttype (u) endtype (u) + vowel long starttype #u endtype #u length 230 - formants vowel/u_bck + FMT(vowel/u_bck) endphoneme @@ -161,98 +165,82 @@ endphoneme //============= phoneme i~ - vowel long starttype (i) endtype (i) + vowel long starttype #i endtype #i length 220 - formants vnasal/i_n2 + FMT(vnasal/i_n2) endphoneme phoneme I~ - vowel starttype (i) endtype (i) + vowel long starttype #i endtype #i length 170 - formants vnasal/ii_n + FMT(vnasal/ii_n) endphoneme phoneme e~ - vowel long starttype (e) endtype (e) + vowel long starttype #e endtype #e length 220 - formants vnasal/e_n + FMT(vnasal/e_n) endphoneme -phoneme E~ - vowel long starttype (e) endtype (e) +phoneme E~ + vowel long starttype #e endtype #e length 230 - formants vnasal/ee_n2 + FMT(vnasal/ee_n2) endphoneme phoneme a~ - vowel long starttype (a) endtype (a) + vowel long starttype #a endtype #a length 250 - formants vnasal/aa_n + FMT(vnasal/aa_n) endphoneme phoneme V~ - vowel long starttype (@) endtype (@) + vowel long starttype #@ endtype #@ length 250 - formants vnasal/V_n + FMT(vnasal/V_n) endphoneme phoneme O~ - vowel long starttype (o) endtype (o) + vowel long starttype #o endtype #o length 230 - formants vnasal/oo_n2 + FMT(vnasal/oo_n2) endphoneme phoneme o~ - vowel long starttype (o) endtype (o) + vowel long starttype #o endtype #o length 220 - formants vnasal/o_n -endphoneme - -phoneme u~ - vowel long starttype (u) endtype (u) - length 230 - formants vnasal/u_n + FMT(vnasal/o_n) endphoneme phoneme U~ - vowel starttype (u) endtype (u) + vowel starttype #u endtype #u length 170 - formants vnasal/u_n + FMT(vnasal/u_n) endphoneme - -phoneme r- - vowel starttype (@) endtype (@) - unstressed - length 220 - formants vowelr/r-voc +phoneme u~ + vowel long starttype #u endtype #u + length 230 + FMT(vnasal/u_n) endphoneme -phoneme l- - vowel starttype (@) endtype (@) - unstressed - length 200 - formants vwl_hi/l-voc -endphoneme - - // Diphthongs //=========== phoneme aI - vowel long starttype (@) endtype (i) + vowel long starttype #@ endtype #i length 240 long - formants vdiph/&i + FMT(vdiph/&i) endphoneme phoneme aU - vowel long starttype (a) endtype (u) + vowel long starttype #a endtype #u length 240 long - formants vdiph/aau_3 + FMT(vdiph/aau_3) endphoneme @@ -260,51 +248,14 @@ endphoneme // CONSONANTS //=========== -phoneme l. - liquid rfx - lengthmod 7 - formants l^/l_rfx +phoneme v // approximant, not fricative + import_phoneme base/v# + voicingswitch f endphoneme - - -phoneme v // approximant - vcd lbd frc - vowelin f1=1 f2=900 -300 -300 f3=-100 100 - vowelout f1=1 f2=900 -500 -300 f3=-100 60 len=50 - lengthmod 6 - formants voc/v# - before _ voc/v#_ - switchvoicing f -endphoneme - - - -phoneme h // use with voiced aspirated conants [bh] [dh] etc - vls glt apr - length 100 - lengthmod 3 - wave h/h_%70 // no vowel following - before (@) h/h@+35 - before (a) h/ha+35 - before (e) h/he+35 - before (i) h/hi+35 - before (o) h/ho+35 - before (u) h/hu+35 -endphoneme - phoneme H // use for full "h" - vls glt apr - length 100 - lengthmod 3 - wave h/h_%70 // no vowel following - before (@) h/h@ - before (a) h/ha - before (e) h/he - before (i) h/hi - before (o) h/ho - before (u) h/hu + import_phoneme base/h endphoneme @@ -313,58 +264,32 @@ endphoneme //================== phoneme p - vls blb stop - vowelin f1=1 f2=1000 -50 -100 f3=-200 80 - vowelout f1=1 f2=1000 -500 -350 f3=-300 80 rms=30 - lengthmod 2 - wave ustop/p_unasp - before _ ustop/p_unasp_%80 - before r ustop/pr - before l ustop/pl - switchvoicing b + import_phoneme consonants/p- endphoneme phoneme ph - 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_asp - before _ ustop/p_ - before r ustop/pr - before l ustop/pl - switchvoicing b + import_phoneme consonants/ph endphoneme phoneme b // this is [b] - vcd blb stop - vowelout f1=1 f2=1000 -500 -300 f3=-300 80 brk - formants b/b+x/b - before _ b/b_+x/b - before (a) b/ba+x/b - before (@) b/b@+x/b - before (e) b/be+x/b - before (i) b/bi+x/b - before (o) b/bo+x/b - before (u) b/bu+x/b - before @- b/b@2+x/b - after _ NULL - after @ b/xb - lengthmod 5 - switchvoicing p + import_phoneme base/b endphoneme phoneme bh vcd 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 5 - formants b/xb+ustop/p_asp%70 - after @ b/xb - switchvoicing ph + voicingswitch ph + Vowelin f1=0 f2=1000 -50 -100 f3=-200 80 + Vowelout f1=0 f2=1000 -500 -350 f3=-300 80 rms=30 + + IF PreVoicing THEN + FMT(b/xb) + ENDIF + + FMT( b/xb) addWav(ustop/p_asp, 70) endphoneme @@ -374,51 +299,42 @@ endphoneme //================== phoneme t // dental variant of /t/ - vls dnt stop - vowelin f1=1 f2=1500 -250 250 f3=-100 80 amp=16 - vowelout f1=0 f2=1500 -300 250 f3=-100 80 rms=20 - lengthmod 2 - wave ustop/t_hi%60 - before _ ustop/t_dnt%35 - switchvoicing d + import_phoneme base/t[ + voicingswitch d endphoneme - phoneme th // dental variant of /t/ vls dnt stop - vowelin f1=0 f2=1500 -300 300 f3=-100 80 amp=16 - vowelout f1=0 f2=1500 -300 250 f3=-100 80 rms=20 lengthmod 2 - wave ustop/t_dnt%50 - before _ ustop/t_dnt%35 - switchvoicing d + voicingswitch d + Vowelin f1=0 f2=1500 -300 300 f3=-100 80 amp=16 + Vowelout f1=0 f2=1500 -300 250 f3=-100 80 rms=20 + IF nextPh(isPause2) THEN + WAV(ustop/t_dnt, 35) + ENDIF + WAV(ustop/t_dnt, 50) endphoneme - phoneme d // dental variant of /d/ - vcd dnt stop - vowelin f1=2 f2=1500 -300 300 f3=-150 80 - vowelout f1=2 f2=1500 -300 300 f3=-150 80 - formants d/d+x/d_dnt%110 - before _ d/d_+x/d_ - before r d/dr+x/d_dnt%110 - after _ NULL - after @ d/xd - lengthmod 5 - switchvoicing t + import_phoneme base/d[ + voicingswitch t endphoneme phoneme dh vcd dnt stop - vowelin f1=0 f2=1500 -300 300 f3=-100 80 - vowelout f1=0 f2=1500 -300 250 f3=-100 80 rms=20 lengthmod 5 - formants d/xd3+ustop/t_dnt%40 - after @ d/xd - switchvoicing th + voicingswitch th + Vowelin f1=0 f2=1500 -300 300 f3=-100 80 + Vowelout f1=0 f2=1500 -300 250 f3=-100 80 rms=20 + + IF PreVoicing THEN + FMT(d/xd) + ENDIF + + FMT(d/xd3) addWav(ustop/t_dnt, 40) endphoneme @@ -429,46 +345,55 @@ endphoneme phoneme t. vls rfx stop - vowelin f1=0 f2=1800 -300 300 f3=-400 80 - vowelout f1=0 f2=1800 -300 250 f3=-400 80 rms=20 colr=2 lengthmod 2 - wave ustop/t_short - before _ ustop/t_ - switchvoicing d. + voicingswitch d. + Vowelin f1=0 f2=1800 -300 300 f3=-400 80 + Vowelout f1=0 f2=1800 -300 250 f3=-400 80 rms=20 colr=2 + WAV(ustop/t_short) endphoneme phoneme th. vls rfx stop - vowelin f1=0 f2=1800 -300 300 f3=-400 80 - vowelout f1=0 f2=1800 -300 250 f3=-400 80 rms=20 colr=2 lengthmod 2 - wave ustop/t -// wave ustop/th_rfx - switchvoicing dh. + voicingswitch dh. + Vowelin f1=0 f2=1800 -300 300 f3=-400 80 + Vowelout f1=0 f2=1800 -300 250 f3=-400 80 rms=20 colr=2 +// WAV(ustop/th_rfx) + WAV(ustop/t) endphoneme phoneme d. vcd rfx stop - vowelin f1=1 f2=1800 -300 300 f3=-400 80 - vowelout f1=1 f2=1800 -300 300 f3=-400 80 colr=2 - formants d/d+x/d - before _ d/d_+x/d_ - before r d/dr+x/d - after _ NULL - after @ d/xd lengthmod 5 - switchvoicing t. + voicingswitch t. + Vowelin f1=1 f2=1800 -300 300 f3=-400 80 + Vowelout f1=1 f2=1800 -300 300 f3=-400 80 colr=2 + + IF PreVoicing THEN + FMT(d/xd) + ENDIF + + IF nextPh(isPause2) THEN + FMT(d/d_) addWav(x/d_) + ENDIF + + FMT(d/dr) addWav(x/d) endphoneme + phoneme dh. vcd rfx stop - vowelin f1=1 f2=1800 -300 300 f3=-400 80 - vowelout f1=1 f2=1800 -300 300 f3=-400 80 colr=2 - formants d/xd+x/d+ustop/t -// formants d/xd+x/d+ustop/th_rfx - after @ d/xd lengthmod 5 - switchvoicing th. + voicingswitch th. + Vowelin f1=1 f2=1800 -300 300 f3=-400 80 + Vowelout f1=1 f2=1800 -300 300 f3=-400 80 colr=2 + + IF PreVoicing THEN + FMT(d/xd) + ENDIF + + FMT(d/dr) addWav(ustop/t) +// FMT(d/dr) addWav(ustop/th_rfx) endphoneme @@ -479,48 +404,33 @@ endphoneme // also try [tS] and [dZ] -phoneme c // this is [ts;] - vls pal afr sibilant - vowelin f1=0 f2=2700 400 600 f3=300 80 rate len=70 - vowelout f1=0 f2=2700 400 600 f3=300 80 colr=1 - lengthmod 2 - wave ustop/ts_pzd2%90 - before _ ustop/ts_pzd_ - switchvoicing J +phoneme c + import_phoneme base/c endphoneme -phoneme ch // this is [ts;] - vls pal afr sibilant - vowelin f1=0 f2=2700 400 600 f3=300 80 rate len=70 - vowelout f1=0 f2=2700 400 600 f3=300 80 colr=1 - lengthmod 2 - wave ustop/ts_pzd - before _ ustop/ts_pzd - switchvoicing J +phoneme ch + import_phoneme base/tS; endphoneme -phoneme J // this is [dz;] - vcd pla afr sibilant - vowelin f1=1 f2=2700 400 600 f3=300 80 rate len=70 - vowelout f1=2 f2=2700 400 600 f3=300 80 colr=1 - formants dzh/dzh+x/dz_pzd - before _ dzh/dzh_+x/dzh_ - after _ NULL @ dzh/xdzh - lengthmod 5 - switchvoicing c +phoneme J + import_phoneme base/J endphoneme phoneme Jh vcd pal afr sibilant - vowelin f1=0 f2=2700 400 600 f3=300 80 rate len=70 - vowelout f1=0 f2=2700 400 600 f3=300 80 colr=1 lengthmod 5 - formants dzh/xdz_pzd+ustop/ts_pzd - after @ dzh/xdz_pzd - switchvoicing ch + voicingswitch ch + Vowelin f1=0 f2=2700 400 600 f3=300 80 rate len=70 + Vowelout f1=0 f2=2700 400 600 f3=300 80 colr=1 + + IF PreVoicing THEN + FMT(dzh/xdz_pzd) + ENDIF + + FMT(dzh/xdz_pzd) addWav(ustop/ts_pzd) endphoneme @@ -532,48 +442,34 @@ endphoneme phoneme k - vls vel stop - vowelin f1=0 f2=2300 200 300 f3=-150 80 - vowelout f1=0 f2=2300 300 400 f3=-150 80 rms=20 - lengthmod 2 - wave ustop/k_unasp%60 // weaker - before _ ustop/k_unasp%50 - switchvoicing g + import_phoneme consonants/k- + voicingswitch g endphoneme phoneme kh - vls vel stop - vowelin f1=0 f2=2300 200 300 f3=-150 80 - vowelout f1=0 f2=2300 300 400 f3=-150 80 rms=20 - lengthmod 2 - wave ustop/k_asp%90 - before _ ustop/k_asp%50 - before r ustop/kr - before l ustop/kl - switchvoicing g + import_phoneme consonants/kh + voicingswitch gh endphoneme phoneme g - vcd vel stop - vowelin f1=1 f2=2300 200 300 f3=-300 80 - vowelout f1=1 f2=2300 250 300 f3=-300 80 brk - formants g/g+x/g2 - before _ g/g_+x/g2_ - after _ NULL - after @ g2/xg - lengthmod 5 + import_phoneme base/g + voicingswitch k endphoneme phoneme gh vcd dnt stop - vowelin f1=1 f2=2300 200 300 f3=-150 80 rms=20 - vowelout f1=0 f2=2300 300 400 f3=-150 80 rms=20 lengthmod 5 - formants g2/xg+ustop/k_asp%70 - after @ g2/xg - switchvoicing kh + voicingswitch kh + Vowelin f1=1 f2=2300 200 300 f3=-150 80 rms=20 + Vowelout f1=0 f2=2300 300 400 f3=-150 80 rms=20 + + IF PreVoicing THEN + FMT(g2/xg) + ENDIF + + FMT(g2/xg) addWav(ustop/k_asp, 70) endphoneme diff --git a/phsource/ph_hungarian b/phsource/ph_hungarian index b4ed8d6f..dab87b2b 100644 --- a/phsource/ph_hungarian +++ b/phsource/ph_hungarian @@ -2,99 +2,91 @@ // Short vowels phoneme A - vowel starttype (o) endtype (o) + vowel starttype #o endtype #o length 140 - formants vowel/0_3 + FMT(vowel/0_3) endphoneme phoneme E - vowel starttype (e) endtype (e) + vowel starttype #e endtype #e length 140 - formants vowel/e_mid + FMT(vowel/e_mid) endphoneme phoneme i - vowel starttype (i) endtype (i) + vowel starttype #i endtype #i length 140 - formants vowel/i_4 - linkout ; + IfNextVowelAppend(;) + FMT(vowel/i_4) endphoneme phoneme o - vowel starttype (o) endtype (o) + vowel starttype #o endtype #o length 130 - formants vowel/o_mid + FMT(vowel/o_mid) endphoneme phoneme u - vowel starttype (u) endtype (u) + vowel starttype #u endtype #u length 130 - formants vowel/uu_bck + FMT(vowel/uu_bck) endphoneme phoneme Y - vowel starttype (@) endtype (@) + vowel starttype #@ endtype #@ length 130 - formants vowel/y#_2 + FMT(vowel/y#_2) endphoneme phoneme y - vowel starttype (u) endtype (u) + vowel starttype #u endtype #u length 130 - formants vowel/yy_4 + FMT(vowel/yy_4) endphoneme // Long Vowels phoneme i: - vowel starttype (i) endtype (i) - long + vowel starttype #i endtype #i length 220 - formants vowel/i -// linkout ; + FMT(vowel/i) endphoneme phoneme e: - vowel starttype (e) endtype (e) - long + vowel starttype #e endtype #e length 240 - formants vowel/e_3 + FMT(vowel/e_3) endphoneme phoneme a: - vowel starttype (a) endtype (a) - long + vowel starttype #a endtype #a length 270 - formants vowel/a + FMT(vowel/a) endphoneme phoneme o: - vowel starttype (o) endtype (o) - long + vowel starttype #o endtype #o length 260 - formants vowel/o_2 + FMT(vowel/o_2) endphoneme phoneme u: - vowel starttype (u) endtype (u) - long + vowel starttype #u endtype #u length 240 - formants vowel/u_bck + FMT(vowel/u_bck) endphoneme phoneme y: - vowel starttype (u) endtype (u) - long + vowel starttype #u endtype #u length 240 - formants vowel/y + FMT(vowel/y) endphoneme phoneme Y: - vowel starttype (@) endtype (@) - long + vowel starttype #@ endtype #@ length 260 - formants vowel/y# + FMT(vowel/y#) endphoneme @@ -105,102 +97,85 @@ endphoneme phoneme ts vls alv afr sibilant - vowelin f1=0 f2=1700 -300 300 f3=-100 80 - vowelout f1=0 f2=1700 -300 250 f3=-100 80 rms=20 lengthmod 2 - wave ustop/ts // don't use ustop/ts_ (before non-vowel) + Vowelin f1=0 f2=1700 -300 300 f3=-100 80 + Vowelout f1=0 f2=1700 -300 250 f3=-100 80 rms=20 + WAV(ustop/ts) // don't use ustop/ts_ (before non-vowel) endphoneme phoneme t // dental variant of /t/ vls dnt stop - vowelin f1=0 f2=1600 -300 300 f3=-100 80 - vowelout f1=0 f2=1600 -300 250 f3=-100 80 rms=20 lengthmod 2 - wave ustop/t_dnt%50 - before _ ustop/t_dnt%45 - switchvoicing d + voicingswitch d + Vowelin f1=0 f2=1600 -300 300 f3=-100 80 + Vowelout f1=0 f2=1600 -300 250 f3=-100 80 rms=20 + IF nextPh(isPause2) THEN + WAV(ustop/t_dnt, 45) + ENDIF + WAV(ustop/t_dnt, 50) endphoneme phoneme d // dental variant of /d/ - vcd dnt stop - vowelin f1=2 f2=1500 -300 300 f3=-150 80 - vowelout f1=2 f2=1500 -300 300 f3=-150 80 - formants d/d+x/d_dnt%110 - before _ d/d_+x/d_dnt%100 - before r d/dr+x/d_dnt%110 - after _ NULL - after @ d/xd - lengthmod 5 - switchvoicing t + import_phoneme base/d[ + voicingswitch t endphoneme phoneme c - vls pal afr sibilant - vowelin f1=0 f2=2700 400 600 f3=300 80 rate len=70 - vowelout f1=0 f2=2700 400 600 f3=300 80 colr=1 - lengthmod 2 - wave ustop/ts_pzd2%70 - before _ ustop/ts_pzd_ - switchvoicing J + import_phoneme consonants/c2 + voicingswitch J endphoneme - - phoneme p // unaspirated - 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 - before _ ustop/p_unasp_%80 - before r ustop/pr - before l ustop/pl - switchvoicing b + import_phoneme consonants/p- + voicingswitch b endphoneme - phoneme k // unsapirated - 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%70 // weaker - before _ ustop/k_ - before r ustop/kr - before l ustop/kl - before (i) ustop/ki - switchvoicing g + import_phoneme consonants/k- + voicingswitch g endphoneme - phoneme s2 // second part of geminated [s:] - vls alv frc sibilant - vowelin f1=0 f2=1700 -300 300 f3=-100 80 - vowelout f1=0 f2=1700 -300 250 f3=-100 80 rms=20 - lengthmod 3 - wave ufric/s_continue - before _ ufric/s_ - before p ufric/s! - before t ufric/s! - before k ufric/s! - switchvoicing z + import_phoneme consonants/s2 endphoneme + phoneme l liquid - length 100 lengthmod 7 - beforenotvowel l/ - formants l/l - after _ l/_l - after t l/tl -// after l/ l/l_long // double l, make it longer + + IF nextPh(isNotVowel) THEN + ChangePhoneme(l/) + ENDIF + + CALL vowelstart_l + + IF prevPh(#@) THEN + VowelEnding(l/xl, -50) + ELIF prevPh(isVowel) THEN + VowelEnding(l/xl, -40) + ENDIF + + IF prevPh(isPause) THEN + FMT(l/_l) + ENDIF + + IF prevPh(t) THEN + FMT(l/tl) + ENDIF + +// IF prevPh(l/) THEN +// FMT(l/l_long) // double l, make it longer +// ENDIF + + FMT(l/l) endphoneme + diff --git a/phsource/ph_icelandic b/phsource/ph_icelandic index 9e7c8d49..31076b5e 100644 --- a/phsource/ph_icelandic +++ b/phsource/ph_icelandic @@ -14,126 +14,126 @@ endphoneme //======= phoneme i - vowel starttype (i) endtype (i) + vowel starttype #i endtype #i length 130 - formants vowel/i_4 - linkout ; + IfNextVowelAppend(;) + FMT(vowel/i_4) endphoneme phoneme I - vowel starttype (i) endtype (i) + vowel starttype #i endtype #i length 130 - formants vowel/ii - linkout ; + IfNextVowelAppend(;) + FMT(vowel/ii) endphoneme phoneme e - vowel starttype (e) endtype (e) + vowel starttype #e endtype #e length 130 - formants vowel/e_e - reduceto E 4 + ChangeIfNotStressed(E) + FMT(vowel/e_e) endphoneme phoneme E - vowel starttype (e) endtype (e) + vowel starttype #e endtype #e length 130 - formants vowel/e_mid + FMT(vowel/e_mid) endphoneme phoneme a - vowel starttype (a) endtype (a) + vowel starttype #a endtype #a length 130 - formants vowel/a_3 - reduceto & 4 + ChangeIfNotStressed(&) + FMT(vowel/a_3) endphoneme phoneme & - vowel starttype (@) endtype (@) + vowel starttype #@ endtype #@ length 130 - formants vowel/a#_2 + FMT(vowel/a#_2) endphoneme phoneme o - vowel starttype (o) endtype (o) + vowel starttype #o endtype #o length 130 - formants vdiph2/o_oo - reduceto O 4 + ChangeIfNotStressed(O) + FMT(vdiph2/o_oo) endphoneme phoneme O - vowel starttype (o) endtype (o) + vowel starttype #o endtype #o length 130 - formants vowel/oo_5 + FMT(vowel/oo_5) endphoneme phoneme u - vowel starttype (u) endtype (u) + vowel starttype #u endtype #u length 130 - formants vowel/u_bck + FMT(vowel/u_bck) endphoneme phoneme y - vowel starttype (i) endtype (i) + vowel starttype #i endtype #i length 130 - formants vowel/yy_4 + FMT(vowel/yy_4) endphoneme phoneme y# - vowel starttype (@) endtype (@) + vowel starttype #@ endtype #@ length 130 - formants vowel/y## + FMT(vowel/y##) endphoneme phoneme W - vowel starttype (@) endtype (@) + vowel starttype #@ endtype #@ length 130 - formants vowel/y#_3 + FMT(vowel/y#_3) endphoneme phoneme aI - vowel starttype (a) endtype (i) + vowel starttype #a endtype #i length 170 - formants vdiph/ai_7 + FMT(vdiph/ai_7) endphoneme phoneme eI - vowel starttype (e) endtype (i) + vowel starttype #e endtype #i length 170 - formants vdiph/ei + FMT(vdiph/ei) endphoneme phoneme aU - vowel starttype (a) endtype (u) + vowel starttype #a endtype #u length 170 - formants vdiph/au_4 + FMT(vdiph/au_4) endphoneme phoneme oU - vowel starttype (o) endtype (u) + vowel starttype #o endtype #u length 170 - formants vdiph/ou_3 + FMT(vdiph/ou_3) endphoneme phoneme oU2 // long version for óf - vowel starttype (o) endtype (u) + vowel starttype #o endtype #u length 230 - formants vdiph/ou_3 + FMT(vdiph/ou_3) endphoneme phoneme Yy - vowel starttype (@) endtype (i) + vowel starttype #@ endtype #i length 150 - formants vdiph/y#i_2 + FMT(vdiph/y#i_2) endphoneme @@ -143,135 +143,121 @@ endphoneme phoneme m# vcd blb nasal -// starttype m endtype m - vowelout f1=2 f2=1000 -500 -350 f3=-200 80 brk - length 100 lengthmod 6 - formants NULL - before _ m/m#_ + Vowelout f1=2 f2=1000 -500 -350 f3=-200 80 brk + FMT(m/m#_) endphoneme phoneme n# vcd alv nasal - starttype n endtype n - vowelout f1=2 f2=1700 -300 250 f3=-100 80 rms=20 brk - length 100 lengthmod 6 - formants NULL - before _ n/n#_ + Vowelout f1=2 f2=1700 -300 250 f3=-100 80 rms=20 brk + + NextVowelStarts + VowelStart(n/n@) + VowelStart(n/na) + VowelStart(n/ne) + VowelStart(n/ni) + VowelStart(n/no) + VowelStart(n/nu) + EndSwitch + + FMT(n/n#_) endphoneme phoneme n^# vcd pal nasal palatal - vowelout f1=3 f2=2300 300 400 f3=100 80 brk rate - length 100 lengthmod 6 - formants NULL - before _ n^/n^#_ + Vowelout f1=3 f2=2300 300 400 f3=100 80 brk rate + FMT(n^/n^#_) endphoneme phoneme N# vcd vel nasal - starttype N endtype N - vowelout f1=3 f2=2300 300 400 f3=-200 80 len=40 rms=20 brk - length 100 - formants NULL - before _ nn/nn#_ - lengthmod 6 // longer than 'n' + lengthmod 6 + Vowelout f1=3 f2=2300 300 400 f3=-200 80 len=40 rms=20 brk + + NextVowelStarts + VowelStart(nn/nn@) + VowelStart(nn/nna) + VowelStart(nn/nne) + VowelStart(nn/nni) + VowelStart(nn/nno) + VowelStart(nn/nnu) + EndSwitch + + FMT(nn/nn#_) endphoneme phoneme l# vls alv frc - length 100 lengthmod 3 - wave ufric/ll%25 + WAV(ufric/ll, 25) endphoneme phoneme tl# vls alv stop - vowelin f1=0 f2=1700 -300 300 f3=-100 80 - vowelout f1=0 f2=1700 -300 250 f3=-100 80 rms=20 lengthmod 2 - wave ufric/tl#%50 + Vowelin f1=0 f2=1700 -300 300 f3=-100 80 + Vowelout f1=0 f2=1700 -300 250 f3=-100 80 rms=20 + WAV(ufric/tl#, 50) endphoneme phoneme r# // used for [r] when not preceding a vowel liquid - length 100 lengthmod 2 // - formants r3/r#_+r3/rx + FMT(r3/r#_) addWav(r3/rx) // before n r3/r_n+r3/rx endphoneme -phoneme c - vls vel stop - vowelin f1=0 f2=2700 200 400 f3=300 80 rate len=60 - vowelout f1=0 f2=2700 300 400 f3=300 80 rms=20 - lengthmod 2 - wave ustop/ki - switchvoicing g -endphoneme - - phoneme b vls blb stop - vowelin f1=1 f2=1000 -300 -200 f3=-200 80 amp=11 - vowelout f1=2 f2=1000 -300 -300 f3=-300 80 brk lengthmod 5 - wave x/b -// before _ x/b_ + Vowelin f1=1 f2=1000 -300 -200 f3=-200 80 amp=11 + Vowelout f1=2 f2=1000 -300 -300 f3=-300 80 brk + WAV(x/b) endphoneme phoneme d vls alv stop - vowelin f1=2 f2=1700 -300 300 f3=-100 80 - vowelout f1=2 f2=1700 -300 300 f3=-100 80 lengthmod 5 - wave x/d%80 - before _ x/d_ + Vowelin f1=2 f2=1700 -300 300 f3=-100 80 + Vowelout f1=2 f2=1700 -300 300 f3=-100 80 + IF nextPh(isPause2) THEN + WAV(x/d_) + ENDIF + WAV(x/d, 80) endphoneme + phoneme g vls vel stop - vowelin f1=2 f2=2300 200 300 f3=-300 80 - vowelout f1=2 f2=2300 250 300 f3=-300 80 brk lengthmod 5 - wave x/g2%150 - before _ x/g_ + Vowelin f1=2 f2=2300 200 300 f3=-300 80 + Vowelout f1=2 f2=2300 250 300 f3=-300 80 brk + IF nextPh(isPause2) THEN + WAV(x/g_) + ENDIF + WAV(x/g2, 150) endphoneme - phoneme v // no fricative noise - vcd lbd frc - vowelin f1=1 f2=900 -300 -300 f3=-100 100 - vowelout f1=1 f2=900 -500 -300 f3=-100 60 len=50 - lengthmod 6 - formants voc/v - before _ voc/v_ - switchvoicing f + import_phoneme base/v# + voicingswitch f endphoneme phoneme s2 // 2nd part of geminated s - vls alv frc sibilant - vowelin f1=0 f2=1700 -300 300 f3=-100 80 - vowelout f1=0 f2=1700 -300 250 f3=-100 80 rms=20 - lengthmod 3 - wave ufric/s_continue - before _ ufric/s_ - before p ufric/s! - before t ufric/s! - before k ufric/s! - switchvoicing z + import_phoneme consonants/s2 endphoneme diff --git a/phsource/ph_indonesian b/phsource/ph_indonesian index 657dfc9e..38dee3a6 100644 --- a/phsource/ph_indonesian +++ b/phsource/ph_indonesian @@ -1,106 +1,99 @@ phoneme @ - vowel starttype (@) endtype (@) - length 140 - formants vowel/@_low + vowel starttype #@ endtype #@ unstressed + length 140 + FMT(vowel/@_low) endphoneme phoneme a - vowel starttype (a) endtype (a) + vowel starttype #a endtype #a length 180 - formants vowel/a - reduceto a/ 1 + ChangeIfUnstressed(a/) + FMT(vowel/a) endphoneme phoneme E - vowel starttype (e) endtype (e) + vowel starttype #e endtype #e length 180 - formants vowel/e_mid - reduceto @ 1 + ChangeIfUnstressed(@) + FMT(vowel/e_mid) endphoneme phoneme E2 // as [E] but don't reduce to [@] - vowel starttype (e) endtype (e) + vowel starttype #e endtype #e length 180 - formants vowel/e_mid + FMT(vowel/e_mid) endphoneme phoneme e - vowel starttype (e) endtype (e) + vowel starttype #e endtype #e length 180 - formants vowel/e + FMT(vowel/e) endphoneme phoneme i - vowel starttype (i) endtype (i) + vowel starttype #i endtype #i length 180 - formants vowel/i_6 - linkout ; + IfNextVowelAppend(;) + FMT(vowel/i_6) endphoneme phoneme O - vowel starttype (o) endtype (o) + vowel starttype #o endtype #o length 180 - formants vowel/oo + FMT(vowel/oo) endphoneme phoneme o - vowel starttype (o) endtype (o) + vowel starttype #o endtype #o length 180 - formants vowel/o + FMT(vowel/o) endphoneme phoneme u - vowel starttype (u) endtype (u) + vowel starttype #u endtype #u length 180 - formants vowel/u + FMT(vowel/u) endphoneme phoneme aI - vowel starttype (a) endtype (i) + vowel starttype #a endtype #i length 240 - formants vdiph/ai + FMT(vdiph/ai) endphoneme phoneme eI - vowel starttype (e) endtype (i) + vowel starttype #e endtype #i length 240 - formants vdiph/eei_2 + FMT(vdiph/eei_2) endphoneme phoneme aU - vowel starttype (a) endtype (u) + vowel starttype #a endtype #u length 240 - formants vdiph/au_4 + FMT(vdiph/au_4) endphoneme phoneme @U - vowel starttype (@) endtype (u) + vowel starttype #@ endtype #u length 240 - formants vdiph/@u_en + FMT(vdiph/@u_en) endphoneme phoneme d // English [d] - vcd alv stop - vowelin f1=1 f2=1700 -300 300 f3=-100 80 - vowelout f1=2 f2=1700 -300 300 f3=-100 80 - formants d/d+x/d - before _ d/d_+x/d_ - before r d/dr+x/d - after _ NULL - after @ d/xd - lengthmod 5 - switchvoicing t + import_phoneme base/d + voicingswitch t endphoneme + diff --git a/phsource/ph_italian b/phsource/ph_italian index ecf224bc..6a6b6dcc 100644 --- a/phsource/ph_italian +++ b/phsource/ph_italian @@ -10,115 +10,115 @@ endphoneme phoneme a - vowel starttype (a) endtype (a) + vowel starttype #a endtype #a length 180 - formants vowel/a - reduceto a/ 4 + ChangeIfNotStressed(a/) + FMT(vowel/a) endphoneme phoneme a/ - vowel starttype (@) endtype (@) + vowel starttype #@ endtype #@ length 180 - formants vowel/a_5 + FMT(vowel/a_5) endphoneme phoneme e - vowel starttype (e) endtype (e) + vowel starttype #e endtype #e length 170 - formants vowel/e_2 - reduceto e/ 4 + ChangeIfNotStressed(e/) + FMT(vowel/e_2) endphoneme phoneme e/ - vowel starttype (e) endtype (e) + vowel starttype #e endtype #e length 170 - formants vowel/e + FMT(vowel/e) endphoneme phoneme E - vowel starttype (e) endtype (e) + vowel starttype #e endtype #e length 170 - formants vowel/e_mid - reduceto e/ 3 // [E] only in stressed syllables ? + ChangeIfUnstressed(e/) // [E] only in stressed syllables ? + FMT(vowel/e_mid) endphoneme phoneme i - vowel starttype (i) endtype (i) + vowel starttype #i endtype #i length 140 - formants vowel/i - linkout ; + IfNextVowelAppend(;) + FMT(vowel/i) endphoneme phoneme I - vowel starttype (i) endtype (i) + vowel starttype #i endtype #i length 150 - formants vowel/i_4 - linkout ; + IfNextVowelAppend(;) + FMT(vowel/i_4) endphoneme phoneme o - vowel starttype (o) endtype (o) + vowel starttype #o endtype #o length 170 - formants vowel/o - reduceto o/ 4 + ChangeIfNotStressed(o/) + FMT(vowel/o) endphoneme phoneme o/ - vowel starttype (o) endtype (o) + vowel starttype #o endtype #o length 170 - formants vowel/o + FMT(vowel/o) endphoneme phoneme O - vowel starttype (o) endtype (o) + vowel starttype #o endtype #o length 170 - formants vowel/oo_4 - reduceto o/ 3 // [O] only in stressed syllables ? + ChangeIfUnstressed(o/) // [O] only in stressed syllables ? + FMT(vowel/oo_4) endphoneme phoneme u - vowel starttype (u) endtype (u) + vowel starttype #u endtype #u length 160 - formants vowel/u_bck - reduceto U 4 + ChangeIfNotStressed(U) + FMT(vowel/u_bck) endphoneme phoneme U - vowel starttype (u) endtype (u) + vowel starttype #u endtype #u length 160 - formants vowel/u_bck + FMT(vowel/u_bck) endphoneme phoneme aU - vowel starttype (a) endtype (u) + vowel starttype #a endtype #u length 270 - formants vdiph/au_4 + FMT(vdiph/au_4) endphoneme phoneme aI - vowel starttype (a) endtype (i) + vowel starttype #a endtype #i length 250 - formants vdiph/ai + FMT(vdiph/ai) endphoneme phoneme oI - vowel starttype (o) endtype (i) + vowel starttype #o endtype #i length 230 - formants vdiph/oi + FMT(vdiph/oi) endphoneme @@ -126,3 +126,7 @@ endphoneme // CONSONANTS //=========== +phoneme l^ + import_phoneme base/l^ + Length 140 +endphoneme diff --git a/phsource/ph_kinyarwanda b/phsource/ph_kinyarwanda index 642aeda3..dd3248d6 100644 --- a/phsource/ph_kinyarwanda +++ b/phsource/ph_kinyarwanda @@ -2,99 +2,161 @@ //****************************** // Phonemes for Kinyarwanda (rw), inherits "base2" //****************************** - + phoneme a - vowel starttype (a) endtype (a) + vowel starttype #a endtype #a length 180 - formants vowel/a_2 - reduceto a/ 4 - beforepause a# - beforevowel NULL + + IF nextPh(isVowel) THEN + ChangePhoneme(NULL) + ENDIF + + IF nextPh(isPause) THEN + ChangePhoneme(a#) + ENDIF + + ChangeIfNotStressed(a/) + FMT(vowel/a_2) endphoneme phoneme a/ - vowel starttype (@) endtype (@) + vowel starttype #@ endtype #@ length 180 - formants vowel/a# - beforepause a# - beforevowel NULL + + IF nextPh(isVowel) THEN + ChangePhoneme(NULL) + ENDIF + + IF nextPh(isPause) THEN + ChangePhoneme(a#) + ENDIF + + FMT(vowel/a#) endphoneme phoneme e - vowel starttype (e) endtype (e) + vowel starttype #e endtype #e length 170 - formants vowel/e - beforepause e# - beforevowel NULL + + IF nextPh(isVowel) THEN + ChangePhoneme(NULL) + ENDIF + + IF nextPh(isPause) THEN + ChangePhoneme(e#) + ENDIF + + FMT(vowel/e) endphoneme phoneme i - vowel starttype (i) endtype (i) + vowel starttype #i endtype #i length 150 - formants vowel/i - beforepause i# - beforevowel NULL + + IF nextPh(isVowel) THEN + ChangePhoneme(NULL) + ENDIF + + IF nextPh(isPause) THEN + ChangePhoneme(i#) + ENDIF + + FMT(vowel/i) endphoneme phoneme o - vowel starttype (o) endtype (o) + vowel starttype #o endtype #o length 170 - formants vowel/o - beforepause o# - beforevowel NULL + + IF nextPh(isVowel) THEN + ChangePhoneme(NULL) + ENDIF + + IF nextPh(isPause) THEN + ChangePhoneme(o#) + ENDIF + + FMT(vowel/o) endphoneme phoneme u - vowel starttype (u) endtype (u) + vowel starttype #u endtype #u length 160 - formants vowel/u_bck - beforepause u# - beforevowel NULL + + IF nextPh(isVowel) THEN + ChangePhoneme(NULL) + ENDIF + + IF nextPh(isPause) THEN + ChangePhoneme(u#) + ENDIF + + FMT(vowel/u_bck) endphoneme phoneme a# - vowel starttype (@) endtype (@) + vowel starttype #@ endtype #@ length 100 - formants vowel/a# - beforevowel NULL + + IF nextPh(isVowel) THEN + ChangePhoneme(NULL) + ENDIF + + FMT(vowel/a#) endphoneme + phoneme e# - vowel starttype (e) endtype (e) + vowel starttype #e endtype #e length 100 - formants vowel/e - beforevowel NULL + + IF nextPh(isVowel) THEN + ChangePhoneme(NULL) + ENDIF + + FMT(vowel/e) endphoneme phoneme i# - vowel starttype (i) endtype (i) + vowel starttype #i endtype #i length 100 - formants vowel/i - linkout ; - beforevowel NULL + + IF nextPh(isVowel) THEN + ChangePhoneme(NULL) + ENDIF + + FMT(vowel/i) endphoneme phoneme o# - vowel starttype (o) endtype (o) - length 170 - formants vowel/o - beforevowel NULL + vowel starttype #o endtype #o + length 100 + + IF nextPh(isVowel) THEN + ChangePhoneme(NULL) + ENDIF + + FMT(vowel/o) endphoneme phoneme u# - vowel starttype (u) endtype (u) + vowel starttype #u endtype #u length 100 - formants vowel/u_bck - beforevowel NULL + + IF nextPh(isVowel) THEN + ChangePhoneme(NULL) + ENDIF + + FMT(vowel/u_bck) endphoneme @@ -103,13 +165,14 @@ phoneme : // Lengthen previous vowel by "length" length 120 endphoneme + phoneme + // high tone, use after a vowel stress - tone 0 30 envelope/p_fall NULL + Tone(0, 30, envelope/p_fall, NULL) endphoneme phoneme +2 // high tone, use after a vowel stress - tone 0 30 envelope/i_risefall2 NULL + Tone(0, 30, envelope/i_risefall2, NULL) endphoneme diff --git a/phsource/ph_korean b/phsource/ph_korean deleted file mode 100644 index 26b5b05b..00000000 --- a/phsource/ph_korean +++ /dev/null @@ -1,129 +0,0 @@ - - -phoneme a - vowel starttype (a) endtype (a) - length 190 - formants vowel/a -endphoneme - -phoneme E - vowel starttype (e) endtype (e) - length 180 - formants vowel/e_mid2 -endphoneme - -phoneme e - vowel starttype (e) endtype (e) - length 180 - formants vowel/e -endphoneme - -phoneme i - vowel starttype (i) endtype (i) - length 160 - formants vowel/i -endphoneme - -phoneme o - vowel starttype (o) endtype (o) - length 180 - formants vowel/o_2 -endphoneme - -phoneme V - vowel starttype (a) endtype (a) - length 180 - formants vowel/aa_8 -endphoneme - -phoneme Y - vowel starttype (@) endtype (@) - length 180 - formants vowel/y# -endphoneme - -phoneme u - vowel starttype (u) endtype (u) - length 180 - formants vowel/u_bck -endphoneme - -phoneme y - vowel starttype (i) endtype (u) - length 180 - formants vdiph2/uw_6 -endphoneme - -phoneme u- - vowel starttype (u) endtype (u) - length 180 - formants vowel/u_unr -endphoneme - - -phoneme ji - vowel starttype (i) endtype (i) - length 220 - formants vdiph/yi_fr -endphoneme - - -phoneme p` - vls blb stop - vowelin f1=0 f2=1000 -50 -100 f3=-200 80 amp=31 - vowelout f1=0 f2=1000 -500 -350 f3=-300 80 rms=30 - lengthmod 2 - wave ustop/p_unasp%130 -endphoneme - - -phoneme t` // dental variant of /t/ - vls dnt stop - vowelin f1=0 f2=1600 -300 300 f3=-100 80 amp=31 - vowelout f1=0 f2=1600 -300 250 f3=-100 80 rms=20 - lengthmod 2 - wave ustop/t_dnt - switchvoicing d -endphoneme - -phoneme c` - vls pal afr sibilant palatal - vowelin f1=0 f2=2700 400 600 f3=300 80 rate len=70 amp=31 - lengthmod 2 - wave ustop/ts_pzd2%120 - switchvoicing dZ; -endphoneme - - -phoneme k` - vls vel stop - vowelin f1=0 f2=2300 200 400 f3=-100 80 amp=31 - vowelout f1=0 f2=2300 300 400 f3=-100 80 rms=20 - lengthmod 2 - wave ustop/k_unasp%130 -endphoneme - - -phoneme s` - vls alv frc sibilant - vowelin f1=0 f2=1700 -300 300 f3=-100 80 amp=31 - vowelout f1=0 f2=1700 -300 250 f3=-100 80 rms=20 - lengthmod 3 - wave ufric/s%120 - before j ufric/sh_pzd%120 - before i ufric/sh_pzd%120 -endphoneme - - -phoneme r // flap [**] - liquid alv - beforenotvowel l - vowelout f1=3 f2=1600 -300 300 f3=-300 80 rms=35 len=15 - vowelin f1=2 f2=1600 -300 300 f3=-100 80 len=20 - formants r3/@tap - after (e) r3/@tap2 - after (i) r3/@tap2 - lengthmod 3 -endphoneme - - diff --git a/phsource/ph_kurdish b/phsource/ph_kurdish index 60bef0ea..e619f255 100644 --- a/phsource/ph_kurdish +++ b/phsource/ph_kurdish @@ -1,138 +1,139 @@ phoneme i - vowel starttype (i) endtype (i) + vowel starttype #i endtype #i length 190 - formants vowel/i_6 + FMT(vowel/i_6) endphoneme phoneme I - vowel starttype (@) endtype (@) + vowel starttype #@ endtype #@ length 110 - formants vowel/ii# - before j vowel/ii + IF nextPh(j) THEN + FMT(vowel/ii) + ENDIF + FMT(vowel/ii#) endphoneme phoneme e - vowel starttype (e) endtype (e) + vowel starttype #e endtype #e length 220 - formants vowel/e_3 + FMT(vowel/e_3) endphoneme phoneme E - vowel starttype (a) endtype (a) + vowel starttype #a endtype #a length 150 - formants vowel/ee_6 + FMT(vowel/ee_6) endphoneme phoneme E# - vowel starttype (e) endtype (e) + vowel starttype #e endtype #e length 140 - formants vowel/ee_2 + FMT(vowel/ee_2) endphoneme phoneme a - vowel starttype (a) endtype (a) + vowel starttype #a endtype #a length 210 - formants vowel/aa# + FMT(vowel/aa#) endphoneme phoneme 8 - vowel starttype (@) endtype (@) + vowel starttype #@ endtype #@ length 160 - formants vowel/8_5 + FMT(vowel/8_5) endphoneme phoneme o - vowel starttype (o) endtype (o) + vowel starttype #o endtype #o length 220 - formants vowel/o_7 + FMT(vowel/o_7) endphoneme phoneme U - vowel starttype (u) endtype (u) + vowel starttype #u endtype #u length 130 - formants vowel/uu# + FMT(vowel/uu#) endphoneme phoneme u - vowel starttype (u) endtype (u) + vowel starttype #u endtype #u length 200 - formants vowel/u_6 + FMT(vowel/u_6) endphoneme phoneme y - vowel starttype (u) endtype (u) + vowel starttype #u endtype #u length 160 - formants vowel/y_5 + FMT(vowel/y_5) endphoneme phoneme eI - vowel starttype (e) endtype (i) + vowel starttype #e endtype #i length 280 - formants vdiph/eei_3 + FMT(vdiph/eei_3) endphoneme + phoneme eU - vowel starttype (e) endtype (i) + vowel starttype #e endtype #i length 280 - formants vdiph/eeu_3 + FMT(vdiph/eeu_3) endphoneme + phoneme V - vowel starttype (@) endtype (@) + vowel starttype #@ endtype #@ length 160 - formants vowel/V_2 + FMT(vowel/V_2) endphoneme - -//phoneme x2 -// vls vel frc -// vowelin f1=0 f2=2300 200 400 f3=-100 80 -// vowelout f1=0 f2=2300 300 400 f3=-100 80 rms=20 -// lengthmod 3 -// wave ufric/x_ku%60 -//endphoneme - - phoneme x // This is Afrikaans [x2] vls vel frc - vowelin f1=0 f2=2300 200 400 f3=-100 100 - vowelout f1=0 f2=2300 300 400 f3=-100 100 rms=20 - length 100 lengthmod 3 - wave ufric/x2%60 // stronger version of [x] + Vowelin f1=0 f2=2300 200 400 f3=-100 100 + Vowelout f1=0 f2=2300 300 400 f3=-100 100 rms=20 + WAV(ufric/x2, 60) // stronger version of [x] endphoneme phoneme c vls pal stop - vowelin f1=0 f2=2700 200 500 f3=400 80 len=60 - vowelout f1=0 f2=2700 300 500 f3=300 80 lengthmod 2 - wave ustop/ki - before _ ustop/ki%80 + voicingswitch J + Vowelin f1=0 f2=2700 200 500 f3=400 80 len=60 + Vowelout f1=0 f2=2700 300 500 f3=300 80 + IF nextPh(isPause2) THEN + WAV(ustop/ki, 80) + ENDIF + WAV(ustop/ki) endphoneme phoneme J vcd pla stop - vowelin f1=2 f2=2700 400 600 f3=300 80 - vowelout f1=2 f2=2700 400 600 f3=300 80 colr=1 - formants dzh/dz_pzd+ustop/ki%60 + voicingswitch c lengthmod 5 - switchvoicing c + Vowelin f1=2 f2=2700 400 600 f3=300 80 + Vowelout f1=2 f2=2700 400 600 f3=300 80 colr=1 + + IF PreVoicing THEN + FMT(dzh/xdz_pzd) + ENDIF + + FMT(dzh/dz_pzd) addWav(ustop/ki, 60) endphoneme diff --git a/phsource/ph_latin b/phsource/ph_latin index bdf943c5..665a4d14 100644 --- a/phsource/ph_latin +++ b/phsource/ph_latin @@ -6,123 +6,122 @@ phoneme a - vowel starttype (a) endtype (a) + vowel starttype #a endtype #a length 170 - formants vowel/a_5 + FMT(vowel/a_5) endphoneme phoneme E - vowel starttype (e) endtype (e) + vowel starttype #e endtype #e length 170 - formants vowel/ee_1 + FMT(vowel/ee_1) endphoneme phoneme I - vowel starttype (i) endtype (i) + vowel starttype #i endtype #i length 150 - formants vowel/ii_5 - linkout ; + IfNextVowelAppend(;) + FMT(vowel/ii_5) endphoneme phoneme O - vowel starttype (o) endtype (o) + vowel starttype #o endtype #o length 160 - formants vowel/o + FMT(vowel/o) endphoneme phoneme U - vowel starttype (u) endtype (u) + vowel starttype #u endtype #u length 160 - formants vowel/u + FMT(vowel/u) endphoneme phoneme a: - vowel starttype (a) endtype (a) + vowel starttype #a endtype #a length 270 - formants vowel/a_3 + FMT(vowel/a_3) endphoneme phoneme e: - vowel starttype (e) endtype (e) + vowel starttype #e endtype #e length 260 - formants vowel/e + FMT(vowel/e) endphoneme phoneme i: - vowel starttype (i) endtype (i) + vowel starttype #i endtype #i length 240 - formants vowel/i_2 - after w w/wi2 + FMT(vowel/i_2) endphoneme phoneme o: - vowel starttype (o) endtype (o) + vowel starttype #o endtype #o length 250 - formants vowel/o_2 + FMT(vowel/o_2) endphoneme phoneme u: - vowel starttype (u) endtype (u) + vowel starttype #u endtype #u length 250 - formants vowel/u_bck2 + FMT(vowel/u_bck2) endphoneme phoneme y - vowel starttype (i) endtype (i) + vowel starttype #i endtype #i length 150 - formants vowel/y + FMT(vowel/y) endphoneme phoneme y: - vowel starttype (i) endtype (i) + vowel starttype #i endtype #i length 250 - formants vowel/y_2 + FMT(vowel/y_2) endphoneme phoneme aU - vowel starttype (a) endtype (u) + vowel starttype #a endtype #u length 270 - formants vdiph/aau_2 + FMT(vdiph/aau_2) endphoneme phoneme aI - vowel starttype (a) endtype (i) + vowel starttype #a endtype #i length 270 - formants vdiph/ae + FMT(vdiph/ae) endphoneme phoneme eI - vowel starttype (e) endtype (i) + vowel starttype #e endtype #i length 270 - formants vdiph/ei + FMT(vdiph/ei) endphoneme phoneme EU - vowel starttype (e) endtype (u) + vowel starttype #e endtype #u length 270 - formants vdiph/eeu_2 + FMT(vdiph/eeu_2) endphoneme phoneme OI - vowel starttype (o) endtype (i) + vowel starttype #o endtype #i length 250 - formants vdiph/oi + FMT(vdiph/oi) endphoneme @@ -132,15 +131,8 @@ endphoneme phoneme p // unaspirated - 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 - before _ ustop/p_unasp_%80 - before r ustop/pr - before l ustop/pl - switchvoicing b + import_phoneme consonants/p- + voicingswitch b endphoneme @@ -149,13 +141,21 @@ phoneme vls glt apr length 50 lengthmod 3 - wave h/h_%70 // no vowel following - before (@) h/h@ - before (a) h/ha - before (e) h/he - before (i) h/hi - before (o) h/ho - before (u) h/hu + + IF nextPh(#@) THEN + WAV(h/h@) + ELIF nextPh(#a) THEN + WAV(h/ha) + ELIF nextPh(#e) THEN + WAV(h/he) + ELIF nextPh(#i) THEN + WAV(h/hi) + ELIF nextPh(#o) THEN + WAV(h/ho) + ELIF nextPh(#u) THEN + WAV(h/hu) + ENDIF + WAV(h/h_, 70) // no vowel following endphoneme @@ -163,13 +163,6 @@ endphoneme // Use 'dark' l (l/2) at the end of a word or another consonant phoneme l - liquid - length 100 - lengthmod 7 - beforenotvowel l/2 - formants l/l - after _ l/_l - after t l/tl - after l/ l/l_long // double l, make it longer + import_phoneme en/l endphoneme diff --git a/phsource/ph_latvian b/phsource/ph_latvian index bc00818d..2aa29d2e 100644 --- a/phsource/ph_latvian +++ b/phsource/ph_latvian @@ -1,223 +1,229 @@ phoneme @ - vowel starttype (@) endtype (@) + vowel starttype #@ endtype #@ length 120 - formants vowel/8_7 + FMT(vowel/8_7) endphoneme phoneme i - vowel starttype (i) endtype (i) + vowel starttype #i endtype #i length 110 - formants vowel/i_6 - linkout ; + IfNextVowelAppend(;) + FMT(vowel/i_6) endphoneme phoneme i: - vowel starttype (i) endtype (i) + vowel starttype #i endtype #i length 300 - formants vowel/i_6 - linkout ; + IfNextVowelAppend(;) + FMT(vowel/i_6) endphoneme phoneme e - vowel starttype (e) endtype (e) + vowel starttype #e endtype #e length 120 - formants vowel/e_mid + FMT(vowel/e_mid) endphoneme phoneme e: - vowel starttype (e) endtype (e) + vowel starttype #e endtype #e length 330 - formants vowel/e_mid + FMT(vowel/e_mid) endphoneme phoneme & - vowel starttype (a) endtype (a) + vowel starttype #a endtype #a length 120 - formants vowel/& + FMT(vowel/&) endphoneme phoneme &: - vowel starttype (a) endtype (a) + vowel starttype #a endtype #a length 330 - formants vowel/& + FMT(vowel/&) endphoneme phoneme a - vowel starttype (a) endtype (a) + vowel starttype #a endtype #a length 120 - formants vowel/a_3 - reduceto a# 0 + ChangeIfDiminished(a#) + FMT(vowel/a_3) endphoneme phoneme a: - vowel starttype (a) endtype (a) + vowel starttype #a endtype #a length 350 - formants vowel/a_3 + FMT(vowel/a_3) endphoneme phoneme a# - vowel starttype (a) endtype (a) + vowel starttype #a endtype #a length 120 - formants vowel/V_6 + FMT(vowel/V_6) endphoneme phoneme o - vowel starttype (o) endtype (o) + vowel starttype #o endtype #o length 120 - formants vowel/oo_1 + FMT(vowel/oo_1) endphoneme phoneme o: - vowel starttype (o) endtype (o) + vowel starttype #o endtype #o length 330 - formants vowel/oo_1 + FMT(vowel/oo_1) endphoneme phoneme u - vowel starttype (u) endtype (u) + vowel starttype #u endtype #u length 110 - formants vowel/u + FMT(vowel/u) endphoneme phoneme u: - vowel starttype (u) endtype (u) + vowel starttype #u endtype #u length 330 - formants vowel/u + FMT(vowel/u) endphoneme phoneme ai - vowel starttype (a) endtype (i) + vowel starttype #a endtype #i length 310 long - formants vdiph/aai + FMT(vdiph/aai) endphoneme phoneme ei - vowel starttype (e) endtype (i) + vowel starttype #e endtype #i length 300 long - formants vdiph/eei_2 + FMT(vdiph/eei_2) endphoneme phoneme au - vowel starttype (a) endtype (u) + vowel starttype #a endtype #u length 300 long - formants vdiph/aau + FMT(vdiph/aau) endphoneme phoneme uo - vowel starttype (u) endtype (a) + vowel starttype #u endtype #a length 300 long -// formants vdiph2/uo - formants vdiph2/uaa + FMT(vdiph2/uaa) endphoneme phoneme oi - vowel starttype (o) endtype (i) + vowel starttype #o endtype #i length 290 long - formants vdiph/ooi + FMT(vdiph/ooi) endphoneme phoneme ui - vowel starttype (u) endtype (i) + vowel starttype #u endtype #i length 290 long - formants vdiph/ui + FMT(vdiph/ui) endphoneme phoneme ie - vowel starttype (i) endtype (e) + vowel starttype #i endtype #e length 290 long - formants vdiph2/ie_2 + FMT(vdiph2/ie_2) endphoneme phoneme iu - vowel starttype (i) endtype (u) + vowel starttype #i endtype #u length 290 long - formants vdiph2/iu_2 + FMT(vdiph2/iu_2) endphoneme - -phoneme R2 // this is [R] from Slovak/Czech +phoneme R2 liquid - vowelin f1=0 f2=1700 -300 300 f3=-300 80 - vowelout f1=2 f2=1700 -300 300 f3=-300 80 brk - formants r3/r_trill+r3/r_trill.wav%50 trill lengthmod 6 + Vowelin f1=0 f2=1700 -300 300 f3=-300 80 + Vowelout f1=2 f2=1700 -300 300 f3=-300 80 brk + FMT(r3/r_trill) addWav(r3/r_trill.wav, 50) endphoneme phoneme ts vls alv afr sibilant lengthenstop - vowelin f1=0 f2=1700 -300 300 f3=-100 80 - vowelout f1=0 f2=1700 -300 250 f3=-100 80 rms=20 lengthmod 2 - wave ustop/ts2%90 - before _ ustop/ts_ + Vowelin f1=0 f2=1700 -300 300 f3=-100 80 + Vowelout f1=0 f2=1700 -300 250 f3=-100 80 rms=20 + IF nextPh(isPause2) THEN + WAV(ustop/ts_) + ENDIF + WAV(ustop/ts2, 90) endphoneme phoneme t // try disable this and try using English [t] vls alv stop lengthenstop - vowelin f1=0 f2=1700 -300 300 f3=-100 80 - vowelout f1=0 f2=1700 -300 250 f3=-100 80 rms=20 lengthmod 2 - wave ustop/t_short%115 - before _ ustop/t_ - switchvoicing d + voicingswitch d + Vowelin f1=0 f2=1700 -300 300 f3=-100 80 + Vowelout f1=0 f2=1700 -300 250 f3=-100 80 rms=20 + IF nextPh(isPause2) THEN + WAV(ustop/t_) + ENDIF + WAV(ustop/t_short, 115) 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 + voicingswitch b + Vowelin f1=0 f2=1000 -50 -100 f3=-200 80 + Vowelout f1=0 f2=1000 -500 -350 f3=-300 80 rms=30 + IF nextPh(isPause2) THEN + WAV(ustop/p_unasp_, 80) + ENDIF + IF nextPh(l) THEN + WAV(ustop/pl) + ENDIF + WAV(ustop/p_unasp, 120) 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 - before l^ ustop/ki - switchvoicing g + voicingswitch g + Vowelin f1=0 f2=2300 200 400 f3=-100 80 + Vowelout f1=0 f2=2300 300 400 f3=-100 80 rms=20 + IF nextPh(isPause2) THEN + WAV(ustop/k_) + ENDIF + IF nextPh(#i) OR nextPh(l^) THEN + WAV(ustop/ki) + ENDIF + IF nextPh(l) THEN + WAV(ustop/kl) + ENDIF + WAV(ustop/k_unasp, 60) // weaker endphoneme phoneme s2 // second part of long [s:] vls alv frc sibilant - vowelin f1=0 f2=1700 -300 300 f3=-100 80 - vowelout f1=0 f2=1700 -300 250 f3=-100 80 rms=20 lengthmod 3 - wave ufric/s_continue - before _ ufric/s_ - before p ufric/s! - before t ufric/s! - before k ufric/s! - switchvoicing z + Vowelin f1=0 f2=1700 -300 300 f3=-100 80 + Vowelout f1=0 f2=1700 -300 250 f3=-100 80 rms=20 + WAV(ufric/s_continue) endphoneme diff --git a/phsource/ph_lojban b/phsource/ph_lojban index 19a742e7..ec5271fc 100644 --- a/phsource/ph_lojban +++ b/phsource/ph_lojban @@ -1,25 +1,9 @@ // Phonemes for Lojban (an artificial constructed language) // Inherits phonemes from Esperanto - -phoneme r- // syllabic r, for lojban - vowel starttype (@) endtype (@) - unstressed - length 220 - formants vowelr/r-voc -endphoneme - -phoneme l- // syllabic l, for lojban - vowel starttype (@) endtype (@) - unstressed - length 170 - formants vwl_hi/l-voc -endphoneme - phoneme e - vowel starttype (e) endtype (e) + vowel starttype #e endtype #e length 170 - formants vowel/e_mid2 + FMT(vowel/e_mid2) endphoneme - diff --git a/phsource/ph_macedonian b/phsource/ph_macedonian index fcfedb0c..a488ba60 100644 --- a/phsource/ph_macedonian +++ b/phsource/ph_macedonian @@ -2,19 +2,25 @@ phoneme k^ vls pal stop - vowelin f1=0 f2=2700 400 600 f3=400 80 - vowelout f1=0 f2=2700 400 600 f3=400 80 rms=20 lengthmod 2 - wave ustop/ki + Vowelin f1=0 f2=2700 400 600 f3=400 80 + Vowelout f1=0 f2=2700 400 600 f3=400 80 rms=20 + WAV(ustop/ki) endphoneme + phoneme dZ; vcd pal afr sibilant palatal - vowelin f1=2 f2=2700 400 600 f3=300 80 rate len=70 - formants dzh/dzh+x/dz_pzd - before _ dzh/dzh_+x/dzh_ - after _ NULL - after @ dzh/xdzh lengthmod 5 - switchvoicing ts; + voicingswitch tS; + Vowelin f1=2 f2=2700 400 600 f3=300 80 rate len=70 + + IF PreVoicing THEN + FMT(dzh/xdzh) + ENDIF + + IF nextPh(isPause2) THEN + FMT(dzh/dzh_) addWav(x/dzh_) + ENDIF + FMT(dzh/dzh) addWav(x/dz_pzd) endphoneme \ No newline at end of file diff --git a/phsource/ph_norwegian b/phsource/ph_norwegian index d18efdea..48483215 100644 --- a/phsource/ph_norwegian +++ b/phsource/ph_norwegian @@ -9,182 +9,184 @@ //======= phoneme @ // close schwa - vowel starttype (@) endtype (@) + vowel starttype #@ endtype #@ unstressed length 120 - formants vowel/@_4 + FMT(vowel/@_4) endphoneme phoneme @2 // open schwa - vowel starttype (@) endtype (a) + vowel starttype #@ endtype #a unstressed length 120 - formants vowel/@_low + FMT(vowel/@_low) endphoneme phoneme I - vowel starttype (i) endtype (i) + vowel starttype #i endtype #i length 100 - formants vowel/ii_3 - linkout ; + IfNextVowelAppend(;) + FMT(vowel/ii_3) endphoneme phoneme i: - vowel starttype (i) endtype (i) + vowel starttype #i endtype #i length 230 - formants vowel/i - after w w/wi2 - linkout ; + IfNextVowelAppend(;) + IF prevPh(w) THEN + VowelStart(w/wi2) + ENDIF + FMT(vowel/i) endphoneme phoneme y - vowel starttype (u) endtype (u) + vowel starttype #u endtype #u length 120 - formants vowel/yy + FMT(vowel/yy) endphoneme phoneme y: - vowel starttype (u) endtype (u) + vowel starttype #u endtype #u length 260 - formants vowel/y_4 + FMT(vowel/y_4) endphoneme phoneme W - vowel starttype (@) endtype (@) + vowel starttype #@ endtype #@ length 120 - formants vowel/oe_2 + FMT(vowel/oe_2) endphoneme phoneme Y: - vowel starttype (@) endtype (@) + vowel starttype #@ endtype #@ length 260 - formants vwl_no/y# + FMT(vwl_no/y#) endphoneme phoneme E - vowel starttype (e) endtype (e) + vowel starttype #e endtype #e length 120 - formants vowel/e_mid - reduceto @ 0 + ChangeIfDiminished(@) + FMT(vowel/e_mid) endphoneme phoneme E: - vowel starttype (e) endtype (e) + vowel starttype #e endtype #e length 270 - formants vowel/ee_1 + FMT(vowel/ee_1) endphoneme phoneme e: - vowel starttype (e) endtype (e) + vowel starttype #e endtype #e length 250 - formants vowel/e_2 + FMT(vowel/e_2) endphoneme phoneme a - vowel starttype (a) endtype (a) + vowel starttype #a endtype #a length 120 - formants vwl_no/& + FMT(vwl_no/&) endphoneme phoneme a: - vowel starttype (a) endtype (a) + vowel starttype #a endtype #a length 270 - formants vwl_no/& + FMT(vwl_no/&) endphoneme phoneme A - vowel starttype (a) endtype (a) + vowel starttype #a endtype #a length 130 - formants vowel/aa + FMT(vowel/aa) endphoneme phoneme A: - vowel starttype (a) endtype (a) + vowel starttype #a endtype #a length 280 - formants vowel/aa + FMT(vowel/aa) endphoneme phoneme O - vowel starttype (o) endtype (o) + vowel starttype #o endtype #o length 120 - formants vowel/oo + FMT(vowel/oo) endphoneme phoneme o: - vowel starttype (o) endtype (o) + vowel starttype #o endtype #o length 270 - formants vowel/o_2 + FMT(vowel/o_2) endphoneme phoneme U - vowel starttype (u) endtype (u) + vowel starttype #u endtype #u length 120 - formants vowel/uu_bck + FMT(vowel/uu_bck) endphoneme phoneme u: - vowel starttype (u) endtype (u) + vowel starttype #u endtype #u length 240 - formants vowel/u_bck + FMT(vowel/u_bck) endphoneme phoneme u- - vowel starttype (u) endtype (u) + vowel starttype #u endtype #u length 120 - formants vwl_no/u# + FMT(vwl_no/u#) endphoneme phoneme u-: - vowel starttype (u) endtype (u) + vowel starttype #u endtype #u length 260 - formants vwl_no/u#2 + FMT(vwl_no/u#2) endphoneme // Diphthongs //=========== phoneme AI - vowel starttype (a) endtype (i) + vowel starttype #a endtype #i length 270 - formants vdiph/0i_2 - linkout ; + IfNextVowelAppend(;) + FMT(vdiph/0i_2) endphoneme phoneme aI - vowel starttype (a) endtype (i) + vowel starttype #a endtype #i length 270 - formants vdiph/ai_3 - linkout ; + IfNextVowelAppend(;) + FMT(vdiph/ai_3) endphoneme phoneme OI - vowel starttype (o) endtype (i) + vowel starttype #o endtype #i length 270 - formants vdiph/ooi - linkout ; + IfNextVowelAppend(;) + FMT(vdiph/ooi) endphoneme phoneme u-I - vowel starttype (u) endtype (i) + vowel starttype #u endtype #i length 270 - formants vdiph/yi - linkout ; + IfNextVowelAppend(;) + FMT(vdiph/yi) endphoneme phoneme Yy - vowel starttype (@) endtype (u) + vowel starttype #@ endtype #u length 270 - formants vwl_no/y#y + FMT(vwl_no/y#y) endphoneme phoneme aU - vowel starttype (a) endtype (u) + vowel starttype #a endtype #u length 270 - formants vwl_no/au- + FMT(vwl_no/au-) endphoneme diff --git a/phsource/ph_polish b/phsource/ph_polish index 12a879b6..6114ee0a 100644 --- a/phsource/ph_polish +++ b/phsource/ph_polish @@ -5,75 +5,77 @@ phoneme a - vowel starttype (a) endtype (a) + vowel starttype #a endtype #a length 190 - formants vowel/a - reduceto a# 0 + ChangeIfDiminished(a#) + FMT(vowel/a) endphoneme phoneme a# - vowel starttype (a) endtype (a) + vowel starttype #a endtype #a length 170 - formants vowel/a#_2 + FMT(vowel/a#_2) endphoneme phoneme E - vowel starttype (e) endtype (e) + vowel starttype #e endtype #e length 180 - formants vowel/e_mid - before _ vowel/ee_1 + IF nextPh(isPause) THEN + FMT(vowel/ee_1) + ENDIF + FMT(vowel/e_mid) endphoneme phoneme E# - vowel starttype (e) endtype (e) + vowel starttype #e endtype #e length 180 - formants vowel/ee# + FMT(vowel/ee#) endphoneme phoneme i - vowel starttype (i) endtype (i) + vowel starttype #i endtype #i length 170 - formants vowel/i_7 - linkout ; + IfNextVowelAppend(;) + FMT(vowel/i_7) endphoneme phoneme O - vowel starttype (o) endtype (o) + vowel starttype #o endtype #o length 180 - formants vowel/oo_5 + FMT(vowel/oo_5) endphoneme phoneme u - vowel starttype (u) endtype (u) + vowel starttype #u endtype #u length 180 - formants vowel/u_bck + FMT(vowel/u_bck) endphoneme phoneme y // close central unrounded (i-bar) - vowel starttype (i) endtype (i) + vowel starttype #i endtype #i length 180 - formants vowel/ii#_2 + FMT(vowel/ii#_2) endphoneme phoneme E~ - vowel starttype (e) endtype (u) + vowel starttype #e endtype #u length 250 - formants vnasal/ee_u_n + FMT(vnasal/ee_u_n) endphoneme phoneme O~ - vowel starttype (o) endtype (o) + vowel starttype #o endtype #o length 250 - formants vnasal/oo_n3 + FMT(vnasal/oo_n3) endphoneme @@ -82,104 +84,114 @@ endphoneme phoneme R liquid - vowelin f1=0 f2=1700 -300 300 f3=-300 80 - vowelout f1=2 f2=1700 -300 300 f3=-300 80 brk - formants r3/r_trill+r3/r_trill.wav%50 trill lengthmod 6 + Vowelin f1=0 f2=1700 -300 300 f3=-300 80 + Vowelout f1=2 f2=1700 -300 300 f3=-300 80 brk + FMT(r3/r_trill) addWav(r3/r_trill.wav, 50) endphoneme phoneme t vls dnt stop - vowelin f1=0 f2=1600 -300 300 f3=-100 80 - vowelout f1=0 f2=1600 -300 250 f3=-100 80 rms=20 lengthmod 2 - wave ustop/t_dnt%60 - before _ ustop/t_dnt%35 - switchvoicing d + voicingswitch d + Vowelin f1=0 f2=1600 -300 300 f3=-100 80 + Vowelout f1=0 f2=1600 -300 250 f3=-100 80 rms=20 + IF nextPh(isPause2) THEN + WAV(ustop/t_dnt, 35) + ENDIF + WAV(ustop/t_dnt, 60) endphoneme + phoneme t; vls pal stop palatal - vowelin f1=0 f2=2700 400 600 f3=300 80 rate len=70 - vowelout f1=1 f2=2700 400 600 f3=200 70 len=50 colr=1 lengthmod 2 - wave ustop/t_pzd%60 - before _ ustop/t_pzd%30 - switchvoicing d; + voicingswitch d; + Vowelin f1=0 f2=2700 400 600 f3=300 80 rate len=70 + Vowelout f1=1 f2=2700 400 600 f3=200 70 len=50 colr=1 + IF nextPh(isPause2) THEN + WAV(ustop/t_pzd, 30) + ENDIF + WAV(ustop/t_pzd, 60) endphoneme phoneme d vcd dnt stop - vowelin f1=2 f2=1500 -300 300 f3=-150 80 - vowelout f1=2 f2=1500 -300 300 f3=-150 80 - formants d/d+x/d_dnt%110 - before _ d/d_+x/d_ - before r d/dr+x/d_dnt%110 - after _ NULL - after @ d/xd lengthmod 5 - switchvoicing t + voicingswitch t + Vowelin f1=2 f2=1500 -300 300 f3=-150 80 + Vowelout f1=2 f2=1500 -300 300 f3=-150 80 + + IF PreVoicing THEN + FMT(d/xd) + ENDIF + + IF nextPh(isPause2) THEN + FMT(d/d_) addWav(x/d_) + ELIF nextPh(isRhotic) THEN + FMT(d/dr) addWav(x/d_dnt, 110) + ENDIF + + FMT(d/d) addWav(x/d_dnt, 110) endphoneme + phoneme d; vcd alv stop palatal - vowelin f1=2 f2=2700 400 600 f3=200 80 rate len=80 - vowelout f1=2 f2=2700 400 600 f3=200 80 rate len=100 colr=1 - formants d/d+x/d_pzd%80 - before _ d/d_+x/d_pzd%40 - before r d/dr+x/d_pzd%80 - after _ NULL - after @ d/xd_pzd lengthmod 5 - switchvoicing t; + voicingswitch t; + Vowelin f1=2 f2=2700 400 600 f3=200 80 rate len=80 + Vowelout f1=2 f2=2700 400 600 f3=200 80 rate len=100 colr=1 + + IF PreVoicing THEN + FMT(d/xd_pzd) + ENDIF + + IF nextPh(isPause2) THEN + FMT(d/d_) addWav(x/d_pzd, 40) + ELIF nextPh(isRhotic) THEN + FMT(d/dr) addWav(x/d_pzd, 80) + ENDIF + + FMT(d/d) addWav(x/d_pzd, 80) endphoneme phoneme ts - vls alv afr sibilant - vowelin f1=0 f2=1700 -300 300 f3=-100 80 - vowelout f1=0 f2=1700 -300 250 f3=-100 80 rms=20 - lengthmod 2 - wave ustop/ts - before _ ustop/ts_ - switchvoicing dz + import_phoneme consonants/ts + voicingswitch dz endphoneme phoneme dz - vcd alv afr sibilant - vowelin f1=1 f2=1700 -300 300 f3=-100 80 len=50 - vowelout f1=2 f2=1700 -300 300 f3=-100 80 - formants d/xdz+ustop/ts%140 - before _ voc/z_+ustop/ts_%60 - after _ NULL - after @ d/xd - lengthmod 5 - switchvoicing ts + import_phoneme consonants/dz + voicingswitch ts endphoneme - phoneme w liquid - length 100 - beforenotvowel w/ lengthmod 7 - formants w/w2 - after _ w/w2 + + CALL base/w + IF nextPh(isVowel) THEN + FMT(w/w2) // longer [w] + ENDIF endphoneme phoneme f vls lbd frc - vowelout f1=0 f2=1000 -500 -350 f3=-200 80 lengthmod 3 - wave ufric/f%140 - before s ufric/f%160 - before _ ufric/f_ - switchvoicing v + voicingswitch v + Vowelout f1=0 f2=1000 -500 -350 f3=-200 80 + IF nextPh(isPause2) THEN + WAV(ufric/f_) + ELIF nextPh(s) THEN + WAV(ufric/f, 160) + ENDIF + WAV(ufric/f, 140) endphoneme - diff --git a/phsource/ph_portugal b/phsource/ph_portugal index 44dbe1bf..db9f7d14 100644 --- a/phsource/ph_portugal +++ b/phsource/ph_portugal @@ -6,154 +6,147 @@ phoneme & - vowel starttype (@) endtype (@) + vowel starttype #@ endtype #@ length 180 - formants vowel/a#_3 + FMT(vowel/a#_3) unstressed endphoneme phoneme &/ // Used for final "a" when next word starts with "a" - vowel starttype (@) endtype (@) - beforevowel NULL + vowel starttype #@ endtype #@ length 180 - formants vowel/a#_3 + IF nextPh(isVowel) THEN + ChangePhoneme(NULL) + ENDIF + FMT(vowel/a#_3) endphoneme phoneme a - vowel starttype (a) endtype (a) + vowel starttype #a endtype #a length 180 - formants vowel/a_2 - reduceto & 4 + ChangeIfNotStressed(&) + FMT(vowel/a_2) endphoneme phoneme &~ - vowel starttype (e) endtype (@) + vowel starttype #e endtype #@ length 240 - formants vnasal/ee_n2 + FMT(vnasal/ee_n2) endphoneme phoneme &U~ - vowel starttype (@) endtype (u) + vowel starttype #@ endtype #u length 240 - formants vnasal/a#u_n + FMT(vnasal/a#u_n) endphoneme phoneme E - vowel starttype (e) endtype (e) + vowel starttype #e endtype #e length 170 - formants vowel/e_mid - reduceto y 2 + ChangeIfUnstressed(y) + FMT(vowel/e_mid) endphoneme phoneme e - vowel starttype (e) endtype (e) + vowel starttype #e endtype #e length 160 - formants vowel/e - reduceto y 2 + ChangeIfUnstressed(y) + FMT(vowel/e) endphoneme phoneme y - vowel starttype (@) endtype (@) + vowel starttype #@ endtype #@ length 110 - formants vowel/i#_5 + FMT(vowel/i#_5) endphoneme phoneme i - vowel starttype (i) endtype (i) + vowel starttype #i endtype #i length 150 - formants vowel/i - linkout ; + IfNextVowelAppend(;) + FMT(vowel/i) endphoneme phoneme i/ // changes to NULL before a vowel - vowel starttype (i) endtype (i) - beforevowel NULL + vowel starttype #i endtype #i length 100 - formants vowel/i#_5 - linkout ; + IF nextPh(isVowel) THEN + ChangePhoneme(NULL) + ENDIF + IfNextVowelAppend(;) + FMT(vowel/i#_5) endphoneme phoneme O - vowel starttype (o) endtype (o) + vowel starttype #o endtype #o length 170 - formants vowel/0_2 -// reduceto o 4 +// ChangeIfNotStressed(o) + FMT(vowel/0_2) endphoneme phoneme o - vowel starttype (o) endtype (o) + vowel starttype #o endtype #o length 170 - formants vowel/o - reduceto u 2 + ChangeIfNotStressed(u) + FMT(vowel/o) endphoneme phoneme u - vowel starttype (u) endtype (u) + vowel starttype #u endtype #u length 160 - formants vowel/u_6 + FMT(vowel/u_6) endphoneme phoneme U - vowel starttype (u) endtype (u) + vowel starttype #u endtype #u length 110 - beforevowel w - formants vowel/u_6 + IF nextPh(isVowel) THEN + ChangePhoneme(w) + ENDIF + FMT(vowel/u_6) endphoneme phoneme EU - vowel starttype (e) endtype (u) + vowel starttype #e endtype #u length 220 - formants vdiph/eeu_2 + FMT(vdiph/eeu_2) endphoneme phoneme w - starttype w endtype w - liquid - length 100 - beforenotvowel w/ - lengthmod 7 - formants w/w2 - after _ w/w2 + import_phoneme base2/w2 endphoneme phoneme x // [r] for Portugal liquid -// vcd uvl frc - vowelin f1=0 f2=1500 -400 400 f3=-400 80 - length 100 - lengthmod 7 - beforenotvowel r/ trill - formants vwl_fr/@R+r3/rx%120 + lengthmod 7 + Vowelin f1=0 f2=1500 -400 400 f3=-400 80 + IF nextPh(isNotVowel) THEN + ChangePhoneme(r/) + ENDIF + FMT(vwl_fr/@R) addWav(r3/rx, 120) endphoneme phoneme R // for Portugal this is same the as [r] - import_phoneme r pt + import_phoneme pt/r endphoneme phoneme s# // This is [s] for Brazi;, [S] for Portugal - vls pla frc sibilant - vowelin f1=0 f2=2100 100 300 f3=-100 80 - vowelout f1=0 f2=2100 100 300 f3=-100 80 - length 100 - lengthmod 3 - wave ufric/sh - before _ ufric/sh_ - switchvoicing Z + import_phoneme base/S endphoneme diff --git a/phsource/ph_pt_brazil b/phsource/ph_pt_brazil index 1fbced1f..03dc5916 100644 --- a/phsource/ph_pt_brazil +++ b/phsource/ph_pt_brazil @@ -4,231 +4,211 @@ //==================================================== phoneme I // epenthetic i - vowel starttype (i) endtype (i) - length 90 - formants vowel/ii_6 + vowel starttype #i endtype #i unstressed + length 90 + FMT(vowel/ii_6) endphoneme phoneme e~ - vowel starttype (e) endtype (e) + vowel starttype #e endtype #e length 240 - formants vnasal/e_n + FMT(vnasal/e_n) endphoneme phoneme i~ - vowel starttype (i) endtype (i) + vowel starttype #i endtype #i length 240 - formants vnasal/i_n - linkout ; + IfNextVowelAppend(;) + FMT(vnasal/i_n) endphoneme phoneme o~ - vowel starttype (o) endtype (o) + vowel starttype #o endtype #o length 240 - formants vnasal/o_n + FMT(vnasal/o_n) endphoneme phoneme u~ - vowel starttype (u) endtype (u) + vowel starttype #u endtype #u length 180 - formants vnasal/u_n + FMT(vnasal/u_n) endphoneme phoneme &~ - vowel starttype (@) endtype (@) + vowel starttype #@ endtype #@ length 180 - formants vnasal/a#_n -// reduceto & 4 +// ChangeIfNotStressed(&) + FMT(vnasal/a#_n) endphoneme phoneme &U~ - vowel starttype (@) endtype (u) + vowel starttype #@ endtype #u length 240 - formants vnasal/a#u_n + FMT(vnasal/a#u_n) endphoneme phoneme oI~ - vowel starttype (o) endtype (i) + vowel starttype #o endtype #i length 260 - formants vnasal/oi_n + FMT(vnasal/oi_n) endphoneme phoneme & - vowel starttype (@) endtype (@) + vowel starttype #@ endtype #@ length 180 - formants vowel/a#_3 + FMT(vowel/a#_3) endphoneme phoneme &/ // Used for final "a" when next word starts with "a" - vowel starttype (@) endtype (@) - beforevowel NULL + vowel starttype #@ endtype #@ length 180 - formants vowel/a#_3 + IF nextPh(isVowel) THEN + ChangePhoneme(NULL) + ENDIF + FMT(vowel/a#_3) endphoneme phoneme A // for "al" in European Portuguese, don't reduce to [&] - vowel starttype (a) endtype (a) + vowel starttype #a endtype #a length 200 - formants vowel/a_2 + FMT(vowel/a_2) endphoneme phoneme E - vowel starttype (e) endtype (e) + vowel starttype #e endtype #e length 170 - formants vowel/ee_3 + FMT(vowel/ee_3) endphoneme phoneme e - vowel starttype (e) endtype (e) + vowel starttype #e endtype #e length 160 - formants vowel/e + FMT(vowel/e) endphoneme phoneme y // this is the same as [i] for Brazil - vowel starttype (i) endtype (i) + vowel starttype #i endtype #i length 110 - formants vowel/ii_6 - linkout ; + IfNextVowelAppend(;) + FMT(vowel/ii_6) endphoneme phoneme i/ // changes to [j] before a vowel - vowel starttype (i) endtype (i) - beforevowel j + vowel starttype #i endtype #i length 150 - formants vowel/ii_6 - linkout ; + IF nextPh(isVowel) THEN + ChangePhoneme(j) + ENDIF + IfNextVowelAppend(;) + FMT(vowel/ii_6) endphoneme phoneme O - vowel starttype (o) endtype (o) + vowel starttype #o endtype #o length 170 - formants vowel/0 + FMT(vowel/0) endphoneme phoneme u - vowel starttype (u) endtype (u) + vowel starttype #u endtype #u length 160 - formants vowel/u_bck -endphoneme - -phoneme u2 // TEST - vowel starttype (u) endtype (u) - length 160 - formants vowel/u + FMT(vowel/u_bck) endphoneme phoneme U - vowel starttype (u) endtype (u) + vowel starttype #u endtype #u length 140 - formants vowel/uu_bck + FMT(vowel/uu_bck) endphoneme phoneme aI - vowel starttype (a) endtype (i) + vowel starttype #a endtype #i length 230 - formants vdiph/ai - linkout ; + IfNextVowelAppend(;) + FMT(vdiph/ai) endphoneme phoneme eI - vowel starttype (e) endtype (i) + vowel starttype #e endtype #i length 210 - formants vdiph/ei - linkout ; + IfNextVowelAppend(;) + FMT(vdiph/ei) endphoneme phoneme OI - vowel starttype (o) endtype (i) + vowel starttype #o endtype #i length 230 - formants vdiph/0i - linkout ; + IfNextVowelAppend(;) + FMT(vdiph/0i) endphoneme phoneme eU - vowel starttype (e) endtype (u) + vowel starttype #e endtype #u length 230 - formants vdiph/eu + FMT(vdiph/eu) endphoneme phoneme EU - vowel starttype (e) endtype (u) + vowel starttype #e endtype #u length 230 - formants vdiph/eeu + FMT(vdiph/eeu) endphoneme phoneme l - liquid - length 100 - lengthmod 7 - beforenotvowel l/2 // use 'dark' [l] after a vowel, should be [w] - formants l/l - after _ l/_l - after t l/tl + import_phoneme en/l // use 'dark' [l] after a vowel, should be [w] endphoneme phoneme x // this is [R] from Slovak/Czech liquid - vowelin f1=0 f2=1700 -300 300 f3=-300 80 - vowelout f1=2 f2=1700 -300 300 f3=-300 80 brk - formants r3/r_trill+r3/r_trill.wav%50 trill lengthmod 6 + Vowelin f1=0 f2=1700 -300 300 f3=-300 80 + Vowelout f1=2 f2=1700 -300 300 f3=-300 80 brk + FMT(r3/r_trill) addWav(r3/r_trill.wav, 50) endphoneme -phoneme x2 // for "r" - vcd vel frc - vowelin f1=0 f2=1500 0 400 f3=-500 100 - vowelout f1=0 f2=1500 0 400 f3=-500 100 rms=20 - lengthmod 6 - formants voc/Q_less+ufric/x2%110 - before _ voc/Q_+ufric/x2 - switchvoicing x +phoneme r- + import_phoneme en/r- endphoneme phoneme s# // This is [s] for Brazi;, [S] for Portugal - vls alv frc sibilant - vowelin f1=0 f2=1700 -300 300 f3=-100 80 - vowelout f1=0 f2=1700 -300 250 f3=-100 80 rms=20 - lengthmod 3 - wave ufric/s - before _ ufric/s_ - before p ufric/s! - before t ufric/s! - before k ufric/s! - switchvoicing z + import_phoneme base/s endphoneme phoneme * vcd alv stop - vowelin f1=1 f2=1700 -300 300 f3=0 80 - vowelout f1=2 f2=1700 -300 300 f3=0 80 - formants d/tap2+x/d%40 - after @ d/x_tap lengthmod 6 + Vowelin f1=1 f2=1700 -300 300 f3=0 80 + Vowelout f1=2 f2=1700 -300 300 f3=0 80 + IF PreVoicing THEN + FMT(d/x_tap) + ENDIF + FMT(d/tap2) addWav(x/d, 40) endphoneme + diff --git a/phsource/ph_romanian b/phsource/ph_romanian index d54563b8..8a9d053a 100644 --- a/phsource/ph_romanian +++ b/phsource/ph_romanian @@ -7,65 +7,72 @@ phoneme I^ // "silent i", palatilizes the preceding consonant - vowel starttype (i) endtype (i) - length 70 + vowel starttype #i endtype #i unstressed - formants vwl_ro/ii- - beforevowel ; - after l; vwl_ro/li-10 - after m; vwl_ro/mi - after n; vwl_ro/ni + length 70 + IF nextPh(isVowel) THEN + ChangePhoneme(;) + ENDIF + IF prevPh(l;) THEN + FMT(vwl_ro/li, -10) + ENDIF + IF prevPh(m;) THEN + FMT(vwl_ro/mi) + ENDIF + IF prevPh(n;) THEN + FMT(vwl_ro/ni) + ENDIF + FMT(vwl_ro/ii-) endphoneme phoneme i/ // used for "i" at end of word - vowel starttype (i) endtype (i) + vowel starttype #i endtype #i length 150 - formants vowel/i - linkout ; - reduceto I^ 4 + ChangeIfNotStressed(I^) + IfNextVowelAppend(;) + FMT(vowel/i) endphoneme phoneme e - vowel starttype (e) endtype (e) + vowel starttype #e endtype #e length 180 - formants vowel/e_mid2 + FMT(vowel/e_mid2) endphoneme phoneme y - vowel starttype (@) endtype (@) + vowel starttype #@ endtype #@ length 180 - formants vowel/i#_5 + FMT(vowel/i#_5) endphoneme phoneme a - vowel starttype (a) endtype (a) + vowel starttype #a endtype #a length 180 - formants vowel/a_2 + FMT(vowel/a_2) endphoneme phoneme @ - vowel starttype (@) endtype (@) + vowel starttype #@ endtype #@ length 170 -// unstressed - formants vowel/@_low + FMT(vowel/@_low) endphoneme phoneme o - vowel starttype (o) endtype (o) + vowel starttype #o endtype #o length 170 - formants vowel/o-_4 + FMT(vowel/o-_4) endphoneme phoneme u - vowel starttype (u) endtype (u) + vowel starttype #u endtype #u length 160 - formants vowel/u_2 + FMT(vowel/u_2) endphoneme phoneme Y - vowel starttype (@) endtype (@) + vowel starttype #@ endtype #@ length 180 - formants vowel/y# + FMT(vowel/y#) endphoneme @@ -74,245 +81,247 @@ endphoneme phoneme @I - vowel starttype (@) endtype (i) + vowel starttype #@ endtype #i length 250 - formants vdiph/@i_3 + FMT(vdiph/@i_3) endphoneme phoneme @U - vowel starttype (@) endtype (u) + vowel starttype #@ endtype #u length 260 - formants vdiph/@u_3 + FMT(vdiph/@u_3) endphoneme phoneme oU - vowel starttype (o) endtype (u) + vowel starttype #o endtype #u length 260 - formants vdiph/ou_2 + FMT(vdiph/ou_2) endphoneme phoneme iI - vowel starttype (i) endtype (i) + vowel starttype #i endtype #i length 250 - formants vdiph/ii + FMT(vdiph/ii) endphoneme phoneme yI - vowel starttype (@) endtype (i) + vowel starttype #@ endtype #i length 210 - formants vdiph/i#i + FMT(vdiph/i#i) endphoneme phoneme yU - vowel starttype (@) endtype (u) + vowel starttype #@ endtype #u length 230 - formants vdiph2/uw_3 + FMT(vdiph2/uw_3) endphoneme phoneme ea - vowel starttype (e) endtype (a) + vowel starttype #e endtype #a length 250 - formants vdiph2/ea + FMT(vdiph2/ea) endphoneme phoneme eo - vowel starttype (e) endtype (o) + vowel starttype #e endtype #o length 270 - formants vdiph2/eo + FMT(vdiph2/eo) endphoneme phoneme e[u - vowel starttype (e) endtype (u) + vowel starttype #e endtype #u length 250 - formants vdiph2/e[u + FMT(vdiph2/e[u) endphoneme phoneme Oa - vowel starttype (o) endtype (a) + vowel starttype #o endtype #a length 250 - formants vdiph2/oa + FMT(vdiph2/oa) endphoneme // Consonants phoneme r - liquid starttype #r endtype #r - length 100 - lengthmod 7 - beforenotvowel r/ + liquid trill - formants r/rr - after _ r/rr - after t r/trr p r/trr k r/trr - before _ r/r_ + lengthmod 7 + IF nextPh(isNotVowel) THEN + ChangePhoneme(r/) + ENDIF + + NextVowelStarts + VowelStart(r/r@, -15) + VowelStart(r/ra, -15) + VowelStart(r/re, -15) + VowelStart(r/ri, -15) + VowelStart(r/ro, -15) + VowelStart(r/ru, -15) + EndSwitch + + IF prevPh(isVowel) THEN + VowelEnding(r/xr, -50) + ENDIF + + IF prevPh(t) OR prevPh(p) OR prevPh(k) THEN + FMT(r/trr) + ENDIF + FMT(r/rr) endphoneme phoneme l; - liquid starttype l - vowelout colr=1 - length 100 + liquid lengthmod 7 - beforenotvowel l/ - formants l/l - after _ l/_l - after t l/tl - after l/ l/l_long // double l, make it longer -endphoneme + + CALL base/l + Vowelout colr=1 + endphoneme + phoneme m; vcd blb nasal - vowelout f1=2 f2=1000 -500 -350 f3=200 80 brk colr=1 - starttype m endtype m - length 100 lengthmod 4 - formants NULL - after _ m/_m - before _ m/m_ - before (r) m/mj + + CALL base/m + Vowelout f1=2 f2=1000 -500 -350 f3=200 80 brk colr=1 endphoneme phoneme n; vcd alv nasal - vowelout f1=2 f2=1700 -300 250 f3=200 80 rms=20 brk colr=1 - starttype n endtype n - length 100 lengthmod 4 - formants NULL - after _ n/_n - after n n/_n // lengthen [nn] - before _ n/n_ - before (r) n/nj + + CALL base/n + Vowelout f1=2 f2=1700 -300 250 f3=200 80 rms=20 brk colr=1 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 colr=1 lengthmod 2 - wave ustop/p_unasp - before _ ustop/p_unasp_%80 - before r ustop/pr - before l ustop/pl - switchvoicing b + voicingswitch b + CALL base2/p + Vowelout f1=0 f2=1000 -500 -350 f3=-300 80 rms=30 colr=1 endphoneme phoneme t; // dental variant of /t/ vls dnt stop - vowelin f1=0 f2=1700 100 300 f3=0 80 - vowelout f1=0 f2=1700 100 250 f3=0 80 rms=20 colr=1 lengthmod 2 - wave ustop/t_dnt%50 - before _ ustop/t_dnt%35 - switchvoicing d + voicingswitch d + CALL base2/t + Vowelout f1=0 f2=1700 100 250 f3=0 80 rms=20 colr=1 endphoneme phoneme ts; vls alv afr sibilant - vowelin f1=0 f2=1700 -300 300 f3=-100 80 - vowelout f1=0 f2=1700 -300 250 f3=-100 80 rms=20 colr=1 lengthmod 2 - wave ustop/ts - before _ ustop/ts_ + CALL base2/ts + Vowelout f1=0 f2=1700 -300 250 f3=-100 80 rms=20 colr=1 endphoneme phoneme f; vls lbd frc - vowelout f1=0 f2=1000 -500 -350 f3=-200 80 colr=1 lengthmod 3 - wave ufric/f - before _ ufric/f_ - switchvoicing v + voicingswitch v + CALL base/f + Vowelout f1=0 f2=1000 -500 -350 f3=-200 80 colr=1 endphoneme + phoneme s; vls alv frc sibilant - vowelin f1=0 f2=1700 -300 300 f3=-100 80 - vowelout f1=0 f2=1700 -300 250 f3=-100 80 rms=20 colr=1 + voicingswitch z; lengthmod 3 - wave ufric/s_pzd%50 - switchvoicing z; + Vowelin f1=0 f2=1700 -300 300 f3=-100 80 + Vowelout f1=0 f2=1700 -300 250 f3=-100 80 rms=20 colr=1 + WAV(ufric/s_pzd, 50) endphoneme phoneme S; vls pla frc sibilant - vowelin f1=0 f2=2100 100 300 f3=-100 80 - vowelout f1=0 f2=2100 100 300 f3=-100 80 colr=1 - length 100 + voicingswitch Z; lengthmod 3 - wave ufric/sh_pzd - switchvoicing Z; + Vowelin f1=0 f2=2100 100 300 f3=-100 80 + Vowelout f1=0 f2=2100 100 300 f3=-100 80 colr=1 + WAV(ufric/sh_pzd) endphoneme phoneme b; vcd blb stop - vowelout f1=2 f2=1000 -500 -300 f3=-300 80 brk colr=1 - formants b/b+x/b - before (i) b/bi+x/b + voicingswitch p; lengthmod 5 - switchvoicing p + Vowelout f1=2 f2=1000 -500 -300 f3=-300 80 brk colr=1 + + IF nextPh(#i) THEN + FMT(b/bi) addWav(x/b) + ENDIF + FMT(b/b) addWav(x/b) endphoneme phoneme d; // dental variant of /d/ vcd dnt stop - vowelin f1=2 f2=1700 100 300 f3=0 80 - vowelout f1=2 f2=1700 100 300 f3=0 80 colr=1 - formants d/d+x/d_dnt%110 - before _ d/d_+x/d_ - before r d/dr+x/d_dnt%110 - after _ NULL - after @ d/xd + voicingswitch t; lengthmod 5 - switchvoicing t + CALL base2/d + Vowelin f1=2 f2=1700 100 300 f3=0 80 + Vowelout f1=2 f2=1700 100 300 f3=0 80 colr=1 endphoneme + phoneme *; // flap vcd alv flp - vowelout f1=3 f2=1700 -300 300 f3=-300 80 rms=35 len=15 colr=1 - formants d/tap+r3/rx - vowelin f1=0 f2=1700 -300 300 f3=-400 80 - before (i) d/tap_i+r3/rx lengthmod 2 + Vowelout f1=3 f2=1700 -300 300 f3=-300 80 rms=35 len=15 colr=1 + IF nextPh(#i) THEN + Vowelin f1=0 f2=1700 -300 300 f3=-400 80 + FMT(d/tap_i) addWav(r3/rx) + ENDIF + FMT(d/tap) addWav(r3/rx) endphoneme phoneme v; vcd lbd frc - vowelin f1=0 f2=1000 -300 -200 f3=-300 100 - vowelout f1=0 f2=1000 -500 -300 f3=-300 60 len=50 colr=1 lengthmod 6 - formants voc/v+vocw/v - before _ voc/v_+vocw/v - switchvoicing f + voicingswitch f; + Vowelin f1=0 f2=1000 -300 -200 f3=-300 100 + Vowelout f1=0 f2=1000 -500 -300 f3=-300 60 len=50 colr=1 + IF nextPh(isPause2) THEN + FMT(voc/v_) addWav(vocw/v) + ENDIF + FMT(voc/v) addWav(vocw/v) endphoneme + phoneme z; vcd alv frc sibilant - vowelout f1=0 f2=1700 -300 300 f3=-100 60 len=50 colr=1 - formants voc/z+ufric/s_ - before _ voc/z_+ufric/s_ lengthmod 6 - switchvoicing s + voicingswitch s; + Vowelout f1=0 f2=1700 -300 300 f3=-100 60 len=50 colr=1 + IF nextPh(isPause2) THEN + FMT(voc/z_) addWav(ufric/s_) + ENDIF + FMT(voc/z) addWav(ufric/s_) endphoneme phoneme Z; vcd pla frc sibilant - vowelin f1=0 f2=2000 0 300 f3=-200 80 colr=1 - vowelout f1=2 f2=2000 0 300 f3=-200 80 brk - formants voc/zh+vocw/zh - before _ voc/zh_+vocw/zh lengthmod 6 - switchvoicing S + voicingswitch S; + Vowelin f1=0 f2=2000 0 300 f3=-200 80 colr=1 + Vowelout f1=2 f2=2000 0 300 f3=-200 80 brk + IF nextPh(isPause2) THEN + FMT(voc/zh_) addWav(vocw/zh) + ENDIF + FMT(voc/zh) addWav(vocw/zh) endphoneme - diff --git a/phsource/ph_russian b/phsource/ph_russian index 94942097..b5ea8768 100755 --- a/phsource/ph_russian +++ b/phsource/ph_russian @@ -1,68 +1,72 @@ phoneme l - liquid - length 100 - lengthmod 7 - beforenotvowel l/2 // use 'dark' [l] after a vowel - formants l/l - after _ l/_l t l/tl + import_phoneme en/l endphoneme phoneme r - liquid starttype #r endtype #r - length 100 - lengthmod 7 - beforenotvowel r/ + liquid trill - formants r/rr - after _ r/rr - after t r/trr p r/trr k r/trr - before _ r/r_ + lengthmod 7 + + NextVowelStarts + VowelStart(r/r@, -15) + VowelStart(r/ra, -15) + VowelStart(r/re, -15) + VowelStart(r/ri, -15) + VowelStart(r/ro, -15) + VowelStart(r/ru, -15) + EndSwitch + + IF nextPh(isNotVowel) THEN + ChangePhoneme(r/) + ENDIF + IF prevPhW(t) OR prevPhW(p) OR prevPhW(k) THEN + FMT(r/trr) + ENDIF + FMT(r/rr) endphoneme phoneme r/ // used for [r] when not preceding a vowel liquid - length 100 - lengthmod 2 // - formants r3/r_+r3/rx - before n r3/r_n+r3/rx - after _ r/rr - after t r/trr p r/trr k r/trr + lengthmod 2 + IF nextPh(n) THEN + FMT(r3/r_n) addWav(r3/rx) + ENDIF + FMT(r3/r_) addWav(r3/rx) endphoneme phoneme ts - vls alv afr sibilant - vowelin f1=0 f2=1700 -300 300 f3=-100 80 - vowelout f1=0 f2=1700 -300 250 f3=-100 80 rms=20 - lengthmod 2 - wave ustop/ts - before _ ustop/ts_ + import_phoneme consonants/ts endphoneme phoneme dZ; vcd pal afr sibilant palatal - vowelin f1=2 f2=2700 400 600 f3=300 80 rate len=70 - formants dzh/dzh+x/dz_pzd - before _ dzh/dzh_+x/dzh_ - after _ NULL - after @ dzh/xdzh + voicingswitch tS; lengthmod 5 - switchvoicing ts; + Vowelin f1=2 f2=2700 400 600 f3=300 80 rate len=70 + + IF PreVoicing THEN + FMT(dzh/xdzh) + ENDIF + + IF nextPh(isPause2) THEN + FMT(dzh/dzh_) addWav(x/dzh_) + ENDIF endphoneme phoneme tS; vls pal afr sibilant palatal - vowelin f1=0 f2=2700 400 600 f3=300 80 rate len=70 + voicingswitch dZ; lengthmod 2 - wave ustop/ts_pzd - before _ ustop/ts_pzd - switchvoicing dz; + Vowelin f1=0 f2=2700 400 600 f3=300 80 rate len=70 + + WAV(ustop/ts_pzd) endphoneme @@ -70,73 +74,37 @@ endphoneme // Palatalized versions of consonants phoneme t - vls dnt stop - vowelin f1=0 f2=1600 -300 300 f3=-100 80 - vowelout f1=0 f2=1600 -300 250 f3=-100 80 rms=20 - lengthmod 2 - wave ustop/t_dnt%60 - before _ ustop/t_dnt%35 - before r ustop/tr - switchvoicing d + import_phoneme pl/t endphoneme phoneme t; - vls pal stop palatal - vowelin f1=0 f2=2700 400 600 f3=300 80 rate len=70 - vowelout f1=1 f2=2700 400 600 f3=200 70 len=50 - lengthmod 2 - wave ustop/t_pzd%60 - before _ ustop/t_pzd%30 - switchvoicing d; + import_phoneme pl/t; endphoneme - phoneme d - vcd dnt stop - vowelin f1=2 f2=1500 -300 300 f3=-150 80 - vowelout f1=2 f2=1500 -300 300 f3=-150 80 - formants d/d+x/d_dnt%110 - before _ d/d_+x/d_ - before r d/dr+x/d_dnt%110 - after _ NULL - after @ d/xd - lengthmod 5 - switchvoicing t + import_phoneme pl/d endphoneme phoneme d; - vcd alv stop palatal - vowelin f1=2 f2=2700 400 600 f3=200 80 rate len=80 - vowelout f1=2 f2=2700 400 600 f3=200 80 rate len=100 - formants d/d+x/d_pzd%80 - before _ d/d_+x/d_pzd%40 - before r d/dr+x/d_pzd%80 - after _ NULL - after @ d/xd_pzd - lengthmod 5 - switchvoicing t; + import_phoneme pl/d; +endphoneme + +phoneme m; + import_phoneme ro/m; endphoneme phoneme I^ // "silent i", palatilizes the preceding consonant - vowel starttype (i) endtype (i) - length 70 + vowel starttype #i endtype #i unstressed nonsyllabic - formants vwl_ru/ii- - beforevowel ; - after m; vwl_ro/mi -endphoneme - -phoneme m; - vcd blb nasal - vowelout f1=2 f2=1000 -500 -350 f3=200 80 brk colr=1 - starttype m endtype m - length 100 - lengthmod 4 - formants NULL - after _ m/_m - before _ m/m_ - before (r) m/mj + Length 70 + IF nextPh(isVowel) THEN + ChangePhoneme(;) + ENDIF + IF prevPh(m;) THEN + FMT(vwl_ro/mi) + ENDIF + FMT(vwl_ru/ii-) endphoneme @@ -146,172 +114,300 @@ endphoneme //******************************************************************* phoneme i - vowel starttype (i) endtype (i) - length 100 - formants vwl_ru/i + vowel starttype #i endtype #i + Length 100 + FMT(vwl_ru/i) endphoneme + phoneme I# - vowel starttype (i) endtype (i) - length 80 - formants vwl_ru/ii# + vowel starttype #i endtype #i + Length 80 + IF nextVowel(isMaxStress) THEN + ChangePhoneme(I) + ENDIF + IF thisPh(isMaxStress) THEN + ChangePhoneme(i) + ENDIF + FMT(vwl_ru/ii#) endphoneme + phoneme y - vowel starttype (i) endtype (i) - length 100 - formants vwl_ru/i# + vowel starttype #i endtype #i + Length 100 + FMT(vwl_ru/i#) endphoneme + phoneme I - vowel starttype (i) endtype (i) - length 80 - formants vwl_ru/ii + vowel starttype #i endtype #i + Length 80 + + IF thisPh(isMaxStress) THEN + IF prevPhW(j) THEN + ChangePhoneme(a) + ELSE + ChangePhoneme(i) + ENDIF + ENDIF + FMT(vwl_ru/ii) endphoneme + phoneme I2 - vowel starttype (i) endtype (i) - length 80 - formants vwl_ru/ii + vowel starttype #i endtype #i + Length 80 + IF thisPh(isMaxStress) THEN + ChangePhoneme(e) + ENDIF + IF prevPhW(isPalatal) THEN + ChangePhoneme(I) + ENDIF + FMT(vwl_ru/ii) endphoneme + phoneme I3 - vowel starttype (i) endtype (i) - length 80 - formants vwl_ru/ii + vowel starttype #i endtype #i + Length 80 + IF thisPh(isMaxStress) THEN + IF prevPhW(j) THEN + ChangePhoneme(e) + ELSE + ChangePhoneme(ja) + ENDIF + ENDIF + IF prevPhW(isPalatal) THEN + ChangePhoneme(I) + ENDIF + FMT(vwl_ru/ii) endphoneme + phoneme E - vowel starttype (e) endtype (e) - length 200 - formants vwl_ru/e + vowel starttype #e endtype #e + Length 200 + FMT(vwl_ru/e) endphoneme + phoneme E# - vowel starttype (e) endtype (e) - length 100 - formants vwl_ru/E# + vowel starttype #e endtype #e + Length 100 + IF thisPh(isMaxStress) THEN + IF prevPhW(j) THEN + ChangePhoneme(e) + ELSE + ChangePhoneme(E) + ENDIF + ENDIF + FMT(vwl_ru/E#) endphoneme + phoneme E2 - vowel starttype (e) endtype (e) - length 80 - formants vwl_ru/E@ + vowel starttype #e endtype #e + Length 80 + IF nextVowel(isMaxStress) THEN + IF prevPh(j) THEN + ChangePhoneme(I3) + ELSE + ChangePhoneme(E#) + ENDIF + ENDIF + + IF thisPh(isMaxStress) THEN + IF prevPhW(j) THEN + ChangePhoneme(e) + ELSE + ChangePhoneme(E) + ENDIF + ENDIF + + FMT(vwl_ru/E@) endphoneme + phoneme E3 - vowel starttype (e) endtype (e) - length 80 - formants vwl_ru/E@ + vowel starttype #e endtype #e + Length 80 + IF nextVowel(isMaxStress) THEN + ChangePhoneme(I) + ENDIF + IF thisPh(isMaxStress) THEN + ChangePhoneme(e) + ENDIF + IF prevPhW(isPalatal) THEN + ChangePhoneme(E2) + ENDIF + FMT(vwl_ru/E@) endphoneme -phoneme A - vowel starttype (a) endtype (a) - length 100 - formants vwl_ru/a -endphoneme phoneme o - vowel starttype (o) endtype (o) - length 100 - formants vwl_ru/o + vowel starttype #o endtype #o + Length 100 + FMT(vwl_ru/o) endphoneme + phoneme O - vowel starttype (o) endtype (o) - length 80 - formants vwl_ru/oo + vowel starttype #o endtype #o + Length 80 + IF prevPhW(isPalatal) THEN + ChangePhoneme(8) + ENDIF + IF thisPh(isMaxStress) THEN + ChangePhoneme(o) + ENDIF endphoneme + phoneme u - vowel starttype (u) endtype (u) - length 80 - formants vwl_ru/u + vowel starttype #u endtype #u + Length 80 + FMT(vwl_ru/u) endphoneme phoneme u# - vowel starttype (u) endtype (u) - length 80 - formants vwl_ru/u# + vowel starttype #u endtype #u + Length 80 + FMT(vwl_ru/u#) endphoneme phoneme u" - vowel starttype (u) endtype (u) - length 150 - formants vwl_ru/u#u + vowel starttype #u endtype #u + Length 150 + FMT(vwl_ru/u#u) endphoneme phoneme 8 - vowel starttype (o) endtype (o) - length 150 - formants vwl_ru/8 - reduceto V 4 + vowel starttype #o endtype #o + Length 150 + ChangeIfNotStressed(V) + FMT(vwl_ru/8) endphoneme phoneme e - vowel starttype (e) endtype (e) - length 100 - formants vwl_ru/ee + vowel starttype #e endtype #e + Length 100 + FMT(vwl_ru/ee) endphoneme phoneme ju - vowel starttype (u) endtype (u) - length 190 - formants vwl_ru/ju + vowel starttype #u endtype #u + Length 190 + FMT(vwl_ru/ju) endphoneme phoneme ja - vowel starttype (i) endtype (a) - length 200 - formants vwl_ru/ja -endphoneme - -phoneme V - vowel starttype (a) endtype (@) - length 80 - formants vowel/V_2 - unstressed + vowel starttype #i endtype #a + Length 200 + FMT(vwl_ru/ja) endphoneme phoneme V# - vowel starttype (a) endtype (@) - length 80 - formants vowel/V_2 + vowel starttype #a endtype #@ unstressed + Length 80 +// IF nextVowel(isMaxStress) THEN + // not needed? because V# is only used at end-of-word +// ChangePhoneme(I3) +// ENDIF + + IF thisPh(isMaxStress) THEN + IF prevPhW(j) THEN + ChangePhoneme(A) + ELSE + ChangePhoneme(ja) + ENDIF + ENDIF + + IF prevPhW(isPalatal) THEN + ChangePhoneme(V) + ENDIF + + FMT(vowel/V_2) endphoneme -//phoneme U -// vowel starttype (u) endtype (u) -// length 140 -// formants vowel/uu -// unstressed -//endphoneme phoneme Y // will not be used in future - vowel starttype (u) endtype (u) - length 140 - formants vowel/ii# + vowel starttype #u endtype #u unstressed + Length 140 + FMT(vowel/ii#) endphoneme + +phoneme A + vowel starttype #a endtype #a + Length 100 + FMT(vwl_ru/a) +endphoneme + + phoneme a - vowel starttype (a) endtype (a) - formants vwl_ru/aa - length 100 + vowel starttype #a endtype #a + Length 100 + + IF prevPhW(j) THEN + ELSE + IF thisPh(isMaxStress) THEN + IF prevPhW(isPalatal) THEN + ChangePhoneme(ja) + ELSE + ChangePhoneme(A) + ENDIF + ELSE + IF prevPhW(isPalatal) THEN + ChangePhoneme(I) + ENDIF + ENDIF + ENDIF + + IF thisPh(isWordEnd) THEN + FMT(vowel/a#_3) + ENDIF + FMT(vwl_ru/aa) endphoneme + +phoneme V + vowel starttype #a endtype #@ + Length 80 + unstressed + + IF nextVowel(isMaxStress) THEN + ChangePhoneme(a) + ENDIF + + IF thisPh(isMaxStress) THEN + IF prevPhW(j) THEN + ChangePhoneme(a) + ELIF prevPhW(isPalatal) THEN + ChangePhoneme(ja) + ELSE + ChangePhoneme(A) + ENDIF + ENDIF + + FMT(vowel/V_2) +endphoneme + + phoneme a# - vowel starttype (a) endtype (a) - formants vowel/a#_3 - length 100 + vowel starttype #a endtype #a + Length 100 + FMT(vowel/a#_3) endphoneme phoneme R4 liquid - vowelin f1=0 f2=1500 -300 300 f3=-200 80 rms=60 brk - vowelout f1=2 f2=1500 -300 300 f3=-200 80 - formants r3/r_ru2+r3/r_ru%50 lengthmod 6 + Vowelin f1=0 f2=1500 -300 300 f3=-200 80 rms=60 brk + Vowelout f1=2 f2=1500 -300 300 f3=-200 80 + FMT(r3/r_ru2) addWav(r3/r_ru, 50) endphoneme diff --git a/phsource/ph_serbian b/phsource/ph_serbian index f4eed0fa..df49d7c4 100644 --- a/phsource/ph_serbian +++ b/phsource/ph_serbian @@ -4,53 +4,59 @@ // to be included here. phoneme I - vowel starttype (i) endtype (i) + vowel starttype #i endtype #i length 120 - formants vowel/ii_6 - linkout ; + IfNextVowelAppend(;) + FMT(vowel/ii_6) endphoneme phoneme & - vowel starttype (a) endtype (a) + vowel starttype #a endtype #a length 140 - formants vowel/a# + FMT(vowel/a#) endphoneme phoneme r* // this is [R] from Slovak/Czech liquid - vowelin f1=0 f2=1700 -300 300 f3=-300 80 - vowelout f1=2 f2=1700 -300 300 f3=-300 80 brk - formants r3/r_trill+r3/r_trill.wav%50 trill lengthmod 6 + Vowelin f1=0 f2=1700 -300 300 f3=-300 80 + Vowelout f1=2 f2=1700 -300 300 f3=-300 80 brk + FMT(r3/r_trill) addWav(r3/r_trill.wav, 50) endphoneme phoneme t // dental variant of /t/ vls dnt stop - vowelin f1=0 f2=1600 -300 300 f3=-100 80 - vowelout f1=0 f2=1600 -300 250 f3=-100 80 rms=20 lengthmod 2 - wave ustop/t_sr%50 - before _ ustop/t_sr%35 - switchvoicing d + voicingswitch d + Vowelin f1=0 f2=1600 -300 300 f3=-100 80 + Vowelout f1=0 f2=1600 -300 250 f3=-100 80 rms=20 + IF nextPh(isPause2) THEN + WAV(ustop/t_sr, 35) + ENDIF + WAV(ustop/t_sr, 50) endphoneme phoneme d vcd alv stop - vowelin f1=2 f2=1700 -300 300 f3=-100 80 amp=16 - vowelout f1=2 f2=1700 -300 300 f3=-100 80 - formants d/d_dnt+ustop/t_sr%50 - before _ d/d_dnt+ustop/t_sr - before r d/d_dnt+ustop/t_sr%50 - after _ d/d_dnt+ustop/t_sr - after @ d/d_dnt+ustop/t_sr lengthmod 5 - switchvoicing t + voicingswitch t + Vowelin f1=2 f2=1700 -300 300 f3=-100 80 amp=16 + Vowelout f1=2 f2=1700 -300 300 f3=-100 80 + + IF PreVoicing THEN + FMT(d/xd) + ENDIF + + IF nextPh(isPause2) THEN + FMT(d/d_dnt) addWav(ustop/t_sr) + ENDIF + FMT(d/d_dnt) addWav(ustop/t_sr, 50) endphoneme @@ -58,12 +64,12 @@ endphoneme phoneme x vls vel frc lengthmod 3 - wave ufric/x_sr%70 // no vowel following - before (a) ufric/x_sr - before (e) ufric/ch_sr - before (i) ufric/ch_sr - before (o) ufric/x_sr - before (u) ufric/x_sr + IF nextPh(#i) OR nextPh(#e) THEN + WAV(ufric/ch_sr) + ELIF nextPh(isVowel) THEN + WAV(ufric/x_sr) + ENDIF + WAV(ufric/x_sr, 70) // no vowel following endphoneme @@ -71,84 +77,86 @@ endphoneme phoneme h vls vel frc lengthmod 3 - wave ufric/x_sr%70 // no vowel following - before (@) h/h@ - before (a) ufric/x_sr - before (e) ufric/ch_sr - before (i) ufric/ch_sr - before (o) ufric/x_sr - before (u) ufric/x_sr + IF nextPh(#@) THEN + WAV(h/h@) + ELIF nextPh(#i) OR nextPh(#e) THEN + WAV(ufric/ch_sr) + ELIF nextPh(isVowel) THEN + WAV(ufric/x_sr) + ENDIF + WAV(ufric/x_sr, 70) // no vowel following endphoneme - - phoneme dZ vcd pla afr sibilant - vowelin f1=2 f2=2300 200 400 f3=100 80 - vowelout f1=2 f2=2300 250 300 f3=100 80 brk - formants dzh/dzh+ufric/sh_pzd2 - before _ dzh/dzh+ufric/sh_pzd2 - after _ NULL - after @ dzh/dzh+ufric/sh_pzd2 lengthmod 5 - switchvoicing tS + voicingswitch tS + Vowelin f1=2 f2=2300 200 400 f3=100 80 + Vowelout f1=2 f2=2300 250 300 f3=100 80 brk + + IF PreVoicing THEN + FMT(dzh/xdzh) + ENDIF + + FMT(dzh/dzh) addWav(ufric/sh_pzd2) endphoneme phoneme dZ; vcd pla afr sibilant palatal - vowelin f1=2 f2=2700 400 600 f3=300 80 rate len=70 - formants dzh/dzh+ustop/ts_sr - before _ dzh/dzh+ustop/ts_sr - after _ NULL - after @ dzh/dzh+ustop/ts_sr lengthmod 5 - switchvoicing tS; + voicingswitch tS; + Vowelin f1=2 f2=2700 400 600 f3=300 80 rate len=70 + + IF PreVoicing THEN + FMT(dzh/xdzh) + ENDIF + + FMT(dzh/dzh) addWav(ustop/ts_sr) endphoneme phoneme tS vls pla afr sibilant - vowelin f1=0 f2=2300 200 400 f3=-100 80 lengthmod 2 - wave ustop/tsh_sr%50 - before _ ustop/tsh_sr%50 - switchvoicing dZ + voicingswitch dZ + Vowelin f1=0 f2=2300 200 400 f3=-100 80 + WAV(ustop/tsh_sr, 50) endphoneme phoneme tS; vls pal afr sibilant palatal - vowelin f1=0 f2=2700 400 600 f3=300 80 rate len=70 lengthmod 2 - wave ustop/ts_sr - before _ ustop/ts_sr - switchvoicing dZ; + voicingswitch dZ; + Vowelin f1=0 f2=2700 400 600 f3=300 80 rate len=70 + WAV(ustop/ts_sr) endphoneme - - phoneme Z vcd pla frc sibilant - vowelin f1=0 f2=2000 0 300 f3=-200 80 - vowelout f1=2 f2=2000 0 300 f3=-200 80 brk - formants voc/zh+ufric/sh_pzd2%60 - before _ voc/zh+ufric/sh_pzd2%50 lengthmod 6 - switchvoicing S + voicingswitch S + Vowelin f1=0 f2=2000 0 300 f3=-200 80 + Vowelout f1=2 f2=2000 0 300 f3=-200 80 brk + IF nextPh(isPause2) THEN + FMT(voc/zh) addWav(ufric/sh_pzd2, 50) + ENDIF + FMT(voc/zh) addWav(ufric/sh_pzd2, 60) endphoneme phoneme S vls pla frc sibilant - vowelin f1=0 f2=2100 100 300 f3=-100 80 - vowelout f1=0 f2=2100 100 300 f3=-100 80 - length 100 lengthmod 3 - wave ufric/sh_pzd2%70 - before _ ufric/sh_pzd2%60 - switchvoicing Z + voicingswitch Z + Vowelin f1=0 f2=2100 100 300 f3=-100 80 + Vowelout f1=0 f2=2100 100 300 f3=-100 80 + IF nextPh(isPause2) THEN + WAV(ufric/sh_pzd2, 60) + ENDIF + WAV(ufric/sh_pzd2, 70) endphoneme diff --git a/phsource/ph_slovak b/phsource/ph_slovak index 07108eaa..2737e9d6 100644 --- a/phsource/ph_slovak +++ b/phsource/ph_slovak @@ -1,201 +1,191 @@ - + phoneme i - vowel starttype (i) endtype (i) + vowel starttype #i endtype #i length 110 - formants vowel/ii_3 - linkout ; + IfNextVowelAppend(;) + FMT(vowel/ii_3) endphoneme phoneme i: - vowel starttype (i) endtype (i) + vowel starttype #i endtype #i length 260 - formants vowel/i_3 - linkout ; + IfNextVowelAppend(;) + FMT(vowel/i_3) endphoneme phoneme & - vowel starttype (e) endtype (e) + vowel starttype #e endtype #e length 120 - formants vowel/ee_6 + FMT(vowel/ee_6) endphoneme phoneme e - vowel starttype (e) endtype (e) + vowel starttype #e endtype #e length 120 - formants vowel/e_mid2 + FMT(vowel/e_mid2) endphoneme phoneme e: - vowel starttype (e) endtype (e) + vowel starttype #e endtype #e length 290 - formants vowel/e_mid + FMT(vowel/e_mid) endphoneme phoneme a - vowel starttype (a) endtype (a) + vowel starttype #a endtype #a length 120 - formants vowel/a + FMT(vowel/a) endphoneme phoneme a: - vowel starttype (a) endtype (a) + vowel starttype #a endtype #a length 290 - formants vowel/a + FMT(vowel/a) endphoneme phoneme o - vowel starttype (o) endtype (o) + vowel starttype #o endtype #o length 120 - formants vowel/oo_1 + FMT(vowel/oo_1) endphoneme phoneme o: - vowel starttype (o) endtype (o) + vowel starttype #o endtype #o length 290 - formants vowel/oo_1 + FMT(vowel/oo_1) endphoneme phoneme u - vowel starttype (u) endtype (u) + vowel starttype #u endtype #u length 110 - formants vowel/u_2 + FMT(vowel/u_2) endphoneme phoneme u: - vowel starttype (u) endtype (u) + vowel starttype #u endtype #u length 280 - formants vowel/u_bck + FMT(vowel/u_bck) endphoneme phoneme aU - vowel starttype (a) endtype (u) + vowel starttype #a endtype #u length 270 - formants vdiph/au_4 + FMT(vdiph/au_4) endphoneme phoneme eU - vowel starttype (e) endtype (u) + vowel starttype #e endtype #u length 260 - formants vdiph/eu + FMT(vdiph/eu) endphoneme phoneme oU - vowel starttype (o) endtype (u) + vowel starttype #o endtype #u length 260 - formants vdiph/ou_2 + FMT(vdiph/ou_2) endphoneme phoneme aI - vowel starttype (a) endtype (i) + vowel starttype #a endtype #i length 270 - formants vdiph/ai + FMT(vdiph/ai) endphoneme phoneme eI - vowel starttype (e) endtype (i) + vowel starttype #e endtype #i length 260 - formants vdiph/eei_3 + FMT(vdiph/eei_3) endphoneme phoneme r- - vowel starttype (@) endtype (@) + vowel starttype #@ endtype #@ length 220 - formants vowelr/r-voc + FMT(vowelr/r-voc) endphoneme phoneme r: - vowel starttype (@) endtype (@) + vowel starttype #@ endtype #@ length 300 - formants vowelr/r-voc + FMT(vowelr/r-voc) endphoneme phoneme R^ // Czech r-caron vcd pla frc sibilant - vowelin f1=0 f2=1700 -300 300 f3=-300 80 - vowelout f1=2 f2=1700 -300 300 f3=-300 80 brk - formants voc/zh+r3/rz_cs%50 lengthmod 6 + Vowelin f1=0 f2=1700 -300 300 f3=-300 80 + Vowelout f1=2 f2=1700 -300 300 f3=-300 80 brk + FMT(voc/zh) addWav(r3/rz_cs, 50) endphoneme phoneme R^/ // Czech r-caron (weaker, for after p,f,t,k) vcd pla frc sibilant - vowelin f1=0 f2=1700 -300 300 f3=-300 80 - vowelout f1=2 f2=1700 -300 300 f3=-300 80 brk - formants voc/zh_2+r3/rz_cs%25 lengthmod 6 + Vowelin f1=0 f2=1700 -300 300 f3=-300 80 + Vowelout f1=2 f2=1700 -300 300 f3=-300 80 brk + FMT(voc/zh_2) addWav(r3/rz_cs, 25) endphoneme phoneme l- - vowel starttype (@) endtype (@) + vowel starttype #@ endtype #@ length 140 - formants vwl_hi/l-voc + FMT(vwl_hi/l-voc) endphoneme + phoneme l: - vowel starttype (@) endtype (@) + vowel starttype #@ endtype #@ length 250 - formants vwl_hi/l-voc + FMT(vwl_hi/l-voc) endphoneme + phoneme l - liquid - length 100 - lengthmod 7 - beforenotvowel l/2 // use 'dark' [l] after a vowel - formants l/l - after _ l/_l t l/tl + import_phoneme en/l // use 'dark' [l] after a vowel endphoneme + phoneme w - liquid - length 100 - beforenotvowel w/ - lengthmod 7 - formants w/w2 - after _ w/w2 + import_phoneme base2/w2 endphoneme + phoneme t vls alv stop - vowelin f1=0 f2=1700 -300 300 f3=-100 80 - vowelout f1=0 f2=1700 -300 250 f3=-100 80 rms=20 lengthmod 2 - wave ustop/t_short - before _ ustop/t_ - switchvoicing d + voicingswitch d + Vowelin f1=0 f2=1700 -300 300 f3=-100 80 + Vowelout f1=0 f2=1700 -300 250 f3=-100 80 rms=20 + IF nextPh(isPause2) THEN + WAV(ustop/t_) + ENDIF + WAV(ustop/t_short) 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 + voicingswitch b + Vowelin f1=0 f2=1000 -50 -100 f3=-200 80 + Vowelout f1=0 f2=1000 -500 -350 f3=-300 80 rms=30 + IF nextPh(isPause2) THEN + WAV(ustop/p_unasp, 80) + ELIF nextPh(l) THEN + WAV(ustop/pl) + ENDIF + WAV(ustop/p_unasp, 120) 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 + import_phoneme base2/k endphoneme - diff --git a/phsource/ph_spanish b/phsource/ph_spanish index dc8e451c..0e51d0fd 100644 --- a/phsource/ph_spanish +++ b/phsource/ph_spanish @@ -4,82 +4,82 @@ //==================================================== phoneme e - vowel starttype (e) endtype (e) + vowel starttype #e endtype #e length 170 - formants vowel/e_mid2 + FMT(vowel/e_mid2) endphoneme phoneme E - vowel starttype (e) endtype (e) + vowel starttype #e endtype #e length 180 - formants vowel/e_mid + FMT(vowel/e_mid) endphoneme phoneme O - vowel starttype (o) endtype (o) + vowel starttype #o endtype #o length 170 - formants vowel/oo + FMT(vowel/oo) endphoneme - phoneme g vcd vel stop - vowelin f1=2 f2=2300 200 300 f3=-300 80 - vowelout f1=2 f2=2300 250 300 f3=-300 80 brk - formants g/g+x/g2 // weaker [g] - before _ g/g_+x/g_ - after _ NULL - after @ g/xg lengthmod 5 - switchvoicing k + voicingswitch k + Vowelin f1=2 f2=2300 200 300 f3=-300 80 + Vowelout f1=2 f2=2300 250 300 f3=-300 80 brk + + IF PreVoicing THEN + FMT(g/xg) + ENDIF + + IF nextPh(isPause2) THEN + FMT(g/g_) addWav(x/g_) + ENDIF + FMT(g/g) addWav(x/g2) // weaker [g] endphoneme phoneme D vcd dnt frc - vowelout f1=0 f2=1700 -300 300 f3=-100 60 len=50 - formants voc/dh+vocw/dh - before _ voc/dh_+vocw/dh%40 lengthmod 6 - switchvoicing T + voicingswitch T + CALL base/D + IF nextPh(isPause2) THEN + FMT(voc/dh_) addWav(vocw/dh, 40) // weaker + ENDIF endphoneme phoneme s vls alv frc sibilant - vowelin f1=0 f2=1700 -300 300 f3=-100 80 - vowelout f1=0 f2=1700 -300 250 f3=-100 80 rms=20 lengthmod 3 - wave ufric/s - before _ ufric/s_%60 // quieter 's' at end of word - before p ufric/s! - before t ufric/s! - before k ufric/s! - switchvoicing z -endphoneme + voicingswitch z + Vowelin f1=0 f2=1700 -300 300 f3=-100 80 + Vowelout f1=0 f2=1700 -300 250 f3=-100 80 rms=20 - -phoneme r // TEST flap ?? - vcd alv flp - brkafter - vowelout f1=3 f2=1500 -400 300 f3=-100 80 rms=35 len=50 - vowelin f1=0 f2=1500 -300 300 f3=-100 80 - formants d/tap4+x/d_%30 - lengthmod 3 + IF nextPh(isPause) THEN + WAV(ufric/s_, 60) // quieter 's' at end of word + ELIF nextPh(p) OR nextPh(t) OR nextPh(k) THEN + WAV(ufric/s!) + ENDIF + WAV(ufric/s) endphoneme phoneme v# // a shorter [v], a little towards [b] vcd lbd frc - vowelin f1=1 f2=1000 -300 -200 f3=-300 100 - vowelout f1=0 f2=1000 -500 -300 f3=-300 60 len=10 lengthmod 6 - formants voc/v2+vocw/v%80 - before _ voc/v_+vocw/v%80 - switchvoicing f + voicingswitch f + Vowelin f1=1 f2=1000 -300 -200 f3=-300 100 + Vowelout f1=0 f2=1000 -500 -300 f3=-300 60 len=10 + + IF nextPh(isPause2) THEN + FMT(voc/v_) addWav(vocw/v, 80) + ENDIF + FMT(voc/v2) addWav(vocw/v, 80) endphoneme diff --git a/phsource/ph_swahili b/phsource/ph_swahili index d4479d04..a64dee69 100644 --- a/phsource/ph_swahili +++ b/phsource/ph_swahili @@ -6,114 +6,74 @@ // Vowels phoneme i - vowel starttype (i) endtype (i) + vowel starttype #i endtype #i length 165 - formants vowel/i -// linkout ; + FMT(vowel/i) endphoneme phoneme e - vowel starttype (e) endtype (e) + vowel starttype #e endtype #e length 180 - formants vowel/e_mid2 + FMT(vowel/e_mid2) endphoneme phoneme a/ - vowel starttype (@) endtype (@) + vowel starttype #@ endtype #@ length 180 - formants vowel/a#_2 + FMT(vowel/a#_2) endphoneme phoneme a - vowel starttype (a) endtype (a) + vowel starttype #a endtype #a length 180 - formants vowel/a_5 - reduceto a/ 2 + ChangeIfUnstressed(a/) + FMT(vowel/a_5) endphoneme phoneme o - vowel starttype (o) endtype (o) + vowel starttype #o endtype #o length 180 - formants vowel/0_2 + FMT(vowel/0_2) endphoneme phoneme u - vowel starttype (u) endtype (u) + vowel starttype #u endtype #u length 170 - formants vowel/u_5 + FMT(vowel/u_5) endphoneme phoneme m- - vowel starttype (o) endtype (o) + vowel starttype #o endtype #o length 190 - formants vnasal/m- + FMT(vnasal/m-) endphoneme phoneme n- - vowel starttype (e) endtype (e) + vowel starttype #e endtype #e length 190 - formants vnasal/n- + FMT(vnasal/n-) endphoneme phoneme N- - vowel starttype (e) endtype (e) + vowel starttype #e endtype #e length 190 - formants vnasal/nn- + FMT(vnasal/nn-) endphoneme // Consonants -phoneme r - liquid starttype #r endtype #r - length 100 - lengthmod 7 - beforenotvowel r/ - trill - formants r/rr - after _ r/rr - after t r/trr p r/trr k r/trr - before _ r/r_ -endphoneme - phoneme t // dental variant of /t/ - vls dnt stop - vowelin f1=0 f2=1600 -300 300 f3=-100 80 - vowelout f1=0 f2=1600 -300 250 f3=-100 80 rms=20 - lengthmod 2 - wave ustop/t_dnt%50 - before _ ustop/t_dnt%35 - switchvoicing d + import_phoneme base2/t endphoneme phoneme d // dental variant of /d/ - vcd dnt stop - vowelin f1=2 f2=1500 -300 300 f3=-150 80 - vowelout f1=2 f2=1500 -300 300 f3=-150 80 - formants d/d+x/d_dnt%110 - before _ d/d_+x/d_ - before r d/dr+x/d_dnt%110 - after _ NULL - after @ d/xd - lengthmod 5 - switchvoicing t -endphoneme - -phoneme k - vls vel stop - vowelin f1=0 f2=2300 100 200 f3=-200 80 - vowelout f1=0 f2=2300 300 400 f3=-200 80 rms=20 - lengthmod 2 - wave ustop/k - before _ ustop/k_ - before r ustop/kr - before l ustop/kl - before (i) ustop/ki - switchvoicing g + import_phoneme base2/d endphoneme + diff --git a/phsource/ph_swedish b/phsource/ph_swedish index b872f16f..06d8b24c 100644 --- a/phsource/ph_swedish +++ b/phsource/ph_swedish @@ -9,139 +9,141 @@ //======= phoneme i: - vowel starttype (i) endtype (i) + vowel starttype #i endtype #i length 180 - formants vowel/i_2 - after w w/wi2 - linkout ; + IfNextVowelAppend(;) + IF prevPh(w) THEN + VowelStart(w/wi2) + ENDIF + FMT(vowel/i_2) endphoneme phoneme I - vowel starttype (i) endtype (i) + vowel starttype #i endtype #i length 130 - formants vowel/ii_3 - linkout ; + IfNextVowelAppend(;) + FMT(vowel/ii_3) endphoneme phoneme e: - vowel starttype (e) endtype (e) + vowel starttype #e endtype #e length 210 - formants vowel/e_2 + FMT(vowel/e_2) endphoneme phoneme E - vowel starttype (e) endtype (e) + vowel starttype #e endtype #e length 140 - formants vowel/ee - reduceto E- 2 + ChangeIfUnstressed(E-) + FMT(vowel/ee) endphoneme phoneme E: - vowel starttype (e) endtype (@) + vowel starttype #e endtype #@ length 220 - formants vowel/ee_1 + FMT(vowel/ee_1) endphoneme phoneme E3 - vowel starttype (e) endtype (e) + vowel starttype #e endtype #e length 140 - formants vowel/ee_6 - reduceto @ 0 + ChangeIfDiminished(@) + FMT(vowel/ee_6) endphoneme phoneme E- - vowel starttype (@) endtype (@) + vowel starttype #@ endtype #@ unstressed length 140 - formants vowel/ee#_2 + FMT(vowel/ee#_2) endphoneme phoneme y: - vowel starttype (u) endtype (u) + vowel starttype #u endtype #u length 220 - formants vowel/y_5 + FMT(vowel/y_5) endphoneme phoneme y - vowel starttype (u) endtype (u) + vowel starttype #u endtype #u length 140 - formants vowel/yy_3 + FMT(vowel/yy_3) endphoneme phoneme u- - vowel starttype (u) endtype (u) + vowel starttype #u endtype #u length 200 - formants vowel/u#_2 + FMT(vowel/u#_2) endphoneme phoneme Y: - vowel starttype (@) endtype (@) + vowel starttype #@ endtype #@ length 220 - formants vowel/y#_2 + FMT(vowel/y#_2) endphoneme phoneme W - vowel starttype (@) endtype (@) + vowel starttype #@ endtype #@ length 140 - formants vowel/oe_4 + FMT(vowel/oe_4) endphoneme phoneme 8 - vowel starttype (u) endtype (u) + vowel starttype #u endtype #u length 140 - formants vowel/8_2 + FMT(vowel/8_2) endphoneme phoneme a - vowel starttype (a) endtype (a) + vowel starttype #a endtype #a length 140 - formants vowel/a_5 + FMT(vowel/a_5) endphoneme phoneme a2 - vowel starttype (a) endtype (a) + vowel starttype #a endtype #a length 140 - formants vowel/a#_2 + FMT(vowel/a#_2) endphoneme phoneme & - vowel starttype (a) endtype (a) + vowel starttype #a endtype #a length 140 - formants vowel/& + FMT(vowel/&) endphoneme phoneme A: - vowel starttype (a) endtype (a) + vowel starttype #a endtype #a length 250 - formants vowel/aa_4 + FMT(vowel/aa_4) endphoneme phoneme O - vowel starttype (o) endtype (o) + vowel starttype #o endtype #o length 140 - formants vowel/oo + FMT(vowel/oo) endphoneme phoneme o: - vowel starttype (o) endtype (o) + vowel starttype #o endtype #o length 210 - formants vowel/o + FMT(vowel/o) endphoneme phoneme U - vowel starttype (u) endtype (u) + vowel starttype #u endtype #u length 140 - formants vowel/uu_4 + FMT(vowel/uu_4) endphoneme phoneme u: - vowel starttype (u) endtype (u) + vowel starttype #u endtype #u length 210 - formants vowel/u_bck + FMT(vowel/u_bck) endphoneme @@ -151,30 +153,11 @@ endphoneme //=========== -phoneme r - liquid starttype #r endtype #r - lengthmod 7 - beforenotvowel r/ - trill - formants vwl_sv/r_sv3 - after t r/trr p r/trr k r/trr -endphoneme - - -phoneme r/ // variant of [r] when not preceding a vowel - liquid vowel2 - length 100 - lengthmod 7 // - formants NULL -endphoneme - - phoneme sx // Swedish "sj" sound vls vel frc - vowelin f1=0 f2=2300 300 400 f3=200 100 - vowelout f1=0 f2=2300 300 400 f3=200 100 rms=20 - length 100 lengthmod 3 - wave ufric/sx_sv%60 + Vowelin f1=0 f2=2300 300 400 f3=200 100 + Vowelout f1=0 f2=2300 300 400 f3=200 100 rms=20 + WAV(ufric/sx_sv, 60) endphoneme diff --git a/phsource/ph_tamil b/phsource/ph_tamil index 7e77d231..541ef9b3 100644 --- a/phsource/ph_tamil +++ b/phsource/ph_tamil @@ -2,146 +2,130 @@ // Phonemes for Tamil // This inherits from ph_hindi + + +phoneme a + vowel starttype #a endtype #a + length 130 + ChangeIfNotStressed(V) + FMT(vowel/a) +endphoneme + +phoneme V + vowel starttype #@ endtype #@ + length 130 + FMT(vowel/V_3) +endphoneme + + +phoneme a: + vowel starttype #a endtype #a + length 300 + FMT(vowel/a_5) +endphoneme + + +phoneme e + vowel starttype #e endtype #e + length 130 + FMT(vowel/e) +endphoneme + + +phoneme e: + vowel starttype #e endtype #e + length 250 + FMT(vowel/e) +endphoneme + + +phoneme i + vowel starttype #i endtype #i + length 130 + FMT(vowel/i_6) +endphoneme + + +phoneme i: + vowel starttype #i endtype #i + length 270 + FMT(vowel/i) +endphoneme + + + +phoneme o + vowel starttype #o endtype #o + length 160 + FMT(vowel/o) +endphoneme + + +phoneme o: + vowel starttype #o endtype #o + length 280 + FMT(vowel/o) +endphoneme + + +phoneme u + vowel starttype #u endtype #u + length 110 + ChangeIfNotStressed(U) + FMT(vowel/u_6) +endphoneme + +phoneme U + vowel starttype #u endtype #u + length 110 + FMT(vowel/u#_3) +endphoneme + +phoneme u: + vowel starttype #u endtype #u + length 260 + ChangeIfNotStressed(U:) + FMT(vowel/u_6) +endphoneme + +phoneme U: + vowel starttype #u endtype #u + length 240 + FMT(vowel/u#_3) +endphoneme + +phoneme u- + vowel starttype #u endtype #u + length 130 + FMT(vowel/u#_2) +endphoneme + + +phoneme aI + vowel starttype #a endtype #i + length 230 + FMT(vdiph/ai_8) +endphoneme + +phoneme aU + vowel starttype #a endtype #u + length 200 + FMT(vdiph/aau_3) +endphoneme + + + +phoneme t + import_phoneme base2/t // dental +endphoneme + +// ?? This is standard [v]. Should be it [v] without the fricative noise? +phoneme v + import_phoneme base/v +endphoneme + phoneme : // Lengthen previous vowel by "length" virtual length 50 endphoneme - - -phoneme a - vowel starttype (a) endtype (a) - length 130 - formants vowel/a - reduceto V 4 -endphoneme - -phoneme V - vowel starttype (@) endtype (@) - length 130 - formants vowel/V_3 -endphoneme - - -phoneme a: - vowel starttype (a) endtype (a) - length 300 - formants vowel/a_5 -endphoneme - - -phoneme e - vowel starttype (e) endtype (e) - length 130 - formants vowel/e -endphoneme - - -phoneme e: - vowel starttype (e) endtype (e) - length 250 - formants vowel/e -endphoneme - - -phoneme i - vowel starttype (i) endtype (i) - length 130 - formants vowel/i_6 -endphoneme - - -phoneme i: - vowel starttype (i) endtype (i) - length 300 - formants vowel/i -endphoneme - - - -phoneme o - vowel starttype (o) endtype (o) - length 160 - formants vowel/o -endphoneme - - -phoneme o: - vowel starttype (o) endtype (o) - length 280 - formants vowel/o_3 -endphoneme - - -phoneme u - vowel starttype (u) endtype (u) - length 110 - formants vowel/u - reduceto U 4 -endphoneme - -phoneme U - vowel starttype (u) endtype (u) - length 110 - formants vowel/u#_3 -endphoneme - -phoneme u: - vowel starttype (u) endtype (u) - length 260 - formants vowel/u_6 -endphoneme - -phoneme U: - vowel starttype (u) endtype (u) - length 240 - formants vowel/u#_3 -endphoneme - - - -phoneme u- - vowel starttype (u) endtype (u) - length 130 - formants vowel/u#_2 -endphoneme - - - -phoneme aI - vowel starttype (a) endtype (i) - length 230 - formants vdiph/ai_8 -endphoneme - -phoneme aU - vowel long starttype (a) endtype (u) - length 200 - long - formants vdiph/aau_3 -endphoneme - - - -// ?? This is standard [v]. Should be it [v] without the fricative noise? -phoneme v - vcd lbd frc - vowelin f1=0 f2=1000 -300 -200 f3=-300 100 - vowelout f1=0 f2=1000 -500 -300 f3=-300 60 len=50 - lengthmod 6 - formants voc/v+vocw/v - before _ voc/v_+vocw/v - switchvoicing f -endphoneme - - -phoneme t // dental variant of /t/ - vls dnt stop - vowelin f1=0 f2=1600 -300 300 f3=-100 80 - vowelout f1=0 f2=1600 -300 250 f3=-100 80 rms=20 - lengthmod 2 - wave ustop/t_dnt2%60 - before _ ustop/t_dnt%30 - switchvoicing d -endphoneme - diff --git a/phsource/ph_turkish b/phsource/ph_turkish index 36c698ca..e8e4c6c6 100644 --- a/phsource/ph_turkish +++ b/phsource/ph_turkish @@ -1,94 +1,119 @@ phoneme i - vowel starttype (i) endtype (i) - beforenotvowel2 I + vowel starttype #i endtype #i length 150 - formants vowel/i_6 + IF thisPh(isFinalVowel) THEN + ChangePhoneme(I) + ENDIF + IF nextPh(isNotVowel) AND next2Ph(isNotVowel) THEN + ChangePhoneme(I) + ENDIF + FMT(vowel/i_6) endphoneme phoneme I - vowel starttype (i) endtype (i) + vowel starttype #i endtype #i length 150 - formants vowel/ii_3 + FMT(vowel/ii_3) endphoneme phoneme y - vowel starttype (u) endtype (u) - beforenotvowel2 Y + vowel starttype #u endtype #u length 155 - formants vowel/y_5 + IF thisPh(isFinalVowel) THEN + ChangePhoneme(Y) + ENDIF + IF nextPh(isNotVowel) AND next2Ph(isNotVowel) THEN + ChangePhoneme(Y) + ENDIF + FMT(vowel/y_5) endphoneme phoneme Y - vowel starttype (u) endtype (u) + vowel starttype #u endtype #u length 155 - formants vowel/u# + FMT(vowel/u#) endphoneme phoneme e - vowel starttype (e) endtype (e) - beforenotvowel2 E + vowel starttype #e endtype #e length 180 - formants vowel/e_mid2 + IF thisPh(isFinalVowel) THEN + ChangePhoneme(E) + ENDIF + IF nextPh(isNotVowel) AND next2Ph(isNotVowel) THEN + ChangePhoneme(E) + ENDIF + FMT(vowel/e_mid2) endphoneme phoneme E - vowel starttype (e) endtype (e) + vowel starttype #e endtype #e length 180 - formants vowel/e_mid + FMT(vowel/e_mid) endphoneme phoneme W - vowel starttype (@) endtype (@) + vowel starttype #@ endtype #@ length 180 - formants vowel/oe_2 + FMT(vowel/oe_2) endphoneme phoneme a - vowel starttype (a) endtype (a) + vowel starttype #a endtype #a length 190 - formants vowel/a_5 + FMT(vowel/a_5) endphoneme phoneme u - vowel starttype (u) endtype (u) - beforenotvowel2 U + vowel starttype #u endtype #u length 150 - formants vowel/u_2 + IF thisPh(isFinalVowel) THEN + ChangePhoneme(U) + ENDIF + IF nextPh(isNotVowel) AND next2Ph(isNotVowel) THEN + ChangePhoneme(U) + ENDIF + FMT(vowel/u_2) endphoneme phoneme U - vowel starttype (u) endtype (u) + vowel starttype #u endtype #u length 150 - formants vowel/uu_2 + FMT(vowel/uu_2) endphoneme phoneme u# - vowel starttype (@) endtype (@) + vowel starttype #@ endtype #@ length 150 - formants vowel/u#_7 + FMT(vowel/u#_7) endphoneme phoneme o - vowel starttype (o) endtype (o) - beforenotvowel2 O + vowel starttype #o endtype #o length 190 - formants vowel/o_mid + IF thisPh(isFinalVowel) THEN + ChangePhoneme(O) + ENDIF + IF nextPh(isNotVowel) AND next2Ph(isNotVowel) THEN + ChangePhoneme(O) + ENDIF + FMT(vowel/o_mid) endphoneme phoneme O - vowel starttype (o) endtype (o) + vowel starttype #o endtype #o length 190 - formants vowel/oo + FMT(vowel/oo) endphoneme @@ -101,26 +126,32 @@ endphoneme phoneme c vls pal stop - vowelin f1=0 f2=2700 200 500 f3=400 80 len=60 - vowelout f1=0 f2=2700 300 500 f3=300 80 lengthmod 2 - wave ustop/ki - before _ ustop/ki%80 + Vowelin f1=0 f2=2700 200 500 f3=400 80 len=60 + Vowelout f1=0 f2=2700 300 500 f3=300 80 + IF nextPh(isPause2) THEN + WAV(ustop/ki, 80) + ENDIF + WAV(ustop/ki) endphoneme phoneme J vcd pla stop - vowelin f1=2 f2=2700 400 600 f3=300 80 - vowelout f1=2 f2=2700 400 600 f3=300 80 colr=1 - formants dzh/dz_pzd+ustop/ki%60 lengthmod 5 - switchvoicing c + + IF PreVoicing THEN + FMT(dzh/xdz_pzd) + ENDIF + + Vowelin f1=2 f2=2700 400 600 f3=300 80 + Vowelout f1=2 f2=2700 400 600 f3=300 80 colr=1 + FMT(dzh/dz_pzd) addWav(ustop/ki, 60) endphoneme phoneme l -import_phoneme l en +import_phoneme en/l endphoneme diff --git a/phsource/ph_vi b/phsource/ph_vi index 425ee79d..cf6b6570 100644 --- a/phsource/ph_vi +++ b/phsource/ph_vi @@ -6,44 +6,44 @@ phoneme 1 // ngang tone: level stress - tone 28 32 envelope/p_level NULL + Tone(28, 32, envelope/p_level, NULL) endphoneme phoneme 2 // huyền tone: low falling stress - tone 20 8 envelope/p_fall NULL + Tone(20, 8, envelope/p_fall, NULL) endphoneme -phoneme 3 // sắc tone rising +phoneme 3 // sắc Tone(rising stress - tone 25 50 envelope/p_rise NULL + Tone(25, 50, envelope/p_rise, NULL) endphoneme -phoneme 4 // hỏi tone curve (dipping rising) +phoneme 4 // hỏi Tone(curve (dipping rising) stress - tone 30 5 envelope/p_fallrise NULL + Tone(30, 5, envelope/p_fallrise, NULL) endphoneme phoneme 5 // ngã tone: broken (creaking rising) stress - tone 28 58 envelope/p_214 envelope/vi_5amp + Tone(28, 58, envelope/p_214, envelope/vi_5amp) endphoneme -phoneme 6 // nặng tone drop (constricted) +phoneme 6 // nặng Tone(drop (constricted) stress length 75 // reduce the length of the vowel - tone 40 20 envelope/p_512 envelope/vi_6amp + Tone(40, 20, envelope/p_512, envelope/vi_6amp) endphoneme -phoneme 7 // tone 1 (ngang) at end of clause +phoneme 7 // Tone(1 (ngang) at end of clause stress - tone 40 20 envelope/p_fall NULL + Tone(40, 20, envelope/p_fall, NULL) endphoneme @@ -53,78 +53,80 @@ endphoneme phoneme a - vowel starttype (@) endtype (@) + vowel starttype #@ endtype #@ length 130 - formants vowel/a_4 + FMT(vowel/a_4) endphoneme phoneme a: - vowel starttype (a) endtype (a) + vowel starttype #a endtype #a length 280 - formants vowel/a_6 + FMT(vowel/a_6) endphoneme phoneme E - vowel starttype (e) endtype (e) + vowel starttype #e endtype #e length 200 - formants vowel/ee_3 + FMT(vowel/ee_3) endphoneme phoneme e - vowel starttype (e) endtype (e) + vowel starttype #e endtype #e length 200 - formants vowel/e + FMT(vowel/e) endphoneme phoneme i - vowel starttype (i) endtype (i) + vowel starttype #i endtype #i length 190 - formants vowel/i_4 - after w w/wi - linkout ; + IfNextVowelAppend(;) + IF prevPhW(w) THEN + VowelStart(w/wi) + ENDIF + FMT(vowel/i_4) endphoneme phoneme O - vowel starttype (o) endtype (o) + vowel starttype #o endtype #o length 200 - formants vowel/aa_4 + FMT(vowel/aa_4) endphoneme phoneme o - vowel starttype (o) endtype (o) + vowel starttype #o endtype #o length 200 - formants vowel/o_2 + FMT(vowel/o_2) endphoneme phoneme u - vowel starttype (u) endtype (u) + vowel starttype #u endtype #u length 200 - formants vowel/u_7 + FMT(vowel/u_7) endphoneme phoneme y - vowel starttype (u) endtype (u) + vowel starttype #u endtype #u length 200 - formants vowel/u#_5 + FMT(vowel/u#_5) endphoneme phoneme @ - vowel starttype (@) endtype (a) + vowel starttype #@ endtype #a length 130 - formants vowel/@_2 + FMT(vowel/@_2) endphoneme phoneme @: - vowel starttype (@) endtype (@) + vowel starttype #@ endtype #@ length 280 - formants vowel/@_2 + FMT(vowel/@_2) endphoneme @@ -133,158 +135,162 @@ endphoneme //=========== phoneme aI - vowel starttype (a) endtype (i) + vowel starttype #a endtype #i length 250 - formants vdiph/&i_3 + FMT(vdiph/&i_3) endphoneme phoneme a:I - vowel starttype (a) endtype (i) + vowel starttype #a endtype #i length 250 - formants vdiph/ai + FMT(vdiph/ai) endphoneme phoneme @I - vowel starttype (@) endtype (i) + vowel starttype #@ endtype #i length 250 - formants vdiph/@i + FMT(vdiph/@i) endphoneme phoneme @:I - vowel starttype (@) endtype (i) + vowel starttype #@ endtype #i length 250 - formants vdiph/@i + FMT(vdiph/@i) endphoneme phoneme eI - vowel starttype (e) endtype (i) + vowel starttype #e endtype #i length 200 - formants vdiph/ei + FMT(vdiph/ei) endphoneme phoneme EI - vowel starttype (e) endtype (i) + vowel starttype #e endtype #i length 200 - formants vdiph/eei + FMT(vdiph/eei) endphoneme phoneme OI - vowel starttype (o) endtype (i) + vowel starttype #o endtype #i length 200 - formants vdiph/0i + FMT(vdiph/0i) endphoneme phoneme oI - vowel starttype (o) endtype (i) + vowel starttype #o endtype #i length 200 - formants vdiph/oi + FMT(vdiph/oi) endphoneme phoneme uI - vowel starttype (u) endtype (i) + vowel starttype #u endtype #i length 200 - formants vdiph/ui + FMT(vdiph/ui) endphoneme phoneme yI - vowel starttype (u) endtype (i) + vowel starttype #u endtype #i length 200 - formants vdiph/u-i + FMT(vdiph/u-i) endphoneme phoneme aU - vowel starttype (a) endtype (u) + vowel starttype #a endtype #u length 210 - formants vdiph/aau_4 + FMT(vdiph/aau_4) endphoneme phoneme a:U - vowel starttype (a) endtype (u) + vowel starttype #a endtype #u length 270 - formants vdiph/au + FMT(vdiph/au) endphoneme phoneme eU - vowel starttype (e) endtype (u) + vowel starttype #e endtype #u length 200 - formants vdiph/eu + FMT(vdiph/eu) endphoneme phoneme EU - vowel starttype (e) endtype (u) + vowel starttype #e endtype #u length 200 - formants vdiph/eeu + FMT(vdiph/eeu) endphoneme phoneme iU - vowel starttype (i) endtype (u) + vowel starttype #i endtype #u length 200 - formants vdiph2/iu + FMT(vdiph2/iu) endphoneme phoneme @U - vowel starttype (@) endtype (u) + vowel starttype #@ endtype #u length 200 - formants vdiph/@u + FMT(vdiph/@u) endphoneme phoneme @:U - vowel starttype (@) endtype (u) + vowel starttype #@ endtype #u length 270 - formants vdiph/@u + FMT(vdiph/@u) endphoneme phoneme i@ - vowel starttype (i) endtype (@) + vowel starttype #i endtype #@ length 240 - formants vdiph2/ii@_3 + FMT(vdiph2/ii@_3) endphoneme phoneme y@ - vowel starttype (i) endtype (@) + vowel starttype #i endtype #@ length 200 - formants vdiph2/y-y# + FMT(vdiph2/y-y#) endphoneme phoneme u@ - vowel starttype (u) endtype (@) + vowel starttype #u endtype #@ length 200 - formants vdiph2/uu@ + FMT(vdiph2/uu@) endphoneme phoneme kh vls vel frc - vowelin f1=0 f2=2300 200 400 f3=200 80 - vowelout f1=0 f2=2300 300 400 f3=200 80 rms=20 - length 100 lengthmod 3 - wave ufric/x%50 - switchvoicing Q + Vowelin f1=0 f2=2300 200 400 f3=200 80 + Vowelout f1=0 f2=2300 300 400 f3=200 80 rms=20 + WAV(ufric/x, 50) endphoneme + phoneme l liquid - length 100 lengthmod 7 - beforenotvowel l/ - formants l/l_vi + + IF nextPh(isNotVowel) THEN + ChangePhoneme(l/2) + ENDIF + + CALL vowelstart_l + + FMT(l/l_vi) endphoneme diff --git a/phsource/ph_welsh b/phsource/ph_welsh index 400825f9..d323dcf5 100644 --- a/phsource/ph_welsh +++ b/phsource/ph_welsh @@ -8,51 +8,51 @@ //============= phoneme a - vowel starttype (a) endtype (a) + vowel starttype #a endtype #a length 150 - formants vowel/a + FMT(vowel/a) endphoneme phoneme E - vowel starttype (e) endtype (e) + vowel starttype #e endtype #e length 150 - formants vowel/ee_2 + FMT(vowel/ee_2) endphoneme phoneme I - vowel starttype (i) endtype (i) + vowel starttype #i endtype #i length 150 - formants vowel/ii_3 + FMT(vowel/ii_3) endphoneme phoneme Y // symbol used in place of I" (I bar) - vowel starttype (i) endtype (i) + vowel starttype #i endtype #i length 150 - formants vowel/ii# + FMT(vowel/ii#) endphoneme phoneme O - vowel starttype (o) endtype (o) + vowel starttype #o endtype #o length 150 - formants vowel/oo_2 + FMT(vowel/oo_2) endphoneme phoneme U - vowel starttype (u) endtype (u) + vowel starttype #u endtype #u length 150 - formants vowel/u_bck + FMT(vowel/u_bck) endphoneme phoneme V - vowel starttype (@) endtype (@) + vowel starttype #@ endtype #@ length 150 - formants vowel/@ + FMT(vowel/@) endphoneme @@ -60,50 +60,50 @@ endphoneme //============ phoneme i: - vowel starttype (i) endtype (i) + vowel starttype #i endtype #i length 180 - formants vowel/i - reduceto I 4 + ChangeIfNotStressed(I) + FMT(vowel/i) endphoneme phoneme y: // symbol used in place of i" (i bar) - vowel starttype (i) endtype (i) + vowel starttype #i endtype #i length 180 - formants vowel/i# - reduceto Y 4 + ChangeIfNotStressed(Y) + FMT(vowel/i#) endphoneme phoneme u: - vowel starttype (u) endtype (u) + vowel starttype #u endtype #u length 190 - formants vowel/u - reduceto U 4 + ChangeIfNotStressed(U) + FMT(vowel/u) endphoneme phoneme e: - vowel starttype (e) endtype (e) + vowel starttype #e endtype #e length 210 - formants vowel/e - reduceto E 4 + ChangeIfNotStressed(E) + FMT(vowel/e) endphoneme phoneme o: - vowel starttype (o) endtype (o) + vowel starttype #o endtype #o length 210 - formants vowel/o_2 - reduceto O 4 + ChangeIfNotStressed(O) + FMT(vowel/o_2) endphoneme phoneme A: - vowel starttype (a) endtype (a) + vowel starttype #a endtype #a length 230 - formants vowel/aa_2 - reduceto a 4 + ChangeIfNotStressed(a) + FMT(vowel/aa_2) endphoneme @@ -111,93 +111,93 @@ endphoneme //=========== phoneme AY - vowel starttype (a) endtype (i) + vowel starttype #a endtype #i length 250 - formants vdiph/aai_2 + FMT(vdiph/aai_2) endphoneme phoneme aI - vowel starttype (a) endtype (i) + vowel starttype #a endtype #i length 210 - formants vdiph/ai_2 + FMT(vdiph/ai_2) endphoneme phoneme aY - vowel starttype (a) endtype (i) + vowel starttype #a endtype #i length 210 - formants vdiph/ai_2 + FMT(vdiph/ai_2) endphoneme phoneme aU - vowel starttype (a) endtype (u) + vowel starttype #a endtype #u length 210 - formants vdiph/au_4 + FMT(vdiph/au_4) endphoneme phoneme @I - vowel starttype (@) endtype (i) + vowel starttype #@ endtype #i length 210 - formants vdiph/@i_2 + FMT(vdiph/@i_2) endphoneme phoneme @Y - vowel starttype (@) endtype (i) + vowel starttype #@ endtype #i length 210 - formants vdiph/@i_2 + FMT(vdiph/@i_2) endphoneme phoneme eU - vowel starttype (e) endtype (u) + vowel starttype #e endtype #u length 210 - formants vdiph/eu + FMT(vdiph/eu) endphoneme phoneme Iu - vowel starttype (i) endtype (u) + vowel starttype #i endtype #u length 210 - formants vdiph2/iu_4 + FMT(vdiph2/iu_4) endphoneme phoneme Yu - vowel starttype (i) endtype (u) + vowel starttype #i endtype #u length 210 - formants vdiph2/iu_4 + FMT(vdiph2/iu_4) endphoneme phoneme OI - vowel starttype (o) endtype (i) + vowel starttype #o endtype #i length 210 - formants vdiph/ooi + FMT(vdiph/ooi) endphoneme phoneme OY - vowel starttype (o) endtype (i) + vowel starttype #o endtype #i length 210 - formants vdiph/ooi + FMT(vdiph/ooi) endphoneme phoneme uI - vowel starttype (u) endtype (i) + vowel starttype #u endtype #i length 210 - formants vdiph/ui_3 + FMT(vdiph/ui_3) endphoneme phoneme uY - vowel starttype (u) endtype (i) + vowel starttype #u endtype #i length 210 - formants vdiph/ui_3 + FMT(vdiph/ui_3) endphoneme @@ -206,23 +206,27 @@ endphoneme phoneme r liquid - vowelin f1=0 f2=1600 -300 300 f3=-200 80 - vowelout f1=2 f2=1600 -300 300 f3=-200 80 brk - formants r3/r_trill2+r3/r_trill2.wav%65 trill lengthmod 6 + Vowelin f1=0 f2=1600 -300 300 f3=-200 80 + Vowelout f1=2 f2=1600 -300 300 f3=-200 80 brk + FMT(r3/r_trill2) addWav(r3/r_trill2.wav, 65) endphoneme phoneme g vcd vel stop - vowelin f1=2 f2=2300 200 300 f3=-300 80 - vowelout f1=2 f2=2300 250 300 f3=-300 80 brk - formants g/g+x/g2%150 - before _ g/g_+x/g_%140 - after _ NULL - after @ g/xg lengthmod 5 - switchvoicing k -endphoneme + voicingswitch k + Vowelin f1=2 f2=2300 200 300 f3=-300 80 + Vowelout f1=2 f2=2300 250 300 f3=-300 80 brk + IF PreVoicing THEN + FMT(g/xg) + ENDIF + + IF nextPh(isPause2) THEN + FMT(g/g_) addWav(x/g_, 140) + ENDIF + FMT(g/g) addWav(x/g2, 150) +endphoneme diff --git a/phsource/ph_zh b/phsource/ph_zh index f5a91723..6771b94a 100644 --- a/phsource/ph_zh +++ b/phsource/ph_zh @@ -5,443 +5,453 @@ phoneme 11 // tone: low level stress - tone 12 9 envelope/i_risefall NULL + Tone(12, 9, envelope/i_risefall, NULL) endphoneme phoneme 21 // tone: low fall stress - tone 20 10 envelope/p_fall NULL + Tone(20, 10, envelope/p_fall, NULL) endphoneme phoneme 214 // tone: fall rise stress - tone 18 42 envelope/p_214 NULL + Tone(18, 42, envelope/p_214, NULL) endphoneme phoneme 22 // tone: mid-low level stress - tone 22 20 envelope/p_fall NULL + Tone(22, 20, envelope/p_fall, NULL) endphoneme phoneme 33 // tone: mid level stress - tone 32 30 envelope/p_fall NULL + Tone(32, 30, envelope/p_fall, NULL) endphoneme phoneme 35 // tone: mid rise stress - tone 30 50 envelope/p_rise NULL + Tone(30, 50, envelope/p_rise, NULL) endphoneme phoneme 44 // tone: mid-high level stress - tone 38 41 envelope/p_rise NULL + Tone(38, 41, envelope/p_rise, NULL) endphoneme phoneme 51 // tone: high fall stress - tone 50 10 envelope/p_fall NULL + Tone(50, 10, envelope/p_fall, NULL) endphoneme phoneme 53 // tone: high fall stress - tone 50 30 envelope/p_fall NULL + Tone(50, 30, envelope/p_fall, NULL) endphoneme phoneme 55 // tone: high level stress - tone 55 50 envelope/p_level NULL + Tone(55, 50, envelope/p_level, NULL) endphoneme //==================================================== // Consonants //==================================================== + +phoneme n + vcd alv nasal + Vowelout f1=2 f2=1700 -300 250 f3=-100 80 rms=20 brk + lengthmod 2 + + NextVowelStarts + VowelStart(n/n@) + VowelStart(n/na) + VowelStart(n/ne) + VowelStart(n/ni) + VowelStart(n/no) + VowelStart(n/nu) + EndSwitch + + IF nextPh(isNotVowel) THEN + FMT(n/n_long_) + ENDIF + FMT(n/_n) +endphoneme + + +phoneme N + vcd vel nasal + Vowelout f1=2 f2=1900 0 300 f3=400 80 len=50 rms=15 brk + lengthmod 7 + + NextVowelStarts + VowelStart(nn/nn@) + VowelStart(nn/nna) + VowelStart(nn/nne) + VowelStart(nn/nni) + VowelStart(nn/nno) + VowelStart(nn/nnu) + EndSwitch + + IF prevPh(isPause) THEN + FMT(nn/_nn) + ELIF nextPh(isNotVowel) THEN + FMT(nn/nn2_) + ENDIF +endphoneme + + + phoneme p vls blb stop - vowelin f1=0 f2=1000 -50 -100 f3=-200 80 amp=11 - vowelout f1=0 f2=1000 -500 -350 f3=-300 80 rms=22 lengthmod 2 - wave ustop/p_unasp + Vowelin f1=0 f2=1000 -50 -100 f3=-200 80 amp=11 + Vowelout f1=0 f2=1000 -500 -350 f3=-300 80 rms=22 + WAV(ustop/p_unasp) endphoneme phoneme ph vls blb stop - vowelin f1=0 f2=1000 -50 -100 f3=-200 80 amp=11 - vowelout f1=0 f2=1000 -500 -350 f3=-300 80 rms=22 lengthmod 2 - wave ustop/p_asp -endphoneme - -phoneme m //not clear before some vowel - vcd blb nasal - vowelout f1=2 f2=1000 -500 -350 f3=-200 80 brk - lengthmod 2 - formants m/_m + Vowelin f1=0 f2=1000 -50 -100 f3=-200 80 amp=11 + Vowelout f1=0 f2=1000 -500 -350 f3=-300 80 rms=22 + WAV(ustop/p_asp) endphoneme phoneme f //not clear before some vowel vls lbd frc - vowelout f1=0 f2=1000 -500 -350 f3=-200 80 lengthmod 2 - wave ufric/f + Vowelout f1=0 f2=1000 -500 -350 f3=-200 80 + WAV(ufric/f) endphoneme phoneme t vls alv stop - vowelin f1=0 f2=1700 -300 300 f3=-100 80 rms=40 - vowelout f1=0 f2=1700 -300 250 f3=-100 80 rms=20 lengthmod 2 - wave ustop/t_unasp2%40 + Vowelin f1=0 f2=1700 -300 300 f3=-100 80 rms=40 + Vowelout f1=0 f2=1700 -300 250 f3=-100 80 rms=20 + WAV(ustop/t_unasp2, 40) endphoneme phoneme th vls alv stop - vowelin f1=0 f2=1700 -300 300 f3=-100 80 - vowelout f1=0 f2=1700 -300 250 f3=-100 80 rms=20 lengthmod 2 - wave ustop/t_ -endphoneme - -phoneme n - vcd alv nasal - vowelout f1=2 f2=1700 -300 250 f3=-100 80 rms=20 brk - lengthmod 2 - formants n/_n - before _ n/n_long_ - before (i) n/ni -endphoneme - -phoneme l - liquid - vowelin f1=0 f2=2700 400 600 f3=300 80 rate len=20 - lengthmod 2 - formants l/_l - before (i) l/li + Vowelin f1=0 f2=1700 -300 300 f3=-100 80 + Vowelout f1=0 f2=1700 -300 250 f3=-100 80 rms=20 + WAV(ustop/t_) endphoneme phoneme k vls uvl stop - vowelin f1=1 f2=1700 0 200 f3=-300 80 f4 - vowelout f1=1 f2=1700 0 200 f3=-300 80 f4 rms=30 lengthmod 2 - wave ustop/k_unasp_%75 + Vowelin f1=1 f2=1700 0 200 f3=-300 80 f4 + Vowelout f1=1 f2=1700 0 200 f3=-300 80 f4 rms=30 + WAV(ustop/k_unasp_, 75) endphoneme phoneme kh vls uvl stop - vowelin f1=1 f2=1700 0 200 f3=-300 80 f4 - vowelout f1=1 f2=1700 0 200 f3=-300 80 f4 rms=30 lengthmod 2 - wave ustop/k_asp%80 + Vowelin f1=1 f2=1700 0 200 f3=-300 80 f4 + Vowelout f1=1 f2=1700 0 200 f3=-300 80 f4 rms=30 + WAV(ustop/k_asp, 80) endphoneme phoneme tS; vls pal afr sibilant palatal - vowelin f1=0 f2=2700 400 600 f3=300 80 lengthmod 2 - wave ustop/tsh_pzd_unasp + Vowelin f1=0 f2=2700 400 600 f3=300 80 + WAV(ustop/tsh_pzd_unasp) endphoneme phoneme tS;h vls pal afr sibilant palatal - vowelin f1=0 f2=2700 400 600 f3=300 80 lengthmod 2 - wave ustop/tsh_pzd%80 + Vowelin f1=0 f2=2700 400 600 f3=300 80 + WAV(ustop/tsh_pzd, 80) endphoneme phoneme S; vls pla frc sibilant - vowelin f1=0 f2=2700 400 600 f3=300 80 lengthmod 2 - wave ufric/sh_pzd2%20 + Vowelin f1=0 f2=2700 400 600 f3=300 80 + WAV(ufric/sh_pzd2, 20) endphoneme phoneme s. vls pla frc sibilant - vowelin f1=0 f2=1800 -100 300 f3=-300 80 - vowelout f1=0 f2=1800 -100 300 f3=-300 80 - length 100 lengthmod 3 - wave ufric/sh_rfx%50 // quieter - before _ ufric/sh_rfx%50 + Vowelin f1=0 f2=1800 -100 300 f3=-300 80 + Vowelout f1=0 f2=1800 -100 300 f3=-300 80 + IF nextPh(isPause2) THEN + WAV(ufric/sh_rfx, 50) + ENDIF + WAV(ufric/sh_rfx, 50) // quieter endphoneme phoneme ts vls alv afr sibilant - vowelin f1=0 f2=1700 -300 300 f3=-100 80 - vowelout f1=0 f2=1700 -300 250 f3=-100 80 rms=20 lengthmod 2 - wave ustop/ts_unasp%70 + Vowelin f1=0 f2=1700 -300 300 f3=-100 80 + Vowelout f1=0 f2=1700 -300 250 f3=-100 80 rms=20 + WAV(ustop/ts_unasp, 70) endphoneme phoneme tsh vls alv afr sibilant - vowelin f1=0 f2=1700 -300 300 f3=-100 80 - vowelout f1=0 f2=1700 -300 250 f3=-100 80 rms=20 lengthmod 2 - wave ustop/ts%60 + Vowelin f1=0 f2=1700 -300 300 f3=-100 80 + Vowelout f1=0 f2=1700 -300 250 f3=-100 80 rms=20 + WAV(ustop/ts, 60) endphoneme phoneme ts. vls pla frc sibilant - vowelin f1=0 f2=1800 -100 300 f3=-300 80 - vowelout f1=0 f2=1800 -100 300 f3=-300 80 - length 100 lengthmod 3 - wave ustop/ts_rfx_unasp + Vowelin f1=0 f2=1800 -100 300 f3=-300 80 + Vowelout f1=0 f2=1800 -100 300 f3=-300 80 + WAV(ustop/ts_rfx_unasp) endphoneme phoneme ts.h vls pla frc sibilant - vowelin f1=0 f2=1800 -100 300 f3=-300 80 - vowelout f1=0 f2=1800 -100 300 f3=-300 80 - length 100 lengthmod 3 - wave ustop/ts_rfx -endphoneme - -phoneme j - liquid - palatal - length 40 - formants j/_j - lengthmod 1 -endphoneme - -phoneme w - liquid - length 40 - lengthmod 1 - formants w/_w + Vowelin f1=0 f2=1800 -100 300 f3=-300 80 + Vowelout f1=0 f2=1800 -100 300 f3=-300 80 + WAV(ustop/ts_rfx) endphoneme //==================================================== // Vowels and Diphtnongs //==================================================== -phoneme N //should be more different from n - vcd vel nasal - vowelout f1=2 f2=1900 0 300 f3=400 80 len=50 rms=15 brk - formants NULL - before _ nn/nn2_ - after _ nn/_nn - lengthmod 7 -// after (i) nn/inn -endphoneme - phoneme N- // syllabic N vowel starttype N endtype N length 250 - formants nn/nn2_ + FMT(nn/nn2_) endphoneme phoneme a - vowel starttype (a) endtype (a) + vowel starttype #a endtype #a length 250 - formants vowel/a - before N vwl_zh/a_n + IF nextPh(N) THEN + FMT(vwl_zh/a_n) + ENDIF + FMT(vowel/a) endphoneme phoneme A - vowel starttype (a) endtype (a) + vowel starttype #a endtype #a length 250 - formants vowel/a_3 - before N vowel/aa_2 + IF nextPh(N) THEN + FMT(vowel/aa_2) + ENDIF + FMT(vowel/a_3) endphoneme phoneme ai - vowel starttype (a) endtype (i) + vowel starttype #a endtype #i length 250 - formants vdiph/ai_6 + FMT(vdiph/ai_6) endphoneme phoneme Au - vowel starttype (a) endtype (u) + vowel starttype #a endtype #u length 250 - formants vwl_zh/aau + FMT(vwl_zh/aau) endphoneme phoneme @ - vowel starttype (@) endtype (@) + vowel starttype #@ endtype #@ length 200 - formants vowel/3_2%120 - before N vowel/@_bck + IF nextPh(N) THEN + FMT(vowel/@_bck) + ENDIF + FMT(vowel/3_2) endphoneme phoneme @r //tmp use V3_r - vowel starttype (@) endtype (@) + vowel starttype #@ endtype #@ length 350 - formants vowelr/V3_r + FMT(vowelr/V3_r) endphoneme phoneme E - vowel starttype (e) endtype (e) + vowel starttype #e endtype #e length 250 - formants vowel/ee_2 + FMT(vowel/ee_2) endphoneme phoneme ei - vowel starttype (e) endtype (i) + vowel starttype #e endtype #i length 250 - formants vdiph2/ei_4 + FMT(vdiph2/ei_4) endphoneme phoneme i - vowel starttype (i) endtype (i) + vowel starttype #i endtype #i length 250 - formants vowel/i - before N vowel/ii_2 - before n vowel/ii_5 + IF nextPh(N) THEN + FMT(vowel/ii_2) + ENDIF + IF nextPh(n) THEN + FMT(vowel/ii_5) + ENDIF + FMT(vowel/i) endphoneme phoneme i[ //after ts tsh s - vowel starttype (i) endtype (i) + vowel starttype #i endtype #i length 250 - formants vowel/i#_7 + FMT(vowel/i#_7) endphoneme phoneme i. //after ts. ts.h s. z. - vowel starttype (i) endtype (i) + vowel starttype #i endtype #i length 250 -// formants vwl_zh/i_rfx - formants vowel/i#_6 + FMT(vowel/i#_6) endphoneme phoneme iA //try more before N - vowel starttype (i) endtype (a) + vowel starttype #i endtype #a length 250 - formants vwl_zh/iaa + FMT(vwl_zh/iaa) endphoneme phoneme iAu - vowel starttype (i) endtype (u) + vowel starttype #i endtype #u length 250 - formants vwl_zh/iaau + FMT(vwl_zh/iaau) endphoneme phoneme iE - vowel starttype (i) endtype (e) + vowel starttype #i endtype #e length 250 - formants vwl_zh/ie + FMT(vwl_zh/ie) endphoneme phoneme io - vowel starttype (i) endtype (o) + vowel starttype #i endtype #o length 250 - formants vdiph2/iioo + FMT(vdiph2/iioo) endphoneme phoneme iou - vowel starttype (i) endtype (u) + vowel starttype #i endtype #u length 250 - formants vwl_zh/iou + FMT(vwl_zh/iou) endphoneme phoneme o - vowel starttype (o) endtype (o) + vowel starttype #o endtype #o length 250 - formants vdiph2/o_oo - before N vnasal/oo_n2 + IF nextPh(N) THEN + FMT(vnasal/oo_n2) + ENDIF + FMT(vdiph2/o_oo) endphoneme phoneme o- - vowel starttype (o) endtype (o) + vowel starttype #o endtype #o length 250 - formants vowel/8 + FMT(vowel/8) endphoneme phoneme ou - vowel starttype (o) endtype (u) + vowel starttype #o endtype #u length 250 - formants vdiph/8u + FMT(vdiph/8u) endphoneme phoneme ong - vowel starttype (o) endtype (o) + vowel starttype #o endtype #o length 500 - formants vwl_zh/ong + FMT(vwl_zh/ong) endphoneme phoneme u //try more before N - vowel starttype (u) endtype (u) + vowel starttype #u endtype #u length 250 - formants vowel/u_bck - before N vnasal/u_n + IF nextPh(N) THEN + FMT(vnasal/u_n) + ENDIF + FMT(vowel/u_bck) endphoneme phoneme uA - vowel starttype (u) endtype (a) + vowel starttype #u endtype #a length 250 - formants vwl_zh/uaa + FMT(vwl_zh/uaa) endphoneme phoneme ua - vowel starttype (u) endtype (a) + vowel starttype #u endtype #a length 250 - formants vdiph2/oa + FMT(vdiph2/oa) endphoneme phoneme uai - vowel starttype (u) endtype (i) + vowel starttype #u endtype #i length 250 - formants vwl_zh/uai + FMT(vwl_zh/uai) endphoneme phoneme u@ - vowel starttype (u) endtype (@) + vowel starttype #u endtype #@ length 230 - formants vdiph2/o@ + FMT(vdiph2/o@) endphoneme phoneme uei - vowel starttype (u) endtype (i) + vowel starttype #u endtype #i length 250 - formants vwl_zh/uei + FMT(vwl_zh/uei) endphoneme phoneme uo - vowel starttype (u) endtype (o) + vowel starttype #u endtype #o length 280 - formants vwl_zh/uo + FMT(vwl_zh/uo) endphoneme phoneme y - vowel starttype (i) endtype (u) + vowel starttype #i endtype #u length 250 - formants vowel/y_2 - before N vowel/uu_3 + IF nextPh(N) THEN + FMT(vowel/uu_3) + ENDIF + FMT(vowel/y_2) endphoneme phoneme yu //try more before N - vowel starttype (i) endtype (u) + vowel starttype #i endtype #u length 250 - formants vdiph2/yu + FMT(vdiph2/yu) endphoneme phoneme y& - vowel starttype (i) endtype (e) + vowel starttype #i endtype #e length 250 - formants vwl_zh/y& + FMT(vwl_zh/y&) endphoneme phoneme yE //try more so not similar to iE - vowel starttype (i) endtype (e) + vowel starttype #i endtype #e length 250 - formants vwl_zh/yee + FMT(vwl_zh/yee) endphoneme phoneme y@ - vowel starttype (i) endtype (@) + vowel starttype #i endtype #@ length 250 - formants vdiph2/y@ + FMT(vdiph2/y@) endphoneme phoneme yi - vowel starttype (i) endtype (i) + vowel starttype #i endtype #i length 250 - formants vdiph/yi -endphoneme \ No newline at end of file + FMT(vdiph/yi) +endphoneme diff --git a/phsource/ph_zh_yue b/phsource/ph_zh_yue index 98e3ec2e..ae3851be 100644 --- a/phsource/ph_zh_yue +++ b/phsource/ph_zh_yue @@ -6,43 +6,43 @@ phoneme 1 // tone: high level stress - tone 50 50 envelope/p_level NULL + Tone(50, 50, envelope/p_level, NULL) endphoneme phoneme 2 // tone: rise stress - tone 30 50 envelope/p_rise NULL + Tone(30, 50, envelope/p_rise, NULL) endphoneme phoneme 3 // tone: mid level stress - tone 30 30 envelope/p_level NULL + Tone(30, 30, envelope/p_level, NULL) endphoneme phoneme 4 // tone: low fall stress - tone 20 10 envelope/p_fall NULL + Tone(20, 10, envelope/p_fall, NULL) endphoneme phoneme 5 // tone: low rise stress - tone 10 30 envelope/p_rise NULL + Tone(10, 30, envelope/p_rise, NULL) endphoneme phoneme 6 // tone: low level stress - tone 20 20 envelope/p_level NULL + Tone(20, 20, envelope/p_level, NULL) endphoneme phoneme 7 // tone: high fall stress - tone 50 30 envelope/p_fall NULL + Tone(50, 30, envelope/p_fall, NULL) endphoneme @@ -53,248 +53,259 @@ endphoneme phoneme z // [ts] vls alv afr sibilant - vowelin f1=0 f2=1700 -300 300 f3=-100 80 - vowelout f1=0 f2=1700 -300 250 f3=-100 80 rms=20 lengthmod 2 - wave ustop/ts + Vowelin f1=0 f2=1700 -300 300 f3=-100 80 + Vowelout f1=0 f2=1700 -300 250 f3=-100 80 rms=20 + WAV(ustop/ts) endphoneme phoneme c // [tS] vls pla afr sibilant - vowelin f1=0 f2=2300 200 400 f3=-100 80 lengthmod 2 - wave ustop/tsh - before _ ustop/tsh_ - switchvoicing dZ + Vowelin f1=0 f2=2300 200 400 f3=-100 80 + IF nextPh(isPause2) THEN + WAV(ustop/tsh_) + ENDIF + WAV(ustop/tsh) endphoneme + phoneme k vls vel stop - vowelin f1=0 f2=2300 200 300 f3=-200 80 - vowelout f1=0 f2=2300 300 400 f3=-200 80 rms=20 lengthmod 2 - wave ustop/k - before _ NULL - before r ustop/kr - before R ustop/kr - before @- ustop/k_unasp%70 - before l ustop/kl - before (i) ustop/ki - switchvoicing g + Vowelin f1=0 f2=2300 200 300 f3=-200 80 + Vowelout f1=0 f2=2300 300 400 f3=-200 80 rms=20 + + IF nextPh(isPause2) THEN + WAV(NULL) + ENDIF + IF nextPh(#i) THEN + WAV(ustop/ki) + ENDIF + IF nextPh(r) OR nextPh(R) THEN + WAV(ustop/kr) + ENDIF + IF nextPh(l) THEN + WAV(ustop/kl) + ENDIF + IF nextPh(@-) THEN + WAV(ustop/k_unasp,70) + ENDIF + + WAV(ustop/k) endphoneme + phoneme p vls blb stop - vowelin f1=0 f2=1000 -50 -100 f3=-200 80 rms=30 - vowelout f1=0 f2=1000 -500 -350 f3=-300 80 rms=22 lengthmod 2 - wave ustop/p - before _ NULL + Vowelin f1=0 f2=1000 -50 -100 f3=-200 80 rms=30 + Vowelout f1=0 f2=1000 -500 -350 f3=-300 80 rms=22 + IF nextPh(isPause2) THEN + WAV(NULL) + ENDIF + WAV(ustop/p) endphoneme phoneme t vls alv stop - vowelin f1=0 f2=1700 -300 300 f3=100 80 - vowelout f1=0 f2=1700 -300 250 f3=-100 80 rms=20 - wave ustop/t - before _ NULL lengthmod 2 + Vowelin f1=0 f2=1700 -300 300 f3=100 80 + Vowelout f1=0 f2=1700 -300 250 f3=-100 80 rms=20 + IF nextPh(isPause2) THEN + WAV(NULL) + ENDIF + WAV(ustop/t) endphoneme -//phoneme ng // synonym for [N] -// vcd vel nasal -// starttype N endtype N -// vowelout f1=3 f2=2300 300 400 f3=-200 80 len=40 rms=20 brk -// after _ nn/_nn -// before _ nn/nn_ -// before (r) nn/nnj -// lengthmod 8 // longer than 'n' -//endphoneme //==================================================== // Vowels and Diphtnongs //==================================================== phoneme aa - vowel starttype (a) endtype (a) + vowel starttype #a endtype #a length 230 - formants vowel/aa + FMT(vowel/aa) endphoneme phoneme aai - vowel starttype (a) endtype (i) + vowel starttype #a endtype #i length 270 - formants vdiph/aai + FMT(vdiph/aai) endphoneme phoneme aau - vowel starttype (a) endtype (u) + vowel starttype #a endtype #u length 260 - formants vdiph/aau_2 + FMT(vdiph/aau_2) endphoneme phoneme ang - vowel starttype (a) endtype (a) + vowel starttype #a endtype #a length 220 - formants vwl_zh/ang + FMT(vwl_zh/ang) endphoneme phoneme aang - vowel starttype (a) endtype (a) + vowel starttype #a endtype #a length 270 - formants vwl_zh/aang + FMT(vwl_zh/aang) endphoneme phoneme a - vowel starttype (@) endtype (@) + vowel starttype #@ endtype #@ length 150 - formants vowel/a#_3 + FMT(vowel/a#_3) endphoneme phoneme ai - vowel starttype (@) endtype (i) + vowel starttype #@ endtype #i length 200 - formants vdiph/@i_3 + FMT(vdiph/@i_3) endphoneme phoneme au - vowel starttype (a) endtype (u) + vowel starttype #a endtype #u length 200 - formants vdiph/au_2 + FMT(vdiph/au_2) endphoneme phoneme e - vowel starttype (e) endtype (e) + vowel starttype #e endtype #e length 220 - formants vowel/ee_1 + FMT(vowel/ee_1) endphoneme phoneme ei - vowel starttype (e) endtype (i) + vowel starttype #e endtype #i length 220 - formants vdiph/ei + FMT(vdiph/ei) endphoneme phoneme eng - vowel starttype (e) endtype (e) + vowel starttype #e endtype #e length 220 - formants vwl_zh/eng + FMT(vwl_zh/eng) endphoneme phoneme eu - vowel starttype (e) endtype (u) + vowel starttype #e endtype #u length 260 - formants vdiph/eeu + FMT(vdiph/eeu) endphoneme phoneme i - vowel starttype (i) endtype (i) + vowel starttype #i endtype #i length 190 - formants vowel/i - before k vowel/ii-40 - before N vowel/ii-40 - after w w/wi - linkout ; + IfNextVowelAppend(;) + + IF nextPhW(k) OR nextPhW(N) THEN + Length 150 + FMT(vowel/ii) + ENDIF + + FMT(vowel/i) endphoneme phoneme ing - vowel starttype (i) endtype (i) + vowel starttype #i endtype #i length 220 - formants vwl_zh/ing + FMT(vwl_zh/ing) endphoneme phoneme iu - vowel starttype (i) endtype (u) + vowel starttype #i endtype #u length 200 - formants vdiph2/iu + FMT(vdiph2/iu) endphoneme phoneme ng // synonym for [N] - vowel starttype ng endtype ng -// vowelout f1=3 f2=2300 300 400 f3=-200 80 len=40 rms=20 brk + vowel // starttype ng endtype ng length 350 - formants vwl_zh/ng - beforevowel N -// before (@) vnasal/ -// before o vnasal/nn- -// lengthmod 8 + IF nextPh(isVowel) THEN + ChangePhoneme(N) + ENDIF + FMT(vwl_zh/ng) endphoneme phoneme o - vowel starttype (o) endtype (o) + vowel starttype #o endtype #o length 170 - formants vowel/oo + FMT(vowel/oo) endphoneme phoneme oeng - vowel starttype (o) endtype (e) + vowel starttype #o endtype #e length 280 - formants vwl_zh/oeng + FMT(vwl_zh/oeng) endphoneme phoneme oi - vowel starttype (o) endtype (i) + vowel starttype #o endtype #i length 200 - formants vdiph/ooi + FMT(vdiph/ooi) endphoneme phoneme ou - vowel starttype (o) endtype (u) + vowel starttype #o endtype #u length 200 - formants vdiph/ou + FMT(vdiph/ou) endphoneme phoneme ong - vowel starttype (o) endtype (o) + vowel starttype #o endtype #o length 220 - formants vwl_zh/ong + FMT(vwl_zh/ong) endphoneme phoneme u - vowel starttype (u) endtype (u) + vowel starttype #u endtype #u length 170 - formants vowel/u_bck - before k vowel/uu_bck - before N vowel/uu_bck + IF nextPhW(k) OR nextPhW(N) THEN + FMT(vowel/uu_bck) + ENDIF + + FMT(vowel/u_bck) endphoneme phoneme ung - vowel starttype (u) endtype (u) + vowel starttype #u endtype #u length 200 - formants vwl_zh/ung + FMT(vwl_zh/ung) endphoneme phoneme ui - vowel starttype (u) endtype (i) + vowel starttype #u endtype #i length 220 - formants vdiph/ui + FMT(vdiph/ui) endphoneme phoneme oe - vowel starttype (@) endtype (@) + vowel starttype #@ endtype #@ length 230 - formants vowel/y# + FMT(vowel/y#) endphoneme phoneme eo - vowel starttype (@) endtype (@) + vowel starttype #@ endtype #@ length 170 - formants vowel/8_3 + FMT(vowel/8_3) endphoneme phoneme eoi - vowel starttype (@) endtype (i) + vowel starttype #@ endtype #i length 220 - formants vdiph/y#y_2 + FMT(vdiph/y#y_2) endphoneme phoneme yu - vowel starttype (u) endtype (u) + vowel starttype #u endtype #u length 220 - formants vowel/y + FMT(vowel/y) endphoneme diff --git a/phsource/phonemes b/phsource/phonemes index 3929c95c..08dc29f8 100644 --- a/phsource/phonemes +++ b/phsource/phonemes @@ -2,36 +2,6 @@ // This is the master phoneme file. -// These are fixed phoneme code numbers, which can be used -// directly within the program. -phonemenumber 1 < -phonemenumber 2 %% -phonemenumber 3 % -phonemenumber 4 , -phonemenumber 5 ,, -phonemenumber 6 ' -phonemenumber 7 '' -phonemenumber 8 = // stress previous syllable -phonemenumber 9 _: // pause -phonemenumber 10 _ // short pause -phonemenumber 11 _! // short pause, no link -phonemenumber 12 : -phonemenumber 13 @ -phonemenumber 14 @- -phonemenumber 15 || -phonemenumber 16 (r) -phonemenumber 17 1 // (numeral 1) default tone (for tone language) -phonemenumber 18 (X1) // capital letter indication -phonemenumber 19 ? // glottal stop -phonemenumber 20 - // syllabic consonant -phonemenumber 21 _^_ // Change language -phonemenumber 22 _X1 // a language specific action -phonemenumber 23 _| // very short pause -phonemenumber 24 _:: // long pause -phonemenumber 25 t# // reduced version of [t] -phonemenumber 26 '! // stress - emphasized -phonemenumber 27 _;_ // clause pause - // The base phoneme table contains the utility phonemes, the consonants, // and a schwa. The vowels are defined in the language specific phoneme // tables, which can also redefine consonants if they wish. @@ -41,28 +11,23 @@ phonemenumber 27 _;_ // clause pause // UTILITY PHONEMES //******************************************************************* -phoneme < // Start of control string NOT USED - pause - length 0 - lengthmod 1 -endphoneme -phoneme %% // Unstressed - stress - stress_type 0 -endphoneme - -phoneme % // Diminished stress +phoneme % // Unstressed stress stress_type 1 endphoneme -phoneme , // Secondary stress +phoneme %% // Diminished stress + stress + stress_type 0 +endphoneme + +phoneme \, // [,] Secondary stress stress stress_type 2 endphoneme -phoneme ,, // Secondary stress +phoneme \,\, // [,,] Secondary stress stress stress_type 3 endphoneme @@ -89,108 +54,100 @@ endphoneme phoneme || // End Word pause - length 0 lengthmod 1 endphoneme -phoneme _ // Short pause +phoneme _ // Short pause pause - formants NULL starttype _ endtype _ - length 25 lengthmod 1 + length 25 endphoneme phoneme _! // Short pause, don't replace by linking pause - formants NULL starttype _ endtype _ - length 35 lengthmod 1 nolink + length 35 endphoneme phoneme _| // Very short pause pause - formants NULL starttype _ endtype _ - length 1 lengthmod 5 + length 1 endphoneme phoneme _: // Standard pause pause - formants NULL starttype _ endtype _ - length 75 lengthmod 1 + length 75 endphoneme phoneme _:: // Long pause pause - formants NULL starttype _ endtype _ - length 150 lengthmod 1 + length 150 endphoneme phoneme _;_ // clause pause pause - formants NULL starttype _ endtype _ - length 200 lengthmod 1 + length 200 endphoneme phoneme _^_ // Change dictionary (followed by language-code in ascii pause starttype _ endtype _ - length 10 lengthmod 1 + length 10 endphoneme phoneme _X1 // a language specific action pause starttype _ endtype _ - length 10 lengthmod 1 + length 10 endphoneme phoneme ? // glottal stop vls glt stop - vowelin glstop - vowelout glstop - wave ustop/null lengthmod 2 // ?? nolink + Vowelin glstop + Vowelout glstop + WAV(ustop/null) endphoneme -phoneme : // Lengthen previous vowel by "length" +phoneme : // lengthen previous vowel by "length" virtual length 70 endphoneme phoneme - // Indicates the previous phoneme is a syllabic consonant virtual - length 0 endphoneme phoneme @ // Schwa - vowel starttype (@) endtype (@) - formants vowel/@ + vowel starttype #@ endtype #@ unstressed length 140 + FMT(vowel/@) endphoneme phoneme @- // very short schwa vowel nonsyllabic - starttype (@) endtype (@) - formants vowel/@- + starttype #@ endtype #@ unstressed length 50 + FMT(vowel/@-) endphoneme @@ -198,10 +155,10 @@ endphoneme // Other sounds //******************************************************************* -phoneme (X1) // click, use for indicating capital letters +phoneme #X1 // click, use for indicating capital letters vls alv frc sibilant lengthmod 3 - wave ustop/percus10 + WAV(ustop/percus10) endphoneme @@ -210,157 +167,22 @@ endphoneme // These each apply to a class of vowels //******************************************************************* -phoneme (@) virtual - after j j/j@ - after ; j2/j2@ - after w w/w@ - after l l/l@ - after l^ l^/j2@ - after #r r/r@-15 - after r- r2/r2@ - after m m/m@ - after n n/n@ - after n. n/nr@ - after N nn/nn@ - after n^ n^/n^@ - before l/ DFT-60+l/L1_@L - before l/2 DFT-60+l/L2_@L - before l/3 DFT+l/l_@ - before l DFT-50+l/xl - before w DFT-30+w/xw - before j DFT-30+j/xj - before #r DFT-50+r/xr - before r- DFT-60+r/xr - before r/ DFT+r3/r_@ +phoneme #@ virtual endphoneme -phoneme (a) virtual - after j j/ja - after ; j2/j2a - after w w/wa - after l l/la - after l^ l^/j2a - after #r r/ra-15 - after r- r2/r2a - after m m/ma - after n n/na - after n. n/nra - after N nn/nna - after n^ n^/n^a - before l/ DFT-40+l/L1_aL - before l/2 DFT-50+l/L2_aL - before l/3 DFT+l/l_a - before l DFT-40+l/xl - before w DFT-30+w/xw - before j DFT-30+j/xj - before #r DFT-50+r/xr - before r- DFT-60+r/xr - before r/ DFT+r3/r_a +phoneme #a virtual endphoneme -phoneme (e) virtual - after j j/je - after ; j2/j2e - after w w/we - after l l/le - after l^ l^/j2e - after #r r/re-15 - after r- r2/r2e - after m m/me - after n n/ne - after n. n/nre - after N nn/nne - after n^ n^/n^e - before l/ DFT-30+l/L1_eL - before l/2 DFT-40+l/L2_eL - before l/3 DFT+l/l_e - before l DFT-40+l/xl - before w DFT-30+w/xw - before j DFT-30+j/xj - before #r DFT-50+r/xr - before r- DFT-60+r/xr - before r/ DFT+r3/r_e +phoneme #e virtual endphoneme -phoneme (i) virtual - after j j/ji - after ; j2/j2i - after w w/wi - after l l/li-10 - after l^ l^/j2i - after #r r/ri-15 - after r- r2/r2i - after m m/mi - after n n/ni - after n. n/nri - after N nn/nni - after n^ n^/n^i - before l/ DFT-30+l/L1_iL - before l/2 DFT-30+l/L2_iL - before l/3 DFT+l/l_i - before N DFT-40+nn/inn - before ; DFT-40+j2/xj2 - before l DFT-40+l/xl - before w DFT-30+w/xw - before j DFT-30+j/xj - before r- DFT-60+r/xr - before r/ DFT+r3/r_i +phoneme #i virtual endphoneme -phoneme (o) virtual - after j j/jo - after ; j2/j2o - after w w/wo - after l l/lo - after l^ l^/j2o - after #r r/ro-15 - after r- r2/r2o - after m m/mo - after n n/no - after n. n/nro - after N nn/nno - after n^ n^/n^o - before l/ DFT-40+l/L1_oL - before l/2 DFT-50+l/L2_oL - before l/3 DFT+l/l_o - before l DFT-40+l/xl - before w DFT-30+w/xw - before j DFT-30+j/xj - before #r DFT-50+r/xr - before r- DFT-60+r/xr - before r/ DFT+r3/r_o +phoneme #o virtual endphoneme -phoneme (u) virtual - after j j/ju - after ; j2/j2u - after w w/wu - after l l/lu - after l^ l^/j2u - after #r r/ru-15 - after r- r2/r2u - after m m/mu - after n n/nu - after n. n/nru - after N nn/nnu - after n^ n^/n^u - before l/ DFT-40+l/L1_uL - before l/2 DFT-40+l/L2_uL - before l/3 DFT-20+l/l_u - before l DFT-40+l/xl - before w DFT-30+w/xw - before j DFT-30+j/xj - before #r DFT-50+r/xr - before r- DFT-60+r/xr - before r/ DFT+r3/r_u -endphoneme - -phoneme (r) virtual -// use to mean general sonorant -endphoneme - -phoneme #r virtual -// use for English r in virtual phonemes +phoneme #u virtual endphoneme @@ -369,269 +191,558 @@ endphoneme //******************************************************************* -phoneme r - liquid starttype #r endtype #r - rhotic - length 100 - lengthmod 7 - beforenotvowel r/ - formants r/r - after _ r/_r - after t r/tr - after p r/tr - after k r/tr - before _ r/r_ +phoneme r- // syllabic r + vowel starttype #@ endtype #@ + unstressed + length 220 + FMT(vowelr/r-voc) endphoneme +phoneme l- // syllabic l + vowel starttype #@ endtype #@ + unstressed + length 200 + FMT(vwl_hi/l-voc) +endphoneme + + +phoneme r + liquid rhotic + lengthmod 7 + + IF nextPh(isNotVowel) THEN + ChangePhoneme(r/) + ENDIF + + NextVowelStarts + VowelStart(r/r@, -15) + VowelStart(r/ra, -15) + VowelStart(r/re, -15) + VowelStart(r/ri, -15) + VowelStart(r/ro, -15) + VowelStart(r/ru, -15) + EndSwitch + + IF prevPh(isVowel) THEN + VowelEnding(r/xr, -50) + ENDIF + + IF prevPh(isPause) THEN + FMT(r/_r) + ELIF prevPh(t) OR prevPh(p) OR prevPh(k) THEN + FMT(r/tr) + ENDIF + + FMT(r/r) +endphoneme + + phoneme r/ // used for [r] when not preceding a vowel - liquid - length 100 - lengthmod 2 // - formants r3/r_+r3/rx - before n r3/r_n+r3/rx - after _ r/rr - after t r/trr - after p r/trr - after k r/trr + liquid rhotic + lengthmod 2 + + IF nextPh(n) THEN + FMT(r3/r_n) addWav(r3/rx) + ENDIF + + IF prevPh(t) OR prevPh(p) OR prevPh(k) THEN + FMT(r/trr) + ENDIF + + IF prevPh(isNotVowel) THEN + FMT(r/rr) + ENDIF + + FMT(r3/r_) addWav(r3/rx) endphoneme -phoneme r- // linking r, used between certain vowels and a following vowel - liquid - length 100 - lengthmod 0 - formants r/r - after _ r2/_r2 -endphoneme - phoneme R liquid - vowelin f1=0 f2=1600 -300 300 f3=-200 80 - vowelout f1=2 f2=1600 -300 300 f3=-200 80 brk - formants r3/r_trill2+r3/r_trill2.wav%65 trill lengthmod 6 + Vowelin f1=0 f2=1600 -300 300 f3=-200 80 + Vowelout f1=2 f2=1600 -300 300 f3=-200 80 brk + FMT(r3/r_trill2) addWav(r3/r_trill2.wav, 65) endphoneme phoneme R2 // this is [R] from Slovak/Czech liquid - vowelin f1=0 f2=1700 -300 300 f3=-300 80 - vowelout f1=2 f2=1700 -300 300 f3=-300 80 brk - formants r3/r_trill+r3/r_trill.wav%50 trill lengthmod 6 + Vowelin f1=0 f2=1700 -300 300 f3=-300 80 + Vowelout f1=2 f2=1700 -300 300 f3=-300 80 brk + FMT(r3/r_trill) addWav(r3/r_trill.wav, 50) endphoneme phoneme R3 // Afrikaans - liquid starttype #r endtype #r - length 60 - vowelin f1=2 f2=2700 -300 -200 f3=-1300 80 - vowelout f1=2 f2=1700 -300 -200 f3=-1300 80 - formants r3/r_trill+r3/r_trill3.wav%99 - before _ r3/r_trill+r3/r_trill3.wav%99 + liquid trill lengthmod 6 + length 60 + Vowelin f1=2 f2=2700 -300 -200 f3=-1300 80 + Vowelout f1=2 f2=1700 -300 -200 f3=-1300 80 + + // vowel modifier is the same as for [r] + NextVowelStarts + VowelStart(r/r@, -15) + VowelStart(r/ra, -15) + VowelStart(r/re, -15) + VowelStart(r/ri, -15) + VowelStart(r/ro, -15) + VowelStart(r/ru, -15) + EndSwitch + + IF prevPh(isVowel) THEN + VowelEnding(r/xr, -50) + ENDIF + + FMT(r3/r_trill) addWav(r3/r_trill3.wav) endphoneme phoneme r" // uvular trill vcd uvl frc - formants r3/r_uvl+r3/r_uvl.wav%75 - before _ r3/r_uvl+r3/r_uvl.wav%50 lengthmod 6 + IF nextPh(isNotVowel) THEN + FMT(r3/r_uvl) addWav(r3/r_uvl.wav, 50) + ENDIF + FMT(r3/r_uvl) addWav(r3/r_uvl.wav, 75) endphoneme +procedure vowelstart_l + NextVowelStarts + VowelStart(l/l@) + VowelStart(l/la) + VowelStart(l/le) + VowelStart(l/li, -10) + VowelStart(l/lo) + VowelStart(l/lu) + EndSwitch +endprocedure + phoneme l liquid - length 100 lengthmod 7 - beforenotvowel l/ - formants l/l - after _ l/_l - after t l/tl - after l/ l/l_long // double l, make it longer + + IF nextPh(isNotVowel) THEN + ChangePhoneme(l/) + ENDIF + + CALL vowelstart_l + + IF prevPh(#@) THEN + VowelEnding(l/xl, -50) + ELIF prevPh(isVowel) THEN + VowelEnding(l/xl, -40) + ENDIF + + IF prevPh(isPause) THEN + FMT(l/_l) + ENDIF + + IF prevPh(t) THEN + FMT(l/tl) + ENDIF + + IF prevPh(l/) THEN + FMT(l/l_long) // double l, make it longer + ENDIF + + FMT(l/l) endphoneme phoneme l/ // used for [l] when not before a vowel liquid - length 100 lengthmod 7 - formants l/l_ - before (r) l/_l - beforevowel l -endphoneme -phoneme l/3 // used for [l] when not before a vowel - liquid - length 100 - lengthmod 7 - formants l/l_ - before (r) l/_l - beforevowel l -endphoneme + IF nextPh(isVowel) THEN + ChangePhoneme(l) + ENDIF + PrevVowelEndings + VowelEnding(l/L1_@L, -60) + VowelEnding(l/L1_aL, -40) + VowelEnding(l/L1_eL, -30) + VowelEnding(l/L1_iL, -30) + VowelEnding(l/L1_oL, -40) + VowelEnding(l/L1_uL, -40) + EndSwitch + + FMT(l/l_) +endphoneme phoneme l/2 // 'dark' [l] after a vowel liquid - length 100 lengthmod 7 - beforevowel l + + IF nextPh(isVowel) THEN + ChangePhoneme(l) + ENDIF + + PrevVowelEndings + VowelEnding(l/L2_@L, -60) + VowelEnding(l/L2_aL, -50) + VowelEnding(l/L2_eL, -40) + VowelEnding(l/L2_iL, -30) + VowelEnding(l/L2_oL, -50) + VowelEnding(l/L2_uL, -40) + EndSwitch endphoneme +phoneme l/3 // Replacement for [l/] + liquid + lengthmod 7 + + IF nextPh(isVowel) THEN + ChangePhoneme(l) + ENDIF + + PrevVowelEndings + VowelEnding(l/l_@) + VowelEnding(l/l_a) + VowelEnding(l/l_e) + VowelEnding(l/l_i) + VowelEnding(l/l_o) + VowelEnding(l/l_u, -20) + EndSwitch + +// IF nextPh(isLiquid) THEN +// FMT(l/_l) +// ENDIF + + FMT(l/l_) +endphoneme + + + phoneme l^ // palatal l - vowelout len=60 lenadd rate liquid - formants l^/l^ - after _ l^/_l^ lengthmod 7 + Vowelout len=60 lenadd rate + length 100 + + NextVowelStarts + VowelStart(l^/j2@) + VowelStart(l^/j2a) + VowelStart(l^/j2e) + VowelStart(l^/j2i) + VowelStart(l^/j2o) + VowelStart(l^/j2u) + EndSwitch + + IF prevPh(isPause) THEN + FMT(l^/_l^) + ENDIF + + FMT(l^/l^) endphoneme +phoneme l. + liquid rfx + lengthmod 7 + FMT(l^/l_rfx) +endphoneme + + + phoneme w liquid - length 100 - beforenotvowel w/ lengthmod 7 - formants w/w - after _ w/_w + + IF nextPh(isVowel) THEN + NextVowelStarts + VowelStart(w/w@) + VowelStart(w/wa) + VowelStart(w/we) + VowelStart(w/wi) + VowelStart(w/wo) + VowelStart(w/wu) + EndSwitch + + VowelEnding(w/xw, -30) + + IF prevPh(isPause) THEN + FMT(w/_w) + ELSE + FMT(w/_w) + ENDIF + ELSE + // no vowel follows + Vowelout len=50 + IF prevPh(#i) THEN + FMT(w/iw_) + ENDIF + FMT(w/w_) + ENDIF endphoneme -phoneme w/ // used for [w] when not before a vowel - liquid - vowelout len=50 - length 100 - formants w/w_ - after (i) w/iw_ - lengthmod 7 - beforevowel w -endphoneme - phoneme j - liquid - palatal - length 100 - beforenotvowel j/ - formants NULL - after _ j/_j - after v NULL + liquid palatal lengthmod 7 + + IF nextPh(isVowel) THEN + NextVowelStarts + VowelStart(j/j@) + VowelStart(j/ja) + VowelStart(j/je) + VowelStart(j/ji) + VowelStart(j/jo) + VowelStart(j/ju) + EndSwitch + + VowelEnding(j/xj, -30) + + IF prevPh(isPause) THEN + FMT(j/_j) + ENDIF + ELSE + // no vowel follows + Vowelout len=70 + FMT(j/j_) + ENDIF endphoneme -phoneme j/ // used for [j] when not before a vowel - liquid - palatal - vowelout len=70 - length 100 - formants j/j_ - lengthmod 7 - beforevowel j -endphoneme - - - -phoneme ; // linking j, (formerly [j-]) used between (i) vowels - // and a following vowel +phoneme ; // linking j, used between (i) vowels and a following vowel // also to palatalize consonants - liquid - palatal - length 100 + liquid palatal lengthmod 0 - formants NULL - beforenotvowel NULL // this is to ignore this phoneme if not before a vowel - after _ j2/_j2 + + IF nextPh(isNotVowel) THEN + ChangePhoneme(NULL) // this is to ignore this phoneme if not before a vowel + ENDIF + + NextVowelStarts + VowelStart(j2/j2@) + VowelStart(j2/j2a) + VowelStart(j2/j2e) + VowelStart(j2/j2i) + VowelStart(j2/j2o) + VowelStart(j2/j2u) + EndSwitch + + IF prevPh(#i) THEN + VowelEnding(j2/xj2, -40) + ENDIF + + IF prevPh(isPause) THEN + FMT(j2/_j2) + ENDIF endphoneme +//******************************************************************* +// NASAL CONSONANTS +//******************************************************************* + + phoneme m vcd blb nasal - vowelout f1=2 f2=1000 -500 -350 f3=-200 80 brk - length 100 + Vowelout f1=2 f2=1000 -500 -350 f3=-200 80 brk lengthmod 4 - formants NULL - after _ m/_m - before _ m/m_ - before (r) m/mj + + IF KlattSynth THEN + Vowelin f1=0 f2=1000 -50 -200 f3=-200 80 + IF nextPh(isPause2) THEN + FMT(klatt/m_) + ENDIF + FMT(klatt/m) + ENDIF + + NextVowelStarts + VowelStart(m/m@) + VowelStart(m/ma) + VowelStart(m/me) + VowelStart(m/mi) + VowelStart(m/mo) + VowelStart(m/mu) + EndSwitch + + IF thisPh(isNotVowel) AND nextPhW(isLiquid) THEN + FMT(m/mj) + ELIF prevPh(isPause) THEN + FMT(m/_m) + ELIF nextPh(isNotVowel) THEN + FMT(m/m_) + ENDIF endphoneme phoneme n vcd alv nasal - vowelout f1=2 f2=1700 -300 250 f3=-100 80 rms=20 brk - length 100 + Vowelout f1=2 f2=1700 -300 250 f3=-100 80 rms=20 brk lengthmod 4 - formants NULL - after _ n/_n - after n n/_n // lengthen [nn] - before _ n/n_ - before (r) n/nj + + IF KlattSynth THEN + Vowelin f1=0 f2=1500 -200 200 f3=0 80 + FMT(klatt/n) + ENDIF + + NextVowelStarts + VowelStart(n/n@) + VowelStart(n/na) + VowelStart(n/ne) + VowelStart(n/ni) + VowelStart(n/no) + VowelStart(n/nu) + EndSwitch + + IF thisPh(isNotVowel) AND nextPhW(isLiquid) THEN + FMT(n/nj) + ELIF prevPh(isPause) OR prevPh(n) THEN + FMT(n/_n) + ELIF nextPh(isNotVowel) THEN + FMT(n/n_) + ENDIF endphoneme phoneme n. vcd rfx nasal - vowelin f1=2 f2=1200 -300 250 f3=-500 80 rms=20 colr=2 - vowelout f1=2 f2=1200 -300 250 f3=-500 80 rms=20 brk colr=2 - length 100 + starttype n endtype n + Vowelin f1=2 f2=1200 -300 250 f3=-500 80 rms=20 colr=2 + Vowelout f1=2 f2=1200 -300 250 f3=-500 80 rms=20 brk colr=2 lengthmod 4 - formants NULL - after _ n/_nr - after n n/_nr // lengthen [nn] - before _ n/nr_ - before (r) n/nj -endphoneme + IF KlattSynth THEN + FMT(klatt/nr) + ENDIF + + NextVowelStarts + VowelStart(n/n@) + VowelStart(n/na) + VowelStart(n/ne) + VowelStart(n/ni) + VowelStart(n/no) + VowelStart(n/nu) + EndSwitch + + IF thisPh(isNotVowel) AND nextPhW(isLiquid) THEN + FMT(n/nj) + ELIF prevPh(isPause) OR prevPh(n.) THEN + FMT(n/_nr) + ELIF nextPh(isNotVowel) THEN + FMT(n/nr_) + ENDIF +endphoneme phoneme n^ vcd pal nasal palatal - vowelout f1=3 f2=2500 300 500 f3=100 80 len=45 brk rate - length 100 + Vowelout f1=3 f2=2500 300 500 f3=100 80 len=45 brk rate lengthmod 4 - formants NULL - after _ n^/_n^ - before _ n^/n^_ - before (r) n/nj -endphoneme + IF KlattSynth THEN + VowelStart(klatt/n^@) + FMT(klatt/n^) + ENDIF + + NextVowelStarts + VowelStart(n^/n^@) + VowelStart(n^/n^a) + VowelStart(n^/n^e) + VowelStart(n^/n^i) + VowelStart(n^/n^o) + VowelStart(n^/n^u) + EndSwitch + + IF prevPh(isPause) THEN + FMT(n^/_n^) + ELIF nextPh(isNotVowel) THEN + FMT(n^/n^_) + ENDIF +endphoneme phoneme N vcd vel nasal -// vowelout brk - vowelout f1=3 f2=2300 300 400 f3=-200 80 len=40 rms=20 brk - length 100 - formants NULL - after _ nn/_nn - before _ nn/nn_ - before (r) nn/nnj + Vowelout f1=3 f2=2300 300 400 f3=-200 80 len=40 rms=20 brk lengthmod 8 // longer than 'n' + + IF KlattSynth THEN + Vowelin f1=0 f2=2100 50 300 f3=0 80 + FMT(klatt/nn) + ENDIF + + NextVowelStarts + VowelStart(nn/nn@) + VowelStart(nn/nna) + VowelStart(nn/nne) + VowelStart(nn/nni) + VowelStart(nn/nno) + VowelStart(nn/nnu) + EndSwitch + + IF prevPh(#i) THEN + VowelEnding(nn/inn, -40) + ENDIF + + IF thisPh(isNotVowel) AND nextPhW(isLiquid) THEN + FMT(nn/nnj) + ELIF prevPh(isPause) THEN + FMT(nn/_nn) + ELIF nextPh(isNotVowel) THEN + FMT(nn/nn_) + ENDIF endphoneme + phoneme ** // TEST flap liquid alv - vowelout f1=3 f2=1600 -300 300 f3=-300 80 rms=35 len=15 - vowelin f1=2 f2=1600 -300 300 f3=-100 80 len=20 - formants r3/@tap - after (e) r3/@tap2 - after (i) r3/@tap2 lengthmod 3 + Vowelout f1=3 f2=1600 -300 300 f3=-300 80 rms=35 len=15 + Vowelin f1=2 f2=1600 -300 300 f3=-100 80 len=20 + + IF prevPh(#i) OR prevPh(#e) THEN + FMT(r3/@tap2) + ENDIF + FMT(r3/@tap) endphoneme + +phoneme * // flap + vcd alv flp + brkafter + lengthmod 3 + + IF nextPh(#e) OR nextPh(#i) THEN + Vowelin f1=0 f2=1500 -300 300 f3=-200 80 + FMT(d/tap1) addWav(r3/rx, 150) + FMT(d/tap1) addWav(r3/rx, 150) + ENDIF + + Vowelin f1=2 f2=1500 -300 300 f3=-200 80 + IF nextPh(#a) THEN + FMT(d/tap3) addWav(r3/rx, 200) + ENDIF + + IF nextPh(r) THEN + FMT(d/dr) + ENDIF + + Vowelout f1=3 f2=1500 -400 300 f3=-200 80 rms=35 len=50 + Vowelin f1=0 f2=1500 -300 300 f3=-200 80 + FMT(d/tap3) addWav(r3/rx, 200) +endphoneme + + + phoneme r. // retroflex liquid rfx - vowelout f1=3 f2=1400 -400 300 f3=-400 80 rms=35 len=15 colr=2 - vowelin f1=2 f2=1400 -400 300 f3=-400 80 len=20 - formants r3/@tap_rfx lengthmod 3 + Vowelout f1=3 f2=1400 -400 300 f3=-400 80 rms=35 len=15 colr=2 + Vowelin f1=2 f2=1400 -400 300 f3=-400 80 len=20 + FMT(r3/@tap_rfx) endphoneme @@ -640,146 +751,171 @@ endphoneme //******************************************************************* - phoneme b vcd blb stop - vowelout f1=2 f2=1000 -500 -300 f3=-300 80 brk - formants b/b+x/b - before _ b/b_+x/b_ - before (a) b/ba+x/b - before (@) b/b@+x/b - before (e) b/be+x/b - before (i) b/bi+x/b - before (o) b/bo+x/b - before (u) b/bu+x/b - before @- b/b@2+x/b - after _ NULL - after @ b/xb + voicingswitch p + Vowelout f1=2 f2=1000 -500 -300 f3=-300 80 brk lengthmod 5 - switchvoicing p -endphoneme + IF PreVoicing THEN + FMT(b/xb) + ENDIF + + IF KlattSynth THEN + Vowelin f1=1 f2=1000 -500 -300 f3=-300 80 + IF nextPh(isPause2) THEN + FMT(klatt/b) addWav(x/b_) + ENDIF + FMT(klatt/b) addWav(x/b) + ENDIF + + IF nextPh(isPause2) THEN + FMT(b/b_) addWav(x/b_) + ELIF nextPh(@-) THEN + FMT(b/b@2) addWav(x/b) + ELIF nextPh(#@) THEN + FMT(b/b@) addWav(x/b) + ELIF nextPh(#a) THEN + FMT(b/ba) addWav(x/b) + ELIF nextPh(#e) THEN + FMT(b/be) addWav(x/b) + ELIF nextPh(#i) THEN + FMT(b/bi) addWav(x/b) + ELIF nextPh(#o) THEN + FMT(b/bo) addWav(x/b) + ELIF nextPh(#u) THEN + FMT(b/bu) addWav(x/b) + ENDIF + + FMT(b/b) addWav(x/b) +endphoneme phoneme d vcd alv stop - vowelin f1=1 f2=1700 -300 300 f3=-100 80 - vowelout f1=2 f2=1700 -300 300 f3=-100 80 - formants d/d+x/d - before _ d/d_+x/d_ - before r d/dr+x/d - after _ NULL - after @ d/xd + voicingswitch t lengthmod 5 - switchvoicing t + Vowelin f1=1 f2=1700 -300 300 f3=-100 80 + Vowelout f1=2 f2=1700 -300 300 f3=-100 80 brk + + IF PreVoicing THEN + FMT(d/xd) + ENDIF + + IF nextPh(isPause2) THEN + FMT(d/d_) addWav(x/d_) +// ELIF nextPh(r) THEN +// FMT(d/dr) addWav(x/d) + ENDIF + + FMT(d/d) addWav(x/d) endphoneme phoneme d[ vcd dnt stop - vowelin f1=2 f2=1500 -300 300 f3=-150 80 - vowelout f1=2 f2=1500 -300 300 f3=-150 80 - formants d/d+x/d_dnt%110 - before _ d/d_+x/d_ - before r d/dr+x/d_dnt%110 - after _ NULL - after @ d/xd + voicingswitch t[ lengthmod 5 - switchvoicing t[ + Vowelin f1=2 f2=1500 -300 300 f3=-150 80 + Vowelout f1=2 f2=1500 -300 300 f3=-150 80 + + IF PreVoicing THEN + FMT(d/xd) + ENDIF + + IF nextPh(isPause2) THEN + FMT(d/d_) addWav(x/d_) + ELIF nextPh(r) THEN + FMT(d/dr) addWav(x/d_dnt, 110) + ENDIF + + FMT(d/d) addWav(x/d_dnt, 110) endphoneme -phoneme * // flap - vcd alv flp - brkafter - vowelout f1=3 f2=1500 -400 300 f3=-200 80 rms=35 len=50 - vowelin f1=0 f2=1500 -300 300 f3=-200 80 - formants d/tap3+r3/rx%200 - vowelin f1=0 f2=1500 -300 300 f3=-200 80 - before (i) d/tap1+r3/rx%150 - before (e) d/tap1+r3/rx%150 - vowelin f1=2 f2=1500 -300 300 f3=-200 80 - before (a) d/tap3+r3/rx%200 - before r d/dr - lengthmod 3 -endphoneme - - - phoneme dZ vcd pla afr sibilant - vowelin f1=2 f2=2300 200 400 f3=100 80 - vowelout f1=2 f2=2300 250 300 f3=100 80 brk - formants dzh/dzh+x/dzh - before _ dzh/dzh_+x/dzh_ - after _ NULL - after @ dzh/xdzh + voicingswitch tS lengthmod 5 - switchvoicing tS -endphoneme + Vowelin f1=2 f2=2300 200 400 f3=100 80 + Vowelout f1=2 f2=2300 250 300 f3=100 80 brk + IF PreVoicing THEN + FMT(dzh/xdzh) + ENDIF -phoneme dz; // this should be different from dZ; - vcd pla afr sibilant palatal - vowelin f1=2 f2=2700 400 600 f3=300 80 rate len=70 - formants dzh/dzh+x/dz_pzd - before _ dzh/dzh_+x/dzh_ - after _ NULL - after @ dzh/xdzh - lengthmod 5 - switchvoicing ts; + IF nextPh(isPause2) THEN + FMT(dzh/dzh_) addWav(x/dzh_) + ENDIF + FMT(dzh/dzh) addWav(x/dzh) endphoneme phoneme dZ; vcd pla afr sibilant palatal - vowelin f1=2 f2=2700 400 600 f3=300 80 rate len=70 - formants dzh/dzh+x/dz_pzd - before _ dzh/dzh_+x/dzh_ - after _ NULL - after @ dzh/xdzh + voicingswitch tS; lengthmod 5 - switchvoicing tS; + Vowelin f1=2 f2=2700 400 600 f3=300 80 rate len=70 + Vowelout f1=2 f2=2700 400 600 f3=300 80 + + IF PreVoicing THEN + FMT(dzh/xdzh) + ENDIF + + IF KlattSynth THEN + IF nextPh(isPause2) THEN + FMT(dzh/dzh_) addWav(x/dzh_) + ENDIF + FMT(dzh/dzh) addWav(x/dz_pzd) + ENDIF + + IF nextPh(isPause2) THEN + FMT(dzh/dzh_) addWav(x/dzh_) + ENDIF + FMT(dzh/dzh) addWav(x/dz_pzd) endphoneme phoneme J - vcd pla afr sibilant - vowelin f1=2 f2=2700 400 600 f3=300 80 rate len=70 - vowelout f1=2 f2=2700 400 600 f3=300 80 colr=1 - formants dzh/dz_pzd+x/dzh%45 - before _ dzh/dz_pzd_+x/dzh%35 - after _ NULL - after @ dzh/xdz_pzd + vcd pal afr sibilant + voicingswitch c lengthmod 5 - switchvoicing c -endphoneme + Vowelin f1=2 f2=2700 400 600 f3=300 80 rate len=70 + Vowelout f1=2 f2=2700 400 600 f3=300 80 colr=1 + IF PreVoicing THEN + FMT(dzh/xdz_pzd) + ENDIF + + IF KlattSynth THEN + IF nextPh(isPause2) THEN + FMT(klatt/dz_pzd_) addWav(x/dzh, 35) + ENDIF + FMT(klatt/dz_pzd) addWav(x/dzh, 45) + ENDIF + + IF nextPh(isPause2) THEN + FMT(dzh/dz_pzd_) addWav(x/dzh, 35) + ENDIF + FMT(dzh/dz_pzd) addWav(x/dzh, 45) +endphoneme phoneme g vcd vel stop - vowelin f1=2 f2=2300 200 300 f3=-300 80 - vowelout f1=2 f2=2300 250 300 f3=-300 80 brk -// formants g/g+x/g - formants g/g+x/g2%150 - before _ g/g_+x/g_ - after _ NULL - after @ g/xg + voicingswitch k lengthmod 5 - switchvoicing k -endphoneme + Vowelin f1=2 f2=2300 200 300 f3=-300 80 + Vowelout f1=2 f2=2300 250 300 f3=-300 80 brk + IF PreVoicing THEN + FMT(g/xg) + ENDIF -phoneme g- // linking g, used between N and a vowel - vcd vel stop - vowelin f1=2 f2=2300 200 400 f3=-100 80 - vowelout f1=2 f2=2300 250 300 f3=-300 80 brk - formants g2/g+x/g2_ - before _ g2/g_+x/g2_ - after _ NULL - after @ g2/xg - lengthmod 5 + IF nextPh(isPause2) THEN + FMT(g/g_) addWav(x/g_) + ENDIF + FMT(g/g) addWav(x/g2, 150) endphoneme @@ -791,257 +927,363 @@ endphoneme phoneme B vcd blb frc - vowelin f1=2 f2=1000 -300 -200 f3=-100 100 - vowelout f1=2 f2=1000 -500 -300 f3=-100 60 len=50 + voicingswitch f lengthmod 6 - formants voc/bh+vocw/v - before _ voc/v_+vocw/v - switchvoicing f + Vowelin f1=2 f2=1000 -300 -200 f3=-100 100 + Vowelout f1=2 f2=1000 -500 -300 f3=-100 60 len=50 + + IF KlattSynth THEN + IF nextPh(isPause2) THEN + FMT(klatt/v_) addWav(vocw/v) + ENDIF + FMT(klatt/bh) addWav(vocw/v) + ENDIF + + IF nextPh(isPause2) THEN + FMT(voc/v_) addWav(vocw/v) + ENDIF + FMT(voc/bh) addWav(vocw/v) endphoneme phoneme v vcd lbd frc - vowelin f1=0 f2=1000 -300 -200 f3=-300 100 - vowelout f1=0 f2=1000 -500 -300 f3=-300 60 len=50 + voicingswitch f lengthmod 6 - formants voc/v+vocw/v - before (r) voc/vj+vocw/v - before _ voc/v_+vocw/v - switchvoicing f + Vowelin f1=0 f2=1000 -300 -200 f3=-300 100 + Vowelout f1=0 f2=1000 -500 -300 f3=-300 60 len=50 + + IF KlattSynth THEN + Vowelout f1=1 f2=1000 -500 -300 f3=-300 60 len=50 brk + IF nextPh(isPause2) THEN + FMT(klatt/v_) addWav(vocw/v) + ENDIF + FMT(klatt/v) addWav(vocw/v, 150) + ENDIF + + IF nextPh(isPause2) THEN + FMT(voc/v_) addWav(vocw/v) + ENDIF + IF thisPh(isWordStart) AND nextPhW(isLiquid) THEN + Length 70 + ENDIF + FMT(voc/v) addWav(vocw/v) endphoneme -phoneme v# // approximant, not fricative +phoneme v# // approximant, not fricative vcd lbd frc - vowelin f1=1 f2=900 -300 -300 f3=-100 100 - vowelout f1=1 f2=900 -500 -300 f3=-100 60 len=50 lengthmod 6 - formants voc/v# - before _ voc/v#_ - switchvoicing f + voicingswitch f + Vowelin f1=0 f2=1000 -300 -200 f3=-300 100 + Vowelout f1=0 f2=1000 -500 -300 f3=-300 60 len=50 + IF nextPh(isPause2) THEN + FMT(voc/v#_) + ENDIF + FMT(voc/v#) endphoneme phoneme D vcd dnt frc - vowelout f1=0 f2=1700 -300 300 f3=-100 60 len=50 - formants voc/dh+vocw/dh - before _ voc/dh_+vocw/dh + voicingswitch T lengthmod 6 - switchvoicing T + Vowelout f1=0 f2=1700 -300 300 f3=-100 60 len=50 + + IF KlattSynth THEN + Vowelin f1=0 f2=1290 -300 300 f3=0 0 + ENDIF + + IF nextPh(isPause2) THEN + FMT(voc/dh_) addWav(vocw/dh) + ENDIF + FMT(voc/dh) addWav(vocw/dh) endphoneme phoneme z vcd alv frc sibilant - vowelout f1=0 f2=1700 -300 300 f3=-100 60 len=50 - formants voc/z+ufric/s_ - before _ voc/z_+ufric/s_%85 + voicingswitch s lengthmod 6 - switchvoicing s + Vowelout f1=0 f2=1700 -300 300 f3=-100 60 len=50 + + IF KlattSynth THEN + Vowelin f1=0 f2=1390 -300 300 f3=0 0 + Vowelout f1=1 f2=1390 -300 300 f3=-100 60 len=50 brk + ENDIF + + IF nextPh(isPause2) THEN + FMT(voc/z_) addWav(ufric/s_, 85) + ENDIF + FMT(voc/z) addWav(ufric/s_) endphoneme phoneme Z vcd pla frc sibilant - vowelin f1=0 f2=2000 0 300 f3=-200 80 - vowelout f1=2 f2=2000 0 300 f3=-200 80 brk - formants voc/zh+vocw/zh%130 - before _ voc/zh_+vocw/zh + voicingswitch S lengthmod 6 - switchvoicing S + Vowelin f1=0 f2=2000 0 300 f3=-200 80 + Vowelout f1=2 f2=2000 0 300 f3=-200 80 brk + + IF KlattSynth THEN + IF nextPh(isPause2) THEN + FMT(klatt/zh_) addWav(vocw/zh) + ENDIF + FMT(klatt/zh) addWav(vocw/zh, 130) + ENDIF + + IF nextPh(isPause2) THEN + FMT(voc/zh_) addWav(vocw/zh) + ENDIF + FMT(voc/zh) addWav(vocw/zh, 130) endphoneme phoneme z. vcd pla frc sibilant - vowelin f1=0 f2=1800 -100 300 f3=-300 80 - vowelout f1=2 f2=1800 -100 300 f3=-300 80 brk - formants voc/zh+vocw/zh_rfx - before _ voc/zh_+vocw/zh_rfx + voicingswitch s. lengthmod 6 - switchvoicing s. + Vowelin f1=0 f2=1800 -100 300 f3=-300 80 + Vowelout f1=2 f2=1800 -100 300 f3=-300 80 brk + + IF KlattSynth THEN + IF nextPh(isPause2) THEN + FMT(klatt/zh_) addWav(vocw/zh_rfx) + ENDIF + FMT(klatt/zh) addWav(vocw/zh_rfx) + ENDIF + + IF nextPh(isPause2) THEN + FMT(voc/zh_) addWav(vocw/zh_rfx) + ENDIF + FMT(voc/zh) addWav(vocw/zh_rfx) endphoneme phoneme z; vcd pal frc sibilant palatal - vowelin f1=2 f2=2700 400 600 f3=300 80 rate len=70 - vowelout f1=2 f2=2300 250 300 f3=-300 80 brk - formants voc/z_pzd+ufric/s_pzd%80 - before _ voc/z_pzd_+ufric/s_pzd_%80 + voicingswitch s; lengthmod 6 - switchvoicing s; + Vowelin f1=2 f2=2700 400 600 f3=300 80 rate len=70 + Vowelout f1=2 f2=2300 250 300 f3=-300 80 brk + + IF nextPh(isPause2) THEN + FMT(voc/z_pzd_) addWav(ufric/s_pzd_, 80) + ENDIF + FMT(voc/z_pzd) addWav(ufric/s_pzd, 80) endphoneme phoneme Z; vcd pal frc sibilant palatal - vowelin f1=2 f2=2700 400 600 f3=300 80 rate len=70 - vowelout f1=2 f2=2300 250 300 f3=-300 80 brk - formants voc/z_pzd+ufric/sh_pzd%80 - before _ voc/z_pzd_+ufric/sh_pzd_ + voicingswitch S; lengthmod 6 - switchvoicing Z; + Vowelin f1=2 f2=2700 400 600 f3=300 80 rate len=70 + Vowelout f1=2 f2=2300 250 300 f3=-300 80 brk + + IF nextPh(isPause2) THEN + FMT(voc/z_pzd_) addWav(ufric/sh_pzd_) + ENDIF + FMT(voc/z_pzd) addWav(ufric/sh_pzd, 80) endphoneme phoneme J^ // palatal fricative (Kirshenbaum C) vcd pal frc palatal - vowelin f1=1 f2=2700 400 600 f3=200 70 - vowelout f1=1 f2=2700 400 600 f3=200 70 len=100 + voicingswitch C lengthmod 6 - formants voc/j+ufric/ch%25 + Vowelin f1=1 f2=2700 400 600 f3=200 70 + Vowelout f1=1 f2=2700 400 600 f3=200 70 len=100 + + FMT(voc/j) addWav(ufric/ch, 25) endphoneme - - phoneme Q vcd vel frc - vowelin f1=2 f2=2300 200 400 f3=-100 80 - vowelout f1=2 f2=2300 250 300 f3=-300 80 brk + voicingswitch x lengthmod 6 - formants voc/Q+vocw/Q - before _ voc/Q_+vocw/Q_ - switchvoicing x + Vowelin f1=2 f2=2300 200 400 f3=-100 80 + Vowelout f1=2 f2=2300 250 300 f3=-300 80 brk + + IF KlattSynth THEN + IF nextPh(isPause2) THEN + FMT(klatt/qqh_) addWav(vocw/Q_) + ENDIF + FMT(klatt/qqh) addWav(vocw/Q) + ENDIF + + IF nextPh(isPause2) THEN + FMT(voc/Q_) addWav(vocw/Q_) + ENDIF + FMT(voc/Q) addWav(vocw/Q) endphoneme + phoneme Q^ vcd vel frc - vowelin f1=2 f2=2700 400 600 f3=200 80 - vowelout f1=2 f2=2700 40 600 f3=200 80 brk lengthmod 6 - formants voc/Q+vocw/Q - before _ voc/Q_+vocw/Q_ - switchvoicing x + Vowelin f1=2 f2=2700 400 600 f3=200 80 + Vowelout f1=2 f2=2700 40 600 f3=200 80 brk + + IF nextPh(isPause2) THEN + FMT(voc/Q_) addWav(vocw/Q_) + ENDIF + FMT(voc/Q) addWav(vocw/Q) endphoneme + phoneme Q" // voiced velar fricative vcd uvl frc - formants voc/Q_ulv+ufric/xx%80 - before _ voc/Q_ulv+ufric/xx%60 lengthmod 6 + + IF nextPh(isPause2) THEN + FMT(voc/Q_ulv) addWav(ufric/xx, 60) + ENDIF + FMT(voc/Q_ulv) addWav(ufric/xx, 80) endphoneme + //******************************************************************* // UNVOICED STOPS //******************************************************************* - phoneme p vls blb stop - vowelin f1=0 f2=1000 -50 -100 f3=-200 80 amp=11 - vowelout f1=0 f2=1000 -500 -350 f3=-300 80 rms=22 + voicingswitch b lengthmod 2 - wave ustop/p - before _ ustop/p_ - before r ustop/pr%70 - before R ustop/pr - before @- ustop/p_unasp - before l ustop/pl - switchvoicing b + Vowelin f1=0 f2=1000 -50 -100 f3=-200 80 amp=11 + Vowelout f1=0 f2=1000 -500 -350 f3=-300 80 rms=22 + + IF nextPh(isPause2) THEN + WAV(ustop/p_) + ELIF nextPh(r) THEN + WAV(ustop/pr, 70) + ELIF nextPh(R) OR nextPh(R2) THEN + WAV(ustop/pr) + ELIF nextPh(@-) THEN + WAV(ustop/p_unasp) + ELIF nextPh(l) THEN + WAV(ustop/pl) + ENDIF + WAV(ustop/p) endphoneme phoneme t vls alv stop - vowelin f1=0 f2=1700 -300 300 f3=-100 80 - vowelout f1=0 f2=1700 -300 250 f3=-100 80 rms=20 + voicingswitch d lengthmod 2 - wave ustop/t%90 - before _ ustop/t_ - before @- ustop/t_dnt%50 - before r ustop/tr - before R ustop/tr - switchvoicing d + Vowelin f1=0 f2=1700 -300 300 f3=-100 80 + Vowelout f1=0 f2=1700 -300 250 f3=-100 80 rms=20 + + IF nextPh(isPause2) THEN + WAV(ustop/t_) + ELIF nextPh(r) OR nextPh(R) OR nextPh(R2) THEN + WAV(ustop/tr) + ELIF nextPh(@-) THEN + WAV(ustop/t_dnt, 50) + ENDIF + WAV(ustop/t, 90) endphoneme phoneme t[ // dental variant of /t/ vls dnt stop - vowelin f1=1 f2=1500 -250 250 f3=-100 80 amp=16 - vowelout f1=0 f2=1500 -300 250 f3=-100 80 rms=20 + voicingswitch d[ lengthmod 2 - wave ustop/t_hi%60 - before _ ustop/t_dnt%35 - switchvoicing d[ + Vowelin f1=1 f2=1500 -250 250 f3=-100 80 amp=16 + Vowelout f1=0 f2=1500 -300 250 f3=-100 80 rms=20 + + IF nextPh(isPause2) THEN + WAV(ustop/t_dnt, 35) + ENDIF + WAV(ustop/t_hi, 70) endphoneme - - phoneme tS vls pla afr sibilant - vowelin f1=0 f2=2300 200 400 f3=-100 80 + voicingswitch dZ lengthmod 2 - wave ustop/tsh - before _ ustop/tsh_ - switchvoicing dZ -endphoneme + Vowelin f1=0 f2=2300 200 400 f3=-100 80 - -phoneme ts; // this should be different from tS; - vls pal afr sibilant palatal - vowelin f1=0 f2=2700 400 600 f3=300 80 rate len=70 - lengthmod 2 - wave ustop/ts_pzd - before _ ustop/ts_pzd - switchvoicing dz; + IF nextPh(isPause2) THEN + WAV(ustop/tsh_) + ENDIF + WAV(ustop/tsh) endphoneme phoneme tS; vls pal afr sibilant palatal - vowelin f1=0 f2=2700 400 600 f3=300 80 rate len=70 + voicingswitch dZ; lengthmod 2 - wave ustop/ts_pzd - before _ ustop/ts_pzd - switchvoicing dZ; + Vowelin f1=0 f2=2700 400 600 f3=300 80 rate len=70 + + IF nextPh(isPause2) THEN + WAV(ustop/ts_pzd) + ENDIF + WAV(ustop/ts_pzd) endphoneme - - phoneme c vls pal stop palatal - vowelin f1=0 f2=2700 400 600 f3=300 80 rate len=70 - vowelout f1=1 f2=2700 400 600 f3=200 70 len=50 colr=1 + voicingswitch J lengthmod 2 - wave ustop/c%130 - before _ ustop/t_pzd%30 - switchvoicing J + Vowelin f1=0 f2=2700 400 600 f3=300 80 rate len=70 + Vowelout f1=1 f2=2700 400 600 f3=200 70 len=50 colr=1 + + IF nextPh(isPause2) THEN + WAV(ustop/t_pzd, 30) + ENDIF + WAV(ustop/c, 130) endphoneme phoneme k vls vel stop - vowelin f1=0 f2=2300 200 300 f3=-200 80 - vowelout f1=0 f2=2300 300 400 f3=-200 80 rms=20 + voicingswitch g lengthmod 2 - wave ustop/k - before _ ustop/k_ - before r ustop/kr - before R ustop/kr - before @- ustop/k_unasp%70 - before l ustop/kl - before (i) ustop/ki - before ; ustop/ki - switchvoicing g + Vowelin f1=0 f2=2300 200 300 f3=-200 80 + Vowelout f1=0 f2=2300 300 400 f3=-200 80 rms=20 + + IF KlattSynth THEN + Vowelout f1=0 f2=2300 200 300 f3=-200 80 rms=20 + ENDIF + + IF nextPh(isPause2) THEN + WAV(ustop/k_) + ELIF nextPh(r) OR nextPh(R) OR nextPh(R2) THEN + WAV(ustop/kr) + ELIF nextPh(#i) OR nextPh(;) THEN + WAV(ustop/ki) + ELIF nextPh(l) THEN + WAV(ustop/kl) + ELIF nextPh(@-) THEN + WAV(ustop/k_unasp, 70) + ENDIF + WAV(ustop/k) endphoneme + phoneme q vls uvl stop - vowelin f1=1 f2=1700 0 200 f3=-300 80 paus f4 rms=30 - vowelout f1=1 f2=1700 -100 200 f3=-300 80 f4 rms=35 lengthmod 2 - wave ustop/q%48 - before (u) ustop/q_u%80 - before _ ustop/q%40 + Vowelin f1=1 f2=1700 0 200 f3=-300 80 paus f4 rms=30 + Vowelout f1=1 f2=1700 -100 200 f3=-300 80 f4 rms=35 + + IF nextPh(isPause2) THEN + WAV(ustop/q, 40) + ELIF nextPh(#u) THEN + WAV(ustop/q_u, 80) + ENDIF + WAV(ustop/q, 48) endphoneme @@ -1050,152 +1292,184 @@ endphoneme // UNVOICED fricatives //******************************************************************* - - phoneme f vls lbd frc - vowelout f1=0 f2=1000 -500 -350 f3=-200 80 + voicingswitch v lengthmod 3 - wave ufric/f - before _ ufric/f_ - switchvoicing v + Vowelout f1=0 f2=1000 -500 -350 f3=-200 80 + + IF nextPh(isPause) THEN + WAV(ufric/f_) + ENDIF + WAV(ufric/f) endphoneme phoneme T vls dnt frc - vowelin f1=0 f2=1700 -300 300 f3=-100 80 - vowelout f1=0 f2=1700 -300 250 f3=-100 80 rms=20 + voicingswitch D lengthmod 3 - wave ufric/th - before _ ufric/th_ - switchvoicing D + Vowelin f1=0 f2=1700 -300 300 f3=-100 80 + Vowelout f1=0 f2=1700 -300 250 f3=-100 80 rms=20 + + IF nextPh(isPause) THEN + WAV(ufric/th_) + ENDIF + WAV(ufric/th) endphoneme phoneme s vls alv frc sibilant - vowelin f1=0 f2=1700 -300 300 f3=-100 80 - vowelout f1=0 f2=1700 -300 250 f3=-100 80 rms=20 + voicingswitch z lengthmod 3 - wave ufric/s - before _ ufric/s_ - before p ufric/s! - before t ufric/s! - before k ufric/s! - switchvoicing z + Vowelin f1=0 f2=1700 -300 300 f3=-100 80 + Vowelout f1=0 f2=1700 -300 250 f3=-100 80 rms=20 + + IF nextPh(isPause) THEN + WAV(ufric/s_) + ELIF nextPh(p) OR nextPh(t) OR nextPh(k) THEN + WAV(ufric/s!) + ENDIF + WAV(ufric/s) endphoneme phoneme S vls pla frc sibilant - vowelin f1=0 f2=2100 100 300 f3=-100 80 - vowelout f1=0 f2=2100 100 300 f3=-100 80 - length 100 + voicingswitch Z lengthmod 3 - wave ufric/sh - before _ ufric/sh_ - switchvoicing Z -endphoneme + Vowelin f1=0 f2=2100 100 300 f3=-100 80 + Vowelout f1=0 f2=2100 100 300 f3=-100 80 - -phoneme s; - vls pal frc sibilant palatal - vowelin f1=1 f2=2700 400 600 f3=200 70 rate len=70 - vowelout f1=1 f2=2700 400 600 f3=200 70 rate len=70 - length 100 - lengthmod 3 - wave ufric/s_pzd - before _ ufric/s_pzd_ - switchvoicing z; + IF nextPh(isPause) THEN + WAV(ufric/sh_) + ENDIF + WAV(ufric/sh) endphoneme phoneme s. vls pla frc sibilant - vowelin f1=0 f2=1800 -100 300 f3=-300 80 - vowelout f1=0 f2=1800 -100 300 f3=-300 80 - length 100 + voicingswitch z. lengthmod 3 - wave ufric/sh_rfx%90 - before _ ufric/sh_rfx%60 - switchvoicing z. + Vowelin f1=0 f2=1800 -100 300 f3=-300 80 + Vowelout f1=0 f2=1800 -100 300 f3=-300 80 + + IF nextPh(isPause) THEN + WAV(ufric/sh_rfx, 60) + ENDIF + WAV(ufric/sh_rfx, 90) +endphoneme + + +phoneme s; + vls pal frc sibilant palatal + voicingswitch z; + lengthmod 3 + Vowelin f1=1 f2=2700 400 600 f3=200 70 rate len=70 + Vowelout f1=1 f2=2700 400 600 f3=200 70 rate len=70 + + IF nextPh(isPause) THEN + WAV(ufric/s_pzd_) + ENDIF + WAV(ufric/s_pzd) endphoneme phoneme S; vls pal frc sibilant palatal - vowelin f1=1 f2=2700 400 600 f3=200 70 rate len=70 - vowelout f1=1 f2=2700 400 600 f3=200 70 rate - length 100 + voicingswitch Z; lengthmod 3 - wave ufric/sh_pzd - before _ ufric/sh_pzd_ - switchvoicing Z; + Vowelin f1=1 f2=2700 400 600 f3=200 70 rate len=70 + Vowelout f1=1 f2=2700 400 600 f3=200 70 rate + + IF nextPh(isPause) THEN + WAV(ufric/sh_pzd_) + ENDIF + WAV(ufric/sh_pzd) endphoneme phoneme L // Welsh "ll" vls alv frc - starttype l endtype l - length 100 lengthmod 3 - wave ufric/ll%80 -// before _ ufric/ll_ + + NextVowelStarts + VowelStart(l/l@) + VowelStart(l/la) + VowelStart(l/le) + VowelStart(l/li, -10) + VowelStart(l/lo) + VowelStart(l/lu) + EndSwitch + + IF prevPh(isVowel) THEN + VowelEnding(l/xl, -40) + ENDIF + + WAV(ufric/ll, 80) endphoneme phoneme C vls pal frc palatal - vowelin f1=0 f2=2700 400 600 f3=200 70 - vowelout f1=0 f2=2700 400 600 f3=200 70 rms=20 - length 100 lengthmod 3 - wave ufric/ch - before _ ufric/ch_ + Vowelin f1=0 f2=2700 400 600 f3=200 70 + Vowelout f1=0 f2=2700 400 600 f3=200 70 rms=20 + + IF nextPh(isPause) THEN + WAV(ufric/ch_) + ENDIF + WAV(ufric/ch) endphoneme phoneme x vls vel frc - vowelin f1=0 f2=2300 200 400 f3=-100 80 - vowelout f1=0 f2=2300 300 400 f3=-100 80 rms=20 - length 100 + voicingswitch Q lengthmod 3 - wave ufric/x_hr%30 - before _ ufric/x%120 - switchvoicing Q + Vowelin f1=0 f2=2300 200 400 f3=-100 80 + Vowelout f1=0 f2=2300 300 400 f3=-100 80 rms=20 + + IF nextPh(isPause) THEN + WAV(ufric/x, 120) + ENDIF + WAV(ufric/x_hr, 30) endphoneme + phoneme X vls uvl frc + voicingswitch Q" lengthmod 3 - wave ufric/xx - before _ ufric/xx%70 + + IF nextPh(isPause) THEN + WAV(ufric/xx, 70) + ENDIF + WAV(ufric/xx) endphoneme -//phoneme H -// vls phr frc -// lengthmod 3 -// wave h/h_phr%90 -// before _ h/h_phr%60 -//endphoneme - - phoneme h vls glt apr - length 100 lengthmod 3 - wave h/h_%70 // no vowel following - before (@) h/h@ - before (a) h/ha - before (e) h/he - before (i) h/hi - before (o) h/ho - before (u) h/hu -endphoneme + IF nextPh(#@) THEN + WAV(h/h@) + ELIF nextPh(#a) THEN + WAV(h/ha) + ELIF nextPh(#e) THEN + WAV(h/he) + ELIF nextPh(#i) THEN + WAV(h/hi) + ELIF nextPh(#o) THEN + WAV(h/ho) + ELIF nextPh(#u) THEN + WAV(h/hu) + ENDIF + WAV(h/h_, 70) // no vowel following +endphoneme @@ -1203,6 +1477,10 @@ endphoneme // ADDITIONAL PHONEME TABLES //******************************************************************* +phonemetable consonants base +include ph_consonants + + phonemetable base2 base include ph_base2 @@ -1285,9 +1563,6 @@ include ph_macedonian phonemetable sr hr include ph_serbian -phonemetable ru base -include ph_russian - phonemetable it base2 include ph_italian @@ -1328,6 +1603,9 @@ include ph_norwegian phonemetable is base include ph_icelandic +phonemetable ru base +include ph_russian + phonemetable vi base include ph_vi @@ -1366,24 +1644,24 @@ include ph_kinyarwanda phonemetable ml hi include ph_malayalam -phonemetable kn hi -include ph_kannada +//phonemetable kn hi +//include ph_kannada -phonemetable bn hi -include ph_bengali +//phonemetable bn hi +//include ph_bengali phonemetable ne hi include ph_nepali -phonemetable mr hi -include ph_marathi +//phonemetable mr hi +//include ph_marathi -phonemetable eu base2 -include ph_basque +//phonemetable eu base2 +//include ph_basque -phonemetable mn base -include ph_mongolian +//phonemetable mn base +//include ph_mongolian phonemetable pa hi include ph_punjabi diff --git a/phsource/r/_r b/phsource/r/_r index 22d7ff1387ba99c39608d8ee895d5266db14c9a4..319c7abe02d772b01d501b7a09f81a0ea6663f53 100644 GIT binary patch literal 1264 zcmd^;y-ve06h=SCNlDYHMNq`RU!^j1U_b~Y7DOaOXHbz4EG!HREHG6}eSkhh-vWjX z6;o%PAV>_13^2gNcb%k83XBYhShnvywi8E3w|%g`cho-IZ~&ZLYn*e=KB0HtkMqz? z0$6s;C40hGT|ZK5>V#A}aHkNw;6k++pBnP4y9L=Jr+S9;J?Kb9s>94xf-cK|5XoZl zPzCcWi57-t&nx#x2Rh5Zz!^A}G#gp6DVxmGOoQ>fify#8gGKn5MGbS9#|j##GoC>O z(;RDT0oSKcWS3Te2bZHyUO|bo&o!S!MrpF1HVtiJk2F5%z+vPvPnqOJ!wM#{@A0_T z<2U67yYFvLOXlv@M5sr}-&mHlb8|~O!52HFNjqUFZ)e1-ML9d`WjI2ton94gp3si* xWnKIuJ0Fi%{RumX8cyHa0e-e4braW4UB`B$ZsOWW?N}GTV`ppp1Ao1CJ^|5)d+7iG literal 1006 zcmd^*uTBF&5XQgVy*;*fO-rBzQT{X(QGuWi16)E%kdTrfF$e?(6yXUFJObh#0Y^nu z)oGq!n^Yh%2vE%Kb$ZPuya3$fX21E({+WFJ)85f}zjr19T;3^M(K`PndX(mM5=;dO zc0sNDgb~liiXGwh4#Yw9fored)nmv!)lgPg&u^*#>$f_H=G-Q<5mA2u75ZI-&J5svIH@!(rRn0J)}aj|A_Wnglt32g=~Ofn zq=SPF4(=-5G(*HCqd19!+#tG0rI5kN^SgU@FE3F9AG~{yAK&rb@4o+i@Pp%O`NHDD z<>iYrkJRiscvR8j=ML@ADzB?}D<1L$`l2ryOd6QTf8+^F(G<0rv~gc`cxvKsts{1e zo7gP^E3`tIluDm-r4rDgPD=Py^bc#&k58EA2hbX~P(u7ko1Be{lHq3?v%Y%yTqYJF zx`nd*Dz(EgTEkBY4sOtEs&jDzhw@j@&Y^rn{*v0Esh;9oAs7oqDD;gt-Rt6j3wJ@v)yqX$gNBJ%IglM zGl+0V=sewEAy`5a`Pzt3z(W3z&@J~9hK25VKmHJkqEu)pGeQ)N3PsU>2=$cd3b0>( zOS_UvV1wRJmaH0DIpC=2ik1KdUp$qth?cNxz&CDIG%;O?B>=lCv4lb_kNL<@pwfD^ptYY{Wy1kqNfw#^p4Bd0L;wi)-qHjOo# zl?|jZFQMTvlYJ@q6Rzq|&u>esUqDn;rhXE*Ae)+KKDd{mv+4!_GrU4#_ZtvxAAm^I0mXgRUCiU7PL_Rj80s~UwOaSR2PG!Ig20;U+&q1&PByJhnNO=@6ZfM!z`r`bN*({2>bE26lv)%F3V-%1L!VC-v zEDYQa7#}e90NEhSz#zfKzycCsVPs$cVFrc>9tH+f5ludHkpt2VOdvI1fI5KK9;mHC zj)7qh(;g(WHuORz!-3P;)W++FFav5!x_Ppf#ij$j8>u)dW%>yz_U=b3$U;%e9rWYpvVY~+R!`1&!7$mqJFn$0> z0wf}MnS6w&Fv&0>B4Q0|fHbNvF0cpjpt?DNXBRlK5K*Jam&1;#=75X_!WWL<_#+e% L*7$s3!@LRro`z@b delta 391 zcmaFC`HY<-IKb68B-k}@B8Nl$7X}6%Kc+ZF1|Vo;e8uCySOaD!urP2xV0-{(ORzDp zz}OKy3=A-~CLe-*Kza=mOuRylfng8R9wv~P8p;s16oU?fJ%bU05`!26H-iL&0D~xl zGK1D+S;n*VPZ-W{MlfZ7?V8GHC7QtqVJETd;fI;|fUS%J#*W}w!U|(+^7+Btc0h&+ z&c@~jRR%W(KZYI#2L=@eNuce@42BHm3{jK!Gwsj1`u_=o1lI$`4l13KsE?7 zFl=Bs!2N(xhp`9924MyU2Q~+`2aFFGSr{1@K$wA{hMR!_RV0Crfdy6MfwTiq&jZFU zKpkHk!P+Y17#Q|2?O_57fkiZwkwwfvW`ltSi~*-7Zny{b#14iot}>=WNM2aNC?dLq z5!nj~EF1z47(alW5AnhZ_Cp+~&XeKcVMP{UWN_l!#*8e&z>pw40W1P_uRYK)guGw@ zcQB?GCVykR0rtby|2r7+z=4d2hz6z^!l=G*WVt5$fKi4C5fLvqj_{zmP=;q7n#eLf Vbe|?jmw=;&gov=l=L-wwRRA!ZY5V{H delta 412 zcmaFD`G}n(IKb68B-k}@B8Odl)piC(2kr=_C5#L}u!E6->jOgun7x7J0rvw&9WdL0 zEraa=;{!0ehMR!_#!ld4V1cn8NIL*kK-5&oF)-|5+QS4gQ$rcTmSQkv@LwhW|$x7&s%CmLPdz0V9L(14dL& zFbFJRv_SI21U3f_R3`&Hfg-Zu{~JCBW>hr}(g(mIBzVFC?qp0)Ok%nM_Qd-CPZ%V) zKvp4QViQvu-xQ`POo*8H$@)nKqy`ZaFE}^^P#w63X90@H`v1{<8^9(bVv9j$8>ybK L#^Z^}cFZdP;%aZ$ delta 370 zcmaFC`HY<-IKb68B-k}@B8Of5)&Dmbc5(YL#W6Affdk_|z7Gr;VD=l90FDSI2wQ@U zf#m_?1F-lGZUzPzdl?^s{Xhz#rb3Q^VGq+DCXksL$`G~^gB=j+Gw3o1Gw?EqF^B`9 z++=CSi&-1~A7NnNj9^*U=bmM~g?#V4?palq^ax&g}G@c#{;3o}gI zLHZ7yjm-^{*DzhlTL1qEg9H~$%O<8Yz9~#oz)tR{(^%;0LI?KvjECo|38{< Q16(hI%r^YiIk2n%0Es+TG5`Po diff --git a/phsource/r/ri b/phsource/r/ri index 7af4548db0802ca427d76120a4c355af2494726f..5ed30dcd944740fc2cc3baae45aeeb8bd51fb6cd 100644 GIT binary patch literal 1240 zcmb7^OKTHh6o%iq|#!DmADCy2#MbML=RgibNNpAQJJi@PbiXWK~4O zl|R5$apk&;F7g9h6hshL`2jAvaHR`<&zH+g+J!iW!*|a6oo|vk&zxyDH)@;hR#^w| z_@03~T>Y184f>4B2JLHOtshjD$jveT}Hj8|-UX zb=_cYF*4X|A?omKiiG8@kb7szKc?OS;UN{(-=CcNn8#j!`XJ-LwI*7NiZ@|Bl-RX> zH7lce+0?$L7WiI!JZ^_p(;a=qH!n}aTbWrN(O7y$(eNnoF*aLstI$w{yy^JYysS+h z<1mjBT6m88SYs!O>_;ApsxJky$>BUXRB#nNY~cmo;UP9i>I$vRufScr!Anx9!KGhA ygK7n5d50X*(@9IR+e!A_QJs&GgiL_Nen+Xzv9`e9&G5vCO`LU6GKnyk`}_s|sfr{3 delta 412 zcmcb?d5xVTIKb68B-k}@B8Nl$4TfFZeoS$U3_#$(_>b=cLk5`rh9!U_f(gQwU}Io; z!1w?xzJr^A0m8muzl;yY2GUY%m|$uu=+VaqT$GdM9AF&Hw)GVlSR z00S=&OH7t!JXwGBe+9z<7MN`{j7~yRpf;DXGVsB~O*j}hVKzMAJ_Bbj<2wL%-2*8( zW|$gmuFzx%V8~%8X3%92V~}T%24ZCf#mT#w_SRQ0XaG(50CF-z2;(gw8K7@K>_iR& zkq9OoFuR1aO%!H253dN6&B&0)zk(Mgo*?Z9cMUcdXfOmalrv;ASThI$Z5LyZV31>w LWDuL|%hC-1)8tYw diff --git a/phsource/r/ro b/phsource/r/ro index ce6f64c634d2146003c0ab1a196b76c15bb61964..224e6b95a3e8af46f74eb795db95c96755cc01f3 100644 GIT binary patch literal 1210 zcma)*y>Ami5XIk~@6KnRef}nK>|l~0h=q}z2nA3IpFj?TDj^^lDv&7XBBel)prlAa zfdryJ6cjF~Pzr=n1c{1&0MTDb8KG36fH&)}J5rDv?e6T`+40@{JR57B>vuNR7YzVg zn=w4%8h(81+x!0BHwO;J+Fc%nZYbaF8a;K7stjOHA$fqu>OOrLz^?h#4OBzDpf3aP zZQl-5piBkG0G_!(RC(aRj4DCJ=bb>FccelDymNsxZ#ht6ni;s!QR z#|30iMjkcH;u4yiCs9OBt5vwPIFfK+bG7N&^j&x;@m88^p0O^~7)&IPWt7RC#aS#t zJ;~W&tYnc$#Tbj`=o62#M7W%7q;yV`5ppL*HG%fg-s+BiZ{PYpcz@sQSCX|HX>0tw zA(Rs?>7KDt--9v@-ok{T~t1X|#WT%&rc2 z{0c@NGH`rrsCB3ec>o`9I~Azy5RWhFsN6Neo$@sHt`g<(+_{yBR=<^MFi)6J-FxCh z6~FRU_s+?AERR0pIFB~A@EW_gh7LaA4f|#q4U(y`R#ndD`IX`oS*2NA#7(TTla|rK s66VN5dPEpV|447xtYMP-0?p$p=CR^MlFL$?(2Ub$WKkDQGPum~7wY$hu>b%7 delta 368 zcmdnRxr3b}IKb68B-k}@B8Ou=qXTyY(-KAoAlSjk!1aM41I*sQ@__pRqYjwuz?Q-G zfbjvCUBk`50AnZcF|fec52PJ{Dj;eq=+Ve2!vGvqU9GH5gKGe|NB zF~~D0F_bj10m$j1VV@vV7rP0yQ>*-Hjb)g#pht zW*A$OZvvdHAhm=QCXUS+lNT^u%2>e=#Pfi$0&Lk{#$S>VOb|a;GtZHRS=Peg#Sb&c cfJXY5PiG%;Uybe z%wU##omORj3KhDT50C%vldG~OWDJ-K$jB}x`P3XZ7JFoqP7O`u@|<#Vu2{~uD8I*J zt;cW53wGZIgD3m;d=fI9WaZrdbbe(z?_K}s+jKrh!%&;Njs*bopwn( RhhMY<3~R3??U+BSoex(Ciyi;~ literal 1006 zcmWFzaCHs|b`4}=U|=XJVrEDI(#XJp_0R$c-+}o910$G;5DRBu0qc18pM%kX`vId4 zSiuCw9o!!nGQjMY%n#t=JJ>SV9xy%ti|6ooFhkhy{$Jw%!2}b3APr(c)KthZFzjL4 z19BRJhBAb$!eGJR#$d}J!@$8H%pk%b${@}l&!Ehp0Avd>@G%GgNf99A0?M;9Z~`$1 zvN5m%UCIU&;{vMT2GSfrIS!x*hy+29JPa~3FoW5wKv9TJCI%)Tiv`GsiGlc>U@)Tq diff --git a/phsource/r/ru b/phsource/r/ru index bb8b50842e6fbfe5cf2bece44cb75ee30da92be3..9b1f276cca92097e73847b9d80b95a7c238695a6 100644 GIT binary patch literal 1272 zcmb`GJ#Q015Qg8q+dJQfeRdqcK`|ykJ`4m2LP(Gz@JRuQbc7(}&=4ewG&D#c1QZkq zQBYD*QP6^*B1MG!2PpUh=qhRoBqWd!@7((CY*Wy1tGS(hXXZZU+1LC z4u?-L<}hy4H$&&M%RGlQQg7a3=PON3Vv-}@A+?>KJ8RF6!sQ@NQdz_-nwaAHC=M|yG%BQ1M~!oZcgdc{9NE^%vcZ^8 zkSyt@m-6uGiEp?`)O1}kG)-n96Oeb%-wCo8s(f0xUne`mVa(@yd~|-jt*!M5ea`T5%kg3u@D$(Sg`dAj7?^F$dW6#2u-{~)xIeLlZ)^g4l6 z+{7C!^CV3(K8xcVOSp!IIFA*a!AyGM=E$u@78A4<4&xN-I?QabYKElhBvfUOJ@!yK m?s6{EWY-H9a~8}=5L&Vh($iQ=X+$I*l5I#$Xqjio`TPTe(}ouS delta 412 zcmeyt`Hh_;IKb68B-k}@B8Ou=qXTyY(-KAoAlSjk!1aM41I*sQ@__pRqYjwuz?Q-G zfbjvCUBk`50AnZcF|fec52PJ{Dj;eq=+VaqTWF_Gi$&va2_*r-+gapXE}qT!-JE-aZdxdzS6khULDpv-W9oxeguMd z%2GJdR^!yEZFNRhCh(xFdB>&dQ=fb1H5w<^JHw~lv5*Su@Y-ox6GZAtZ<&2 zvyNNMAw3`LkqL~}fr*~z;B-4xXGfa+=$2x-Z($dG>|qTlme9g7RQ`S;CvPww3j0lm}hHi0ELsP}fOHcC5dx=-!9>ZS4Z^{ey zKkskf{M!SG>971j=jE%dY;%@Qo(UZxQ_{(6(j#O_Iv}qqi(ws}SCvk#fA^4%Cm2}# GA3EQVd{@r^ literal 678 zcmWFzaCHs|b`4}=U|=XIVq!=E(#XJp_0R$c-+_7lzA`WqAr=ngLv%@G%GgNf99A0?M;9Z~`$1vN5nS zumDL8pg11`H<0E4%5eZiKqLr)wZ1&Ts+GBGd#Su8+4Obo>51dFkOSqO7j zfofTSc7j}B|8w!=cOd68Ai@mHMH7RCwFsc3XrX&tjW{|D+IvJ8qg2=L8&wwzOo}pZZ&gKoSWFiA@;C}2#cs=3CmbV0~_Qu z%wd6homORh1{Ffg!tnbowJLLBo)Kda71_lko|}et+)$lV1_;PP`ne{4#c9^D@;QdN whVPUcv_6N!7kBrv6VvYeo9=w|?9s386h9iuj&&&J({}sxSF;05XUCtNZ`-+w1ONa4 literal 1006 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 diff --git a/phsource/r2/r2a b/phsource/r2/r2a index 046f1742d745c2a5bf65058e2346a26b70ab0976..7e68d7f8b9f69b2f7fe5339d5b9fdf95f4e01319 100644 GIT binary patch delta 4367 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 L>Eit_!|4A4#?B_! diff --git a/phsource/r2/r2i b/phsource/r2/r2i index 291434a7ee9aa88ec6b89c4963063fd1607fd220..534797609802a30e7ebaffc407ac61ddacb627f0 100644 GIT binary patch delta 4578 zcmcJTYfKzv6o$|Fc9#7X24<+321yZZLMRoKMv+}GrL81X=@tT}utAJa5@|zSx={)N zA+^{x1q{XhF&1cQo0@=;0--bzi;4DMFto_^&=Q&fVZHL#EQev>9l`B~aB_-KjpM`7{*dK`J+oQ;NSs_OdZBfOop8VV@miOrU*s@_gWeV#-!K^lLTYG zT*>zT?-&mv3|neDX2Ny?aYy(D?huF>+jX3=X>Bnfz77)v;-d5`UX()G;y-AqacPm3 za^psD6O1cDFI*uQeKrgB5sXXX2Dn5pQf0(cofZzhz}-&1EN8SlW~fCWz6FH@VqAC; z#|cEQ&4#@MVnlouMhJu;p94V$p^GSEEgWWiv3cbpTDZ^)E`o7Gu;UGak-&>t0`bL& z*rda_FRjD-p-Wg^vBI69TaN!#|h~q*d948Pdd0+-oLKFDo4=B-mV8Ij+(qy_P?ETaD@t%Hln^a0D-Cs-XpzlD zmQA$SCmw};1S3uEW@(|dFm{D0bFWGcU^sL`uM{hwlweE=ujq!}Nq)$3l3;km_rOCi zqUA=W_k}lMLC{tv=!5p{S`#fbnG(RLAHJYyG~ZM^uuZoO##zfDj%-rfcs<)jFb<2& zaF}4UN$;|@rDT*TXPihgwD&IThh0RA9BU=y5C}JahPequjk18$5Qt+@U*WMRI=h{8 z=&AFfeps)CDTt~U3?b^!1$6|X%<6(N0M-O6-Cv0#PJ=hee^4Fdllv!zLOk z#j(+Xvz?x-mA>`d!D&_<#B4Z+5Pg%~3}jWOwEzaK5MIv816ftf-^b@U*ygh;U)-%` zl~rv||4)h$$%{%>3EHg63nvkVpK#?8=86uE6Z3b%-=|G+T$-P?fOzNli(q=ogVtcMt}?-WtHj&`oglbNq|U+>H>mqU=+e8zE}tOoY}K ZYNeOlL{KX|q18|^gyr2tI9Ql$`4@ZS;Oc~~iN($@qN{UG zoeBn7OlAZ$PRBNI(<=iMGV32hi8>NDr!1Ls8fSDmml@{=)3x^W-kM+<|2t`J`uv{r zKIgpe?LH!O60W$&QczNCnbXAOI_^9@1puYAl-7_rP(uLjk$c1-+XDs}fS&5<3~qqT z;5@ZS*#Rb{=X-~`6&z}SKH5iJe*tSlrFwOYR3|2Q>IKRHennt!;K87OHRnTgVYkCe zBHtCF$#iD17r{B&2l9*Lf!x!R%lzAL84*sau9DL#>4^Ou zy|7I4T;Iz`K9r%}Ikp4Np|NC~tOJ6I88m{pKr#L#i2RELM( z%R5Aj5mh=F@!R`q z^op3)_(S6dC$yv~O}zPo?A*NI{IkNHIEysov&ejyg_e)818@u>Lb%5y1R*Z))o=kJ zg4IJL*e?Wtcj$z_$CWdShX54rtyV%-!xjQTR%)eZ+3(;R7UW0h5xRrxp`Qf+yPmG6 zm3$Kvp&C)&puH*}-mUgUq!jaz7;x=6&$c^|;Q2-fG&~pWd1N-sLw9FfEk1+p@;IL6 zp}UQI3v5KaG<6$I^XpE^)kx${?LYB7iJ`{x>3^8Y%&FN6bB6@8(ZbYZiYuj@R6;pI z++t^nE9D@!jX8)AHvWCEA%sS~j!Nfj*GcnLrIY4s*($Ncx#=#`_1&k$tD`}@I-+D1 z5QTetE>}j>=$61+Ac^+=pZ`2Xc4Bi}>a4h|Am~ z(W|l(SHxLQl(RS~;%08Nh!1Nj!ak32j=hmoYuuOKWfIJFIqgDUzRv~HMqY&UIq*L5lS1IcV!qUn*jF1MxN+v%LZ&-Mvi z7m0%|gm4D*gA*a_idJGrh<<(*^dp2#wT9S4h!@>rQtAa&@w2{rqt-=I;Vyv)Gc{9{ z{4)F&0DJEG* ox_{q0s%aKR8}*yYP-T_!swN<;Au2!idR#<8Q~aMo>06=9|5eC&MF0Q* diff --git a/phsource/r2/r2o b/phsource/r2/r2o index 79111e91ed4d53e7308df0e85b129cda67106a22..6344bd03051ab309a22ca880ceda2aea8218c827 100644 GIT binary patch delta 5014 zcmcJTe`phD7{|Zwk2aTjmpdKBNwF0z#T8_zYZ{%Bc6HK8%Q|cAk9F3fwKzHpbvl(e zCqw8;WGbd0o1&;=y1{CT)6IgDDs;Lk1JqAzke*O*Ho$*Ut0D!Ao8q zlFNPaeV*_0ygAj$4*bBB(vnvTmXy9RYp0UG1?JUlt_ohkE6vyF0`9Wty34A}eRKhB z63F6NJZ$cx3phD07Ln$AqYL;_i`^#?*{=hgypty)q10F;_6-P{AKQ>lLS|(8G;8GL z=)Fg-=?^v!UymKD77h$6SRGanhCQ+xdkDiC&r58L$I2kJ3P{3`WBh|0<1rYDPdqw9 z$2wURgYYXb*9%Q1(&sJ7seiI*&sWh`>k$WHR@+2lFLy=Fs>!58SqoPXm06Aun^_^-Od!_F zCafnAJ)W(ihjfww^$QFTh^597x%8PsOwM+M*u}oVE&|bH4kt|nVu5EDTR0IX1nwPV4jSMXo=Q_)N#s!x5e8Rb!<@?e3aeTtLPIzvx z&pq%Yoa>T$DC%5E3Fq?ZUEFjo`6$jsysYd5b*{hzn{sll!!sQ<>SYJfOEe0}W?Od| z_GGeQqEWBeBztWdZDDqeo_@8g&KbqI2H5}x3C3diEf$kht5F6}LyG>MdIa|f#(iHE zyYHiO@Y*S)=%db6H^n|cHooU#WSKF?QH$C9Z8n=*4Z$Ke|*e|YN zKY{4+u0{`mSfuq}5rOE_f5iWsMw}DMRX=A%aV;j>#`qGxJ(^OMe;XRb0W=bf)RbDJ zrdYM8*M?9}F#N_*_{Z+(&RV!SjhuUZl$5IHU!$I2REu9wO)zRwcA|!08Qsbji$CTQ^BiKP8GR3DnlR&hm^q`$UOwvwb5`ma#tj0tegu`Hx z^JEak<&F?_ya{y#B1trfBm!|cqE&cWno=pg)S5;6%nK;5=DfdG+3<~EYjA7 z5V49vORPkz^;uKnq-vFF4Vs{0sL|L4A2b%xR3$B1)FRTE-OJ3{KsNpXd;!AwoqNx{ zmtB|1sb<1vW+YqZWG272g`Hm63II7&4kdhnCq(=ZKLZ?L0D`Gt`}a?blHcE{ltxJd;$#hdtXRtQREuwAevzP|M?YMvA zJI(X?5>+x?61ifi5*Bg=EC^A>Y=J6-2xIfQ0bW6Eq3=Y_ zjVUl@#}}JBr#-TK!k_R8rz;1<8G}Un)CQgXRZkdLEWAQRIF&e%Q^{SZCZH^(N~sT- z&5+K3J4bW$LS?<%9(Q2G;k?4tz%>ERopEOl3O!b9fb`P6wD>0*yg(RD$8eVGfH>Yp z);~~q)4~tz zP0YJ-&k`ribKQx2<8tzA(?x8tDqafhG})#hsFFmqo+EiK~n$n#N3!?O5d%hjaQ$=SA3 zX9xZ*C^uK4Sd6n9ZDo*;xI2wh!_#aL>5|@EkE-s&mOp_0WM^;VTEO z&{w{)WgkiLuASy&I+`jW(LyW4n;y*k0Kuqso{b{sQB9}%8FY9~vo!@ITk7>lremcg ztA8st;@7D0#s>+#iMkmZQcSivseh%W@u!oV0%xR-f)ODm2#ubA5I)N5;G=Y07K7>l z7!aacqbA)F#7e7d89=tY(kfX#o8p*gwYW8{R0CvCFhPvfC}uCbpkYi6RYT2JUVwBZ zuw7IawMz8|EW{%IL4Kse0Iq2!Zt1R3IW8^=OBqh~T9<0bYnOPFoD)Bn0P8 z8apfkKR@4TmJ6wJC`2_kx}0`Hwd)>d;ksnFLNct=W`a&q8!2dmgF|C9Idp4CPjEvZ Z_;1(U^!~v6vCj*?(x4UmrbT1v{{T|jt#SYW diff --git a/phsource/r2/r2u b/phsource/r2/r2u index 71f90d30fa9d07f41687cc313cd092ae17fc1b20..bf9c6dfd6a9d4b6926eea4d0889caf774bc194e0 100644 GIT binary patch delta 9686 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 QV`!ymQPb2G;?|rL-)S|e0ssI2 delta 642 zcmZpYzaq^M9N_9466_i{k;9?>`~MP#865MN#F!a?fR|~4Km^kRMi6@g3xl8xlzoKL zf%^d?L_CC>ffK_1{@;U_fdeLvMl5JtPA!f3;|pSH{1}0xj}@LK?van24pvI!ORD`0qPzGh6L#otT1tGZkXJ| zbgRCDfq_{82zN5-FaVv%6~r9GEWqx;Ai>7K_KxWtlPFgK!x2sfAnP5IA@3K4Cp-)c zCd?+xmHcc>Hv9|>dzkhxfdZ&T6v3{LL$EcJA#66m%L1B$ON9@Mhspd_*s3~T>ySRT zY0zeC77b>mw_hgLb4zEy+;W9c59Ah3kXyLfec*0U;;MqX#e{b=+$}NuvWy6~h;tBf z%Vs-{7-qQ7S(((}wsElsz-^P^dH}aAmUlPEHb#)oP58AzwgLSO@_CIjcH1l&U_MWk gJub(lbXGMHIci5CG! zyORe~d7v}w5a0L&(5UG@pbc__HJ<>63noLD++xiqK;2__8>B%T1b|O~tQS1?q}@qs zpx6_Dlc4F~Neg$h;$qwRJmA6INF>q7k}cWdXN$4+TlAi#a$P_?$MRsPGDK~92x3Zx zfME!Auw{f8z~T@!XRqV`LFm1fhav7h$h)Ap0bmPwSt6duD!dU;(=5#_5q@`)i*Pk* zlUgDI>KTdvd~Z@q#D>;_&j|pX>C8$ld@j1<1E|t!cMb2Q5U>&Z-ay{WStXw`h;HhotRCh{(2&oMT;#jM22-4T2`&KvvO6qGWBqWAW OnzkiPV<8^ZW%dK=C8;R@ delta 642 zcmZpczbefU9N_9466_i{k;Ae6`~MP#865MN#F!a?fR|~4Km^kRMiAS9jX_Wb%09yB z!2N&`A|ArczzJc0|L?)ezyT9aklw%oV^_$j0d+#uYbZn59t;T#Q4GBdO$@;d84R94 z9Kw(`S&ngi)&=_#h5#;v8*T_Axj_iw1_op|aKX$6x&i7Q28IOb6Ra?CY;Ks`%XF*0 zgMoor0SI?8>M-13WZ(*74q_Hy_W*gA?H$uQCQ+^eh9jH|K-N1ZL*6e8Pk0y@OqflW zEBV=&Z1@=%_Au>X0tHZwD1u!fhhS?cL)dJBmjyHhmkJ*i50m+=uvK-w)**dv)1b{Z zEE>#AZ@)}#;FivSx#bF@9>^`6Ah&R{`@r3z#8m}%iwW;$xLacQWf>7}5$7P}md*AY zG0bqEvofi{ZR27OfZHa+^#E>LEbnfRZHyqFoA7IcYy8xs!W`)ily}t(YjigOZnhI<#;1Om905`IY^Z)<= diff --git a/phsource/r3/r_ b/phsource/r3/r_ index 44f3c0e7c078ad3e89f3f0ebe886c0a952a9c871..6b81ca5089b0192812eb977d6b2bc6e0b70c2795 100644 GIT binary patch delta 803 zcmb`Fze|Ea7{|YNzIN|xuSB|tK?Z_2HAqW8Kp}+2!iHC&wK*C@XlQVeaETzHAsU*Z zp>SzJI%2NjypcwkLSaEJ1f^|yR=)}-Y@Ot&h5e}sGew4 zd6k!GE+fspk>EhU0#+eXK~MDfQ5eYZ3~v%?V#{e^$5zB*fW=hgz&79mqgC0FAgJhJ&{>fvCSi$|P&!j{iEeeQTyfT^vXW zt|d;Kk12@@H_yHVgqDyGy*s9aB-0YBg?a)^YE4R*2pdI`Fi1|`^jk9|y7o|_OFR0! yKTOj=9AY5MG_{;F)^f}=rJ`k?ikfMXkK7Z{KOxD@f{KOuElK`4P3>p*IP?Q-1B4L( delta 502 zcmbQId`y8OIKb68B-k}@B8Nl$4h9B>GNv*nWyaqO5=;yXUl_kIK4O2wRKUu>pvI)e zWWza~!GiA#@Dn2%r-{j$mNu5Js>gq!DZfc?esMGoGJC)KD@+W`>-A z!ZC%T3Q`K!<%Boav-UD)z#P%c9t&~=6UY(OoL}LNn9O6(_=BB+9png*Wp6kkjsUR{ zj?i;xmSA9nISA+oDBH>v=m;=-^C`|H%o!(uy52FpWBSCN#_)+967JJEyBMc)Lc&^} gHf%DLgBtyhp&hk0Drk@^8f$< diff --git a/phsource/r3/r_n b/phsource/r3/r_n index 10f35ec9ff33c89af1f182b843f152120aad7b3c..f8e2b06f76fa98f5ba859ff7e46def8577d4a4fd 100644 GIT binary patch delta 803 zcmX@EFkhJ?IKb68BskD$B8Ou=0}$*0;xeW(rbr+i$)L>mn?Zt!f#D0|7se={NEE{( z_D4(wtPBilOlnL$K#?8>8_wwr9vl!67DfgJ7RD#sf-DSN3=9!W5lj#fA>rqYdw3Wa z_Au>%iZC!(a(t13hA>Wn>X+pa=wLz!-3P12e)89h}oZeqaHKKwP|vM~VsP2R4KsDuj-K`~dU;!Ve4#9l{V1 zBtJw*qX+@r=OB+PVgh$DrXM!%Wx?u+X7*T+CzuhQsOJ2N=84HX_KZK+8Q2k?09o{g zlYtfC36Kc7C-fYeB^Ve%-a_>RvJiunE6@{2B6vMGM wQ`2{7%g~L(MFwma>`D%7MDLdjkMPETYN2 zAc6p0)@3c;!fh`=0uwkdYLHg#e(4K(pcf#AIShqgS=|Rv$GW_lRl8BA0ZN+N6Q-S4H{;jw(fGNUj0LqBOJh}q5P}dV@Jt9K#0PJJL@0!)h$BLHs4sm{l!zWe zltK+cNCF`MDq**C!)_;ayEU;9@C;55Wk-&+0i$8u8d2j(3tM~Ms*-mQWxh@bg%CU9 z{SR^ITVS6YI3eiSn*c8%s9nTVvK#^CfF$C#=TZ{!)7HJXQ1VTA)y6h<_!e}yy?agU fvzoBC*8OX!`|YL=SF)XNX90KL|8}<~`wPl9hE-|$ diff --git a/phsource/r3/r_trill b/phsource/r3/r_trill index 8ffd859091c0cf02e7499b4d1e02afddc8200404..92a950469b917bb0b85618620a96bfe280d4a626 100644 GIT binary patch delta 1201 zcmb7@JxIeq7>2+5lIk_hwM5ZHaVgYT@TU%fh=`Q#iVkfNDT3(KMTIJYU4=ThIf;%= zVvBSsB4WY8Nkwq7t2j6)wcz3<*Gh5~v^V7EA$R2AeZRtBF+%5NV$u1z+0lI(-2uKL zbRD4m5WAHGe@j4uYyrbdJ&qNUxdHoGZ=D^F$>wtY&`tj&(0SV+d_7D zlpJcbUvhZS%Eaw(!k)qH;P3D^ImC)C2Le<4Z)ArE{l7zDQ~g!q6JCisi0dYa0pF7( zvBvHsiACcb!}m delta 768 zcmdmPxLKDYIKb68B-k}@B8PLmAx8-V1N%HCG3H3dDh6JrA3PCE4;V8z`570oGVsU% z*+;mznPzY>usvXW!1#?;xfp9`Nhd$3-!5&d<@&977;&PH3q-$ioHrueeGH1XX@txr{ zBP<+_AUQ&l`zG8G#k`l`j))Wd%zy}oQfKUru!M)hW_!*k=6XGNxHB@UF~RJ6&v6;< z>0T~gc(@|xr&#K54>Q6matS8cD5gRwzT4`W|p6BZ~Ebrqj1sw#Mmx1Lv;yMo(vbC)16++mK; z;@rog1$Bf5mok$E7sTQ-ygwMvKpnvt0O9$5sm#{zZdB_ zcI;EwOJwCKdZ$PkQ76mDgo%&j6Sy)m8?2LGbMTDJx|SqcIZzBD3$4>H(5gc*&iO7K zNEAXb%W#q`>JoBsnwFuoq6B6HrMIxuOq$cBJ7tdMnXq|Xp1X?fW&dPT<*+&9`>@(H zX?w8RwCcMyo6`cXVz&VtHh|rxLH&bGhicd)u@s$l`92%XuUcQ{k&N12=OOFe=2PL~ zw$}-`?`=L^o*VLuPq*kdr_aF2AAD%8@Oj%@y@@use+o{JKae0d2d6~~qvb0mGB}C6 iev-&D2gfMuKoD!M?YLzEGTrA0POy;1I_OYx0 delta 696 zcmbQI`9W1NIKb68B-k~OgMopeD88g9GbhK0mB9wcV_>lV`GD=xL`B_<6F^P`Qv_2y zBO_xxBLl-1#xIPiEV)dnEDQ{4OlnLUxlRKyge}dti9wnVqW+N(AIl>l28KOMdzcs) z3^-~;VeG2y6>=~(1A~S#guR)EQJb0N*JO2-$<{2o^+3~EK-N|;YBLHjGH`>eoyB6$ zdWV&P6=dy9t_O^BI2o8hY)!rs3|4#$%pmn3x8D$EV1`)B%J@Lk0q6jb6PTFfB^aP= zW*1>82zx$nhPx1J&)aOvDgt!PwgUl^LpgLaV6IU@a?Nhm z)eJD#m~yRTfVswsZxP%zy970u5w2liK)8m10pS`$4w!2;J8*&m;Q{lS$@x6m^|~A| zi(fH@!Gqx?+kd#l^4zTOU@+i+4!77r=q@8+i#@l)EIudKp}?l{SIt{vo%&?ew@M2X z_QWjS3Nr%$kO`X_ diff --git a/phsource/r3/r_uvl b/phsource/r3/r_uvl index e3aef214e21bb02fa054b1f355d52eda0a29c742..1f7f5032ee362917b81c201b872fa8773e1d9168 100644 GIT binary patch delta 1210 zcmcK3u}fP)90&04-Fuh3!+`IVLaBmag&?Rzv_oSkL7swxgQ8&KA`XIuq7Y*VD7H(B zL!cB&{{RuhQQ{&95nTeM(xucjh-+N3LQbIU_St-pX@ zGd6e|PjQ%>u#Di4~t3K{l5wU0$ zz2!rdr?0lDubJOgm9a5K8CN(qC?hP+7-d|`EGQ#qFAK_WopsjCSPGGeDl?J`%@ehf zq>P^WrSD<<4^&6$2=M7H#@Q0LIV{~pyLine1T5Xfh#bVGgim+z)pkva$U4b82sNmW z|1EBAC_-Od?`p2hxqUC<0}C;V=oH^T5i>H>gebI1P7&6N?@vQC50t*T-qjJ8FB8Ts Do)*s_ delta 735 zcmaEA^3XsqIKb68B-k~Om4ShwD84kOY@(o5{WKuw9n(9e8s?R342%p6Ul_kIvanZk zS^`z6F{v>v;(W;H!wF$u6;NV4A;7>8!4$y+)W+Z}$iT3NX%CqFMGC>LkVCLFlp$Us238Pzr$7i}0}lhx%Medb5o7>*8K0-EIbfdNe3lbvU!4cczF!Q7m|^x= zvff~X+4q}sKLgCZ69W0HF#DVZYZwvs<>?~=xg-@4$i*da`}FyiFlQWKU|<9J&WACN zNq~ug1LQktR!PPHRt64`k6bv789F!_*g))70cRGNZTkgFkZc3S0@f(~{~vDKM4=_j z^)TBq8TA=qwkfimg&@p=&g*RmUU(C*;DsL)LFk1S0dL0;@j|pP|Ihm-J?F$;4CeCiChz;a z&pDhtzxV$<=j4e)2WL;t>}dnAxcEX4&vWAb*ydjgdTsl^YHT>ZN%-+d!~4tajIS2D zVq7tvphpH!H)>sZBX6AMTn2E>U&}5V%f^SC%K+9xNYs6GpWg?_0A7nB?)6M05b=8K z+!C*;`~Kt=GJrRGV0b;n{sEU~OoG&>*qm(s4x@^F7{L@?$7lEmKX6>Y944?E_hSJ4 z*o7j-@i@*hL&s?|cnZ&PK9Bvl4?B=zCKCKkp@SAjltaElusBS#aX+X`))vADa5uu3 z2+g7e>8t+z^SBu5XJ*qkL(g2pJ8EsM zfMw$gpQC`Acc6f&nB89YXyPUhir4f1Dqsgs|2R+kFb?yKUm}T5@d4h&8$9!4DDeFE zp@-+ZfD)sou}FmVHFYfhFpE>RE)FgEu$5ZTg$BZ{0lX+|XbW;@-3^C(2Px}R2rY_Fm z6;ioO%~Y|6RcVOV4KeBfPT*CNm|`_LLJFdgS#o@dSI%?44>?vQ$#a^PM;F;7Nl2bIF;7OmhB+CiMHN zUnqztL?3k;bUf9g3NiM!{5$X3tX@XduBU0NH~Z3 zZ4M)WNkovw22OE+8+JAgML1h~{l^Zk)xYdu=;T^g=~v5Ha&B3B`Nncu(mdSGi~M`b zz07VLBM2jf73^Rc$JjT5&a2f{Zv`D{VI>H5=tc2^?LgBKXO-^CoB=J+ z;O$_8L;W@z$1M+f5vVt85_tBAmx(#xY~7VhylpY!=3-Ha);LB@8MTIER0}NDTW!{` zf-wxC55pK`XAw*6dm3?Lw(V~97NFd4ghcB%NNFp$x5$=dz9^RJw<#)>Tznr>PSrR@ z69K=&{vV^wb}%04o8DZ^fuF@xW|)hqpTvM>Vtx#;hKDePad^=MAA8;CG;*%Xcf+K> AR{#J2 diff --git a/phsource/vdiph/ae_2 b/phsource/vdiph/ae_2 index ec40a5d6904275b5cb763accf909363d1e052e25..ef1a2fecda68a8be52ed56ac3819ce8a5ff0532a 100644 GIT binary patch literal 10698 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 delta 3216 zcmb`Ke@L8l9LL|!^W4oxz4NrjR5YF5IyKL=^qMwTo=%sw1=p;#HQ8L*dTMOlA1++A z&LGH`#f`6o><=-B5h$GhgbUhsMbOx?gf^PcAIAFQ{*a+CVubMYdA`p*&-1kz#|;%9 zK0N;TyxyPRUhDb1L+y!l?Ru%F>&0_wM{Ehs$6d*>r(KSHF&|iv7Wj9kypBELbL{?7 z#~!S3>{`ER*I*}}K{sB;F+7e7IDzwc7sISlx}*iAc>cINE*l;Pl~nPl{1x{VaW9pQ z%A@@K&OAJ1F+{!anfB?KD+ML_*86bTMWQr02P*=yW!L&mo1K^ch^h3a7bH{OaRrD- zbKJoZH!$Ej!0nBBj(`?k>FNjp0wIHTy=8NMMnyH()4&m@?g%=v3o zDtrGYmHl}rv{DoGhSPRP%_^0JxvAJKL0PY@Ou<<}Swv8lw3RifpV`V9)lAC#=%7?S ziLI2<7F6Izuu z6Fcl#TqW2@WiL;qf-eNYVk#ZMA@zdoER<1jHQKR*#0JrdX6(WM$^8(|v&w?s1qNL= zYFFb7y8flWAl9zKAPNRD1-**=w<3&MBG^t0y%hFS=wsJ?^8y24Fbt(jdc7I^=%lgL zNdv2m2zFyH7&IJZr;Fw_vG|NRGLmMP65=4v5it%~wN>H6cUHC4u+UZ`!h|Gec3X|v zZDj;KiwXJN#yj^#cOb3oHYrbFjhn@XV|+A3>A2ma@$0$-A0vGiDA4&mHry5EBQwGyX$NAXGtls zL{)2A_bO^pFddK94MUqeN;zj)QIlS4rX{^|9?M=X=%(K_SJFheYOkcV*3)LHv3A-R zTdDU#sKyBTun+s$ucfovA|G`>QzU>KdRh!;C>}q`i+o*f5#k{Zac5(QqpnF9GtH{C zrrE1yx8LL&GR1Yx(9`mDjeHHuSGg}S_TqNRW<#=n%9F~?AI`B$kCf6KGNz8o9xm{@ z94;(R-vA36P?S{68-R+=uJEXLI@b(rNX_$Ibz62{Sv-9Mgh=51H$W9NbUO`{?Kp%k zD!^?#*v)LR;(N`*g%@(+J@jmmqTDXd0S=^j281Asr@^<`tmVfx{}KzSF7D1nE<$P> zJtLA?OVtnT&JSmGxM1b9j=F3&eMPCuf^?5mB7hK^t(u9g@T$7UGg?msnq+48!3n54 z*Es%~u^(X^#&bmQ1ahcfy{~ov3{ZcDv3do82GPm#%saC?^yN68 zx;S>`^3~2^mY8LYiUueT1dt#Fo=FACX?u`UGOdqx z|7!h(E7=(m@IE%7O48pAZ~C1Fc^OqjZV?zY4Yqsn~(Oz?6riIzl_@kkPH z1EgybHGW5WIG!AGF4a?*`&Q^1bFWmERxrz|@mUeP`!I^iG9Ghi{o-%#!`M;3LyjZv zZ}O|QgDVNdeDXwZN-+Z=k%jz`{+w8)eSfmzq{PDrA}r)HsdRvJO{0rf>A`*-Gtquv`KO}&#MAtNa^xl^K0vosFa{vGU delta 726 zcmaE4a?gMxIKb68B-k}@B8OeQC&vi}28MS`@0eVfCNj7(F)(~#{K8nuwveHeje$Xp zNsVbOrvu|!P6+!d&jp67JPZsGOc6|qd<`s$d<+bGnDzj50rg2C*cEaxwkL;%GK9TM zs$2SqY@33g@*`C(4Oy+7+W&RlZI@PFm2+LX57NXAmGB}!gQ5qC&LR~2L1<(4;V%G=CV}qGjM{~3=BRTY0`Eq z5Vo0Lh1?EC9wv}D1A~S#gq$;aV*Ru9AXTY4`$TSV^ zggCa%a3}2K{K5cp!WEtka3|#Oc_KN%3&{!I9N3(&S%Od3Z8q+x-1|Y zJ(wB9JAj@B+1SO(Aas)H7Zb?FJ6sL?RzOdKY`n$W!Uysk$i`g$=Nu4^dT~@p^Fcig zvhgq@2i(&THqgc;%o%eSR;*J@c}mwGe)pYWthRiz#{|Hagg&h0}D3; zH^|gyJO>$Kcr~~{?3sKon7Q~Fptkk8D9A(rRYQWcLQW0J?sd^nhOjsH2_e~L$Fu}) nn;Tm_+_qhuU*Wd>ai-H9g6f9UIh(aFv5b&k=P(%d30`-6H?CeJ(YOC(y?wot> znc>d)-E+jt&O#G_~5FvVJ+{&XxaKd7)|>fgiie)^Bg+4JWc_ zE}Df4{OV^zm!=p7tA*~lL7c6NURtuhTovh0gT2}L%rqGI3o2H zm4zvmpLmB1V7_CmrDs!jjn8&*(!VX9Qn~h{h+P=KC|<;QyoGBVr!j?{*ou45jZN5$ z9_+xQIKc=Vq)gy(JVkw)?|(NoBFRW3_@6`*C5|YE{D)w3SnzQ@s72;B!U%9RLZ1l5 zrUYp#{`U2*gL+rWy6(8!QqeRh&6f$VQ z2C_(K0ugPGa!sNg2$KNW*cCnj&TSNb|K!q-8i2BvTo6#^51v-BP0%t` zwhr6tGhqH7WWd!h?kEHPOA;G-`gicO_v2xn@iQdxF5bXvc$sJZe&l%myU@XNoTA-t56zd&%cj&Lw(lf)>i(LPd;44EXyXL#o{*SnA<6^V0-(uNkYX(S=3Rw*=7lAOD; zf$SQzNClI7!pw~@HK8JP%A!d2*vu47X7$WFALxB6>!XtU0?L23{3cb~5n7%sTY+UL zyPizihlUwe7mth&zgkXw$!x3X7B_6HiTV|$b}fg3{WCXRZ&6uwn^mh&+2?vPZ6wpn znD&uDA1l&f&i62T_Ue2%$*7O$&QZX2c9m&XsSym5Qy;5XKkwN|qEozUhB-9Jd$y8C zla9LNh>%EeNG}mdaW%~$j6|Bt#N4@b8xdhAHBahbjJnu_qYR-aYsJ-zU(M?GQr5+i z`+~~V81^Nz< z&Jd{$QSYQ*nt76?S2KOKQ17Pn>1VX_c}brBFrzC`x0nsm*Cjh_4wD@}p!G0qGQ?sr zlSD+5Rp~xn?|1uBm`@Q~fc_>uCD-JM#nsQg%V;LbdauI9Q>wN(njFuJ&ru34n%^5$ zcIS;!xR#v{t3fAp)tED?Uu4O!6A}v5FESM?1#2zC_S~npNrAcjo z6n2wcBjevfi8A6%jJDLRM$UynhO;~~D8s7OsXJ6bXJwAMNGrY4yvkSHW{w!Bw5$5jq#UH;p BVXXiF delta 850 zcmaDQHbICZIKb68B-k}@B8Nl$)&Dw-6S(Iw&0}H!f*9r(;!~KGFoM`OSUyNjVVVLK zXW`c1f57+vEbhVUAOK_U=ab-uu^prtm|*M*IW;(2Lm9%>XRv3mWiVjyU?^gk&(Ozk z28fF%%Q7y`dPjj9-u*{)Lj&AiY;Ks`z;vqKj04%r6*#E!U8>jSweIZ(U|2CQFf;sQ?clq>Bm;K9 z3l0Og;d^*Eplnl)@4PT^Qw|4dkWNTyz!u6f48{yv3`z{z3`Rg4G1-;9mKH-8`#tal)!Fhr)11v7W)xrt0z=8JwJA`e<(a)E{24mkL;L*vm HxGn$yCdR{8 diff --git a/phsource/vdiph/ai_5 b/phsource/vdiph/ai_5 index f1efddafb659f620081e28b890d9ac57fe3f06f9..b561f3609e669b7543ad6f23ce44811a36a447cd 100644 GIT binary patch delta 1207 zcmb`GO=uHA6vy9tv#Y!5>@)`tZH=O|gq*Y#`#}Yb6lp06mR3lEP)d5xTag~>$)&yY zkV_$84x%E(TScjON;RGg6+C%WA__tY6*1U?9{Q5q?pJzHaA26>$2|7^_CNEf_v^X% zY8UW1Rn(1Fv!*_WL6`nh^L({xYLybnUMgVoJW0px4X7qKQ07*(xo=F~Z z=2gs@4$%-m!(I87b|pZDGUSjgwS-#=phP8?a4FQg98%{ho);M{o(v%-sqP>-->7Sj z)WODEpFdj@O@}cA>w|bHYBJ<}4PuJ`3aeJ;>{JN5#ux#QYJF_$I&5f>oCOpI=vmAcOrZ-IPjBkL#Ul_kI#<_vSj4jw(A?|v{@F{Uu@kaht2&Wm+ALj&s!i4#EIIdgu5+xDF2F;fZe zA0Cj)*YZg+?&b4A^4%L|n2!*)F)+Yw)8hl$HiyB3V;<8h#?MSDjLD1^d>KHKd{`?P zW^gp{@G#3Tg>p*3!}1)@H>Mf9JGeon?&W*Mu#B$&YMTnsZ!6&8ht;+TLQ9zI=P;~b z2if+Ji4ADm18$IQ9;}HB>o^#AWPtjcIZGH9a4~>w2;oU#j^Wkd0@-$uZ$1MTKLe8A lBJkSg!Xd{0S7fE+Vp(NHTa_PbKAQU4lXdbobBaeZ0|2TUyCwht diff --git a/phsource/vdiph/ai_6 b/phsource/vdiph/ai_6 index 04672db3ded3cde6f240685f5e3e4b04fd717a02..f5a4efadf258742e28b7395d283e1b63a5fd4a5a 100644 GIT binary patch literal 2922 zcmdUxU1%It6vzKFv$H!p`_(3!?QV9HCh3~S?AD}hHfq~sr?%BJwY0HGiH({TrA-h& zu!z2>3vIBV_|ylX5Cv184HPXZxM0Btiv&^d!H0l8hz~(T@GDUN=g!XVY@P($2lsGi z&;8#!!|eIpbIzVPe(1pDiHThS0B7cBheLRZp8w;Rf1GybPT*#3p`jf_0Qc6^Z*Prh zh>aQ_8jn(u0bDZBF|A+LPtlhFjGEQVl6F~tlfDdIZ6sE;RV|B=D>%5S_w2Jmtx^k$`RTdz;KPd2H~4$rB751@<@3}Or~;2pe$n;hpcg?-qGyU~kn z*p5Ez#UnV&2pywM;Bh=j|0G6n7q%kFNF;boqLmg$ltZpzSR5t{u7{M#+=7iDS0mgL zp;@#LwenwIj~r8P<(S`B+}Cpg*J|(C(2hdq+qs{$I~Mn~TX#C{dF;l6jO=cV<2Ag? zcrN22Ucn4`44|Kp@1gaR!9BPiNAU!vc^$_Qo~C)sVHOXoT{-Z`FrF<)A%jiWOcn`6 zAfogr*Cg6e&TM{5^h1h_FbR^4Rp%4r+(P;9PnLgG0d~w4FaG+f=hd|dD#vT;u=W4V zfUP|JdwJRi@DR`V1(LXeH}E=M;+fxrJkNg*I(g3XC~(&}&M?Cdlf@D4pXBam$m}#8 zAWO*wlLT5xB8_$uNhmrAa!DuxF-0b(W|AjDPBdX7CK=&+?kvoV36scoUs@{Cj`@Yh z!MN^ub!`e=wOS)fK@Ikr?ypI+Mx|{}Q%$;JA}LCvCVd>PY^Xq~SS7mZt5U<(OdPgf z0Y1pW5assNq;_US2}MTS;qN(*1?I&$JWDDI%$YKFu__fA?;>~Y=NWvCB*s{c4wHgp z$Rs&F%{xzWy$4xRkvOMlIcy=D77~(bl|maW$+>Hr$!?P}sbF%C&D^l*2^FbRCQY)( zVx}lE>lfaBUvY5EkE+Un6S(L)XlRd-%zRA+ZUCW0eNk_8i!KB4oW7)a-NL}1W+lF& z=X_*-ve3i<_>`&b=TNeK=Sw#$PS){t0(pgh-!1y;Z|pfalIdqm3uI7WMLNa#erC@h zl@I3_^@FN&l-L_b82?$$hsmkHDmK7-_L1lm@0w-~P4b?daF5N~<*h$TkIvArbnsAgM6lJZve)X#v^&=efYSsNUj`2(FXEn65R9>v9 zz&CKLMZMR@iRU{yrxoj*fQ3*cvZ7D>I9&=?B7O$IkJ0Le9zGMVG$|#^$yS;&sAT;Y zPAT?}exA8JE0{#Bn|=rDljK4tW7?zYS%!He-KE66gQPP=YD4t9xi8H;$#Pd4_w1nG zODm{nbntmeo_?Frm8hG{2I=dP9TtbqjvrLMO-+UGFWG#GXhH7R zxl?jYo>*T0{D+KU;+XH%*?3Mvo1^rqCzBn>?q{u$W7jpu_Ommv9I9GN+ML#?emBA! zNe#s+K|f8YepRzssovHcOOx6lDU6a`3**0q7G=a+8EvUsEu0I33};1VP=-~lTXm?C z%E~-_v3BlC^IQJKZRg07XFKneCq)=(scBNf+?dNh0XOCWYC*2KJcO9b%;P8j65QP( WuE;qE^I5`QPJ!%}=LmE6|HVI=-dW%P delta 850 zcmaDQHbICZIKb68B-k}@B8Nl$)&Cxh47_&C+n5=EU@o(TYy{I3CJ@_>^@HRRMhLry zi-G?E;{!&Jcmb~hFO0pP&w~TTR*(^3fw3#()Rm3Ddc=w+aH%x9|I#qARK`$@M1HEg_V921);Lec7(9Dp+Fq@%!vOLTF z3^qmW?sRu+L+f2aZ(*W(GbPrX|3bWM=ru+QD~$Nd_$bg2Mo60RzJx9u6qml;b-u zOx%>iK{^5+tJo})VK8RUVo+kxW-tQc2!<#i-;u$3vM>APj4KQt9P^mez;=CMWZ=nQ z)B&faR`vlmnX^Cg0=u2eeE9XxS^U t1v?lkxFD7>Gi+pk!Lfuf11x@o6Jdb~?+!LZ=$>GOu@4aN@Z?!s7XUj(yu<(i diff --git a/phsource/vdiph/ai_8 b/phsource/vdiph/ai_8 index 8aceb2487d81930637b0a2f250663e2a639688d2..c03d73c2679b0bea196d6d13646e4bd54157db68 100644 GIT binary patch delta 1423 zcmbW0Pe@cz6vodzci!+`-uE<|V4N%rWtdGVK{^%Hl-P(AC~AyCMChhn#4Kv%P@7rI zMjXnOMa(L2k%qWXdu>W4aM`NBXpzJ)5e+HTqVwj?ynjkk7cTemaW41!@tsqOzdol9 z5BBwr3=f^0RxeEft##UEEaMoRV^G2*DBK@ ztPdlp{RS__2k{HN7%z;-E{tx~gK?4aXlkM;T&783UX0Uq&#(tZQO$DpaJuu*)Sz9~ zLp&$!Sa$FXo8+0p2|Jbn3*OnBXnrC0mr!8x3(&B}M|U|kHFm)UY{R<0=bAg)2PWkk-(s1|00 z1~};0-w;1=OLuqPs__NhH-hHW0CcENA_=R{lJ!O-2m1l_)P2J4Sy?QH(tPGxsH-|K zx4`5JJ`htp^MROR$p>OKI3^`X#-&J*Owg&ZK(0qXCgT};PpA2l*$1RH^v$+vVj#4F=5rQwAD_z#Hgzoqdre24!5`*syA delta 879 zcmajc|4S2b9LMqZ`~C68-MqUkm$A()was&4r2Wtr0&QfXn1Q0fDnddDGmw55R6lL$ zFM|xU4e}?8lAu6{79yl|{ZhlEzreugha`p(NeUJ8xgB>`zu0fjU+y07*WH_z;!&}$ zr@gJeuf2ClJdr8@zy@tlkvgzQ0Gqgp1Hv2(2ml&sG$@_MLCNeb`7Le900~OavO0## zD!?Kw@~8N7L8q_pbvhO?TVrl@)pyok7fMy%+;_0vXJ4ra zGYrBB%27hdK}^sCvzVhUDTEVl@T}n)zLSAnRX{QNrCN)x)VOH0aYRiB%B zR_gqS@PLho#689Ew&{@V^$OFr*CG7^%ljbzB+GlQ2LJL7i;m~@I-VD8Z$-*5oXAd< zRi=831K|jl50vC%IKCh3@zrd;oB$JPd_k;1BKl)_FEE~QII(ueoy8Oh}ba~#^ z^m0c_m)g|QE=#)*gdKaoQ@F_Ync}#V2=G7gq`1fPd-vnO!*HawCAzJ3H#9Y7_mAeURGnvk0F{O34gdfE diff --git a/phsource/vdiph/aoo b/phsource/vdiph/aoo index 8ffb9f3c89c20e62053af63ceb35963b82782841..088595552667b74d8d2670781bd5daa00266aadb 100644 GIT binary patch literal 1987 zcmb`I%WD%s9LK-iblYv3chfX!HnnZi7_~23QK-c%K8j)m`w&!6@ddS5i;sf`(HsOl zRPc3{9#r%oiio0!ME?w*MG%Sy@!+9~2fx2b+Ra8OB4(KE%y(xeo9}17Gb7tKZ5SOH z>Tvu= zM|2~VDJoKdemDFx6*Co;6@XM=mDh48UBB@SJbZ+t>3aJmWFPlu98ZZ1*! zWRUt~<{JywKEB-nJi#R#!9CoCg_USV6B-ai2w_AKhsk~mda;dTR%0APXk%%mY9fU+ zuk~nzpCjww<<*CPDnWkNah@R6097BaUhq$|MEO*jzm(=2OZaqxC5{Mxv!3_D$j)8K zUsP{t>F=8huWRYkg$8VG5E>2@)xY83!oP6n{Eb7W@qamFu@@6~i3>Q0XLx~8bRtRD zP5Kd1uEglm5-ddzwsPbe9L5f0s0b|+E6`5&0*J96qn{q=sAe%xOUJ$J*Rps}g&L|= zY>5^m=QcG%3wa7rnXQQ=Vv0~Bvfr-`2Z+lM_IlP&f=P+GpFc0(EHY)u^6?lrA`=Nt_ zrCIeoB^)$i6gN#-Y1JS-bF_zwb-y z$>9X^a0X+zjr-hdJLqtNegwID$hwWQBQv z<)GSsBn!1_2MVbK7$i{5Jw#VzB|oivHpwE_l)5HW@?xCTWX=A#Hqx!$+|pm?7yd%A zVQWqjcL4Vd?S^Kb5ML`$Z)&C{sVOAqybF-ILF=pCT?L+IonECqjWUL)gB^^C|7F-`p97%C$Wd;$a3by zT8Ap!KH! delta 630 zcmZXRK`29U9LK-!KjZK1*<0Ek_10_1dO7Tk?Iba=<=}uhpp=~EfUA=!j$_v2ib6Oj zH4!;+lZ%^!!%L~Z{Is{TcGKY*j-V64$Sai!kAmu0wZUQ$55*nhQc$l`8HVHTHI z#~e;^f&@Adf}$&2G4t0UFD+WRF3TZVb?`bIW*A3Iha=_?p=H_UaESkN(DURzYv9rI z!V15UxRhaGe)m&TiiM5vhSx6hA$&8|Xim(qFpWOTjgGJw`K%UBS=@&SEaDc+n8!J; zF^(>T(XK~oikU0q_#$&ikm*2-<@#ziq%p>We4)X1ph8Tr*)Q(bRam8yatm|N=#tVw zN>zub#rm%MA$tt)J7mXN^_@c?NP-rxxgbq2HW#jjZF=Cb!_K@$t<51>brcR0`>wWC ZxEEt))f;5Zg%5CuVMNi6Ry|R-`UAxTi4y<- diff --git a/phsource/vdiph/au b/phsource/vdiph/au index 5ea097eb8d80575294d2da6321cdb93b54181e56..6d104ab6964f216082027b3cc395e337df294d91 100644 GIT binary patch literal 11032 zcmd6teQ;b?dB$I9wbrh!Z^^P`S+ZthCoZlnKW&t^)RiQwqz!z6hk_hYM2g?w#>jEOhaiwltPnCl0qRgiABZl zIcHb9_g=s3mZnH{>X)!xl#@&B^%A7}k_ zw(QHf8-=kEM)Kcy;M}WbVU zXfiurbIMB0^fKFDF&P>;S~WQ@IA^M5qEsV4<{NsM-QQ-Rk?xMJqLH*Fx&QU$Pi8*{ zY}nS>7TaOnw$FZ>|E7EFgxzVQma)~g+*+-}dTr2_*dkkKi>;B*#hf)*oh`5`tG0O@ z3pi@Hs5Gs@k+FwZh?KAPI+{;q8NN2h21 zz}!h;teE`kGmy6z1LUuXnN5Yrn+3^#AnE56lMjx(K6A7xIKown9|@3m|6hfX?vCO) zn`Zwrx@XVwC#!6e4cIoj#`^6y?JoNOs`#XR6t#>IlU1@QUZ+pcu`!TH;pA{0c_Pti(lR9^c5k_2}7??$64` ze=wE*`|_WKu^kNMHE$;JUk;GpGY9g=E=Znrahb{Y*=Cq;NAGK(eYZVqe`uezzd`-C z*$B+n*?QY+*E3_IrQtu!)m65E7;NA=Wi3wYl{u{^pf1w$;8}*wV-THZrJRecG@gKc zJ?tx7ytEQDBhJhO>|Ypt%AwB2|L3$jDS9i6McJPVu-`og_8q^k zW5-eb-`QvE{dNml-wOE+=zq+vh5j(dKE@B(PGYjn_7JxfxX&WgUyuJ(p=P;G!W|Wk zv~-_zhxp5V;>1aQ<>Ms(@oNOfdHdw^Z{*m&K3;@9G`5rLpzhBE*pJMC{lgbzpH5tE z-S@+G0InnOJY*koj&s(|5`&vzyAhx7MfEq}{k!Z+=IyoLusiUl3~OS9`^$66PdeU7 zA|NM`!sYET$GY6T;_faXg7nxA?5uNL~ul#O2;{l^3Jw}$A)$h2X< zKXF0&>m&5nCoZkuuf#k0V7UjD@5Sd2qx@&=)AkVSV3b@ih|k{)@iErMm8^v8?RFe# zl(X%&n+%=8`C4Y^V0`N^^KpC1K5r-OMj|qd?+iftpzVkLHmac; zSs{ms%x=!N5}h8@-vq%L*om>2Cb_O40;+1HaJ{SY@vr&ZQ^u7aDf`Nm{8}O7oyp z#%?9UDc^1+0;6_>S>rhWUS3!7-4?Xp2+s;=Hj;bgKVJRfo>zaq>eO`&S-O^al`!|w z@lnd0fBM;vUo`vg@r}9w`*jiaJrVXdh1i?j6=8qP1=+j(Re-(O+}U42?(E>T4;Md( z?mv#^KS!;35VBiQeK-7X!S}bI{Vj}KhwD55``tulC+vIKc`c#lk?N};Uk`az{Zf0J zS2_NyDqjlMp{O+CI#t|}+a#&;_37&T^Phk2lR5T3$hwoFH|qS{SWx%hWzHL=#h$+= z!oDrS{;CN3dm`+2TxRxNaBqj|)o{Jt-eZ4YAGR;>{yrOmZOXc+=#_7Wp}m<|yI?QZ z(bX1er5?yPINfV!Rj4&p>xjPctZE-mx*XM4k)a!%=ZLr8AxQsac+Nll<7XZ1!hWg% zzc3bL{~e~h7+}9T#6D*A5%$9&_UXiZA@)Ow%^~(fm$=%|-gP-neib^t8-0I-J=P15 zzZbIG$hIl+!8raR)u-M1xRaH!k9&h$^|8loLB$Kvy&NRzJV$P_0Da3}v zHpJd8ac7|$irtXkN&cLG<_GPJ{R?~ByU4a%(Dqu!?xeQa4*3jo_Olas1l8~3*g_rD z14lWHGG=X#q-uBR*lXT9y>zdtUi+(N{Jx60+S7`DC7<4NUOhVKK*M<|N4)IM{Rwqu zer$vh-zU?pf47P9KP`Q(sGqhnHc>NGRA-t^mrXPV>&z9&i3OTdsB0!FCR`V;Fw#TY zBshnD+OJ$^M!PyI;n@$zog9x*(Lc!E_8-Wn2k@C8wB5^^xXtZk)mPYLH?i|Q%Ge%` z4b1O!J+@ltsktRf4ZsHaW3@E z++}D?H}nc2obC$l}G`l#DOK2UWICB72sr#)~kT;*I$ zrtN`ZA6Zr8KZ>UBqp$D;j?JZ?xYZJLubNR_ zqI|3Um7Jy8QB^cVS9PVjZ42p*w!3TPTy@`cuZ+*k^zW9`i# zU5(GD7+0@ttzE(U7HZ9Vxz12$s`uGxZIEonY3exS_`YrzWzSSQD)l<`E{)gojYVAf zPG+Txl+Oy8>E9py(nXX1A>SAYkpDL1&j!dp3HjCl`KAc@Yv(}zFE1(iZk)Uime;UH ze;+RXsC^2LAA@un(ksXUSvaekoWgsyQUe`z_jVDhJ~HfLyhA#duJzKPs>S<=_Eovo#lp1_U^<`%Ii8IG@++}DisQEX!d%TEzI`Kuw|0F>Ee#ln` z$Tx(@rxV!_`7VoU{#1zkP$KL$ixYFN>r;>&V0U_>bN1s@H&4P>odUW1a%%o7$if4t zyOZ~guA8udSnNUntI&H38rCxqd51a){>g~%5@<*3^{zZB{_5i_g}kqSDp@O9EpmF1 z|FgFSa+H6PbtjfBJMB-%u=z2OzacluN6AFuGqJ(aLMP{$(uu0gWWs{a-&8i)Xt6y- zPpoQ^*+7@ZY;{F8)Z6I^b#lxmS|-YrbLZa4**N=mMl-B>32X37G4Bmuwq) zPjfYZk84LYgx;6p=k3hBmD+!Zd)r-A)B(k1PVuT9)f@1%=aE;nkMcE*?kNJb%x))I zUhPu6dOCVnotc?_dec((muBN{P0s$wxs$@!c1GS^xLsoQCjs&&(fqfHG@njvK=c1s z8YFLl?3qqd-7D2A#YwcRoK# zowEbxLmZp9yOLSzMS8DMeW*H7%9qQ_q!x5C&qMuXfR4sgE(?hhAnH(Lz%*M2E?v-UY~KYB^Ir{F$FMjc1>ckp!f zUUp4VdmBWXp)^S4xDxWpqg_N~jI%zs4pu|34SL!|X-A~~uZU|$rFvfEwFZ<+wR>%F zzEsO+Io}fZ1-w)diTdXrJL5QK<8O`^0S}FB=Q>FJaDe&-s0ZuG^D(pkx&Za&IZ*$t zOGRnGQbBG<&5xNHbXnq%*d-3)zRNjfJOZm%jhz{33(37o|R6Il6^?6cH2357I z|Dt!*@H+EKm)9iVFE3w0>=tvS9-I1W>YXWCJf)hReEusr#&4W$L;CK3l&)QpUfQYpbJ6$fK+jNG`OYG!>uI_aU!POG_xBfS9&xM- zzxyc8tob@8LOwYd+g_AeUn#NL!vXTo$0n=3TDl~dS>scIy=$UkG7%ghvxer3U-UDQ zO|#mGX4Zc6y%}G>9;Sz>6bCt^%MM&Y{ohtzS3pP#U5vwISpm)5>0-1KmTi!im&l{# zFzQaK_b#0)0=lCyjq1tB627z0MMIfZhw^~>YMJS;-8PgXKiA)a_+KQf4wJVa`M*Z< zj|a&AG+}|vN|!&P`6H3N>v%}>(Q0z&BC1JMC&TtJUhCPH4#Rr@R!tD9g_gA0Nfeeq zTiy2+a36--Qn;s3zEtd=Gs#axTb&o*^YzbWbuO;Ht5D~nrX8ztuYS2x&7l~nruoJf z|29WH-xr&ejQTZMe--SN{VRj13y^;T@&^LsUyhK!DMJ2ih`d>t{5z{@`pK=^(0nUY zZ^TJdLAF6!ieCs7?RnILUkLeTVvuHqbm04onAhp%NWs2_^vu;E^SyXc7k7>8T`F(m zUu?khwFcDTk@ss?tH@=h|8r%(!+SAL#J|8dx&rK9#`}Y+KLPu;0Q;{;*gq6u|Hfrz zzY2fZN`_qvVg2G@4O(6XXI0n<$7UhCTHsX&t!nsplWXhY)ySvZ!#`mXJL%plUMlyi zAU~pO`BF9C6LIfOJ`bp()HnD&!t^VX4n8XXe%7C5UYhVHMPs`exidFv?6;fdwa40H z`F+&P%u6L!5uwknso?ghbCa}Ervh&ObcNp|s<~|h3<2uv@7*X z+dj*Ryw|*UAz$xkO(+VQt=+C)BR(f98v3QEtO$6i*%7ohSr~=gU)@r9%RqE;lG!O;tp|nOctDg7#Z<@qB3CsMiaKza^r_y_V VkE_)XbN{CHyjmslBIOK4 delta 3511 zcmb`KYfKzf6vzMUK$*4c@~~3M!e$YqJX*F;+8rv=7D`*&3Rq|hrm^6o-Png1(bAU# z5lv0dfJ4((jWJP#R!ktlpe;qhhuSYDd}$<9D@KiNqlA8_*5`U=_s*SboOLBJ8^Xzj zo!{@=d+xb+PHmqmbJkQ>l-Jf&JY)mVxUI|SmM-?rc6k@7hlYOuVy{V)(exK=l?I&C zQPWX+TpKf%xKZlXzkz0Z^&Q4|onw~A&Ccn0#`v_W)n>#k?kpZ>XN2Mclwt+eVm-1^ zi34~XO=#C#Q9V!21jqrC%%MsGjOWzG0EWXsyE$IxFyfg&v(t#_x66!M+-97e5sI}| z+lXI>U1G2;VPJJ5nwww4A?8csw`oE2?Gq+Vyr<1{Zvxz z?8H-e6)pG(?`y}Lz3MmQaLX22%0j`xEjVlv9GV1&^>c8@BEE;Z(`J<63G7BEUcfjy zwO`_T{a=&ABy(8C9VFZ(IFxb+MShk$_~a7q;EPd^wMfWv?z z90n}su>a5srxHiiFVGkJmhD`y_vcET@kX)#9^IE@Y?MrU=X_(l)nT3wInH>yF+S}& z^{*Qxm%6@})^`JaI*^Ye7{Vvmr|n#D3rEzO z1gl`MuLw5CV5bR|#$d?;tU3&=Hv%l1YIiBkZWXrSY3jN!q95B)t6fR%@!uwgqd^Bn zzDN!~F^3j%h+_^5xPv0E;SO046Yk~?KG~ez6xrCrT4~A!HL6t}l8T4|d|*57ETNjv z;~mixNszV#$K!>Y#4<+2&IlM%~tHFE~xtQ|(*=9HxHv>h^=K11p`5xx^S}$-u^@^3m-%0nFEqEEPQ&q2~ z(@)!!_Rb!1Xk!k$$f1qRc?voF_zwrb6UL!Af`fL}{jtvSGgdLNjNS7a?WAulSc}52 z_D5oQJm>Yftz@i3VtvYPieD0I%7T>;hP5XGD<2zaHC61Qu5kceNXLCNv+2+V(rJAa zdy%w`=)jFAIl<2yE=ZHk30rD#Jl@_CW7LoA7?X{dYK)IJL^#^LUd?Lh6 z0Xs>sdIq~Lz;+0*K@I~ za&R+;%YuU{INX|pLq5%N8J?q?>=K&)`^h4mK1tf?#b^BeNS^1BJVXoxu0_EiIM9Vn zU-`V@F&Vsb^f_8toHtw&=i%p5gR77BW2iHk-6e0>cu#pPXIxd}e#*Gproa98D_1%+}g?9w!Z*c7L}CZi$O!?5xWuFm zB#vp6G;v`t*D+0j40xES3pAODDaDWuQw`Gr(w0B^2h%Wgs9JhSGD!*zp-C*N{+{pK z_1SX{t(C-{!DsgDIp6tKmVWPZp7;IUvt#>5w~de8u%^V!4&Qt0+BSPPM}_~g$zNvu zdA8&SxeLMAC?ok#+<)Okv($5mXG;z;s+ZYE5>_=`G+lHH$9kEaPEOVBN}MS^tz$QG zyewO;IVDAAdYK)ln2L-XubP?{o-^GtS*(#?@(I1n?rXQmNOwn9!N>+pa{v1B2bbOl zY{b^t7TaOnw$I+r-*n6#u{&+dGPc^5S(|lOuMJwOEwlx;$QpTH#8HFQ*?g=}D0M$!o@HKpG`-LLUfJX;XD|JN zxr1P=ko?QDkhf<;*IU2+j@@M+LKR=OkD-=vVzLVMotEYLT8{gO#Q<^YAsWkV zsV%l9XqUmT#3~$Bu~!sI9r-etrg$ZDaZrrPt(LgeGQWb+5-V~Mna3wGuRnVJl>4=^ z$)8W>f4}^DFt&rCyyneB{s$rQd*(p?#AV5wU2XDxwi)Kz(fb-`-)#@sXY8ByXQ=;n z8-@8gTW@>qMrLfZVfc@5cCBq71{*j}TZ_|rWlrlUsEhPGc$T2^1VraqF~?#nji+E= z5BmxiFWm{6kz{5H_Rowx?oelw|9RFO6zqbrIQt7B_Pgi6{=>fo?E7K57RuM*F9+@S z>?ErH3;TwB&~8QRTOq#z{g2yz=#Q}NWBjn~BqrNz4{=+L`z%EL_4rQ}YL@Gy+*aX8 zOZR1N6Mwl+k~qn)e4OMz{vN?`-Z=H0S99!No+!W`8QaNuSoh~b>__Lo{-MjVA5L9u z-S@+G0Is9(JZ!)39Ot~9CkD5`b|XIDi|XHj_wTZ6n77y7W$(qGGTalRTwj(`ewpK4 zMg-&}Qn-&eK#W9Pc|dcef6dRl@zn*x5z;{nvdMfz;`Gmi=x>eC zPgvaVAGs|3^)dSEQ&-mSSK=Lgu-pU7_u=zLQ2vwlb$gKeV2oTah|k{w@p0~rYq%3` zv^#L5F^;y|ZZdQl?{9VvF3nd!znb@Qr)Hl;6$|NIPNZm*LB0|G%F@!j{6}*Xm&_Y~ zd-Q=E{TC-Z_iXZyaskLD^J6=4vUlW0o#&T7k~o_T)j3VmWZV0gqdF%+onvj`Z2OV2 zscOv$W!u`q5ov!aRQU`;e=4ClL2i9Jbxs=nrr|n{liXov;C#{^w{P1iyNQU5;5!45 zK4b@=zm00>Chm|UL}oX~TZv8&>TiNz4eZ2NOv^a0AOfmtq;Tz3`S@2k*OYPPN6Nl( zC4aAwaW9@a@nc6dn|$f4J1E!%V`1$-&z!vl^k-)`MzlXWn~Bvr$70$)Tw$(i3F2|v zRjzf?5MJpVf7srM?(fF=|HPiM``~;n_r);kzk#ZA7pymOe;lG7dVpB$AP*eibA7Jr zX?9*x=Tu!q1f*qEKYAD4Qg@tmDpw?`nW-$Tcqjs@f^;8bE7-;eKn z9fgmh^>x%jYwR{Mobv5PA~0r0nKgm)@8xw3pKU?=jqt31W+S;*{^Qjz?s@g+t4^KQ zkfm#xR|#_;9UrC4#jiZ|i8syu-}ppbi2b@4`<@v4n0H zXUuuExX|<0#MrmT*k2oCe=Np+$5m$E1@|RTy$-H-*n8|#_6PP|_8+hz*ru(EieCA4 z1lpUKwF~xg9i45VR_cL#gVViMRza<)T1WJiXI1-n(xs@riVWT8JV(6!3PJiW!E^rR zufOSN2kWT-elQkh|IbW$HpG5)gnh#5W9&yF?1xkLM%WLfHb>YGUEyj+Yu9Bs`L*cy zZuI?8)>zL#{vOC~Bip9Q2NU>Z-En{({{D;rSvN7-b4EX@9=T>i@t`@RT!v(gy* zfe3rE2O{jv)<)Rd749r_L$Mq3JISAu(EPBSv%h0)dl%Vu3))`G*qzii+aaG}&H+{e z52N~hY+I;M=jWXiiyc&~`8P#O-b+tG>b} zyP1{mamMzrZD4+<>#@~BPu(>sy&S@Fn*=ahLIKG#->?AIG ziA)!6)r#&_Gs;VpZ?(RXvs62(iiYT_u2i>e0lm>B?p!%n-8Wq;;XO0+hedS`bvEhy z3+^Ph3&z6aU*LLWqEPd%6;rW<$UhDF-VpiL82O2q-$coqJslzc_G+9iT%!kyJ9#}! z|M-KDe;;nMp1ivnpHDNcUfWt*!F~(1<~^Kes5903?6h`BHsdsPY;t^Gw~Ml8suh)b zo!U#|^?YI>XTFnJ=_2K`LT2WZW8Z(%#ynWh3OfEUx)85%NQ+sM{<`&AqNqLw11G=}perPg31{4!-IX z$mN$&^RFNa51{T&_8VO{VFR()gZ@{c_ZBp)XCU$pbrSrO5#J@yiq`90c~tz>$5{+{ zU;k8cujp=((~JCA$3#BpKlo{;-HiBWbtIxW-{UX zndg1}=8~yKOYA9lVpUU?4RvYER##*ry`7#&C&z5EWwJy$_pNkt;?GUgOIU+<+(P}> zOZV(?x@6nX`!Ht%__$V7L+E`me!hgcw^92Kac#S+iaMaU)G1!oqk03L_B`^c)=|Eu z(KSV&mf1^)mRGwJubz(fsxvb)U)i+San2@RpK=EUyI^cPqwfx`6q$V?ME(?-|7n5d zhf^ES{C^jR$y+FU4yU>!nz!Ge`4bV%zdfH{g?86N{Sbf69xD3JqvQiLoy>5vl(x;#yIuo)>xD z1IndZy*4;ss^z_uPl@|{UaE*h{adHcInLSSYZC>)BV*e+4^ux9qP_v@;d=67!t7r! zL%n$p)PMJiQeTC7*Hg77R&l)-#ka$*i5k*(2c&eZlJwF_)gOz#zYp{brH#)lgu0%lOY!wN)q8(` zrsiSCI{4m4VP?(OIZ^UcsVMoW>L~fCx+wXn(&^CJ74j9~k)En-Dm-$mC3^)kYd`wl zjIZAa(<4-hgKW}e2d<$0ZyT=_5RyU{;V@b5fM%|AG1>{scF4<1X6Em2AIgz`C8uw98W{_df03)J6Wfb}n&t)Wf+J83 z)~;W}Yd%}tT2RycI%T2EN|!&T`J=J5>qJEJ@oIADO;nSrPDbqGywC2FR4Dts<FPPY5K{n z+t7R)RBysbR6({wT8du)6|H&HgI@soW@0eR9nyjCFJxY)n^K}oX!z1t4s#cN9%>2vB{v7-K)9*s|`LXa*!S6DqE5!c!nCc&aeS3)g zk7Dc}jIn?9DzjgOzicJLu7$9^aj*t0FNL!z?381(0A4Nds)JTF{JY7u_3&!sUGCwZ zFo~UX?-ehV`@0}NqI3CDHJ=l4?@m4ssG`&-_&&nS3satUHu>*af0TJ{(jQQ1=Ert3 zvN1QxTT$5UXJ?y=qi+91!fFcLK7C;(H5GUJQ13E*;jOrR`ojP9&A;EYj#@$8s4TmV zUhy^5H_Z@Q=vb@guAJBcF@1YO)u3Fz-sJ#Q=ss6UyHdZj?X#@Nd(C?n^7W4H2}MD( zwc7Rfh|kH2hQ2M8AOf%a@k@?uHaR`v4hnX`*maENE6m~46P%qXK2w}`{h`$V#Pt7Z z^gmrx==xJJ{U3C}<6(dqlJ9+2_C0B<5wX%zq0SMrNq2a*ZGaX}bzAe@MD2ay_xnv#&ez^x^g=`BrhVd9Va!lI_r z8ScTExV2W%rQs%xMwt@x59dE^{gKO+87*7l%;6uFo7VOD-aXIreOll1#@23(XAj)H zUY{S&=lNdu>hG&uE9z^iSFWge#sOg6szWIr?R;qTP)VAxbKnM`U(+s)qrae2gKIcp zIKf;WNE}LCtaX|1Kuc2n1hL=f9F^-9*YE>ke>k(vA=a&)Jh{%#jjl^D7jy6=79t9@gL$?4fW!LqB^vF%)t5h&$B8aA>!62DY`cEaDg9%06ARK#Q)f}KO0RN3XTxu=?E+wu8;wT z!}F9rZ&m_cC;J?Dek@(KW#UlqH-h2ThlOKs$RmC>O|qq^!i(5|PP~D0=wx@3L&2ZP;SzV4DIGLCq&Uo# z4gr0;bnxqy(!n3MrCHOY!Qd5weaT@(5(bP{U?ma;?3OT~RKntqO?EkT(6~(Z#Ji5u zk$a+E>r4^NUZ42!6md|dC3Q{|`)$rs@-FeZQj)~}aOOMrJtzfqL-?q^i|BO##n_F0 ze1*+y>*StDg)ef4Nfhv7bjwf<@B>*@@VhEo30SSLR|f3Yzn1sJ&H=kF^U|OwqFcgr z*pEhRr?Ghi+t|p%J;Ce5dr*t!;SSx7o4A9yGlM(06^AAz>6Qa=r_@e)mX`XOz#QaA%{H?hk$;b z9RA=At>lo*9VSbMfIeS3*)sChi+=>d2}bT+N=*Yl0!RpSW6D=JhvI- z@cVxpfb19!EpZ%JujdOh-XLd{6H6SPyL6DQ+OVd^V7(lNRZIuC46o8{Uy02$9DNk^ zVibT?WJls{;SOeom-BchP`uY{9NaM+n&UXI?i{M`W!++3NVZttrdq74<3*pioo=UC zdtHllv2M<+y>Bo1D7s3j>v9?zL9}2tz1+wGo00or4zQe z$o^ltXfnF6m4G)Z6RSxEtR5b}b$AX=J7auDkU|^S5rVDZun`5;puqYh46tDK9qprz zuBM2yFpZ|fEb8Svc;IG_TX z3O-ClGSa{@yeEu+-b1+U8HT@m?Xj=dIB}fSNt}h?umrrt@sixhW+&JXXCVs-gpg2n3N&J0TnJUF zhSG%}fFk4{5Jd<YEhe3YKsu17Hy>nMW|8{O2KOSyytj4bMLKy7DDUM znK|>#jC1`x^M1>@*)Xtb#l{Wmnv2Zr$}6v#V!N3nf5PCy(4U9J`$jLswpCdAN3HLl zTAUgzUtIiTYAY5EvqNc{@O=9D^d-zS%rd1m=~#M8dOvdwvwdZQZ zSe3NAf9j!XD^FUuXU1TWEFbWMhS}{iEuCv=oI5{Z>C{c`r!kt09T(e$mbK6>w+HP; zyTNwyS8e7K-(lafuh=eIV>__kgMG90*#(SMHel;*n{DA*v(2>`Hj8blO|l7AZM9a# zQCqc*XVbBYQ8BueTbWg|m0}%-t%@yU z9((@pX|rSLy+yI-Un()H#AmVR_mugkV$Ywf%(pDB&bKtwdrOYz-M=1N8s{eO=^Fbp z3O#?Gt+0i7dzn3M->?Vp^R>1epI?f%zr%5}+wQiTxw67~Z3&cGY$e{`Y!}&D>##X^ zu-0nuay5Gmd9xZ4ld;v|-D)egQY&F!#>lXjugfi9R^^BUSV|ePWdE^m;DGzYVeoFl z*he3o#I`;xF@a&u{&NDCe=32d%;_eukau|r?|;8NhR65VRdzK5uCnWS_n$zc+ibOM z;xE0|zQ)_WiuXOs``-(Vi+E}ySKD~=>+$pyMm03b*^5T4O=J^;TDA&&TY{I1*#gHx zY7i-1ujZ;K1nxdjIQH}*=kqZ5Q|Km%U2N;e8dG?ivrnc_WQ96d{HYYqFQCwr`C@g@ z$a}p6udcIi+xLh&*YNJ|fW%F9w>@Hqh)lcqJGa?=c9&ggOKrK^x?CJuYh5r|XbX7f z6@ez<)jD)gV`==V2%}LA3lUM=(c52!r!^~cXX560DRxzJMLH?9>__{5eyj6*82oY2 zO)M-L@)L_~{rp=ohtrh_%uaVEm=A?k_ipdC@55mST3Aaq+lK$|w}*J&SD*%QxCJ$Y z#I0_|Qmj2F<18$VWCOkLH7@>7a&vi~6vo>vk5}Sh(NW~D;JgG+myEvqmF~`oTpQ1Q zm5x#=_hdhM=iwWi*JGcD#Yg@P2Sb<9&;OJ|_VZ-q|62|pfBls|k8*ftDDrc341>s) z8vQQE2CS}R8Hw<5|xqS(yKX@(W?b<>Cq}5-{OpYb;}DL*SujI->=kJR5k%Hgdr@_%#;gUEIv zres_)+gNlsQ72swhcLY_!C@EcI@eG1xtO*Rji}1n&XslK zkaKM&9;{?2>Ua*`pMPO6OVY)UDCxA_R2ZZRusuRk>Nwi%|!j+7f0PBv5RdR zu*T8qIA_I)Xl2>9v@G>8k?d}#kN%vMja+@0efjt`E z1vlAuxxSX!PUc%7&;_dw^2Tx$bUE2(fU7IGe>&b&e()<9s#%o*)I}&m`y4WXv&>kR zt&UE;cAU*s*XjxNM z26=u7QEaX4C717j+D=wP_HbO|DytrzSWR`ciEO_fDoaqxL@FY!a;Uq|I)<{cUjtE( z;nzbvvvRJg#}<`RJYVi+>hm%@tLJ3bR>Z7`JF_EupPJ+_guyGJnNhW+;PnDB+fFl?8K|Qh|KA3WW~j8nWRA^aEMRsf zDo{mrC-G}7B(z#}DJ0sRVwUpkDyVLCwOAjVRQcAr94&?Deb=V0Pl`}vs%8Yxl1ik6 zND;m(7e~KRs9sTYe7~-zwc?c>d3g5C&Uaz(Gj~kxVw*BaOy>>GPNw!J=)6b%e?3*4 z(9LVmc{Sadpz~${oz^d%&P;f8L1!Pe(>%1&$Tklua~Y}w7I3wL`s-eNKY(5~*{$T8 zO`I(st%ldrrCf%Zd>?Zb8A2;1K8k4{uzBB0QR+}?IM>>tUk{Obw1y@1=srb5^(c{Y zWR;#oNVP}9#kTEOV?wWTb|SSWLFhLSdNFk}6|d(WhtRPcLVSq4 zS}VUgHrsQW^)s7JqZJhl65pho+4y&sTODs8PE99T%_Q12p`lw`URlY#+fdOaj@>-F z1WvuoH&Y9&W9vg(v(Zi!KGnOg^(6D zy3yGp_Df;7mC*yU5bnxFT1ix_k}~9dX-APyt6W}FTI(&b6!}H#!6gv$_xLl>Q|3{e zl#2WsneTG^%0PDH@C841bi&{VN8Kc`i)}lwMy$*Zb2gkBNU(YwR{K*Y5}Im*)$trw z-36=)dw

^K?g5?JPM}b)Mz3R|_-ob~km|4%mo~a*AKkEp_opeZ1n~*~Gtf=%$O6 zf@aukra~AXDt4ox4p=Tmb$#e^1@m_9)pu33u+U25c&7uc(R=NPoHSPh3$3__QJSs9 zu@R}XqbROAQ)Ut|DO76nc}g0~j{NkM7aX6MOpGhG<M(UyVTiKYbye36ES_$qI@NST4@$PMMaU( zQ8j!9(gCEE$Fd`@b^87^44w-;r?7a)Psm}BZ707|B>c|-3o}oo-%HTim9pxqb7(!3 z8LX@Dk5JuHO72+&EmH#!Iov-z|}b} zXN}`Gs!mfx^y_8HTKX0;TJcu~@)Q&c6$yPT^xu(*P#ht}*DFlyRB@=jV2xqqw||}J z{+uv)W-$7@qGN2k0#h6f4{$b|IwzNy;B`@sH_D)=njk=Tli|`zL=3sNixHBg)kn*t_-#LIzv`z(`Ui#$U85;>=1>))5C6( z*u}P8SR-aNK|Zrtt*9)AS$mh5J(8xn=Shv;_4&-2+VeBml9eyzF>5|AKZDIESTh|T zeD(}B3mXp;jvm@_4 z*XB5d!J#2HN$g^qh>cO3l22`ZS3b42Hc{J>J~2kEzdxT^wk5wt>|33`(%syVPi;zd z{wl@z^3P7K0sm_yqLW-z385*DlUC70uNHDTs)L$}5?dhC3l*&@slM-n+j1DHD_)A; z)?ho2YpwjgvxvmgAnrRXRp9;`g$hSOdWv$G?|OY)^n}!jDVIr4%5bVKb+;;e*?gbi zdueI65^f*<>Yt8O7!0{%au)_eqo>z$jJQphe82`vlR0g6%dXVXie!XrZh1BnR@9S? zBDJmT8!A7V^FNi^mclK^(!QpA+|knEM3(DlZKw}(a$4iG{G3)@ll#A!J}IZo#{c>r zZVma&f8*wB2LFF#v=XG5XXtaAqGT%?Q>D>KR9wyIK&{f(BCPsGubpdB;6kjkTz=H* ylD-Yn3X^(aWhl?c_rS_%(vvEVh^Hz@-=(QSEMo5O6)CAtR?Rgu*IJ@_w0{AgA$!#T delta 2923 zcmcJRUr1Yb6vw~!CN9^Q#3Ze)O%qLYmcT}5VuEqjMO&TPrmM~lg$iw_uD9J*`XHlY zg}Bjz54LQ(d$5}fAH+E*n`;?35Om;Jkv(Lv2ZavO(FZ9~3hRS!*}1>_=XVDIm%vJ3ohkdAKu@tC!hcu1 zE2^>Nz`mR~#Nx^F3142wvvY@U8>H`uwNu$WW|>@d2}Mk!}-8=qnv7a(I87nFeghwOu*8f^bcI8{_bqeVkZ z+AZNImAehy=*KO5jt_AW@8B$CWwz{|{QPYPN@=^|bFBX#uyiqx5$v`SFOSK6WSUi* zX6g^fQW^0MotmZAbW^WcDm?AxuDD#u20DX#8En9lHdUD zFby$j#-gFe)DV+4%o&PF6Q+ikRBVPKIE*CPaRl$;6d8IDy*Q3;<+%GNSt9y1@jk1A zx;LU?JDorsX_z%PiBVj#uc<+`l<}PEXKE-ExQ0T(oa3K8Ir%A2{+Bq<0B_LR3W`w{ zA9J9}fQ^^0`i)uNarISdu{y^KF5`JP=(QVhQA?fj{vmHs7Is!$q?3fPi$N8Z9%Y$j z7gVKWh`YwMbLs*$v~s%zyZ93Mrv&n z>Xci1evvmQyB%SgwbDlPyslxMG%V?Dwa$;Vm1iui44bV4cq_>o#!B{8<>lWPY>L4i z(|KR8vxI*o*qWGN@rI?k2}{By!M@-3NM0k@wlL0Mztg!a?67!?U^yKICpRM>6#592 zl39QCRyHmzG2Adi+@o_&$L*DX2fAgW7TmBUH;#+{hgIJ}U)Ld8?=eKtfC%bPuXqBR z*+o*27u1Cad`ah&u+8EmDcI5#9I+^{ZYS$h?$*j0w9-}>AO!~yrvHQ312-y_<%65q zIi^9~le8h|9M|s>=SjmeZI&=<(Qw^Tg;F#G&`f`WWb6jol>t%_fFFM4QfO12L67vc zsQL>S5mFvm*KkvsaJg)3o-yTwz9fKY_fmzi80I}!BqI(77tFg&(S;$@KFiJ!Brm+I z!vF*J2_>8pHG31xyop#7o-e^=H8jC#yhTZespVBva<6(S>)}7M-ZHMDHZek4G!@OQ zs){c})%V?Rauu;=-ukxA6;nn072f)g<)h#$Gp4wfTHi^xj7Ipd9~E$r4!?4(?%^eG zHP>*cm1{^QRSiR;YQ;>3Ye+Zo0XWgaKTPo!uA$n)H;K<_Xi!2g?qvP@XRzSVx*Ta5 z5%LvU%JHV}B)K9;eFHjA%sQXyx7Orq!*1gS+uZA{%sI3!wY@|jP0+_3Twxtu>^ diff --git a/phsource/vdiph/vowelchart.png b/phsource/vdiph/vowelchart.png index 89729917d0514990526a564afa53a6c833c12fd4..95ed80cb41c7dd2c5a2b7f667100c51fe3087f73 100644 GIT binary patch literal 103689 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∓t`m8-0HEuGPOUhHc--p^bN)A$ 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 Lnp~C4%eVgvuXr+d diff --git a/phsource/vdiph2/ee@_2 b/phsource/vdiph2/ee@_2 index e48d8c5553e16e19b832c493744404bb199e764c..e1e5fa82fd87bc5cc2de98485a9cb23b2d928fca 100644 GIT binary patch literal 9939 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 delta 3060 zcmcguT})GF7=C)n&neg+=9mpVAS!7Pkyad1ptN-e797H?KbX0VIH!aR#h(jQl6tk6 zEb;I2!eq-rHZM#hh*>f;Ca$}hTg-yljan0HyfM*WFTCLH>^x@^D!NugTD6Av1}@h3-Wns zkyTs2Bt=|`bkU+=rSPsJVLh*11e3OaBV|eH>%;a*n}Pjuk@HqQU+?#vpxF(j<76_AuL9SK0silCJI8)`%*in@S}O2Jg}~J-3>?CC zM6d&cm_R#*(T9F~itX%2>2iEVoj;2iH5V3**o^hqiUC|j7Y<+-c4G@u@~*^>PR*YK zkPC+f+V@6MV;JM4$8mgveTcEK{9gy=&%l>cEm%q6?SV8R#h0W?-DZ8sH~?_P5IF^u3Kp-ybTdUm_` zMivfMWKNrzL!GI@btWAE!2#eLR+0h@bmunG;SjziMS8Fa-E5aV8wctsb0$8U4w*T4 zi9?9)+(8*TNlxE@DB%|N%<+2`9o`LxAnm<@>hK*^q>ZxINwqlP`r|FqmYWVtExEry z8=gA=3f7{Dq;4VMzsDEYhEEVgE1OvSXWTERk&u6q{-(_PnObd(Vi?r}8Dw3hf5nHAqRBlCi-FU5 zPT23~uoyT)NfE=#VbNxXlA;wn4T}gQf8!A-M*y|(kp;W(Ew$M%(TWIr^3k0Is)e}` zWDdYmVz7ql5hB}droq>P8mdJ-JLSIf{>)ciHe=qfNpggRtPS42mxGr=s8m}2FNEw-<*Z3| zKx}y78?8c;*Q1)YTt#w!j=j`qo2c{?%O5R}*XQnith;J9p2k3dp)T-HirOz)6urfj z6{L%}y3cIYMO?XYdqUux@2)d3UWFbn0 zs7NjNSP0@q1u;e_*n$=}1)*yZs-c^bQo%(86-4hNNi&m8@xsjgIsEfD-~G=<@P40v zV(j$E$%*lU6u|U(juEj})?I%rE6ZhZC1`>s#h%0zA!LdGWl|<7p`?&z7ipRSAsV7N zq2!P^KhnIZ6()Ka@msIqxAc3ovgWhcnh#i{i&QJXfahwPR?6xN7{ZnLOt(W4ABgO) zSB?usuSm71?fF+xBl|OVds8VkUmvej>`kS|HWsc2R6R!+rfW}T0AtH^hD3=)U`o>` zL{AD2*%05uL8R$1q2%zuERxL~T6r!MM*6H}#H}m@yF|?+Fw+X*dCN5?#Wq_h71y9N z(4l*(igBv7vtBt|`_V?zk6R|&F9q)Pj)s@Q9ih3xHP&Thf8DygqMot&*B>8r#pG$p z<%DoSi{kEtu&)8a0)GJ~gd^rNI3dKXCvFIDcSj621i%dea6=gMY#+jK`_0aD&*$J^ z|Do8I1EYmA9toj{8_Jx`m%cw$)w@zr?M?{0P=yflI3aA1bFN7!HT`u#2sCroBn)`h z-4JZwD)}D>XXm#MVWoSfr>XZ(Xe9D7JRAI0Xx`anu-}jFtjY8jU1RND2JOMY=jwxuGxIkGJexIVTb+j~9YgjG{@%mHDpPB|*y Nq*mjY7v6jOjekgA%)tNv delta 744 zcmbQC`AStfIKb68B-k~OiGhJ3C4-g08%Q%S*#CUMc4?xtZv6=$CxR)0DV~v$F`kiu z;S1vz##EMErc@RN1~n!%rj1;uff&M;=G(*|%?DBcNQjT+kq`sJ9;Q7&lMOg(L}Bcz z?G0(O=I>+`@j z5Ek>-b}cAtcdI;@HI~v1binWncukdM4Kc#tJS7 zTa)hugB2eG(2o(IFkt8qW&pYw|?#ENeb+$FmNHJA}DVPJr` z1mq9~282TlIp7Yl;?xEP)C1-Eke4u&kCh%N`rd9N75 z-~siL?LXXk^4zTOfHL5J4tJh|&|OAM=YazX*?ped;qD9J)n;b--FkBI5Ut; znOT1H^u3wtCeVwlBZ&nm*ozzFh808pfdVJ6oD z#y6Z0kyStu7Di3J6AV^-48S0XfIFRmp+lGf=oN%#SQ#IPI)Fvso?&8=mw+gO3NbLd z2umT0n82Nm>6y)?EZWTVKYJ_BffYHh-v4?S!eaga)#kvwyHy^{p32C=kOCEDU_kY? z5{9pLv#w@9^|dM2N(NM4Tk$Od`nn$3+q(ocn9;q>z<}m$pd-+IZOB2quNfHJ#5<)@ z6>g~-Y8mU^+w8$10}O-*3~gY~Ij|o5umsH7|MCHtW?(=L1O^6Bw1R*x2WlX^Vhlrz z`j>3~(E>r9n-wkU4fvm<2ZDppT}E;O!E-w)fpAW)LxD}@ubQ{UI`zq$d3a=)S$@s# zzdKonA6q7kWPQmP$%>pwEx9TfETLHvl1Xpyx-s71Mb4z4U|ItdK~2{S_)#+{0|Q1T P72}{JlWso9uf+@ii*m#! delta 727 zcmbQK`C3&bIKb68B-k~OnSp^JB_p1d!4b${V6gxBfbG&m8QuC5Ku!cx1XDaCBV#-x z1H%`_FN~=yxlE}n3=C>aYD^osP6IK7EzP%yL7ESu{*e$L%OfEMhCNJsm>3ugIBG;; z?5gb*axgXngN8DUEh5@4xkdiJvWl9b+CSy<@{1({1uHkpF^Vv={FL?IEgIy-QFs^i*d@T(#|%=5!=w8e$8-?HbrY{RkeW@PsNvvIwG4 zzqdgw8#gwHDf0#F5Gw;efar!_KxFh5ZEsfZDAA372hyBx29)SVMvq#SY7?rd5Cf$4 z<5}F=OttMcNHx`!QHH9i=FK*=_X9xbhYUussXA0Z?5 xv_-uz-LJ+B$t=sfTgg2&{dCG%mVb$_Ebn{Obhis7-7*=mi@&7%Y}4PQeE^mR#rXgL delta 774 zcmdmJxK@`VIKb68B-k}@B8P3gA;$>@28IZx2&PEJDuzf#28J(;Ul=nu`GJ^$L5)d` z=?E7$5JTACcm)~1@j}!)3jStt6l7r7!?cG9XaqxzD2y%0Q6UFoGcaf{EvU$2m-@L2x4{H@JWjPA@ClNcD7S27kcMlxPwP-kS|6JqLO`oW>jXu`q3W)F12 zORl4gA>0fc%s}=^-unzk_!!t^fKKKU;$x~2U|{nDJHd5(xMUX-gw4QkLb`zw;xt2! z_wo?-W_i{a=6aZI-x*#r!fZQ&WSb`UO}K5vyqDm%#R-09K-gC5jNLX%2AFLO439Wm zg!ClO$gWZFR8mo{Qw~z@SMuB(!09>|93jd)xn4joOOFE<9*m4?OtA2H&v6+Z`n_Dd zOt8>D#LL473;lFKJw`-$Ffd>b4+BK#=L!NtAC}w_IDa!F0FxLfx#e-EGUsu_l2{TG zD2aiR-X=j|AciD2P!e0f4@*k=9EjvrwHWdMGuRi}919p2 zIAoY)puQ+&6leUvz`$$8WX0qLR363P&Q{2vdwv} oB8KxQ*+!brkx?2Y+w2fZVA_E{+d$$9J=;;WP!7LFf;7T5y6O!XU(Ge9i^rA)Sa9dxkXt$=)Fy7$Fx+{$aNwp*QR{1#Swv z{X{CmZr!vr>{iHg|KkS06E^_<&uyRYgsGF}li>-|;#y=d3df~KCABsg5tOi-3Sagvl&=rb>Ocx4r zC>HnlL*d?2W04q+#a>^dkNVEU7mixzUEw+6bXvD-QEHN38>?@j1MCNWnU}DKBnOJx zYkIV{N7;wY!D|*%8V|kbBiL;@DqWRh(T8X;ItBaXg>tSuORkVl$;I#vj7KM7m3&#G zauk|`x8vEk2`z;s@^f+?)NqTEN%kvCP@4P-Hc6W5)bouSY^t@69i{#8 zoHdpElWo-AX`k;n>-fiU-BICq-#*iJ(fR^wpnJ4A1fvb`TQZ>MvOeoYo^H#wVcUK_ zmrv$%_)h*azsYxTD}U8m%K`>5-lN$xgEr9LX|friG!R3~fr#V@Eo00R zVqnU8#ib(*ZQYT0afF`yc;Sum63%Z1uCk|v4DYrLxxEP>giHOamEh}47^rMR!nX{ zHBk)iY=sO9SQ*$Gm>QUDfFeB%Pq>m9G`JX8K_Xj#A}ox@`GSDBo`D4vdJsQO5wd4e z5oQ4T8R2Vf4hBgE7LW+o*FZ1oa9GNqiZC!RDI$xQ0xf_5Oi%CP*AR1-)l_<{vO!f` z_1xxW78&OHpZn&3;)a32fpzWcRtSp)6tf_JJrEce7N7(|1mk_QKyYO1MGJ>m@)> zaEUJ+JrKf$yf6X*=nAwzU|^sm5LRpM*W9Biq3NS8r?O5yXtO(q470?qKDIEBe}RFp zDbWMWvVYmYz%aR*TN0eu7od1JkntOuhfUa8&^&yYs|wA-A$;qA9!8GzT%im`^hgI< zj_O}~pa>xkBeExEtZ)9qt_g7fU*@l#KESWV3;^oc#n1o% delta 769 zcmbQC`AStfIKb68B-k~OiGhKkDxQ_W2uL$9*#CalzkZ^$cD)YA2_QFuDT1k&aVG3wPfgt^&CGF7c(q z-4`z8h2%a4hI0~d_c1VJBe~B6<~}PI*~rZydTYTKMAsKpEbcqXJ; diff --git a/phsource/voc/z_pzd b/phsource/voc/z_pzd index 964d041eb0487c7d0d45e262f9a67ba3d7f6eee6..1d8e6950d49d9c36d7a712ebc97134794d066711 100644 GIT binary patch delta 1082 zcmaE>I$KjNIKb68BskEBm4ShwD!!m9g_R)y$b^E4a@zGErXj}(AQ{0F!4wIkBN-wY ztALn+;S1vz#wegj6hj6lKVt?b1A`iq8dDEYq=(@M7dO)pE{F&VP%R7NH(o&?hL{5p zaTNT`zOm-eW|sIhaRED6kpt@zE?Y2b|H}gm z43q1)#li8V$AKDSjErhbsD6CUahcHqCB}NWc$p+nV(btv4mYqWh770mYA? z$NS*g&J$^`xp=PE8&fg3Pz^sGFOnKa?%z50%nduvE5)&xv sfKntRqihlsX4(YII*9ZKa_9nn)Xb#Mfs&a(>91-#C7EgSVSX)U0QM@o{r~^~ delta 713 zcmbQO`BqgfIKb68B-k~Om4ShwD!!m9g_R)y$Yfx!|8=w}bfTPgy&=a5AUA?3f+>=* ziXoDbf#D0|7sd=uejsLGP-9YKI>N;b#1Qs3UO~ohyb$${g1?y@1sNFjFzsOi8CfF= zV+(Rr$idhQ3>wNX_HkZ&AzO(DG8^RAE95CWmj5n)YqK1q7&FVSFQF?ZTd?TX7cele z6)_euMlxPwC}3n@pTabS=?8~8;~dTgpi9)4UUD5}bl`@tSMuIxDB)`Wx;%o3Pl%7H zMTi0D5|CS5x33drV1~I%QWC~C6)ET>LEE!;~*=)yk1_;I zZWGYWfF+p(&fg3Pz+?hSGI`vo%z50fWRk=LN+zHv+axFq#E>Kd^3(!;SaQ(kKqQ%} N?bwpc=0ZU&W&lCtq%Z&g diff --git a/phsource/voc/z_pzd_ b/phsource/voc/z_pzd_ index 1f2befc094ce822eab939dd559c4de42b991705e..7c2edb404f5c9f389e313f9af52cec3776d77823 100644 GIT binary patch delta 1083 zcmaE-I!9AJIKb68BskEBje&uoD!!m9C7zYR4akOqiSpX@Af_S52_PB46u}e;q$3$3 z8LNPpf#D0|7se={NEAZ`CqH8bCj)~TlNwVGP^5?92p2cg5iW=b3s5Z!<2PPGAcmL& z5pfj!&EzP^z_5pD4--TLsFk5c6e98kWP>A+5ag(kLlOdtFfeE+Ba2vrgup-p#(>is zw`eo7{MhXqF!?dFF4#K-3=C{Vj75wv&s<~RV`N~P!Zd{`0H`a9;RlC0V*+Ob&?{<8 zpwQ@Hc*%8?QGy#HvIQu@!nl(6K0^s#129M;pibu#;$vzNVgPyt;ThNM>qHrtK_Xz! zFf!N!HA_mO2mwQPn+&puE>H~wAXqSw%@r&_-~8NfI&boFc5J@+&hVNM)i+0gzL|sK z8%^$;j1DNiDdxR|=9@Ud&kX3kDRm~oHJw|j- zGBBWc5|sWhqs#y;$~3{Q1`(K1wuuKAW515nc~92ohr}3aW=i1v&5!`hI*81a$DPWY z$BmqszVRk8fwB%LMM6BYNl=(+6EN!_(jUn71^lR)NuL8HGl9}y)pklU)8-@mTFe0P Cj=S{$ delta 737 zcmbQE`A$_nIKb68B-k~Oje&uoD!!m9C7zYR4ajC-u>W-gc4a5-kH(o);Z@duoj)K3L90eH|_Au>X0vTB& z3S$d$RLH^D3=A5|F!pg?dm&qi2QnMv*DK^HJeL11e`~WmqZl*GuP>o1CtI@U))z1^ zuoW>DF-9_8V<=!`V4K1;h3N-}I%5K71JEUEOfR{PGD>hm*eiMOGnDW(09_uz#3#hZ z)FQ+HbP32UuG`m%GBCs3B`FDG8**%ufw99m^m*nA_K0eW{}+=Lmy_HeT_fwY*_u^^ zndSGSzDbjVIdn5%uKCXJni1xjBS6>8fx1SM`zE6U)HTJtm*B366a378a80Q*cGp-k zz+AK0j#Hai;`i!_dZ2J*a9~}+Wea8c)cD6%rT6NYD_T4yyv(KcT6uA zFB8l$hj@7yVL_8FsKKfH~s_Lq?DyNhh6n@CO*qqA?jHcg5 z83HD^3+UFvl1u{UZ-xY5G65x-JnmHHJZ@MrNn!#e6Ht_G5)=kvNRk10Y5_kiIp}jB ll1$Zh>`CSdo3KEUsH^y7QB}cfy!E`&+!frWn>z)CnE?dxsoDSl diff --git a/phsource/vowel/& b/phsource/vowel/& index 569ebbcb439dcbe1ae14ef13546dd3ef09b308aa..4096cca73e5150c7fb5dd1bdb81dee4a11e57bed 100644 GIT binary patch delta 1196 zcmca>@X&-KIKb68BskD$B8PoF0}z}5;&)8%m?D96B*Pmfcg8nN3=Cfwzc5AtMWPtu zS=RzF1A`iq8dDEYq=zAy)0Z)s6C%RG$iTqD_?_oC({~;Qh6ttzCWy!>z9z;~d<+bG znD#(LfLa;8NI^ut0CfSeJy57Z4n+tkqM?i|Vhz#<1{yF1oZh&8DKpp)j1D|v%mvI4 zFT7{cXMDiKAneApi3#F`2-YbKA6OYgZJ4G&z2LL!Nh># zjUP;=Xx<29oq^^Jcg{ZysNT5C^P36P8(a9KFuY;Lf#MBEU~~uw0Am8l(LfPK61;Jo z16x%5V6tL-ff5y7tkco_;LQ0E%@5Cc9;5kTEuSQYAE+M{mw6C=5QitH&rB+eAD9?~ zqM43Clami?CD;$P@Z=QADS?)p&hdN$`r$HCa@x!Hia~?_E=qDz0mj2T%;bcectB|f zH6ASSC8zrWOCZS!HCsPqVq<)WlC3>h6B#^EvUM|O31c%#whrM*VGcpb)(83KGaRIK Lw%+_&q=*>+l*wF`jiTLp&=3gBp_> zQ!=M7V=^a%{hjAH({~;Qh6ttzrc-=PjHmb*81^vj0qO$klR~g77iJnKm&+uuft4z{((M z%QS__i&KVi4kv@a1I7o8r+FBdJ$NtkfY|%^6d5)6?{b3JAUDjEna2!cSIDU`!Ppwg z5O$!Tsqka5MN$%Sc8cOEOVsXb?9x)#k?%2X7h2#!14um@d1Q6~JV1&8j1BWF)hv-7d7TISC50z`wwrR9$J>7hd za{_ZZ+yz#QFQ6ge#X24C0%y*Ta2Gu1c?@^KT0Ti67Z47K&DwlR;g)@7QephS#2^&S zbd1S|wGwVwD5nHG*w68NgIl(j?-c_g*j13c%fNu}E&~J1yPJE3mM~|)652y1HpYk0 qgyzAT$lw7@Xw94@jLp!57Q&Ol90E;f2l?hR93&y3ZGJCS#0&t!RlV2% diff --git a/phsource/vowel/0 b/phsource/vowel/0 index d99d36391dcf7061e5f8f4c1d076c9d5a455ff8e..1f42fd0ee90a4547f78321c653afa1d207fdbc2f 100644 GIT binary patch literal 1609 zcmd5+OKTHR6#g=qJg1X1nKVh$n6}2&AjLjFZEZC}V{O3*DXFyTMp66&7OCJOD_vM{ z>q;W}3tTA_$*L#_ZY7I2i!KTxxDY8)(C|ocrB#XD;7)luHYRmGbhG z3&4boYkXNB-SfHHT*&7(sS1p`a*$*yP_E` z!?j6YC@>d9Kp--2AQUhZ-G+?&8>;TL$5hi5Ng!W&LMX72fdk29M=i*#2r{2s+v&V# zu!sUK;WnP(E?(j_SMxZIV>pB)Qb;3%qnN}6Tt^ufv4U0lCvci_5+mqGoYIFdV(6t8 zGyMoch(M(T;DMhu2p?5gFM1dqM}iR{dMXrCRPN@#zuWSfchfx|_2wmY`3u|*tOyCE z<~F|l5bW2bx`q8G68i1zzi=Caf;B7qL#mxwLs@bl4YlUC#|))E$O5slZ{=EC>d)EF zV46Ih$2y);-{URLk^gbBpCLa3WHdsXWdg)L%)I6IAFb{=IM?N>i2w(=DH8eHJk+}K z00-;r0tfP|Jk+}K@b6vl|K{P-y{%RrUbX3OWkKYjja?4!U#p{z+` zmT7d~ZS>mvVKX>wn>}J0?K-M|K2-HM`(e*AX~Y#aGQaPKQ=NNuPoqIhv99OX5jSv) z75@MaIhFG4hAb;J#oA1;P7`L;CRypjlpOn@gjwh~izS@lOd7!`4)aS#7^#?D5an!% zP^0j&)_eF4vIE2<3NXUYspK=~l$cO$Ow6hPMdcqg{#*2ypI=efFFsl^$(pBr0uOA` AFaQ7m delta 552 zcmX@f^O2JyIKb68B-k}@B8Pqb3kC+x8O%?Z7=Yjw(*phorX`FZ_C4kf;RlQlz-${X z3r-mO0e1qFtA?Mf@c|A?Mf@c|F|9LK-!_jcf|f1ZLSff2=uES^NXq-h%=)y-UmU5}kQi0mpshtQ4@3lVq~ z#5@Wif)N>YS*SxtPaWJyQHT+O6&4RpznM4A&djP1G%(EL!|yjUpZUG-?Dqc}RN3*d zdz0Bm18>ybMey-J0HbnC=6RjRHoe8N1ah=Q(@dr@W8KH71+0lBDlsYHK>b0f38;vQ zNN{&TjOf=Ww1x>6;xaisS2x5{>g~_mcC+|p~ErRRD#+vjT_K|5m zp)-f?w2t?b=~@UJo>*h(v2b;QiE%hoHd0M5bloAV%lO@bwmNa2v#XJel5+Q#giE3h z)Jy^5wsa~LB16F&H#%&7O1zSbj#rV9>mx;P^+6CG2VGIUAG8(In`zLql@rsO)rS}B z<^4GV!z$*7A;lvK$pE+2Kj?i^=gw%4$}x$8^)NQ0W7RIAGg{Rh;y=yEaiS8pg0Fqf zjCNXli3(SB$OAttHtnHCz)Sk*hh^THLW#q2Q=Uq*(Hu1((vh&(x`xh%u)J#s%hT>~ z4uY`s$2J;JCzpj~^Jlv+@s%Zx=!i_>t8|JgOH_GBo5UBb0*WlrOTB(t`jQi(FKLKL ud`&y3@hj&jM~1lHZ>0_V2iXph=T{7gro}7r5x2RCciRlPRKo6@lYas6&f+`( delta 749 zcmb7?&r2IY7>2+3rXv%7Op4K{&2Ff~Y7hh|J!ut73DujL3IR{*#X~4bMetA>j~)~e zaxGZ(;6Z3%F~42Ammb{H!!qpq%)9ULi+nea4o6q3X}Vkcf&L{I2cr8f-}9MX$%^T;TeV&2vF7)}VDJ9158{;qy1_HSRXe zxBPi>9Y`xj%7s#;PHFROhNfPwpRjUY^#Wa}Mb#?gyc=oPu{=)DtX|IzE^ zu3is!^U3Pd5h8?R0Okwp=gMe#*3S zJjW8=K}n{SNQop_0+KSV9owIKMR*5nV3E*oj~dt+_} JYnT4_^d8RmymSBn diff --git a/phsource/vowel/a b/phsource/vowel/a index 4f93d73559fc97673d2a59ffa3eafb1ec6fb9ae3..7c362b12412e6d14388ebfc1134d1d82c74a0d0d 100644 GIT binary patch literal 1625 zcmd5+O=uHQ5dLEEi2y`{ai18r=ENXbS4Q-QDSn%Axo5ehtZRYMEvXY~>N>k>)nFxQm@ z^(l8k`SruUscb45Zy*$?1Z!?5Qm-dFunhs?QA-s$KX^hYuoS}%B$e!UAQ_P)SGwu6 zY!;VbVFo$OV-+9q0LyrTcc>6Mi99Z1iZV&Pf?ND2=P->^7{__q3z)zd;uypbhABsA zQ!(McwlhO?n27=gw$)BIzyXEaH{Y$BFO-oyAIA~+D zP*Jo|a-vwlvg@nM$v+Oz;q|A17;B@-~FSxPg~=f#-aYXLyLKNHaD-O))x(49;SX)s?56;5Wy-98V3C>4WHz z9Cnb$0GSjvgf7W$7yVATH*Ai5a8rC_+mPIc7&Uk9zFNO`==2jg^SqwehXGsaW2!tH&{usxFvOb;Z#W z<9gK)J<*;?H~l;7y%MZ?oE@-L-!N*r69LwuHBO}eHIu@e6bVE)F(RBGBdqt^xX<}i zq~7Bcn#LI%VkE)YlVI(~s0sGTady&ac1;GyxErL7a6XOV1db9JV0M@@#+2fRCaYdl pyccfx*$)AD*a5s delta 502 zcmcb~)5ygU9N_9466_i{k;A@TfRTYSjX8{k0SG#nR|rNhU0?#SHCP!0mM}(u**#nu zTn`u@FoMJjcptDq*#G}4^GiV43=9e~5lk>O6>@5DwuUlC3Q zm>_<#VeR09`7ed50Pc?h-UfDvKi>V{&-Z~9=BEWRAQmJZu=!7nK@kWg7?glmnZba; Nks+I*eDXTh)c`lOtB2pum%vK}Fz_5pD z4^#xGmEnsNMC1!l*B3`1!N5=k z`L;0K;61?efbjt%#20mf?5wl-88{IlAiL9~8CXCfD86W5S=+WAk2?B@l0*dcu*}6wMPaSsl?lF_Y^$nkVk^wW4|As^An1Pnd9^c!H6^p25ns zLJrjv3=AZA;v@$&F3dPky{hUSg;thQ+0n9e1`h#D6k`RviWu|jYn8(DEdk~gmM zbTCg2^}l7C6Z| YSpaV?2PG}cTn>s8VsrWCw<1N%07ysR+yDRo delta 753 zcmaECa^HX>IKb68B-k}@B8PpwzTOE228MS`@0cu@4H+z$85q7Weqnsd>c;Stm4QKx zNsVb9*BOR+To863zX@|7KLbMqQv_3uU@}{cAOpi5raeqRBN)C&A=njiFt!k-2OE(QS?CKsl;d|Q}q@V?}E!1#c%PLQ2-Ha`O=hz)W?nzS7Y zj9nqOgOP^`ByI_G1cW_Xx?hP!$I)fR5wbS@dj9;lZ;^4Y`fTOl}+4PhTHFC*Ef%h$nNKUb(66g~_N%xi25 z!K|IYfN=)1V1aMRY{F2$%pd^@{12?&AeV@P0)HKsI>;q_pupeBw+!x*WPmCb++>DGYz139f>xov{L%;A;8OnQHkU32w5$ XN!G~%u!Myx!GSyuQM37@SP?S-p2ECL diff --git a/phsource/vowel/a_3 b/phsource/vowel/a_3 index 3fe07d689faff8853724a8db1c5e6308e594492f..1f5b6dcab9be6431e7127e80e83b5723d3ca4d9b 100644 GIT binary patch delta 1798 zcmbuAO=uHA9L3+xOk`P`$tq%kjYTP>IeCzH@B>N_BUQn~_0Z<%LBX#=(Netlb&`~- zc?t;cgnr+r*)AXFiZ+3+y(9t?tgOmnd35zCBVkNdf$^s4OX7;ZcfJQNyZ2F>E}>utKpdTWnjVq?jO-O7(vz?Dt~D$50`<>;}4u73<<0 z))j~`;|0bPh)sE!ZT=O4{+hTIKpdjm9o!20lOA|s=>-itzcI%BM1jx18f&|2;nMTqFgUL3>HeH z)b;XcDWV*6U-CvWQTCUi0An(SA^5Er##?bVhEXx@#4tX~9RpxkdIH08ixJthyWbQT zU(Fy=sux*)I|lJC;l+q?Ee7#K7PQn}xb04QkqY9+o(RPEFi=ATp>yQ>fpQ3f${h(* z(Kt;Itw^9A$op8znu$QIBm!mj1J#3w#s}CP3)E3BOrAsGs<*Iz6@ox5SJirh&jHFA zwIS-*Q0kpG#*tU*-IO=cOk3};7v6Ck9KN)}6!p&R59_UBwAmb8AJL=M5e+yBhBRuB b3dW**hQ)uus3k6p8o4p(g<GP ziXS+p#MAf4aA5%e>Zp!Z(K%Q}08OsRP4fy&^8i52PttfA0C z7onv$G0Pu@SzRF{Jcf|2P@`v2ZA}HHZZ-kXQE0V{Ce)9crf^OnP7XGIM+gJH40a3y zr_lwZ@=18agVW6#-Ypa%FI4SI+!D7;RrJ7Wx3+V;`MtI>F|yZf=Z%~fgGkG16839Z zl_}$mm^>a|HF+=iLnbdKjGMeKbi;pm3hD3^_NNVA`%mk)$@bR!Y5)g>nBeVANVBGq-# hDb|H{(XZ()$9B&vDIO*fTjW%DV_=W>t2!iQ@L#ks1ONa4 diff --git a/phsource/vowel/a_4 b/phsource/vowel/a_4 index e62c0e7e790286416d30b51adf0783c74491fa22..3fcbda426f8a35c2bae644bc917d87571c263b89 100644 GIT binary patch literal 1627 zcmeH{Jxr5P6o#Mv|In6SYcZr!5GaaRpkOgdKU+aiNyH*XLn0K_RV*DA62@4u` zg{ zEZ->n43%5ATw5-$3yi`_v>d5NDwWSMLiGr&_LMya`Jod=VLgfaZzSD6ScgoTBzvW6 z&W@epEEe+=Sm7xjxyuHxdBZJXIf|TNR+5)q;D)~B6mv{-oYS%k%#fv*VMZ909Fk2- z1{jnK&|fEg^pPS-kEGj{ID6Sc7afu=+K3UQh5WBiZ~gY|EZ>*4>NPFT`%0w&Tg2@! zZ34~WKO1Z||Gi>uO1zD5kX2sroM)=Y6Yg=5am9wDX+Fp<_DfP*iI_a3YW|AY?4NEhcPZJ#F zu#h2T$2DWxYzgDFU%h$pL3Kk|{SYCb4lur7UI3qR{C3>zs(Aq+1`8`Q@4!Ft&y=gl)#)&EUY`!QjLY z#xRZHG(#;zKf`v0U6bV)S7(s#1``fa+%Q>?WzJ+}W&?U!c&h&0fAanJj-)UaV^9P_ W2?iw~R%S3@aAe44D4)E6bu|DSuzVl@ diff --git a/phsource/vowel/a_5 b/phsource/vowel/a_5 index c250b9a05761804bd907df39cfd43e9b23109653..a7939401ceae3b20167efb59a4f7502e35f2eb1c 100644 GIT binary patch delta 1599 zcmcK4O=uHA7zW_)n;CICWN23uvNdX<5cbeR+JkBRVKQhrr^KI= z_Mn1iMFe{-Ia)=mpq>Q9gWw_F6tVQMP(4VU?5>-gNmz4nVSjkpg?ae)oh|ptaie@< z=Gdw7$%(s$QwMnz+&A*NK{m*oyw5>~j$wuZ_~_%jOy*&ny_6?Fp5)20OqRjoXXP0t z3;`HA;x#w|V3y31Fj+AN$%+ZEM%JQ4ehU6@nE3K5za%dJSNA6(nbcf+G?^T3zZ4wy z--r0Vy84I)3eOlp5MK$Qp~9vmoTiXFPcD;CafCgGSIo6qn2Qu+yaw0#i=h^_FkJI# z@fm6YL??M@-Xev;hS5m?E*T>^VC^JUc!pGvI0{_$Xg-k~ir3t&Xg*^RV?kp~(LEZY z!oF#YgZ#F}I49m|jCPt?@XVhB}Kg^e3pZs4@rDS-AYZ zhPWx7YKWb?E>e9K+uI5P!I2C6*DNN}5Fax=5li%dHi;se)DTDc4GmEj-!;So)9ymZ zpEvnK^@k{?A-)Vn2({aFI*xUv+ZNjbOX+rjUx0$r?TXlo6{Xu{^EZ~$yB#Bf4In5= z)QWz)-Tbk;C&Hse^b`cL_kao_%d3!85DhVm4F%zuGsOGvh+o;L+KbcbEG$|@OJQu% pJFqE}&OST9ufc%ASQj5)U15~WPgqK4^xkI|jQ;o8=8k<==pSwa6;A*F delta 1011 zcmb8uQAiVU90%~<|Np<}c6jLxDo@9>j5W&9mf@yuyPGy0m}IQdXcYy^c?%l!G6_1% zo|3SFdg&pdK|b_$^psSjQshIBy#zh%MMw%U7#T#Y|Ly)aAAFD=2H&TBKli=gJ?mXp z`Q%`{=VUT|;y$nFe)T;7tm0K%Lt0S{0Vtso3UF^BzyWx$2g|~FkOeC%;yX}8fMGn0 zXQW#C1DM6LnEnNn8a8s?ZRecoZL#u&;PcRO*K0-X`4NBAH<&n;_|!X!n!sUR+jA1MMVhzHUbMT|29K(h-N0)Q^D3DLIqxaYCYeZ<)@67GyH zL@!6DBiJZ9rbx!z!6cj|zriM?IR)7SRd`q>+!kL}3EQ0+vOy@9w;~w69R;h+Tz!l* zRaXykA=+lG9uX$0tLx(T>grDI(4lN}%q7*x{r1Tdhw>&iS9b1QH{M=O_y4|LcAktVH;ywXlZS_JL>RH>k*nq}a znLsWX4z{_h5}?^Xqa5 yH^IRebK(-rF-A=Kf?``Tvb_D!hk{Q-(eRAAeDqpkcmM3M(Sf!B#rV*4j{E~M@A9kw diff --git a/phsource/vowel/a_6 b/phsource/vowel/a_6 index a6f4e24a00f81d0589d1f04f9cfccb7de5e557a8..522b2fa4c780d6ead5c3deb99f2aa216961ac949 100755 GIT binary patch delta 2398 zcmcK5Ur19?90%~<@0=^$T|CSi7S1*+B$=>aDoyPV+bmytDOr%(s1(H9!lb8skXiYZ zA{F#pM3HYHd(77v!3Sz z_R!h(ljlMmjT``aF8S`+kH+K`yp_iaTVY-D+yxwy@&HI-3cF>}4Vt2%rU2BjIyNDb z32@n*=(1%JMSfSoaq$$!1wbe3WSJzYzr&~wFw17mME(>~)tMw^+yVSDx=}+SnYe57 zlVj=M86Wq*i|l!N`Y|^QjVe_PVhs)w#e(t?7KmcfwihRfA|Xy;f+#%t8hT1Ag7P*y zQ^a2=PcjUO7-4NV!tzJ4%I9HKjxRTgbz48I6ND;GgGvxH`XZYtjldm`B0jI0vxr(| zvBXlaL>NuVcW5HBU|I(-Eq_J%#2EMpBcUfTQJPVF7QJUSzoO!w%1wqhK&Mg8Jy60JqY3(V?5JuHxJ@v4$fY7 zm1X*UTzLtVWdX-BI?aB2v>~{qy{cHoWz4ksy!Zk`0z@u(q~Bp)`>2{r00z_pPEgW` z(eLy$BC6~+%SJ|5+_iOiNo%&vh5e5ItjsPd%4p?#ER3*RRFvV<#x0B<@!rC?uMZb6 z016mJ!SfzE{mffntW}u>r-%#uH_%!1DSo7gfcC(G7!xxV#ID^}xOEmA8w8Op`1TQH zuA+!xzTYy5W~Ie~IHBFPAY$T&1@TaK7a$^ZL2VAvQffiz2aCRHW4r-lq}&eW7dS|{ zy;?tbNx8#fABIV}L;4>Kl`eM{VQh`&MrbUj&F*?}*P)__2yey+L7?&hkRYnGKByvy zQBjSf1QF5OS>(SX>g&yFUu&Z;S_kh#2Vo@nT}a9#x9!=qn_wf1Ik5<{9 delta 1489 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

    Sqpnh|st1=hu0xE)untZ8#hoD?Z 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 ZI)8qOH9(Pfmi60(yJ#04V1r{{{Rb5q##sOW diff --git a/phsource/vowel/ee b/phsource/vowel/ee index 766fb26da28ff815b0ec3e6753826d2b886da955..dfbafaa5d2432ee127381c9edf0e12db71d8a073 100644 GIT binary patch delta 1793 zcmc(gKWGzi6vy9tm)yUQT&mR;D;XLH8CsNT1S7=6Rwzk_N*vOb>gd+7LPpPf}`e z^5*F6;;oS-HM;=9R)z1ca#7E z1n_0#qi}!{mB>-VL3nNeG^y!Q%yW)nim!xU7l+C*CJ7}OcPrPdn`}!SymX(-^%3%6 zh*2-b7=xw^pvD+7`UlA9ZiX47LNg-b|IEuUWff!U4f*hizjE6Wx zOdmiF@jChdy$}ElqTAc9kgaHs0P!Z=$wfxx7%jZ-!T2FJLL8%@G=XCj^)J9N-bJO~ zVOY6nx5bD$KE_1UHy3a5t_Q-D>k@}B)s_e1UgW0-!uqLyB^Ot%n{4wbsGU>3GpdGp ssM(|ZU|DR)%djE4m&KZP3D?-NSTwHCBAZdUp7~&|=N~VN7nL)#52!;t=l}o! delta 1213 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 delta 3061 zcmcguT})eL7=C)n$|N>ZXtAqBud&slea_1eADXWMI256tIqUOlI5w(=7!D1C09 za@mr{S=()A+IlYk4b0g?&a5R{Sf6yv*>xOLt6U44jP+6PySzfbW~#xj7`SaWi_3>;KvTm}ZFYb2g( zkhpo9j-xn+K0JzXT*Cl)j9?V|aZJ3gTuCi!>u0g7mBXS72YLP@7{kZdhnMjfp2A__ zt+<{#J->bqKsg*bdG5VbV-mB}<8?fX=UIzOn?4y^KZ8J7wGi&g@5XZItNu`FELd+* z33>DaTl3cQEGoM7UbV+-jlxelRyON6poU#4h$seen9uLv6sB>UK1*UqM5=C-$swRhr<*yLovvw;gQgiy-+^AP6)yGappb%K5vqmXX4U zxoPv%EGjx?=DDtqlDH%5Hn7Y*FzR(z80*C{??VUL(Zg1oWDMhlK!!!4=9|<+MmD*n zm>f8X_oV$kh{=I7k&!XH5|eFqA|qSDQcOl5^QjSmdW6u504=x=FS5-(fe8A<@Auu> zpjwz4LGb`=A%k|-BTCyHfNKPk-@>z3y8)JpTY>kRYd1JFtat$Yn}*1tppbcx88 z-^Mj9hm}e_gqk*^EV%R#DmZC#JB<*2WluZwfCV{+vei1y58jd0!OIZ(8m<2pLXmA; zG06_d18;nz^-=N;H1o(!l=}ppW25b6>9216b%VUVcJCAWn^saejM;Q`=^G{PxNPwi zT3nqiS7oSs+umGdC^zd!s|F6crsO|rUw$>;2J=(?pZ}sFjsT10K(JVupF4hJG2GWFt z;SxDnM!oEzhv=o)o??*?20mK!D&0fSLop~uY_o^{w=>=UzcB{o!Jqr{g+JVf|NsBJ z*p;}q%{O%M!l-ZfEDr!vQ{&wtjFZ{kvwEUy!I*B5k;6G0AnyRI<0u&bd6Y+EBpHL2 z=67TOII$BilVlk@;#V@vghv28>X5t00Ptf!Hj@#>gGLm9EY9vFWGUp2n@OImBEwCh zdnc)gBrZo~(r2tIKd!%%{rBrv5soiBS?$rz@Fu1J&?0cRI1}@TpdMnd+VM6vF(u(C zs=G=Pj5eS#wx(gtmc`I~ zv4Q4pt)*GOqm1Ua@PN_uh@TmaB)?=dbLvOT?hU~I)_iIun$lyNu3c3+%hzUbkUnek zc#`oHg+<2GCw^l*JJK7*GoaqA@?1icXMo%uMIjfb;$#^Ky*s`8*QEO5q;nf&F6loqWpaO$ z-qfyLw>oOnTNp%E(W-;?fGlDOXYr;N+pZ3df=x7kfUb-L{*DZq`D# z^$ZTd47E*M^L^l`ww@3#qX~)=l-3|faT01fPSocZhpxJ<=Saad+SX~ljd0eU{nF-7 p)jD(2_%2K{m;{6IioM87VM5X(geXi(_2E=~%)kG7(#q*O+#lH+UG)F} delta 1212 zcmb7@Z%7ki9LIn6oZWWFUAq(oH5DeqX6qkCS+33IZnwkS{PSX(q5UD&rVCL>P?#xX z2&Q&oQm=$0qFy!0h-C{BDtlpJ?~3eIFN9Gts=2^!-1(d@g3+tz`@nIZ&-3H^8}SUf z3md&oM^mG-9sz*!I1O#`31CaEblN9&Tf(p9OB}_~H0ptA`I`ihAhLBYAX^7uLM9~A z-$105Y-TNlnFa76A8Ig&M1uh!ilXU1L!v;-y~SECH!AtI>DQh|2WpN+tJdrZM;?E} z)hj-j-&@$Sf?!qbsdCM~O2>l#h(XpIW zVwK2cfmmlsnRL$Q;^h3!6@5Abcs=%_!=#b{dW%g+$sPJ~qmmM%Pztec80TU!v=f)jRnBicXS&2=~SuYU^HwPHDT-@>Keu#qrYG* z!#>2=PVNKJUJH;ByN{Kzse$`;X_l)9)Yfi|xeuMk;3PGK!6)c74F1eK!{BP};x;f( zXkddu8?(WH-#fl54VDfTO1eC)YhCC9bg5lSQe%*$lz!RhIM~##%`p#Pj#0WMay}$- zTBkB~ZP9s-CxuEeTzjQ%$!7GqRx#GS bwzt)XYBrq)SFh`|>lRPqac82^5NgF$R diff --git a/phsource/vowel/ii_2 b/phsource/vowel/ii_2 index c4446e94b8bc7c3789bcf789a0a133b8492026a4..d6b72414f6f50802ded4a02d412272e5b8ebcf1a 100644 GIT binary patch delta 1269 zcmdlYze8CzIKb68BskEBg@J(~Gc(?ZjUffdf`W;%+Vvo&7sm-8`HtxwQzVd%Wbj}F zVFrdTj9(a|fFe;0d)f1Wn1Ml!NsXxoDAL2g%GCYW|zZVW5f8AKm2K464+=MU#} zhBurCgg_z?$A|MVGAi&g2p~kx^KnSp@H22DL_m&6kZfQ9iNL+XzyS0P6I=-B9S;r- zWi=!beBRmY!wmG#k1NU#CI_KbWa4+>ZqRNO3bUF*kh6nJmu>No=T|Nn(sc z^GqVUJ(_2Bb5@{vMvF&805$8Zzo)}_1s^19QCx{EX(+Yk>yvr->S*H z%-Z!H90wQ}xEq)_n0y$+7$z_>NM$f)Fz#S?V_3n?Ao_su0plOe=?rf;4+w$S;e3pY z3cL&gAoh7a4oMq+25t}=DkL+0DExAlEEhp)vU{t8P6kWC9oy7y_Unvyk1FVIeeR?sCpzxXTF%84tdF0v^zi zY2{;OYz49*Ap;Cic*rm?U<(;fZ5dsC!v<3|OIe!>cB>rcxhS|-dl+o~&-M!Fn%&u( zCcotX#S|=TA{kQ|WkIpw=u@s!^DmJ<{=PZM} zCWp_N2-ko^2kM$|KbUKdsIAagq0?zlY&_9)v-u{g`F5+E&TqcU^OlkM?bJDw&+_Tk z!<>@D7zcMsBD+1@DZ4o<;7-xv5fOkTnst10a0JYAW<V!Z diff --git a/phsource/vowel/ii_4 b/phsource/vowel/ii_4 index b9db07e75ec8d7c7d5e4ec91c505c4e5deb666b1..db3807c286c20a84df11250a8c6002a094804330 100644 GIT binary patch literal 1612 zcmdUv&ubGw6vw|CH$OJ*x=Gx|#F|))#wf*-5VfeW3$5VA5J{C<#Re2fML`crj(d_G z1g{=Ma`52MqX&@%MK2x&ulWN??LkCDh~L>wvO6t^2M@Z#n|bq{ncc_x?3-re?EGT$ zLPZ6zy1G(Tah+c9vBIBhZ*Hj{zC3eXUu$rF!&_$m5{NE^ddg+`!hk0V($AGmEYlYT z*in0|r}UIZ^o0TMG>i*HRRCc?Rkz$dL#5we-|0l;J*}*>LnvQ)LKx7=gWnD+r9v^F zoD!Sdr!;g%V+H4M6K_yM9ywGo!&XLxUK#UPz!jWE0Y|Bx#6>J2gFTqQ6b|D!>YUGD z8b$j1kVFhogxTwevyVYTgi3^31S(Ce>oAZ)8hiPkEIl12&rjlr`~69(dA{F3!riH3 z?#IX15jR>Z{JHCeZK<1s_czeq~ ie^uYAbc|Qq?x`1nJ4l4k$^X7CW=C;uzo-6X7QX;l64QYI delta 489 zcmX@Z^M#WmIKb68B-k}@B8OA`1_lH62&M;&3_vi0kwa_=;|CCvp@Dq|_X9?V_z_MH z9vIt%Hv=mE|Nk4l2W&9$1j!f7Fm{EU8qh?DUJYdk+law~A&p@lgDry`gDisygFX-% zG8j#kXWW_f?*9RX16&PE984gaXE1iiW-w-eUDUv?!4EU(4d($N7~6yw#(wudfL{Xc z(gev47ML1ru9&=mb;jxH!$i1X;mg1f0}pEkh6?^2NMXGK J9=^DI2>^1QcBKFS diff --git a/phsource/vowel/ii_final b/phsource/vowel/ii_final index 6e61090890701633d190d23cd029495a53dd240d..fd49442a9194af6ba3f5b93b57594110dfbeb397 100644 GIT binary patch delta 1398 zcmb7^&1(}u7{;HO#*b=iNv#;MT7`UoEm4+YB@}C8sWlBA zJZJT@#U7Fec9mU+v^a-eQQhV_+?F43RidNBOWNVMv512PI_w$8p{#!3m_oZp zfHXN&qc#aTa37-eCF2PnIpVH(vqSx3^o1kAc~IjDn+|DQ5SKz4W%((j(PumjX$-5c zn>0>#2Q&sK4=Y7c_!bQej%`8Xi*U1mxaaPtBAY^%RkwTlDMu1T0dvjWPYd!lY7#2L zGdhdYw4e4FP~Ml{s|xIZLYqf`$(xH^*lHGsTV=5p(^>49uE4Khv0EXH%i>H()9vew%0h3iv1Q%uqR1fC z2CTYSJdhO@ZTI(f(s+f=K(|ZkEk~%^rrE#KUt8+7X@ z>^^3i$45g;6vQVT^M*>NNC7lL>7w*UYD delta 880 zcmaKqK}b_^9LK-E|1FYgIvL#u$8cMY&77fu_+H~g1Ijz)D){-%_mSEa2+eSf$ zR4O`T1VZMa%tLI!g1iMKow@~G5`qW<>99Hl^?yF!TZicO<$rje&-eGf?;5^)cxTYp z)Ya+hxXYVkF#u`C*%0LrBVe4yX&(>5&w*uHrt9)oBxGQQ&9Gz20^Ex6{z%^KiY4Kdby}3BFhr;v6*M1jhnuI%blO$<75ZhA##x*lRHm^< zL8<;es(wSgiefzjK0!+t8F`h)%v|GeuI6lf-K;dgn8`a&!xk^ZPguNB`L)GsP##!3 zzxwGfUZbnPi+V)6HC|Jn#d~j?lTt~5-xTd4G=y$SSLnCw5wr-0_EDIpnEht z)?rg4N>?n6GrY~xxFb8r)aX^_EsbW?!wMR}zcqZ^EWKfeuQsvQR@dIxb##B|chBQ< z`B*0VwDh)=x+YeoFXjTJ0P)8rX^tX10FMn=5{)P1Bo!4K%NSIip?qysaW%tWtxD6p zo6IF?T47b3nX4+>V&9(I^~=3bUw-69o1=53HxsEE_>fg9rli!8kXT_WY=mxML`dW* zPhmcQu$Z=!IayS`Pf;;#J&!35F(xFsSvM=u4of8(u*epf_yqDo!pypakzL{rMh`UJDEBCqkn1ebM{hYSo#Cfi`Je1 diff --git a/phsource/vowel/vowelchart.png b/phsource/vowel/vowelchart.png index 3e0aaef92d1c003b8ad07f98932e3e03ef080376..6ae324a6d831e1bc2bc6904bc4a9b80c2298815a 100644 GIT binary patch delta 33667 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%0A(93{REeU8kS!x&*6s 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 diff --git a/phsource/vowelr/r-voc b/phsource/vowelr/r-voc index ed441daf4c43bfddc5546fba22eaea0d25607abb..35d8b05953d4bc90357acd279fc7362ad0705680 100644 GIT binary patch delta 2387 zcmc(gT}TvB7>2*|?Mw}4*KxFEk;Ih^y%`@P>h zIosc?)KncVKUq_~`>s-c9oTrq<_ykYggqmWM=r4mkR(Y`$CNsV$zL%h1L&w@CsR5h zmo|}HYAO<2E0Mmm9=R_KpcZS>DPK^(LcwiS|_O(mH+0m_(kB}b5$63pk7 zea61j2rj%VKKtX3Jt>B8SfmJ$GY}9cD&+H?3W1`Oej%j-MF%b1(7_a&Vp@AjrZtg5 z(*%lx>=;BR1>(vn;x8o&<3d8j$Rq6zGv=jlWM1OU&}kRy0!Fs)7s>YV7~NVsb~`Xy zl_eOhiW6fsX2jnrJ*FEX#4x!J!-5w9`5^=ZF9zs-G9WNV6=9->i;$&C&Omx}r> zIUzEYRe15y=L%7Ttx$w~EDGhLP$)pm(Kj$BKs2aXq(Oi%O7~H^SWqqy{}+q+gyss- zf>qEWK!oHn2ni6H_cdrP48P;IkFOi#?g(5f#`9vZ16}lo9Tf7q}>;lwiKj zDSM4Ysj;+0#eZj67}d%rNYErc^O&9X0iJ-{nDAf4E(_zYRL?M?{_RXLJM9lTU|^)# zS5(wHFyZ4B<6wU}Ppu#%-B!KGqII%Gg_sTgJD^j_gJ(4@9N$m>#05?@a2f_y4$ sh&88T=MGnhAw1@Q=#h#Y5M%U~1LCrJW9<-pkWD9eW!X#=?`re>17tIwHUIzs delta 1476 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 diff --git a/phsource/vwl_en/aU@ b/phsource/vwl_en/aU@ index 9c5116d34812925e025f4bd2f4f43c6dfcf5e4ee..b65fa935f7b3d948be9e14c33f1cde2153566036 100644 GIT binary patch literal 9665 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 delta 2899 zcma);Z%kEn9LAq}F6aU8y&zf$T&@rV7nJT*6z)xutDr+=mSM?Kv&;#)W-BYOHF6BG?Y!-CfS} zdA`s0`#Wc3!=VPX?XfjYo7>iGI<7Xx4-CQ;^CaAhGr*sOJ65<;8B+9mG!q5CDIXd2 zzU<`OJSESl-}NHritCC?|4uLm9;M8tnZZlVbqK82$o?fR-h42;&q(H z5%g$&SO4CLREqcVD@nJ0&pW(cRLuLI%LEGDenYn*8?f%b&1=;YsWG2b10_XH-5qf1 zV3}EKN0qbj>lATi)EI_)D0W);)DY;SSg$bLN3mw5+4y|S76ZC-oSW{xN6aIjbuqnu zfOaFOqvfSEd?l81FLeg)5z~a&3lzJcm~(SC%jwY_k5dn(6+@#V#`$KH z`pjvYvM=x~g0~ zyzxK9I+axzbw0{bfl8F23axkruc8aB+T@&(xM~>o7zF!yJt+t#In4(JK~gfDkPM%a z3|HPWI1Yhn*pDE!Ye*5s4upc`R*LuApoial$8M*~SKN-3N!v_+>u4x!TGcai0 zoXb-T|H(mGFU0mxtW${fN@8`>h}F*^R?K!+(`+S{)9?=L#C9CT5p6j4OBx`2Q%c^5VNw-yZ2h6DT`vgVoT4Ub# z@xS?jUx^tzli<}S#AeZOgAjXGGOS952c(3z%wV{Jr&AbF#AtUr)?+h{;V{-{x8{8v zAD0-OCqv3*8ot361O&szX&63}81~J;P>hE-V?nAbfFXLwBGy9#lMvpTF7uq zFnpuOAQ+<4Fr1Yb4yI+8u+NbK>Q^!J7BYmemM8WeJdLmx&L2`<8qj{vFNlvKIqNHB zBO%aOsvP!RF;N-^+{rvqqdd#WS@o2tR?cI-(M+rED=PWV{O57$0$jOTq6E=EoL%U^ z67BMWAIPAOg&9MgP9o}SY=_0LP-@2lX)L~z+R>l39nMKtz#ytok5$}(5SE~cfyA*^ zd#muLDGaS-C>0C=j;6&>C@} z_~w*8yheiE27y|8Od{~v1ZwRDn*jLLCOFh|EiFNf{nROhvM19w)_{q7S1sMGaJ&0@x-|jN25z-Lw?WMC9`^RKa-+b2VDnjSzE*Xx*i^ zr}W_r2|g4AZa#gjc~ESEt%Lg{f}0Y7*Ka;_IMr#BD5h!!dr?c})zlC1O>!w#X)DW& zEM{L-^g{|5Q81@nyaB{A^|w@WUvje|;tbw8*dy)cZC_%RwVNgWu<__M8UB4X2gp#) TE>v?eBP5COZxyOfJUH?XqX;mG diff --git a/phsource/vwl_en_rp/aU@ b/phsource/vwl_en_rp/aU@ index 309f413a6807f9c2652176eb8cf9b971e74f16b9..e863d7bc892b8ee9286387b35cce87ae40fbb151 100644 GIT binary patch literal 9665 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 D`S~>Z delta 2942 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 CCz9U) delta 412 zcmaFP`IMa_IKb68B-k}@B8Pqb_y1EE7}y$^IG7lKpn;J=pop=C5yV#DU=Vr0_yEkd z;Ytv)XPO6Aqs5yb2oeAO--us=8>S{fvV#T2u8>n>g0VG}A#4wZ1coSvUWO)yV1^6^ zPaqCqNSiFfxW4{^J^5~6U?9Z}<_sPTfed*J9YEV{8Nz|Q2nPSj3z!bq>v7P_4VnyI a3^oiF4DJk>47m)(z>siaaF}etvK|0ij8bp_ diff --git a/phsource/w/_w b/phsource/w/_w index b8e38e69aa897de412f5b46a10322948680240eb..863e2a133f75de18c883f89356c5e3c217b1496a 100644 GIT binary patch literal 1264 zcmdT@yGjE=6g~TzePm;lV3la02x)ABU<$zj(ZWV0B4`r}3;#e%KfsR={EY}HEG*L7 zSnMaHu+qkJXC}L`k#xZw&dix}?;UoybNZ);2j~5>t`A^v7vP5L?5CsGYrEIMn+sIh z1wtH^=^7&x-UOFa1VGb6-u5TBA{PK-5Am&6c#q@)pqC;nsDvIM0NVM3|6BQJXlBgj zj9M_tCo2TN{W>u8hkm7WHfNQtB$=->CFR<}E>5t`c?-*EVihaMP(y;8$cTV9jU0=) zE+M9xaBXlWJmOG9h?M()TquR7gBFL#jjxoT|v=Y@f4LL+pP&zh~yp zt3K#p;_gyu(wjkfLp@(_)M9$GQ~u{a@6C7Bo0q5ZQjX|os);))r_IxwVqw1dt2b-t z;h4VJ!v|Q$w9v##r6N6}5yfRXip`Y9(8IW1SO{TbGCj dti!Cc#5pmu6#X&HO^hbKvAGdrQX^+1#1D|cc9Z}B literal 1006 zcmd^-txf|$6ot?J&HhtJgK9xQNHAzBny?8e0t2L^391MLZvaogbCB>FB|#t%cno3% z4}b>4xpQaPHFY?4GI!3LduKAa`%O_i1(CLoxJKzj}zTz1ow+C`DL1JuL40M!)xFbhYMbkp1f0O<>_KZaw_J!f|zc?wa1<4h{JG(NVyNF<%Go8`jNZCxSi(Y zgyds8`z(TzzD}=af~hg`N9%dlBtx+a0+cXqf(c$CPzsxW3IG$Loeaq7j9+9 nS*aElmB!F3e%qm0Xn%cyA!lKqj%n7B!YQp&g`dwXR diff --git a/phsource/w/iw_ b/phsource/w/iw_ index 0cc3e2a00f07447137f13f89c36ff3fc1f731cc5..3920f3abe919ed69f32f94f43481edae7222b6e2 100644 GIT binary patch literal 1271 zcmdUuJxc>Y5Qg8oy{{w}qli_E1iuJ^AT~)6@IY;Bj6@_#z?9nADOM>g{Sn$(ScnK# zf`z}qI)#NlKnpwH*}XHlXlEhrGP|?y%-qL3Y_qYxy4~DbRsar<_Z1p+21n#Rb<8<( z?&3gS+rcc_v3h#{jIO_+*6dv>V!(}s!hzMZ_UMZNmkODdJ!zlQ7Xw~{uG3?VV*z47 zE9`n{<#r?*%IOp%B{^@b5Ccx8V5gPJ%=~~-lO#PViSxA=QN<<}xz1q}nqdCa%tmsRHtiIOW_!(Y&GBK%;xUZ*FiK1fFqbJX{ zxf<2M%E$XlNq>3dK3tezh#b>Ppsxu5({stW2E4K=t3I0}3;8sgGlgu=8f5brV5sj` zA#~ppT1!E_kXC?Bu{+RrdHZkJlu*M4+0-%3PK26Bo;}Xc^Jvoj99Kgj!<-!Q)Uu4_ zb=;%IAE6?9plc;t*cdua+;^dnP&D*}j?XNQ43gYHYr@9lx{L`mVHePTA|zcfBTcA( d-$=+$6Y5w9(}dc*J%2-}ntVRK-=64-vZ*DMSPt z1q+|SI)#NVU}5LEGrOA8r$-Z^vboniQP8ui-NL8G>>0GwT(DAXy2zu0+in{{kI zC53@^hy}FhUO#`J>#eBmoU}YxcJb8eTcYn3f@W?;`(OTx-B0{x)Nxb&IChcw?b41) z{j1rfT&kDnjV@swdst;g7~g$abn!$-sj845O>M0uRY;L-It7r7GcaJUQ`0oRIJ zc1ZTL?<8lq$;#AZhtxeiWS2N9aa}4oJI8EX8=F7hpJjo7*m><}f!Mw?V#qt9bFAGS zrrnCF$lt)Zg+fa4Rw3+LhT@x#j8->7LTk;h7AqOKcBz|@8%42<4eXL)6?43Eq}dfn zBcO5_!YR*ecm?dqqd+fYt)S~JJzj*4%)Z_$-9piDv=c(YE9GrC3rCM#E@`E`zV?Ko q>2+8WzCzh&jAE&g=``RgEX^D40ba_oZ6Qiow)i6d#`5N$vHS&TVqZ`I diff --git a/phsource/w/w b/phsource/w/w index 6642ed6b663f6a0772dcaca881b0c8214d4f70fa..65cbe6e4f7fccdf307e2f43b274742d9efb3b5a7 100644 GIT binary patch literal 851 zcmb7>y-EW?6ot?1|0Wxw1gj(#5g~H{jajPPEJ6F&u>4+tkt_v#)(OKf}v+CMO+|_w|r2aqQgnsN`&mvvD2le}8>+ z^`FP?^FwikT$G*=C~1xW{az)T9@(VovBKs}A2T-;Q&k80O`wl-y1w_pOX$d&HLXLr957QndkX{XC2wR%LoWY+#7f7ly z2rvjUh%yK=a7~tCJed)~fY7PLxPs>a;}(!chMSBGoF5o;FkIlm69ILB0Y?hI0o*kW N(i8ByVDdtyO#o{&Hs=5U diff --git a/phsource/w/w@ b/phsource/w/w@ index 4bc3f08cbcd22192791052b3e1a5a00cbe78c499..1fd9a6eb7542e1b4435aa8e047fa7cc46b718213 100644 GIT binary patch literal 1240 zcmb7@&ubGw6vw}_$tJt`u}PD*+9uZ8Dg+yq+LjiI?W)x(il(O2D2QT3J&T~nJ^16| zAK*bmPYOkB{k^r|pWN2JI?XHC(R%AHfmUH= zo96e13n$vm=A&}*b+r^?^CDs!HSL!Q*nBgbU2MK2!F|FcHY}%?4I}o#X0~;DpqEVv zS8*Rd@c=WJ$8FrjF^r>tBJ$)QluX(nMlnGagRFcWLpY4%ILcLt%wiY^$h8lLd{)Au zSzBS0^hqYD2o0&Q;rns=Vo{pOm^N$S68Gr{^(+?uy`7%&&u{Bn?>ZN0Ie}KC(&n+* z*oJF%^O(>uP-7*7x02JH{hlg^csw(lWOwz8Dc1@sn~e<%iLe5=1$U2cWv+9LULIv! zLIscT9%DCj)7qh(;l#14P^*hj=_#0mLZVA zgh7cxoI!*^ltGArpMiI>EaU3>y`Q&%tYL6qz0?3^Fa$8LFr)yPSN|Vin8gBf-)6=c z!h0B9!0u>cF5`$`dIM%(;Xt_Q3^x-{J;Y7R_>kRa02GCYqq&b2?AXbRm@d?>|9^qu z3@6M!Z6+(x2%xV(ZW3Z$BJqGx2h48an8FP+ONQqLAB4UB|1v&1E|~ZM=}UOSLx;f| a=*uF8#SAkT+!=xx!WldnA||`DOauT;X<(QD diff --git a/phsource/w/w_ b/phsource/w/w_ index 000a5e9044040bf5a502d344d5eb86165ba54514..b18964a6f9400a49bf4a1e8b9fcbb1f1f599e662 100644 GIT binary patch literal 1270 zcmdUuJxc>Y5Qg8oy{{yfL=meP34Rd-L2QyD;DOrM7*QmOU^@Tmq|i`R|EX{iUq`JaX^P%@HE?6rZK12?5h{30(nRMO9Rf&7p;Sn$4*~wrlmXc?dAj z_sbBv?+LB>pixXKK)clG>$`mYH*CtNW0h3)v0p^#xt4tZ)> z#_~GuQR6|V$QtNc$rd(-juZD?C?pgOJ)z?>%Ois%H_)1}F}W^dLQU8Ow4Vq`7tBZ# f>fJXI^3#Oc7Q!^4U4_iw5UM4=kMFnV{}K8GYruEV literal 1012 zcmds#ze)o^5XQgD-tFyO?h-`=Au7Rth#=T$5%53*Vq+vCQ3S8Bu&}TY6e|lKBz7rM zhzK?c78X8%bqWh#z{1X%-P=owG`8L{v)_C(yDUGh*{E;qHS4pO84wF;Bk|5DFxFY{YbTUz~4y2$;s zvL&p4HN8-p$P0Qw#x#_tMq^iFh|+z&jx4 zP`h1B$f~FcF3ugqmg22I*mDfUSB0EbCqhPRMb*mHoLpMzVVVB4xuXpqV0K@S?-i9-C^l3^GEjz2U s#}v)1M?L1tloiD=mKvE(eZI`n{KH+qw=7c!k!5)#5d4kh%|B!L3kFzUm;e9( diff --git a/phsource/w/wa b/phsource/w/wa index 2a76b6832c784a0335c0eb3f387d0bddd6b64c51..5c553bf616099f91f11ddd7a9161478315393409 100644 GIT binary patch literal 1232 zcmb`H&1(};6vfY*$)uCXG?UOYwUdyxrb^IgwIWprI8}>MD72|9YDF#h(UsszcV^*E zH+7{h#idYC7cRQU&Ye_nDLQ|I8&QbozI@EIF5Ebm``*cU_rc8lakIQQcka^i(zF5K z!McfC+~ZGReeV7Y%$=UBBxr3J13<`Kh>V-??oI# z11~Vm{SXeIh*6ASAG3gA4C%;o?PL~d3?jqKGCb}n*sze~>S;g2ic~j5J3JX+g{`$k zEvMqj9nmIJYUCuzlo~m=xypX#=a;W{^!o1Ah~l#4OI^ zCF2Oz(ZnVeFv%#v*EvEqKIx3on?)J>F+p_@Q>c-iPf{M!=Si6yebyD|2rE}}b9G+_ zxytVpxg@pYPzwd=x_B;mdR(Q-fx%OUuGEmpug$e@`Wx8){Y+7&P9#vLFmzWI+#YPf*YxQP{h z&3)XZdW##3vy2(WVa`sK94gE?Ry^Xrz$$Lz3Drfc@$>{vAt2WU*48nGqwMM!yE)9R k=D26rXPJgHcbNp44d5)bUIKb68B-k}@B8Lj|`TI5#^(E^MFdSfcz^KE>00f&EYec*ly};}kW(M{Q z#tbm~561-N2aFHE>>b=cm|$!hek(XzLFNQd1w>7S90S81raep`Gc}YUY-t7qh9HKS z3`Rg&i$Rq^nn995oIzr;EaUEa{eTM$hd5xaIL^3D>;cr~7G?&)2&N@qn*})M0M)=; zafJ=SHsrA3F9G@hBCa5l0Cy2KSEw*JGPp3z0zzGeM1}^2i449BDwEeT?ax~OUw|=> z`vD^lGsxBVnc@U_fPMzC|1(dLf|)PEHA5K2-od>{1j1hbUzwkc2PXbNdJSGTOx9sp F0suOjS%Clm diff --git a/phsource/w/we b/phsource/w/we index 3d758b91c760a1dd439bb4c8277a4d3c4883624e..884e550430d6a358d0524fc3a81189ec8844bc9a 100644 GIT binary patch literal 1244 zcma)+%}*0i6vfX>J73Ining}InnnR@)vBZ_AdoOY2nq>M+L$QOn4pOv?lmq<_qtJc zMt6jTanFWD6L+ro2TW$c+7%l=7M}YCI~`c)yxjNhJ9F=3-u=y;=E~g7R&6wnU`eeh|0%JbkMixW75)5z1yGNz0QcMgikaW3E_2B;UA>%msTVzv#J zX3$JViQ*_`~y@0yp@Ta!U2di?~K1Ff0hvWJc> zwTih^bm0>AaLF6U@9Mo=I(FbnOw47(YdcA0%MYxi(k?~cKuqCZT*jhfa6ZbVf?1Ar zyu?S$k;^*nU;}UQ2@9COIL_e$2@KO)#w}c;cb5AaMli#?8b)!E;~H)-ZkTr@Hjm@1 zXohvQSbZVvl39kc!@bNxMX0-sFzKggmQu5f9w6USTs=mZ>KW6&-mHC7r-(bFdnm+O zi(=egdl*#pjj1f@-}6$$`y_JGg-9_i0cp%)lG+0Q15+Gz5*Vd2L9M~vB+j$f zYV5WWd#H#Zc21dJeSviP*#R!=YbplO_b)vZ5s_{XdLCn3uENb$yDT$>p7d9m*#`aq DbZ(Vd delta 417 zcmcb^d5fJRIKb68B-k}@B8Odl)%Fwy5vB)>4;UGMU>2i~@B>C2Fq?;&fqe<%5->Y~ z^8hnU%>!-*78rXO9|K&xLHZrg6o@$$atsW6nD#J%%+yeZur(Om8Dbd@GZ-@{F&Hrf zF_<%mF$heSW?WUzVF*&k;J|w70GPoL%)r8s0%TTgf5PyB17@fi6UcE83q)8ML@qEv z9Cv`jgBvDpz|+79V=v=#V~4RDq^;ndM0Xqu$fc9#G2N(t!k`2<$&cxs2u$}+)&S`X zOc~&y_`~sq7bf1o6T|~!JMqndyR<=i4NluYmgzHiGdMA10sYy-5XfM|;K$$z44jb3 H-YgRV73o^3 diff --git a/phsource/w/wi b/phsource/w/wi index 7ccf9c968e3e40d4f91d17c684307e591b24df07..40817f2ff2d6bf32c85ae1277c835d779b82845d 100644 GIT binary patch literal 1220 zcmb7@J8u&~6ot>OcfIjz9Y14YW1Bn_C%hye3Z#gK1R8{r5F&z?A?zso7yJ0ZfIUyBrIU z01DAz<{sTcNdGF`q&JtbjCH)mY0PodFpmO~ zj67ouieGxl>TbX z4Oz1q8S&ZNkRM(nDT-n7D5SE3EWSlmZcy3w8~&j3|12){UgIc>v$%!#c!EW`QKa`} ze)C0oTH?1hO_wj@KI+(Je8daf#Wj-J_%Wz3q=1Q*045F6r$ zDLm`o>}7lOgwj0#$6N9icbj1vajQS9`FvY}j}FASIsLKiU) z=?epf49F~10fYgC*iK~AL{MaTF{J_m0{OuVVZdq;Xa<@A52=)UkqHqbpNi{r=Mtu| zhzB@`Dn|_yC?G|%X#E)Aya#z{1q>oWEXUOV${1lp7D+^5G9!;ZBoL<`<MyiYmF*Yvq6I?~OV{kvrcZ@4xQ$Js|Bl4d;25fcRIfaMSF!Z05 zf5*z!vqsZlrR|Vmt53SDxY)dpl{38T9iLX}3Nm%2-lLV5svYi7J-u34(?pi1gXgie zkRN$t+B@{rvTUgyPZ@vG%5mrKf!$g;g==_>HWo03qZp+Erm;jNRB8LD3X3C4{{(x( z7}Zin3B!y#h8ccsl)EE1g#A=c9vP~|dw|_s9L7aF#Z64I8b#K=#7j*1T6$bK_Uc9 zp%c0UZ>P{ry3>#*BQ5D(jy!~llWm;i~ueaN;Hq=&}_3xBbzG+lgybkRx**t(PgDi zOsafVl+D^BQs!QjV}<5&SG@Q0#ifqvRXbnS(x$aNOao-t62F(}w*i!jYHTP(n`$$s z#s>>Qhe)Ode9fvn(>mC8ipU^@RYZo3ZG&Xo|4WU9gYJPp)i{G|c#3z_V;QG#1hY8G zu}(e8{D&^bkQ~*BwXuL{bZ8N#=%SF!sUp5%S6EGXERpMgR$*31OgNU4j`RE}o+chs z{T3R;PSDc*8g~-(e!Y41)^ttA$K8*D3|k_Usqh**Zc&9#>V31L@^9j!^&~33iMsze zC^D>rA~Np|!iRP-XS(^!DE0p;ERNd$iwa#_#XWpQ56`iPlf3n!Lc@4MJ`ySr^A#kR z$4&Be0avI|i|dd(!eY(bWZ~JPCXwM=7_Cr2x#u49%f#ij`#foe-Y{qSWPFCo&T%}= Nj9I?AWBf)PzX3PpfieI9 delta 395 zcmdnMxsIJ9IKb68B-k}@B8MuI#N>(klJx})F3b-Ybr>0dAcT>DUxq0I%r<0VVEe!T zVZY&I0IGQa7I)x=vH$;%=34|5g@`YZu7R^F=+VH+|8Gqf}4+bHgcC7(1Fz zgbBu8AbknW#^we+249A1hWS8O_%moSh%+cLNCHWb$*Y+*W=vo>!~t`|4#s6NI*bs% pZ)K_yfQ5qy*Dh|DT@KtZwi!n>UkM9LTtTJ|?lx?0m@LII4FE^MPjLVM diff --git a/phsource/w/wu b/phsource/w/wu index 82576ddeab96f47eb81c3f634758920f95c9af59..fc6d3843e61ad83a8c1c217a47b3616284ecb70e 100644 GIT binary patch literal 1228 zcma)*J8#oa6vzM9k0g$r7j2+4r8Go{q9)-{^&v6D6jdGjNQcsai6KZ85)z1t$pZre zkur4P19ad+WXK1o#MIpqJLScH7$z4FGT7 zn0U@Pe);yv+%Wd7_oIbKYr~4|2r#fhRaZ}$CkE^)zZ9yD+NUoD92h~WL**lVF<{Ms z8LCiO3J?R1-HXcWyl*6PdKGX_sJ?TD7;rcX^o_m|Df6|svLs3Rnm>2O^DS)P054ES z9=FlLJydZWQ?wEa)JiDwF3_&Q!4>4Fd7LLP&72IQBCSlthKnqf3{tc-v(tK(F~e1p zahg?=(WW9FS2-H@L%D@b=mhmG-<#)#Ct~iw$Z*W2B=6&*x=LD5NbBY-Ji^|HF!DT89?zxA(1NgPckktE63a62{!%$=njW6 delta 395 zcmX@Zd5WDQIKb68B-k}@B8NkL1H)yO2aGz53_uXV=q>nwF$2ubVQOH@fU=!98JHh1 zJ^+g^;YP4a_==fe;uECpfGQwrD&!a#_Au>X0-33y3}GuVxHIH1WHRV5@G+<|*fZ!e zC^ASgNKBSxTv|WXz80jE!GZNEm}X$`XJBDS0kW_DpTNMt3UgltW07zJV*uD42bjCK zSeSl**?&0dfNCIi%kX@FvwQhUfPRCBH%Pa^-HPTuRVuGufy=M!Av9_P5h1Re#$qr`|&z!3pMjJYd&s-CBkJg`>Ax})ZiQBjs>6y1(m zMyIl4!f5AZdRyp$q>%q5gz^ E00&u6!Tb;@5F8)&ahz?@MnX_PlLDlqOA!f6$W5vsD4@?DLdg^Igp__jO7jCgkj_tV zohq|;#*R``ajV;%otZtIcJrFAwwrvd036;G-dO*hEINJqKI_$u&~bY*eqxKepkjz+ z8Wc$td^z`b09#}3c-TT+JXO4Fu^m3N_&EA#-#JWxQkC*G+|N87;|VWV;2BdGBn*QT z14aVPYtcu{EY*-T>{4P&Ep@skXAqK+DxQIJYjPo-QZ*wY?lTJ##UtTFSIpjPoKK_I fI3j8?BX1bq<Fo^#x5VtZSV3IS3yAA diff --git a/platforms/windows/windows_cmd/src/speech.h b/platforms/windows/windows_cmd/src/speech.h index d7c5c986..861e7d52 100755 --- a/platforms/windows/windows_cmd/src/speech.h +++ b/platforms/windows/windows_cmd/src/speech.h @@ -32,7 +32,7 @@ #define USE_PORTAUDIO #define NO_VARIADIC_MACROS #define ESPEAK_API -//#define INCLUDE_KLATT +#define INCLUDE_KLATT // will look for espeak_data directory here, and also in user's home directory #define PATH_ESPEAK_DATA "/usr/share/espeak-data" diff --git a/platforms/windows/windows_dll/src/speech.h b/platforms/windows/windows_dll/src/speech.h index dac2e351..5d6127cb 100755 --- a/platforms/windows/windows_dll/src/speech.h +++ b/platforms/windows/windows_dll/src/speech.h @@ -33,6 +33,7 @@ #define NO_VARIADIC_MACROS #define ESPEAK_API __declspec(dllexport) #define LIBRARY +#define INCLUDE_KLATT // will look for espeak_data directory here, and also in user's home directory #define PATH_ESPEAK_DATA "/usr/share/espeak-data" diff --git a/platforms/windows/windows_sapi/src/speech.h b/platforms/windows/windows_sapi/src/speech.h index ec90b165..f1fcd0b7 100755 --- a/platforms/windows/windows_sapi/src/speech.h +++ b/platforms/windows/windows_sapi/src/speech.h @@ -36,7 +36,7 @@ //#define __cdecl // define as null, needed for Borland compiler ? //#define USE_PORTAUDIO //#define USE_NANOSLEEP -//#define INCLUDE_KLATT +#define INCLUDE_KLATT // will look for espeak_data directory here, and also in user's home directory #define PATH_ESPEAK_DATA "/usr/share/espeak-data" diff --git a/src/compiledata.cpp b/src/compiledata.cpp index 22e23f4d..fe513b43 100755 --- a/src/compiledata.cpp +++ b/src/compiledata.cpp @@ -1,5 +1,5 @@ /*************************************************************************** - * Copyright (C) 2005 to 2007 by Jonathan Duddington * + * Copyright (C) 2005 to 2009 by Jonathan Duddington * * email: jonsd@users.sourceforge.net * * * * This program is free software; you can redistribute it and/or modify * @@ -40,56 +40,529 @@ #include #endif - - -#define tNUMBER 1 -#define tSTRING 2 -#define tPHONEMEMNEM 3 -#define tKEYWORD 4 -#define tSIGNEDNUMBER 5 - -#define tPHONEMESTART 1 -#define tEND 2 -#define tSPECT 3 -#define tWAVE 4 -#define tSTARTTYPE 5 -#define tENDTYPE 6 -#define tBEFORE 7 -#define tAFTER 8 -#define tTONESPEC 9 -#define tLENGTHMOD 11 -#define tLENGTH 12 -#define tLONGLENGTH 13 -#define tOLDNAME 14 -#define tREDUCETO 15 -#define tFIXEDCODE 16 - -#define tBEFOREVOWEL 17 -#define tBEFOREVOWELPAUSE 18 -#define tBEFORENOTVOWEL 19 -#define tBEFORENOTVOWEL2 20 -#define tSWITCHVOICING 21 -#define tBEFORE_R 22 - -#define tLINKOUT 23 -#define tVOWELIN 24 -#define tVOWELOUT 25 -#define tAPPENDPH 26 // always insert another phoneme (linkout) after this one -#define tIMPORTPH 27 -#define tBEFOREPAUSE 28 - -#define tPHONEMENUMBER 29 -#define tPHONEMETABLE 30 -#define tINCLUDE 31 -#define tSTRESSTYPE 32 - - -static const int flags_alternative[] = {phBEFOREVOWEL,phBEFOREVOWELPAUSE,phBEFORENOTVOWEL,phBEFORENOTVOWEL2,phSWITCHVOICING,phBEFORE_R}; - -extern void MakeVowelLists(void); extern void FindPhonemesUsed(void); -extern void DrawEnvelopes(); -extern int LoadEnvelope2(FILE *f, const char *fname); +char path_source[sizeof(path_home)+20]; + + +typedef struct { // total 48 bytes + short frflags; + unsigned char length; + unsigned char rms; + short ffreq[4]; // f0,1,2,3 + unsigned char ffreq2[6]; // nasal(*2) f4,5,6,7,8(*20) + unsigned char fheight[9]; // f0-8 + unsigned char fwidth[6]; // width/4 f0-5 + unsigned char fright[4]; // width/4 f0-3 + unsigned char bw[6]; // nasal, f1,2,3,4,5 (*2) + unsigned char klattp[5]; // amp, tilt, kopen, asp, +} frame_t3; + + +typedef struct { + const char *mnem; + int type; + int data; +} keywtab_t; + +#define k_AND 1 +#define k_OR 2 +#define k_THEN 3 + +#define kTHISSTRESS 0x800 + +// keyword types +enum { + tPHONEME_TYPE = 1, + tPHONEME_FLAG, + tTRANSITION, + tPLACE, + tSTATEMENT, + tINSTRN1, + tWHICH_PHONEME, + tTEST, +}; + +static keywtab_t k_conditions[] = { + {"AND", 0, k_AND}, + {"OR", 0, k_OR}, + {"THEN", 0, k_THEN}, + {"prevPh", tWHICH_PHONEME, 0x000}, + {"thisPh", tWHICH_PHONEME, 0x100}, + {"nextPh", tWHICH_PHONEME, 0x200}, + {"next2Ph", tWHICH_PHONEME, 0x300}, + {"nextPhW", tWHICH_PHONEME, 0x400}, + {"prevPhW", tWHICH_PHONEME, 0x500}, + {"nextVowel",tWHICH_PHONEME, 0x600}, + +// {"numVowels", tTEST, 0x000}, +// {"afterStress", tTEST, 0x000}, + + {"PreVoicing", tTEST, 0xf01}, + {"KlattSynth", tTEST, 0xf02}, + {NULL, 0, 0} +}; + +static keywtab_t k_properties[] = { + {"isPause", 0, phPAUSE}, + {"isVowel", 0, phVOWEL}, + {"isNasal", 0, phNASAL}, + {"isLiquid", 0, phLIQUID}, + {"isVFricative", 0, phVFRICATIVE}, + + {"isPalatal", 0, i_isPalatal}, + {"isRhotic", 0, i_isRhotic}, + + {"isDiminished", 0, i_isDiminished}, + {"isUnstressed", 0, i_isUnstressed}, + {"isNotStressed",0, i_isNotStressed}, + {"isStressed", 0, i_isStressed}, + {"isMaxStress", 0, i_isMaxStress}, + + {"isBreak", 0, i_isBreak}, + {"isPause2", 0, i_isBreak}, // synonym for isBreak + {"isWordStart", 0, i_isWordStart}, + {"notWordStart", 0, i_notWordStart}, + {"isWordEnd", 0, i_isWordEnd}, + {"isAfterStress",0, i_isAfterStress}, + {"isNotVowel", 0, i_isNotVowel}, + {"isFinalVowel", 0, i_isFinalVowel}, + + {NULL, 0, 0} +}; + +enum { + kPHONEMESTART = 1, + kPROCEDURE, + kENDPHONEME, + kENDPROCEDURE, + kPHONEMENUMBER, + kPHONEMETABLE, + kINCLUDE, + kIMPORT_PH, + + kSTARTTYPE, + kENDTYPE, + kSTRESSTYPE, + kVOICINGSWITCH, + + kIF, + kELSE, + kELIF, + kENDIF, + kCALLPH, + + kSWITCH_PREVVOWEL, + kSWITCH_NEXTVOWEL, + kENDSWITCH, + + kFMT, + kWAV, + kVOWELSTART, + kVOWELENDING, + kANDWAV, + + kVOWELIN, + kVOWELOUT, + kTONESPEC, + + kRETURN, + kCONTINUE, +}; + + +static keywtab_t keywords[] = { + {"vowel", tPHONEME_TYPE, phVOWEL}, + {"liquid", tPHONEME_TYPE, phLIQUID}, + {"pause", tPHONEME_TYPE, phPAUSE}, + {"stress", tPHONEME_TYPE, phSTRESS}, + {"virtual", tPHONEME_TYPE, phVIRTUAL}, + + {"fricative", tPHONEME_TYPE, phFRICATIVE}, + {"vstop", tPHONEME_TYPE, phVSTOP}, + {"vfricative",tPHONEME_TYPE, phVFRICATIVE}, + {"delete_phoneme", tPHONEME_TYPE, phDELETED}, + + // type of consonant + {"stop", tPHONEME_TYPE, phSTOP}, + {"frc", tPHONEME_TYPE, phFRICATIVE}, + {"nasal", tPHONEME_TYPE, phNASAL}, + {"flp", tPHONEME_TYPE, phVSTOP}, + {"afr", tPHONEME_TYPE, phSTOP}, // treat as stop + {"apr", tPHONEME_TYPE, phFRICATIVE}, // [h] voiceless approximant + + + // keywords + {"phonemenumber",tSTATEMENT, kPHONEMENUMBER}, + {"phonemetable",tSTATEMENT, kPHONEMETABLE}, + {"include", tSTATEMENT, kINCLUDE}, + + {"phoneme", tSTATEMENT, kPHONEMESTART}, + {"procedure", tSTATEMENT, kPROCEDURE}, + {"endphoneme", tSTATEMENT, kENDPHONEME}, + {"endprocedure", tSTATEMENT, kENDPROCEDURE}, + {"import_phoneme", tSTATEMENT, kIMPORT_PH}, + {"stress_type",tSTATEMENT, kSTRESSTYPE}, + {"starttype", tSTATEMENT, kSTARTTYPE}, + {"endtype", tSTATEMENT, kENDTYPE}, + {"voicingswitch", tSTATEMENT, kVOICINGSWITCH}, + + + {"IF", tSTATEMENT, kIF}, + {"ELSE", tSTATEMENT, kELSE}, + {"ELIF", tSTATEMENT, kELIF}, + {"ELSEIF", tSTATEMENT, kELIF}, // same as ELIF + {"ENDIF", tSTATEMENT, kENDIF}, + {"CALL", tSTATEMENT, kCALLPH}, + {"RETURN", tSTATEMENT, kRETURN}, + + {"PrevVowelEndings", tSTATEMENT, kSWITCH_PREVVOWEL}, + {"NextVowelStarts", tSTATEMENT, kSWITCH_NEXTVOWEL}, + {"EndSwitch", tSTATEMENT, kENDSWITCH}, + + {"Tone", tSTATEMENT, kTONESPEC}, + {"FMT", tSTATEMENT, kFMT}, + {"WAV", tSTATEMENT, kWAV}, + {"VowelStart", tSTATEMENT, kVOWELSTART}, + {"VowelEnding",tSTATEMENT, kVOWELENDING}, + {"addWav", tSTATEMENT, kANDWAV}, + + + {"Vowelin", tSTATEMENT, kVOWELIN}, + {"Vowelout", tSTATEMENT, kVOWELOUT}, + {"Continue", tSTATEMENT, kCONTINUE}, + + {"ChangePhoneme", tINSTRN1, i_CHANGE_PHONEME}, + {"ReplaceNextPhoneme", tINSTRN1, i_REPLACE_NEXT_PHONEME}, + {"InsertPhoneme", tINSTRN1, i_INSERT_PHONEME}, + {"AppendPhoneme", tINSTRN1, i_APPEND_PHONEME}, + {"IfNextVowelAppend", tINSTRN1, i_APPEND_IFNEXTVOWEL}, + {"ChangeIfDiminished", tINSTRN1, i_CHANGE_IF + 0}, + {"ChangeIfUnstressed", tINSTRN1, i_CHANGE_IF + 1}, + {"ChangeIfNotStressed", tINSTRN1, i_CHANGE_IF + 2}, + {"ChangeIfStressed", tINSTRN1, i_CHANGE_IF + 3}, + + {"PauseBefore",tINSTRN1, i_PAUSE_BEFORE}, + {"PauseAfter", tINSTRN1, i_PAUSE_AFTER}, + {"Length", tINSTRN1, i_SET_LENGTH}, + {"length", tINSTRN1, i_SET_LENGTH}, + {"LongLength", tINSTRN1, i_LONG_LENGTH}, + {"LengthAdd", tINSTRN1, i_ADD_LENGTH}, + {"Lengthmod", tINSTRN1, i_LENGTH_MOD}, + {"lengthmod", tINSTRN1, i_LENGTH_MOD}, + + // flags + {"wavef", tPHONEME_FLAG, phWAVE}, + {"unstressed", tPHONEME_FLAG, phUNSTRESSED}, + {"fortis", tPHONEME_FLAG, phFORTIS}, + {"sibilant", tPHONEME_FLAG, phSIBILANT}, + {"nolink", tPHONEME_FLAG, phNOLINK}, + {"trill", tPHONEME_FLAG, phTRILL}, + {"vowel2", tPHONEME_FLAG, phVOWEL2}, + {"palatal", tPHONEME_FLAG, phPALATAL}, + {"long", tPHONEME_FLAG, phLONG}, + {"brkafter", tPHONEME_FLAG, phBRKAFTER}, + {"rhotic", tPHONEME_FLAG, phRHOTIC}, + {"nonsyllabic",tPHONEME_FLAG, phNONSYLLABIC}, + {"lengthenstop",tPHONEME_FLAG, phLENGTHENSTOP}, + + // voiced / unvoiced + {"vcd", tPHONEME_FLAG, phVOICED}, + {"vls", tPHONEME_FLAG, phFORTIS}, + + // place of articulation + {"blb", tPLACE, 1}, + {"lbd", tPLACE, 2}, + {"dnt", tPLACE, 3}, + {"alv", tPLACE, 4}, + {"rfx", tPLACE, 5}, + {"pla", tPLACE, 6}, + {"pal", tPLACE, 7}, + {"vel", tPLACE, 8}, + {"lbv", tPLACE, 9}, + {"uvl", tPLACE, 10}, + {"phr", tPLACE, 11}, + {"glt", tPLACE, 12}, + + // vowel transition attributes + {"len=", tTRANSITION, 1}, + {"rms=", tTRANSITION, 2}, + {"f1=", tTRANSITION, 3}, + {"f2=", tTRANSITION, 4}, + {"f3=", tTRANSITION, 5}, + {"brk", tTRANSITION, 6}, + {"rate", tTRANSITION, 7}, + {"glstop", tTRANSITION, 8}, + {"lenadd", tTRANSITION, 9}, + {"f4", tTRANSITION, 10}, + {"paus", tTRANSITION, 11}, + {"colr=", tTRANSITION, 12}, + {"amp=", tTRANSITION, 13}, // set rms of 1st frame as fraction of rms of 2nd frame (1/30ths) + + {NULL, 0, -1} +}; + + +static keywtab_t *keyword_tabs[] = { +keywords, k_conditions, k_properties }; + + +static PHONEME_TAB *phoneme_out; + +static int n_phcodes_list[N_PHONEME_TABS]; +static PHONEME_TAB_LIST phoneme_tab_list2[N_PHONEME_TABS]; +static PHONEME_TAB *phoneme_tab2; + +#define N_PROCS 50 +int n_procs; +int proc_addr[N_PROCS]; +char proc_names[40][N_PROCS]; + +USHORT *prog_out; +USHORT prog_buf[2000]; + + +static const char *KeyToMnem(keywtab_t *ktab, int type, int value) +{//=============================================================== + while(ktab->mnem != NULL) + { + if(ktab->data == value) + { + if((type == -1) || (type == ktab->type)) + return(ktab->mnem); + } + ktab++; + } + return(NULL); +} + +static void DecompilePhoneme(FILE *f_out, PHONEME_TAB *ph, int compile_phoneme) +{//============================================================================ + USHORT *pc; + int instn; + int instn_category; + int address, address2; + int data1; + int type2; + int ix; + int any; + const char *name; + + static char *INV = "Invalid"; + + static const char *instn_category_string[16] = { + "", "", "IF", "IF OR", + "", "", "", "", + "", "", "", "FMT", + "WAV", "NextVowelStart", "PrevVowelEnd", "+wav" }; + + static const char *nextPh_string[6] = { + "prevPh", "thisPh", "nextPh", "next2Ph", "nextPhW", "**", + }; + + static const char *instn0_string[] = { + "invalid", "RETURN", "Continue", "DeleteNextPhoneme", + }; + + static const char *instn10_string[] = { + "", "VowelIn", "VowelOut", "Tone", "", + }; + + static const char *instn_jumps[] = { + "JMP", INV, INV, INV, + "JMP false", "SwitchNextVowelType", "SwitchPrevVowelType", INV}; + + static char instn1_paramtype[] = { + 0, 3, 3, 3, 3, 3, 3, 1, + 1, 1, 1, 1, 1, 0, 0, 0, + 3, 3, 3, 3, 3, 3, 3, 3, + 0, 0, 0, 0, 0, 0, 0, 0}; + +return; + + if(compile_phoneme) + { + fprintf(f_out,"\nPhoneme %s (%d)\n",WordToString(ph->mnemonic),ph->code); + } + else + { + fprintf(f_out,"\nProcedure %s\n",proc_names[n_procs]); + } + + pc = prog_buf; + while(pc < prog_out) + { + instn = *pc++; + instn_category = (instn >> 12) & 0xf; + data1 = instn & 0xff; + type2 = (instn >> 8) & 0xf; + fprintf(f_out, " %.3x: %.4x %s",pc-prog_buf,instn,instn_category_string[instn_category]); + + switch(instn_category) + { + case 0: + case 1: + type2 = instn >> 8; + + if(instn < 0x100) + { + if(data1 > 2) + data1 = 0; + fprintf(f_out,"%s",instn0_string[data1]); + } + else + { + fprintf(f_out,"%s(",KeyToMnem(keywords, tINSTRN1, type2)); + switch(instn1_paramtype[type2]) + { + case 0: + fprintf(f_out,"%.4x",instn); + break; + case 1: + fprintf(f_out,"%d",data1); + break; + case 3: + fprintf(f_out,"%s",WordToString(phoneme_tab2[data1].mnemonic)); + break; + } + fprintf(f_out,")"); + } + break; + + case 2: + case 3: + if(type2 < 12) + { + fprintf(f_out," %s(",nextPh_string[type2 % 6]); + if(type2 >= 6) + { + switch(data1 >> 5) + { + case 0: + name = KeyToMnem(keywords, tPHONEME_TYPE, (data1 & 0x1f)); + if(name != NULL) + fprintf(f_out,"is%s",name); + else + fprintf(f_out,"%d %d",(data1 >> 5),(data1 & 0x1f)); + break; + case 1: + fprintf(f_out,"%d %d",(data1 >> 5),(data1 & 0x1f)); + break; + case 2: + fprintf(f_out,"%d %d",(data1 >> 5),(data1 & 0x1f)); + break; + case 4: + name = KeyToMnem(k_properties, -1, 0x80+(data1 & 0x1f)); + if(name != NULL) + fprintf(f_out,"%s",name); + else + fprintf(f_out,"%d %d",(data1 >> 5),(data1 & 0x1f)); + break; + default: + fprintf(f_out,"%d %d",(data1 >> 5),(data1 & 0x1f)); + break; + } + } + else + { + fprintf(f_out,"%s",WordToString(phoneme_tab2[data1].mnemonic)); + } + } + else + if(type2 == 8) + { + // list of numbers + fprintf(f_out," StressLevel("); + any = 0; + for(ix=0; ix<8; ix++) + { + if(data1 & (1 << ix)) + { + if(any) + fputc(',',f_out); + any = 1; + fprintf(f_out,"%d",ix); + } + } + } + else + { + name = KeyToMnem(k_conditions, tTEST, instn & 0xfff); + fprintf(f_out,"%s(",name); + } + fprintf(f_out,")"); + break; + + case 6: + fprintf(f_out,"%s",instn_jumps[(instn >> 9) & 7]); + fprintf(f_out," %d",instn & 0x1ff); + break; + + case 9: + address = ((data1 & 0xf) << 4) + *pc++; + fprintf(f_out,"CALL %.5x",address); + break; + + case 10: + fprintf(f_out,"%s",instn10_string[type2]); + switch(type2) + { + case 1: + case 2: + address = (data1 << 16) + pc[0]; + address2 = (pc[1] << 16) + pc[2]; + pc += 3; + fprintf(f_out, " %.6x %.8x",address,address2); + break; + case 3: + address = ((instn & 0xf) << 16) + *pc++; + address2 = ((instn & 0xf0) << 12) + *pc++; + fprintf(f_out, " %.5x %.5x",address,address2); + break; + } + break; + + case 11: + case 12: + case 13: + case 14: + case 15: + address = ((instn & 0xf) << 16) + *pc++; + fprintf(f_out, " %d %.5x",(instn >> 4) & 0xff,address*4); + break; + } + fprintf(f_out,"\n"); + } +} + + + + + +static int n_phoneme_tabs; +static int n_phcodes; + +// outout files +static FILE *f_phdata; +static FILE *f_phindex; +static FILE *f_phtab; +static FILE *f_phcontents; +static FILE *f_errors = stderr; + + +static FILE *f_in; +static int f_in_linenum; +static int f_in_displ; + + +static int linenum; +static int count_references = 0; +static int duplicate_references = 0; +static int count_frames = 0; +static int error_count = 0; +static int then_count = 0; +static int after_if = 0; + +static char current_fname[80]; static int markers_used[8]; @@ -101,214 +574,423 @@ typedef struct { char string[1]; } REF_HASH_TAB; +static REF_HASH_TAB *ref_hash_tab[256]; + #define N_ENVELOPES 30 #define ENV_LEN 128 -int n_envelopes = 0; -char envelope_paths[N_ENVELOPES][80]; -unsigned char envelope_dat[N_ENVELOPES][ENV_LEN]; -static FILE *f_phdata; +static int n_envelopes = 0; +static char envelope_paths[N_ENVELOPES][80]; +static unsigned char envelope_dat[N_ENVELOPES][ENV_LEN]; - -class Compile -{//========== -public: - Compile(); - void CPhonemeTab(const char *path); - -private: - int CPhoneme(); - void StartPhonemeTable(const char *name); - void EndPhonemeTable(); - void CPhonemeFiles(); - int NextItem(int type); - void UngetItem(); - void Error(const char *msg); - void Error(const char *msg, const char *msg2); - void Summary(FILE *f); - void SummarySpect(FILE *f,unsigned int value); - void SummarySpectList(FILE *f,int ref,const char *label); - const char *PhonemeMnem(int phcode); - void WritePhonemeTable(); - void Report(); - - int LookupPhoneme(const char *string, int declare); - void ReservePhCode(const char *string, int value); - const char *GetKeyMnem(int value); - int LoadSpect(const char *path, int control); - int LoadWavefile(FILE *f, const char *fname); - int LoadEnvelope(FILE *f, const char *fname); - int LoadDataFile(const char *path, int control); - int AddSpect(int phcode, int *list, int control); - void AddSpectList(int *list, int control); - void AddEnvelope(int *list); - void VowelTransition(int which, unsigned int *trans); - void ImportPhoneme(void); - - - FILE *f_in; - FILE *f_phcontents; - FILE *f_errors; - FILE *f_phindex; - FILE *f_phtab; - int f_in_displ; - int f_in_linenum; - - PHONEME_TAB *ph; - - int linenum; - int item_type; - char current_fname[80]; - char item_string[256]; - char phoneme_tab_name[N_PHONEME_TAB_NAME]; - unsigned int vowel_in[2]; - unsigned int vowel_out[2]; - - int n_phcodes_list[N_PHONEME_TABS]; - PHONEME_TAB_LIST phoneme_tab_list2[N_PHONEME_TABS]; - PHONEME_TAB *phoneme_tab2; - int n_phoneme_tabs; - - - int n_phcodes; - - int count_references; - int duplicate_references; - int count_frames; - int error_count; - - REF_HASH_TAB *ref_hash_tab[256]; - - typedef struct { - FILE *file; - int linenum; - char fname[80]; - } STACK; - - #define N_STACK 12 - int stack_ix; - STACK stack[N_STACK]; - -}; - -char path_source[sizeof(path_home)+20]; - -Compile *compile; - typedef struct { - const char *mnem; - int data; -} keywtab_t; + FILE *file; + int linenum; + char fname[80]; +} STACK; -static keywtab_t keywords[] = { - {"vowel", 0x1000000+phVOWEL}, - {"liquid", 0x1000000+phLIQUID}, - {"pause", 0x1000000+phPAUSE}, - {"stress", 0x1000000+phSTRESS}, - {"virtual", 0x1000000+phVIRTUAL}, +#define N_STACK 12 +int stack_ix; +STACK stack[N_STACK]; - {"fricative", 0x1000000+phFRICATIVE}, - {"vstop", 0x1000000+phVSTOP}, - {"vfricative",0x1000000+phVFRICATIVE}, - {"delete_phoneme", 0x1000000+phDELETED}, - - // type of consonant - {"stop", 0x1000000+phSTOP}, - {"frc", 0x1000000+phFRICATIVE}, - {"nasal", 0x1000000+phNASAL}, - {"flp", 0x1000000+phVSTOP}, - {"afr", 0x1000000+phSTOP}, // treat as stop - {"apr", 0x1000000+phFRICATIVE}, // [h] voiceless approximant +#define N_IF_STACK 12 +int if_level; +typedef struct { + USHORT *p_then; + USHORT *p_else; + int returned; +} IF_STACK; +IF_STACK if_stack[N_IF_STACK]; - // keywords - {"phonemenumber", 29}, - {"phonemetable", 30}, - {"include", 31}, - - {"phoneme", 1}, - {"endphoneme", 2}, - {"formants", 3}, - {"wave", 4}, - {"starttype",5}, - {"endtype", 6}, - {"before", 7}, - {"after", 8}, - {"tone", 9}, - {"lengthmod",11}, - {"length", 12}, - {"longlength", 13}, - {"reduceto", 15}, - {"beforevowel", tBEFOREVOWEL}, - {"beforevowelpause", tBEFOREVOWELPAUSE}, - {"beforenotvowel",tBEFORENOTVOWEL}, - {"beforenotvowel2",tBEFORENOTVOWEL2}, - {"before_r",tBEFORE_R}, - {"linkout",tLINKOUT}, - {"switchvoicing",tSWITCHVOICING}, - {"vowelin",tVOWELIN}, - {"vowelout",tVOWELOUT}, - {"appendph",tAPPENDPH}, - {"import_phoneme",tIMPORTPH}, - {"beforepause",tBEFOREPAUSE}, - {"stress_type",tSTRESSTYPE}, - - // flags - {"wavef", 0x2000000+phWAVE}, - {"unstressed", 0x2000000+phUNSTRESSED}, - {"fortis", 0x2000000+phFORTIS}, - {"sibilant", 0x2000000+phSIBILANT}, - {"nolink", 0x2000000+phNOLINK}, - {"trill", 0x2000000+phTRILL}, - {"vowel2", 0x2000000+phVOWEL2}, - {"palatal", 0x2000000+phPALATAL}, - {"long", 0x2000000+phLONG}, - {"brkafter", 0x2000000+phBRKAFTER}, - {"rhotic", 0x2000000+phRHOTIC}, - {"nonsyllabic",0x2000000+phNONSYLLABIC}, - {"lengthenstop",0x2000000+phLENGTHENSTOP}, - - // voiced / unvoiced - {"vcd", 0x2000000+phVOICED}, - {"vls", 0x2000000+phFORTIS}, - - // place of articulation - {"blb", 0x2010000}, - {"lbd", 0x2020000}, - {"dnt", 0x2030000}, - {"alv", 0x2040000}, - {"rfx", 0x2050000}, - {"pla", 0x2060000}, - {"pal", 0x2070000}, - {"vel", 0x2080000}, - {"lbv", 0x2090000}, - {"uvl", 0x20a0000}, - {"phr", 0x20b0000}, - {"glt", 0x20c0000}, - - // vowel transition attributes - {"len=", 0x3000001}, - {"rms=", 0x3000002}, - {"f1=", 0x3000003}, - {"f2=", 0x3000004}, - {"f3=", 0x3000005}, - {"brk", 0x3000006}, - {"rate", 0x3000007}, - {"glstop", 0x3000008}, - {"lenadd", 0x3000009}, - {"f4", 0x300000a}, - {"paus", 0x300000b}, - {"colr=",0x300000c}, - {"amp=", 0x300000d}, // set rms of 1st frame as fraction of rms of 2nd frame (1/30ths) - - {"", -1} +enum { + tENDFILE = 1, + tSTRING, + tNUMBER, + tSIGNEDNUMBER, + tPHONEMEMNEM, + tOPENBRACKET, + tKEYWORD, + tCONDITION, + tPROPERTIES, }; +int item_type; +int item_terminator; +#define N_ITEM_STRING 256 +char item_string[N_ITEM_STRING]; -extern void strncpy0(char *to,const char *from, int size); +static int ref_sorter(char **a, char **b) +{//====================================== + int ix; + + 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 */ + + + +static void CompileReport(void) +{//============================ + int ix; + int hash; + int n; + 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 *)); + if(list == NULL) + return; + + sprintf(fname,"%scompile_report",path_source); + f_report = fopen(fname,"w"); + if(f_report == NULL) + { + free(list); + return; + } + + fprintf(f_report,"%d phoneme tables\n",n_phoneme_tabs); + fprintf(f_report," new total\n"); + for(ix=0; ixlink); + } + } + 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; ixstring, 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++; + } + + 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); + } + + for(ix=0; ixtype; + if(t1 > phVOWEL) t1 = phVOWEL+1; + + t2 = p2->type; + if(t2 > phVOWEL) t2 = phVOWEL+1; + + if((ix = t1 - t2) != 0) + return(ix); + + strcpy(mnem1,WordToString(p1->mnemonic)); + return(strcasecmp(mnem1,WordToString(p2->mnemonic))); +} /* end of ph_sorter */ + + + +static void PrintPhonemesUsed(FILE *f, const char *dictname) +{//========================================================= + int ix; + PHONEME_TAB *ph; + PHONEME_TAB *ph_tab[N_PHONEME_TAB]; + int count = 0; + int n_ph = 0; + int section = 0; + + fprintf(f,"\n\nDictionary %s_dict\n",dictname); + fflush(f); + + for(ix=0; (ixtype > 1) + { + if((ph->type > phVOWEL) && (section == 0)) + { + section = 1; + count = 0; + fputc('\n',f); + } + if((count & 0x7) == 0) + fputc('\n',f); + fprintf(f,"%-4s ",WordToString(ph->mnemonic)); + count++; + } + } + fputc('\n',f); +} // end of PrintPhonemesUsed + + + +static wxString CompileAllDictionaries() +{//===================================== + wxString filename; + wxFileName fname; + wxString dictstr; + wxString filetype; + wxString report = _T(""); + int err; + int errors = 0; + int dict_count = 0; + FILE *f_in; + FILE *log; + FILE *f_phused; + char dictname[80]; + char fname_log[sizeof(path_dsource)+20]; + char save_voice_name[80]; + char path[sizeof(path_home)+40]; // path_dsource+20 + char buf[200]; + char voicename[80]; + + if(!wxDirExists(path_dictsource)) + { + if(gui_flag) + { + wxString dirname = wxDirSelector(_T("Directory of dictionary files"),path_phsource); + if(!dirname.IsEmpty()) + { + path_dictsource = dirname; + strncpy0(path_dsource,path_dictsource.mb_str(wxConvLocal),sizeof(path_dsource)-1); + strcat(path_dsource,"/"); + } + } + else + { + fprintf(stderr,"Can't find dictionary files: %s\n",path_dsource); + } + } + + wxDir dir(path_dictsource); + if(!dir.IsOpened()) + { + return(_T(" No dictionaries")); + } + + strcpy(save_voice_name,voice_name2); + + sprintf(fname_log,"%s%s",path_dsource,"dict_log"); + log = fopen(fname_log,"w"); + sprintf(fname_log,"%s%s",path_dsource,"dict_phonemes"); + f_phused = fopen(fname_log,"w"); + + if(f_phused) + { + fprintf(f_phused,"Phonemes which are used in the *_rules and *_list files\n"); + } + + bool cont = dir.GetFirst(&filename, _T("*_rules*"), wxDIR_FILES); + while ( cont ) + { + fname = wxFileName(filename); + filetype = fname.GetName().AfterLast('_'); + if((filetype != _T("rules")) && (filetype != _T("rules.txt"))) + { + cont = dir.GetNext(&filename); + continue; + } + + dictstr = fname.GetName().BeforeLast('_'); + strcpy(dictname,dictstr.mb_str(wxConvLocal)); + + dict_count++; + strcpy(voicename,dictname); + + // read the *_rules file to see if a phoneme table is specified though a voice name + sprintf(path,"%s%s_rules.txt",path_dsource,dictname); + if((f_in = fopen(path,"r")) == NULL) + { + sprintf(path,"%s%s_rules",path_dsource,dictname); + f_in = fopen(path,"r"); + } + + if(f_in != NULL) + { + unsigned int ix; + unsigned int c; + + for(ix=0; ix<20; ix++) + { + if(fgets(buf,sizeof(buf),f_in) == NULL) + break; + + if(memcmp(buf,"//voice=",8)==0) + { + for(ix=0; ix 0) + { + report = report + dictstr + wxString::Format(_T(" %d, "),err); + errors += err; + } + + if(f_phused != NULL) + { + memset(phoneme_tab_flags,0,sizeof(phoneme_tab_flags)); + FindPhonemesUsed(); + PrintPhonemesUsed(f_phused,dictname); + } + + cont = dir.GetNext(&filename); + } + if(log != NULL) + fclose(log); + if(f_phused != NULL) + fclose(f_phused); + + LoadVoiceVariant(save_voice_name,0); + + if(errors == 0) + return(wxString::Format(_T(" Compiled %d dictionaries"),dict_count)); + else + { + return(_T(" Dictionary errors: ") + report); + } + +} // end of CompileAllDictionaries + + + + +static void error(const char *format, const char *string) +{//====================================================== + fprintf(f_errors,"%4d: ",linenum-1); + fprintf(f_errors,format,string); + fprintf(f_errors,"\n"); + error_count++; +} + +static void Error(const char *string) +{//================================== + error(string,NULL); +} + +static FILE *fopen_log(FILE *f_log, const char *fname,const char *access) +{//===================================================================== +// performs fopen, but produces error message to f_log if it fails + FILE *f; + + if((f = fopen(fname,access)) == NULL) + { + if(f_log != NULL) + fprintf(f_log,"Can't access (%s) file '%s'\n",access,fname); + } + return(f); +} + static unsigned int StringToWord(const char *string) {//================================================= @@ -328,107 +1010,65 @@ static unsigned int StringToWord(const char *string) } +static MNEM_TAB reserved_phonemes[] = { + {"<", phonCONTROL}, // NOT USED + {"%", phonSTRESS_U}, + {"%%", phonSTRESS_D}, + {",", phonSTRESS_2}, + {",,", phonSTRESS_3}, + {"'", phonSTRESS_P}, + {"''", phonSTRESS_P2}, + {"=", phonSTRESS_PREV}, // stress previous syllable + {"_:", phonPAUSE}, // pause + {"_", phonPAUSE_SHORT}, // short pause + {"_!", phonPAUSE_NOLINK}, // short pause, no link + {":", phonLENGTHEN}, + {"@", phonSCHWA}, + {"@-", phonSCHWA_SHORT}, + {"||", phonEND_WORD}, + {"1", phonDEFAULTTONE}, // (numeral 1) default tone (for tone language) + {"#X1",phonCAPITAL}, // capital letter indication + {"?", phonGLOTTALSTOP}, // glottal stop + {"-", phonSYLLABIC}, // syllabic consonant + {"_^_",phonSWITCH}, // Change language + {"_X1",phonX1}, // a language specific action + {"_|", phonPAUSE_VSHORT}, // very short pause + {"_::",phonPAUSE_LONG}, // long pause + {"t#", phonT_REDUCED}, // reduced version of [t] + {"'!", phonSTRESS_TONIC}, // stress - emphasized + {"_;_",phonPAUSE_CLAUSE}, // clause pause -static FILE *fopen_log(FILE *f_log, const char *fname,const char *access) -{//================================================== -// performs fopen, but produces error message to f_log if it fails - FILE *f; + {"#@", phonVOWELTYPES}, // vowel type groups, these must be consecutive + {"#a", phonVOWELTYPES+1}, + {"#e", phonVOWELTYPES+2}, + {"#i", phonVOWELTYPES+3}, + {"#o", phonVOWELTYPES+4}, + {"#u", phonVOWELTYPES+5}, + {NULL, 0} }; - if((f = fopen(fname,access)) == NULL) + +static void ReservePhCodes() +{//========================= +// Reserve phoneme codes which have fixed numbers so that they can be +// referred to from the program code. + unsigned int word; + MNEM_TAB *p; + + p = reserved_phonemes; + while(p->mnem != NULL) { - if(f_log != NULL) - fprintf(f_log,"Can't access (%s) file '%s'\n",access,fname); - } - return(f); -} - - -static int Hash8(const char *string) -//================================== -/* Generate a hash code from the specified string */ -{ - int c; - int chars=0; - int hash=0; - - while((c = *string++) != 0) - { - c = tolower(c) - 'a'; - hash = hash * 8 + c; - hash = (hash & 0x1ff) ^ (hash >> 8); /* exclusive or */ - chars++; - } - - return((hash+chars) & 0xff); -} // end of Hash8 - - - - - -Compile::Compile() -{//=============== - - linenum = 0; -} - - -void Compile::Error(const char *msg) -{//================================= - fprintf(f_errors,"%3d: %s\n",linenum,msg); - error_count++; -} - -void Compile::Error(const char *msg, const char *msg2) -{//================================= - fprintf(f_errors,"%3d: %s: '%s'\n",linenum,msg,msg2); - error_count++; -} - - - -const char *Compile::PhonemeMnem(int phcode) -{//========================================== - if((phcode >= 0) && (phcode < N_PHONEME_TAB)) - return(WordToString(phoneme_tab2[phcode].mnemonic)); - else - return("???"); -} - - -const char *Compile::GetKeyMnem(int value) -{//======================================= - keywtab_t *p; - - p = keywords; - - while(p->data != -1) - { - if(p->data == value) - return(p->mnem); + word = StringToWord(p->mnem); + phoneme_tab2[p->value].mnemonic = word; + phoneme_tab2[p->value].code = p->value; + if(n_phcodes <= p->value) + n_phcodes = p->value+1; p++; } - return("???"); -} +} // end of ReservePhCodes -void Compile::ReservePhCode(const char *string, int value) -{//======================================================= -// Use a fixed number for this phoneme. Must be used before any -// phonemes are declared - unsigned int word; - - word = StringToWord(string); - - phoneme_tab2[value].mnemonic = word; - phoneme_tab2[value].code = value; - if(n_phcodes <= value) - n_phcodes = value+1; -} - - -int Compile::LookupPhoneme(const char *string, int control) -{//======================================================== +static int LookupPhoneme(const char *string, int control) +{//====================================================== // control = 0 explicit declaration // control = 1 declare phoneme if not found // control = 2 start looking after control & stress phonemes @@ -444,7 +1084,7 @@ int Compile::LookupPhoneme(const char *string, int control) ix = strlen(string); if((ix==0) || (ix> 4)) { - Error("Bad phoneme",string); + error("Bad phoneme name '%s'",string); } word = StringToWord(string); @@ -467,10 +1107,10 @@ int Compile::LookupPhoneme(const char *string, int control) } } -// if(control != 1) return(-1); // not found - if(use == 0) { + if(control == 0) + return(-1); if(n_phcodes >= N_PHONEME_TAB-1) return(-1); // phoneme table is full use = n_phcodes++; @@ -479,75 +1119,82 @@ int Compile::LookupPhoneme(const char *string, int control) // add this phoneme to the phoneme table phoneme_tab2[use].mnemonic = word; phoneme_tab2[use].type = phINVALID; - phoneme_tab2[use].spect = linenum; // for error report if the phoneme remains undeclared + phoneme_tab2[use].program = linenum; // for error report if the phoneme remains undeclared return(use); } // end of Compile::LookupPhoneme -int Compile::NextItem(int type) -{//============================ +static unsigned int get_char() +{//=========================== + unsigned int c; + c = fgetc(f_in); + if(c == '\n') + linenum++; + return(c); +} + +static void unget_char(unsigned int c) +{//=================================== + ungetc(c,f_in); + if(c == '\n') + linenum--; +} + + +static int NextItem(int type) +{//========================== int acc; unsigned char c=0; unsigned char c2; int ix; int sign; int keyword; - keywtab_t *p; + char *p; + keywtab_t *pk; + item_type = -1; + f_in_displ = ftell(f_in); f_in_linenum = linenum; while(!feof(f_in)) { - c = fgetc(f_in); + c = get_char(); if(c=='/') { - if((c2 = fgetc(f_in))=='/') + if((c2 = get_char())=='/') { // comment, ignore to end of line - while(!feof(f_in) && ((c=fgetc(f_in)) != '\n')); + while(!feof(f_in) && ((c = get_char()) != '\n')); } else { - ungetc(c2,f_in); + unget_char(c2); } } - if(c == '\n') linenum++; if(!isspace(c)) { break; } } if(feof(f_in)) - return(tEND); + return(-2); - if((type == tNUMBER) || (type == tSIGNEDNUMBER)) + if(c == '(') { - acc = 0; - sign = 1; - if((c == '-') && (type == tSIGNEDNUMBER)) - { - sign = -1; - c = fgetc(f_in); - } - if(!isdigit(c)) - Error("Expected number"); - while(isdigit(c)) - { - acc *= 10; - acc += (c - '0'); - c = fgetc(f_in); - } - ungetc(c,f_in); - return(acc * sign); + if(type == tOPENBRACKET) + return(1); + return(-1); } ix = 0; - while(!feof(f_in) && !isspace(c)) + while(!feof(f_in) && !isspace(c) && (c != '(') && (c != ')') && (c != ',')) { + if(c == '\\') + c = get_char(); item_string[ix++] = c; - c = fgetc(f_in); + c = get_char(); if(feof(f_in)) break; if(item_string[ix-1] == '=') @@ -555,8 +1202,20 @@ int Compile::NextItem(int type) } item_string[ix] = 0; + while(isspace(c)) + { + c = get_char(); + } + + item_terminator = ' '; + if((c == ')') || (c == '(') || (c == ',')) + item_terminator = c; + + if((c == ')') || (c == ',')) + c = ' '; + if(!feof(f_in)) - ungetc(c,f_in); + unget_char(c); keyword = -1; @@ -564,18 +1223,42 @@ int Compile::NextItem(int type) { return(0); } - if(type == tKEYWORD) + + if((type == tNUMBER) || (type == tSIGNEDNUMBER)) { - p = keywords; - while(p->data != -1) + acc = 0; + sign = 1; + p = item_string; + + if((*p == '-') && (type == tSIGNEDNUMBER)) { - if(strcmp(item_string,p->mnem)==0) - { - item_type = p->data >> 24; - return(p->data & 0xffffff); - } + sign = -1; p++; } + if(!isdigit(*p)) + error("Expected a number",NULL); + while(isdigit(*p)) + { + acc *= 10; + acc += (*p - '0'); + p++; + } + return(acc * sign); + } + + + if((type >= tKEYWORD) && (type <= tPROPERTIES)) + { + pk = keyword_tabs[type-tKEYWORD]; + while(pk->mnem != NULL) + { + if(strcmp(item_string,pk->mnem)==0) + { + item_type = pk->type; + return(pk->data); + } + pk++; + } item_type = -1; return(-1); // keyword not found } @@ -584,19 +1267,183 @@ int Compile::NextItem(int type) return(LookupPhoneme(item_string,2)); } return(-1); -} // end of Compile::NextItem +} // end of NextItem -void Compile::UngetItem() -{//====================== + +static int NextItemBrackets(int type, int control) +{//=============================================== +// Expect a parameter inside parantheses +// control: bit 0 0= need ( +// bit 1 1= allow comma + + int value; + + if((control & 1) == 0) + { + if(!NextItem(tOPENBRACKET)) + { + error("Expected '('", NULL); + } + } + + value = NextItem(type); + if((control & 2) && (item_terminator == ',')) + return(value); + + if(item_terminator != ')') + { + error("Expected ')'", NULL); + } + return(value); + +} + + +static void UngetItem() +{//==================== fseek(f_in,f_in_displ,SEEK_SET); linenum = f_in_linenum; -} // end of Compile::UngetItem +} // end of UngetItem -int Compile::LoadSpect(const char *path, int control) -{//================================================= + +static int Range(int value, int divide, int min, int max) +{//====================================================== + if(value < 0) + value -= divide/2; + else + value += divide/2; + value = value / divide; + + if(value > max) + value = max; + if(value < min) + value = min; + return(value - min); +} + + +int CompileVowelTransition(int which) +{//================================== +// Compile a vowel transition + int key; + int len=0; + int rms=0; + int f1=0; + int f2=0; + int f2_min=0; + int f2_max=0; + int f3_adj=0; + int f3_amp=0; + int flags=0; + int vcolour=0; + int x; + int instn = i_VOWELIN; + int word1; + int word2; + + if(which==1) + { +// instn = i_VOWELIN; + len = 50 / 2; // defaults for transition into vowel + rms = 25 / 2; + + if(phoneme_out->type == phSTOP) + { + len = 42 / 2; // defaults for transition into vowel + rms = 30 / 2; + } + } + else + if(which==2) + { + instn = i_VOWELOUT; + len = 36 / 2; // defaults for transition out of vowel + rms = 16 / 2; + } + + for(;;) + { + key = NextItem(tKEYWORD); + if(item_type != tTRANSITION) + { + UngetItem(); + break; + } + + switch(key & 0xf) + { + case 1: + len = Range(NextItem(tNUMBER), 2, 0, 63) & 0x3f; + flags |= 1; + break; + case 2: + rms = Range(NextItem(tNUMBER), 2, 0, 31) & 0x1f; + flags |= 1; + break; + case 3: + f1 = NextItem(tNUMBER); + break; + case 4: + f2 = Range(NextItem(tNUMBER), 50, 0, 63) & 0x3f; + f2_min = Range(NextItem(tSIGNEDNUMBER), 50, -15, 15) & 0x1f; + f2_max = Range(NextItem(tSIGNEDNUMBER), 50, -15, 15) & 0x1f; + if(f2_min > f2_max) + { + x = f2_min; + f2_min = f2_max; + f2_max = x; + } + break; + case 5: + f3_adj = Range(NextItem(tSIGNEDNUMBER), 50, -15, 15) & 0x1f; + f3_amp = Range(NextItem(tNUMBER), 8, 0, 15) & 0x1f; + break; + case 6: + flags |= 2; // break + break; + case 7: + flags |= 4; // rate + break; + case 8: + flags |= 8; // glstop + break; + case 9: + flags |= 16; // lenadd + break; + case 10: + flags |= 32; // f4 + break; + case 11: + flags |= 64; // paus + break; + case 12: + vcolour = NextItem(tNUMBER); + break; + case 13: + // set rms of 1st frame as fraction of rms of 2nd frame (1/30ths) + rms = (Range(NextItem(tNUMBER), 1, 0, 31) & 0x1f) | 0x20; + flags |= 1; + break; + } + } + word1 = len + (rms << 6) + (flags << 12); + word2 = f2 + (f2_min << 6) + (f2_max << 11) + (f3_adj << 16) + (f3_amp << 21) + (f1 << 26) + (vcolour << 29); + prog_out[0] = instn + ((word1 >> 16) & 0xff); + prog_out[1] = word1; + prog_out[2] = word2 >> 16; + prog_out[3] = word2; + prog_out += 4; + + return(0); +} // end of VowelTransition + + + +int LoadSpect(const char *path, int control) +{//========================================= SpectSeq *spectseq; int peak; int displ; @@ -630,7 +1477,7 @@ int Compile::LoadSpect(const char *path, int control) if(stream.Ok() == FALSE) { - Error("Failed to open",path); + error("Failed to open: '%s'",path); return(0); } spectseq->Load(stream); @@ -811,12 +1658,12 @@ for(ix=0; ix<8; ix++) delete spectseq; return(displ); -} // end of Compile::LoadSpect +} // end of LoadSpect -int Compile::LoadWavefile(FILE *f, const char *fname) -{//================================================== +static int LoadWavefile(FILE *f, const char *fname) +{//================================================ int displ; unsigned char c1; unsigned char c3; @@ -842,11 +1689,11 @@ int Compile::LoadWavefile(FILE *f, const char *fname) if(sr1 != samplerate) { fprintf(f_errors,"Wrong samplerate %d, wants %d\n",sr1,samplerate); - Error("Wrong samplerate: ",fname); + error("Wrong samplerate: %s",fname); } if(sr2 != sr1*2) { - Error("Not mono: ",fname); + error("Not mono: %s",fname); } #else { @@ -859,7 +1706,7 @@ int Compile::LoadWavefile(FILE *f, const char *fname) sprintf(command,"sox \"%s%s.wav\" -r %d -c 1 -w %s polyphase\n",path_source,fname,samplerate,fname_temp); if(system(command) < 0) { - Error("Failed to resample: ",command); + error("Failed to resample: %s",command); return(0); } } @@ -867,7 +1714,7 @@ int Compile::LoadWavefile(FILE *f, const char *fname) f = fopen(fname_temp,"rb"); if(f == NULL) { - Error("Can't read temp file: ",fname_temp); + error("Can't read temp file: %s",fname_temp); return(0); } resample_wav = 1; @@ -956,12 +1803,12 @@ int Compile::LoadWavefile(FILE *f, const char *fname) remove(fname_temp); } return(displ | 0x800000); // set bit 23 to indicate a wave file rather than a spectrum -} // end of Compile::LoadWavefile +} // end of LoadWavefile -int Compile::LoadEnvelope(FILE *f, const char *fname) -{//================================================== +static int LoadEnvelope(FILE *f, const char *fname) +{//================================================ int displ; char buf[128]; @@ -979,839 +1826,32 @@ int Compile::LoadEnvelope(FILE *f, const char *fname) } return(displ); -} +} // end of LoadEnvelope -int Compile::LoadDataFile(const char *path, int control) -{//==================================================== - // load spectrum sequence or sample data from a file. - // return index into spect or sample data area. bit 23=1 if a sample - FILE *f; - int id; - int hash; - int addr = 0; - int type_code=' '; - REF_HASH_TAB *p, *p2; - char buf[sizeof(path_source)+120]; +static int Hash8(const char *string) +//================================== +/* Generate a hash code from the specified string */ +{ + int c; + int chars=0; + int hash=0; - if(strcmp(path,"NULL")==0) - return(0); - if(strcmp(path,"DFT")==0) - return(1); + while((c = *string++) != 0) + { + c = tolower(c) - 'a'; + hash = hash * 8 + c; + hash = (hash & 0x1ff) ^ (hash >> 8); /* exclusive or */ + chars++; + } - count_references++; + return((hash+chars) & 0xff); +} // end of Hash8 - hash = Hash8(path); - p = ref_hash_tab[hash]; - while(p != NULL) - { - if(strcmp(path,p->string)==0) - { - duplicate_references++; - addr = p->value; // already loaded this data - break; - } - p = (REF_HASH_TAB *)p->link; - } - if(addr == 0) - { - sprintf(buf,"%s%s",path_source,path); - - if((f = fopen(buf,"rb")) == NULL) - { - 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); - } - } - - // add this item to the hash table - 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(addr); -} // end of Compile::LoadDataFile - - - -void Compile::AddEnvelope(int *list) -{//================================ - NextItem(tSTRING); - *list++ = LoadDataFile(item_string,0); - list[0] = 0; -} - - -int Compile::AddSpect(int phcode, int *list, int control) -{//===================================================== - int sign; - int sign2; - int all_digits; - char *p; - char *p2; - int spect; - int value; - int count = 0; - int v_in = vowel_in[0]; - int v_out = vowel_out[0]; - - sign = 0; - all_digits=0; - p = p2 = item_string; - for(;;) - { - if((*p == 0) || (*p == '+') || (((*p == '-') || (*p == '%')) && isdigit(p[1]))) - { - sign2 = *p; - *p = 0; - - if(all_digits) - { - value = atoi(p2); - if(sign == '+') - *list++ = 1 + (value<<8); - else - if(sign == '-') - *list++ = 2 + (value<<8); - else - { - value = (value * 32)/100; // convert from % to 1/32s - *list++ = 3 + (value<<8); - } - count++; - } - else - { - spect = LoadDataFile(p2, control); - if(spect != -1) - { - *list++ = phcode + (spect<<8); - count++; - - - // vowel formant transitions specified ? - if(v_in != 0) - { - *list++ = 0x4 + (vowel_in[0] << 8); - *list++ = vowel_in[1]; - v_in = 0; - count+=2; - } - if(v_out != 0) - { - *list++ = 0x5 + (vowel_out[0] << 8); - *list++ = vowel_out[1]; - v_out = 0; - count+=2; - } - - } - phcode = 0; - } - - if((sign = sign2)==0) break; - p2 = p+1; - all_digits=1; - } - else - { - if(!isdigit(*p)) - all_digits=0; - } - p++; - } - *list = 0; - return(count); -} // end of AddSpect - - - -void Compile::AddSpectList(int *list, int control) -{//============================================== - int phcode; - int key; - - while(*list != 0) list++; // find end of the list - - for(;;) - { - key = NextItem(tKEYWORD); - UngetItem(); - if(key != -1) - break; - - phcode = NextItem(tPHONEMEMNEM); - - if(phcode == -1) - Error("Undeclared phoneme",item_string); - - if(NextItem(tSTRING) == -1) - break; - - list += AddSpect(phcode, list, control); - } - - *list++ = 0; -} // end of Compile::AddSpectList - - - -static int Range(int value, int divide, int min, int max) -{//====================================================== - if(value < 0) - value -= divide/2; - else - value += divide/2; - value = value / divide; - - if(value > max) - value = max; - if(value < min) - value = min; - return(value - min); -} - - -void Compile::VowelTransition(int which, unsigned int *trans) -{//========================================================== -// Compile a vowel transition - int key; - int len=0; - int rms=0; - int f1=0; - int f2=0; - int f2_min=0; - int f2_max=0; - int f3_adj=0; - int f3_amp=0; - int flags=0; - int vcolour=0; - int x; - - if(which==1) - { - len = 50 / 2; // defaults for transition into vowel - rms = 25 / 2; - - if(ph->type == phSTOP) - { - len = 42 / 2; // defaults for transition into vowel - rms = 30 / 2; - } - } - else - if(which==2) - { - len = 36 / 2; // defaults for transition out of vowel - rms = 16 / 2; - } - - for(;;) - { - key = NextItem(tKEYWORD); - if(item_type != 3) - { - UngetItem(); - break; - } - - switch(key & 0xf) - { - case 1: - len = Range(NextItem(tNUMBER), 2, 0, 63) & 0x3f; - flags |= 1; - break; - case 2: - rms = Range(NextItem(tNUMBER), 2, 0, 31) & 0x1f; - flags |= 1; - break; - case 3: - f1 = NextItem(tNUMBER); - break; - case 4: - f2 = Range(NextItem(tNUMBER), 50, 0, 63) & 0x3f; - f2_min = Range(NextItem(tSIGNEDNUMBER), 50, -15, 15) & 0x1f; - f2_max = Range(NextItem(tSIGNEDNUMBER), 50, -15, 15) & 0x1f; - if(f2_min > f2_max) - { - x = f2_min; - f2_min = f2_max; - f2_max = x; - } - break; - case 5: - f3_adj = Range(NextItem(tSIGNEDNUMBER), 50, -15, 15) & 0x1f; - f3_amp = Range(NextItem(tNUMBER), 8, 0, 15) & 0x1f; - break; - case 6: - flags |= 2; // break - break; - case 7: - flags |= 4; // rate - break; - case 8: - flags |= 8; // glstop - break; - case 9: - flags |= 16; // lenadd - break; - case 10: - flags |= 32; // f4 - break; - case 11: - flags |= 64; // paus - break; - case 12: - vcolour = NextItem(tNUMBER); - break; - case 13: - // set rms of 1st frame as fraction of rms of 2nd frame (1/30ths) - rms = (Range(NextItem(tNUMBER), 1, 0, 31) & 0x1f) | 0x20; - flags |= 1; - break; - } - } - trans[0] = len + (rms << 6) + (flags << 12) + 0x80000000; - trans[1] = f2 + (f2_min << 6) + (f2_max << 11) + (f3_adj << 16) + (f3_amp << 21) + (f1 << 26) + (vcolour << 29); -} // end of VowelTransition - - -void Compile::ImportPhoneme(void) -{//============================== - int ix; - unsigned int mnem; - unsigned int ph_mnem; - unsigned int ph_code; - PHONEME_TAB_LIST *phtab = NULL; - - NextItem(tSTRING); - mnem = StringToWord(item_string); - - NextItem(tSTRING); - for(ix=0; ixphoneme_tab_ptr[ix].mnemonic) - { - ph_mnem = ph->mnemonic; - ph_code = ph->code; - memcpy(ph,&phtab->phoneme_tab_ptr[ix],sizeof(PHONEME_TAB)); - ph->mnemonic = ph_mnem; - ph->code = ph_code; - break; - } - } - if(ix == 256) - { - Error("Import phoneme not found",WordToString(mnem)); - } -} - -int Compile::CPhoneme() -{//==================== - int phcode; - int phindex; - int value; - int item; - int finish=0; - int *intp; - int before_tab[N_PHONEME_TAB]; - int after_tab[N_PHONEME_TAB]; - int default_spect[N_PHONEME_TAB]; - - NextItem(tSTRING); - phindex = LookupPhoneme(item_string,1); // declare phoneme if not already there - if(phindex == -1) return(0); - - ph = &phoneme_tab2[phindex]; - memset(ph,0,sizeof(PHONEME_TAB)); - ph->mnemonic = StringToWord(item_string); - ph->type = 0xff; // undefined - ph->code = phindex; - before_tab[0] = 0; - after_tab[0] = 0; - default_spect[0] = 0; - vowel_in[0] = 0; - vowel_in[1] = 0; - vowel_out[0] = 0; - vowel_out[1] = 0; - - while(!finish) - { - item = NextItem(tKEYWORD); - - if(item_type==2) - ph->phflags |= item & 0xffffff; - else - if(item_type==1) - { - if(ph->type != 0xff) - { - Error("Phoneme type already set",item_string); - } - ph->type = item & 0xff; - } - else - switch(item) - { - case tLENGTHMOD: - ph->length_mod = NextItem(tNUMBER); - break; - - case tLENGTH: - ph->std_length = NextItem(tNUMBER); - break; - - case tSTRESSTYPE: - ph->std_length = NextItem(tNUMBER); - break; - - case tWAVE: - ph->phflags |= phWAVE; // drop through to tSPECT - case tSPECT: - if(NextItem(tSTRING) == -1) - Error("Syntax error",item_string); - else - { - if(ph->type == phVOWEL) - AddSpect(phonPAUSE,default_spect,1); - else - AddSpect(phonPAUSE,default_spect,0); - } - break; - - case tSTARTTYPE: - phcode = NextItem(tPHONEMEMNEM); - if(phcode == -1) - phcode = LookupPhoneme(item_string,1); - ph->start_type = phcode; - break; - - case tENDTYPE: - phcode = NextItem(tPHONEMEMNEM); - if(phcode == -1) - phcode = LookupPhoneme(item_string,1); - ph->end_type = phcode; - break; - - case tTONESPEC: - ph->start_type = NextItem(tNUMBER); // tone's min pitch (range 0-50) - ph->end_type = NextItem(tNUMBER); // tone's max pitch (range 0-50) - if(ph->start_type > ph->end_type) - { - // ensure pitch1 < pitch2 - value = ph->start_type; - ph->start_type = ph->end_type; - ph->end_type = value; - } - AddEnvelope(default_spect); // envelope for pitch change, rise or fall or fall/rise, etc - AddEnvelope(after_tab); // envelope for amplitude change - break; - - case tREDUCETO: - phcode = NextItem(tPHONEMEMNEM); - if(phcode == -1) - phcode = LookupPhoneme(item_string,1); - ph->reduce_to = phcode; - value = NextItem(tNUMBER); - ph->phflags = (ph->phflags & 0xfffffff) + (value << 28); - break; - - case tBEFOREVOWEL: - case tBEFOREVOWELPAUSE: - case tBEFORENOTVOWEL: - case tBEFORENOTVOWEL2: - case tSWITCHVOICING: - case tBEFORE_R: - ph->phflags |= flags_alternative[item - tBEFOREVOWEL]; - if((phcode = NextItem(tPHONEMEMNEM)) == -1) - phcode = LookupPhoneme(item_string,1); - ph->alternative_ph = phcode; - break; - - case tBEFOREPAUSE: - ph->phflags |= phBEFOREPAUSE; - if((phcode = NextItem(tPHONEMEMNEM)) == -1) - phcode = LookupPhoneme(item_string,1); - ph->link_out = phcode; - break; - - case tAPPENDPH: - ph->phflags |= phAPPENDPH; // drop through to tLINKOUT - case tLINKOUT: - phcode = NextItem(tPHONEMEMNEM); - if(phcode == -1) - phcode = LookupPhoneme(item_string,1); - ph->link_out = phcode; - break; - - case tBEFORE: - AddSpectList(before_tab,0); - break; - - case tAFTER: - AddSpectList(after_tab,0); - break; - - case tEND: - finish = 1; - break; - - case tVOWELIN: - VowelTransition(1,vowel_in); - break; - - case tVOWELOUT: - VowelTransition(2,vowel_out); - break; - - case tIMPORTPH: - ImportPhoneme(); - break; - - default: - Error("Syntax error",item_string); - break; - } - } - // write out indices - if(before_tab[0] != 0) - { - ph->before = ftell(f_phindex) / 4; - intp = before_tab; - for(;;) - { - fwrite(intp,4,1,f_phindex); - if(*intp++ == 0) break; - } - } - if(after_tab[0] != 0) - { - ph->after = ftell(f_phindex) / 4; - intp = after_tab; - for(;;) - { - fwrite(intp,4,1,f_phindex); - if(*intp++ == 0) break; - } - } - if(default_spect[0] != 0) - { - ph->spect = ftell(f_phindex) / 4; - intp = default_spect; - for(;;) - { - fwrite(intp,4,1,f_phindex); - if(*intp++ == 0) break; - } - } - - if(ph->phflags & phVOICED) - { - if(ph->type == phSTOP) - ph->type = phVSTOP; - else - if(ph->type == phFRICATIVE) - ph->type = phVFRICATIVE; - } - - ph->std_length |= 0x8000; // 'locally declared' indicator - - if(ph->type == phDELETED) - { - ph->mnemonic = 0x01; // will not be recognised - } - - return(phindex); -} // end of Compile::CPhoneme - - - -void Compile::WritePhonemeTable() -{//============================== - int ix; - int j; - int n; - int value; - int count; - PHONEME_TAB *p; - - value = n_phoneme_tabs; - fputc(value,f_phtab); - fputc(0,f_phtab); - fputc(0,f_phtab); - fputc(0,f_phtab); - - for(ix=0; ix= N_PHONEME_TABS-1) - { - Error("Too many phonemetables"); - return; - } - p = (PHONEME_TAB *)calloc(sizeof(PHONEME_TAB),N_PHONEME_TAB); - - if(p == NULL) - { - Error("Out of memory"); - return; - } - - if(gui_flag) - progress->Update(n_phoneme_tabs); - - phoneme_tab_list2[n_phoneme_tabs].phoneme_tab_ptr = phoneme_tab2 = p; - memset(phoneme_tab_list2[n_phoneme_tabs].name, 0, N_PHONEME_TAB_NAME); - strncpy0(phoneme_tab_list2[n_phoneme_tabs].name, name, N_PHONEME_TAB_NAME); - n_phcodes = 1; - phoneme_tab_list2[n_phoneme_tabs].includes = 0; - - if(n_phoneme_tabs > 0) - { - NextItem(tSTRING); // name of base phoneme table - for(ix=0; ixstring,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 */ - - - -void Compile::Report(void) -{//======================= - int ix; + FILE *f; + int id; int hash; - int n; - 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]; + int addr = 0; + int type_code=' '; + REF_HASH_TAB *p, *p2; + char buf[sizeof(path_source)+120]; - // make a list of all the references and sort it - list = (REF_HASH_TAB **)malloc((count_references)* sizeof(REF_HASH_TAB *)); - if(list == NULL) - return; + if(strcmp(path,"NULL")==0) + return(0); + if(strcmp(path,"DFT")==0) + return(1); - sprintf(fname,"%scompile_report",path_source); - f_report = fopen(fname,"w"); - if(f_report == NULL) + count_references++; + + hash = Hash8(path); + p = ref_hash_tab[hash]; + while(p != NULL) { - free(list); - return; + if(strcmp(path,p->string)==0) + { + duplicate_references++; + addr = p->value; // already loaded this data + break; + } + p = (REF_HASH_TAB *)p->link; } - fprintf(f_report,"%d phoneme tables\n",n_phoneme_tabs); - fprintf(f_report," new total\n"); - for(ix=0; ix 0) + { + fprintf(f_phcontents,"%c 0x%.5x %s\n",type_code,addr & 0x7fffff,path); + } + } + + // add this item to the hash table + if(addr > 0) { p = ref_hash_tab[hash]; - while(p != NULL) - { - list[ix++] = p; - p = (REF_HASH_TAB *)(p->link); - } + p2 = (REF_HASH_TAB *)malloc(sizeof(REF_HASH_TAB)+strlen(path)+1); + p2->value = addr; + p2->ph_mnemonic = phoneme_out->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(addr); +} // end of LoadDataFile + + +static int CompileToneSpec(void) +{//============================= + int pitch1=0; + int pitch2=0; + int pitch_env = 0; + int amp_env = 0; + + pitch1 = NextItemBrackets(tNUMBER,2); + pitch2 = NextItemBrackets(tNUMBER,3); + + if(item_terminator == ',') + { + NextItemBrackets(tSTRING,3); + pitch_env = LoadDataFile(item_string, 0); + } + + if(item_terminator == ',') + { + NextItemBrackets(tSTRING,1); + amp_env = LoadDataFile(item_string, 0); + } + + if(pitch1 < pitch2) + { + phoneme_out->start_type = pitch1; + phoneme_out->end_type = pitch2; + } + else + { + phoneme_out->start_type = pitch2; + phoneme_out->end_type = pitch1; + } + + if(pitch_env != 0) + { + *prog_out++ = i_PITCHENV + ((pitch_env >> 16) & 0xf); + *prog_out++ = pitch_env; + } + if(amp_env != 0) + { + *prog_out++ = i_AMPENV + ((amp_env >> 16) & 0xf); + *prog_out++ = amp_env; } - 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; ixstring, data_path) != 0) + + +int CompileSound(int keyword, int isvowel) +{//======================================= + int addr; + int value = 0; + char path[N_ITEM_STRING]; + static int sound_instns[] = {i_FMT, i_WAV, i_VWLSTART, i_VWLENDING, i_WAVADD}; + + NextItemBrackets(tSTRING,2); + strcpy(path, item_string); + if(item_terminator == ',') + { + value = NextItemBrackets(tSIGNEDNUMBER,1); + } + addr = LoadDataFile(path, isvowel); + addr = addr / 4; // addr is words not bytes + + *prog_out++ = sound_instns[keyword-kFMT] + ((value & 0xff) << 4) + ((addr >> 16) & 0xf); + *prog_out++ = addr & 0xffff; + return(0); +} // end of CompileSound + + + +/* +Condition +bits 14,15 1 +bit 13 1 = AND, 0 = OR +bit 12 spare +bit 8-11 + =0-3 p,t,n,n2 data=phoneme code + =4-7 p,t,n,n2 data=(bits5-7: phtype, place, property, special) (bits0-4: data) + =8 data = stress bitmap + =9 special tests +*/ + +int CompileIf(int elif) +{//==================== + int key; + int finish = 0; + int word = 0; + int data; + int bitmap; + int brackets; + USHORT *prog_last_if = NULL; + + then_count = 2; + after_if = 1; + + while(!finish) + { + if((key = NextItem(tCONDITION)) < 0) + error("Expected a condition, not '%s'",item_string); + + if(item_type == tWHICH_PHONEME) { - data_path = list[ix]->string; - j = strlen(data_path); - fprintf(f_report,"%s",data_path); + // prevPh(), thisPh(), nextPh(), next2Ph() + data = NextItemBrackets(tPROPERTIES,0); + if(data >= 0) + { + word = key + data + 0x700; + } + else + { + data = LookupPhoneme(item_string,2); + word = key + data; + } + } + else + if(item_type == tTEST) + { + if(key == kTHISSTRESS) + { + bitmap = 0; + brackets = 2; + do { + data = NextItemBrackets(tNUMBER,brackets); + if(data > 7) + error("Expected list of stress levels",NULL); + bitmap |= (1 << data); + + brackets = 3; + } while(item_terminator == ','); + word = i_StressLevel | bitmap; + } + else + { + word = key; + } } else { - if((list[ix]->ph_table == prev_table) && (list[ix]->ph_mnemonic == prev_mnemonic)) - continue; // same phoneme, don't list twice + error("Unexpected keyword '%s'",item_string); } - while(j < 14) + // output the word + prog_last_if = prog_out; + *prog_out++ = word | i_CONDITION; + + // expect AND, OR, THEN + switch(NextItem(tCONDITION)) { - fputc(' ',f_report); // pad filename with spaces - j++; - } - - 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); - } - - for(ix=0; ixtype; - if(t1 > phVOWEL) t1 = phVOWEL+1; - - t2 = p2->type; - if(t2 > phVOWEL) t2 = phVOWEL+1; - - if((ix = t1 - t2) != 0) - return(ix); - - strcpy(mnem1,WordToString(p1->mnemonic)); - return(strcasecmp(mnem1,WordToString(p2->mnemonic))); -} /* end of ph_sorter */ - - - -void PrintPhonemesUsed(FILE *f, const char *dictname) -{//================================================== - int ix; - PHONEME_TAB *ph; - PHONEME_TAB *ph_tab[N_PHONEME_TAB]; - int count = 0; - int n_ph = 0; - int section = 0; - - fprintf(f,"\n\nDictionary %s_dict\n",dictname); - fflush(f); - - for(ix=0; (ixtype > 1) + if(elif == 0) + { + if_level++; + if_stack[if_level].p_else = NULL; + } + + if_stack[if_level].returned = 0; + if_stack[if_level].p_then = prog_out; + *prog_out++ = i_JUMP_FALSE; + + return(0); +} // end of CompileIf + + +void FillThen(int add) +{//=================== + USHORT *p; + int offset; + + p = if_stack[if_level].p_then; + if(p != NULL) + { + offset = prog_out - p + add; + + if((then_count == 1) && (if_level == 1)) { - if((ph->type > phVOWEL) && (section == 0)) + // The THEN part only contains one statement, we can remove the THEN jump + // and the interpreter will implicitly skip the statement. + while(p < prog_out) { - section = 1; - count = 0; - fputc('\n',f); + p[0] = p[1]; + p++; } - if((count & 0x7) == 0) - fputc('\n',f); - fprintf(f,"%-4s ",WordToString(ph->mnemonic)); - count++; + prog_out--; } + else + { + if(offset > MAX_JUMP) + { + error("IF block is too long",NULL); + } + *p = i_JUMP_FALSE + offset; + } + if_stack[if_level].p_then = NULL; } - fputc('\n',f); -} // end of PrintPhonemesUsed + + then_count = 0; +} // end of FillThen + + +int CompileElse(void) +{//================== + USHORT *ref; + USHORT *p; + + if(if_level < 1) + { + error("ELSE not expected",NULL); + return(0); + } + + if(if_stack[if_level].returned == 0) + { + FillThen(1); + } + else + { + FillThen(0); + } + + if(if_stack[if_level].returned == 0) + { + ref = prog_out; + *prog_out++ = 0; + + if((p = if_stack[if_level].p_else) != NULL) + { + *ref = ref - p; // backwards offset to the previous else + } + if_stack[if_level].p_else = ref; + } + + return(0); +} // end of CompileElse + + +int CompileElif(void) +{//=================== + if(if_level < 1) + { + error("ELIF not expected",NULL); + return(0); + } + + CompileElse(); + CompileIf(1); + return(0); +} + + +int CompileEndif(void) +{//=================== + USHORT *p; + int chain; + int offset; + + if(if_level < 1) + { + error("ENDIF not expected",NULL); + return(0); + } + + FillThen(0); + + if((p = if_stack[if_level].p_else) != NULL) + { + do + { + chain = *p; // a chain of previous else links + + offset = prog_out - p; + if(offset > MAX_JUMP) + { + error("IF block is too long",NULL); + } + *p = i_JUMP + offset; + + p -= chain; + } while (chain > 0); + } + + if_level--; + return(0); +} // end of CompileEndif + + +static int CompileSwitch(int type) +{//=============================== +// Type 0: EndSwitch +// 1: SwitchPrevVowelType +// 2: SwitchNextVowelType + + if(type == 0) + { + // check the instructions in the Switch + return(0); + } + +// count_VowelStart = 0; +// count_VowelEnding = 0; + + if(type == 1) + *prog_out++ = i_SWITCH_PREVVOWEL+6; + if(type == 2) + *prog_out++ = i_SWITCH_NEXTVOWEL+6; + return(0); +} // end of CompileSwitch -wxString CompileAllDictionaries() -{//============================== - wxString filename; - wxFileName fname; - wxString dictstr; - wxString filetype; - wxString report = _T(""); - int err; - int errors = 0; - int dict_count = 0; - FILE *f_in; - FILE *log; - FILE *f_phused; - char dictname[80]; - char fname_log[sizeof(path_dsource)+20]; - char save_voice_name[80]; - char path[sizeof(path_home)+40]; // path_dsource+20 +static PHONEME_TAB *FindPhoneme(const char *string) +{//================================================ + PHONEME_TAB_LIST *phtab = NULL; + int ix; + unsigned int mnem; + char *phname; char buf[200]; - char voicename[80]; - if(!wxDirExists(path_dictsource)) + // is this the name of a phoneme which is ijn scope + if((strlen(string) <= 4) && ((ix = LookupPhoneme(string,0)) != -1)) { - if(gui_flag) + return(&phoneme_tab2[ix]); + } + + // no, treat the name as phonemetable/phoneme + strcpy(buf,string); + if((phname = strchr(buf,'/')) != 0) + { + *phname++ = 0; + } + + for(ix=0; ixphoneme_tab_ptr[ix].mnemonic) + { + return(&phtab->phoneme_tab_ptr[ix]); + } + } + + error("Phoneme reference not found: '%s'",string); + return(NULL); +} + + +static void ImportPhoneme(void) +{//============================ + unsigned int ph_mnem; + unsigned int ph_code; + PHONEME_TAB *ph; + + NextItem(tSTRING); + + if((ph = FindPhoneme(item_string)) == NULL) + return; + + ph_mnem = phoneme_out->mnemonic; + ph_code = phoneme_out->code; + memcpy(phoneme_out,ph,sizeof(PHONEME_TAB)); + phoneme_out->mnemonic = ph_mnem; + phoneme_out->code = ph_code; + if(phoneme_out->type != phVOWEL) + { + phoneme_out->end_type = 0; // voicingswitch, this must be set later to refer to a local phoneme + } + +} // end of ImportPhoneme + + +static void CallPhoneme(void) +{//========================== + PHONEME_TAB *ph; + int ix; + int addr = 0; + + NextItem(tSTRING); + + // first look for a procedure name + for(ix=0; ixprogram; + } + + *prog_out++ = i_CALLPH + (addr >> 16); + *prog_out++ = addr; +} // end of CallPhoneme + + +static void DecThenCount() +{//======================= + if(then_count >0) + then_count--; +} + +static void InstnPlusPhoneme(int instn) +{//==================================== + int phcode; + DecThenCount(); + + phcode = NextItemBrackets(tPHONEMEMNEM,0); + *prog_out++ = instn + phcode; +} + + +int CompilePhoneme(int compile_phoneme) +{//==================================== + int endphoneme = 0; + int phoneme_flags = 0; + int place_articulation = 0; + int keyword; + int value; + int phcode = 0; + PHONEME_TAB phoneme_out2; + + prog_out = prog_buf; + if_level = 0; + if_stack[0].returned = 0; + after_if = 0; + + NextItem(tSTRING); + if(compile_phoneme) + { + phcode = LookupPhoneme(item_string,1); // declare phoneme if not already there + if(phcode == -1) return(0); + phoneme_out = &phoneme_tab2[phcode]; + } + else + { + // declare a procedure + if(n_procs >= N_PROCS) + { + error("Too many procedures",NULL); + return(0); + } + strcpy(proc_names[n_procs], item_string); + phoneme_out = &phoneme_out2; + } + + phoneme_out->code = phcode; + phoneme_out->program = 0; + phoneme_out->type = phINVALID; + phoneme_out->std_length = 0; + phoneme_out->start_type = 0; + phoneme_out->end_type = 0; + phoneme_out->length_mod = 0; + + while(!endphoneme && !feof(f_in)) + { + if((keyword = NextItem(tKEYWORD)) < 0) + { + if(keyword == -2) { - path_dictsource = dirname; - strncpy0(path_dsource,path_dictsource.mb_str(wxConvLocal),sizeof(path_dsource)-1); - strcat(path_dsource,"/"); + error("Missing 'endphoneme' before end-of-file",NULL); // end of file + break; } - } - else - { - fprintf(stderr,"Can't find dictionary files: %s\n",path_dsource); - } - } - - wxDir dir(path_dictsource); - if(!dir.IsOpened()) - { - return(_T(" No dictionaries")); - } - - strcpy(save_voice_name,voice_name2); - - sprintf(fname_log,"%s%s",path_dsource,"dict_log"); - log = fopen(fname_log,"w"); - sprintf(fname_log,"%s%s",path_dsource,"dict_phonemes"); - f_phused = fopen(fname_log,"w"); - - if(f_phused) - { - fprintf(f_phused,"Phonemes which are used in the *_rules and *_list files\n"); - } - - bool cont = dir.GetFirst(&filename, _T("*_rules*"), wxDIR_FILES); - while ( cont ) - { - fname = wxFileName(filename); - filetype = fname.GetName().AfterLast('_'); - if((filetype != _T("rules")) && (filetype != _T("rules.txt"))) - { - cont = dir.GetNext(&filename); + error("Bad keyword in phoneme definition '%s'",item_string); continue; } - dictstr = fname.GetName().BeforeLast('_'); - strcpy(dictname,dictstr.mb_str(wxConvLocal)); - - dict_count++; - strcpy(voicename,dictname); - - // read the *_rules file to see if a phoneme table is specified though a voice name - sprintf(path,"%s%s_rules.txt",path_dsource,dictname); - if((f_in = fopen(path,"r")) == NULL) + switch(item_type) { - sprintf(path,"%s%s_rules",path_dsource,dictname); - f_in = fopen(path,"r"); - } + case tPHONEME_TYPE: + if(phoneme_out->type != phINVALID) + error("More than one phoneme type: %s",item_string); + phoneme_out->type = keyword; + break; - if(f_in != NULL) - { - unsigned int ix; - unsigned int c; + case tPLACE: + if(place_articulation > 0) + error("Place of articulation has already been given: %s",item_string); + place_articulation = keyword; + break; - for(ix=0; ix<20; ix++) + case tPHONEME_FLAG: + phoneme_flags |= keyword; + break; + + case tINSTRN1: +// instruction group 0, with 8 bit operands which set data in PHONEME_DATA + switch(keyword) { - if(fgets(buf,sizeof(buf),f_in) == NULL) - break; + case i_CHANGE_PHONEME: + case i_APPEND_PHONEME: + case i_APPEND_IFNEXTVOWEL: + case i_INSERT_PHONEME: + case i_REPLACE_NEXT_PHONEME: + case i_VOICING_SWITCH: + case i_CHANGE_IF+0: + case i_CHANGE_IF+1: + case i_CHANGE_IF+2: + case i_CHANGE_IF+3: + InstnPlusPhoneme(keyword << 8); + break; - if(memcmp(buf,"//voice=",8)==0) + case i_PAUSE_BEFORE: + value = NextItem(tNUMBER); + *prog_out++ = (i_PAUSE_BEFORE << 8) + value; + break; + + case i_PAUSE_AFTER: + value = NextItem(tNUMBER); + *prog_out++ = (i_PAUSE_AFTER << 8) + value; + break; + + case i_SET_LENGTH: + value = NextItem(tNUMBER); + if(after_if == 0) { - for(ix=0; ixstd_length = value/2; } + else + { + *prog_out++ = (i_SET_LENGTH << 8) + value/2; + DecThenCount(); + } + break; + + case i_ADD_LENGTH: + value = NextItem(tSIGNEDNUMBER); + *prog_out++ = (i_ADD_LENGTH << 8) + value/2; + DecThenCount(); + break; + + case i_LENGTH_MOD: + value = NextItem(tNUMBER); + phoneme_out->length_mod = value; + break; } - fclose(f_in); + break; + + case tSTATEMENT: + switch(keyword) + { + case kIMPORT_PH: + ImportPhoneme(); + phoneme_flags = phoneme_out->phflags; + break; + + case kSTARTTYPE: + phcode = NextItem(tPHONEMEMNEM); + if(phcode == -1) + phcode = LookupPhoneme(item_string,1); + phoneme_out->start_type = phcode; + break; + + case kENDTYPE: + phcode = NextItem(tPHONEMEMNEM); + if(phcode == -1) + phcode = LookupPhoneme(item_string,1); + if(phoneme_out->type == phVOWEL) + { + phoneme_out->end_type = phcode; + } + else + { + if(phcode != phoneme_out->start_type) + { + error("endtype must equal starttype for consonants",NULL); + } + } + break; + + case kVOICINGSWITCH: + phcode = NextItem(tPHONEMEMNEM); + if(phcode == -1) + phcode = LookupPhoneme(item_string,1); + phoneme_out->end_type = phcode; // use end_type field for consonants as voicing_switch + break; + + case kSTRESSTYPE: + value = NextItem(tNUMBER); + phoneme_out->std_length = value; + break; + + case kIF: + endphoneme = CompileIf(0); + break; + + case kELSE: + endphoneme = CompileElse(); + break; + + case kELIF: + endphoneme = CompileElif(); + break; + + case kENDIF: + endphoneme = CompileEndif(); + break; + + case kENDSWITCH: + break; + + case kSWITCH_PREVVOWEL: + endphoneme = CompileSwitch(1); + break; + + case kSWITCH_NEXTVOWEL: + endphoneme = CompileSwitch(2); + break; + + case kCALLPH: + CallPhoneme(); + break; + + case kFMT: + DecThenCount(); + if(phoneme_out->type == phVOWEL) + endphoneme = CompileSound(keyword,1); + else + endphoneme = CompileSound(keyword,0); + break; + + case kWAV: + if_stack[if_level].returned = 1; + case kVOWELSTART: + case kVOWELENDING: + case kANDWAV: + DecThenCount(); + endphoneme = CompileSound(keyword,0); + break; + + case kVOWELIN: + DecThenCount(); + endphoneme = CompileVowelTransition(1); + break; + + case kVOWELOUT: + DecThenCount(); + endphoneme = CompileVowelTransition(2); + break; + + case kTONESPEC: + endphoneme = CompileToneSpec(); + break; + + case kCONTINUE: + *prog_out++ = i_CONTINUE; + DecThenCount(); + break; + + case kRETURN: + *prog_out++ = i_RETURN; + break; + + case kINCLUDE: + case kPHONEMENUMBER: + case kPHONEMETABLE: + error("Missing 'endphoneme' before '%s'",item_string); // drop through to endphoneme + case kENDPHONEME: + case kENDPROCEDURE: + endphoneme = 1; + if(if_level > 0) + { + error("Missing ENDIF",NULL); + } + if((prog_out > prog_buf) && (if_stack[0].returned == 0)) + { + *prog_out++ = i_RETURN; + } + break; + } + + break; } - - LoadVoice(voicename,0); - - if((err = CompileDictionary(path_dsource, dictname,log,NULL,0)) > 0) - { - report = report + dictstr + wxString::Format(_T(" %d, "),err); - errors += err; - } - - if(f_phused != NULL) - { - memset(phoneme_tab_flags,0,sizeof(phoneme_tab_flags)); - FindPhonemesUsed(); - PrintPhonemesUsed(f_phused,dictname); - } - - cont = dir.GetNext(&filename); } - if(log != NULL) - fclose(log); - if(f_phused != NULL) - fclose(f_phused); - LoadVoiceVariant(save_voice_name,0); + if(endphoneme != 1) + { + error("'endphoneme' not expected here",NULL); + } - if(errors == 0) - return(wxString::Format(_T(" Compiled %d dictionaries"),dict_count)); + if(compile_phoneme) + { + if(phoneme_out->type == phINVALID) + { + error("Phoneme type is missing",NULL); + phoneme_out->type = 0; + } + phoneme_out->phflags = place_articulation << 16; + phoneme_out->phflags |= phoneme_flags; + + if(phoneme_out->phflags & phVOICED) + { + if(phoneme_out->type == phSTOP) + phoneme_out->type = phVSTOP; + else + if(phoneme_out->type == phFRICATIVE) + phoneme_out->type = phVFRICATIVE; + } + + if(phoneme_out->std_length == 0) + { + if(phoneme_out->type == phVOWEL) + phoneme_out->std_length = 180/2; // default length for vowel + } + + phoneme_out->phflags |= phLOCAL; //declared in this phoneme table + + if(phoneme_out->type == phDELETED) + { + phoneme_out->mnemonic = 0x01; // will not be recognised + } + } + + DecompilePhoneme(f_errors, phoneme_out, compile_phoneme); + + if(prog_out > prog_buf) + { + // write out the program for this phoneme + fflush(f_phindex); + phoneme_out->program = ftell(f_phindex) / sizeof(USHORT); + if(compile_phoneme == 0) + { + proc_addr[n_procs++] = ftell(f_phindex) / sizeof(USHORT); + } + fwrite(prog_buf, sizeof(USHORT), prog_out - prog_buf, f_phindex); + } + + return(0); +} // end of CompilePhoneme + + + + + +static void WritePhonemeTables() +{//============================= + int ix; + int j; + int n; + int value; + int count; + PHONEME_TAB *p; + + value = n_phoneme_tabs; + fputc(value,f_phtab); + fputc(0,f_phtab); + fputc(0,f_phtab); + fputc(0,f_phtab); + + for(ix=0; ix= N_PHONEME_TABS-1) + { + Error("Too many phonemetables"); + return; + } + p = (PHONEME_TAB *)calloc(sizeof(PHONEME_TAB),N_PHONEME_TAB); + + if(p == NULL) + { + Error("Out of memory"); + return; + } + + if(gui_flag) + progress->Update(n_phoneme_tabs); + + phoneme_tab_list2[n_phoneme_tabs].phoneme_tab_ptr = phoneme_tab2 = p; + memset(phoneme_tab_list2[n_phoneme_tabs].name, 0, N_PHONEME_TAB_NAME); + strncpy0(phoneme_tab_list2[n_phoneme_tabs].name, name, N_PHONEME_TAB_NAME); + n_phcodes = 1; + phoneme_tab_list2[n_phoneme_tabs].includes = 0; + + if(n_phoneme_tabs > 0) + { + NextItem(tSTRING); // name of base phoneme table + for(ix=0; ixCPhonemeTab("phonemes"); - delete compile; + CompilePhonemeData2("phonemes"); + return; } + diff --git a/src/dictionary.cpp b/src/dictionary.cpp index bc44097e..a4e62738 100755 --- a/src/dictionary.cpp +++ b/src/dictionary.cpp @@ -36,7 +36,6 @@ #include "translate.h" - int dictionary_skipwords; char dictionary_name[40]; @@ -482,7 +481,7 @@ void DecodePhonemes(const char *inptr, char *outptr) if((ph = phoneme_tab[phcode]) == NULL) continue; - if((ph->type == phSTRESS) && (ph->std_length <= 4) && (ph->spect == 0)) + if((ph->type == phSTRESS) && (ph->std_length <= 4) && (ph->program == 0)) { if(ph->std_length > 1) *outptr++ = stress_chars[ph->std_length]; @@ -847,26 +846,26 @@ return(0); -static int GetVowelStress(Translator *tr, unsigned char *phonemes, unsigned char *vowel_stress, int &vowel_count, int &stressed_syllable, int control) -{//==================================================================================================================================================== +static int GetVowelStress(Translator *tr, unsigned char *phonemes, signed char *vowel_stress, int &vowel_count, int &stressed_syllable, int control) +{//================================================================================================================================================= // control = 1, set stress to 1 for forced unstressed vowels unsigned char phcode; PHONEME_TAB *ph; unsigned char *ph_out = phonemes; int count = 1; - int max_stress = 0; + int max_stress = -1; int ix; int j; - int stress = 0; + int stress = -1; int primary_posn = 0; - vowel_stress[0] = 0; + vowel_stress[0] = 1; while(((phcode = *phonemes++) != 0) && (count < (N_WORD_PHONEMES/2)-1)) { if((ph = phoneme_tab[phcode]) == NULL) continue; - if((ph->type == phSTRESS) && (ph->spect == 0)) + if((ph->type == phSTRESS) && (ph->program == 0)) { /* stress marker, use this for the following vowel */ @@ -876,7 +875,7 @@ static int GetVowelStress(Translator *tr, unsigned char *phonemes, unsigned char j = count - 1; while((j > 0) && (stressed_syllable == 0) && (vowel_stress[j] < 4)) { - if(vowel_stress[j] != 1) + if((vowel_stress[j] != 0) && (vowel_stress[j] != 1)) { // don't promote a phoneme which must be unstressed vowel_stress[j] = 4; @@ -920,11 +919,11 @@ static int GetVowelStress(Translator *tr, unsigned char *phonemes, unsigned char max_stress = stress; } - if((stress == 0) && (control & 1) && (ph->phflags & phUNSTRESSED)) + if((stress < 0) && (control & 1) && (ph->phflags & phUNSTRESSED)) vowel_stress[count] = 1; /* weak vowel, must be unstressed */ count++; - stress = 0; + stress = -1; } else if(phcode == phonSYLLABIC) @@ -937,7 +936,7 @@ static int GetVowelStress(Translator *tr, unsigned char *phonemes, unsigned char *ph_out++ = phcode; } - vowel_stress[count] = 0; + vowel_stress[count] = 1; *ph_out = 0; /* has the position of the primary stress been specified by $1, $2, etc? */ @@ -959,7 +958,7 @@ static int GetVowelStress(Translator *tr, unsigned char *phonemes, unsigned char if(vowel_stress[ix] == 4) { if(tr->langopts.stress_flags & 0x20000) - vowel_stress[ix] = 0; + vowel_stress[ix] = 1; else vowel_stress[ix] = 3; } @@ -980,7 +979,7 @@ static int GetVowelStress(Translator *tr, unsigned char *phonemes, unsigned char -static char stress_phonemes[] = {phonSTRESS_U, phonSTRESS_D, phonSTRESS_2, phonSTRESS_3, +static char stress_phonemes[] = {phonSTRESS_D, phonSTRESS_U, phonSTRESS_2, phonSTRESS_3, phonSTRESS_P, phonSTRESS_P2, phonSTRESS_TONIC}; @@ -992,7 +991,7 @@ void ChangeWordStress(Translator *tr, char *word, int new_stress) int vowel_count; // num of vowels + 1 int stressed_syllable=0; // position of stressed syllable unsigned char phonetic[N_WORD_PHONEMES]; - unsigned char vowel_stress[N_WORD_PHONEMES/2]; + signed char vowel_stress[N_WORD_PHONEMES/2]; strcpy((char *)phonetic,word); max_stress = GetVowelStress(tr, phonetic, vowel_stress, vowel_count, stressed_syllable, 0); @@ -1026,8 +1025,8 @@ void ChangeWordStress(Translator *tr, char *word, int new_stress) { if((phoneme_tab[*p]->type == phVOWEL) && !(phoneme_tab[*p]->phflags & phNONSYLLABIC)) { - if(vowel_stress[ix] != 0) - *word++ = stress_phonemes[vowel_stress[ix]]; + if((vowel_stress[ix] == 0) || (vowel_stress[ix] > 1)) + *word++ = stress_phonemes[(unsigned char)vowel_stress[ix]]; ix++; } @@ -1073,7 +1072,7 @@ void SetWordStress(Translator *tr, char *output, unsigned int *dictionary_flags, int done; int stressflags; - unsigned char vowel_stress[N_WORD_PHONEMES/2]; + signed char vowel_stress[N_WORD_PHONEMES/2]; char syllable_weight[N_WORD_PHONEMES/2]; char vowel_length[N_WORD_PHONEMES/2]; unsigned char phonetic[N_WORD_PHONEMES]; @@ -1116,12 +1115,15 @@ void SetWordStress(Translator *tr, char *output, unsigned int *dictionary_flags, } max_stress = GetVowelStress(tr, phonetic, vowel_stress, vowel_count, stressed_syllable, 1); - - if((max_stress == 0) && (tr->langopts.stress_flags & 1) && (vowel_count == 2)) + if(max_stress < 0) { - // option: don't stress monosyllables except at end-of-clause - vowel_stress[1] = 1; - dictionary_flags[0] |= FLAG_STRESS_END2; + if((tr->langopts.stress_flags & 1) && (vowel_count == 2)) + { + // lang=fr: don't stress monosyllables except at end-of-clause + vowel_stress[1] = 0; + dictionary_flags[0] |= FLAG_STRESS_END2; + } + max_stress = 0; } // heavy or light syllables @@ -1233,7 +1235,7 @@ void SetWordStress(Translator *tr, char *output, unsigned int *dictionary_flags, } } - if(vowel_stress[stressed_syllable] == 1) + if((vowel_stress[stressed_syllable] == 0) || (vowel_stress[stressed_syllable] == 1)) { // but this vowel is explicitly marked as unstressed if(stressed_syllable > 1) @@ -1248,7 +1250,7 @@ void SetWordStress(Translator *tr, char *output, unsigned int *dictionary_flags, } // only set the stress if it's not already marked explicitly - if(vowel_stress[stressed_syllable] == 0) + if(vowel_stress[stressed_syllable] < 0) { // don't stress if next and prev syllables are stressed if((vowel_stress[stressed_syllable-1] < 4) || (vowel_stress[stressed_syllable+1] < 4)) @@ -1267,7 +1269,7 @@ void SetWordStress(Translator *tr, char *output, unsigned int *dictionary_flags, while(stressed_syllable > 0) { // find the last vowel which is not unstressed - if(vowel_stress[stressed_syllable] == 0) + if(vowel_stress[stressed_syllable] < 0) { vowel_stress[stressed_syllable] = 4; break; @@ -1329,7 +1331,7 @@ void SetWordStress(Translator *tr, char *output, unsigned int *dictionary_flags, // find the heaviest syllable, excluding the final syllable for(ix = 1; ix < (vowel_count-1); ix++) { - if(vowel_stress[ix] == 0) + if(vowel_stress[ix] < 0) { if((wt = syllable_weight[ix]) >= max_weight) { @@ -1377,7 +1379,7 @@ void SetWordStress(Translator *tr, char *output, unsigned int *dictionary_flags, case 9: // mark all as stressed for(ix=1; ix 2) && (vowel_stress[2] >= 4)) @@ -1411,7 +1413,7 @@ void SetWordStress(Translator *tr, char *output, unsigned int *dictionary_flags, done = 0; for(v=1; v 1) && (max_stress >= 4) && (stressflags & 4) && (v == (vowel_count-1))) { // option: mark unstressed final syllable as diminished - v_stress = 1; + v_stress = 0; } else if((stressflags & 2) || (v == 1) || (v == (vowel_count-1))) { // first or last syllable, or option 'don't set diminished stress' - v_stress = 0; + v_stress = 1; } else if((v == (vowel_count-2)) && (vowel_stress[vowel_count-1] <= 1)) { // penultimate syllable, followed by an unstressed final syllable - v_stress = 0; + v_stress = 1; } else { // unstressed syllable within a word - if((vowel_stress[v-1] != 1) || ((stressflags & 0x10000) == 0)) + if((vowel_stress[v-1] < 0) || ((stressflags & 0x10000) == 0)) { - v_stress = 1; /* change from 0 (unstressed) to 1 (diminished stress) */ + v_stress = 0; /* change to 0 (diminished stress) */ vowel_stress[v] = v_stress; } } } - if(v_stress > 0) - *output++ = stress_phonemes[v_stress]; // mark stress of all vowels except 0 (unstressed) + if((v_stress == 0) || (v_stress > 1)) + *output++ = stress_phonemes[v_stress]; // mark stress of all vowels except 1 (unstressed) if(vowel_stress[v] > max_stress) @@ -2830,39 +2832,39 @@ void ApplySpecialAttribute(Translator *tr, char *phonemes, int dict_flags) // common letter pairs, encode these as a single byte static const short pairs_ru[] = { -0x010c, // ла 21052 0x23 -0x010e, // на 18400 -0x0113, // та 14254 -0x0301, // ав 31083 -0x030f, // ов 13420 -0x060e, // не 21798 -0x0611, // ре 19458 -0x0903, // ви 16226 -0x0b01, // ак 14456 -0x0b0f, // ок 17836 -0x0c01, // ал 13324 -0x0c09, // ил 16877 -0x0e01, // ан 15359 -0x0e06, // ен 13543 0x30 -0x0e09, // ин 17168 -0x0e0e, // нн 15973 -0x0e0f, // он 22373 -0x0e1c, // ын 15052 -0x0f03, // во 24947 -0x0f11, // ро 13552 -0x0f12, // со 16368 -0x100f, // оп 19054 -0x1011, // рп 17067 -0x1101, // ар 23967 -0x1106, // ер 18795 -0x1109, // ир 13797 -0x110f, // ор 21737 -0x1213, // тс 25076 -0x1220, // яс 14310 +0x010c, // ла 21052 0x23 +0x010e, // на 18400 +0x0113, // та 14254 +0x0301, // ав 31083 +0x030f, // ов 13420 +0x060e, // не 21798 +0x0611, // ре 19458 +0x0903, // ви 16226 +0x0b01, // ак 14456 +0x0b0f, // ок 17836 +0x0c01, // ал 13324 +0x0c09, // ил 16877 +0x0e01, // ан 15359 +0x0e06, // ен 13543 0x30 +0x0e09, // ин 17168 +0x0e0e, // нн 15973 +0x0e0f, // он 22373 +0x0e1c, // ын 15052 +0x0f03, // во 24947 +0x0f11, // ро 13552 +0x0f12, // со 16368 +0x100f, // оп 19054 +0x1011, // рп 17067 +0x1101, // ар 23967 +0x1106, // ер 18795 +0x1109, // ир 13797 +0x110f, // ор 21737 +0x1213, // тс 25076 +0x1220, // яс 14310 0x7fff}; -//0x040f ог 12976 -//0x1306 ет 12826 -//0x0f0d мо 12688 +//0x040f ог 12976 +//0x1306 ет 12826 +//0x0f0d мо 12688 int TransposeAlphabet(char *text, int offset, int min, int max) @@ -2985,7 +2987,6 @@ static const char *LookupDict2(Translator *tr, const char *word, const char *wor wlen = strlen(word); } - hash = HashDictionary(word); p = tr->dict_hashtab[hash]; diff --git a/src/espeak.cpp b/src/espeak.cpp index 766734e9..38f2b8a5 100644 --- a/src/espeak.cpp +++ b/src/espeak.cpp @@ -37,8 +37,8 @@ static const char *help_text = "\nspeak [options] [\"\"]\n\n" "-f Text file to speak\n" "--stdin Read text input from stdin instead of a file\n\n" -"If neither -f nor --stdin, are spoken, or if none then text is\n" -"spoken from stdin, each line separately.\n\n" +"If neither -f nor --stdin, then are spoken, or if none then text\n" +"is spoken from stdin, each line separately.\n\n" "-a \n" "\t Amplitude, 0 to 200, default is 100\n" "-g \n" @@ -63,11 +63,11 @@ static const char *help_text = "--stdout Write speech output to stdout\n" "--compile=\n" "\t Compile the pronunciation rules and dictionary in the current\n" -"\t directory. = is optional and specifies which language\n" +"\t directory. specifies the language\n" "--path=\"\"\n" "\t Specifies the directory containing the espeak-data directory\n" "--phonout=\"\"\n" -"\t Write output from -x -X commands and mbrola phoneme data to this file\n" +"\t Write output from -x -X commands, and mbrola phoneme data, to this file\n" "--punct=\"\"\n" "\t Speak the names of punctuation characters during speaking. If\n" "\t = is omitted, all punctuation is spoken.\n" @@ -78,7 +78,7 @@ static const char *help_text = "\t If is omitted, then list all voices.\n" "-k \n" "\t Indicate capital letters with: 1=sound, 2=the word \"capitals\",\n" -"\t higher values = a pitch increase (try -k20).\n"; +"\t higher values indicate a pitch increase (try -k20).\n"; diff --git a/src/espeakedit.cpp b/src/espeakedit.cpp index 216f071a..ddaaba43 100755 --- a/src/espeakedit.cpp +++ b/src/espeakedit.cpp @@ -62,7 +62,7 @@ extern void ConvertToUtf8(); extern void FormatDictionary(const char *dictname); extern void init_z(); -extern void CompileInit(void); +extern void CompilePhonemeData(void); extern void CompileMbrola(); extern void InitSpectrumDisplay(); extern void InitProsodyDisplay(); @@ -146,7 +146,7 @@ extern void VoiceReset(int control); if(strcmp(param,"--compile")==0) { - CompileInit(); + CompilePhonemeData(); exit(0); } } @@ -558,7 +558,7 @@ void MyFrame::OnTools(wxCommandEvent& event) break; case MENU_COMPILE_PH: - CompileInit(); + CompilePhonemeData(); break; case MENU_COMPILE_MBROLA: diff --git a/src/extras.cpp b/src/extras.cpp index dc453958..2b788906 100644 --- a/src/extras.cpp +++ b/src/extras.cpp @@ -232,7 +232,7 @@ static void DecodePhonemes2(const char *inptr, char *outptr) if((ph = phoneme_tab[phcode]) == NULL) continue; - if((ph->type == phSTRESS) && (ph->std_length <= 4) && (ph->spect == 0)) + if((ph->type == phSTRESS) && (ph->std_length <= 4) && (ph->program == 0)) { if(ph->std_length > 2) *outptr++ = stress_chars[ph->std_length]; @@ -305,7 +305,7 @@ void Lexicon_It(int pass) FILE *f_in; FILE *f_out; FILE *f_listx; - FILE *f_list_in; + FILE *f_list_in = NULL; long int displ; const char *alt_string; char buf[200]; @@ -1322,8 +1322,8 @@ void FormatDictionary(const char *dictname) char *p_start; unsigned short *pw; unsigned short *pw_match; - unsigned short *pw_post; - unsigned short *pw_phonemes; + unsigned short *pw_post = NULL; + unsigned short *pw_phonemes = NULL; int c; int ix; int n_pre; @@ -1733,6 +1733,7 @@ void Test2() const char* text1 = "Hello world. Testing."; +extern void TestCompile2(void); void TestTest(int control) {//======================= @@ -1747,8 +1748,6 @@ void TestTest(int control) //CharsetToUnicode("ISO-8859-4"); //CharsetToUnicode("ISCII"); -return; - if(control==2) { return; @@ -1778,8 +1777,8 @@ if(control==2) espeak_SetSynthCallback(TestSynthCallback); espeak_SetUriCallback(TestUriCallback); - espeak_Synth(text1, strlen(text1)+1, 0, POS_CHARACTER, 0, espeakSSML|espeakCHARS_UTF8, &unique_identifier, (void *)user_data); - espeak_Synth(text1, strlen(text1)+1, 0, POS_CHARACTER, 0, espeakSSML|espeakCHARS_UTF8, &unique_identifier, (void *)(user_data+1)); + espeak_Synth(textbuf, strlen(textbuf)+1, 0, POS_CHARACTER, 0, espeakSSML|espeakCHARS_UTF8, &unique_identifier, (void *)user_data); +// espeak_Synth(text1, strlen(text1)+1, 0, POS_CHARACTER, 0, espeakSSML|espeakCHARS_UTF8, &unique_identifier, (void *)(user_data+1)); espeak_SetParameter(espeakPUNCTUATION, 1, 0); espeak_Synchronize(); diff --git a/src/intonation.cpp b/src/intonation.cpp index d35ae1b6..164c94cc 100755 --- a/src/intonation.cpp +++ b/src/intonation.cpp @@ -840,7 +840,7 @@ static void CalcPitches_Tone(Translator *tr, int clause_tone) p->tone_ph = PhonemeCode2('4','4'); // tone 5 is unstressed (shorter) - p->stresslevel = 1; // diminished stress + p->stresslevel = 0; // diminished stress } } @@ -859,7 +859,7 @@ static void CalcPitches_Tone(Translator *tr, int clause_tone) { tone_ph = p->tone_ph; - if(p->stresslevel != 1) // TEST, consider all syllables as stressed + if(p->stresslevel != 0) // TEST, consider all syllables as stressed { if(ix == final_stressed) { diff --git a/src/klatt.cpp b/src/klatt.cpp index 2768ceb6..955540c6 100644 --- a/src/klatt.cpp +++ b/src/klatt.cpp @@ -241,8 +241,6 @@ static int parwave(klatt_frame_ptr frame) static double sourc; int ix; - frame_init(frame); /* get parameters for next frame of speech */ - flutter(frame); /* add f0 flutter */ #ifdef LOG_FRAMES @@ -468,7 +466,7 @@ if(option_log_frames) { temp = 32767.0; } - + *out_ptr++ = int(temp); *out_ptr++ = int(temp) >> 8; sample_count++; @@ -483,28 +481,36 @@ if(option_log_frames) -/* -function PARWAVE_INIT -Initialises all parameters used in parwave, sets resonator internal memory -to zero. -*/ - -static void reset_resonators() +void KlattReset(int control) { int r_ix; -#ifdef LOG_FRAMES -if(option_log_frames) -{ - FILE *f_log; - f_log=fopen("log-klatt","a"); - if(f_log != NULL) + + if(control == 2) { - fprintf(f_log,"Reset\n"); - fclose(f_log); + //Full reset + kt_globals.FLPhz = (950 * kt_globals.samrate) / 10000; + kt_globals.BLPhz = (630 * kt_globals.samrate) / 10000; + kt_globals.minus_pi_t = -PI / kt_globals.samrate; + kt_globals.two_pi_t = -2.0 * kt_globals.minus_pi_t; + setabc(kt_globals.FLPhz,kt_globals.BLPhz,&(kt_globals.rsn[RLP])); + + } + + if(control > 0) + { + kt_globals.nper = 0; + kt_globals.T0 = 0; + kt_globals.nopen = 0; + kt_globals.nmod = 0; + + for(r_ix=RGL; r_ix < N_RSN; r_ix++) + { + kt_globals.rsn[r_ix].p1 = 0; + kt_globals.rsn[r_ix].p2 = 0; + } + } -} -#endif for(r_ix=0; r_ix <= R6p; r_ix++) { @@ -514,22 +520,6 @@ if(option_log_frames) } -void KlattReset() -{ - kt_globals.FLPhz = (950 * kt_globals.samrate) / 10000; - kt_globals.BLPhz = (630 * kt_globals.samrate) / 10000; - kt_globals.minus_pi_t = -PI / kt_globals.samrate; - kt_globals.two_pi_t = -2.0 * kt_globals.minus_pi_t; - setabc(kt_globals.FLPhz,kt_globals.BLPhz,&(kt_globals.rsn[RLP])); - kt_globals.nper = 0; - kt_globals.T0 = 0; - kt_globals.nopen = 0; - kt_globals.nmod = 0; - - reset_resonators(); -} - - /* function FRAME_INIT @@ -996,6 +986,7 @@ int Wavegen_Klatt(int resume) int pk; int x; int ix; + int fade; if(resume==0) { @@ -1071,22 +1062,37 @@ int Wavegen_Klatt(int resume) if(kt_globals.nspfr > STEPSIZE) kt_globals.nspfr = STEPSIZE; + frame_init(&kt_frame); /* get parameters for next frame of speech */ + if(parwave(&kt_frame) == 1) { - return(1); + return(1); // output buffer is full } } - if(end_wave == 1) + if(end_wave > 0) { +#ifdef deleted + if(end_wave == 2) + { + fade = (kt_globals.T0 - kt_globals.nper)/4; // samples until end of current cycle + if(fade < 64) + fade = 64; + } + else +#endif + { + fade = 64; // not followd by formant synthesis + } + // fade out to avoid a click - kt_globals.fadeout = 64; + kt_globals.fadeout = fade; end_wave = 0; - sample_count -= 64; - kt_globals.nspfr = 64; + sample_count -= fade; + kt_globals.nspfr = fade; if(parwave(&kt_frame) == 1) { - return(1); + return(1); // output buffer is full } } @@ -1100,6 +1106,7 @@ void SetSynth_Klatt(int length, int modn, frame_t *fr1, frame_t *fr2, voice_t *v DOUBLEX next; int qix; int cmd; + frame_t *fr3; static frame_t prev_fr; if(wvoice != NULL) @@ -1129,6 +1136,17 @@ void SetSynth_Klatt(int length, int modn, frame_t *fr1, frame_t *fr2, voice_t *v if(cmd==WCMD_KLATT) { end_wave = 0; // next wave generation is from another spectrum + + fr3 = (frame_t *)wcmdq[qix][2]; + for(ix=1; ix<6; ix++) + { + if(fr3->ffreq[ix] != fr2->ffreq[ix]) + { + // there is a discontinuity in formants + end_wave = 2; + break; + } + } break; } if((cmd==WCMD_WAVE) || (cmd==WCMD_PAUSE)) @@ -1162,39 +1180,18 @@ if(option_log_frames) if(control & 1) { - if(wdata.prev_was_synth == 0) + for(ix=1; ix<6; ix++) { - // A break, not following on from another synthesized sound. - // Reset the synthesizer - KlattReset(); - } - else - { - for(ix=1; ix<6; ix++) + if(prev_fr.ffreq[ix] != fr1->ffreq[ix]) { - if(prev_fr.ffreq[ix] != fr1->ffreq[ix]) - { - // Discontinuity in formants. - // fade out to avoid a click, but only up to the end of output buffer - ix = (out_end - out_ptr)/2; - if(ix > 64) - ix = 64; - kt_globals.fadeout = ix; - kt_globals.nspfr = ix; - parwave(&kt_frame); - reset_resonators(); - break; - } + // Discontinuity in formants. + // end_wave was set in SetSynth_Klatt() to fade out the previous frame + KlattReset(0); + break; } } - wdata.prev_was_synth = 1; memcpy(&prev_fr,fr2,sizeof(prev_fr)); } - if(fr2->frflags & FRFLAG_BREAK) - { -// fr2 = fr1; -// reset_resonators(&kt_globals); - } for(ix=0; ixphonemes -static int ChangePhonemes(Translator *tr, PHONEME_LIST2 *phlist, int n_ph, int index, PHONEME_TAB *ph, CHANGEPH *ch) -{//================================================================================================================= -// Called for each phoneme in the phoneme list, to allow a language to make changes -// ph The current phoneme - - if(tr->translator_name == L('r','u')) - return(ChangePhonemes_ru(tr, phlist, n_ph, index, ph, ch)); - - return(0); -} - - -static int SubstitutePhonemes(Translator *tr, PHONEME_LIST2 *plist_out) -{//==================================================================== +static int SubstitutePhonemes(Translator *tr, PHONEME_LIST *plist_out) +{//=================================================================== // Copy the phonemes list and perform any substitutions that are required for the // current voice int ix; @@ -59,14 +47,8 @@ static int SubstitutePhonemes(Translator *tr, PHONEME_LIST2 *plist_out) int replace_flags; int n_plist_out = 0; int word_end; - int max_stress = -1; int switched_language = 0; - int max_stress_posn=0; - int n_syllables = 0; - int syllable = 0; - int syllable_stressed = 0; PHONEME_LIST2 *plist2; - PHONEME_LIST2 *pl; PHONEME_TAB *next=NULL; for(ix=0; (ix < n_ph_list2) && (n_plist_out < N_PHONEME_LIST); ix++) @@ -86,66 +68,6 @@ static int SubstitutePhonemes(Translator *tr, PHONEME_LIST2 *plist_out) if((plist2+1)->sourceix || ((next != 0) && (next->type == phPAUSE))) word_end = 1; // this phoneme is the end of a word - if(tr->langopts.phoneme_change != 0) - { - // this language does changes to phonemes after translation - - if(plist2->sourceix) - { - // start of a word, find the stressed vowel - syllable = 0; - syllable_stressed = 0; - n_syllables = 0; - - max_stress = -1; - max_stress_posn = ix; - for(k=ix; k < n_ph_list2; k++) - { - if(((pl = &ph_list2[k])->sourceix != 0) && (k > ix)) - break; - - pl->stresslevel &= 0xf; - - if(phoneme_tab[pl->phcode]->type == phVOWEL) - { - n_syllables++; - - if(pl->stresslevel > max_stress) - { - syllable_stressed = n_syllables; - max_stress = pl->stresslevel; - max_stress_posn = k; - } - } - } - } - - if(phoneme_tab[plist2->phcode]->type == phVOWEL) - { - syllable++; - } - - // make any language specific changes - int flags; - CHANGEPH ch; - flags = 0; - if(ix == max_stress_posn) - flags |= 2; - if(ix > max_stress_posn) - flags |= 4; - if(ph_list2[ix].synthflags & SFLAG_DICTIONARY) - flags |= 8; - ch.flags = flags | word_end; - - ch.stress = plist2->stresslevel; - ch.stress_highest = max_stress; - ch.n_vowels = n_syllables; - ch.vowel_this = syllable; - ch.vowel_stressed = syllable_stressed; - - ChangePhonemes(tr, ph_list2, n_ph_list2, ix, phoneme_tab[ph_list2[ix].phcode], &ch); - } - // check whether a Voice has specified that we should replace this phoneme for(k=0; kphflags & phALTERNATIVE)==phSWITCHVOICING)) + if((voicing==2) && (ph->end_type != 0)) // use end_type field for voicing_switch for consonants { - plist2[j].phcode = ph->alternative_ph; // change to voiced equivalent + plist2[j].phcode = ph->end_type; // change to voiced equivalent } } else @@ -284,9 +211,9 @@ void MakePhonemeList(Translator *tr, int post_pause, int start_sentence) voicing = 2; } else - if((voicing==1) && ((ph->phflags & phALTERNATIVE)==phSWITCHVOICING)) + if((voicing==1) && (ph->end_type != 0)) { - plist2[j].phcode = ph->alternative_ph; // change to unvoiced equivalent + plist2[j].phcode = ph->end_type; // change to unvoiced equivalent } } else @@ -310,47 +237,56 @@ void MakePhonemeList(Translator *tr, int post_pause, int start_sentence) } } - n_ph_list2 = SubstitutePhonemes(tr,ph_list3) - 2; + n_ph_list3 = SubstitutePhonemes(tr,ph_list3) - 2; // transfer all the phonemes of the clause into phoneme_list ph = phoneme_tab[phonPAUSE]; + ph_list3[0].ph = ph; + switched_language = 0; - for(j=0; insert_ph || ((j < n_ph_list2) && (ix < N_PHONEME_LIST-3)); j++) + for(j=0; insert_ph || ((j < n_ph_list3) && (ix < N_PHONEME_LIST-3)); j++) { prev = ph; - plist2 = &ph_list3[j]; + plist3 = &ph_list3[j]; if(insert_ph != 0) { // we have a (linking) phoneme which we need to insert here - next = phoneme_tab[plist2->phcode]; // this phoneme, i.e. after the insert + next = phoneme_tab[plist3->phcode]; // this phoneme, i.e. after the insert // re-use the previous entry for the inserted phoneme. - // That's OK because we don't look backwards from plist2 + // That's OK because we don't look backwards from plist3 j--; - plist2 = plist2_inserted = &ph_list3[j]; - memset(plist2, 0, sizeof(*plist2)); - plist2->phcode = insert_ph; + plist3 = plist3_inserted = &ph_list3[j]; + if(j > 0) + { + memcpy(&plist3[-1], &plist3[0], sizeof(*plist3)); + } + memset(&plist3[0], 0, sizeof(*plist3)); + plist3->phcode = insert_ph; ph = phoneme_tab[insert_ph]; + plist3->ph = ph; insert_ph = 0; } else { // otherwise get the next phoneme from the list - ph = phoneme_tab[plist2->phcode]; + ph = phoneme_tab[plist3->phcode]; + plist3[0].ph = ph; - if(plist2->phcode == phonSWITCH) + if(plist3->phcode == phonSWITCH) { // change phoneme table - SelectPhonemeTable(plist2->tone_ph); + SelectPhonemeTable(plist3->tone_ph); switched_language ^= SFLAG_SWITCHED_LANG; } - next = phoneme_tab[(plist2+1)->phcode]; // the phoneme after this one + next = phoneme_tab[plist3[1].phcode]; // the phoneme after this one + plist3[1].ph = next; } - if(plist2->sourceix) + if(plist3->sourceix) { // start of a word int k; @@ -358,7 +294,7 @@ void MakePhonemeList(Translator *tr, int post_pause, int start_sentence) first_vowel = 1; // find the highest stress level in this word - for(k=j+1; k < n_ph_list2; k++) + for(k=j+1; k < n_ph_list3; k++) { if(ph_list3[k].sourceix) break; // start of the next word @@ -366,14 +302,46 @@ void MakePhonemeList(Translator *tr, int post_pause, int start_sentence) if(ph_list3[k].stresslevel > word_stress) word_stress = ph_list3[k].stresslevel; } + while(--k >= j) + { + ph_list3[k].wordstress = word_stress; + } } if(ph == NULL) continue; + InterpretPhoneme(tr, 0x100, plist3, &phdata); + + if((alternative = phdata.pd_param[pd_CHANGEPHONEME]) == 1) + continue; // NULL phoneme, discard + + if(alternative > 1) + { + PHONEME_TAB *ph2; + ph2 = ph; + ph = phoneme_tab[alternative]; + plist3->phcode = alternative; + plist3->ph = ph; + + if(ph->type == phVOWEL) + { + plist3->synthflags |= SFLAG_SYLLABLE; + if(ph2->type != phVOWEL) + plist3->stresslevel = 0; // change from non-vowel to vowel, make sure it's unstressed + } + else + plist3->synthflags &= ~SFLAG_SYLLABLE; + + // re-interpret the changed phoneme + // But it doesn't obey a second ChangePhoneme() + InterpretPhoneme(tr, 0x100, plist3, &phdata); + } + if(ph->type == phVOWEL) { - // check for consecutive unstressed syllables - if(plist2->stresslevel == 0) + // Check for consecutive unstressed syllables, even across word boundaries. + // Do this after changing phonemes according to stress level. + if(plist3->stresslevel == 1) { // an unstressed vowel unstress_count++; @@ -381,14 +349,14 @@ void MakePhonemeList(Translator *tr, int post_pause, int start_sentence) { // in a sequence of unstressed syllables, reduce alternate syllables to 'diminished' // stress. But not for the last phoneme of a stressed word - if((tr->langopts.stress_flags & 0x2) || ((word_stress > 3) && ((plist2+1)->sourceix!=0))) + if((tr->langopts.stress_flags & 0x2) || ((word_stress > 3) && ((plist3+1)->sourceix!=0))) { // An unstressed final vowel of a stressed word unstress_count=1; // try again for next syllable } else { - plist2->stresslevel = 1; // change stress to 'diminished' + plist3->stresslevel = 0; // change stress to 'diminished' } } } @@ -398,82 +366,21 @@ void MakePhonemeList(Translator *tr, int post_pause, int start_sentence) } } - alternative = 0; - - if(ph->alternative_ph > 0) - { - switch(ph->phflags & phALTERNATIVE) - { - // This phoneme changes if vowel follows, or doesn't follow, depending on its phNOTFOLLOWS flag - case phBEFORENOTVOWEL: - if(next->type != phVOWEL) - alternative = ph->alternative_ph; - break; - - case phBEFORENOTVOWEL2: // LANG=tr - if(((plist2+1)->sourceix != 0) || - ((next->type != phVOWEL) && ((phoneme_tab[(plist2+2)->phcode]->type != phVOWEL) || ((plist2+2)->sourceix != 0)))) - { - alternative = ph->alternative_ph; - } - break; - - case phBEFOREVOWELPAUSE: - if((next->type == phVOWEL) || (next->type == phPAUSE)) - alternative = ph->alternative_ph; - break; - - case phBEFOREVOWEL: - if(next->type == phVOWEL) - alternative = ph->alternative_ph; - break; - - case phBEFORE_R: - if(next->phflags & phRHOTIC) - { - alternative = ph->alternative_ph; - } - break; - } - } - if(ph->phflags & phBEFOREPAUSE) - { - if(next->type == phPAUSE) - alternative = ph->link_out; // replace with the link_out phoneme - } - - if(alternative == 1) - continue; // NULL phoneme, discard - - if(alternative > 1) - { - PHONEME_TAB *ph2; - ph2 = ph; - ph = phoneme_tab[alternative]; - - if(ph->type == phVOWEL) - { - plist2->synthflags |= SFLAG_SYLLABLE; - if(ph2->type != phVOWEL) - plist2->stresslevel = 0; // change from non-vowel to vowel, make sure it's unstressed - } - else - plist2->synthflags &= ~SFLAG_SYLLABLE; - } - +#ifdef deleted if(tr->langopts.param[LOPT_REDUCE_T]) { - if((ph->mnemonic == 't') && (plist2->sourceix == 0) && ((prev->type == phVOWEL) || (prev->mnemonic == 'n'))) + if((ph->mnemonic == 't') && (plist3->sourceix == 0) && ((prev->type == phVOWEL) || (prev->mnemonic == 'n'))) { - if(((plist2+1)->sourceix == 0) && ((plist2+1)->stresslevel < 3) && (next->type == phVOWEL)) + if(((plist3+1)->sourceix == 0) && ((plist3+1)->stress < 3) && (next->type == phVOWEL)) { ph = phoneme_tab[phonT_REDUCED]; } } } +#endif - - while((ph->reduce_to != 0) && (!(plist2->synthflags & SFLAG_DICTIONARY) || (tr->langopts.param[LOPT_REDUCE] & 1))) +#ifdef deleted + while((ph->reduce_to != 0) && (!(plist3->synthflags & SFLAG_DICTIONARY) || (tr->langopts.param[LOPT_REDUCE] & 1))) { int reduce_level; int stress_level; @@ -483,13 +390,13 @@ void MakePhonemeList(Translator *tr, int post_pause, int start_sentence) if(ph->type == phVOWEL) { - stress_level = plist2->stresslevel; + stress_level = plist3->stress; } else { // consonant, get stress from the following vowel if(next->type == phVOWEL) - stress_level = (plist2+1)->stresslevel; + stress_level = (plist3+1)->stress; else break; } @@ -514,22 +421,23 @@ void MakePhonemeList(Translator *tr, int post_pause, int start_sentence) else break; } +#endif if(ph->type == phVOWEL) first_vowel = 0; - if((plist2+1)->synthflags & SFLAG_LENGTHEN) + if((plist3+1)->synthflags & SFLAG_LENGTHEN) { static char types_double[] = {phFRICATIVE,phVFRICATIVE,phNASAL,phLIQUID,0}; if(strchr(types_double,next->type)) { // lengthen this consonant by doubling it insert_ph = next->code; - (plist2+1)->synthflags ^= SFLAG_LENGTHEN; + (plist3+1)->synthflags ^= SFLAG_LENGTHEN; } } - if((plist2+1)->sourceix != 0) + if((plist3+1)->sourceix != 0) { int x; @@ -562,7 +470,7 @@ void MakePhonemeList(Translator *tr, int post_pause, int start_sentence) insert_ph = phonPAUSE_VSHORT; } - if(((plist2+1)->stresslevel >= 4) && (tr->langopts.vowel_pause & 0x100)) + if(((plist3+1)->stresslevel >= 4) && (tr->langopts.vowel_pause & 0x100)) { // pause before a words which starts with a stressed vowel insert_ph = phonPAUSE_SHORT; @@ -570,7 +478,7 @@ void MakePhonemeList(Translator *tr, int post_pause, int start_sentence) } } - if(plist2 != plist2_inserted) + if(plist3 != plist3_inserted) { if((x = (tr->langopts.word_gap & 0x7)) != 0) { @@ -587,33 +495,12 @@ void MakePhonemeList(Translator *tr, int post_pause, int start_sentence) } } - next2 = phoneme_tab[(plist2+2)->phcode]; + next2 = phoneme_tab[plist3[2].phcode]; + plist3[2].ph = next2; - if((insert_ph == 0) && (ph->link_out != 0) && !(ph->phflags & phBEFOREPAUSE) && (((plist2+1)->synthflags & SFLAG_EMBEDDED)==0)) + if((insert_ph == 0) && (phdata.pd_param[pd_APPENDPHONEME] != 0)) { - if(ph->phflags & phAPPENDPH) - { - // always append the specified phoneme, unless it already is the next phoneme - if((ph->link_out != (plist2+1)->phcode) && (next->type == phVOWEL)) -// if(ph->link_out != (plist2+1)->phcode) - { - insert_ph = ph->link_out; - } - } - else - if(((tr->langopts.word_gap & 8)==0) || ((plist2+1)->sourceix == 0)) - { - // This phoneme can be linked to a following vowel by inserting a linking phoneme - if(next->type == phVOWEL) - insert_ph = ph->link_out; - else - if(next->code == phonPAUSE_SHORT) - { - // Pause followed by Vowel, replace the Short Pause with the linking phoneme, - if(next2->type == phVOWEL) - (plist2+1)->phcode = ph->link_out; // replace pause by linking phoneme - } - } + insert_ph = phdata.pd_param[pd_APPENDPHONEME]; } if(ph->phflags & phVOICED) @@ -627,14 +514,16 @@ void MakePhonemeList(Translator *tr, int post_pause, int start_sentence) phlist[ix].ph = ph; phlist[ix].type = ph->type; phlist[ix].env = PITCHfall; // default, can be changed in the "intonation" module - phlist[ix].synthflags = plist2->synthflags | switched_language; - phlist[ix].stresslevel = plist2->stresslevel & 0xf; - phlist[ix].tone_ph = plist2->tone_ph; + phlist[ix].synthflags = plist3->synthflags | switched_language; + phlist[ix].stresslevel = plist3->stresslevel & 0xf; + phlist[ix].wordstress = plist3->wordstress; + phlist[ix].tone_ph = plist3->tone_ph; phlist[ix].sourceix = 0; + phlist[ix].phcode = ph->code; - if(plist2->sourceix != 0) + if(plist3->sourceix != 0) { - phlist[ix].sourceix = plist2->sourceix; + phlist[ix].sourceix = plist3->sourceix; phlist[ix].newword = 1; // this phoneme is the start of a word if(start_sentence) @@ -648,7 +537,8 @@ void MakePhonemeList(Translator *tr, int post_pause, int start_sentence) phlist[ix].newword = 0; } - phlist[ix].length = ph->std_length; +// phlist[ix].length = ph->std_length; + phlist[ix].length = phdata.pd_param[i_SET_LENGTH]*2; if((ph->code == phonPAUSE_LONG) && (option_wordgap > 0)) { phlist[ix].ph = phoneme_tab[phonPAUSE_SHORT]; @@ -669,12 +559,14 @@ void MakePhonemeList(Translator *tr, int post_pause, int start_sentence) } phlist[ix].newword = 2; // end of clause + phlist[ix].phcode = phonPAUSE; phlist[ix].type = phPAUSE; // terminate with 2 Pause phonemes phlist[ix].length = post_pause; // length of the pause, depends on the punctuation phlist[ix].sourceix = end_sourceix; phlist[ix].synthflags = 0; - phlist[ix++].ph = phoneme_tab[phonPAUSE]; + + phlist[ix].phcode = phonPAUSE; phlist[ix].type = phPAUSE; phlist[ix].length = 0; phlist[ix].sourceix=0; diff --git a/src/prosodydisplay.cpp b/src/prosodydisplay.cpp index 12759e31..1a4c290e 100755 --- a/src/prosodydisplay.cpp +++ b/src/prosodydisplay.cpp @@ -28,6 +28,7 @@ #include "phoneme.h" #include "synthesize.h" #include "prosodydisplay.h" +#include "translate.h" extern MyFrame *myframe; extern ChildFrProsody *prosodyframe; @@ -113,7 +114,7 @@ int ProsodyDisplay::GetWidth(PHONEME_LIST *p) if(p->ph == NULL) return(0); - w = p->ph->std_length; + w = (p->ph->std_length * 2); if(w == 0) w = 60; if(p->length != 0) @@ -334,6 +335,7 @@ void ProsodyDisplay::DrawEnv(wxDC& dc, int x1, int y1, int width, PHONEME_LIST * int x,y; int y2=0; unsigned char *env; + PHONEME_DATA phdata_tone; if(width <= 0) return; @@ -354,7 +356,8 @@ void ProsodyDisplay::DrawEnv(wxDC& dc, int x1, int y1, int width, PHONEME_LIST * if((ph->type == phVOWEL) && (ph->tone_ph != 0)) { // the envelope is given by a Tone phoneme acting on this vowel - env = LookupEnvelope(phoneme_tab[ph->tone_ph]->spect); + InterpretPhoneme2(ph->tone_ph, &phdata_tone); + env = LookupEnvelope(phdata_tone.pitch_env); } for(ix=0; ix<=width; ix+=4) diff --git a/src/setlengths.cpp b/src/setlengths.cpp index 6fce8ed4..6d4c4335 100755 --- a/src/setlengths.cpp +++ b/src/setlengths.cpp @@ -298,6 +298,7 @@ void CalcLengths(Translator *tr) int emphasized; int tone_mod; unsigned char *pitch_env=NULL; + PHONEME_DATA phdata_tone; for(ix=1; ixamp = tr->stress_amps[1]; // unless changed later + p->amp = tr->stress_amps[0]; // unless changed later p->length = 256; // TEMPORARY min_drop = 0; @@ -474,6 +475,10 @@ void CalcLengths(Translator *tr) if(stress > 7) stress = 7; +if(stress <= 1) +{ + stress = stress ^ 1; // swap diminished and unstressed (until we swap stress_amps,stress_lengths in tr_languages) +} if(pre_sonorant) p->amp = tr->stress_amps[stress]-1; else @@ -562,7 +567,7 @@ void CalcLengths(Translator *tr) { length_mod += 20; } - + if((len = tr->stress_lengths[stress]) == 0) len = tr->stress_lengths[6]; @@ -580,7 +585,7 @@ void CalcLengths(Translator *tr) if(end_of_clause == 2) { // this is the last syllable in the clause, lengthen it - more for short vowels - len = p->ph->std_length; + len = (p->ph->std_length * 2); if(tr->langopts.stress_flags & 0x40000) len=200; // don't lengthen short vowels more than long vowels at end-of-clause length_mod = length_mod * (256 + (280 - len)/3)/256; @@ -608,7 +613,8 @@ if(p->type != phVOWEL) if(p->tone_ph != 0) { - pitch_env = LookupEnvelope(phoneme_tab[p->tone_ph]->spect); + InterpretPhoneme2(p->tone_ph, &phdata_tone); + pitch_env = LookupEnvelope(phdata_tone.pitch_env); } else { diff --git a/src/speak.cpp b/src/speak.cpp index 8ad86ca7..2ed30f56 100755 --- a/src/speak.cpp +++ b/src/speak.cpp @@ -69,8 +69,8 @@ static const char *help_text = "\nspeak [options] [\"\"]\n\n" "-f Text file to speak\n" "--stdin Read text input from stdin instead of a file\n\n" -"If neither -f nor --stdin, are spoken, or if none then text is\n" -"spoken from stdin, each line separately.\n\n" +"If neither -f nor --stdin, then are spoken, or if none then text\n" +"is spoken from stdin, each line separately.\n\n" "-a \n" "\t Amplitude, 0 to 200, default is 100\n" "-g \n" @@ -95,11 +95,11 @@ static const char *help_text = "--stdout Write speech output to stdout\n" "--compile=\n" "\t Compile the pronunciation rules and dictionary in the current\n" -"\t directory. = is optional and specifies which language\n" +"\t directory. specifies the language\n" "--path=\"\"\n" "\t Specifies the directory containing the espeak-data directory\n" "--phonout=\"\"\n" -"\t Write output from -x -X commands and mbrola phoneme data to this file\n" +"\t Write output from -x -X commands, and mbrola phoneme data, to this file\n" "--punct=\"\"\n" "\t Speak the names of punctuation characters during speaking. If\n" "\t = is omitted, all punctuation is spoken.\n" @@ -110,7 +110,7 @@ static const char *help_text = "\t If is omitted, then list all voices.\n" "-k \n" "\t Indicate capital letters with: 1=sound, 2=the word \"capitals\",\n" -"\t higher values = a pitch increase (try -k20).\n"; +"\t higher values indicate a pitch increase (try -k20).\n"; void DisplayVoices(FILE *f_out, char *language); diff --git a/src/spectdisplay.cpp b/src/spectdisplay.cpp index d170561c..46c72db0 100755 --- a/src/spectdisplay.cpp +++ b/src/spectdisplay.cpp @@ -171,6 +171,7 @@ void SpectDisplay::OnActivate(int active) } else { + formantdlg->GetValues(spectseq, sframe); ReadDialogValues(); } } diff --git a/src/spectseq.cpp b/src/spectseq.cpp index 1b55f3a6..c383d6d7 100755 --- a/src/spectseq.cpp +++ b/src/spectseq.cpp @@ -41,7 +41,7 @@ extern int Wavegen_Klatt(int resume); extern void SetSynth(int length, int modn, frame_t *fr1, frame_t *fr2, voice_t *v); extern int Wavegen(); extern void CloseWaveFile2(); -extern void KlattReset(); +extern void KlattReset(int control); extern FILE *f_wave; static int frame_width; @@ -1006,7 +1006,7 @@ void SpectSeq::MakeWave(int start, int end, PitchEnvelope &pitch) if(voice->klattv[0]) { synthesizer_type = 1; - KlattReset(); + KlattReset(2); } SpeakNextClause(NULL,NULL,2); // stop speaking file @@ -1125,7 +1125,7 @@ void SpectFrame::MakeWaveF(int control, PitchEnvelope &pitche, int amplitude, in if(voice->klattv[0]) { synthesizer_type = 1; - KlattReset(); + KlattReset(2); } SpeakNextClause(NULL,NULL,2); // stop speaking file diff --git a/src/synth_mbrola.cpp b/src/synth_mbrola.cpp index 1055f549..29873079 100755 --- a/src/synth_mbrola.cpp +++ b/src/synth_mbrola.cpp @@ -540,6 +540,8 @@ void MbrolaTranslate(PHONEME_LIST *plist, int n_phonemes, FILE *f_mbrola) PHONEME_LIST *p; PHONEME_LIST *next; PHONEME_LIST *prev; + PHONEME_DATA phdata; + FMT_PARAMS fmtp; int pause = 0; int released; int name2; @@ -655,10 +657,11 @@ void MbrolaTranslate(PHONEME_LIST *plist, int n_phonemes, FILE *f_mbrola) if(next->type==phVOWEL) released = 1; if(next->type==phLIQUID && !next->newword) released = 1; - if(released) - len = DoSample(p->ph,next->ph,2,0,-1); - else - len = DoSample(p->ph,phoneme_tab[phonPAUSE],2,0,-1); + if(released == 0) + p->synthflags |= SFLAG_NEXT_PAUSE; + InterpretPhoneme(NULL, 0, p, &phdata); + len = DoSample3(&phdata, 0, -1); + len = (len * 1000)/samplerate; // convert to mS len += PauseLength(p->prepause,1); break; @@ -669,9 +672,10 @@ void MbrolaTranslate(PHONEME_LIST *plist, int n_phonemes, FILE *f_mbrola) case phFRICATIVE: len = 0; + InterpretPhoneme(NULL, 0, p, &phdata); if(p->synthflags & SFLAG_LENGTHEN) - len = DoSample(ph,ph_next,2,p->length,-1); // play it twice for [s:] etc. - len += DoSample(ph,ph_next,2,p->length,-1); + len = DoSample3(&phdata, p->length, -1); // play it twice for [s:] etc. + len += DoSample3(&phdata, p->length, -1); len = (len * 1000)/samplerate; // convert to mS break; @@ -679,7 +683,12 @@ void MbrolaTranslate(PHONEME_LIST *plist, int n_phonemes, FILE *f_mbrola) case phNASAL: if(next->type != phVOWEL) { - len = DoSpect(p->ph,prev->ph,phoneme_tab[phonPAUSE],2,p,-1); + memset(&fmtp, 0, sizeof(fmtp)); + InterpretPhoneme(NULL, 0, p, &phdata); + fmtp.fmt_addr = phdata.sound_addr[pd_FMT]; + fmtp.fmt_length = phdata.sound_param[pd_FMT]; + len = DoSpect2(p->ph, 0, &fmtp, p, -1); +// len = DoSpect(p->ph,prev->ph,phoneme_tab[phonPAUSE],2,p,-1); len = (len * 1000)/samplerate; if(next->type == phPAUSE) len += 50; diff --git a/src/synthdata.cpp b/src/synthdata.cpp index 8ce681a0..48cbb3b3 100755 --- a/src/synthdata.cpp +++ b/src/synthdata.cpp @@ -35,8 +35,8 @@ #include "translate.h" #include "wave.h" -const char *version_string = "1.42.09 13.Dec.09"; -const int version_phdata = 0x014200; +const char *version_string = "1.42.21 19.Dec.09"; +const int version_phdata = 0x014220; int option_device_number = -1; FILE *f_logespeak = NULL; @@ -48,7 +48,7 @@ int current_phoneme_table; PHONEME_TAB *phoneme_tab[N_PHONEME_TAB]; unsigned char phoneme_tab_flags[N_PHONEME_TAB]; // bit 0: not inherited -static unsigned int *phoneme_index=NULL; +static USHORT *phoneme_index=NULL; char *spects_data=NULL; unsigned char *wavefile_data=NULL; static unsigned char *phoneme_tab_data = NULL; @@ -116,7 +116,7 @@ int LoadPhData() if((phoneme_tab_data = (unsigned char *)ReadPhFile((void *)(phoneme_tab_data),"phontab")) == NULL) return(-1); - if((phoneme_index = (unsigned int *)ReadPhFile((void *)(phoneme_index),"phonindex")) == NULL) + if((phoneme_index = (USHORT *)ReadPhFile((void *)(phoneme_index),"phonindex")) == NULL) return(-1); if((spects_data = ReadPhFile((void *)(spects_data),"phondata")) == NULL) return(-1); @@ -204,172 +204,9 @@ int LookupPhonemeString(const char *string) -static unsigned int LookupSound2(int index, unsigned int other_phcode, int control) -{//================================================================================ -// control=1 get formant transition data only - unsigned int code; - unsigned int value, value2; - - while((value = phoneme_index[index++]) != 0) - { - if((code = (value & 0xff)) == other_phcode) - { - while(((value2 = phoneme_index[index]) != 0) && ((value2 & 0xff) < 8)) - { - switch(value2 & 0xff) - { - case 0: - // next entry is a wavefile to be played along with the synthesis - if(control==0) - { - wavefile_ix = value2 >> 8; - } - break; - case 1: - if(control==0) - { - seq_len_adjust = value2 >> 8; - } - break; - case 2: - if(control==0) - { - seq_len_adjust = value2 >> 8; - seq_len_adjust = -seq_len_adjust; - } - break; - case 3: - if(control==0) - { - wavefile_amp = value2 >> 8; - } - break; - case 4: - // formant transition data, 2 words - vowel_transition[0] = value2 >> 8; - vowel_transition[1] = phoneme_index[index++ + 1]; - break; - case 5: - // formant transition data, 2 words - vowel_transition[2] = value2 >> 8; - vowel_transition[3] = phoneme_index[index++ + 1]; - break; - } - index++; - } - return(value >> 8); - } - else - if((code == 4) || (code == 5)) - { - // formant transition data, ignore next word of data - index++; - } - } - return(3); // not found -} // end of LookupSound2 - - -unsigned int LookupSound(PHONEME_TAB *this_ph, PHONEME_TAB *other_ph, int which, int *match_level, int control) -{//============================================================================================================ - // follows, 1 other_ph preceeds this_ph, 2 other_ph follows this_ph - // control: 1= get formant transition data only - int spect_list; - int spect_list2; - int s_list; - unsigned char virtual_ph; - int result; - int level=0; - unsigned int other_code; - unsigned int other_virtual; - - if(control==0) - { - wavefile_ix = 0; - wavefile_amp = 32; - seq_len_adjust = 0; - } - memset(vowel_transition,0,sizeof(vowel_transition)); - - other_code = other_ph->code; - if(phoneme_tab[other_code]->type == phPAUSE) - other_code = phonPAUSE_SHORT; // use this version of Pause for matching - - if(which==1) - { - spect_list = this_ph->after; - virtual_ph = this_ph->start_type; - spect_list2 = phoneme_tab[virtual_ph]->after; - other_virtual = other_ph->end_type; - } - else - { - spect_list = this_ph->before; - virtual_ph = this_ph->end_type; - spect_list2 = phoneme_tab[virtual_ph]->before; - other_virtual = other_ph->start_type; - } - - result = 3; - // look for ph1-ph2 combination - if((s_list = spect_list) != 0) - { - if((result = LookupSound2(s_list,other_code,control)) != 3) - { - level = 2; - } - else - if(other_virtual != 0) - { - if((result = LookupSound2(spect_list,other_virtual,control)) != 3) - { - level = 1; - } - } - } - // not found, look in a virtual phoneme if one is given for this phoneme - if((result==3) && (virtual_ph != 0) && ((s_list = spect_list2) != 0)) - { - if((result = LookupSound2(s_list,other_code,control)) != 3) - { - level = 1; - } - else - if(other_virtual != 0) - { - if((result = LookupSound2(spect_list2,other_virtual,control)) != 3) - { - level = 1; - } - } - } - - if(match_level != NULL) - *match_level = level; - - if(result==0) - return(0); // NULL was given in the phoneme source - - // note: values = 1 indicates use the default for this phoneme, even though we found a match - // which set a secondary reference - if(result >= 4) - { - // values 1-3 can be used for special codes - // 1 = DFT from the phoneme source file - return(result); - } - - // no match found for other_ph, return the default - return(LookupSound2(this_ph->spect,phonPAUSE,control)); - -} // end of LookupSound - - - -frameref_t *LookupSpect(PHONEME_TAB *this_ph, PHONEME_TAB *prev_ph, PHONEME_TAB *next_ph, - int which, int *match_level, int *n_frames, PHONEME_LIST *plist) -{//========================================================================================================= +frameref_t *LookupSpect(PHONEME_TAB *this_ph, int which, FMT_PARAMS *fmt_params, int *n_frames, PHONEME_LIST *plist) +{//=================================================================================================================== int ix; int nf; int nf1; @@ -380,19 +217,10 @@ frameref_t *LookupSpect(PHONEME_TAB *this_ph, PHONEME_TAB *prev_ph, PHONEME_TAB int length_factor; SPECT_SEQ *seq, *seq2; SPECT_SEQK *seqk, *seqk2; - PHONEME_TAB *next2_ph; frame_t *frame; static frameref_t frames_buf[N_SEQ_FRAMES]; - PHONEME_TAB *other_ph; - if(which == 1) - other_ph = prev_ph; - else - other_ph = next_ph; - - if((ix = LookupSound(this_ph,other_ph,which,match_level,0)) < 4) - return(NULL); - seq = (SPECT_SEQ *)(&spects_data[ix]); + seq = (SPECT_SEQ *)(&spects_data[fmt_params->fmt_addr]); seqk = (SPECT_SEQK *)seq; nf = seq->n_frames; @@ -400,8 +228,8 @@ frameref_t *LookupSpect(PHONEME_TAB *this_ph, PHONEME_TAB *prev_ph, PHONEME_TAB if(nf >= N_SEQ_FRAMES) nf = N_SEQ_FRAMES - 1; + seq_len_adjust = fmt_params->fmt2_lenadj + fmt_params->fmt_length; seq_break = 0; - length1 = 0; for(ix=0; ixtype == phVOWEL) + if((this_ph->type == phVOWEL) && (fmt_params->fmt2_addr == 0) && (fmt_params->use_vowelin)) { - if((which==2) && ((frames[nf-1].frflags & FRFLAG_BREAK) == 0)) - { - // lookup formant transition for the following phoneme - - if((*match_level == 0) || (next_ph->type == phNASAL)) - { - LookupSound(next_ph,this_ph,1,NULL,1); - seq_len_adjust += FormantTransition2(frames,nf,vowel_transition[2],vowel_transition[3],next_ph,which); - } - else - if(next_ph->phflags == phVOWEL2) - { - // not really a consonant, rather a coloured vowel - if(LookupSound(next_ph,this_ph,1,NULL,1) == 0) - { - next2_ph = plist[2].ph; - LookupSound(next2_ph,next_ph,1,NULL,1); - seq_len_adjust += FormantTransition2(frames,nf,vowel_transition[2],vowel_transition[3],next2_ph,which); - } - } - } - else - { - if(*match_level == 0) - seq_len_adjust = FormantTransition2(frames,nf,vowel_transition0,vowel_transition1,prev_ph,which); - } + seq_len_adjust += FormantTransition2(frames,nf,fmt_params->transition0,fmt_params->transition1,NULL,which); } + length1 = 0; nf1 = nf - 1; for(ix=0; ixfmt2_addr != 0) { // a secondary reference has been returned, which is not a wavefile // add these spectra to the main sequence - seq2 = (SPECT_SEQ *)(&spects_data[wavefile_ix]); + seq2 = (SPECT_SEQ *)(&spects_data[fmt_params->fmt2_addr]); seqk2 = (SPECT_SEQK *)seq2; // first frame of the addition just sets the length of the last frame of the main seq @@ -493,18 +296,18 @@ frameref_t *LookupSpect(PHONEME_TAB *this_ph, PHONEME_TAB *prev_ph, PHONEME_TAB wavefile_ix = 0; } - if((this_ph->type == phVOWEL) && (length1 > 0)) + if(length1 > 0) { if(which==2) { // adjust the length of the main part to match the standard length specified for the vowel // less the front part of the vowel and any added suffix - - length_std = this_ph->std_length + seq_len_adjust - 45; + + length_std = fmt_params->std_length + seq_len_adjust - 45; if(length_std < 10) length_std = 10; if(plist->synthflags & SFLAG_LENGTHEN) - length_std += phoneme_tab[phonLENGTHEN]->std_length; // phoneme was followed by an extra : symbol + length_std += (phoneme_tab[phonLENGTHEN]->std_length * 2); // phoneme was followed by an extra : symbol // can adjust vowel length for stressed syllables here @@ -518,22 +321,29 @@ frameref_t *LookupSpect(PHONEME_TAB *this_ph, PHONEME_TAB *prev_ph, PHONEME_TAB } else { - // front of a vowel - if(*match_level == 0) + if(which == 1) { - // allow very short vowels to have shorter front parts - if(this_ph->std_length < 130) - frames[0].length = (frames[0].length * this_ph->std_length)/130; + // front of a vowel + if(fmt_params->fmt_control == 1) + { + // This is the default start of a vowel. + // Allow very short vowels to have shorter front parts + if(fmt_params->std_length < 130) + frames[0].length = (frames[0].length * fmt_params->std_length)/130; + } + } + else + { + //not a vowel + if(fmt_params->std_length > 0) + { + seq_len_adjust += (fmt_params->std_length - length1); + } } if(seq_len_adjust != 0) { - length_std = 0; - for(ix=0; ixmnemonic)); +} + + +static bool StressCondition(Translator *tr, PHONEME_LIST *plist, int condition, int control) +{//======================================================================================== +// condition: +// 0 if diminished, 1 if unstressed, 2 if not stressed, 3 if stressed, 4 if max stress + + int stress_level; + PHONEME_LIST *pl; + static int condition_level[4] = {1,2,4,15}; + + if(phoneme_tab[plist[0].phcode]->type == phVOWEL) + { + pl = plist; + } + else + { + // consonant, get stress from the following vowel + if(phoneme_tab[plist[1].phcode]->type == phVOWEL) + { + pl = &plist[1]; + } + else + return(false); // no stress elevel for this consonant + } + + stress_level = pl->stresslevel & 0xf; + + if(tr != NULL) + { + if((control & 1) && (plist->synthflags & SFLAG_DICTIONARY) && ((tr->langopts.param[LOPT_REDUCE] & 1)==0)) + { + // change phoneme. Don't change phonemes which are given for the word in the dictionary. + return(false); + } + + if((tr->langopts.param[LOPT_REDUCE] & 0x2) && (stress_level >= pl->wordstress)) + { + // treat the most stressed syllable in an unstressed word as stressed + stress_level = 4; + } + } + + if(condition == 4) + { + return(stress_level >= pl->wordstress); + } + + if(condition == 3) + { + // if stressed + if(stress_level > 3) + return(true); + } + else + { + if(stress_level < condition_level[condition]) + return(true); + } + return(false); + +} // end of StressCondition + + +static bool InterpretCondition(Translator *tr, int control, PHONEME_LIST *plist, int instn) +{//======================================================================================== + int which; + unsigned int data; + int instn2; + PHONEME_TAB *ph; + PHONEME_LIST *plist_this; + static int ph_position[7] = {0, 1, 2, 3, 2, 0, 1}; + + data = instn & 0xff; + instn2 = instn >> 8; + + if(instn2 < 14) + { + which = (instn2) % 7; + + if(which==4) + { + // nextPh not word boundary + if(plist[1].sourceix) + return(false); + } + if(which==5) + { + // prevPh, not word boundary + if(plist[0].sourceix) + return(false); + } + if(which==6) + { + // nextVowel, not word boundary + for(which=2;;which++) + { + if(plist[which-1].sourceix) + return(false); + if(phoneme_tab[plist[which-1].phcode]->type == phVOWEL) + break; + } + } + else + { + which = ph_position[which]; + } + plist_this = plist; + plist = &plist[which-1]; + + if(control & 0x100) + { + // change phonemes pass + plist->ph = phoneme_tab[plist->phcode]; + } + ph = plist->ph; + + if(instn2 < 7) + { + // 'data' is a phoneme number + if((phoneme_tab[data]->mnemonic == ph->mnemonic) == true) + return(true); + if((which == 0) && (ph->type == phVOWEL)) + return(data == ph->end_type); // prevPh() match on end_type + return(data == ph->start_type); // thisPh() or nextPh(), match on start_type + } + + data = instn & 0x1f; + + switch(instn & 0xe0) + { + case 0x00: + // phoneme type, vowel, nasal, fricative, etc + return(ph->type == data); + break; + + case 0x20: + // place of articulation + return(((ph->phflags >> 16) & 0xf) == data); + break; + + case 0x40: + // is a bit set in phoneme flags + return((ph->phflags & (1 << data)) != 0); + break; + + case 0x80: + switch(data) + { + case 0: + case 1: + case 2: + case 3: + case 4: + return(StressCondition(tr, plist, data, 0)); + + case 5: // isBreak, Either pause phoneme, or (stop/vstop/vfric not followed by vowel or (liquid in same word)) + return((ph->type == phPAUSE) || (plist_this->synthflags & SFLAG_NEXT_PAUSE)); + + case 6: // isWordStart + return(plist->sourceix != 0); + + case 7: // notWordStart + return(plist->sourceix == 0); + + case 8: // isWordEnd + return(plist[1].sourceix || (plist[1].ph->type == phPAUSE)); + break; + + case 9: // isAfterStress + if(plist->sourceix != 0) + return(false); + do { + plist--; + if((plist->stresslevel & 0xf) >= 4) + return(true); + + } while (plist->sourceix == 0); + break; + + case 10: // isNotVowel + return(ph->type != phVOWEL); + + case 11: // isFinalVowel + for(;;) + { + plist++; + plist->ph = phoneme_tab[plist->phcode]; + if(plist->sourceix != 0) + return(true); // start of next word, without finding another vowel + if(plist->ph->type == phVOWEL) + return(false); + } + break; + } + break; + + } + return(false); + } + else + if(instn2 == 0xf) + { + // Other conditions + switch(data) + { + case 1: // PreVoicing + return(control & 1); + case 2: // KlattSynth + return(voice->klattv[0] != 0); + } + } + return(false); +} // end of InterpretCondition + + +static void SwitchVowelType(PHONEME_LIST *plist, PHONEME_DATA *phdata, USHORT **p_prog, int instn_type) +{//===================================================================================================== + USHORT *prog; + int voweltype; + signed char x; + + if(instn_type == 2) + { + phdata->pd_control |= pd_FORNEXTPH; + voweltype = plist[1].ph->start_type; // SwitchNextVowelType + } + else + { + voweltype = plist[-1].ph->end_type; // SwitchPrevVowelType + } + + voweltype -= phonVOWELTYPES; + if((voweltype >= 0) && (voweltype < 6)) + { + prog = *p_prog + voweltype*2; + phdata->sound_addr[instn_type] = (((prog[1] & 0xf) << 16) + prog[2]) * 4; + x = (prog[1] >> 4) & 0xff; + phdata->sound_param[instn_type] = x; // sign extend + } + + *p_prog += 12; +} // end of SwitchVowelType + + +static int NumInstnWords(USHORT *prog) +{//=================================== + int instn; + int instn2; + int instn_type; + static char n_words[11] = {1,1,1,1,1,1,1,1,1,2,4}; + + instn = *prog; + instn_type = instn >> 12; + if(instn_type < 11) + return(n_words[instn_type]); + + // 11 to 15, 2 words + instn2 = prog[2]; + if((instn2 >> 12) == 0xf) + { + // addWav(), 2 more words + return(4); + } + if(instn2 == i_CONTINUE) + { + return(3); + } + return(2); +} // end of NumInstnWords + + + +void InterpretPhoneme(Translator *tr, int control, PHONEME_LIST *plist, PHONEME_DATA *phdata) +{//========================================================================================== +// control: +//bit 0: PreVoicing +//bit 8: change phonemes + PHONEME_TAB *ph; + USHORT *prog; + USHORT instn; + int instn2; + int or_flag; + bool truth; + int data; + int end_flag; + int ix; + signed char param_sc; + + #define N_RETURN 10 + int n_return=0; + USHORT *return_addr[N_RETURN]; // return address stack + + ph = plist->ph; + + memset(phdata, 0, sizeof(PHONEME_DATA)); + phdata->pd_param[i_SET_LENGTH] = ph->std_length; + phdata->pd_param[i_LENGTH_MOD] = ph->length_mod; + + if(ph->program == 0) + return; + + end_flag = 0; + + for(prog = &phoneme_index[ph->program]; end_flag != 1; prog++) + { + instn = *prog; + instn2 = (instn >> 8) & 0xf; + or_flag = 0; + + switch(instn >> 12) + { + case 0: + data = instn & 0xff; + + if(instn2 == 0) + { + // instructions with no operand + switch(data) + { + case i_RETURN: + end_flag = 1; + break; + + case i_CONTINUE: + break; + + default: + InvalidInstn(ph,instn); + break; + } + } + else + if(instn2 == i_APPEND_IFNEXTVOWEL) + { + if(phoneme_tab[plist[1].phcode]->type == phVOWEL) + phdata->pd_param[i_APPEND_PHONEME] = data; + } + else + if(instn2 < N_PHONEME_DATA_PARAM) + { + if(instn2 == i_CHANGE_PHONEME2) + { + phdata->pd_param[i_CHANGE_PHONEME] = data; // also set ChangePhoneme + } + phdata->pd_param[instn2] = data; + if((instn2 == i_CHANGE_PHONEME) && (control & 0x100)) + { + // found ChangePhoneme() in PhonemeList mode, exit + end_flag = 1; + } + } + else + { + InvalidInstn(ph,instn); + } + break; + + case 1: + if(tr == NULL) + break; // ignore if in synthesis stage + + if(instn2 < 8) + { + // ChangeIf + if(StressCondition(tr, plist, instn2 & 7, 1)) + { + phdata->pd_param[i_CHANGE_PHONEME] = instn & 0xff; + end_flag = 1; // change phoneme, exit + } + } + break; + + case 2: + case 3: + // conditions + or_flag = 0; + truth = true; + while((instn & 0xe000) == 0x2000) + { + // process a sequence of conditions, using boolean accumulator + if(or_flag) + truth = (truth || InterpretCondition(tr, control, plist, instn & 0xfff)); + else + truth = (truth && InterpretCondition(tr, control, plist, instn & 0xfff)); + or_flag = instn & 0x1000; + instn = *(++prog); + } + + if(truth == false) + { + if((instn & 0xf800) == i_JUMP_FALSE) + { + prog += instn & 0xff; + } + else + { + // instruction after a condition is not JUMP_FALSE, so skip the instruction. + prog += NumInstnWords(prog); + if((prog[0] & 0xfe00) == 0x6000) + prog++; // and skip ELSE jump + } + } + prog--; + break; + + case 6: + // JUMP + switch(instn2 >> 1) + { + case 0: + prog += (instn & 0xff) - 1; + break; + + case 4: + // conditional jumps should have been processed in the Condition section + break; + + case 5: // NexttVowelStarts + SwitchVowelType(plist, phdata, &prog, 2); + break; + + case 6: // PrevVowelTypeEndings + SwitchVowelType(plist, phdata, &prog, 3); + break; + } + break; + + case 9: + data = ((instn & 0xf) << 16) + prog[1]; + switch(instn2) + { + case 1: + // call a procedure or another phoneme + if(n_return < N_RETURN) + { + return_addr[n_return++] = prog+1; + prog = &phoneme_index[data] - 1; + } + break; + + case 2: + // pitch envelope + phdata->pitch_env = data; + break; + + case 3: + // amplitude envelope + phdata->amp_env = data; + break; + } + break; + + case 10: // Vowelin, Vowelout + if(instn2 == 1) + ix = 0; + else + ix = 2; + + phdata->vowel_transition[ix] = ((prog[0] & 0xff) << 16) + prog[1]; + phdata->vowel_transition[ix+1] = (prog[2] << 16) + prog[3]; + prog += 3; + break; + + case 11: // FMT + case 12: // WAV + case 13: // VowelStart + case 14: // VowelEnd + case 15: // addWav + instn2 = (instn >> 12) - 11; + phdata->sound_addr[instn2] = ((instn & 0xf) << 18) + (prog[1] << 2); + param_sc = phdata->sound_param[instn2] = (instn >> 4) & 0xff; + prog++; + + if(prog[1] != i_CONTINUE) + { + if(instn2 < 2) + { + // FMT() and WAV() imply Return + end_flag = 1; + if((prog[1] >> 12) == 0xf) + { + // Return after the following addWav() + end_flag = 2; + } + } + else + if(instn2 == 4) + { + // addWav(), return if previous instruction was FMT() or WAV() + end_flag--; + } + + if((instn2 != 1) && (instn2 != 4)) + { + // FMT, VowelStart or VowelEnding. + phdata->sound_param[instn2] = param_sc; // sign extend + } + } + break; + + default: + InvalidInstn(ph,instn); + break; + } + + if(ph->phflags & phSINGLE_INSTN) + { + end_flag = 1; // this phoneme has a one-instruction program, with an implicit Return + } + + if((end_flag == 1) && (n_return > 0)) + { + // return from called procedure or phoneme + end_flag = 0; + prog = return_addr[--n_return]; + } + } + +} // end of InterpretPhoneme + + +void InterpretPhoneme2(int phcode, PHONEME_DATA *phdata) +{//===================================================== +// Examine the program of a single isolated phoneme + int ix; + PHONEME_LIST plist[4]; + memset(plist, 0, sizeof(plist)); + + for(ix=0; ix<4; ix++) + { + plist[ix].phcode = phonPAUSE; + plist[ix].ph = phoneme_tab[phonPAUSE]; + } + + plist[1].phcode = phcode; + plist[1].ph = phoneme_tab[phcode]; + plist[2].sourceix = 1; + + InterpretPhoneme(NULL, 0, &plist[1], phdata); +} // end of InterpretPhoneme2 diff --git a/src/synthesize.cpp b/src/synthesize.cpp index c9b3b46f..f71aa229 100755 --- a/src/synthesize.cpp +++ b/src/synthesize.cpp @@ -219,72 +219,153 @@ static void DoPause(int length, int control) extern int seq_len_adjust; // temporary fix to advance the start point for playing the wav sample -static int DoSample2(int index, int which, int length_mod, int amp) -{//================================================================ +static int DoSample2(int index, int which, int std_length, int control, int length_mod, int amp) +{//============================================================================================= int length; - int length1; + int wav_length; int format; int min_length; - int start=0; + int x; + int len4; long *q; unsigned char *p; index = index & 0x7fffff; p = &wavefile_data[index]; format = p[2]; - length1 = (p[1] * 256); - length1 += p[0]; // length in bytes + wav_length = (p[1] * 256); + wav_length += p[0]; // length in bytes - if(seq_len_adjust > 0) - { - start = (seq_len_adjust * samplerate)/1000; - if(format == 0) - start *= 2; - length1 -= start; - index += start; - } - - - if(length_mod > 0) - length = (length1 * length_mod) / 256; - else - length = length1; - - - length = (length * speed.speed_factor2)/256; min_length = speed.min_sample_len; if(format==0) min_length *= 2; + if(std_length > 0) + { + std_length = (std_length * samplerate)/1000; + if(format == 0) + std_length *= 2; + + x = (min_length * std_length)/wav_length; + if(x > min_length) + min_length = x; + } + else + { + // no length specified, use the length of the stored sound + std_length = wav_length; + } + + if(length_mod > 0) + { + std_length = (std_length * length_mod)/256; + } + + length = (std_length * speed.speed_factor2)/256; + + if(control & pd_DONTLENGTHEN) + { + // this option is used for Stops, with short noise bursts. + // Don't change their length much. + if(length > std_length) + { + // don't let length exceed std_length + length = std_length; + } + else + { + // reduce the reduction in length +// length = (length + std_length)/2; + } + } + if(length < min_length) length = min_length; - if(length > length1) - length = length1; // don't exceed wavefile length - if(format==0) - length /= 2; // 2 byte samples + if(format == 0) + { + // 16 bit samples + length /= 2; + wav_length /= 2; + } + if(amp < 0) + return(length); + + len4 = wav_length / 4; index += 4; - if(amp >= 0) + if(which & 0x100) { + // mix this with synthesised wave last_wcmdq = wcmdq_tail; q = wcmdq[wcmdq_tail]; - if(which & 0x100) - q[0] = WCMD_WAVE2; // mix this with synthesised wave - else - q[0] = WCMD_WAVE; - q[1] = length; // length in samples + q[0] = WCMD_WAVE2; + q[1] = length | (wav_length << 16); // length in samples q[2] = long(&wavefile_data[index]); q[3] = format + (amp << 8); WcmdqInc(); + return(length); } + + if(length > wav_length) + { + x = len4*3; + length -= x; + } + else + { + x = length; + length = 0; + } + + last_wcmdq = wcmdq_tail; + q = wcmdq[wcmdq_tail]; + q[0] = WCMD_WAVE; + q[1] = x; // length in samples + q[2] = long(&wavefile_data[index]); + q[3] = format + (amp << 8); + WcmdqInc(); + + + while(length > len4*3) + { + x = len4; + if(format == 0) + x *= 2; + + last_wcmdq = wcmdq_tail; + q = wcmdq[wcmdq_tail]; + q[0] = WCMD_WAVE; + q[1] = len4*2; // length in samples + q[2] = long(&wavefile_data[index+x]); + q[3] = format + (amp << 8); + WcmdqInc(); + + length -= len4*2; + } + + if(length > 0) + { + x = wav_length - length; + if(format == 0) + x *= 2; + last_wcmdq = wcmdq_tail; + q = wcmdq[wcmdq_tail]; + q[0] = WCMD_WAVE; + q[1] = length; // length in samples + q[2] = long(&wavefile_data[index+x]); + q[3] = format + (amp << 8); + WcmdqInc(); + } + return(length); -} // end of Synthesize::DoSample2 +} // end of DoSample2 +#ifdef deleted int DoSample(PHONEME_TAB *ph1, PHONEME_TAB *ph2, int which, int length_mod, int amp) {//====================== ========================================================== int index; @@ -304,10 +385,37 @@ int DoSample(PHONEME_TAB *ph1, PHONEME_TAB *ph2, int which, int length_mod, int if(amp == -1) amp2 = amp; - result = DoSample2(index,which,length_mod,amp2); + result = DoSample2(index,which,length_mod,0,amp2); last_frame = NULL; return(result); -} // end of Synthesize::DoSample +} // end of DoSample +#endif + + +int DoSample3(PHONEME_DATA *phdata, int length_mod, int amp) +{//========================================================= + int amp2; + int len; + EndPitch(1); + + if(amp == -1) + { + // just get the length, don't produce sound + amp2 = amp; + } + else + { + amp2 = phdata->sound_param[pd_WAV]; + if(amp2 == 0) + amp2 = 100; + amp2 = (amp2 * 32)/100; + } + +seq_len_adjust=0; + len = DoSample2(phdata->sound_addr[pd_WAV], 2, phdata->pd_param[pd_LENGTHMOD]*2, phdata->pd_control, length_mod, amp2); + last_frame = NULL; + return(len); +} // end of DoSample3 @@ -554,7 +662,7 @@ static short vcolouring[N_VCOLOUR][5] = { if(voice->klattv[0]) { // fr->klattp[KLATT_AV] = 53; // reduce the amplituide of the start of a vowel - fr->klattp[KLATT_AV] = seq[1].frame->klattp[KLATT_AV] - 6; + fr->klattp[KLATT_AV] = seq[1].frame->klattp[KLATT_AV] - 4; } if(f2 != 0) { @@ -861,10 +969,10 @@ static void StartSyllable(void) } -int DoSpect(PHONEME_TAB *this_ph, PHONEME_TAB *prev_ph, PHONEME_TAB *next_ph, - int which, PHONEME_LIST *plist, int modulation) -{//=================================================================================== - // which 1 start of phoneme, 2 body and end + +int DoSpect2(PHONEME_TAB *this_ph, int which, FMT_PARAMS *fmt_params, PHONEME_LIST *plist, int modulation) +{//======================================================================================================== + // which 0 not a vowel, 1 start of vowel, 2 body and end of vowel // length_mod: 256 = 100% // modulation: -1 = don't write to wcmdq @@ -877,70 +985,47 @@ int DoSpect(PHONEME_TAB *this_ph, PHONEME_TAB *prev_ph, PHONEME_TAB *next_ph, int ix; long *q; int len; - int min; - int match_level; int frame_length; int frame1_length; int frame2_length; int length_factor; int length_mod; - int length_mod2; // reduced effect length_mod int total_len = 0; - int len_adjust_factor = 256; static int wave_flag = 0; int wcmd_spect = WCMD_SPECT; + if(fmt_params->fmt_addr == 0) + return(0); + length_mod = plist->length; if(length_mod==0) length_mod=256; - length_mod2 = (length_mod*(256-speed.speed_factor3) + 256*speed.speed_factor3)/256; - - if(which==1) +if(which==1) +{ + // limit the shortening of sonorants before shortened (eg. unstressed vowels) + if((this_ph->type==phLIQUID) || (plist[-1].type==phLIQUID) || (plist[-1].type==phNASAL)) { - // limit the shortening of sonorants before shortened (eg. unstressed vowels) - if((this_ph->type==phLIQUID) || (prev_ph->type==phLIQUID) || (prev_ph->type==phNASAL)) + if(length_mod < (len = translator->langopts.param[LOPT_SONORANT_MIN])) { - if(length_mod < (len = translator->langopts.param[LOPT_SONORANT_MIN])) - { - length_mod = len; - } + length_mod = len; } } +} + modn_flags = 0; - frames = LookupSpect(this_ph,prev_ph,next_ph,which,&match_level,&n_frames, plist); + frames = LookupSpect(this_ph, which, fmt_params, &n_frames, plist); if(frames == NULL) return(0); // not found -// if((which==2) && (this_ph->phflags & phLONG)) - if((which==2) && (this_ph->std_length >= 200)) - { - // apply a minimum length for long vowels at fast speeds, to keep the distinction with short vowels - total_len = 0; - for(frameix=0; frameix<(n_frames-1); frameix++) - { - length_factor = length_mod; - if(frames[frameix].frflags & FRFLAG_LEN_MOD) // reduce effect of length mod - { - length_factor = length_mod2; - } - len = (frames[frameix].length * samplerate)/1000; - len = (len * length_factor)/256; - total_len += len; - } - - min = translator->langopts.param[LOPT_MIN_LONG_VOWEL] * (samplerate)/1000; - min = (min * length_mod2)/256; - if(total_len < min) - { - len_adjust_factor = (min*256)/total_len; - } - } - frame1 = frames[0].frame; frame1_length = frames[0].length; if(voice->klattv[0]) wcmd_spect = WCMD_KLATT; + wavefile_ix = fmt_params->wav_addr; + wavefile_amp = (fmt_params->wav_amp * 32)/100; + if(wavefile_amp == 0) + wavefile_amp = 32; if(wavefile_ix == 0) { if(wave_flag) @@ -990,30 +1075,29 @@ int DoSpect(PHONEME_TAB *this_ph, PHONEME_TAB *prev_ph, PHONEME_TAB *next_ph, syllable_centre = wcmdq_tail; } - total_len = 0; frame_length = frame1_length; for(frameix=1; frameixfrflags & FRFLAG_DEFER_WAV)==0)) + if((fmt_params->wav_addr != 0) && ((frame1->frflags & FRFLAG_DEFER_WAV)==0)) { // there is a wave file to play along with this synthesis seq_len_adjust = 0; - DoSample2(wavefile_ix,which+0x100,0,wavefile_amp); + DoSample2(fmt_params->wav_addr, which+0x100, 0, fmt_params->fmt_control, 0, wavefile_amp); wave_flag = 1; wavefile_ix = 0; + fmt_params->wav_addr = 0; } length_factor = length_mod; if(frame1->frflags & FRFLAG_LEN_MOD) // reduce effect of length mod { - length_factor = length_mod2; + length_factor = (length_mod*(256-speed.speed_factor3) + 256*speed.speed_factor3)/256; } len = (frame_length * samplerate)/1000; len = (len * length_factor)/256; - len = (len * len_adjust_factor)/256; if(modulation >= 0) { @@ -1054,7 +1138,9 @@ int DoSpect(PHONEME_TAB *this_ph, PHONEME_TAB *prev_ph, PHONEME_TAB *next_ph, } } return(total_len); -} // end of Synthesize::DoSpect +} // end of DoSpect + + static void DoMarker(int type, int char_posn, int length, int value) @@ -1158,6 +1244,12 @@ int Generate(PHONEME_LIST *phoneme_list, int *n_ph, int resume) PHONEME_TAB *prev_ph; static int sourceix=0; + PHONEME_DATA phdata; + PHONEME_DATA phdata_prev; + PHONEME_DATA phdata_next; + PHONEME_DATA phdata_tone; + FMT_PARAMS fmtp; + #ifdef TEST_MBROLA if(mbrola_name[0] != 0) return(MbrolaGenerate(phoneme_list,n_ph,resume)); @@ -1252,20 +1344,29 @@ int Generate(PHONEME_LIST *phoneme_list, int *n_ph, int resume) if(next->type==phLIQUID) released = 1; // if(((p->ph->phflags & phPLACE) == phPLACE_blb) && (next->ph->phflags & phSIBILANT)) released = 1; } + if(released == 0) + p->synthflags |= SFLAG_NEXT_PAUSE; - if(released) - DoSample(p->ph,next->ph,2,0,0); - else - DoSample(p->ph,phoneme_tab[phonPAUSE],2,0,0); + InterpretPhoneme(NULL, 0, p, &phdata); + phdata.pd_control |= pd_DONTLENGTHEN; + DoSample3(&phdata, 0, 0); break; case phFRICATIVE: + InterpretPhoneme(NULL, 0, p, &phdata); + if(p->synthflags & SFLAG_LENGTHEN) - DoSample(p->ph,next->ph,2,p->length,0); // play it twice for [s:] etc. - DoSample(p->ph,next->ph,2,p->length,0); + { + DoSample3(&phdata, p->length, 0); // play it twice for [s:] etc. + } + DoSample3(&phdata, p->length, 0); break; case phVSTOP: + ph = p->ph; + memset(&fmtp, 0, sizeof(fmtp)); + fmtp.fmt_control = pd_DONTLENGTHEN; + pre_voiced = 0; if(next->type==phVOWEL) { @@ -1292,11 +1393,15 @@ int Generate(PHONEME_LIST *phoneme_list, int *n_ph, int resume) if((prev->type==phVOWEL) || (prev->ph->phflags & phVOWEL2)) { // a period of voicing before the release - DoSpect(p->ph,phoneme_tab[phonSCHWA],next->ph,1,p,0); + InterpretPhoneme(NULL, 0x01, p, &phdata); + fmtp.fmt_addr = phdata.sound_addr[pd_FMT]; + fmtp.fmt_length = phdata.sound_param[pd_FMT]; + + DoSpect2(ph, 0, &fmtp, p, 0); if(p->synthflags & SFLAG_LENGTHEN) { DoPause(20,0); - DoSpect(p->ph,phoneme_tab[phonSCHWA],next->ph,1,p,0); + DoSpect2(ph, 0, &fmtp, p, 0); } } else @@ -1311,18 +1416,24 @@ int Generate(PHONEME_LIST *phoneme_list, int *n_ph, int resume) { // followed by a vowel, or liquid + vowel StartSyllable(); - DoSpect(p->ph,prev->ph,next->ph,2,p,0); } else { - DoSpect(p->ph,prev->ph,phoneme_tab[phonPAUSE],2,p,0); - if((p->newword == 0) && (next2->newword == 0)) - { - if((next->type == phVFRICATIVE) && (p->ph->mnemonic !='d')) - DoPause(20,0); - if((next->type == phFRICATIVE) || (next->type == phNASAL)) - DoPause(12,0); - } + p->synthflags |= SFLAG_NEXT_PAUSE; + } + InterpretPhoneme(NULL,0, p, &phdata); + fmtp.fmt_addr = phdata.sound_addr[pd_FMT]; + fmtp.fmt_length = phdata.sound_param[pd_FMT]; + fmtp.wav_addr = phdata.sound_addr[pd_ADDWAV]; + fmtp.wav_amp = phdata.sound_param[pd_ADDWAV]; + DoSpect2(ph, 0, &fmtp, p, 0); + + if((p->newword == 0) && (next2->newword == 0)) + { + if(next->type == phVFRICATIVE) + DoPause(20,0); + if(next->type == phFRICATIVE) + DoPause(12,0); } break; @@ -1347,22 +1458,29 @@ int Generate(PHONEME_LIST *phoneme_list, int *n_ph, int resume) } } - if((next->type==phVOWEL) || ((next->type==phLIQUID) && (next->newword==0))) // ?? test 14.Aug.2007 + if((next->type==phVOWEL) || ((next->type==phLIQUID)) && (next->newword==0)) // ?? test 14.Aug.2007 { StartSyllable(); - if(p->synthflags & SFLAG_LENGTHEN) - DoSpect(p->ph,prev->ph,next->ph,2,p,0); - DoSpect(p->ph,prev->ph,next->ph,2,p,0); } else { - if(p->synthflags & SFLAG_LENGTHEN) - DoSpect(p->ph,prev->ph,phoneme_tab[phonPAUSE],2,p,0); - DoSpect(p->ph,prev->ph,phoneme_tab[phonPAUSE],2,p,0); + p->synthflags |= SFLAG_NEXT_PAUSE; } + InterpretPhoneme(NULL,0, p, &phdata); + memset(&fmtp, 0, sizeof(fmtp)); + fmtp.std_length = phdata.pd_param[i_SET_LENGTH]*2; + fmtp.fmt_addr = phdata.sound_addr[pd_FMT]; + fmtp.fmt_length = phdata.sound_param[pd_FMT]; + fmtp.wav_addr = phdata.sound_addr[pd_ADDWAV]; + fmtp.wav_amp = phdata.sound_param[pd_ADDWAV]; + + if(p->synthflags & SFLAG_LENGTHEN) + DoSpect2(p->ph, 0, &fmtp, p, 0); + DoSpect2(p->ph, 0, &fmtp, p, 0); break; case phNASAL: + memset(&fmtp, 0, sizeof(fmtp)); if(!(p->synthflags & SFLAG_SEQCONTINUE)) { DoAmplitude(p->amp,NULL); @@ -1374,29 +1492,32 @@ int Generate(PHONEME_LIST *phoneme_list, int *n_ph, int resume) last_frame = NULL; } + InterpretPhoneme(NULL,0, p, &phdata); + fmtp.std_length = phdata.pd_param[i_SET_LENGTH]*2; + fmtp.fmt_addr = phdata.sound_addr[pd_FMT]; + fmtp.fmt_length = phdata.sound_param[pd_FMT]; + if(next->type==phVOWEL) { StartSyllable(); - DoSpect(p->ph,prev->ph,next->ph,1,p,0); + DoSpect2(p->ph, 0, &fmtp, p, 0); } else if(prev->type==phVOWEL && (p->synthflags & SFLAG_SEQCONTINUE)) { - DoSpect(p->ph,prev->ph,phoneme_tab[phonPAUSE],2,p,0); + DoSpect2(p->ph, 0, &fmtp, p, 0); } else { last_frame = NULL; // only for nasal ? - if(next->type == phLIQUID) - DoSpect(p->ph,prev->ph,phoneme_tab[phonSONORANT],2,p,0); - else - DoSpect(p->ph,prev->ph,phoneme_tab[phonPAUSE],2,p,0); + DoSpect2(p->ph, 0, &fmtp, p, 0); last_frame = NULL; } break; case phLIQUID: + memset(&fmtp, 0, sizeof(fmtp)); modulation = 0; if(p->ph->phflags & phTRILL) modulation = 5; @@ -1419,17 +1540,14 @@ int Generate(PHONEME_LIST *phoneme_list, int *n_ph, int resume) if(next->type==phVOWEL) { StartSyllable(); - DoSpect(p->ph,prev_ph,next->ph,1,p,modulation); // (,)r - } - else - if(prev->type==phVOWEL && (p->synthflags & SFLAG_SEQCONTINUE)) - { - DoSpect(p->ph,prev_ph,next->ph,1,p,modulation); - } - else - { - DoSpect(p->ph,prev_ph,next->ph,1,p,modulation); } + InterpretPhoneme(NULL, 0, p, &phdata); + fmtp.std_length = phdata.pd_param[i_SET_LENGTH]*2; + fmtp.fmt_addr = phdata.sound_addr[pd_FMT]; + fmtp.fmt_length = phdata.sound_param[pd_FMT]; + fmtp.wav_addr = phdata.sound_addr[pd_ADDWAV]; + fmtp.wav_amp = phdata.sound_param[pd_ADDWAV]; + DoSpect2(p->ph, 0, &fmtp, p, modulation); break; @@ -1437,16 +1555,46 @@ int Generate(PHONEME_LIST *phoneme_list, int *n_ph, int resume) ph = p->ph; stress = p->stresslevel & 0xf; - // vowel transition from the preceding phoneme - vowel_transition0 = vowel_transition[0]; - vowel_transition1 = vowel_transition[1]; + memset(&fmtp, 0, sizeof(fmtp)); + + InterpretPhoneme(NULL, 0, p, &phdata); + fmtp.std_length = phdata.pd_param[i_SET_LENGTH] * 2; + + if(((fmtp.fmt_addr = phdata.sound_addr[pd_VWLSTART]) != 0) && ((phdata.pd_control & pd_FORNEXTPH) == 0)) + { + // a vowel start has been specified by the Vowel program + fmtp.fmt_length = phdata.sound_param[pd_VWLSTART]; + } + else + if(prev->type != phPAUSE) + { + // check the previous phoneme + InterpretPhoneme(NULL, 0, prev, &phdata_prev); + if((fmtp.fmt_addr = phdata_prev.sound_addr[pd_VWLSTART]) != 0) + { + // a vowel start has been specified by the Vowel program + fmtp.fmt2_lenadj = phdata_prev.sound_param[pd_VWLSTART]; + } + fmtp.transition0 = phdata_prev.vowel_transition[0]; + fmtp.transition1 = phdata_prev.vowel_transition[1]; + } + + if(fmtp.fmt_addr == 0) + { + // use the default start for this vowel + fmtp.use_vowelin = 1; + fmtp.fmt_control = 1; + fmtp.fmt_addr = phdata.sound_addr[pd_FMT]; +// fmtp.fmt_length = phdata.sound_param[pd_FMT]; + } pitch_env = envelope_data[p->env]; amp_env = NULL; if(p->tone_ph != 0) { - pitch_env = LookupEnvelope(phoneme_tab[p->tone_ph]->spect); - amp_env = LookupEnvelope(phoneme_tab[p->tone_ph]->after); + InterpretPhoneme2(p->tone_ph, &phdata_tone); + pitch_env = LookupEnvelope(phdata_tone.pitch_env); + amp_env = LookupEnvelope(phdata_tone.amp_env); } StartSyllable(); @@ -1462,13 +1610,13 @@ int Generate(PHONEME_LIST *phoneme_list, int *n_ph, int resume) { DoAmplitude(p->amp,amp_env); DoPitch(pitch_env,p->pitch1,p->pitch2); // don't use prevocalic rising tone - DoSpect(ph,prev->ph,next->ph,1,p,modulation); + DoSpect2(ph, 1, &fmtp, p, modulation); } else if(prev->type==phLIQUID || prev->type==phNASAL) { DoAmplitude(p->amp,amp_env); - DoSpect(ph,prev->ph,next->ph,1,p,modulation); // continue with pre-vocalic rising tone + DoSpect2(ph, 1, &fmtp, p, modulation); // continue with pre-vocalic rising tone DoPitch(pitch_env,p->pitch1,p->pitch2); } else @@ -1479,7 +1627,7 @@ int Generate(PHONEME_LIST *phoneme_list, int *n_ph, int resume) DoPitch(pitch_env,p->pitch1,p->pitch2); } - DoSpect(ph,prev->ph,next->ph,1,p,modulation); + DoSpect2(ph, 1, &fmtp, p, modulation); } if(option_phoneme_events) @@ -1487,9 +1635,33 @@ int Generate(PHONEME_LIST *phoneme_list, int *n_ph, int resume) DoMarker(espeakEVENT_PHONEME, sourceix, 0, p->ph->mnemonic); } - DoSpect(p->ph,prev->ph,next->ph,2,p,modulation); + fmtp.fmt_addr = phdata.sound_addr[pd_FMT]; + fmtp.fmt_length = phdata.sound_param[pd_FMT]; + fmtp.transition0 = 0; + fmtp.transition1 = 0; + + if((fmtp.fmt2_addr = phdata.sound_addr[pd_VWLEND]) != 0) + { + fmtp.fmt2_lenadj = phdata.sound_param[pd_VWLEND]; + } + else + if(next->type != phPAUSE) + { + fmtp.fmt2_lenadj = 0; + InterpretPhoneme(NULL, 0, next, &phdata_next); + + fmtp.use_vowelin = 1; + fmtp.transition0 = phdata_next.vowel_transition[2]; // always do vowel_transition, even if ph_VWLEND ?? consider [N] + fmtp.transition1 = phdata_next.vowel_transition[3]; + + if((fmtp.fmt2_addr = phdata_next.sound_addr[pd_VWLEND]) != 0) + { + fmtp.fmt2_lenadj = phdata_next.sound_param[pd_VWLEND]; + } + } + + DoSpect2(ph, 2, &fmtp, p, modulation); - memset(vowel_transition,0,sizeof(vowel_transition)); break; } ix++; diff --git a/src/synthesize.h b/src/synthesize.h index 193b9329..00ec4eb0 100755 --- a/src/synthesize.h +++ b/src/synthesize.h @@ -47,6 +47,9 @@ #define SFLAG_SWITCHED_LANG 0x20 // this word uses phonemes from a different language #define SFLAG_PROMOTE_STRESS 0x40 // this unstressed word can be promoted to stressed +#define SFLAG_PREV_PAUSE 0x1000 // consider previous phoneme as pause +#define SFLAG_NEXT_PAUSE 0x2000 // consider next phoneme as pause + // embedded command numbers #define EMBED_P 1 // pitch #define EMBED_S 2 // speed (used in setlengths) @@ -170,10 +173,11 @@ int n_mix_wavefile; // length in bytes int mix_wave_scale; // 0=2 byte samples int mix_wave_amp; int mix_wavefile_ix; +int mix_wavefile_max; // length of available WAV data (in bytes) +int mix_wavefile_offset; int amplitude; int amplitude_v; -int prev_was_synth; // previous sound was synthesized (not a played wave or pause) } WGEN_DATA; @@ -207,24 +211,147 @@ typedef struct { frame_t *frame; } frameref_t; +// a clause translated into phoneme codes (first stage) +typedef struct { + unsigned char phcode; + unsigned char stresslevel; + unsigned char wordstress; + unsigned char tone_ph; // tone phoneme to use with this vowel + unsigned short synthflags; + unsigned short sourceix; // ix into the original source text string, only set at the start of a word +} PHONEME_LIST2; + typedef struct { +// The first section is a copy of PHONEME_LIST2 + unsigned char phcode; + unsigned char stresslevel; + unsigned char wordstress; + unsigned char tone_ph; // tone phoneme to use with this vowel + unsigned short synthflags; + unsigned short sourceix; // ix into the original source text string, only set at the start of a word + PHONEME_TAB *ph; unsigned char env; // pitch envelope number - unsigned char stresslevel; unsigned char type; unsigned char prepause; + unsigned char postpause; unsigned char amp; - unsigned char tone_ph; // tone phoneme to use with this vowel unsigned char newword; // bit 0=start of word, bit 1=end of clause, bit 2=start of sentence - unsigned char synthflags; short length; // length_mod short pitch1; // pitch, 0-4095 within the Voice's pitch range short pitch2; - unsigned short sourceix; // ix into the original source text string, only set at the start of a word } PHONEME_LIST; +#define pd_FMT 0 +#define pd_WAV 1 +#define pd_VWLSTART 2 +#define pd_VWLEND 3 +#define pd_ADDWAV 4 + +#define N_PHONEME_DATA_PARAM 16 +#define pd_APPENDPHONEME i_APPEND_PHONEME +#define pd_CHANGEPHONEME i_CHANGE_PHONEME +#define pd_LENGTHMOD i_SET_LENGTH + +#define pd_FORNEXTPH 0x2 +#define pd_DONTLENGTHEN 0x4 +#define pd_REDUCELENGTHCHANGE 0x8 +typedef struct { + int pd_control; + int pd_param[N_PHONEME_DATA_PARAM]; // set from group 0 instructions + int sound_addr[5]; + int sound_param[5]; + int vowel_transition[4]; + int pitch_env; + int amp_env; +} PHONEME_DATA; + + +typedef struct { + int fmt_control; + int use_vowelin; + int fmt_addr; + int fmt_length; + int fmt2_addr; + int fmt2_lenadj; + int wav_addr; + int wav_amp; + int transition0; + int transition1; + int std_length; +} FMT_PARAMS; + + +// instructions + +#define i_RETURN 0x0001 +#define i_CONTINUE 0x0002 + +// Group 0 instrcutions with 8 bit operand. These value go into bits 8-15 if the instruction +#define i_CHANGE_PHONEME 0x01 +#define i_REPLACE_NEXT_PHONEME 0x02 +#define i_INSERT_PHONEME 0x03 +#define i_APPEND_PHONEME 0x04 +#define i_APPEND_IFNEXTVOWEL 0x05 +#define i_VOICING_SWITCH 0x06 +#define i_PAUSE_BEFORE 0x07 +#define i_PAUSE_AFTER 0x08 +#define i_LENGTH_MOD 0x09 +#define i_SET_LENGTH 0x0a +#define i_LONG_LENGTH 0x0b +#define i_CHANGE_PHONEME2 0x0c // not yet used +#define i_CHANGE_IF 0x10 // 0x10 to 0x14 + +#define i_ADD_LENGTH 0x0c + + +// conditions and jumps +#define i_CONDITION 0x2000 +#define i_OR 0x1000 // added to i_CONDITION + +#define i_JUMP 0x6000 +#define i_JUMP_FALSE 0x6800 +#define i_SWITCH_NEXTVOWEL 0x6a00 +#define i_SWITCH_PREVVOWEL 0x6c00 +#define MAX_JUMP 255 // max jump distance + +// multi-word instructions +#define i_CALLPH 0x9100 +#define i_PITCHENV 0x9200 +#define i_AMPENV 0x9300 +#define i_VOWELIN 0xa100 +#define i_VOWELOUT 0xa200 +#define i_FMT 0xb000 +#define i_WAV 0xc000 +#define i_VWLSTART 0xd000 +#define i_VWLENDING 0xe000 +#define i_WAVADD 0xf000 + +// conditions +#define i_isDiminished 0x80 +#define i_isUnstressed 0x81 +#define i_isNotStressed 0x82 +#define i_isStressed 0x83 +#define i_isMaxStress 0x84 + +#define i_isBreak 0x85 +#define i_isWordStart 0x86 +#define i_notWordStart 0x87 +#define i_isWordEnd 0x88 +#define i_isAfterStress 0x89 +#define i_isNotVowel 0x8a +#define i_isFinalVowel 0x8b + + +#define i_isPalatal 0x49 // bit 9 in phflags +#define i_isRhotic 0x56 // bit 22 in phflags + +#define i_StressLevel 0x800 + + + typedef struct { int name; int length; @@ -317,7 +444,7 @@ extern char mbrola_name[20]; // from synthdata file unsigned int LookupSound(PHONEME_TAB *ph1, PHONEME_TAB *ph2, int which, int *match_level, int control); -frameref_t *LookupSpect(PHONEME_TAB *ph1, PHONEME_TAB *prev_ph, PHONEME_TAB *next_ph, int which, int *match_level, int *n_frames, PHONEME_LIST *plist); +frameref_t *LookupSpect(PHONEME_TAB *this_ph, int which, FMT_PARAMS *fmt_params, int *n_frames, PHONEME_LIST *plist); unsigned char *LookupEnvelope(int ix); int LoadPhData(); @@ -365,13 +492,15 @@ espeak_ERROR LoadMbrolaTable(const char *mbrola_voice, const char *phtrans, int void SetParameter(int parameter, int value, int relative); void MbrolaTranslate(PHONEME_LIST *plist, int n_phonemes, FILE *f_mbrola); //int MbrolaSynth(char *p_mbrola); -int DoSample(PHONEME_TAB *ph1, PHONEME_TAB *ph2, int which, int length_mod, int amp); -int DoSpect(PHONEME_TAB *this_ph, PHONEME_TAB *prev_ph, PHONEME_TAB *next_ph, - int which, PHONEME_LIST *plist, int modulation); +//int DoSample(PHONEME_TAB *ph1, PHONEME_TAB *ph2, int which, int length_mod, int amp); +int DoSample3(PHONEME_DATA *phdata, int length_mod, int amp); +int DoSpect2(PHONEME_TAB *this_ph, int which, FMT_PARAMS *fmt_params, PHONEME_LIST *plist, int modulation); int PauseLength(int pause, int control); int LookupPhonemeTable(const char *name); void InitBreath(void); void KlattInit(); +void KlattReset(int control); int Wavegen_Klatt2(int length, int modulation, int resume, frame_t *fr1, frame_t *fr2); + diff --git a/src/tr_languages.cpp b/src/tr_languages.cpp index 8989cab5..921ef42a 100644 --- a/src/tr_languages.cpp +++ b/src/tr_languages.cpp @@ -1183,8 +1183,9 @@ typedef struct { */ -#define RUSSIAN2 + #ifdef RUSSIAN2 +// This is now done in the phoneme data, ph_russian int ChangePhonemes_ru(Translator *tr, PHONEME_LIST2 *phlist, int n_ph, int index, PHONEME_TAB *ph, CHANGEPH *ch) {//============================================================================================================= @@ -1276,96 +1277,6 @@ PH('V','#'),PH('I','3'),PH('I','2'),PH('E','3')}; return(0); } -#else - -int ChangePhonemes_ru(Translator *tr, PHONEME_LIST2 *phlist, int n_ph, int index, PHONEME_TAB *ph, CHANGEPH *ch) -{//============================================================================================================= -// Called for each phoneme in the phoneme list, to allow a language to make changes -// flags: bit 0=1 last phoneme in a word -// bit 1=1 this is the highest stressed vowel in the current word -// bit 2=1 after the highest stressed vowel in the current word -// bit 3=1 the phonemes were specified explicitly, or found from an entry in the xx_list dictionary -// ph The current phoneme - - int variant; - int vowelix; - PHONEME_TAB *prev, *next; - - if(ch->flags & 8) - return(0); // full phoneme translation has already been given - - // Russian vowel softening and reduction rules - if(ph->type == phVOWEL) - { - #define N_VOWELS_RU 7 - static unsigned char vowels_ru[N_VOWELS_RU] = {'a','A','o','E','i','u','y'}; - - // each line gives: soft, reduced, soft-reduced, post-tonic - static unsigned short vowel_replace[N_VOWELS_RU][4] = { - {'&', 'V', 'I', 'V'}, // a - {'&', 'V', 'I', 'V'}, // A - {'8', 'V', 'I', 'V'}, // o - {'e', 'I', 'I', 'I'}, // E - {'i', 'I', 'I', 'I'}, // i - {'u'+('"'<<8), 'U', 'U', 'U'}, // u - {'y', 'Y', 'Y', 'Y'}}; // y - - prev = phoneme_tab[phlist[index-1].phcode]; - next = phoneme_tab[phlist[index+1].phcode]; - -if(prev->mnemonic == 'j') - return(0); - - // lookup the vowel name to get an index into the vowel_replace[] table - for(vowelix=0; vowelixmnemonic) - break; - } - if(vowelix == N_VOWELS_RU) - return(0); - - // do we need a variant of this vowel, depending on the stress and adjacent phonemes ? - variant = -1; - if(ch->flags & 2) - { - // a stressed vowel - if((prev->phflags & phPALATAL) && ((next->phflags & phPALATAL) || phoneme_tab[phlist[index+2].phcode]->mnemonic == ';')) - { - // between two palatal consonants, use the soft variant - variant = 0; - } - } - else - { - // an unstressed vowel - if(prev->phflags & phPALATAL) - { - variant = 2; // unstressed soft - } - else - if((ph->mnemonic == 'o') && ((prev->phflags & phPLACE) == phPLACE_pla)) - { - variant = 2; // unstressed soft ([o] vowel following: ш ж - } - else - if(ch->flags & 4) - { - variant = 3; // post tonic - } - else - { - variant = 1; // unstressed - } - } - if(variant >= 0) - { - phlist[index].phcode = PhonemeCode(vowel_replace[vowelix][variant]); - } - } - - return(0); -} #endif diff --git a/src/translate.cpp b/src/translate.cpp index c74997dc..8917d9b4 100755 --- a/src/translate.cpp +++ b/src/translate.cpp @@ -962,7 +962,7 @@ if((wmark > 0) && (wmark < 8)) if(prefix_type & SUFX_B) { -// SUFX_B is used for Turkish, tr_rules contains "(Pb£ +// SUFX_B is used for Turkish, tr_rules contains "(Pb£ // retranslate the prefix part char *wordpf; char prefix_phonemes2[12]; @@ -1593,7 +1593,7 @@ static int TranslateWord2(Translator *tr, char *word, WORD_TAB *wtab, int pre_pa plist2 = &ph_list2[n_ph_list2]; stress = 0; - next_stress = 0; + next_stress = 1; srcix = 0; max_stress = -1; @@ -1663,7 +1663,7 @@ static int TranslateWord2(Translator *tr, char *word, WORD_TAB *wtab, int pre_pa // don't add stress phonemes codes to the list, but give their stress // value to the next vowel phoneme // std_length is used to hold stress number or (if >10) a tone number for a tone language - if(ph->spect == 0) + if(ph->program == 0) next_stress = ph->std_length; else { @@ -1720,7 +1720,7 @@ static int TranslateWord2(Translator *tr, char *word, WORD_TAB *wtab, int pre_pa if(ph->type == phVOWEL) { stress = next_stress; - next_stress = 0; + next_stress = 1; // default is 'unstressed' if(stress >= 4) { @@ -2272,7 +2272,7 @@ if((c == '/') && (tr->langopts.testing & 2) && IsDigit09(next_in) && IsAlpha(pre if((c == 0x92) || (c == 0xb4) || (c == 0x2019) || (c == 0x2032)) c = '\''; // 'microsoft' quote or sexed closing single quote, or prime - possibly used as apostrophe - if((c == '?') && IsAlpha(prev_out) && IsAlpha(next_in)) + if(((c == 0x2018) || (c == '?')) && IsAlpha(prev_out) && IsAlpha(next_in)) { // ? between two letters may be a smart-quote replaced by ? c = '\''; diff --git a/src/translate.h b/src/translate.h index e8bfbc17..db5f56c5 100755 --- a/src/translate.h +++ b/src/translate.h @@ -229,15 +229,6 @@ typedef struct{ unsigned char length; } WORD_TAB; -// a clause translated into phoneme codes (first stage) -typedef struct { - unsigned char phcode; - unsigned char stresslevel; - unsigned char tone_ph; - unsigned char synthflags; - unsigned short sourceix; -} PHONEME_LIST2; - typedef struct { int type; @@ -642,5 +633,7 @@ void *TranslateClause(Translator *tr, FILE *f_text, const void *vp_input, int *t int ReadClause(Translator *tr, FILE *f_in, char *buf, short *charix, int *charix_top, int n_buf, int *tone_type); void SetVoiceStack(espeak_VOICE *v); +void InterpretPhoneme(Translator *tr, int control, PHONEME_LIST *plist, PHONEME_DATA *phdata); +void InterpretPhoneme2(int phcode, PHONEME_DATA *phdata); extern FILE *f_trans; // for logging diff --git a/src/vowelchart.cpp b/src/vowelchart.cpp index fde5bda0..3cb091fa 100644 --- a/src/vowelchart.cpp +++ b/src/vowelchart.cpp @@ -511,7 +511,7 @@ void MakeVowelLists(void) SPECT_SEQ *seq; SPECT_SEQK *seqk; frame_t *frame; - int match_level; + PHONEME_DATA phdata; char dirname[sizeof(path_source)+20]; char fname[sizeof(dirname)+40]; @@ -540,10 +540,12 @@ void MakeVowelLists(void) ph = phoneme_tab[phcode]; - if(ph->type != phVOWEL) + if((ph==NULL) || (ph->type != phVOWEL)) continue; - if((ix = LookupSound(ph, phoneme_tab[phonPAUSE], 1, &match_level, 0)) == 0) + InterpretPhoneme2(phcode, &phdata); + + if((ix = phdata.sound_addr[pd_FMT]) == 0) continue; seq = (SPECT_SEQ *)(&spects_data[ix]); @@ -572,9 +574,11 @@ void MakeVowelLists(void) } -extern int n_envelopes; -extern char envelope_paths[][80]; -extern unsigned char envelope_dat[][128]; +#define N_ENVELOPES 30 +#define ENV_LEN 128 +int n_envelopes = 0; +char envelope_paths[N_ENVELOPES][80]; +unsigned char envelope_dat[N_ENVELOPES][ENV_LEN]; #define HT_ENV 140 #define WD_ENV 128*2 diff --git a/src/wavegen.cpp b/src/wavegen.cpp index 3cb4e8fc..f423ee1b 100755 --- a/src/wavegen.cpp +++ b/src/wavegen.cpp @@ -720,7 +720,6 @@ void WavegenInit(int rate, int wavemult_fact) max_hval = 0; wdata.amplitude = 32; - wdata.prev_was_synth = 0; for(ix=0; ix> 10; z2 = (z2 * wdata.mix_wave_amp)/32; + + if((wdata.mix_wavefile_ix + wdata.mix_wavefile_offset) >= wdata.mix_wavefile_max) // reached the end of available WAV data + wdata.mix_wavefile_offset -= (wdata.mix_wavefile_max*3)/4; } z1 = z2 + (((total>>8) * amplitude2) >> 13); @@ -1864,14 +1866,14 @@ int WavegenFill(int fill_zeros) echo_complete -= length; } wdata.n_mix_wavefile = 0; - wdata.prev_was_synth = 0; + KlattReset(1); result = PlaySilence(length,resume); break; case WCMD_WAVE: echo_complete = echo_length; wdata.n_mix_wavefile = 0; - wdata.prev_was_synth = 0; + KlattReset(1); result = PlayWave(length,resume,(unsigned char*)q[2], q[3] & 0xff, q[3] >> 8); break; @@ -1879,11 +1881,15 @@ int WavegenFill(int fill_zeros) // wave file to be played at the same time as synthesis wdata.mix_wave_amp = q[3] >> 8; wdata.mix_wave_scale = q[3] & 0xff; + wdata.n_mix_wavefile = (length & 0xffff); + wdata.mix_wavefile_max = (length >> 16) & 0xffff; if(wdata.mix_wave_scale == 0) - wdata.n_mix_wavefile = length*2; - else - wdata.n_mix_wavefile = length; + { + wdata.n_mix_wavefile *= 2; + wdata.mix_wavefile_max *= 2; + } wdata.mix_wavefile_ix = 0; + wdata.mix_wavefile_offset = 0; wdata.mix_wavefile = (unsigned char *)q[2]; break;