From cbc23d04c0dd5e1de1101f306937577bbf9aa2fc Mon Sep 17 00:00:00 2001 From: jonsd Date: Thu, 10 Apr 2008 16:25:15 +0000 Subject: [PATCH] [1.36.12] lang=hr: adjust phonemes [S tS tS; Z dZ dZ;] git-svn-id: https://espeak.svn.sourceforge.net/svnroot/espeak/trunk@173 d46cf337-b52f-0410-862d-fd96e6ae7743 --- dictsource/de_list | 2 +- dictsource/dict_phonemes | 21 +- dictsource/en_list | 6 +- dictsource/en_rules | 17 +- dictsource/hbs_rules | 3 +- dictsource/ro_list | 285 +++++++++++++++--- dictsource/ro_rules | 88 +++--- dictsource/zh_rules | 10 +- phsource/compile_report | 25 +- phsource/dzh/dzh | Bin 970 -> 971 bytes phsource/mbrola/en1 | 2 + phsource/mbrola/ro1 | 1 + phsource/mbrola/us | 1 + phsource/mbrola/us3 | 1 + phsource/ph_croatian | 72 +++++ phsource/ph_kinyarwanda | 115 ++++++++ phsource/ph_korean | 129 +++++++++ phsource/phonemes | 2 +- phsource/ufric/sh3.wav | Bin 0 -> 4940 bytes phsource/ustop/ts_pzd3.wav | Bin 0 -> 3360 bytes phsource/ustop/tsh2.wav | Bin 0 -> 3644 bytes src/Makefile | 19 +- src/dictionary.cpp | 18 ++ src/intonation.cpp | 8 + src/synthdata.cpp | 2 +- src/tr_languages.cpp | 16 +- src/wave_sada.cpp | 576 +++++++++++++++++++++++++++++++++++++ 27 files changed, 1300 insertions(+), 119 deletions(-) create mode 100644 phsource/ph_kinyarwanda create mode 100644 phsource/ph_korean create mode 100644 phsource/ufric/sh3.wav create mode 100644 phsource/ustop/ts_pzd3.wav create mode 100644 phsource/ustop/tsh2.wav create mode 100755 src/wave_sada.cpp diff --git a/dictsource/de_list b/dictsource/de_list index 11f4adc8..b4cbaa31 100644 --- a/dictsource/de_list +++ b/dictsource/de_list @@ -26,7 +26,7 @@ _- b'IndEst@-*,IC _! 'aUs_|@-*,u:fe:ts,aIC@n _? f@-*'Age:ts,aIC@n _' 'apOst@-*,Of -_" 'anf,y:*UNsts,aIC@n +_" tsi:t'A:t _/ S@-*'Egst@-*IC _( kl'am3||_|'aUf _) kl'am3||ts'u: diff --git a/dictsource/dict_phonemes b/dictsource/dict_phonemes index 6d56fd8a..6de5e0ff 100644 --- a/dictsource/dict_phonemes +++ b/dictsource/dict_phonemes @@ -288,9 +288,9 @@ w w2 x z Z Dictionary ro_dict -@ @- @I a aI aU e ea -eI eU i I^ iI o Oa oI -oU u uI y +@ @- @I @U a aI aU e +ea eI eU i I^ iI iU o +Oa oI oU u uI y * *; b c d dZ f g h j k l m m; n p @@ -360,13 +360,13 @@ t tS v w x z Z Dictionary ko_dict -a aI@ aU@ E e e: i i@3 -IR ji o O~ u u- U@ V -y: +a e E i ji o u u- +V -b d dZ g h j k k` -l m n N p p` r s -s` t t` tS tS` w +b c C c` ch d dZ g +h j J k k` kh l m +n N p p` ph r s S; +s` t t` th w Dictionary hbs_dict @@ -394,8 +394,7 @@ v w x z Dictionary rw_dict -a a# e e# i i# o u -u# +a e i o u * : b B c d dZ f g h j J k l m n diff --git a/dictsource/en_list b/dictsource/en_list index 8646da81..aa3669ce 100644 --- a/dictsource/en_list +++ b/dictsource/en_list @@ -875,6 +875,7 @@ dipole daIpoUl disconsolate dIsk'0ns@l@t disc dIsk // for discs disciple dIs'aIp@L +discourse $1 discounted $2 disease dIz'i:z dishes dISIz @@ -891,6 +892,7 @@ domino $1 donor doUn3 dont doUnt $only dose doUs +dosage doUsIdZ dramatic dr@matIk drawer drO@ drier draI3 @@ -1256,7 +1258,6 @@ literature lItrItS3 live laIv $onlys live lIv $verb livestock l'aIvst,0k -liver lIv3 lively laIvlI2 llama lA:m@ loch l0x @@ -1529,6 +1530,7 @@ pirate paIr@t piteous pIti@s pituitary $2 plaguing pleIgIN +plugin plVgIn plunging plVndZIN plus plVs poky poUkI2 @@ -1772,6 +1774,7 @@ sergeant sA@dZ@nt settee $2 severe sIv'i@3 $only severely sIv'i@3lI2 $verbf +sex sEks // sexism several sEvr@L shampoo $2 sheriff S'ErIf @@ -1936,7 +1939,6 @@ tribunal traIb'ju:n@L trilogy trIl@dZI2 trio tri:oU trojan troUdZ@n -trolley tr0lI2 trophy troUfI2 truely tru:lI2 $verbf truest tru:@st diff --git a/dictsource/en_rules b/dictsource/en_rules index 36f1d430..414eafee 100644 --- a/dictsource/en_rules +++ b/dictsource/en_rules @@ -660,7 +660,7 @@ ann (eal a2n ann (ih a2n ann (oun a2n - ann (oy a2n + _) ann (oy a2n ann (ui a2n ann (ul a2n ann (un a2n @@ -1907,6 +1907,7 @@ &) ella (_ 'El@ &v) eller (_ @l@ @) elli (_ 'ElI2 + &) elling @lI2N &) ell (ous @l cib) el (_ El xc) el (_ 'El @@ -2368,7 +2369,6 @@ gg g g (e dZ _) gaol dZeIl - g) ged (_ gId g (eek g geous dZ=@s g (E dZ @@ -2432,6 +2432,8 @@ K) hl L &) hold (_$4 hoUld holme hoUm + &) hood (_S4 hUd + &) hoods (_S5 hUdz _) h (our _) h (onor _) h (onou @@ -3106,6 +3108,7 @@ XC) iv (el Iv _g) iv (e Iv _l) iv (e Iv + l) iv (er Iv r) iv (er Iv dr) iv (er aIv sh) iv (er Iv @@ -3563,6 +3566,7 @@ y) ol (k oU p) oll (u @l r) oll oUl + tr) oll (A 0l car) oll @l br) oll 0l t) oll oUl @@ -4248,6 +4252,8 @@ rea (C% r,i:@ _) rea (dC r,i:@ rea (gen rI2eI + _) re (ali ,ri: + _) re (all ,ri: _) re (au@P2 ,ri: re (ck rE reckon rEk@n @@ -4306,7 +4312,7 @@ rea (l ri@ ?3 rea (l ri: rea (lit rI2a - rea (lloc rI2a + _) rea (lloP2 ,ri: rea (lm rE rea (lte rI20 re (ment r@ @@ -4492,6 +4498,7 @@ _) tele tElI2 r) tga (g gI &) tia (_ S@ + &s) tia (_ tS@ @) t (ia S pi) t (ia t is) t (ian+ t @@ -4625,7 +4632,6 @@ @) u (ctive 'V u (guC V f) u (gal 'ju: - pl) ug Vg ug (er_ u:g s) ugge (st @dZE mp) ug (n ju: @@ -4896,6 +4902,9 @@ y j y (C_ I y (CC I + _) y (C@ I + _) y (n@ V + _) y (s@ V C) y (abl I2 y (y y (C I diff --git a/dictsource/hbs_rules b/dictsource/hbs_rules index 45804b09..2b7ac52b 100755 --- a/dictsource/hbs_rules +++ b/dictsource/hbs_rules @@ -68,6 +68,7 @@ l l K) l (K l- lj (+ l^ + v) lj lj .group m m m @@ -98,7 +99,7 @@ rr R r (_ R - K) r (K 'r- + K) r (K R // ?? .group s diff --git a/dictsource/ro_list b/dictsource/ro_list index 43bbe8ee..8f2fcff3 100644 --- a/dictsource/ro_list +++ b/dictsource/ro_list @@ -47,21 +47,20 @@ z zet ă '@ $atend î ,ydin'i $atend -_. punkt _?? ka*akt'er _cap maZusk'ul@ // accent names _lig ligat'ur@ -_acu aktS'entaskuts'it -//_ac2 +_acu askuts'it +_ac2 d'ubluasku'tsit _brv k@tS'ul@ _ced sed'il@ _cir tSirkumfl'eks _dia t@-*'em@ _dot punkt -_grv aktS'entg@-*'av -_hac hatS'ek +_grv g@-*'av +_hac h'atSek _mcn mak@-*'on _ogo ogon'ek //_rng @@ -69,6 +68,42 @@ _stk sl'eS _tld t'ild@ +// punctuation and symbols +_. punkt +_, v'irgul@ +_: do'u@p'unkte +_; p'unkt||Siv'irgul@ +_! eksklam'a*e +_? ynt@-*eb'a*e +_- k@-*'atim@ +__ sublinj'at +_' apost@-*'of +_" gilim'ele +_( pa*ant,ez@desk'is@ +_) pa*ant,ez@ynk'is@ +_[ pa*ant,ez@p@t@-*'at@ +_] pa*ant,ez@p@t@-*'at@ynk'is@ +_{ pa*ant,ez@akol'ad@ +_} pa*ant,ez@akol'ad@ynk'is@ +_< maI||m'ik +_> maI||m'a*e +_~ t'ild@ +_\ b,eksl'eS +_| b'ar@vertik'al@ +_#9 t'ab +_#32 sp'atsiU + += eg'al +# dj'ez ++ plus +& ampersand +© k'apiraIt +@ a*'ond +/ sleS +€ 'eU*o +° g@-*ade + + // numeric //******** @@ -154,7 +189,7 @@ s.a Si'aSa ş.a. Si'aSa s.a.m.d Se|aSamaIdeparte ş.a.m.d Se|aSamaIdeparte -b-dul buleva*dul +b-dul bulev'a*dul // articles un $u @@ -220,6 +255,7 @@ matale $u2+ mă $u te $u +ţie ts'ie $u+ îl $u o $u ne $u @@ -253,6 +289,7 @@ căruia $u1 căreia $u1 cărora $u1 altora $u1+ +alteia $u1+ ăstora $u1+ // possessive adjectives @@ -292,6 +329,7 @@ in $u $brk în $u $brk pe $u $brk că $u +ca $u ce $u la $u $brk de $u @@ -302,7 +340,7 @@ cu $u // with fără f,@r@ $pause // without fara f,@r@ $pause // (fără) lângă $brk // beside -prin $brk // through +prin $u $brk // through alături $2 $brk // beside după $brk // after, behind dupa dup@ $brk // (după) @@ -352,8 +390,11 @@ aşa $2 $brk // so, thus altfel $1 $brk //otherwise atâţia at'ytsja abia abj'a +cam $u celelalte $u3+ celălalt $u3+ +fiecărui fjek'@ruI $u +fiekăruia fjec'@ruIa $u+ încotro $3 mai $u orice o*I^tS,e $u3 // any @@ -440,8 +481,9 @@ amăgi $3 ameţi $3 amuţi $3 - +arcui arku'i aţinti $3 + blagoslovi $4 boţi $2 buşi $2 @@ -466,6 +508,7 @@ depăşi $3 descoperi $4 deservi $3 desluşi $3 +despărţi $3 deveni $3 dovedi $3 domoli $3 @@ -483,6 +526,7 @@ hohoti $3 îmbâcsi $3 îmbunătăţi $5 împărţi $3 +împături $5 împlini $3 încălzi $3 încreţi $3 @@ -492,12 +536,14 @@ hohoti $3 înghiţi $3 îngriji $3 înlocui ynloku'i +împleti $3 înşela $3 înregistra $4 înroşi $3 întâlni $3 înteţi $3 învârti $3 +înveli $3 învrednici $4 ivi $2 @@ -509,10 +555,13 @@ linguşi $3 lipi $2 lovi $2 mânji $2 +miji $2 mirosi $3 moleşi $3 +mulţumi $3 muri mur'i +năpusti $3 necăji $3 numi $2 @@ -531,6 +580,7 @@ povesti $3 $only potrivi $3 prăbuşi $3 prăji $2 +pregăti $3 preveni $3 primi $2 porni $2 @@ -546,6 +596,7 @@ rătăci $3 regăsi $3 reîntâlni $4 reuşi $3 +revi $2 reveni $3 risipi $3 rosti $2 @@ -554,6 +605,7 @@ rotunji $3 săvârşi $3 sclifosi $3 +scotoci $3 scuti $2 servi $2 sfârşi $2 @@ -567,6 +619,8 @@ strivi $2 stropşi $2 suci $2 +şopti $2 + ticsi $2 trezi $2 @@ -579,6 +633,7 @@ veşteji $3 vrăji $2 vieţui vjetsu'i vorbi $2 +zugrăvi $3 zădărnii $4 @@ -587,9 +642,11 @@ zădărnii $4 îneca $3 înroşi $3 +împrăştia $3 învărtejea $4 învărtea $3 învolbura $4 +aburea $2 aduna $3 afla afl'a accelera $4 @@ -597,27 +654,37 @@ abona $3 acumula $4 adera $3 afirma $3 +agăţa $3 agita $3 aglomera $4 apărea $3 aprecia ap@-*etSj'a apropia ap@-*opi'a +arăta $3 amuţea $3 +ardea $2 +apleca $3 asculta $3 asigura $4 +aşeza $3 aştepta $3 -agonisea $2 +aşternea $3 +agonisea $4 agrea ag@-*e'a ajuta $3 +ajungea $3 alătura $4 alerga $3 -ameninţa $3 +ameninţa $4 anunţa $3 apăra $3 +apăsa $3 apela $3 ataca $3 atârna $3 +auzea $2 +balansa $3 băga $2 blestema $3 bloca $3 @@ -629,14 +696,15 @@ călca $2 cânta $2 câştiga $3 căsca $2 - +căpăta $3 căşuna $3 căsători $4 -căuta $2 +căuta k@ut'a ceda $2 cerşea $2 chema $2 clasifica $4 +claxona $3 clinti $2 clipi $2 cobora $3 @@ -648,6 +716,7 @@ concretiza $4 concura $3 conecta $3 confunda $3 +consta $2 constata $3 conta $2 continua kontinw'a @@ -658,6 +727,8 @@ costa kost'a crea k@-*e'a credea $3 creştea $2 +croi kro'i +cunoştea $3 cutreiera $4 dansa $2 dădea $2 @@ -680,15 +751,20 @@ descurca $3 desfunda $3 desprindea $3 +devenea $3 determina $4 digera $3 discuta $3 +dispărea $3 dispera $3 distra $2 +domina $3 dorea $2 dormea $2 - +ducea $2 duhnea $2 +dura $2 +durea $2 echilibra $4 reechilibra $5 efectua efektw'a @@ -701,6 +777,7 @@ evoca $3 evolua evolw'a etala $3 exagera $4 +examina $4 exaspera $4 executa $4 experimenta $5 @@ -718,10 +795,14 @@ fulgera $3 furişa $3 gândea $2 gâdila $3 +gâtuia gytu'ja +găzduia g@zdu'ja +găsea $2 genera $3 germina $3 gonea $2 hăcuia $3 +holba $2 îmbâcsea $3 îngreuna $4 împărţea $3 @@ -731,16 +812,18 @@ hăcuia $3 îndurera $4 înfiera $3 însera $3 +îmbrăca $3 încălzea $3 încărca $3 încerca $3 -închega $2 +închega $3 încreţea $3 +îndrepta $3 înfăşura $4 înfunda $3 înghiontea $3 - +încuraja $4 întâmpina $4 ieşea $2 insera $3 @@ -749,22 +832,26 @@ interfera $4 iubea $2 îmbulzea $3 împuşca $3 +încheia ynke'ja încurca $3 + îndesea $3 îngrozi $3 întâmpla $3 înteţea $3 incinera $4 -intra $2 +instala $3 înainta $3 înălţa $3 întreba $3 învârtea $3 -învingea $2 +învingea $3 invita $3 juca $2 lăsa $2 +lărgea $2 legifera $4 lingea $2 +lucea $2 mânca $2 mângâia $3 mărturisea $4 @@ -775,14 +862,19 @@ mira $2 mişuna $3 modera $3 modifica $4 -murea $2 + +mulţumea $3murea $2 murmura $3 +năştea $2 +năpustea $3 numea $2 negocia negotSi'a nimerea $3 +obiecta $3 observa $3 ocupa $3 oferea $3 +ofta $2 paraliza $4 participa $4 @@ -795,15 +887,19 @@ păzea $2 permitea $3 persevera $4 plăcea $2 +plângea $2 pleca $2 - +plimba $2 +ploua $2 pornea $2 potrivea $3 preda $2 prefera $3 +pregătea $3 prepara $3 prelungea $3 prezenta $3 +privea $2 producea $3 promova $3 pronunţa $3 @@ -815,9 +911,10 @@ răbda $2 răcea $2 rămânea $3 răscolea $3 +răsfoi r@sfo'i răsturna $3 răsucea $3 - +rătăci $3 râdea $2 realiza $4 recupera $4 @@ -833,9 +930,9 @@ repeta $3 respecta $3 respira $3 reuşea $3 -revenea $2 +revenea $3 reverbera $4 - +rezema $3 ridica $3 risca $2 rostea $2 @@ -852,7 +949,9 @@ semna $2 scotea $2 sfărâma $3 sfârteca $3 +simţea $2 specializa $4 +speria spe*'ja spulbera $3 sosea $2 spăla $2 @@ -864,16 +963,18 @@ stăpânea $3 stârnea $2 stătea $2 - +ştia St'ja stoca $2 străfulgera $4 strica $2 sucea $2 +strălucea $3 sugea $2 sugera $3 suda $2 supăra $3 şuiera $3 +temea $2 tempera $3 termina $3 tolera $3 @@ -885,13 +986,16 @@ triumfa $3 târa $2 ţinea $2 uita $2 +umplea $2 urca $2 urla $2 utiliza $4 valora $3 vâna $2 +vâslea $2 vedea $2 venera $3 +vibra $2 visa $2 vira $2 @@ -900,6 +1004,7 @@ vocifera $4 vorbea $2 vota $2 zăcea $2 +zugrăvea $3 zbiera $2 zbura $2 zgâria $3 @@ -948,6 +1053,7 @@ zgâria $3 (v au) vaU $u (v am) vam $u +(v o) $u (m ar) mar $u (te ar) tear $u @@ -963,8 +1069,14 @@ zgâria $3 (şi a) SI^a $u (s o) so $u (mi e) mi,e $u +(mi am) $u +(mi ai) $u +(mi ar) $u + +ni $u (nu i) nui $u (i am) jam $u +(i ai) jaI $u (a şi) aS;I^ $u (a ţi) atsI^ $u (într o) ynt@-*o @@ -1014,6 +1126,7 @@ albert $1 albitu $3 alegem $2 alegeţi $2 +alergă $2 alergătu $4 alex $1 alintătu $4 @@ -1021,6 +1134,7 @@ altceva $3 altcineva $4 altcuiva $3 altcumva $3 +altundeva $4 alunecătu $4 amăruie $3 ameninţă $2 @@ -1035,6 +1149,8 @@ amici $2 amicii $2 amicilor $2 andrei $2 + +aplecă $3 apoi $2 aprig $1 aprige $1 @@ -1042,6 +1158,8 @@ aprigi $1 apucătu $4 apus ap'us arăt ar'@t +arăţi ar'@tsI^ +arătă $3 ardem $1 ardeţi $1 arhitectu $4 @@ -1056,24 +1174,29 @@ aruncătu $4 asemenea $2 asigur $2 astăzi $1 +aşeză $3 ating $2 aud a'ud aude a'ude aur 'aur austria a'ustrja +auster aust'er aventu $3 avicultu $4 avocatu $4 +avu $2 bacterie $2 bacteriei $2 bacterii $2 badjocu $3 balint $1 +băgă $2 barman $1 bătătu $3 batem $1 bateţi $1 +bău b@'u băutu $3 belgia $1 biseric $2 @@ -1099,11 +1222,13 @@ călcătu $3 căldu $2 cămăruie $3 canapea $3 +cancer $1 candidatu $4 cândva $2 cânepă $1 cântec $1 cântece $1 +căută $3 capăt $1 capete $1 capitol $2 @@ -1112,6 +1237,7 @@ caractere $3 caracterele $3 caracterelelor $3 cărăruie $4 +căzu $2 careva $3 caricatu $4 cârpitu $3 @@ -1119,15 +1245,15 @@ cartele $2 câteva $3 câtorva $3 câtuşi $1 -căutăm k@ut'@m -căutare k@ut'a*e -căutătu k@ut@t'u -cauţi k'autsI^ -caut k'aut căzătu $3 +ceainic tS'eajnik +ceai tS'eaj centu $2 cenzu $2 cerbice $2 + +cerem $1 +cereţi $1 cetăţuie $3 ceva $2 chelălăitu $5 @@ -1147,17 +1273,20 @@ clocot $1 clocote $1 cocin $1 cocine $1 +confişte $2 cocos $1 colaborăm $4 color kol'o* comparăm $3 complice $2 compus komp'us +computer komp'jut@r concurăm $3 condei $2 conducem $2 conduceţi $2 conductor $2 +condus kond'us consider $2 consum $2 continuă $2 @@ -1178,6 +1307,7 @@ creatu $3 credem $1 credeţi $1 creier $1 +crescu $2 creştem $1 creşteţi $1 crivăţ $1 @@ -1186,14 +1316,20 @@ cugeţi $1 cuib k'uIb cuiva $2 cultu $2 +cusu $2 cumpărăm $3 +cumpărătu $3 $stem cumva $2 cunoaştem $2 cunoaşteţi $2 +cutii $2 +cutie kut'ie +cutia kut'ia cutremură $2 dambla $2 dantu $2 +dădu $2 dărâmătu $4 dărăt $2 david $1 @@ -1211,11 +1347,14 @@ deschideţi $2 deschizătu $4 descompus deskomp'us descopăr $2 +desfăcu $3 desfacem $2 desfaceţi $2 desigur $2 desktop $1 -destul $2 +despărţitu $4 $stem +determin $2 +deunăzi $4 dezordine $2 diavol $1 diavoli $1 @@ -1233,10 +1372,12 @@ doctore $1 doina doIna domină $1 domine $1 +domniţă $2 dori $2 dradus t@-*ad'us dragoş $1 dragoste $1 +drum dr'um ducem $1 duceţi $1 duium $2 @@ -1251,6 +1392,7 @@ echilibrăm $4 edit $1 efeme $3 egale $2 +eliberă $4 elice $2 elimină $2 energii $alt @@ -1262,10 +1404,13 @@ examen $2 exclus exkl'us exe ekse exista $3 +exotic egz'otik +ex'otice egzotitSe expedia $3 explică $2 explice $2 -expus exp'us +explorăm $3 +expus eksp'us facem $1 faceţi $1 @@ -1273,7 +1418,9 @@ factice $2 factor $1 factori $1 factu $2 +farfurie farfu*'ie fasole $2 +făcu $2 febrile $2 felix $1 femei $2 @@ -1322,6 +1469,7 @@ găurice $2 geamăn $1 geamandu $3 geamăt $1 +gemu $2 gemeni $1 gemete $1 ghilimele $3 @@ -1338,6 +1486,9 @@ gutuie $2 hahale $3 haidem $1 haideţi $1 +hârtie hyrt'ie +hârtii $2 +hărnicie h@rnitS'ie hime $2 hindus ind'us hohot $1 @@ -1360,31 +1511,38 @@ inamice $3 inamicilor $3 înăuntrul yn@'unt@-*ul înăuntru yn@'unt@-*u -încăpere $3 +îmbrăcă $3 încăperea $3 +încăpere $3 încăperii $3 încăperile $3 încăperilor $3 încărcătu $4 +începu $3 începem $2 -începem $2 -începeţi $2 începeţi $2 încheietu $4 +închidem $2 +închideţi $2 încingem $2 încingeţi $2 -inclus incl'us +înfăşurăm $4 +inclus inkl'us +ipsos $1 +încercă $3 încrengătu $4 încruntătu $4 încuie $2 incultu $3 încurcătu $4 îndărăt $3 +îndepărtă $4 indic $2 îndoitu $4 înfăşurătu $5 înfloritu $4 infrastructu $4 +isterie $3 înfundătu $4 înghiţitu $4 ingine $3 @@ -1395,17 +1553,26 @@ inimi $1 inimii $1 înjurătu $4 înpunsătu $4 +indigo $3 inspector $2 instructor $2 +insul $1 $stem +întâi $2 întâmpină $2 întăritu $4 înţelegem $3 înţelegeţi $3 înţepătu $4 +întindem $2 +întindeţi $2 interpus inte@-*p'us interzice $3 intim $1 intime $1 +întrebă $3 +îndreptă $3 +întoarcem $2 +întoarceţi $2 întorsătu $4 întotdeauna yntotdea'una intrăm $2 @@ -1428,7 +1595,9 @@ lagăre $1 laser $1 latice $2 latură $1 +latex $1 lazăr $1 +lăsă $2 lefter $1 legătu $3 liber $1 @@ -1439,9 +1608,11 @@ limite $1 limpede $1 lingură $1 lipsi $2 +linux $1 literatu $4 logic $1 lovitu $3 +lucrăm $2 lucrătu $3 maculatu $4 @@ -1455,6 +1626,7 @@ marginii $1 mării $1 maritim $2 marius $1 +marker m'ark@r martor $1 martore $1 martori $1 @@ -1469,6 +1641,7 @@ mergeţi $1 merit $1 mesageră$2 mesagera $3 +mestece $1 metafor $2 metafore $2 metaforic $3 @@ -1479,7 +1652,7 @@ mijloace $1 mijloc $1 minim $1 mişto $2 -mişuna $1 +mişună $1 moisei moIs'eI molim $1 molime $1 @@ -1517,10 +1690,12 @@ obiceiu $3 ocol $2 oferă $2 ofere $2 +oftă $2 ok ok'eI omăt om'@t operăm $3 optim $1 +opus op'us ordin $1 ordine $1 oscar $1 @@ -1569,6 +1744,9 @@ păstrăm $2 păstrăv $1 patim $1 patimi $1 +păianjen $2 +păianjeni $2 +păru $2 pătu $1 pătură $1 pepene $1 @@ -1576,6 +1754,8 @@ pepeni $1 perdea $2 permitem $2 permiteţi $2 +petrecem $2 +petreceţi $2 picătu $3 pictor $1 pictori $1 @@ -1583,6 +1763,7 @@ pictorii $1 pieptănătu $4 pierdem $1 pierdeţi $1 +piuie p'iuie pişcătu $3 pisic $1 pisica $2 @@ -1591,6 +1772,7 @@ pisici $2 pistoale $2 pitic $2 pitici $2 +plecă $2 plăcere $2 plăceri $2 plânger $1 @@ -1600,6 +1782,7 @@ politic $2 polonic $3 popice $2 pote $2 +portocaliu $4 prăjitu $3 predispus p@-*edisp'us prefacem $2 @@ -1637,6 +1820,7 @@ răcnete $1 radar $1 răget $1 răgete $1 +rămâi $2 rămânem $2 rămâneţi $2 rânjet $1 @@ -1647,19 +1831,24 @@ râsete $1 răsputeri $3 recepţione $4 reci $1 +recuperăm $4 +regelui $1 regizor $2 regul $1 reguli $1 +reparăm $3 repede $1 repezi $1 rest $1 restu $1 reţinem $2 reţineţi $2 +rezemă $3 ridic $2 ridică $2 ridice $2 robert $1 +romînia $3 rotocol $3 sadea $2 @@ -1683,6 +1872,7 @@ secole $1 secu $2 securice $3 sedus sed'us +semene $1 semiprodus semip*od'us şenile $2 sergiu s'ergju @@ -1711,6 +1901,7 @@ sperăm $2 spirit $1 spirite $1 sprijin $1 +splendid $1 spunea $2 spunem $1 spuneţi sp'unetsI^ @@ -1727,6 +1918,8 @@ strecurăm $3 strigăt $1 strigăte $1 structu $2 + +studie $2 şubred $1 şubrede $1 sufăr $1 @@ -1742,23 +1935,28 @@ surplus su*pl'us suspus susp'us susţinem $2 susţineţi $2 +şedere $2 tabache $3 tăcere $2 tăcerea $2 tăceri $2 tăcerii $2 +tăcu $2 tânăr $1 ţandăra $1 ţăndări $1 tango $2 tanti tanti +tăie $2 +tăviţă $2 ţanţoş $1 târcol $2 tării $1 târziu tyrz'iu tastatu $3 tatăl $1 +taxi t'aksi ţeapăn $1 tejghea $2 ţelină $1 @@ -1769,6 +1967,7 @@ terapi $alt terapii $3 termen $1 termeni $1 +termin $1 ţinem $1 ţineţi $1 ţipete $1 @@ -1779,17 +1978,21 @@ tradus trad'us tragem $1 trageţi $1 trăsătu $3 +treacăt $1 trebuia $3 trecem $1 treceţi $1 trecu $2 tremură $1 +trimitem $2 +trimiteţi $2 trosnet $1 trosnete $1 tudor $1 tunet $1 tunete $1 turele $2 +turnă $2 ucidem $2 ucideţi $2 @@ -1811,12 +2014,15 @@ urzicătu $4 uscătu $3 usturătu $4 +windows 'wind@Us + văduvă $1 văduve $1 văietătu $4 vâlvătăi $3 vărsătu $3 vărul $1 +văzu $2 vasile $2 vătămătu $4 veder $2 @@ -1824,9 +2030,13 @@ vedere $2 vederi $2 vehicul $2 vehicule $2 +vesel $1 +verzuie verz'uje +veşnicie veSnitS'ie victim $1 victime $1 victor $1 +victorii $2 vie v'ie viitu $2 vindem $1 @@ -1843,6 +2053,7 @@ vizavi $3 vizită $1 volum vol'um vopsea $2 +voucher v'aUtS@r vuiet $1 vuiete $1 vultur $1 @@ -1851,6 +2062,7 @@ vulturii $1 zâmbet $1 zâmbete $1 +zahăr $1 zarzări $1 zburăm $2 zdravăn $1 @@ -1860,5 +2072,8 @@ zgârietu $4 zgomot $1 zgomote $1 ziua z'iw2a +zombi zombi + + diff --git a/dictsource/ro_rules b/dictsource/ro_rules index 7c8972e7..b0954968 100644 --- a/dictsource/ro_rules +++ b/dictsource/ro_rules @@ -12,13 +12,15 @@ .group a a a ai aI - ai (_ 'aI + ai (a aj + ai (_ 'aI au aU // ?? only at end of word ?? + c) au (t au au (_ 'aU a (AAA a &) a (_S1q a - gi) a (_S1q 'a + gi) a (_S1q a V@) a (N_ 'a ăi) a (_ 'a @) abil (_ 'abil @@ -31,6 +33,7 @@ ă @ ăi (_ @I ău @U // ?? only at end of word ?? + c) ău (t @u ău (_ '@U @) ăte (_S3t @te @) ătă (_S3t @t@ @@ -86,6 +89,7 @@ @) cnea (_ kne'a + .group d d d dd d @@ -98,7 +102,9 @@ ei (_ eI // eu eU // only at end of word ?? // eu e[u // ?? - eu (_ 'eU + @) eu (l_ 'eu + @) eu (_ eu + @) eu (_N 'eU ea ea &) ea (_S2q ea &) eSi eaj @@ -112,24 +118,24 @@ @) eşului (_ =eSuluI @) eşilor (_ =eSilor - @) ec (a_ =ek - @) ec (ă_ =ek - @) ec (ii_ =ek - @) ec (ile_ =ek - @) ec (ilor_ =ek - @At) ec (i@_ etS - @At) ec (A_ ek - @At) ec (ii_ eTtS + //@) ec (a_ =ek + //@) ec (ă_ =ek + //@) ec (ii_ =etS + //@) ec (i_ =etS + //@) ec (ilor_ =etS + //@At) ec (i@_ etS + //@At) ec (A_ ek + @At) ec (ii_ etS // &) es (_S1q e &C) e (re_ %e _ac) ee (a eI r) ei (er_ 'eI - @) e (re_ =e @) e (ri_ =e @) e (rea_ =e @) e (rii_ =e + @) e (rei_ =e i) e (re_ e i) e (ri_ e i) e (rii_ e @@ -155,6 +161,9 @@ g (i dZ gii dZiI gh g + &) gii (_ dZ'iI +&) gi (A_ dZi + .group h @@ -221,6 +230,7 @@ &) icile (_ =itSile &) icilor (_ =itSilor @) icii (_ =itSiI + @) icei (_ =itSeI scr) i (e 'i &) ing (_ %iNg // foreign words @@ -263,8 +273,6 @@ &) le (_S2t le &) lor (_S3t lor &) lui (_S3t luI - &) logi (A_ lodZ'i - &) logii (_ lodZ'iI .group m @@ -303,7 +311,8 @@ _) oi oI oi (_ 'oI ou oU - ou (_ 'oU + ou (_N 'oU + ou (_ ou o (AAA o @@ -388,13 +397,15 @@ .group u - u u - u (A w - _) ui uI - ui (_ uI - ui (e wi - V&) ui (_N u'i + u u + u (A w + _) ui uI + ui (_ 'uI + r) ui (n ui + ui (e wi + V&) ui (_N u'i + dest) ul ul &) ul (_S2t ul @ic) ul (_S2t ul @ic) ule (_S3t ule @@ -430,24 +441,15 @@ .group x - x ks - A) x (A gz - ma) x (i ks - cone) x (iu ks - i) x (e ks - o) x (e ks // boxele - u) x (a ks - a) x (a ks - a) x (ă ks - a) x (e ks - i) x (a ks - o) x (a ks - A) x (â ks - @) x (ibil ks - o) x (i ks // oxigen - a) x (ia ks // axial - ale) x ks - ta) x ks + x ks + e) x (a gz + e) x (e gz + e) x (i gz + me) x (ic ks + e) x (iA_ ks + e) x (iu ks + e) x (Ag ks + le) x ks .group y @@ -466,13 +468,6 @@ D_) % la_sut@ % p@-*otSent $ dolar - + plus - & ampersand - © k'apiraIt - @ a*'ond - / sleS - € 'eU*o - ° g@-*ade , (D v'irgul@ @@ -491,3 +486,4 @@ **) * (_ _:: + diff --git a/dictsource/zh_rules b/dictsource/zh_rules index 6f84d45d..f286965b 100644 --- a/dictsource/zh_rules +++ b/dictsource/zh_rules @@ -105,11 +105,11 @@ language). e (Dn @ //en eng - er @r - e1r @r55 - e2r @r35 - e3r @r214 - e4r @r51 + er (K @r + e1r (K @r55 + e2r (K @r35 + e3r (K @r214 + e4r (K @r51 .group f f f diff --git a/phsource/compile_report b/phsource/compile_report index 94c6f109..16e45ca8 100644 --- a/phsource/compile_report +++ b/phsource/compile_report @@ -24,7 +24,7 @@ pl 15 109 sk 29 127 cs 6 127 - hr 20 132 + hr 26 132 mk 3 133 sr 14 132 ru 39 129 @@ -47,8 +47,8 @@ tr 18 122 ku 17 121 id 15 119 - rw 12 122 - ko 18 114 + rw 15 124 + ko 18 145 Data file Used by b/b [b] base @@ -172,8 +172,12 @@ dzh/dzh_ [dZ] base [dZ;] base [dz;] base [J] hi + [dZ] hr + [dZ;] hr [dZ;] mk [dZ;] ru +dzh/dzh2 [dZ] hr + [dZ;] hr dzh/dz_pzd [J] base [J2] hi [J] tr @@ -184,11 +188,14 @@ dzh/xdzh [dZ] base [dZ;] base [dz;] base [J] hi + [dZ] hr + [dZ;] hr [dZ;] mk [dZ;] ru dzh/xdz_pzd [J] base [J2] hi envelope/i_risefall [11] zh +envelope/i_risefall2 [+2] rw envelope/p_214 [214] zh envelope/p_512 [8] vi envelope/p_fall [2] vi @@ -200,6 +207,7 @@ envelope/p_fall [2] vi [22] zh [33] zh [53] zh + [+] rw envelope/p_fallrise [4] vi envelope/p_level [1] vi [3] zhy @@ -602,8 +610,11 @@ ufric/sh [S] base ufric/sh_ [S] base [S] fr [s#] pt_pt +ufric/sh3 [S] hr + [Z] hr ufric/sh_pzd [S;] base [S;] ro + [s`] ko ufric/sh_pzd_ [S;] base [Z;] base ufric/sh_pzd2 [S] sr @@ -801,6 +812,8 @@ ustop/tsh [tS] base [c] zhy ustop/tsh_ [tS] base [c] zhy +ustop/tsh2 [tS] hr + [dZ] hr ustop/t_short [t.] hi [t] sk [t] el @@ -811,11 +824,13 @@ ustop/ts_pzd [tS;] base [ts;] base [ch] hi [tS;] ru - [tS`] ko ustop/ts_pzd_ [c] hi [c] hu ustop/ts_pzd2 [c] hi [c] hu + [c`] ko +ustop/ts_pzd3 [tS;] hr + [dZ;] hr ustop/t_sr [d] sr [t] sr ustop/ts_rfx [ts.] zh @@ -1135,10 +1150,12 @@ voc/z_ [z] base voc/zh [Z] base [z.] base [R^] sk + [Z] hr [Z] sr [Z;] ro voc/zh_ [Z] base [z.] base + [Z] hr [Z;] ro voc/zh_2 [R^/] sk voc/z_pzd [Z;] base diff --git a/phsource/dzh/dzh b/phsource/dzh/dzh index 5585cc356e1e6ff6f3404f97938647b7559aabdf..8a104dc82a3ac97f55d1a9753e713da14fa4a5bb 100644 GIT binary patch delta 29 kcmX@bewv*>IKb68B-k~OnSp^Jr7B}0p9y39M(1{B0DM#k6#xJL delta 28 jcmX@jeu|whIKb68B-k~OiGhJ3C2AtS31iAemv&|Vat8;J diff --git a/phsource/mbrola/en1 b/phsource/mbrola/en1 index 30439104..9e660261 100644 --- a/phsource/mbrola/en1 +++ b/phsource/mbrola/en1 @@ -29,3 +29,5 @@ 0 aI@ NULL 60 aI @ 0 aU@ NULL 75 aU @ 0 x NULL 0 k +0 t2 NULL 0 t + diff --git a/phsource/mbrola/ro1 b/phsource/mbrola/ro1 index f7f9fa95..d6248fe5 100644 --- a/phsource/mbrola/ro1 +++ b/phsource/mbrola/ro1 @@ -13,6 +13,7 @@ 0 a e 15 a _ 0 a NULL 0 a 0 @- NULL 0 NULL +0 j NULL 0 i 0 j/ NULL 0 j 0 I^ _ 0 I 0 I^ NULL 20 I _ diff --git a/phsource/mbrola/us b/phsource/mbrola/us index 5c77962c..dc8d3a93 100644 --- a/phsource/mbrola/us +++ b/phsource/mbrola/us @@ -44,3 +44,4 @@ 0 p NULL 0 p_h 0 t NULL 0 t_h 0 k NULL 0 k_h +0 t2 NULL 0 t diff --git a/phsource/mbrola/us3 b/phsource/mbrola/us3 index 825f5504..b49d47fb 100644 --- a/phsource/mbrola/us3 +++ b/phsource/mbrola/us3 @@ -40,5 +40,6 @@ 0 U@ NULL 50 U r 0 i@ NULL 50 I @ 0 i@3 NULL 60 i r +0 t2 NULL 0 t diff --git a/phsource/ph_croatian b/phsource/ph_croatian index 0e3af663..976a83db 100644 --- a/phsource/ph_croatian +++ b/phsource/ph_croatian @@ -1,3 +1,74 @@ + + +phoneme S // this is letter š + 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 30 + lengthmod 3 + wave ufric/sh3%220 + before _ ufric/sh3%160 + switchvoicing Z +endphoneme + +phoneme tS // this is letter č + vls pla afr sibilant + vowelin f1=0 f2=1900 100 200 f3=-100 80 + length 90 + lengthmod 2 + wave ustop/tsh2 + before _ ustop/tsh2%70 + switchvoicing dZ +endphoneme + +phoneme tS; // this is letter ć + vls pal afr sibilant palatal + vowelin f1=0 f2=2500 300 500 f3=300 80 rate len=70 + lengthmod 2 + wave ustop/ts_pzd3 + before _ ustop/ts_pzd3%80 + switchvoicing dZ; +endphoneme + + +phoneme Z // letter ž + 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/sh3%240 + before _ voc/zh_+ufric/sh3%170 + lengthmod 6 + switchvoicing S +endphoneme + +phoneme dZ //letter dž + vcd pla afr sibilant + vowelin f1=2 f2=1900 100 300 f3=100 80 + vowelout f1=2 f2=1900 100 300 f3=100 80 brk + formants dzh/dzh2+ustop/tsh2%140 + before _ dzh/dzh_+ustop/tsh2%100 + after _ NULL + after @ dzh/xdzh + lengthmod 5 + switchvoicing tS +endphoneme + +phoneme dZ; // letter đ + vcd pla afr sibilant palatal + vowelin f1=2 f2=2500 300 500 f3=300 80 rate len=70 + formants dzh/dzh2+ustop/ts_pzd3%140 + before _ dzh/dzh_+ustop/ts_pzd3%80 + after _ NULL + after @ dzh/xdzh + lengthmod 5 + switchvoicing tS; +endphoneme + + + + + + phoneme @ // Schwa vowel starttype (@) endtype (@) formants vowel/@_hgh @@ -155,3 +226,4 @@ phoneme r* length 50 endphoneme + diff --git a/phsource/ph_kinyarwanda b/phsource/ph_kinyarwanda new file mode 100644 index 00000000..642aeda3 --- /dev/null +++ b/phsource/ph_kinyarwanda @@ -0,0 +1,115 @@ + +//****************************** +// Phonemes for Kinyarwanda (rw), inherits "base2" +//****************************** + +phoneme a + vowel starttype (a) endtype (a) + length 180 + formants vowel/a_2 + reduceto a/ 4 + beforepause a# + beforevowel NULL +endphoneme + + +phoneme a/ + vowel starttype (@) endtype (@) + length 180 + formants vowel/a# + beforepause a# + beforevowel NULL +endphoneme + + +phoneme e + vowel starttype (e) endtype (e) + length 170 + formants vowel/e + beforepause e# + beforevowel NULL +endphoneme + + +phoneme i + vowel starttype (i) endtype (i) + length 150 + formants vowel/i + beforepause i# + beforevowel NULL +endphoneme + + +phoneme o + vowel starttype (o) endtype (o) + length 170 + formants vowel/o + beforepause o# + beforevowel NULL +endphoneme + + +phoneme u + vowel starttype (u) endtype (u) + length 160 + formants vowel/u_bck + beforepause u# + beforevowel NULL +endphoneme + + +phoneme a# + vowel starttype (@) endtype (@) + length 100 + formants vowel/a# + beforevowel NULL +endphoneme + +phoneme e# + vowel starttype (e) endtype (e) + length 100 + formants vowel/e + beforevowel NULL +endphoneme + + +phoneme i# + vowel starttype (i) endtype (i) + length 100 + formants vowel/i + linkout ; + beforevowel NULL +endphoneme + + +phoneme o# + vowel starttype (o) endtype (o) + length 170 + formants vowel/o + beforevowel NULL +endphoneme + + +phoneme u# + vowel starttype (u) endtype (u) + length 100 + formants vowel/u_bck + beforevowel NULL +endphoneme + + +phoneme : // Lengthen previous vowel by "length" + virtual + length 120 +endphoneme + +phoneme + // high tone, use after a vowel + stress + tone 0 30 envelope/p_fall NULL +endphoneme + +phoneme +2 // high tone, use after a vowel + stress + tone 0 30 envelope/i_risefall2 NULL +endphoneme + diff --git a/phsource/ph_korean b/phsource/ph_korean new file mode 100644 index 00000000..50922c5b --- /dev/null +++ b/phsource/ph_korean @@ -0,0 +1,129 @@ + + +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 vowel/u#_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/phonemes b/phsource/phonemes index 5d6faa89..e9276a69 100644 --- a/phsource/phonemes +++ b/phsource/phonemes @@ -1278,5 +1278,5 @@ include ph_indonesian phonemetable rw base2 include ph_kinyarwanda -phonemetable ko base +phonemetable ko hi include ph_korean diff --git a/phsource/ufric/sh3.wav b/phsource/ufric/sh3.wav new file mode 100644 index 0000000000000000000000000000000000000000..8f6defe2b239f520e63973c0342f7bf42a60c6da GIT binary patch literal 4940 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 H&*lFQ>r|Or literal 0 HcmV?d00001 diff --git a/phsource/ustop/ts_pzd3.wav b/phsource/ustop/ts_pzd3.wav new file mode 100644 index 0000000000000000000000000000000000000000..07a7c9826a624ca1e7c6383e6d7f34217ddbdb8c GIT binary patch literal 3360 zcmWO8d3cT2_6P8__xtYmJ?G?PkQ8YVQ%Z3wG#U-6A}ELS>LvWZHk(K53dR#fn!HQrXw7M!lVtzp#L6uCrK*r|VwC753*|^$ zO5S8A*(KS@)OZ)AR2fanXeHL?KJhgp>e zLhbRctFG&FdW*-K@%CWF)LST%#1B@H^&5$B_t$R8kFB*vUpd#6t@-6O*bX^nOZyR1 zwHnw1TEhj?Fqx92|E|s^_4xzirgaQHb-m@eDNWzRP`uj76Lf8XHU8HF+ub{(OJ!cD zwirgdxLO{djkT+^yB%YF1r4=A)>^(1T4;}Uf91`UIaMWrOh|~l;5p=647$Wj$i-^f zXAyo3Rc$j<;dgbcD}$|t1+op*9rkaMkKfAEJd%!4&N=B~hr6r$i2TrbY&N!UDwkXj)roSK<+BD+ zaGz&=V48W-x6)j%{S+}oZwPLqn|Vh~)oQ|2+Dlnxw+v?5W9cdPB~J>J2HRM-l`||? z7TX)7o3e1fn5-9Z)`Mo}s_Wv6mZBHpwqTagQl03I(pNDi^8#J05!wP*8tgSz1rL+> zsF|8-ZE-d#Q(?CQ;wst46ub~Dv~%=E-d60o6Kf=xFXS!tKeP$SWYwWK7-^^IYD9f~ zHjb;h>9^!{M)aZVh1g)Yc#`_N_L!B(-o_7BF0NC(?)faz8OgV^g|NxKjiYG>Eh5BT zSk+&C5Yf;zlqTUtV{q_rH=e61`i55SVWVQUviGeVKN`zj!=rYpMb@XmuI4XF zqsV(MTTV4z1dj?`ucZgj;SM=ZPnoXr}!Z{@CfE?TPpj=K7lWr@(JfX0-`)ZdI>P4||RL&{G9k@vVDT?sACmI>g7gcp;qhpgIdK$0ze!>FR zLmVldD6{ZAegmVNTGj$GOiNJ{NpGiLV2@R($qM^VYYG0X zm1{t9?Sn>ZNORR;r`6ZlMQ3=hkUPp_`ms_*f98>*SjmIVRy0mkPw=u(hSM8Bsjo+C zLuJ18qdgJ-Ruk1+KFn&uM~UU6OurNUr{;#n1^SbNv2ESoR@E@}(8;S$fQBY;01D-PUA3!axRT7_p%#1^{KWd`(_xBT?p)wHma==EQJ#(PXI1yAEpoiR zTi;DLT50ASWrm(i@*$h(mK9tC$F!NMn>@D{nLF`_dw=A5_FW*N!tgIuYkEsOaSY79 zFRMAXqt?fsQor+m^mMEl5qUJGonqRDc@`h)v?rBX3VR!G7=r_!i-31hwd(G@=U{TA$1xX#11)^e0!an-cxSPX<{VGB3cU@*hidw^gC_1a!h8)nxuei;%^xH?L%}v zjSZ*R5|YjleC!qMX=e*XOcF0ij&|BLjh0z&TOsk8mh6pGN_50-qILPQ| z2eou>d#zlab~^Cp_lCvgdxrs_8nZW_EqCZ9&c*@h;dpXOQMY+1`CnP&hl4`4sXpw<#Y0j zoQKDW2~qF?ti^O(2W?3+Jk4+LL~KKKwTQgUkCD~rmmFxoowC*)~aP}rh1&tz+8Kjxmb*4S$Za2;e2k6 zcZO0$uc^Mnvy26HDJ|AJsl#}M8RR>ZGS*C43Z12o?~(n(%IyqKNRZZ`E%6U0nqPsB z*qdx5xh8K)zf6)F0LS;i-5J^Kp>uEndR}l0hsy zExr*2*br{WE;x-4x(ixk=de}XkV)Pp+aL#;!dC1L9chB{1uZA734>>7!Bvt>N04&t zix2QI%qRaMHK0PSl?!k+%!gv!7QSg4W@0?XgoVBWFXGv-#$O8?yaANUWnpDMf*Is3 z@(zr{HFyJ}X-oPJNe*{s1C)@3bR%6uv%@KU9M{5OcmnBUdwAYWulxL^H5~;Cz$t;S#E-Zz@UQ4f)zSEY>Sm zv~QJkUS#^6Vpv3b&<{u%?vTgi7HB}-u%5T&8*rIws+R0wh0Ld-i`q(yRYsvtOb%P7 z6%K^U$~ERv7Kt~U^Wq1Rtc;}r;26LScwh7pf1<9O4?8XnURs&<9@18y#Mzp<> ZT-MI0yG4=N#?FCO+9qu|6k5gR{{uU@c3A)b literal 0 HcmV?d00001 diff --git a/phsource/ustop/tsh2.wav b/phsource/ustop/tsh2.wav new file mode 100644 index 0000000000000000000000000000000000000000..be513434b79c8d0d905d75edc104dac303b61f79 GIT binary patch literal 3644 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 literal 0 HcmV?d00001 diff --git a/src/Makefile b/src/Makefile index 4884806c..7f66159d 100644 --- a/src/Makefile +++ b/src/Makefile @@ -1,10 +1,10 @@ # remove -fno-exceptions if it causes problems with stdio library on some platforms (ARM) -PREFIX=/ -BINDIR=$(PREFIX)/usr/bin -INCDIR=$(PREFIX)/usr/include/espeak -LIBDIR=$(PREFIX)/usr/lib -DATADIR=$(PREFIX)/usr/share/espeak-data +PREFIX=/usr +BINDIR=$(PREFIX)/bin +INCDIR=$(PREFIX)/include/espeak +LIBDIR=$(PREFIX)/lib +DATADIR=$(PREFIX)/share/espeak-data RELEASE = 1.36 BIN_NAME = speak @@ -24,9 +24,9 @@ INSTALL = install LN_SF = /bin/ln -sf MKDIR = mkdir -p -#AUDIO = pulseaudio AUDIO = portaudio - +#AUDIO = pulseaudio +#AUDIO = sada ifeq ($(AUDIO),pulseaudio) WAVE=wave_pulse.cpp @@ -38,9 +38,14 @@ WAVE=wave.cpp LIB_AUDIO=-lportaudio USE_AUDIO=-DUSE_PORTAUDIO else +ifeq ($(AUDIO),sada) +WAVE=wave_sada.cpp +USE_AUDIO=-DUSE_SADA +else WAVE=wave.cpp endif endif +endif speak_SOURCES = speak.cpp compiledict.cpp dictionary.cpp intonation.cpp \ readclause.cpp setlengths.cpp numbers.cpp synth_mbrola.cpp \ diff --git a/src/dictionary.cpp b/src/dictionary.cpp index a82f74bd..b2825e69 100755 --- a/src/dictionary.cpp +++ b/src/dictionary.cpp @@ -1086,6 +1086,24 @@ void Translator::SetWordStress(char *output, unsigned int dictionary_flags, int switch(langopts.stress_rule) { + case 8: + // stress on first syllable, unless it is a light syllable + if(syllable_weight[1] > 0) + break; + // else drop through to case 1 + case 1: + // stress on second syllable + if((stressed_syllable == 0) && (vowel_count > 2)) + { + stressed_syllable = 2; + if(max_stress == 0) + { + vowel_stress[stressed_syllable] = 4; + } + max_stress = 4; + } + break; + case 2: // a language with stress on penultimate vowel diff --git a/src/intonation.cpp b/src/intonation.cpp index f3b7dd2e..a86c9191 100755 --- a/src/intonation.cpp +++ b/src/intonation.cpp @@ -908,6 +908,7 @@ void Translator::CalcPitches(int clause_type) int count; int n_primary; int count_primary; + PHONEME_TAB *ph; int ph_end=n_phoneme_list; SYLLABLE syllable_tab2[N_PHONEME_LIST]; @@ -1081,6 +1082,13 @@ void Translator::CalcPitches(int clause_type) p->pitch2 = x; } +if(p->tone_ph) +{ + ph = phoneme_tab[p->tone_ph]; + x = (p->pitch1 + p->pitch2)/2; + p->pitch2 = x + ph->end_type; + p->pitch1 = x + ph->start_type; +} if(syl->flags & SYL_EMPHASIS) { diff --git a/src/synthdata.cpp b/src/synthdata.cpp index 60fd681c..9d56f2bd 100755 --- a/src/synthdata.cpp +++ b/src/synthdata.cpp @@ -35,7 +35,7 @@ #include "translate.h" #include "wave.h" -const char *version_string = "1.36.07 25.Mar.08"; +const char *version_string = "1.36.12 10.Apr.08"; const int version_phdata = 0x013400; int option_device_number = -1; diff --git a/src/tr_languages.cpp b/src/tr_languages.cpp index 98746a46..901ccf21 100644 --- a/src/tr_languages.cpp +++ b/src/tr_languages.cpp @@ -47,6 +47,7 @@ #define OFFSET_CYRILLIC 0x420 #define OFFSET_DEVANAGARI 0x900 #define OFFSET_TAMIL 0xb80 +#define OFFSET_KOREAN 0x1100 static const unsigned int replace_cyrillic_latin[] = @@ -456,8 +457,21 @@ SetLengthMods(tr,3); // all equal break; case L('k','o'): // Korean, TEST + { + static const char ko_ivowels[] = {0x63,0x64,0x67,0x68,0x6d,0x72,0x74,0x75,0}; // y and i vowels + static const char ko_voiced[] = {0x02,0x05,0x06,0xab,0xaf,0xb7,0xbc,0}; // voiced consonants, l,m,n,N tr = new Translator(); + + tr->letter_bits_offset = OFFSET_KOREAN; + memset(tr->letter_bits,0,sizeof(tr->letter_bits)); + SetLetterBitsRange(tr,LETTERGP_A,0x61,0x75); + SetLetterBits(tr,LETTERGP_Y,ko_ivowels); + SetLetterBits(tr,LETTERGP_G,ko_voiced); + + tr->langopts.stress_rule = 8; // ?? 1st syllable if it is heavy, else 2nd syllable tr->langopts.param[LOPT_UNPRONOUNCABLE] = 1; // disable check for unpronouncable words + tr->langopts.numbers = 0x0401; + } break; case L('k','u'): // Kurdish @@ -684,7 +698,7 @@ SetLengthMods(tr,3); // all equal SetupTranslator(tr,stress_lengths_ta,stress_amps_ta); tr->langopts.length_mods0 = tr->langopts.length_mods; // don't lengthen vowels in the last syllable - tr->langopts.stress_rule = 1; + tr->langopts.stress_rule = 0; tr->langopts.stress_flags = 0x10004; // use 'diminished' for unstressed final syllable tr->letter_bits_offset = OFFSET_TAMIL; tr->langopts.param[LOPT_WORD_MERGE] = 1; // don't break vowels betwen words diff --git a/src/wave_sada.cpp b/src/wave_sada.cpp new file mode 100755 index 00000000..f5ebb8d4 --- /dev/null +++ b/src/wave_sada.cpp @@ -0,0 +1,576 @@ +/*************************************************************************** + * Copyright (C) 2008, Sun Microsystems, Inc. * + * eSpeak driver for Solaris Audio Device Architecture (SADA) * + * Written by Willie Walker, based on the eSpeak PulseAudio driver * + * from Gilles Casse * + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License as published by * + * the Free Software Foundation; either version 3 of the License, or * + * (at your option) any later version. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License for more details. * + * * + * You should have received a copy of the GNU General Public License * + * along with this program; if not, write to the * + * Free Software Foundation, Inc., * + * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * + ***************************************************************************/ + +#include "speech.h" + +#ifdef USE_ASYNC +// This source file is only used for asynchronious modes + +#include +#include +#include +#include +#include +#include +#include +#include + +#include "wave.h" +#include "debug.h" + +enum {ONE_BILLION=1000000000}; +#define SAMPLE_RATE 22050 +#define SAMPLE_SIZE 16 + +#ifdef USE_SADA + +static t_wave_callback* my_callback_is_output_enabled=NULL; + +static const char *sun_audio_device = "/dev/audio"; +static int sun_audio_fd = -1; + +// The total number of 16-bit samples sent to be played via the +// wave_write method. +// +static uint32_t total_samples_sent; + +// The total number of samples sent to be played via the wave_write +// method, but which were never played because of a call to +// wave_close. +// +static uint32_t total_samples_skipped; + +// The last known playing index after a call to wave_close. +// +static uint32_t last_play_position=0; + +//> +// wave_init +// +// DESCRIPTION: +// +// initializes the audio subsytem. +// +// GLOBALS USED/MODIFIED: +// +// sun_audio_fd: modified to hold the file descriptor of the opened +// audio device. +// +// +// wave_open +// +// DESCRIPTION: +// +// opens the audio subsystem given a specific API (e.g., "alsa", +// "oss", ...). We ignore the_api and just return the sun_audio_fd we +// opened in wave_init. This return value will be passed in as the +// theHandler parameter in all other methods. +// +// PARAMETERS: +// +// the_api: "alsa", "oss" (ignored) +// +// GLOBALS USED/MODIFIED: +// +// sun_audio_fd: used as return value +// +// RETURNS: +// +// sun_audio_fd opened in wave_init, which is passed in as theHandler +// parameter in all other methods +// +// +// wave_write +// +// DESCRIPTION: +// +// Meant to be asynchronous, it supplies the wave sample to the lower +// audio layer and returns. The sample is played later on. [[[WDW - +// we purposely do not open the audio device as non-blocking because +// managing that would be a pain. So, we rely a lot upon fifo.cpp and +// event.cpp to not overload us, allowing us to get away with a +// blocking write. event.cpp:polling_thread in particular appears to +// use get_remaining_time to prevent flooding.]]] +// +// PARAMETERS: +// +// theHandler: the audio device file descriptor +// theMono16BitsWaveBuffer: the audio data +// theSize: the number of bytes (not 16-bit samples) +// +// GLOBALS USED/MODIFIED: +// +// total_samples_sent: modified based upon 16-bit samples sent +// +// RETURNS: +// +// the number of bytes (not 16-bit samples) sent +// +// my_callback_is_output_enabled: no!"); + return 0; + } + num = write((int) theHandler, theMono16BitsWaveBuffer, theSize); + + // Keep track of the total number of samples sent -- we use this in + // wave_get_read_position and also use it to help calculate the + // total_samples_skipped in wave_close. + // + total_samples_sent += num / 2; + + if (num < theSize) { + SHOW("ERROR: wave_write only wrote %d of %d bytes\n", num, theSize); + } else { + SHOW("wave_write wrote %d bytes\n", theSize); + } + + SHOW_TIME("wave_write > LEAVE"); + return num; +} + +//> +// wave_close +// +// DESCRIPTION: +// +// Does what SADA normally would call a flush, which means to cease +// all audio production in progress and throw any remaining audio +// away. [[[WDW - see comment in wave_flush.]]] +// +// PARAMETERS: +// +// theHandler: the audio device file descriptor +// +// GLOBALS USED/MODIFIED: +// +// last_play_position: modified to reflect play position the last time +// this method was called +// total_samples_sent: used to help calculate total_samples_skipped +// total_samples_skipped: modified to hold the total number of 16-bit +// samples sent to wave_write, but which were +// never played +// sun_audio_fd: used because some calls to wave_close seem to +// pass a NULL for theHandler for some odd reason +// +// RETURNS: +// +// The result of the ioctl call (non-0 means failure) +// +// LEAVE"); + return ret; +} + +//> +// wave_is_busy +// +// DESCRIPTION: +// +// Returns a non-0 value if audio is being played. +// +// PARAMETERS: +// +// theHandler: the audio device file descriptor +// +// GLOBALS USED/MODIFIED: +// +// sun_audio_fd: used because some calls to wave_is_busy seem to +// pass a NULL for theHandler for some odd reason +// +// RETURNS: +// +// A non-0 value if audio is being played +// +// LEAVE"); + return ainfo.play.active; +} + +//> +// wave_terminate +// +// DESCRIPTION: +// +// Used to end our session with eSpeak. +// +// GLOBALS USED/MODIFIED: +// +// sun_audio_fd: modified - closed and set to -1 +// +// LEAVE"); +} + +//> +// wave_flush +// +// DESCRIPTION: +// +// Appears to want to tell the audio subsystem to make sure it plays +// the audio. In our case, the system is already doing this, so this +// is basically a no-op. [[[WDW - if you do a drain, you block, so +// don't do that. In addition the typical SADA notion of flush is +// currently handled by wave_close. I think this is most likely just +// terminology conflict between eSpeak and SADA.]]] +// +// PARAMETERS: +// +// theHandler: the audio device file descriptor +// +// LEAVE"); +} + +//> +// wave_set_callback_is_output_enabled +// +// DESCRIPTION: +// +// Sets the callback to call from wave_write before it sends data to +// be played. It helps wave_write determine if the data should be +// thrown away or not. +// +// PARAMETERS: +// +// cb: the callback to call from wave_write +// +// +// wave_test_get_write_buffer +// +// DESCRIPTION: +// +// Unnecessary and is used for debug output from +// speak_lib.cpp:dispatch_audio. +// +// RETURNS: +// +// NULL +// +// +// wave_get_read_position +// +// DESCRIPTION: +// +// Concerns the sample which is currently played by the audio layer, +// where 'sample' is a small buffer of synthesized wave data, +// identified so that the user callback could be called when the +// 'sample' is really played. The identifier is returned by +// wave_get_write_position. This method is unused. +// +// PARAMETERS: +// +// theHandler: the audio device file descriptor +// +// RETURNS: +// +// The total number of 16-bit samples played by the audio system +// so far. +// +// LEAVE"); + return ainfo.play.samples; +} + +//> +// wave_get_write_position +// +// DESCRIPTION: +// +// Returns an identifier for a new sample, where 'sample' is a small +// buffer of synthesized wave data, identified so that the user +// callback could be called when the 'sample' is really played. This +// implementation views the audio as one long continuous stream of +// 16-bit samples. +// +// PARAMETERS: +// +// theHandler: the audio device file descriptor +// +// GLOBALS USED/MODIFIED: +// +// total_samples_sent: used as the return value +// +// RETURNS: +// +// total_samples_sent, which is the index for the end of this long +// continuous stream. [[[WDW: with a unit32_t managing 16-bit +// samples at 22050Hz, we have about 54 hours of play time before +// the index wraps back to 0. We don't handle that wrapping, so +// the behavior after 54 hours of play time is undefined.]]] +// +// LEAVE"); + return total_samples_sent; +} + +//> +// wave_get_remaining_time +// +// DESCRIPTION: +// +// Returns the remaining time (in ms) before the sample is played. +// The sample in this case is a return value from a previous call to +// wave_get_write_position. +// +// PARAMETERS: +// +// sample: an index returned from wave_get_write_position representing +// an index into the long continuous stream of 16-bit samples +// time: a return value representing the delay in milliseconds until +// sample is played. A value of 0 means the sample is either +// currently being played or it has already been played. +// +// GLOBALS USED/MODIFIED: +// +// sun_audio_fd: used to determine total number of samples played by +// the audio system +// total_samples_skipped: used in remaining time calculation +// +// RETURNS: +// +// Time in milliseconds before the sample is played or 0 if the sample +// is currently playing or has already been played. +// +// LEAVE"); + } + + ioctl(sun_audio_fd, AUDIO_GETINFO, &ainfo); + + // See if this sample has already been played or is currently + // playing. + // + actual_index = sample - total_samples_skipped; + if ((sample < total_samples_skipped) || + (actual_index <= ainfo.play.samples)) { + *time = 0; + } else { + a_time = ((actual_index - ainfo.play.samples) * 1000) / SAMPLE_RATE; + *time = (uint32_t) a_time; + } + SHOW("wave_get_remaining_time for %d: %d\n", sample, *time); + SHOW_TIME("wave_get_remaining_time > LEAVE"); + return 0; +} + +#else +// notdef USE_SADA + +void wave_init() {} +void* wave_open(const char* the_api) {return (void *)1;} +size_t wave_write(void* theHandler, char* theMono16BitsWaveBuffer, size_t theSize) {return theSize;} +int wave_close(void* theHandler) {return 0;} +int wave_is_busy(void* theHandler) {return 0;} +void wave_terminate() {} +uint32_t wave_get_read_position(void* theHandler) {return 0;} +uint32_t wave_get_write_position(void* theHandler) {return 0;} +void wave_flush(void* theHandler) {} +typedef int (t_wave_callback)(void); +void wave_set_callback_is_output_enabled(t_wave_callback* cb) {} +extern void* wave_test_get_write_buffer() {return NULL;} + +int wave_get_remaining_time(uint32_t sample, uint32_t* time) +{ + if (!time) return(-1); + *time = (uint32_t)0; + return 0; +} + +#endif // of USE_PORTAUDIO + +//> +//tv_sec = tv.tv_sec; + ts->tv_nsec = tv.tv_usec*1000; +} + +void add_time_in_ms(struct timespec *ts, int time_in_ms) +{ + if (!ts) + { + return; + } + + uint64_t t_ns = (uint64_t)ts->tv_nsec + 1000000 * (uint64_t)time_in_ms; + while(t_ns >= ONE_BILLION) + { + SHOW("event > add_time_in_ms ns: %d sec %Lu nsec \n", ts->tv_sec, t_ns); + ts->tv_sec += 1; + t_ns -= ONE_BILLION; + } + ts->tv_nsec = (long int)t_ns; +} + +#endif // USE_ASYNC + +//>