From 43b2ae498739f08e563d996fe4b6623e0f349443 Mon Sep 17 00:00:00 2001 From: jonsd Date: Mon, 8 Apr 2013 19:12:53 +0000 Subject: [PATCH 1/4] [1.47.05] Fix: [v] sound missing in French voice. Fix: command-line -w '' caused crash. git-svn-id: https://espeak.svn.sourceforge.net/svnroot/espeak/trunk@339 d46cf337-b52f-0410-862d-fd96e6ae7743 --- dictsource/dict_phonemes | 12 +- dictsource/en_list | 3 + dictsource/en_rules | 36 ++-- dictsource/hi_rules | 60 ++++-- dictsource/pl_list | 4 +- dictsource/pt_list | 65 ++++-- dictsource/pt_rules | 66 ++++-- phsource/compile_report | 289 +++++++++++++++++++++++--- phsource/intonation | 11 +- phsource/ph_english_us | 4 +- phsource/phonemes | 105 +++++----- phsource/vdiph/ooi_3 | Bin 24125 -> 26275 bytes phsource/vwl_en_us/aU@ | Bin 2173 -> 2775 bytes phsource/w/_w | Bin 1264 -> 1264 bytes phsource/w/w | Bin 851 -> 851 bytes platforms/riscos/cpp/speak_riscos | 2 +- platforms/windows/make_espeak.iss | 2 +- platforms/windows/make_espeakedit.iss | 2 +- src/compiledata.cpp | 7 +- src/dictionary.cpp | 19 +- src/espeak.cpp | 18 +- src/readclause.cpp | 4 + src/speak.cpp | 17 +- src/synthdata.cpp | 2 +- 24 files changed, 549 insertions(+), 179 deletions(-) diff --git a/dictsource/dict_phonemes b/dictsource/dict_phonemes index cde3524d..4cdc00ad 100644 --- a/dictsource/dict_phonemes +++ b/dictsource/dict_phonemes @@ -49,7 +49,7 @@ s s. S; t t# t. t.# tS v v# w z -Dictionary pt_dict 2013-04-05 +Dictionary pt_dict 2013-04-08 & &/ &U~ &~ @ @- a A aI aU e E eI EI eU EU @@ -164,7 +164,7 @@ p Q r R s s; t T ts v x z -Dictionary en_dict 2013-04-05 +Dictionary en_dict 2013-04-08 0 0# 3 3: @ @- @2 @5 @L a a# A: A@ aa aI aI3 @@ -288,12 +288,12 @@ N n^ p r R R2 s S t tS ts tS; v x z Z -Dictionary hi_dict 2013-04-05 +Dictionary hi_dict 2013-04-08 @ @2 a a: aI aU a~ e E e: E: e~ E~ i I i: -l- o O o: O: O~ o~ r- -u U u: u~ V +i~ l- o O o: O: O~ o~ +r- u U u: u~ V #X1 #X2 - : b b# c c# d d# d. d.# f g g# h @@ -566,7 +566,7 @@ R2 s S t t# t. t.# v x z -Dictionary pl_dict 2012-06-09 +Dictionary pl_dict 2013-04-06 a E E# E~ i O O~ u y diff --git a/dictsource/en_list b/dictsource/en_list index 31d7f517..0341c962 100644 --- a/dictsource/en_list +++ b/dictsource/en_list @@ -3087,6 +3087,7 @@ Cheadle tSi:d@L Cheshire tSES3 Chiswick tSIzIk Clwyd klu:Id +Conway $1 Dagenham dag@n@m Devon dEv@n Dolgellau d0lg'EClaI @@ -3212,6 +3213,7 @@ Egyptia IdZ'IpS@ Egyptian IdZ'IpS@n Eire e@r@ Elysee eIl'i:zeI +Elysée eIl'i:zeI Erie i@ri Euphrates ju:fr'eIti:z Eyjafjalla eIja#fjatla# @@ -3345,6 +3347,7 @@ Punjabi pVndZ'A:bi Pyrenees pIr@n'i:z Qatar katA@ Quebec kwI2bEk +Québec kwI2bEk Raleigh rA:li Reno ri:noU Rio ri:oU diff --git a/dictsource/en_rules b/dictsource/en_rules index 4370796b..c0f7f7e9 100644 --- a/dictsource/en_rules +++ b/dictsource/en_rules @@ -1351,7 +1351,7 @@ bi (ry bI bi (sc bI bi (sec b%aI - bi (sh bI + _) bi (sh bI bi (sm bI bi (sq bi: bi (str bi: @@ -2473,7 +2473,7 @@ s) er (van 3: ery (_ @r%i ?3 ery (_++$w_alt2 @rI -?3 @@AC) ery (_ e@ri +?3 @@AC) ery (_ ,e@ri ery (A 3j _v) ery ErI2 qu) ery i@rI @@ -3055,7 +3055,6 @@ ier i@3 ier (a I'e@r &) ier (_NS2i 3 - &) ier's (_NS4i 3z _h) ie (r aI3 pl) ier (_ aI3 _Cr) ier aI3 @@ -3269,7 +3268,6 @@ _) inno (ce In@ _) inno (v In@ _) inn (um %In - _) in (of In _) in (org In _) in (p In _) in (que In @@ -3497,6 +3495,7 @@ is (er+_ aIz iser (_ aIz3 &) ish (_ I2S + ish (A_ 'i:S is (ive aIs _) island aIl@nd _) is (le aI @@ -4423,7 +4422,7 @@ w) or (e o@ or (um_ 'o@r &) ory (_ @r%I -?3 @@At) ory (_ o:ri +?3 @@At) ory (_ ,o:ri _st) ory o@rI .group os @@ -4664,7 +4663,7 @@ _all) ow aU isall) ow aU cl) ow aU - fl) ow (er aU + fl) ower aU|3 gl) ow (er aU pl) ow aU _n) ow (_ aU @@ -5300,7 +5299,6 @@ ttu (r t@ tz ts tze (_ tsi -?3 @@A) t (Ary_ t2 .group th th T @@ -6014,18 +6012,18 @@ .group ' 's (_S2m z - f) 's (_S2 s - p) 's (_S2 s - t) 's (_S2 s - k) 's (_S2 s - se) 's (_S2 I2z - s) 's (_S2 I2z - ce) 's (_S2 I2z - ch) 's (_S2 I2z - och) 's (_S2 s - sh) 's (_S2 I2z - x) 's (_S2 I2z - z) 's (_S2 I2z + f) 's (_S2m s + p) 's (_S2m s + t) 's (_S2m s + k) 's (_S2m s + se) 's (_S2m I2z + s) 's (_S2m I2z + ce) 's (_S2m I2z + ch) 's (_S2m I2z + och) 's (_S2m s + sh) 's (_S2m I2z + x) 's (_S2m I2z + z) 's (_S2m I2z 6_) 's (_ I2z 16_) 's (_ z 're (_S3 @ diff --git a/dictsource/hi_rules b/dictsource/hi_rules index 76592172..6e29d89f 100755 --- a/dictsource/hi_rules +++ b/dictsource/hi_rules @@ -49,8 +49,8 @@ .group ऊ ऊ u - ऊं u~ // + anusvara - ऊँ u~ // + candrabinbu + ऊं (_ u~ // + anusvara + ऊँ (_ u~ // + candrabinbu .group ऋ ऋ rI @@ -63,14 +63,19 @@ .group ऎ ऎ e + ऎं (_ e~ + ऎँ (_ e~ .group ए ए e: + एँ e~: + एं (_ e~: + ा) एँ (_ j .group ऐ ऐ E: // ?? [aI] [E:] [&:] - ऐं E~ - ऐँ E~ + ऐं (_ E~ + ऐँ (_ E~ ?2 ऐ aI // ?? [aI] [E:] [&:] @@ -79,16 +84,21 @@ .group ऒ ऒ o + ऒं (_ o~ + ऒँ (_ o~ .group ओ ओ o: - ओं o~ // +anusvara - ओँ o~ // +candrabindu + ओं (_ o~ // +anusvara + ओँ (_ o~ // +candrabindu + ा) ओं (_ w // +anusvara + ा) ओँ (_ w + .group औ औ O: // ?? [aU] [O:] - औं O~ // +anusvara - औँ O~ // +candrabindu + औं (_ O~ // +anusvara + औँ (_ O~ // +candrabindu ?3 औ aU // ?? [aU] [O:] @@ -96,6 +106,8 @@ .group ा ा a: + ाँ (_ a~ + ां (_ a~ ाव aU .group ि @@ -106,14 +118,18 @@ .group ी ी i: ी (_ i + ीँ (_ i~ + ीं (_ i~ .group ु - ु u + ु U + ुं (_ u~ + ुँ (_ u~ .group ू ू u: - ूं u~ // or O~ ?? - ूँ u~ + ूं (_ u~ // or O~ ?? + ूँ (_ u~ .group ृ ृ rI @@ -126,14 +142,18 @@ .group ॆ ॆ e + ॆं (_ e~ + ॆँ (_ e~ .group े े e: + ें (_ e~: + ेँ (_ e~: .group ै ै E: // ?? [aI] [E:] [&:] - ैं E~ - ैँ E~ + ैं (_ E~ + ैँ (_ E~ ?2 ै aI // ?? [aI] [E:] [&:] .group ॉ @@ -141,16 +161,18 @@ .group ॊ ॊ o + ॊं (_ o~ + ॊँ (_ o~ .group ो ो o: - ों o~ - ोँ o~ + ों (_ o~ + ोँ (_ o~ .group ौ ौ O: // [O:] or [aU] ?? - ौं O~ - ौँ O~ + ौं (_ O~ + ौँ (_ O~ ?3 ौ aU // [O:] or [aU] ?? .group ॢ // vowel sign l @@ -305,8 +327,9 @@ न्) म (_ m // n +virama .group य - य j@ + य jV य (B j + C) य (_ Ej // [Ej] not [@j] ्) य (_ j@ .group र @@ -341,6 +364,7 @@ _) व wV _) व (B w _) व (् v // +virma + व (_ w .group श श SV diff --git a/dictsource/pl_list b/dictsource/pl_list index 2ecf158b..90cbd0dc 100644 --- a/dictsource/pl_list +++ b/dictsource/pl_list @@ -121,8 +121,8 @@ _w vu x iks y 'igREk _z zEt -ż Z;Et -ź ZEt +ż ZEt +ź Z;Et ä $accent ö $accent diff --git a/dictsource/pt_list b/dictsource/pt_list index b1e7c337..7fde30e2 100755 --- a/dictsource/pt_list +++ b/dictsource/pt_list @@ -117,7 +117,7 @@ _] f,ES&kowS'etSi _^ s,irku~Nfl'Eksu _´ as'eINtu,ag'udU __ s,ublin^'adu -_` gR'avi + _` gR'avi _{ ,abRiS'avi ?1 _| b,ax&v,ertSik'al ?2 _| b,ax&v,ertSik'aU @@ -187,8 +187,8 @@ _1C0 s'eIN _1C s'eINtu ?1_2C duz'eINtus# ?2_2C duz'eINtUz -?1_3C tryz'eNtus# -?2_3C tRez'eNtUz +?1_3C tryz'eINtus# +?2_3C tRez'eINtUz ?1_5C kin^'eINtus# ?2_5C kin^'eINtUz ?1_0M1 m'il_ @@ -654,6 +654,10 @@ algozes $alt almoço $alt $verb ameba $alt amores $alt2 +amorno $alt +ampola $alt2 +ampulheta $alt2 +andorra $alt2 antonieta $alt2 apego $alt2 $noun apelo $alt2 $noun @@ -676,6 +680,7 @@ avesso $alt2 axé aSE azeda $alt $verb azedo $alt $verb +bairro b'aIxU baqueta $alt2 beco $alt2 besta $alt2 @@ -696,12 +701,14 @@ boto $alt2 $noun boxe $alt brejo $alt bromelha $alt +broto $alt2 $noun cabelo $alt2 cabresto $alt2 cacete $alt2 cachorra $alt2 caderneta $alt2 cadete $alt2 +cãibra k'&~IbR& caibro k'aIbRU camelha $alt camelo $alt2 @@ -721,6 +728,7 @@ catorze $alt2 cebola $alt2 cedro $alt cefaleia $alt +cerebelo $alt2 centopeia $alt cerca $alt cerca $alt2 $noun @@ -775,7 +783,8 @@ desapego $alt2 $noun descordo $alt desemprego $alt2 desemprego $alt $verb -desespero $alt2 $noun +desespero $alt2 +desespero $alt $verb desfecho $alt2 desmantelo $alt2 $noun desporto $alt2 @@ -792,6 +801,7 @@ dez $alt diarreia $alt diego $alt2 discordo $alt +dispneia dZIspyn'EI& dobro $alt2 $noun doce $alt2 doutora $alt2 @@ -818,8 +828,8 @@ erro $alt2 erro $alt $verb esboço $alt $verb escopeta $alt2 -escova $alt2 $noun -escovas $alt2 +escova $alt2 +escova $alt $verb escovo $alt escroto $alt2 esforço $alt $verb @@ -870,8 +880,8 @@ frevo $alt2 fulgores $alt2 galera $alt galileia $alt -gameta $alt2 -garçonete $alt2 +gangorra $alt2 +garçonete $alt geleia $alt gelo $alt2 gelo $alt $verb @@ -889,19 +899,24 @@ grelha $alt groselha $alt grosso $alt2 grozo $alt $verb +gueto $alt2 hemorroida $alt hoje $alt2 horrores $alt2 +humores $alt2 ideia $alt imberbe $alt interesse $alt2 interesse $alt $verb -jogo $alt2 $noun +jogo $alt2 +jogo $alt $verb +jogos $alt joguete $alt2 lagosta $alt2 lambreta $alt2 lanchonete $alt lebre $alt +leitora $alt2 lembrete $alt2 lepra $alt leste $alt2 $verb @@ -911,6 +926,7 @@ lopes $alt macete $alt2 maior $alt maleta $alt2 +maniçoba $alt marionete $alt marreta $alt2 megera $alt @@ -921,9 +937,6 @@ merda $alt meta $alt $noun meteoro $alt metro $alt -mexa m'eS& -mexi meS'i -mexo m'eSU minueto $alt2 miolo $alt2 miolos $alt @@ -932,6 +945,7 @@ modelo $alt $verb moeda $alt moem $alt mofo $alt $verb +moleta $alt2 molho $alt2 $noun monera $alt morcego $alt2 @@ -968,6 +982,7 @@ ovelha $alt2 ovos $alt pachorra $alt2 paexa paeSa +paella pa'el^& palacete $alt2 palheta $alt2 panfleto $alt2 @@ -980,6 +995,7 @@ pedra $alt pela $alt $verb pelo $alt2 pelo $alt $verb +peroba $alt peso $alt $verb piloto $alt2 $noun pintora $alt2 @@ -989,6 +1005,7 @@ plaqueta $alt2 plateia $alt plebeia $alt polca $alt +pompeia $alt porcos $alt porra $alt2 porrete $alt2 @@ -998,6 +1015,7 @@ pose $alt2 povos $alt poxa p'oS& primavera $alt +primores $alt2 prosopopeia $alt quarteto $alt2 queda $alt @@ -1013,15 +1031,14 @@ reembolso $alt $verb reforço $alt $verb reforços $alt refresco $alt $verb +rego $alt2 $noun reitora $alt2 -rejo $alt relevo $alt2 $noun remorso $alt renovo $alt $verb retorno $alt $verb reuva x'EUv& rigores $alt2 -rixa x'iS& rocha $alt rock $alt roem $alt @@ -1086,6 +1103,7 @@ tumores $alt2 valeta $alt2 vanessa $alt2 velozes $alt +vera $alt verbete $alt2 violeta $alt2 violoncelo $alt @@ -1098,7 +1116,7 @@ zorra $alt2 // foreign words ?1 alt 'alt -?2 agosto &g'ostU +?2 agosto ag'ostU ?1 back b'Ek ?2 backup bEk'&p ?2 backups bEk'&ps @@ -1166,6 +1184,7 @@ python p'aIT&~N ?1 readme r'i:dmi: ?1 sapi s,ap'i ?1 scanner sk'En&r +shake S'eIk ?1 shift S'ift ?1 scroll sk:r'ol ?1 site s'aIt @@ -1196,6 +1215,7 @@ louis _^_FR // foreign product names ?1 access 'aks,Es ?1 adobe &d'Oby + android &ndR'Oid apple 'Epow chrome kR'owmi debian d'Ebj&~N @@ -1254,7 +1274,7 @@ twitter tw'iter ?2 window w'iNdow -// historical/famous person names +// historical/famous person s babbage b'abidZ bernhard bern'ard darwin d'Arwin @@ -1279,7 +1299,7 @@ oppenheimer _!'Op@nh,aImar richard x'iS&rd riemann r'i:man rijndael x'ain;d'al -rousseau Rus'o +?2 rousseau xus'o schrödinger Sr'edinger stephen st'i:v@n steve st'i:v @@ -1290,24 +1310,31 @@ von f%On // foreign common names/surnames ?1 alison &l'is&N +anderson '&ndersoN +antonio &~nt'onIU ?1 cleverson kl'Evyrs&N ?2 cleverson kl'EversoN ?1 elton 'Elt&N +?2 elton 'EUton +emerson 'emE*@-soN ?1 halison &l'is&N klein kl'aIn // Very common on southern Brazil. ?1 kleverson kl'Evers&N krueger kR'iZer krüger kR'iZer kühl k'il -?1 nelson n'Els&N +milton m'Iwton mueler m'iler mueller m'iler müler m'iler müller m'iler +?1 nelson n'Els&N ronchi r'OnCi: +valter v'aUter vogel f'o:g@l volkmann f'Olkman - +wellington w'Elynton +wilton w'Iwton diff --git a/dictsource/pt_rules b/dictsource/pt_rules index 62abc1c7..81875216 100755 --- a/dictsource/pt_rules +++ b/dictsource/pt_rules @@ -1,5 +1,3 @@ - // translation rules Brazilian -// translation rules Brazilian // translation rules Brazilian // This file is UTF-8 encoded @@ -43,6 +41,7 @@ a (r_ 'a ?1 p) a (d_ =E a (CC_ & + a (h_ a ?1 a (l_ 'A // eg: Portugal, capital, etc. ?1 a (lK ,A // Algarve, Almerinda, etc... ?2 al (K aU @@ -51,6 +50,7 @@ a (mAr_ & a (mA@ & a (n &~ + a (ñ &~ a (nA@ & a (nAr_ & am (_ =&~N @@ -59,6 +59,8 @@ an (K+ &~N anh (A &~n^ am (_ =&U~ + a (t_ a + a (x_ a a (z_ 'a //eg: paz, rapaz, capaz, etc... ?1 C) acç 'a's // eg: selecção, etc... @@ -257,10 +259,22 @@ e (rvAm_ E e (tA_ E + m) e (ta_ e + m) e (tam_ e + m) e (to_ e An) e (tA_ e gaz) e (ta_ e e (tAm_ E + e (gi_ e + e (gri_ e + e (li_ e + e (rgi_ e + e (sti_ e + e (ti_ e + e (rti_ e + e (rvi_ e + e (xi_ e e (vA_ E t) e (ve_ e e (vi_ e @@ -368,6 +382,7 @@ _soub) e (L05_ E _talh) e (L05_ E _trem) e (L05_ e +_troux) e (L05_ E diss) e (L06_ E // contra- fend) e (L06_ e // de- o- tend) e (L06_ e // a- con- en- es- @@ -384,6 +399,7 @@ respond) e (L06_ e // cor- ceb) e (L07_ e // re- per- con- ced) e (L07_ e // pro- con- su- met) e (L07_ e // co- pro- arre- re- intro- compro- sub- + mex) e (L07_ e mov) e (L07_ e // re- co- viv) e (L07_ e // re- _beb) e (L07_ e @@ -400,6 +416,7 @@ respond) e (L06_ e // cor- vend) e (L07_ e // re- vert) e (L07_ e // in- re- con- volv) e (L07_ e // de- en- re- + _desc) e (L07_ e _eleg) e (L07_ e _ergu) e (L07_ e _mord) e (L07_ e @@ -414,12 +431,14 @@ respond) e (L06_ e // cor- screv) e (L07_ e // e- in- ree- pre- de- _aborrec) e (L07_ e _absolv) e (L07_ e +_acontec) e (L07_ e _adoec) e (L07_ e _adormec) e (L07_ e _agradec) e (L07_ e _amanhec) e (L07_ e _amolec) e (L07_ e _anoitec) e (L07_ e +_apodrec) e (L07_ e _arrepend) e (L07_ e _atrev) e (L07_ e _cresc) e (L07_ e @@ -444,6 +463,7 @@ _perec) e (L07_ e _rejuvenec) e (L07_ e _resolv) e (L07_ e _suspend) e (L07_ e +_troux) e (L07_ E abastec) e (L07_ e // re- conhec) e (L07_ e // & re- des- estabelec) e (L07_ e // re- @@ -454,6 +474,7 @@ proteg) e (L07_ e // des- respond) e (L07_ e // cor- qu) e (brL04_ E _cel) e (brL04_ E + _ex) e (crL04_ E _enr) e (dL01_ E _arr) e (dL03_ E _depr) e (dL03_ E @@ -464,6 +485,7 @@ respond) e (L07_ e // cor- _n) e (grL03_ e _ch) e (guL02_ e estr) ei (L04_ EI + _r) e (jL03_ E _inv) e (jL04_ E tr) e (pL04_ E // es- _dec) e (pL04_ E @@ -491,6 +513,7 @@ respond) e (L07_ e // cor- _recup) e (rL04_ E _refrig) e (rL04_ E _v) e (rbL03_ E + _ex) e (rcL02_ E _alic) e (rcL02_ E _p) e (rdL02_ E _l) e (rdL03_ E @@ -512,11 +535,8 @@ _refrig) e (rL04_ E _l) e (ssL02_ e _esp) e (ssL03_ e _c) e (stL03_ e - _m) e (tL03_ e _pr) e (tL03_ e - _com) e (tL03_ e _rem) e (tL03_ e - prom) e (tL03_ e // com- _derr) e (tL03_ e _obsol) e (tL03_ e _sol) e (trL03_ E @@ -524,12 +544,12 @@ _obsol) e (tL03_ e _d) e (vL03_ e scr) e (vL03_ e // e- in- pre- ree- de- _atr) e (vL03_ e + m) e (xL03_ e _r) e (zL04_ E _pr) e (zL04_ E + spr) e (zL04_ E _rev) e (zL04_ E -_despr) e (zL04_ E _embel) e (zL04_ E -_menospr) e (zL04_ E com) e (çL01_ E p) e (çL03_ E _m) e (çL03_ E @@ -695,7 +715,8 @@ _entorp) e (çL03_ e _) l (_ 'Ely l l l) l - lh l^ +?1 lh l^ +?2 lh lj ?4 A) lh l^ @@ -721,6 +742,12 @@ _entorp) e (çL03_ e ?1 A) nn n //drop “n” (eg: connosco). +.group ñ + _) ñ (_ 'En^e + ñ n^ + + + .group o o o @) o (_ =U @@ -770,6 +797,13 @@ _entorp) e (çL03_ e o (lve_ O o (lvem_ O + o (bri_ o + o (di_ o + o (li_ o + o (rci_ o + o (rdi_ o + o (rri_ o + o (rvi_ o o (sA_ O o (so_N o // not for osos_ o (sAm_ O @@ -872,6 +906,7 @@ _pormen) o (L05_ O ent) o (pL02_ O _c) o (pL03_ O _ens) o (pL04_ O + _gal) o (pL04_ O _s) o (prL04_ O _) o (ptL04_ O p) o (rL02_ o @@ -881,6 +916,7 @@ _pormen) o (L05_ O _inod) o (rL03_ O _inson) o (rL03_ O _comem) o (rL04 O +_aprim) o (rL04_ O _remem) o (rL04_ O f) o (rmL03_ O _enf) o (rquL02_ O @@ -895,6 +931,7 @@ _remem) o (rL04_ O p) ostos (_ Ost=Us# // dispostos etc. _gar) o (tL03_ o _mar) o (tL03_ O + _ch) o (vL01_ o pr) o (vL03_ O _g) o (zL04_ O _esb) o (çL01_ O @@ -936,7 +973,6 @@ _remem) o (rL04_ O ?3 p (t p ?3 p (_C p_ ph f -?1 ple (_ _^_EN .group q @@ -989,9 +1025,8 @@ _remem) o (rL04_ O r (C *@- A) r (A * A) r (_A * - rr x - XC) r (A R C) r (A R + rr x _) r x l) r x n) r (+ x @@ -1012,11 +1047,12 @@ _remem) o (rL04_ O A) s (A z ?1 @) s (_ s# ?2 s (_ s# - @) s (_A z // next word starts with vowel + ?!4 @) s (_G z // next word starts with voiced consonant A) s (_S1 s A) s (_AS1 z // next word starts with vowel + ese) s (_ s ?!4 A) s (_GS1 z // next word starts with voiced consonant @@ -1026,9 +1062,11 @@ _remem) o (rL04_ O ?1 A) s (_KS1 s# ?1 A) s (_G+S1 Z s (G z + s (w+ s sr zx _) sobre (@P5 sob*e + _tran) s (A z .group t @@ -1101,6 +1139,7 @@ _remem) o (rL04_ O _e) x (A z _ê) x (A z _ine) x (A z + _ine) x (oráv ks e) x (A ks ?1 e) x (CA S ai) x (A S @@ -1131,6 +1170,7 @@ _remem) o (rL04_ O _fle) x (a S gra) x (A S _he) x (A z +?2 _he) x (A ks _li) x (A S _lu) x (A S _mar) x ks @@ -1150,8 +1190,8 @@ _remem) o (rL04_ O ri) x (A S rela) x (A S _ro) x (A S + _ta) x (e S _trou) x (e s - _trou) xe (@ sE _ve) x (A S _xi) x (A S ?1 i) x (a_ S diff --git a/phsource/compile_report b/phsource/compile_report index a14d5040..cbb1c87c 100644 --- a/phsource/compile_report +++ b/phsource/compile_report @@ -1,5 +1,5 @@ -74 phoneme tables +90 phoneme tables new total base 109 109 consonants 11 119 @@ -31,7 +31,6 @@ consonants 11 119 ta 24 153 kn 17 149 ml 26 152 - te 16 149 hu 25 124 lt 44 139 lv 29 127 @@ -70,11 +69,28 @@ consonants 11 119 da 45 138 ka 20 115 fa 9 112 + rw 15 132 + prs 8 113 + sl 10 137 + gd 6 109 + nso 12 113 + ht 11 146 + az 10 129 + ak 8 111 + am 15 114 + wo 18 120 + dv 14 149 + te 16 149 + si 24 155 + tn 27 121 + mt 32 129 + bo 10 153 + kk 20 118 + tt 23 120 ko 19 120 kl 18 119 - am 15 114 - si 24 155 - sl 10 137 + ar 1 109 + gu 1 149 Data file Used by b/b [b] base @@ -112,6 +128,7 @@ d/d [d] base [d;] pl [d] hr [d] sq + [d] mt d/d_ [d] base [d[] base [d] base2 @@ -128,6 +145,7 @@ d/d_ [d] base [d;] pl [d] hr [d] sq + [d] mt d/d_dnt [d] sr d/dr [*] base [d[] base @@ -146,6 +164,7 @@ d/dr [*] base [d;] pl [d] hr [d] sq + [d] mt d/tap [*;] ro d/tap1 [*] base d/tap2 [t#] en @@ -169,6 +188,9 @@ d/xd [d] base [d] hr [d] sr [d] sq + [d] mt + [dz] bo + [dz#] bo d/xd3 [d#] hi d/xd_pzd [d^] et [d;] lt @@ -178,6 +200,8 @@ d/xdr [d] fr [d.#] hi [d.#] ml d/xdz [dz] consonants + [dz] bo + [dz#] bo d/x_tap [t#] en [*] pt dzh/dzh [dZ] base @@ -217,6 +241,7 @@ dzh/xdz_pzd [J] base [J] tr [J] ku envelope/i_risefall [11] zh +envelope/i_risefall2 [+2] rw envelope/p_214 [5] vi [5] vi-hue [214] zh @@ -234,6 +259,7 @@ envelope/p_fall [2] vi [22] zh [33] zh [53] zh + [+] rw envelope/p_fallrise [4] vi envelope/p_level [1] vi [1] vi-hue @@ -282,23 +308,28 @@ h/h_ [h] base [h] fi [h] et [] la + [h] mt h/h@ [h] base [h] fi [h] et [h#] sr [] la + [h] mt h/ha [h] base [h] fi [h] et [] la + [h] mt h/he [h] base [h] fi [h] et [] la + [h] mt h/hi [h] base [h] fi [h] et [] la + [h] mt h/ho [h] base [h] et [] la @@ -306,6 +337,7 @@ h/hu [h] base [h] et [] la h/hu_fi [h] fi + [h] mt j2/_j2 [;] base [;] ga j2/j2@ [;] base @@ -430,6 +462,8 @@ l/l@ [l#] base base vowelstart_l [l] fr [l/2] fr + [K] nso + [K] tn l/L1_aL [l] base [l/] base [l/] de @@ -462,12 +496,16 @@ l/la [l#] base base vowelstart_l [l] fr [l/2] fr + [K] nso + [K] tn l/l_a [l/3] base [l/] fr l/le [l#] base base vowelstart_l [l] fr [l/2] fr + [K] nso + [K] tn l/l_e [l/3] base [l/] fr l/L_eL_af [&] af @@ -479,6 +517,8 @@ l/li [l#] base [l] fr [l/2] fr [l] zh + [K] nso + [K] tn l/l_i [l/3] base [l/] fr [i] sq @@ -489,6 +529,8 @@ l/l_long [l] base l/lo [l#] base base vowelstart_l [l/2] fr + [K] nso + [K] tn l/l_o [l/3] base [l/] fr l^/l_rfx [l.] base @@ -499,6 +541,8 @@ l/lu [l#] base base vowelstart_l [l] fr [l/2] fr + [K] nso + [K] tn l/l_u [l/3] base [l/] fr l/l_vi [l] vi @@ -514,6 +558,8 @@ l/xl [l] base [l] fr [l] hu [ll] sq + [K] nso + [K] tn m/_m [m] base m/m_ [m] base m/m@ [m] base @@ -624,14 +670,21 @@ n/nu [n] base [n#] is [n] zh r2/r2@ [r-] en + [r-] tn r2/r2a [r-] en + [r-] tn r2/r2e [r-] en + [r-] tn r2/r2i [r-] en + [r-] tn r2/r2o [r-] en + [r-] tn r2/r2u [r-] en + [r-] tn r3/r_ [r/] base [r/] af [r] et + [r/] tn r3/r#_ [r#] is r3/r_n [r/] base [r] et @@ -645,12 +698,14 @@ r3/r_trill [R2] base [R] pl [r*] sr [r] ru + [r] tn r3/r_trill2 [R] base [r] cy r3/r_trill2.wav [R] base [r] cy r3/r_trill3.wav [R3] base [r] af + [r] tn r3/r_trill_short [R2] fi r3/r_trill.wav [R2] base [R2] fi @@ -670,6 +725,7 @@ r3/rx [*] base [x] pt-pt [*;] ro [r#] is + [r/] tn r3/rz_cs [R^] sk [R^/] sk r3/@tap [**] base @@ -682,33 +738,40 @@ r/a_ [r] da r/aa [R] da r/r [r] base [r-] en + [r-] tn r/_r [r] base r/r@ [r] base [R3] base [r] af [r] ro + [r] tn r/ra [r] base [R3] base [r] af [r] ro + [r] tn r/re [r] base [R3] base [r] af [r] ro + [r] tn r/ri [r] base [R3] base [r] af [r] ro + [r] tn r/ro [r] base [R3] base [r] af [r] ro + [r] tn r/rr [r/] base [r] ro r/ru [r] base [R3] base [r] af [r] ro + [r] tn r/tr [r] base r/trr [r/] base [r] ro @@ -717,6 +780,8 @@ r/xr [r] base [r-] en [r] af [r] ro + [r] tn + [r-] tn ufric/ch [C] base [J^] base ufric/ch_ [C] base @@ -782,10 +847,13 @@ ufric/th [T] base ufric/th_ [T] base ufric/tl# [tl#] is [tl#] kl +ufric/tlh [K] nso + [K] tn ufric/x [x] base ufric/x2 [x2] af [x] ku [Q2] ka + [X] kk ufric/x_hr [x] base [x] hr [x] ru @@ -810,6 +878,7 @@ ustop/k_asp [k#] consonants [g#] ml [kh] zh [k#] ka + [kh] tn ustop/k_asp_a [k#] consonants [g#] ml [k#] ka @@ -838,6 +907,7 @@ ustop/kl [k] base [k] lv [k] el [k] zhy + [kh] tn ustop/kr [k] base [k] base2 [k] et @@ -851,6 +921,7 @@ ustop/k_unasp [k] base [k] el [k] zhy [k] sq + [k-] tn ustop/k_unasp_ [k] zh [k-] ko ustop/null [?] base @@ -863,10 +934,12 @@ ustop/p_ [p] base [ph] consonants [p] fr [b#] ml + [ph] tn ustop/p_asp [ph] consonants [b#] hi [b#] ml [ph] zh + [ph] tn ustop/percus02 [#X2] hi ustop/percus10 [#X1] base ustop/pl [p] base @@ -879,10 +952,12 @@ ustop/pl [p] base [p] sk [p] sq [p] da + [ph] tn ustop/pr [p] base [p-] consonants [p] base2 [p] da + [ph] tn ustop/p_unasp [p] base [p-] consonants [p] base2 @@ -947,16 +1022,26 @@ ustop/ts [ts] consonants [ts] hu [z] zhy [tsh] zh + [ts] tn + [ts#] bo + [dz#] bo ustop/ts_ [ts] consonants [dz] consonants [ts] lv + [ts] tn + [ts#] bo + [dz#] bo ustop/ts2 [ts] lv [ts] hy [ts] ka + [ts] bo + [dz] bo ustop/tsh [tS] base [c] zhy + [tS] tn ustop/tsh_ [tS] base [c] zhy + [tS] tn ustop/tsh2 [tS] hr [dZ] hr ustop/t_short [t-] consonants @@ -976,6 +1061,7 @@ ustop/ts_pzd [tS;] base [tS;] lt [tS;] ru [dZ;] sq + [tS;] tn ustop/ts_pzd_ [c2] consonants ustop/ts_pzd2 [c2] consonants ustop/ts_pzd3 [tS;] hr @@ -1019,12 +1105,14 @@ vdiph2/i@_2 [i@] en-wm vdiph2/i@_3 [iR] de vdiph2/ie [i@] en-wi [ie] fi + [ie] mt vdiph2/ie_2 [ie] lt [ie] lv vdiph2/ii@ [i@] en [i@3] en [i@] en-us [ja] ru +vdiph2/ii@_2 [e] kk vdiph2/ii@_3 [i@] vi vdiph2/iioo [io] zh vdiph2/iu [iU] base2 @@ -1032,10 +1120,12 @@ vdiph2/iu [iU] base2 [iu] zhy vdiph2/iu_2 [iu] fi [iu] lv + [iu] mt vdiph2/iu_3 [iu] af vdiph2/iu_4 [Iu] cy [Yu] cy vdiph2/iy [iy] fi + [iy] mt vdiph2/o@ [o@] af [u@] zh vdiph2/oa [Oa] ro @@ -1049,6 +1139,7 @@ vdiph2/u#@ [U@] en-sc vdiph2/uaa [uo] lt [uo] lv vdiph2/uo [uo] fi + [uo] mt vdiph2/uu@ [U@] en [U@] en-n [U@] en-wm @@ -1057,6 +1148,7 @@ vdiph2/uw_2 [u:] en vdiph2/uw_3 [yU] ro vdiph2/uw_4 [u:] en-n vdiph2/uw_6 [u:] en-us + [u#] kk vdiph2/y@ [y@] zh vdiph2/y#@ [Y@] af vdiph2/ye [yE] sq @@ -1064,6 +1156,7 @@ vdiph2/yu [yU] nl [yu] zh vdiph2/y-y# [yY] fi [y@] vi + [yY] mt vdiph/8u [oU] en-us [ou] zh vdiph/aae [aI] en-us @@ -1075,11 +1168,13 @@ vdiph/aai [aI] ne vdiph/aai_2 [AI] af [AY] cy vdiph/aai_3 [ai] fi + [ai] mt vdiph/aau [au] fi [au] lt [au] lv [aU] is [aU:] is + [au] mt vdiph/aau_2 [aU] en-wi [VU] nl [aU] la @@ -1100,7 +1195,6 @@ vdiph/ai [aI] base2 [aI] eo [aI] kn [aI] ml - [aI] te [aI] lt [aI] sk [aI] hr @@ -1110,6 +1204,7 @@ vdiph/ai [aI] base2 [aI] id [aI] hy [aI] da + [aI] te [aI] kl vdiph/ai_2 [aI] en [aI] cy @@ -1125,6 +1220,7 @@ vdiph/ai_7 [aI] en-sc [aI] is [aI:] is vdiph/ai_8 [aI] ta + [aI] dv [aI] si vdiph/aoo [aU] en-us [aU] it @@ -1132,6 +1228,7 @@ vdiph/au [aU] en [aU] af [aU] ta [a:U] vi + [aU] prs [aU] si vdiph/au# [aU] en-sc vdiph/au_2 [au] zhy @@ -1152,12 +1249,14 @@ vdiph/eei [EI] base2 [eI] ne [EI] vi [eI] hy + [eI] prs vdiph/eei_2 [eI] eo [ei] fi [ei] lt [ei] lv [eI] id [eI] fa + [ei] mt vdiph/eei_3 [eI] lt [eI] sk [eI] ku @@ -1171,6 +1270,7 @@ vdiph/eeu_3 [aU] en-n [aU] en-wm [eU] ku vdiph/eey [ey] fi + [ey] mt vdiph/ei [eI] base2 [e:] nl [eI] la @@ -1189,17 +1289,20 @@ vdiph/eu [eU] base2 [eU] pt [eU] vi vdiph/eu_2 [eu] fi + [eu] mt vdiph/@i [Yi] et [@I] vi [@:I] vi vdiph/&i [&i] fi [&i] et [aI] hi + [i] mt vdiph/@i_2 [eI] af [@I] cy [@Y] cy [@] am vdiph/i@_2 [e@] af + [e@] tn vdiph/@i_3 [eI] en-wm [@I] ro [ai] zhy @@ -1224,17 +1327,19 @@ vdiph/ooi [OI] en [OI] no [oi] zhy [OI] id + [oi] mt vdiph/ooi_2 [OI] af [oI] eo -vdiph/ooi_3 [OI] en-rp +vdiph/ooi_3 [OI] en-us + [OI] en-rp [aI] en-wm -vdiph/ooi_4 [OI] en-us - [OI] sq +vdiph/ooi_4 [OI] sq vdiph/oou [oU] cs [OU] grc vdiph/ou [ou] fi [oU] ne [ou] zhy + [ou] mt vdiph/ou_2 [oU] lt [oU] sk [oU] ro @@ -1262,6 +1367,7 @@ vdiph/ui_2 [uI] af vdiph/ui_3 [uI] cy [uY] cy vdiph/ui_4 [ui] fi + [ui] mt vdiph/Vi [VI] ne vdiph/Vu [@U] af [VU] ne @@ -1274,10 +1380,13 @@ vdiph/yi [yi] fi [yI] grc [u-I] no [yi] zh + [yi] mt vdiph/y#i [Yi] fi + [Yi] mt vdiph/y#i_2 [Yy] is [Yy:] is vdiph/y#y [Yy] fi + [Yy] mt vdiph/y#y_2 [Yy] af [eoi] zhy vdiph/y#y_3 [Y:] nl @@ -1294,6 +1403,7 @@ vnasal/aa_n2 [A~] en vnasal/aa_n3 [A~] af vnasal/aa_n4 [A~] de [A~] fr + [A~] ht vnasal/a#_n [&~] pt vnasal/a#_n2 [&~] pt vnasal/a#u_n [&U~] pt @@ -1314,6 +1424,7 @@ vnasal/i_n2 [i~] hi vnasal/oi_n [oI~] pt vnasal/o_n [o~] hi [o~] pt + [O~] ht vnasal/o_n2 [o~] af vnasal/o_n4 [O~] fr vnasal/oo_n2 [O~] en @@ -1330,6 +1441,7 @@ vnasal/u_n [U~] hi vnasal/V_n [V~] hi vnasal/W_n [E~] fr [W~] fr + [E~] ht voc/bh [B] base voc/dh [D] base voc/dh_ [D] base @@ -1354,6 +1466,7 @@ voc/v [v] base [v] et [v] fr [v;] ro + [v] mt voc/v_ [B] base [v] base [v] fi @@ -1361,6 +1474,7 @@ voc/v_ [B] base [v] fr [v#] es [v;] ro + [v] mt voc/v# [v#] base voc/v#_ [v#] base voc/v2 [v#] es @@ -1390,6 +1504,8 @@ voc/z_ [z] base [z] fr [z;] ro [z] sq + [dz] bo + [dz#] bo voc/zh [Z] base [z.] base [R^] sk @@ -1411,10 +1527,12 @@ vowel/@ [@] base [V] cy [@/] ga [@] kn - [@] te [@] hy [@] ka [@] sl + [@] wo + [@:] wo + [@] te vowel/@- [@-] base [r*] hr [@-] da @@ -1430,6 +1548,7 @@ vowel/& [a] en-rp [&#] da [?&#] da [a] fa + [&] az vowel/0 [0] en [O] hi [O] pt @@ -1438,15 +1557,19 @@ vowel/0_2 [0] en-n [O] pt-pt [o] sw [O] sl + [o] nso + [o] tn vowel/0_3 [O:] en-us [O] en-sc [0] en-rp [A] hu [A] fa + [0] tt vowel/@_2 [@:] vi [@] sq [V] sq [@/] sq + [V] tt vowel/&_2 [&] bn vowel/@_3 [@#] en [@] en-sc @@ -1471,6 +1594,7 @@ vowel/@_6 [@] en [W] fr [W2] fr vowel/8 [o-] zh + [8] kk vowel/8_2 [U] en-us [8] sv vowel/8_3 [eo] zhy @@ -1501,13 +1625,19 @@ vowel/a [a] base [a] it [a] zh [a] id - [a] kl [a] sl + [a] bo + [a] kl vowel/a# [a] base2 [a/] base2 [a#] en-sc [a#] en-wi [&] sr + [a#] rw + [a/] rw + [a] wo + [a] dv + [a:] dv vowel/a_2 [a] base2 [a] en-wi [A:] en-wi @@ -1519,16 +1649,18 @@ vowel/a_2 [a] base2 [a] pt-pt [a] ro [a] el + [a] rw vowel/a#_2 [A] nl [a:] nl [a] kn - [a] te [a#] pl [&] hr [a] sv [a] is [a/] sw [a] ka + [a] nso + [a] te [a] si vowel/a_3 [a] en-sc [a/] en-sc @@ -1577,16 +1709,20 @@ vowel/a#_4 [a:] nl [a] tr vowel/a_5 [a:] ta [a:] ml - [a:] te [a/] it [a] la [a] sv [a] sw + [a:] te + [a] tn + [a] kk vowel/a_6 [a] ca [a] vi [a] am + [a:] wo vowel/a_7 [a] fr [a-] fr + [a] ht vowel/a_8 [a] en [a] sk [A] da @@ -1597,6 +1733,7 @@ vowel/aa [a:] et [A:] no [aa] zhy [a] hy + [a] az vowel/aa# [O] en-us [0] en-wi [a2] fi @@ -1606,8 +1743,10 @@ vowel/aa_2 [A:] en [A:] cy [A:] ga [A] zh + [A@] tn vowel/aa_3 [A:] af [A] sq + [A] prs vowel/aa_4 [A:] sv [O] vi vowel/aa_5 [A:] en-n @@ -1622,12 +1761,16 @@ vowel/aa_8 [0] en-us [A1] et [A] nl [a:] is + [A] tt [a] ko vowel/aa_9 [a] fi [a] et [a:] hi [a] ne [a] pa + [a] ak + [a] mt + [A] kk vowel/@_bck [@] hi [V] ne [@/] ne @@ -1653,7 +1796,6 @@ vowel/e [e] base [e:] kn [e] ml [e:] ml - [e:] te [e] hr [e/] it [e:] la @@ -1666,6 +1808,13 @@ vowel/e [e] base [e] sq [e] da [?e] da + [e] rw + [e#] rw + [e] wo + [e:] wo + [e] dv + [e:] dv + [e:] te [E] kl vowel/e# [I] en-sc [e] et @@ -1683,6 +1832,9 @@ vowel/e_2 [i] en-n vowel/e_3 [e:] hu [e] ku vowel/e_5 [i] en-sc +vowel/e_6 [e] ht + [e] ak + [e:] tt vowel/e_7 [e:] et vowel/e_8 [E:] de [e] fr @@ -1690,6 +1842,7 @@ vowel/e_8 [E:] de vowel/ee [E] en-n [E] sv [e] ka + [&] tt vowel/e_e [E] en-sc [E:] is vowel/ee# [E#] pl @@ -1711,15 +1864,21 @@ vowel/ee_2 [E] cy [E#] ku [&] da [?&] da + [&] kk vowel/ee#_2 [E1] et [E-] sv [E#] sq + [e] tn vowel/ee_3 [&] af [&:] af [E] pt [E] vi vowel/ee_4 [E] sq vowel/ee_5 [E] en + [E] ak + [E] wo + [E:] wo + [E] tn [E] ko vowel/ee_6 [&] sk [E3] sv @@ -1755,8 +1914,10 @@ vowel/e_mid [E] en-rp [E2] id [e] hy [e] ka - [e] si + [E] prs [E] sl + [E] ht + [e] si vowel/e_mid2 [E] af [E] de [E2] de @@ -1765,7 +1926,6 @@ vowel/e_mid2 [E] af [e] nci [e] fi [E] nl - [e] te [e] sk [e] bg [e/] it @@ -1779,11 +1939,17 @@ vowel/e_mid2 [E] af [E] da [?E] da [e] fa + [e] nso + [e] az [e] am + [e] te [e:] si + [e] mt + [e] bo vowel/@_fnt [@] en-wi [@2] en-wi [@2] hr + [E] kk vowel/@_fr [3] en-n vowel/@_hgh [@] fr [@-] fr @@ -1801,7 +1967,6 @@ vowel/i [i] base [i:] ta [i:] kn [i:] ml - [i:] te [i:] hu [i] it [i] es @@ -1815,8 +1980,18 @@ vowel/i [i] base [i] hy [i] ka [i] fa - [i] kl + [i] rw + [i#] rw + [i] prs + [i] nso + [i] ak + [i:] wo + [i:] dv + [i:] te [i:] si + [i] bo + [i] tt + [i] kl vowel/i# [y:] cy vowel/i_2 [i2] de [i:] de @@ -1834,6 +2009,7 @@ vowel/i_4 [i] fi [i] vi [i] da [?i] da + [i] mt vowel/i_5 [i:] en-sc vowel/i#_5 [y] pt-pt [i/] pt-pt @@ -1843,7 +2019,6 @@ vowel/i_6 [i] hi [i] ta [i] kn [i] ml - [i] te [i:] lt [i] lv [i:] lv @@ -1852,6 +2027,8 @@ vowel/i_6 [i] hi [i] tr [i] ku [i] id + [i] dv + [i] te [i] si vowel/i#_6 [i.] zh vowel/i_7 [i:] et @@ -1862,6 +2039,7 @@ vowel/i#_7 [i1] et [u-] ko vowel/i_8 [i] et [i] fr + [i] ht vowel/i_en [i:] en [i:] en-us vowel/i_fnt [i:] en-wi @@ -1882,15 +2060,20 @@ vowel/ii [I] en-n [i] zhy [I] ku [I#] sq + [i] tn + [I] tt vowel/ii# [I#] en-us [Y] cy [Y] ru [I] ku [i] sq + [I] kk + [e] tt vowel/ii_2 [I] en [I] ga [i] zh [I] da + [I] mt vowel/ii#_2 [y] pl [y] am vowel/ii_3 [I] cy @@ -1906,11 +2089,13 @@ vowel/ii_3 [I] cy vowel/ii#_3 [I2] en-us vowel/ii_4 [I2] en [I] en-us + [I2] tn vowel/ii_5 [i] ta [i] bg [I] la [i] zh [I] tr + [i] az [i] am vowel/ii_6 [I] en-wm [I] en-wi @@ -1921,9 +2106,11 @@ vowel/ii_6 [I] en-wm [i/] pt [i] is [I] sq + [i] wo vowel/ii_7 [i] en [i] ga [i] sq +vowel/ii_8 [i] kk vowel/ii_final [i] en-us [i] en-rp vowel/@_low [@] en-rp @@ -1963,8 +2150,6 @@ vowel/o [o] base2 [o:] kn [o] ml [o:] ml - [o] te - [o:] te [o] it [o/] it [O] la @@ -1974,6 +2159,14 @@ vowel/o [o] base2 [o:] sv [o] id [o] hy + [o] rw + [o#] rw + [o] ak + [o] wo + [o:] wo + [o] te + [o:] te + [o] bo [o] kl vowel/o_2 [o:] cy [o:] hi @@ -1986,6 +2179,7 @@ vowel/o_2 [o:] cy vowel/o-_2 [V] en-n [V] en-wm vowel/o_3 [oU] en-sc + [o] kk vowel/o-_3 [U] en-rp vowel/o-_4 [o] ro [o] am @@ -1995,13 +2189,15 @@ vowel/o_6 [O] nl [O:] nl vowel/o_7 [o] ku vowel/o_8 [o] fr - [o] ko [o] sl + [o] ht + [o] ko vowel/oe [W] af [W] de [W] hy [W] da [?W] da + [W] tt vowel/oe_2 [W] no vowel/oe_4 [W] sv vowel/o_mid [U@] en-rp @@ -2012,7 +2208,12 @@ vowel/o_mid [U@] en-rp [o] bg [o] tr [o] fa + [o] az + [o] dv + [o:] dv + [o] tt vowel/o_mid2 [O] fr + [O] ht vowel/oo [o] base [O:] en-sc [O] en-wi @@ -2029,6 +2230,9 @@ vowel/oo [o] base [o] zhy [O] tr [O] id + [o] prs + [O] wo + [O:] wo vowel/oo_1 [O:] en-n [O:] en-rp [O@] en-rp @@ -2051,11 +2255,14 @@ vowel/oo_1 [O:] en-n [o] ka [o] si [o:] si + [O] tn + [o] mt vowel/oo_2 [0] en-sc [O] cy [o] cs [0] da [?0] da + [O] ak [@] ko vowel/oo_3 [O] af vowel/oo_4 [O] base2 @@ -2109,6 +2316,11 @@ vowel/u [u] base [u:] cs [U] la [u] id + [u] prs + [u] ak + [u:] wo + [u] bo + [u] tt vowel/u# [u:] en-sc [Y] tr vowel/u_2 [u1] fi @@ -2118,8 +2330,9 @@ vowel/u_2 [u1] fi [u] ro [u] is [u] tr - [u] am [u] sl + [u] am + [u] wo vowel/u#_2 [u-] sv vowel/u#_3 [U] ta [U:] ta @@ -2128,18 +2341,24 @@ vowel/u#_4 [U] en-sc [y] ml vowel/u_5 [U1] et [u] sw + [u] nso + [u] az + [u] tn vowel/u#_5 [y] vi vowel/u_6 [u] ta [u2] ta [u:] ta - [u] te - [u:] te [U] pt-pt [u] pt-pt [u] ku + [u] dv + [u:] dv + [u] te + [u:] te [u] si [u:] si vowel/u#_7 [@] tr + [@] az vowel/u_bck [u] base2 [U] cy [u:] ga @@ -2170,6 +2389,9 @@ vowel/u_bck [u] base2 [u] da [?u] da [u] ka + [u] rw + [u#] rw + [u] mt [u] ko vowel/u_bck2 [u] et [u] fr @@ -2177,22 +2399,27 @@ vowel/u_bck2 [u] et [u:] la [u] es [u] fa + [u] ht [u] kl vowel/u_bck3 [u:] et + [u] kk vowel/uu [U] en [U] en-n [U] en-wm [U] ga + [U] tn vowel/uu# [U] ku vowel/uu_2 [U] base2 [U] de [U] ca [U] tr + [U] kk vowel/uu#_2 [u:] en-rp vowel/uu_3 [u] af [y] zh vowel/uu_4 [U] fi [U] sv + [U] mt vowel/uu_bck [U] en-wi [U] fr-ca [U] hi @@ -2240,6 +2467,9 @@ vowel/y [y] base2 [y] sq [y] da [?y] da + [y] az + [y] mt + [y] tt vowel/y# [Y] base2 [3:] en-wm [Y:] de @@ -2252,15 +2482,18 @@ vowel/y# [Y] base2 [Y] ro [oe] zhy [W] tr + [Y] mt vowel/y## [y] is vowel/y_2 [y:] la [y] zh vowel/y#_2 [Y] hu [Y:] sv + [W] az vowel/y_3 [y] af vowel/y#_3 [W] is [W:] is vowel/y_4 [y:] no +vowel/y#_4 [Y] kk vowel/y_5 [y:] sv [y] tr [y] ku @@ -2403,6 +2636,9 @@ vwl_ru/oo [O] ru vwl_ru/u [u] ru vwl_ru/u# [u#] ru vwl_ru/u#u [u"] ru +vwl_tn/@ [@] tn +vwl_tn/I [I] tn +vwl_tn/r@ [@] tn vwl_zh/aang [aang] zhy vwl_zh/aau [Au] zh vwl_zh/a_n [a] zh @@ -2426,6 +2662,7 @@ vwl_zh/y& [y&] zh vwl_zh/yee [yE] zh w/iw_ [w] base [w/] fr +w/w [w] base w/_w [w] base [w/] fr w/w_ [w] base @@ -2487,6 +2724,7 @@ x/d_ [d] base [d] hr [d] is [d] sq + [d] mt x/d_dnt [d[] base [d] base2 [d] fi @@ -2495,6 +2733,7 @@ x/d_dnt [d[] base [d] hu [d] lt [d] pl + [d] mt x/d_pzd [d^] et [d;] lt [d;] pl diff --git a/phsource/intonation b/phsource/intonation index 8bc10510..072c66ba 100644 --- a/phsource/intonation +++ b/phsource/intonation @@ -16,7 +16,16 @@ nucleus0 fall-rise 80 18 nucleus fall-rise2 78 22 34 52 endtune -tune q1 +tune q1 // small change for version 1.47.05 +prehead 45 56 +headenv fall 16 +head 3 75 43 -7 0 +headextend 20 60 35 11 0 +nucleus0 fall-rise 89 21 +nucleus fall-rise2 86 21 34 68 +endtune + +tune q1a // previous version prehead 46 57 headenv fall 16 head 4 75 43 -7 0 diff --git a/phsource/ph_english_us b/phsource/ph_english_us index 760ede5e..e1449dce 100644 --- a/phsource/ph_english_us +++ b/phsource/ph_english_us @@ -263,8 +263,8 @@ endphoneme phoneme OI vowel starttype #o endtype #i - length 280 - FMT(vdiph/ooi_4) + length 270 + FMT(vdiph/ooi_3) endphoneme diff --git a/phsource/phonemes b/phsource/phonemes index 22f593bd..a1d86ca6 100644 --- a/phsource/phonemes +++ b/phsource/phonemes @@ -616,8 +616,8 @@ phoneme w VowelEnding(w/xw, -30) - IF prevPh(isPause) THEN - FMT(w/_w) + IF prevPhW(isNasal) THEN + FMT(w/w) ELSE FMT(w/_w) ENDIF @@ -1745,9 +1745,6 @@ include ph_kannada phonemetable ml hi include ph_malayalam -phonemetable te hi -include ph_telugu - phonemetable hu base @@ -1867,31 +1864,14 @@ include ph_georgian phonemetable fa base include ph_farsi -// experimental - -phonemetable ko base -include ph_korean - -phonemetable kl base -include ph_greenlandic - -phonemetable am base -include ph_amhari - //************************************************************************************** // The following lines are experimental, for future additions. // These langauges are not in a usable state. // These lines can be deleted. -phonemetable si hi -include ph_sinhala - -phonemetable sl sk -include ph_slovenian - -//phonemetable rw base2 -//include ph_kinyarwanda +phonemetable rw base2 +include ph_kinyarwanda //phonemetable mr hi //include ph_marathi @@ -1902,42 +1882,67 @@ include ph_slovenian //phonemetable mn base //include ph_mongolian -//phonemetable prs base -//include ph_dari +phonemetable prs base +include ph_dari -//phonemetable gd base -//include ph_s_gaelic +phonemetable sl sk +include ph_slovenian -//phonemetable nso base -//include ph_northern-sotho +phonemetable gd base +include ph_s_gaelic -//phonemetable ht fr -//include ph_haitian +phonemetable nso base +include ph_northern-sotho -//phonemetable az tr -//include ph_azerbaijani +phonemetable ht fr +include ph_haitian -//phonemetable ak base -//include ph_akan +phonemetable az tr +include ph_azerbaijani -//phonemetable wo base -//include ph_wolof +phonemetable ak base +include ph_akan -//phonemetable dv hi -//include ph_divehi +phonemetable am base +include ph_amhari -//phonemetable tn base -//include ph_setswana +phonemetable wo base +include ph_wolof -//phonemetable mt base -//include ph_maltese +phonemetable dv hi +include ph_divehi -//phonemetable bo hi -//include ph_tibetan +phonemetable te hi +include ph_telugu -//phonemetable kk base -//include ph_kazakh +phonemetable si hi +include ph_sinhala -//phonemetable tt base -//include ph_tatar +phonemetable tn base +include ph_setswana + + +phonemetable mt base +include ph_maltese + +phonemetable bo hi +include ph_tibetan + +phonemetable kk base +include ph_kazakh + +phonemetable tt base +include ph_tatar + +phonemetable ko base +include ph_korean + +phonemetable kl base +include ph_greenlandic + +phonemetable ar base +include ph_arabic + +phonemetable gu hi +include ph_gujarati diff --git a/phsource/vdiph/ooi_3 b/phsource/vdiph/ooi_3 index f512113d6748668441d39f33418f385098dbd531..0496a5b4e6d7bbbe4f2270c653a6e4d27e69f80d 100644 GIT binary patch delta 5287 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 diff --git a/phsource/vwl_en_us/aU@ b/phsource/vwl_en_us/aU@ index 63ee0e09691f420b81a493ccd5ac7c56a2fd621f..f1c1759d1f6089c592e98eec5f592ea6f6a025ff 100644 GIT binary patch literal 2775 zcmds(%WoT16vjV~J@xqgh~wC?ohGqk2AakuK_InJeN{?S)I_39Dz!*}C?JKZ<-K5m zip2t06eM0d7FiSoh=+tKP%DH?|AH0C7b8W|S9TcI84fyK%-udRv z@%a1Qb7q$ByXWqe<%6?+01qElLEO)Y_oM6|ROeU)&UR1qwM8oXyDIQA5WQx7;Xg`6 zI*{}?vrkxWTN1Ss*|m||N98mX>A-v#iMFrp3-|!(z#TDVC^cs-(F~buek;Hh<#%2o z9e92W)}MyrmiK#<-Lgo3+}>nk+{L>)hA;6N9>*v65DK?r9Ag+k3Tb4JLjgq|Phbv9 zTyrOm;~=KkCaD%tL6ze$Mv>skA;dVwk<=~4?;*xXQB6{fbBuw1nk~nxs{ExYV{GTu zCAI>x{LNvW%b;=njn=FBE|q;{ymPzCeyMxkeQgmI9__0Cgo7V9!(nC%piI|`^dqfZ$D$+Gs`AjePjkLUz@Y4}N6q*2sd94{o>>mz~|uhwD*OsX3<;%E*VBbLnsM;l@Bd zELeSIt9)qS2%f|RoTA5PNn(Y5SG7m7yT!#giHwlVH15UIzld2N|Z#)=-xI`i_3T4ZnBcx$tEj?jItaT zsDcVyHGCHmzZi;J-r-TUBC&`2`y{@?i>&@<@E#Vmvy*f+M@LiK?P=1;akuWoE^;`I zXYl}^BeyY6iaayLJze2WmfBt+ks-P-6r}#h6G3RE_46UjWBxr7iR;`LB>|UtFioaa z_6m8AGmg}z3CW3@BJmDd&PN7`t3H(;Ge|sTtIR2bM9mo_v1b#BPvcFaHUTq*rhnb= zT}b?7C~n#HDE}W48(ZJV31DI4#OoySfmOHUjY&Fi(T8-=YWwFzG>#7J+b;P!K*owA2RF9>H3RbT@nVbai z4~Zy>poa=7dQnj<9)fuCHSenUaWpvnSe1Y_2xcVy-Ov0FzedWh z!T#Y#rC@N0y!JW>d%CKP6@t>NY`}y=!;Pc589U7Dm444@ZnE0^E~#)4e)cXIlo#TS z!PoVZ_!7)eIA_RIJfB5!9EMZ5H}kN&Mps@Mx9pprQ@NV!HJ1op(+b+bA^YraMySDB diff --git a/phsource/w/_w b/phsource/w/_w index 863e2a133f75de18c883f89356c5e3c217b1496a..aab2856f97979d6cd17735b0d5eb0e3ab727e126 100644 GIT binary patch delta 16 Xcmeys`GIqS6QlR!`-}z~i)&c`Ixz-W delta 16 Xcmeys`GIqS6QkSY`-}z~i)&c`Is^t( diff --git a/phsource/w/w b/phsource/w/w index 65cbe6e4f7fccdf307e2f43b274742d9efb3b5a7..71ea65b9423782b01647bff7f39cae28c6242b31 100644 GIT binary patch delta 12 Tcmcc2cA0I0BV*V`CqZTa9#8|~ delta 12 Tcmcc2cA0I0BV)=&CqZTa9+m^} diff --git a/platforms/riscos/cpp/speak_riscos b/platforms/riscos/cpp/speak_riscos index 0b08f6e9..1b34c320 100644 --- a/platforms/riscos/cpp/speak_riscos +++ b/platforms/riscos/cpp/speak_riscos @@ -634,7 +634,7 @@ void jsd_swi_functions(int *r) case 3: // translate into phonemes use_ipa = 0; - if((r[2] >= 1) && (use_ipa <= 4)) + if((r[2] >= 1) && (r[2] <= 5)) use_ipa = r[2]; TranslateClause(translator,NULL,(char *)r[1],NULL,NULL); GetTranslatedPhonemeString(translator->phon_out, sizeof(translator->phon_out), use_ipa); diff --git a/platforms/windows/make_espeak.iss b/platforms/windows/make_espeak.iss index ec9bca85..429ad00f 100755 --- a/platforms/windows/make_espeak.iss +++ b/platforms/windows/make_espeak.iss @@ -2,7 +2,7 @@ [Setup] AppName=eSpeak -AppVerName=eSpeak version 1.47.04 +AppVerName=eSpeak version 1.47.05 AppCopyright=Licensed under GNU General Public License version 3. (See file License.txt for details). WindowVisible=yes diff --git a/platforms/windows/make_espeakedit.iss b/platforms/windows/make_espeakedit.iss index 235aa67d..7b631f67 100755 --- a/platforms/windows/make_espeakedit.iss +++ b/platforms/windows/make_espeakedit.iss @@ -1,7 +1,7 @@ [Setup] AppName=eSpeakEdit -AppVerName=eSpeakEdit version 1.47.04 +AppVerName=eSpeakEdit version 1.47.05 DefaultDirName={pf}\eSpeak DefaultGroupName=eSpeak OutputBaseFilename=setup_espeakedit diff --git a/src/compiledata.cpp b/src/compiledata.cpp index a275558d..b633057a 100644 --- a/src/compiledata.cpp +++ b/src/compiledata.cpp @@ -2727,7 +2727,6 @@ static void DecThenCount() static void InstnPlusPhoneme(int instn) {//==================================== int phcode; - DecThenCount(); phcode = NextItemBrackets(tPHONEMEMNEM,0); *prog_out++ = instn + phcode; @@ -2835,16 +2834,19 @@ int CompilePhoneme(int compile_phoneme) case i_CHANGE_IF+2: case i_CHANGE_IF+3: InstnPlusPhoneme(keyword << 8); + DecThenCount(); break; case i_PAUSE_BEFORE: value = NextItemMax(255); *prog_out++ = (i_PAUSE_BEFORE << 8) + value; + DecThenCount(); break; case i_PAUSE_AFTER: value = NextItemMax(255); *prog_out++ = (i_PAUSE_AFTER << 8) + value; + DecThenCount(); break; case i_SET_LENGTH: @@ -2936,6 +2938,7 @@ int CompilePhoneme(int compile_phoneme) { *prog_out++ = (ipa_buf[ix+start] << 8) + (ipa_buf[ix+start+1] & 0xff); } + DecThenCount(); break; } break; @@ -3018,6 +3021,7 @@ int CompilePhoneme(int compile_phoneme) case kCALLPH: CallPhoneme(); + DecThenCount(); break; case kFMT: @@ -3049,6 +3053,7 @@ int CompilePhoneme(int compile_phoneme) break; case kTONESPEC: + DecThenCount(); endphoneme = CompileToneSpec(); break; diff --git a/src/dictionary.cpp b/src/dictionary.cpp index 15e9d3e5..60222023 100644 --- a/src/dictionary.cpp +++ b/src/dictionary.cpp @@ -653,13 +653,15 @@ void GetTranslatedPhonemeString(char *phon_out, int n_phon_out, int use_ipa) static const char *stress_chars = "==,,''"; static const int char_tie[] = {0x0361, 0x200d}; // combining-double-inverted-breve, zero-width-joiner - if(use_ipa == 4) + if(use_ipa >= 4) { // separate individual phonemes with underscores - use_ipa = 1; separate_phonemes = '_'; + if(use_ipa == 5) + use_ipa = 0; + else + use_ipa = 1; } - if(phon_out != NULL) { for(ix=1; ix<(n_phoneme_list-2); ix++) @@ -698,8 +700,8 @@ void GetTranslatedPhonemeString(char *phon_out, int n_phon_out, int use_ipa) if(c != 0) { buf += utf8_out(c, buf); - if(separate_phonemes) - *buf++ = separate_phonemes; +// if(separate_phonemes) +// *buf++ = separate_phonemes; } } } @@ -1637,8 +1639,11 @@ void SetWordStress(Translator *tr, char *output, unsigned int *dictionary_flags, if(!(control & 1) && ((ph = phoneme_tab[*p]) != NULL)) { - if(ph->type == phSTRESS) - ph = phoneme_tab[p[1]]; + while((ph->type == phSTRESS) || (*p == phonEND_WORD)) + { + p++; + ph = phoneme_tab[p[0]]; + } #ifdef deleted int gap = tr->langopts.word_gap & 0x700; diff --git a/src/espeak.cpp b/src/espeak.cpp index 8db7b2d1..2e769e0b 100644 --- a/src/espeak.cpp +++ b/src/espeak.cpp @@ -20,6 +20,7 @@ #include #include #include +#include #ifndef NEED_GETOPT #include #endif @@ -221,14 +222,17 @@ int OpenWavFile(char *path, int rate) if(path == NULL) return(2); - if(path[0] == 0) - return(0); - - if(strcmp(path,"stdout")==0) - f_wavfile = stdout; - else - f_wavfile = fopen(path,"wb"); + while(isspace(*path)) path++; + f_wavfile = NULL; + if(path[0] != 0) + { + if(strcmp(path,"stdout")==0) + f_wavfile = stdout; + else + f_wavfile = fopen(path,"wb"); + } + if(f_wavfile == NULL) { fprintf(stderr,"Can't write to: '%s'\n",path); diff --git a/src/readclause.cpp b/src/readclause.cpp index 049ef18d..d8c5f0c3 100644 --- a/src/readclause.cpp +++ b/src/readclause.cpp @@ -71,6 +71,8 @@ static int ssml_ignore_l_angle = 0; // punctuations symbols that can end a clause static const unsigned short punct_chars[] = {',','.','?','!',':',';', + 0x00a1, // inverted exclamation + 0x00bf, // inverted question 0x2013, // en-dash 0x2014, // em-dash 0x2026, // elipsis @@ -119,6 +121,8 @@ static const unsigned short punct_chars[] = {',','.','?','!',':',';', // bits 0-7 pause x 10mS, bits 12-14 intonation type, bit 15 don't need following space or bracket static const unsigned int punct_attributes [] = { 0, CLAUSE_COMMA, CLAUSE_PERIOD, CLAUSE_QUESTION, CLAUSE_EXCLAMATION, CLAUSE_COLON, CLAUSE_SEMICOLON, + CLAUSE_SEMICOLON | 0x8000, // inverted exclamation + CLAUSE_SEMICOLON | 0x8000, // inverted question CLAUSE_SEMICOLON, // en-dash CLAUSE_SEMICOLON, // em-dash CLAUSE_SEMICOLON | PUNCT_SAY_NAME | 0x8000, // elipsis diff --git a/src/speak.cpp b/src/speak.cpp index c2e30a62..be869a09 100644 --- a/src/speak.cpp +++ b/src/speak.cpp @@ -24,6 +24,7 @@ #include #include #include +#include #ifndef PLATFORM_DOS #ifdef PLATFORM_WINDOWS @@ -243,16 +244,22 @@ static int OpenWaveFile(const char *path, int rate) if(path == NULL) return(2); - if(strcmp(path,"stdout")==0) + while(isspace(*path)) path++; + + f_wave = NULL; + if(path[0] != 0) { + if(strcmp(path,"stdout")==0) + { #ifdef PLATFORM_WINDOWS // prevent Windows adding 0x0d before 0x0a bytes - _setmode(_fileno(stdout), _O_BINARY); + _setmode(_fileno(stdout), _O_BINARY); #endif - f_wave = stdout; + f_wave = stdout; + } + else + f_wave = fopen(path,"wb"); } - else - f_wave = fopen(path,"wb"); if(f_wave != NULL) { diff --git a/src/synthdata.cpp b/src/synthdata.cpp index ea85a3f3..9796548f 100644 --- a/src/synthdata.cpp +++ b/src/synthdata.cpp @@ -35,7 +35,7 @@ #include "translate.h" #include "wave.h" -const char *version_string = "1.47.04a 05.Apr.13"; +const char *version_string = "1.47.05 08.Apr.13"; const int version_phdata = 0x014701; int option_device_number = -1; From b829607790c7a29937c65ea65624b41850ce00b1 Mon Sep 17 00:00:00 2001 From: jonsd Date: Mon, 8 Apr 2013 20:34:25 +0000 Subject: [PATCH 2/4] git-svn-id: https://espeak.svn.sourceforge.net/svnroot/espeak/trunk@340 d46cf337-b52f-0410-862d-fd96e6ae7743 --- dictsource/en_list | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/dictsource/en_list b/dictsource/en_list index 0341c962..77d392ad 100644 --- a/dictsource/en_list +++ b/dictsource/en_list @@ -1,4 +1,4 @@ - + // You can use the en_extra file, rather than this one // to add your own pronunciation definitions. @@ -759,6 +759,7 @@ allover O:l'oUv3 alm A:m almost O:lmoUst allspice $1 +alt O:lt //not abbrev alternate O:lt'3:n@t $only alternate O:lt3neIt $verb alternately O:lt'3:n@tlI $verbf From 65e501e3f78d54b2a2f1f4f64d941f87328a6ea4 Mon Sep 17 00:00:00 2001 From: jonsd Date: Tue, 9 Apr 2013 09:33:57 +0000 Subject: [PATCH 3/4] [1.47.05] git-svn-id: https://espeak.svn.sourceforge.net/svnroot/espeak/trunk@341 d46cf337-b52f-0410-862d-fd96e6ae7743 --- dictsource/en_list | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/dictsource/en_list b/dictsource/en_list index 77d392ad..b14e8dff 100644 --- a/dictsource/en_list +++ b/dictsource/en_list @@ -759,7 +759,7 @@ allover O:l'oUv3 alm A:m almost O:lmoUst allspice $1 -alt O:lt //not abbrev +alt 0lt //not abbrev alternate O:lt'3:n@t $only alternate O:lt3neIt $verb alternately O:lt'3:n@tlI $verbf @@ -4164,7 +4164,7 @@ someone sVmw0n //conjunctions -although OlD'oU $pause +although 0lD'oU $pause and and $u $pause $only as %az $only (as is) ,az,Iz $pause From 9ab8a5d0f81fe1867b5ff37fee391960373f163f Mon Sep 17 00:00:00 2001 From: "Reece H. Dunn" Date: Tue, 9 Apr 2013 11:25:54 +0100 Subject: [PATCH 4/4] 1.47.05 (from http://espeak.sourceforge.net/test/latest.html) --- phsource/envelopes.png | Bin 17934 -> 20187 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/phsource/envelopes.png b/phsource/envelopes.png index aac09caa46490b4e9e302c44b308d6726812d441..5876f8bc5888a16ccf3b1d8a3d7080e9a9eff474 100644 GIT binary patch literal 20187 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⪻wqeT#dYB3u=n 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 literal 17934 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