From 0fc12016fab1a7ed650e187f7b5e21c3cc6f2dbb Mon Sep 17 00:00:00 2001 From: jonsd Date: Fri, 29 May 2009 11:48:39 +0000 Subject: [PATCH] [1.40.21] Fix: -g command option not working on Windows. Fix: Text position value in events was limited to 16 bits. [1.40.15] espeakedit: Change formant dialog to include Klatt parameters. espeakedit: Change the format of formant data to include Klatt parameters. espeakedit: Fix the frequency of F7,F8 at 7800Hz,9000Hz. git-svn-id: https://espeak.svn.sourceforge.net/svnroot/espeak/trunk@220 d46cf337-b52f-0410-862d-fd96e6ae7743 --- dictsource/af_list | 36 +++- dictsource/af_rules | 25 ++- dictsource/dict_phonemes | 49 +++-- dictsource/en_list | 20 ++ dictsource/en_rules | 17 +- dictsource/fi_list | 12 +- dictsource/fi_rules | 9 +- dictsource/fr_list | 225 +++++++++++--------- dictsource/fr_rules | 153 ++++++++------ dictsource/zh_list | 16 +- phsource/compile_report | 169 ++++++++------- phsource/m/m_ | Bin 1172 -> 1172 bytes phsource/n/n_ | Bin 952 -> 952 bytes phsource/ph_base2 | 15 ++ phsource/ph_finnish | 24 +-- phsource/ph_french | 219 ++++++++++---------- phsource/phonemes | 6 +- phsource/r/a_ | Bin 0 -> 5202 bytes phsource/vdiph2/ie | Bin 1978 -> 1978 bytes phsource/vdiph2/uo | Bin 8014 -> 8014 bytes phsource/vowel/ee_2 | Bin 1168 -> 1168 bytes phsource/vwl_fr/@R3 | Bin 1703 -> 1703 bytes phsource/vwl_fr/@R5 | Bin 4843 -> 2915 bytes phsource/vwl_fr/r_@ | Bin 881 -> 1167 bytes phsource/vwl_fr/r_a | Bin 1369 -> 1369 bytes phsource/vwl_fr/r_e | Bin 1369 -> 1369 bytes phsource/vwl_fr/r_i | Bin 0 -> 1369 bytes phsource/vwl_fr/r_o | Bin 0 -> 1369 bytes phsource/vwl_fr/r_u | Bin 2021 -> 1369 bytes phsource/vwl_fr/r_y | Bin 6017 -> 1369 bytes phsource/vwl_fr/w_a | Bin 6873 -> 6873 bytes platforms/windows/windows_dll/espeak.dsp | 12 +- src/compiledata.cpp | 83 +++++--- src/espeakedit.cpp | 4 +- src/formantdlg.cpp | 249 ++++++++++++++--------- src/klatt.cpp | 129 +++++++----- src/klatt.h | 19 +- src/numbers.cpp | 2 +- src/speak.cpp | 4 +- src/speak_lib.cpp | 2 +- src/spect.cpp | 73 ++++--- src/spect.h | 30 ++- src/spectdisplay.cpp | 66 +++--- src/spectseq.cpp | 95 +++------ src/speech.h | 2 +- src/synthdata.cpp | 4 +- src/synthesize.cpp | 24 +-- src/synthesize.h | 69 ++++--- src/tr_languages.cpp | 13 +- src/transldlg.cpp | 4 +- src/voices.cpp | 7 +- src/wavegen.cpp | 52 +++-- 52 files changed, 1147 insertions(+), 791 deletions(-) create mode 100644 phsource/r/a_ create mode 100755 phsource/vwl_fr/r_i create mode 100755 phsource/vwl_fr/r_o diff --git a/dictsource/af_list b/dictsource/af_list index 09bcaf4a..d804aec0 100755 --- a/dictsource/af_list +++ b/dictsource/af_list @@ -12,12 +12,14 @@ // abbreviations (http ://) hA:te@te@p'e@_ adv atfuk'A:t +atkv $abbrev bpk b@p&rk bv beIf'o@rbe@lt $dot dr d'Okt@r $dot e.a _:En_'and@r edms eI@ndOms ens Enso@fo@rts $dot +fak $abbrev genl x2@n@rA:l insp InspEkt'Y@r $dot isbn $abbrev @@ -358,6 +360,7 @@ benjamin bEndZ@m@n bennett bEn@t bertha b&rta bester b'Est@r +betsie bEtsi beyers beI@rs blignault blIx2n@Ut blomerus blum'e@rWs @@ -365,7 +368,6 @@ botha bo@ta bouwer b@U@r brian _^_EN bredenkamp bre@d@nkamp -breytenbach breIt@nbax2 bruwer bruw'&:r caesar siz@r carl kA:r@L @@ -392,6 +394,8 @@ coetzee kuts'e@ cronjé krOnj'e@ cynthia _^_EN dalene dal'e@n +daniël d'A:ni:@l +#zzz darwin _^_EN david _^_EN (da vinci) da||v'intSi @@ -421,13 +425,14 @@ elsabé &ls@bi emmarentia Emar'e~nSja erasmus $2 ernest _^_EN -eségiël is'e@x2i_@l +esegiël is'e@x2i:@l estelle %ist&l etienne Eti@n eugene judZ'i:n eugène yZ'En farao fA:ro@ ferreira f@r&:r@ +filemon f'il@mOn fischer fiS@r fourie fur'i francina $2 @@ -442,10 +447,10 @@ gerhardus $2 gertruida $2 gloria glO:ria grange x2rA:nsi +grové x2ruv'e@ gustav gustaf guy _^_EN hamlet _^_EN -harry _^_EN havenga hA:f@Nx2a haydn hAId@n helen _^_EN @@ -491,7 +496,9 @@ levi le@fi liesbet lisbEt louis luI louise luw'i:z +lukas l'ukas mackintosh _^_EN +madelene mad@l'e@n mbeki mbE:ki magdalena $3 malan mal'an @@ -586,6 +593,7 @@ telemann te@l@man terblanche t@rblA:nS theo tiu theron tr'On +timotheus t@m'o@tiWs thys teIs toerien $2 totius to@SiWs @@ -635,10 +643,25 @@ peugeot pW:Z@U port pOrt $1 rover _^_EN sotho su:tu +thessalonicense tEsalo@nis'Ens@ toyota $2 venda vEnda volvo vOlvu wimpy wImpi +// some Bible names +levitikus $2 +deuteronomium dY@t@ro@n'o@miWm +josua j'o@Sia +jesaja $2 +jeremia j%e@r@m'ia +hosea hus'i:a +amos 'A:mOs +obadja o@b'atja +miga m'ix2a +habakuk h'abakWk +sefanja s@f'anja +sagaria sax2ar'ia +maleagi $3 // article @@ -830,9 +853,8 @@ capita kapita casino kas'i:n@U cedille s@dIl@ charisma kar'Isma -cliché kliS'eI: - clichés kliS'eI:s +cliché kliS'eI: crescendo kr@SEndu dadelik dA:d@lIk @@ -881,7 +903,6 @@ gaandeweg x2A:nd@v&x2 garages g@rA:dZ@s gee x2e@ geen x2e@n -gegewens x2@x2e@v@ns geldelike x2&ld@l@k@ genade $2 genesis x2e@n@s@s @@ -970,7 +991,6 @@ memoriam mEm'o@riam mercedes $2 meregebied me@r@x2@bit merlot m&rl'o@ -miaau mi'aU: midwinter mIdv@nt@r militêre mIl@t'&:r@ minister m@nIst@r @@ -1054,6 +1074,7 @@ oorval $2 $verb oudsher @Utsh&r pandemonium pand@m'o@niWm +papperel pap@r'&l parate par'A:t@ parke park@ parkie $1 @@ -1160,6 +1181,7 @@ verte f&rt@ verweg f&:rv&x2 via via volheid $1 +volswanger $1 volte $1 voluit fOl_Yyt voorgee fo@rx2e@ diff --git a/dictsource/af_rules b/dictsource/af_rules index f556b846..0efffba3 100755 --- a/dictsource/af_rules +++ b/dictsource/af_rules @@ -18,6 +18,7 @@ a A: AC) a (_ %a // short final a in words like: Eva/Pieta/(su)sara %C) a (_ %a // short final a in words like: Bella/Betta/gogga + &k) a (_ a // short final a in words like: Kafka/wodka s) ate (l %at@ //satelliet and compounds C) a (rina %a //unstressed short a in carina tarina etc. &b) a (_ %a // short final a: mamba and compounds/marimba/hamba @@ -67,6 +68,7 @@ Cel) ary ar'eI // move default stress: bedelary/bottelary/dobbelary/huigelary/smokkelary... @@@smokkel) ary %ar%eI // default stress: diamant-/drank-/dwelm-/goud-/kokaïensmokkelary, etc. amarula %am%arul%a // fix stress and a sounds: amarula and compounds + a (ment %a // shorten a sound: perkament/testament and compounds argen (tA %arx2@n // move default stress: Argentinië/Argentyns/-e a (riA 'A: // akwarium/barium/estuarium/herbarium/seminaria a (ristokr %a // shorten 1st a: aristokrasie/-kraat/-krate/-kraties @@ -114,7 +116,8 @@ @C) a (tiewe %a // fix a sound: konserwatiewe/putatiewe and many similar _arC) ad (A 'A:d // Arcadia/arkadia/arkade/armada ai aI - adres %adrEs // fix last e sound of adres as last part of compounds + adre (K %adrE // fix last e sound of adres as last part of compounds + adrena (li %adr@n%a // fix stress and vowel sounds: adrenalien and compounds al (baster %al // move default stress: albaster and compounds al (bino %al // move default stress: albino alche (mis %alx2%e@ // move default stress: alchemis and derivatives @@ -482,7 +485,7 @@ bibli (oC b@bl%i:% // biblioteek and compounds/biblioteke/bibliofiel/bibliografie... bidd bId // biddag/aanbidding - bid bIt_ // biduur/aanbid + _) bid bIt_ // biduur _) bi (ga b%i // bigamie/-s/-e bikini b@kini // move default stress: bikini and compounds bil (j b@l // move default stress: biljet/-te/biljart/biljoen and compounds @@ -572,6 +575,9 @@ be (dr@ b@ // bedremmeld/bedrewe/bedrywig, etc. bed (t bE // fix e and d sounds: bedtafeltjie/bedtyd bedw (@ b@dw // bedwing and similar + bed (warm bEt // fix e, d and w sounds: bedwarmer/-s and compounds + bedw (ieg bEtv // fix e, d and w sounds: bedwieg/-ie/-s + bed (woord bEt // fix e, d and w sounds: sterfbedwoord/-e and similar @) bed (_ bEt // bruidsbed/dubbelbed; many compounds ending in bed be (de_ be@ // bede/gebede bedes (_ be@d@s // bedes/seënbedes, etc. @@ -693,6 +699,7 @@ _) de (klass de@ // deklassifikasie/gedeklassifiseer de (klinA d%E // fix 1st e sound: deklinasie/deklineer/-nering and compounds de (krimina d%e@ // fix e sound: (ge)dekriminaliseer/dekriminalisering, etc. + de (laan d@ // fix e sound: tweede-/derde-/vierdelaan... kun) dele (K d@lE // fix e sounds: Aardryks-/wiskundeles/-se, etc. onder) dele (@ de@l@_ // fix e sound: onderdelebedryf/-pakhuis, etc. voor) dele (@ de@l@_ // fix e sound: voordelefonds and similar @@ -756,6 +763,7 @@ deur (weeC d%y@r // move default stress: deurweef/deurweek/-te deur (winter d%y@r // move default stress: deurwinter/-de dewe (tK d@vE // fix stress and vowel sounds: Groepsgebiedewet/Dewetsdorp/-hof + dge (_ _^_EN // words ending in -dge are English: Cambridge/Hambidge... dia (C d%i%a // diabeet/diafragma/diagnose/dialek/dialoog/diamant diaken d%iA:k@n // diaken and compounds diako (nie d%i%ak%u // fix stress and o sound: diakonie/-ë @@ -1127,6 +1135,7 @@ eedjie e@ici // kleedjie/tafelkleedjie/altaarkleedjie eeu iu: eeue iu:@ // fix e sound: leeueaandeel/eeuelang/eeueoud/skreeuerig + ee (uu e@_ // split ee/uu, eu not diphthong: tweeuur and compounds ei eI ey eI eu Y@ @@ -1135,6 +1144,7 @@ eufo (rie_N %Y@f%o@ // stress to end: euforie C) e (uit @_ // fix e and ui sounds: akteuitmaker/druiweuitvoer/woedeuitbarsting and many similar euntjie Y@iNci // seuntjie/reuntjie + &C) e (uu @_ // split e/uu, eu not diphthong: seweuur and similar eë e@ // e deelteken-e &) e (_ @ m) e (nis @ // geheimenis(vol)/verdoemenis @@ -1648,6 +1658,7 @@ geër (_ x2e@@r // oorgeër/pasaangeër gees (drift x2%e@s // move default stress: geesdriftig and derivatives @) gegee =x2@x2e@ + gegewens x2@x2e@v@ns // fix e sounds in many compounds: agtergrond-/fossielgegewens/-versameling gei (+ x2eI // geil and derivatives/geiser/geit/-e ge (kskeer x2& // gekskeer/gekskeerder/gekskeerdery geld x2< @@ -1979,7 +1990,7 @@ narC) i (ssus 'I // move default stress: Nar(c/s)issus pub) is (_ @s // restore defaultstress: pubis, excep. to: AC) is (_ en) is (K @s // stress: beduidenis/bekentenis/gevangenis, etc. - kris) is @s // fix stress: krisis and compounds + kris) i (K @ // fix stress: krisis and compounds/krisisse pol) is (_ @s // polis and compounds @ar) is (K =@s // but sekretaris/argivaris/kommissaris/inventarislys/sekretarisvoël/plagiaris litar) is (+ 'Is // but militaris @@ -2057,6 +2068,7 @@ jonge jON@ // jongeling/jongeres jong (etjie jON // fix e sound: jongetjie/-s _) jorda (niA j%OrdA: // move default stress: Jordanië/Jordaniese + joule dZu:l // (kilo)joules junie juni julie juli ju (rid j%u // fix stress and u sound: juridies/-e @@ -2529,6 +2541,7 @@ mane (wale m%an@ // fix stress and shorten a sound: manewale/-s and compounds _) mango maNg%u // fix g and o sounds: mangoboord/-sap/-'s man (haft m%an // move default stress: manhaftig/-e/-heid + mani (ak m%A:n%i // fix stress and 1st a sound: maniak/-ke and compounds manier m@ni:r //manier and compounds manifes manifEs // fix vowel sounds: manifes and compounds/manifestasie/manifesteer manipu m%an%ip%y // fix stress and a sound: manipuleer/manipulering/manipulasie @@ -2568,6 +2581,7 @@ CA) mme (C m@ CA) mme (tjie mi // lemmetjie/stemmetjie and similar + miaau m%iaU: // miaau/-end/-e middagete m'Idax2_e@t@ // middagete/s midde (l mId@ // middellyf/middelpunt/middelste/bemiddelend middel (jari m@d@l // move default stress: middeljarig and derivatives @@ -3309,6 +3323,7 @@ pape (gaai p%ap@ //papegaai and compounds: stress, a and e sounds pa (niek p%a // paniek/paniekerig pantser pants@r // fix e sound in compounds starting with pantser + pap (broekAC p%a // move default stress: papbroekig/papbroekerig/-e/-heid pa (pier p%a // papier and compounds pa (pirus p%a // move default stress: papirus and compounds pappe (ry p%ap@ // move default stress: pappery/-e and compounds @@ -3980,6 +3995,7 @@ spesialis spESal'Is spesi (f sp%Es%I // spesifiek/spesifiseer stede (C ste@d@ // fix e sounds of many compounds and derivatives containing stede + ste (laan st@ // fix e sound: eerste-/ag(t)stelaan %Cel) ste (r st& // fix e sound: dubbelster/-re Cet) ste (rK st& // fix e sound: ballet-/kabaret-/krieketster/-re dwaal) ste (r st& // fix e sound: dwaalster/-re @@ -4289,6 +4305,7 @@ @) tele (gra t&l@ // fix e sound in compounds: riem-/spoedtelegram/veldtelegraaf, etc. teleks t&lEks // fix stress and vowel sounds: teleks and compounds _) teler te@l@r // fix stress and vowel sounds: teler/-s/-y/-svereniging, etc. + @) ten (bach t@n // fix e sound: Breytenbach/Rautenbach ten (der tEn // fix e sound in compounds: regeringstenders and similar @) ten (derwyK t@n // fix e sound: spottenderwys/-e/uitsluitenderwys/-e/verkortenderwys/-e @C) te (nk t& ++ //tenk and friends @@ -4899,6 +4916,7 @@ .group y y eI + %C) y (_ _^_EN // English: Betty/Eddy/Harry/Molly/Penny/Tommy york j'O:k //new-yorkse and may be others ysterre (lin eIst@re@ // fix e sound: ysterreling/-s @@ -4994,7 +5012,6 @@ ! _:eItrup_: !) ! $ dOl@r - __) - (_D minWs A_) - (_D _ C_) - (_D _ diff --git a/dictsource/dict_phonemes b/dictsource/dict_phonemes index cae65b4b..1245f8fc 100644 --- a/dictsource/dict_phonemes +++ b/dictsource/dict_phonemes @@ -145,27 +145,27 @@ T tS v v# w x z Dictionary fi_dict -& &i &y @- a a2 ai au -e ei eu ey i I ie iu -iy o oi ou u ui uo Y -y Yi yi Yy yY +& &i &y a a2 ai au e +ei eu ey i I ie iu iy +o oi ou u ui uo Y y +Yi yi Yy yY -* : b d f g h j -k l m n N p r s -S s2 t v Z +: b d f g h j k +l m n N p r s S +s2 t v w Z Dictionary fr_dict -@ @- @2 @3 a a2 A~ e -E E2 E~ i i: o O o2 -O2 O~ u u: W W2 w^i wA -W~ y Y +@ @- @2 a A~ e E E~ +i I i- i: o O o2 O2 +O~ u u: W W2 w^i wA W~ +y Y : b d dZ f g h j k l m n N n2 n^ p -p2 r R r2 s S t t2 -t3 tS v w z Z z2 z3 +p2 r r2 s S t t2 t3 +tS v w z Z z2 z3 Dictionary grc_dict @@ -462,6 +462,18 @@ t; ts ts; tS; v x z Z z; Z; +Dictionary da_dict + +& 0 3 @ @- a A e +E i o O u V W y +Y + +* : ; b d D f g +h j k l m n N p +r R R3 s S; t tS; v +w + + Dictionary sk_dict & @- a a: e e: i i: @@ -567,3 +579,14 @@ oi ong ou u ui yu b c d f g h j k l m n N p r s t tS v w z + + +Dictionary pap_dict + +a a/ aI e E eI i o +O u y Y + +: ? b d dZ f g h +j k l m n N n^ p +R s S t tS v w x +z Z diff --git a/dictsource/en_list b/dictsource/en_list index e7b33223..8f3383f5 100644 --- a/dictsource/en_list +++ b/dictsource/en_list @@ -535,6 +535,7 @@ anemometer anIm'0mI2t3 anemone a2nEn@mI anew a2nju: ?3 anew a2nu: +anime anImeI anion aneI@n anniversary anIv'3:s@rI anon a2n0n @@ -573,6 +574,7 @@ approximate a2pr0ksIm@t $only approximate a2pr0ksImeIt $verb arab ar@b arabic $1 +arable ara2b@L arcade $2 arch A@tS arches A@tSI2z @@ -759,6 +761,7 @@ charade Sa2rA:d charismatic karIsm'atIk charit tSarIt // charitable chic Si:k +chimpanzee $3 chisel tSIz@L chocolate tS0kl@t cholera k0l@r@ @@ -843,6 +846,7 @@ contrary k0ntr@rI contrast k0ntr'ast $verb contrite k0ntr'aIt conven k0nv'i:n // convened +convent k0nv@nt converse $1 $only converse $verb convict $1 $onlys @@ -929,6 +933,7 @@ detente deIt'0nt détente deIt'0nt detritus dI2traIt@s deus deIUs +devotee dEvoUt'i: di d,I diabetes daI@b'i:ti:z diameter daI'amI2t3 @@ -972,6 +977,7 @@ drier draI3 driest draI|@st duet dju:'Et dugout dVgaUt +dungaree dVNga2r'i: duvet du:veI d'ye dj@ @@ -1007,6 +1013,7 @@ entente 0nt'0nt entourage 0ntu:rA:Z entrance $1 $onlys entrance Entr'aans $verb +entree 0ntreI envelope Env@loUp $only envelopes Env@loUps envelope $verb @@ -1037,6 +1044,7 @@ everything EvrI2TIN evildoers i:v@Ldu:3z ewe ju: evening i:vnI2N +every Iv3:t evit EvI2t // inevitable exalt Egz'0lt execute EksI2kju:t // not $2 @@ -1113,6 +1121,7 @@ fortunate fO@tS@n@t fortune fO@tSu:n foyer fOIeI freelance fri:laans +fricassee frIka2seI frigate frIg@t fringer frIndZ3 // infringer fringing frIndZIN @@ -1181,11 +1190,13 @@ hatred heItrI2d hazardous haz3d@s hehe hi:h'i: heifer hEf@ +heist haIst helium hi:li@m helix hi:lIks hello h@loU henceforth hEnsfo@T hercules h3:kjUli:z +heretical hI2rEtI2k@L hereto hi@3'tu: hermaphrodite $2 hermes h3:mi:z @@ -1288,6 +1299,7 @@ interrogatory $3 inventory Inv@ntrI interface $1 intermin Int'3:mIn // interminable +internee Int'3:ni: internet Int3nEt interrupt $1 $onlys interrupt $3 $verb @@ -1380,6 +1392,7 @@ losing lu:zI2N // misspell lukewarm lu:kwO@m lullaby lVl@baI lunatic lu:n@tIk +lychee li:tSi: macabre m@kA:br@ machete ma2SEtI @@ -1501,6 +1514,7 @@ necklace nEkl@s necktie nEktaI negate nI2geIt neglect nI2glEkt +negligee nEglIZeI neon ni:0n nepenthe nI2pEnTI nescience nEsI@ns @@ -1600,6 +1614,7 @@ parabola p@rab@l@ paralysis p@ral@sIs parameter p@ramI2t3 parasite par@saIt +paren pa2rEn // "parenthesis" pariah p@raI@ parole pa2r'oUl passenger pasI2ndZ3 @@ -1674,6 +1689,7 @@ predicate prEdI2keIt preface prEf@s preferably prEf@-r@blI $verbf prelude prElju:d +premier prEmI3 preparation prEp@r'eIS@n prescience pri:si@ns present prEz@nt $only @@ -1948,6 +1964,7 @@ slavish sleIvIS snooker snu:k3 society s@saI@tI sofa soUf@ +soiree swA:reI soldier soUldZ3 solemn s0l@m solicit s@lIsI2t // solicited,ing @@ -2071,6 +2088,7 @@ tonight t@naIt tonne tVn tornado tO@n'eIdoU touche tu:SeI $only +toupee tu:peI transcript $1 $onlys transfer $1 $onlys transfer $verb @@ -2155,6 +2173,7 @@ veg vEdZ vegetable vEdZI2t@b@L vehicle vi@k@L vegan vi:g@n +veggy vEdZI vengeance vEndZ@ns venus vi:n@s versus v3:sI2z @@ -2630,6 +2649,7 @@ Zoe zoUI Andromeda andr'0mId@ Buchanan bju:k'an@n Campbell kamb@l +Cthulhu k@-Tu:Lu: Chrysler kraIzl3 Disney dIznI Patel pa2tEl diff --git a/dictsource/en_rules b/dictsource/en_rules index ef9b7e66..1c73ad87 100644 --- a/dictsource/en_rules +++ b/dictsource/en_rules @@ -870,6 +870,7 @@ ar (ia_ 'e@ @) arily (_ 'Er@l%I ch) ar (it ar + ph) ar (i ar m) ar (i @r m) ar (ig ar m) ar (inaC ar @@ -1667,7 +1668,6 @@ ee (m 'i: eer 'i@3 t) ee (n_ 'i: - ees (_ i:z ch) eese i:z d) e (fault i: e (ffec %I @@ -2182,7 +2182,7 @@ h) ere (f ErI2 h) ere (di I2rE h) ere (s Er@ - h) ere (t I2rE + h) ere (t Er@ @) er (ence_ r er (ent_ r adh) er (e 'i@3 @@ -2341,9 +2341,10 @@ st) ev (e i:v ever (_ Ev3 ever (c ,Ev3 - ever (g Ev3 + _) ever Ev3 ever (l ,Ev3 ever (m ,Ev3 + _) ever (s I2v3: f) ever (+ i:v3 ?!3 _l) ever i:v3 cl) ever Ev3 @@ -2480,7 +2481,7 @@ K) hl L &) hold (_S4 hoUld holme hoUm - _) homeo hoUmi:oU + _) home (o hoUmi: _) homo (s h,oUmoU _) homoeo hoUmi:oU &) hood (_S4 hUd @@ -2495,6 +2496,7 @@ house (_S5 haUs houses (_S6 haUzI2z _) hypo (@P4 h,aIpoU + _) hypo (cr hIp0 hypo (de h,aIp@ hypo (thet h,aIp@ @@ -3498,6 +3500,7 @@ _v) o (cA oU &%C) ock (_ @k l) o (com ,oU + ocrates (_ '0kra2ti:z o (cre_ 'oU cr) o (cu oU _h) o (cu oU @@ -4922,6 +4925,7 @@ un (ani %ju:n _) under (@P5 ,Vnd3 // prefix _) un (deP2 ,Vn + _) un (dula Vn _) un (enP2 ,Vn _) un (exP2 ,Vn _) un (ic ju:n @@ -5130,8 +5134,7 @@ &) ysis (_ =@sIs yte (_ aIt you' %ju: - yu ju: - yu (C% jV + yu (@ ju: yeo (C joU y (er_ aI C) yes (_ aIz @@ -5202,7 +5205,7 @@ nak) E (d I Ee (d i: EE (_ i: - Ee (_ 'i: + Ee (_ i: Eer (_ 'i@3 Ei (n_ i: Ei (_ aI diff --git a/dictsource/fi_list b/dictsource/fi_list index c19385ad..7a55c65e 100755 --- a/dictsource/fi_list +++ b/dictsource/fi_list @@ -64,16 +64,16 @@ _] lop:uhaka2 _{ alkua:lto _} lop:ua:lto _< p'ienempIk'uin -_> s'u:*empIk'uin +_> s'u:rempIk'uin _- vi:va2 __ ala2vi:va2 + plus $max3 * asteriski $max3 = 'yht&k'uin $max3 -% p@-*osent:I $max3 +% prosent:I $max3 / kaut:a2 \ keno -€ eu*o +€ euro £ punta2 ¤ valu:t:a2 & _et @@ -81,11 +81,11 @@ __ ala2vi:va2 ~ tilde _acu 'aku:t:I -_brv b@-*'eve +_brv br'eve _ced s'edIljI _cir s'irkumfl,eksI _dia 'umlaut -_grv g@-*'avIs +_grv gr'avIs _tld tilde // numbers @@ -119,7 +119,7 @@ _8X k'ahdeksank,ymment& _9X 'yhdeks&mk,ymment& _0C s'ata:_ _1C s'ata -_0M1 t'uhata: +_0M1 t'uhat:a _1M1 t'uhat // no '1' before thousand _0M2 m'iljo:na: _1M2 m'iljo:na diff --git a/dictsource/fi_rules b/dictsource/fi_rules index 4f494bcb..f0cb68ff 100755 --- a/dictsource/fi_rules +++ b/dictsource/fi_rules @@ -32,7 +32,8 @@ c (i s c (e s // Pronounce c as s. Mostly foreign words such as celcius, center, cervantes, cezanne. cc k: // Utter cc as k. This includes rebecca, accord, puccini etc. - + + K) ch (r k city siti // Pronounce foreign word city as siti. Include all inflections and compound words. // eg. city, citystä, intercity. @@ -150,15 +151,13 @@ .group r r r - A) r (A * - C) r (A @-* - rr *r .group s s s ss ss2 // [s2] is a continuation for [s] K) sh S + K) sch S // Schmitt @) sti (_ sti_X1 // double the initial consonant of the next word @@ -173,7 +172,7 @@ .group u u u uu u: - ui ui + ui wi uo uo diff --git a/dictsource/fr_list b/dictsource/fr_list index 859307fa..c70f0b7a 100755 --- a/dictsource/fr_list +++ b/dictsource/fr_list @@ -24,7 +24,7 @@ // 2006-11-18 Gilles Casse // -// Updated 2009-04-04 Michel Such +// Updated 2009-05-14 Michel Such // // * Numbers, a few abbreviations and exceptions. // @@ -87,7 +87,7 @@ _ac2 dublaksA~tEg'y _brv br'Ev _ced sed'ij _cir aksA~sirkO~fl'Eks -_dia tRem'a +_dia trem'a _dot pwE~syskr'i _grv aksA~gr'av _hac kar'O~ @@ -102,14 +102,15 @@ _tld t'ild _cap maZysk'yl _?A l'Etr _?? sE~b'Oll -_#9 tabylasjO~ +_#9 tabylasiO~ _#32 Espas _" gijmE _# djEz -_' a2postr'Of -_( 'uvR@-parA~t'Ez +_' apostr'Of + +_( 'uvr@-parA~t'Ez _) f'Erm parA~t'Ez _, virgyl _- tirE @@ -117,39 +118,39 @@ _. _|pw%E~ _/ bar||oblik _: d'Y||pw'E~ _; pwE~||virg'yl -_< E~ferjWr +_< E~feri-Wr _= egal -_> syperjWr +_> syperi-Wr _? pwE~||dE~terogasj'O~ _! pwE~||dEksklamasj'O~ _[ uvr@-_kroSE _\ b'aksl'aS -_] f'E2rm_kroS'E +_] f'Erm_kroS'E _^ sirkOnflEks __ sulin^e _` aks'A~_gr'av _{ uvr_akOlad _| bar_vErtik'al -_} f'E2rm_akOl'ad +_} f'Erm_akOl'ad ² pw^is'A~s||d'Y _« uvre||gijm'E _» fErme||gijm'E -_’ a2postr'Of -_‘ a2postr'Of -_µ mikR'o +_’ apostr'Of +_‘ apostr'Of +_µ mikr'o _§ sEksj'O~ // symbols that are normally spoken when reading text @ _!arobaz % pursA~ $max3 & e $u $brk -_& _e_komErsj'al +_& _e_komErsi'al * asterisk: $max3 + plys $max3 ~ tilde € @ro ¢ sEnt -¥ jEn +¥ iEn £ livr ± pl'yz_'u_mw'E~ × myltipli:'e_p'ar @@ -163,10 +164,10 @@ _& _e_komErsj'al // numeric -_0 zero +_0 zero $u+ _1 W~ _2 dYz2 -_3 tRwAz2 +_3 trwAz2 _4 katr _5 sE~k _6 siz3 @@ -176,7 +177,7 @@ _9 nWf _10 diz3 _11 _!O~z _12 duz -_13 tREz +_13 trEz _14 katOrz _15 kE~z _16 sEz @@ -186,15 +187,15 @@ _19 diznWf _20 vE~ _21 vE~te:W~ _22 vE~tdYz2 -_23 vE~t:tRwAz2 +_23 vE~t:trwAz2 _24 vE~tkatr _25 vE~tsE~k _26 vE~tsiz3 _27 vE~tsEt _28 vE~tw^it3 _29 vE~tnWf -_3X tRA~t -_31 tRA~te:W~ +_3X trA~t +_31 trA~te:W~ _4X karA~t _41 karA~te:W~ _5X sE~kA~t @@ -202,8 +203,8 @@ _51 sE~kA~te:W~ _6X swAsA~t: _61 swAsA~te:W~ _71 swAsA~te:O~z -_8X katR@vE~: -_80 katR@vE~z2 +_8X katr@vE~: +_80 katr@vE~z2 _0C sA~ _1C0 sA~t2 _0M1 mil @@ -216,78 +217,95 @@ _dpt virgyl //some numbers have special pronunciation in Belgium and Switzerland ?2 _7X sEptA~t ?2 _71 sEptA~te:W~ -?2 _9X no2nA~t -?2 _91 no2nA~te:W~ +?2 _9X nonA~t +?2 _91 nonA~te:W~ -(21 ème) vE~te:yniEm -(31 ème) tRA~te:yniEm -(41 ème) karA~te:yniEm -(51 ème) sE~kA~te:yniEm -(61 ème) swAsA~te:yniEm -(81 ème) katR@vE~:yniEm +(21 ème) vE~te:yni-Em +(31 ème) trA~te:yni-Em +(41 ème) karA~te:yni-Em +(51 ème) sE~kA~te:yni-Em +(61 ème) swAsA~te:yni-Em +(81 ème) katr@vE~:yni-Em // ABBREVIATIONS //************** -(http ://) aSt,et,ep'e abc $abbrev ac $abbrev -adsl $abbrev +adn adeEn +adsl adeEsEl alt _::alt -amd $abbrev -anpe $abbrev +amd aEmde +anpe aEnpe@ +aol aoEl api $abbrev +avg $abbrev avh aveaS bd boulevard $text brltty $abbrev cci $abbrev +cia $abbrev cio $abbrev -ctrl _::kO~tRol +cpu $abbrev +ctrl _::kO~tro2l dept depart@-mA~ -edf $abbrev -etc etsetera -ghz ZigaE2rts +divx diviks +edf @deEf +etc Etsetera +ghz ZigaErts hmm h@m -hz _!E2rts -ibm $abbrev +(http ://) aSt,et,ep'e_ +hz _!Erts +ibm ibeEm ide $abbrev -ip $abbrev -jaws dZ'awz +ip ipe +irc i:_!Er:se +jaws _^_en kbit kilobit -kbits kilobit kde $abbrev kg kilogram -khz kiloE2rts +khz kiloErts km kilomètre $text kw kilowat -kw kilowat -m. m@sjY -mbit mega2bit -mbits mega2bit +m. m@siY +mbit megabit mbrola Embrola -mhz megaE2rts +mci $abbrev +mhz megaErts mlle mademoiselle $text mme madame $text -mr m@sjY +(mp 3) _!Empetrwa +mr m@siY nsi $abbrev nsis $abbrev nti $abbrev nvda $abbrev -ong $abbrev +ocr oseEr +oem $abbrev +ogm oZeEm +ong oEnZe pci $abbrev pda $abbrev p.s postskriptOm ratp $abbrev +riscos rIskoEs +sap $abbrev scsi $abbrev -s.t.p s'il:t'@:pl'E -s.v.p s'il:v'u:pl'E +s.t.p silt@:pl'E +s.v.p silvu:pl'E st s'E~t2 ste s'E~t -stp s'il:t'@:pl'E -svp s'il:v'u:pl'E -url $abbrev -usb $abbrev +stp silt@:pl'E +svp silvu:pl'E +tva $abbrev +uk $abbrev +ups ypeEs +url y:ErEl +usb y:Esbe +utc $abbrev utf $abbrev +u.s y:Es +vip v,i||,aj||p'i wma $abbrev xfce iksEfse@ xy $abbrev @@ -302,11 +320,11 @@ pr professeur $text *dot $capital // articles le $nounf $u+ -le $verbextend $u +le $verb $verbextend $u la $nounf $u+ -la $verbextend $u -les lez2 $nounf $u= -les lez2 $verbextend $u +la $verb $verbextend $u +les lez2 $nounf $u+ +les lez2 $verb $verbextend $u un $nounf $u+ une $nounf $u+ @@ -315,7 +333,7 @@ une $nounf $u+ mais $u+ ou $u $brk eh $u $brk -et $u $brk +et e $u $brk ni $u $brk car $u $brk car $noun @@ -340,8 +358,8 @@ que $u+ (parce que) parsk@ $u+ (parce qu'il) parskil $u+ (parce qu'ils) parskilz2 $u+ -(parce qu'elle) parskE2l $u+ -(parce qu'elles) parskE2lz2 $u+ +(parce qu'elle) parskEl $u+ +(parce qu'elles) parskElz2 $u+ (parce qu'on) parskO~n2 $u+ tant tA~t2 $u+ qui $verbf $u+ @@ -421,7 +439,7 @@ aux $u autour otur $u+ autre $u+ autres $u+ -dans $u+ +dans dA~z2 $u+ vers vEr $u+ vers $noun en $u+ @@ -442,15 +460,17 @@ plusieurs $u+ durant $u+ avec $u+ sans $u+ -trop $u+ +trop trop2 $u+ assez $u+ -beaucoup $u+ +beaucoup bokup2 $u+ peu $u+ -très $u +très $u+ +près $u+ +loin $u+ // negative ne $u $verbf -pas p'a2z2 +pas p'az2 $u+ pas pa $noun plus $u+ guère $u+ @@ -517,6 +537,9 @@ d'est d'Est // some common adjectives and adverbs +quel $u+ +quelle $u+ +quelles $u+ quelque $u+ quelques $u+ tel $u+ @@ -526,7 +549,7 @@ tout t'ut2 $u+ toute t'ut $u+ toutes t'utz2 $u+ tous $u+ -rien ri'E~n2 $u+ +rien ri-'E~n2 $u+ // Letters which can be words //=========================== @@ -570,29 +593,35 @@ montréal mO~real (n'est ce pas) n'Es@-||p'az2 (qu'est ce que) kEsk@ $u absent absA~ +adam adA~ +adams adams admin admin -adsltv $abbrev -airbus E2rbys +adsltv adeEs'El||tev'e +airbus Erbys +alan alan auvent ovA~ -bien bjE~n2 $u+ +bien bi-E~n2 $u+ bis bis bissus bisys bus bys bus by $verb -campus kA~pys cancer kA~sEr +canyon kanjO2n (chef d'oeuvre) chédeuvre $text (chef d'oeuvres) chédeuvres $text choeur kWr cocus koky couscous kuskus -dernier dE2rnjer2 +dernier dErnjer2 éloquent ElokA~t2 -fan f'an +enfer A~fEr faut fot2 $u+ -fier fier $verb +fier fjer $verb +free fri: fuel fjul gars ga +gin dZin +gulf gWlf gym Zim hélas elas $u+ iris iris @@ -601,22 +630,26 @@ malus malys mailto mEjltu_ mapper _^_en mars mars -mieux mjY $u+ +merguez mErgEz +mieux mi-Y $u+ mrs _^_en ours urs -parangon parA~gO~ +pataquès patakEs phallus falys polder pOldEr premier pr@mjer2 program _^_en +(program files) program||fajlz quit _^_en recorder ricordeur $text -scanner skaner2 +scanner skaner2 $verb scanner skanWr $noun +scanners skanWr sir _^_EN souris suri sus sys sus sy $verb +to _^_en tuttiquanti tutikw'anti vaut $u+ vaux $u+ @@ -645,7 +678,7 @@ rut ryt scorbut skOrbyt scout skut stout staut -uppercut ypE2rkyt +uppercut ypErkyt ut yt zut zyt @@ -662,13 +695,13 @@ margaret margarEt net nEt offset OfsEt set sEt -soviet sOvjEt +soviet sOviEt // urt (t is said) kurt kurt -yaourt jaurt -yoghourt yogurt -yogourt yogurt +yaourt iaurt +yoghourt iogurt +yogourt iogurt // ort (t said) short SOrt @@ -681,7 +714,6 @@ kart kart smart smart // irt -flirt flWrt (sweat shirt) swEtSWrt (tee shirt) tiSWrt @@ -705,9 +737,9 @@ emacspeak Emakspi:k end _^_en epson EpsOn espeak @spi:k -ethernet etE2rnEt +ethernet etErnEt exit egzit -(file zilla) fa2jl||zija +(file zilla) fajl||zija from frO2m $u+ get _^_en google gu:gWl @@ -718,7 +750,7 @@ help _^_en hot _^_en in _^_en inside _^_en -(internet explorer) E~tErn'Et||Eksplo2r'Wr +(internet explorer) E~tErn'Et||Eksplor'Wr klaxon klaksOn let _^_en lite _^_en @@ -728,11 +760,13 @@ logon _^_en made _^_en media medja messenger mesEnZWr -my _^_en +my maj +nat nat not _^_en null _^_en -ok o2ke -open o2p'Wn +ok oke +open op'Wn +(open source) op,Wn||s'urs outlook autlu:k paint _^_en paper _^_en @@ -752,7 +786,7 @@ yes _^_en constations kO~statjO~z2 contentions kO~tA~tjO~z2 dations datjO~z2 -désertions dezE2rtjO~z2 $verb +désertions dezErtjO~z2 $verb exploitions EksplwAtjO~z2 heurtions hWrtjO~z2 partions partjO~z2 @@ -775,7 +809,7 @@ bélarus belarys (burkina faso) burkina||faso burundi burundi croatie kroasi -groenland gRoEnlA~d +groenland groEnlA~d guatemala gwAtemala honduras _!O~dyras kenya kenja @@ -798,6 +832,3 @@ wallis wAlis futuna futuna zimbabwe zimbabwe - - - diff --git a/dictsource/fr_rules b/dictsource/fr_rules index c42502a4..b479af20 100755 --- a/dictsource/fr_rules +++ b/dictsource/fr_rules @@ -23,7 +23,7 @@ // 2006-11-18 Gilles Casse // -// Updated: 2009-04-01 Michel Such +// Updated: 2009-05-14 Michel Such // // Letter classes: @@ -35,6 +35,7 @@ .L01 d e l n r t u .L02 b c d f g h k p t v .L03 d l m n s t v +.L04 c d f g l m n v .group a @@ -63,6 +64,9 @@ _) am (n am // amnistie am (n a // condamner + _L04) an (_ an + _h) an (_ an + _) anti (@@P4 A~ti _) arché (@P5 arke // archéologue _) archéo (@P6 arkeo // archéologue _) arch (aP4 ark // archange @@ -131,7 +135,9 @@ or) ch (esC k // orchestre or) ch (iC k // orchidée _) ch (ao k // chaos, chaotique - _) ch (or k // chorale + _) ch (orA k // chorale + _) ch (oriz S + _) ch (oro S te) ch (_ k ch (r k // chrétien _) chrono (@P6 kro2no @@ -150,7 +156,7 @@ ban) c (_ // banc blan) c (_ // blan Con) c (_ // tronc, jonc - _don) c (_ k // tronc, jonc + _don) c (_ k // donc cler) c (_ // leclerc tchou) c (_ taba) c (_ @@ -158,12 +164,12 @@ se) c (ond g // seconde secondaire c k // recoin donc - s) cien (t jA~ // conscient scientifique cient (_ sit2 // ils appr�ient, remercient. effi) cien (t sjA~ // coefficient défi) cien (t sjA~ // déficient cast (_S4 kast // podcast casts (_S5 kast // podcasts + _) clown klun // group c: English section n) ch (_ _^_en // french @@ -193,6 +199,7 @@ _) ç' (P2v s lor) d (_ d au) d (_ oi) d (_ + ou) d (_ dt (_ t // Schmidt _ni) d (_ // nid @@ -214,26 +221,24 @@ _) ç' (P2v s // Define use of the final 'e' in french e (_ - rch) e (_ =@3 - rch) e (s_ =@3 - elqu) e =@3 + elqu) e =@ uisqu) e =@ rsqu) e =@ _C) e (_ @2 // je te -c) e (_ @- -j) e (_ @- C) e (- @- - L02r) e (_ =@3 - L02r) e (s_ =@3 e (Ce_ E eau o // bateau cheveaux g) ea (s_ a // mangeas + gh) e (tAX e // spagheti j) e (a // Jean Jeanne p) ect (_ E // suspect ect (_ Ekt // direct pi) ed (_ e // pied _cl) ef (_ e // clef + _) ein (K En // peindre ein (K E~ // peindre CC) ein (_ E~n2 // plein emploi e (il E // vieille @@ -447,7 +452,8 @@ _) en (A A~n // enivrer -) est (_ Est // -est dg) et (_ Et // Bridget, gadget - Ack) et (_ Et + k) et (_ Et + tick) et (_ E m) et (_ Et2 eu Y // eu @@ -519,10 +525,13 @@ _) en (A A~n // enivrer e @ // menue _) e (CA e _) e (xA E + Cr) eam i:m Cr) eamer i:mWr Cl) eaner i:nWr vert) e (rX W eïn (_ 'Ein +_y) en (_ En +iew) er (X er2 // group e: English section @@ -549,7 +558,7 @@ _) en (A A~n // enivrer .group è - Z) ème iEm + Z) ème i-Em è E @@ -579,6 +588,7 @@ _) en (A A~n // enivrer gg g // agglomérer ai) gni n^ // craignions châtaignier gn n^ // agneau + gn (ie n // comagnie _quatrevin) gts (_ z2 vin) gt (_A t // liaison: vingt ans @@ -612,7 +622,6 @@ _) en (A A~n // enivrer // group g: English section _) game (X _^_en - @@) gate (X _^_en girl _^_en // girl gy (_ _^_en @@ -673,28 +682,30 @@ _) half _^_en .group i i i // cri - i (A i - i (o j - i (è j - i (eu j - _f) i (a i: - l) i (a i: + C) i (A i- + C) i (onK j + r) i (onK i- + C) i (erA i + l) i (A i + _) i (A i- +C) i (e_ i +C) i (es_ i Cr) i (a i: _Cr) i (A i: Cr) i (é i: Cr) i (er_ i: - rr) i (er_ j + rr) i (er_ i- C) ien (t_ i - dév) ien (t_ i - t) ien (K_ jE~ // tient - v) ien (K_ jE~ // vient - at) ien (t_ jA~ // patient - cip) ien (C jA~ // récipient + dév) ien (t_ i- + t) ien (K_ i-E~ // tient + v) ien (K_ i-E~ // vient + at) ien (t_ i-A~ // patient + cip) ien (C i-A~ // récipient cl) ien (C i:A~ // client - mol) ien (C jA~ // émolient - vén) ien (C jA~ // inconvénient - or) ien (t jA~ // orient, orienter - ot) ien (t_ jA~ // quotient + mol) ien (C i-A~ // émolient + vén) ien (C i-A~ // inconvénient + or) ien (t iA~ // orient, orienter + ot) ien (t_ i-A~ // quotient i (e_ i _) ill ill // illégal @@ -730,17 +741,21 @@ _) half _^_en _) intra (neP5 E~tra _) intra (uP5 E~tra C) is (_ i + fl) irt W2rt + otl) i (neX aj + onl) i (ne_ aj + offl) i (ne_ aj // group i: English section ibuter (X _^_en iev _^_en ife (_ _^_en igh _^_en - ind (_ _^_en // find, mind - _C) ind (er_ _^_en // finder, reminder - _AC) ind (er_ _^_en // finder, reminder + ind (X _^_en // find, mind + _C) ind (erX _^_en // finder + AC) ind (erX _^_en // reminder ize (X _^_en // realize - dr) i (ve _^_en + dr) i (veX _^_en ram_f) i (le _^_en @@ -773,7 +788,8 @@ _) half _^_en // group k: English section - ke (X _^_en // basket, make, take + ke (rX _^_en // basket, make, take + ke (nX _^_en // basket, make, take .group l l l // lit @@ -788,14 +804,16 @@ _) half _^_en // group l: English section less (_ _^_en // noiseless _) live _^_en + @) loud (_ _^_en + ll (X _^_en .group m m m // film mm m // pomme - _) m'(P2v m - _) mc (P2 mak - _) ms (P2 Em_!Es + _) m' (P2v m + _) mc (@P2 mak + _) ms (P2 EmEs master (_S6 mastWr // group m: English section @@ -821,19 +839,29 @@ _) half _^_en cr) oc (_ o // escroc o (ckK O2 o (CerA O2 + n) od (_ o // Pernod + _) o (ff O2 o (lC O2 + o (ll O + o (C% O + o (C%eCA O2 om (merA O2 + _) on (l O2n on (n O + ls) on (_ O2n + Cst) on (_ O2n on (nerA O2 o (rC O2 - o (rX O2 _) os (_ Os + _v) os (gY o2 o (sC O2 + o (ss O + o (sseCA O2 s_) os (_ o x_) os (_ o C) o (se_ o2 C) o (ses_ o2 - o (C%ement_ O2 + o (tC O2 o (Che@ O2 o (Cement_ O2 o (t_ o @@ -856,7 +884,8 @@ _) half _^_en o (eC o // coefficient _l) o (gi o2 _p) o (ten o2 - _L02r) o (L02 o2 + _L02r) o (L02C O + _L02r) o (t_ o _C) o (teri O2 _) oi (gnon o // oignons oin (C wE~ @@ -867,9 +896,11 @@ _) half _^_en oî wA // boîte om (C O~ // bombe om (m O // nommer - _) om (n O2m // omnibus + om (ni O2m // omnibus n) om (X O~ // nom om (_ Om // www.web.com + s) om (n O2m + on (K O~ // mon on (t_ O~t2 // mont vont sont _m) ont (pAC O~ // Montpellier @@ -889,10 +920,8 @@ _) half _^_en _sir) op (_ o // sirop - _tr) op (_ op2 // trop v) ost (_ o // Prévost _C) oup (_ u // coup, loup - uC) oup (_ up2 // beaucoup ou u // hibou brouillard @@ -900,10 +929,12 @@ _) half _^_en oû u // coûter oyes (_ wA // troyes oy (A wAj // noyer voyelles + _y) o (y o oy wA // roy o (_ o // zorro allégro o (z_ o // berlioz o O + _sC) ot O2t // group o: English section @@ -917,7 +948,6 @@ C) oing (_ _^_en // going ook _^_en // book, cook C) oot _^_en // bootable football _) one _^_en - _sC) ot _^_en oun (C _^_en // bounce, found _) over _^_en // over ow _^_en // cow, town, down @@ -931,7 +961,7 @@ C) oing (_ _^_en // going .group p p p // pas - _) para (CCP4 para + _) para (pCP4 para _) photo (@P5 fo2to _) poly (@P4 poli _) post (KP4 pO2st @@ -982,7 +1012,7 @@ C) oing (_ _^_en // going dé) qua kwA // adequate _) qua (rtz kwA // quartz qu k // quatre - _) que (_ k@ // que + _) que (_ k@2 // que n) q (_ k // cinq cent // group q: English section @@ -990,20 +1020,20 @@ C) oing (_ _^_en // going .group r -L02) r R - _su) rr rr // surréaliste + _su) rr rr // surréaliste cou) rr rr // courrai cou) rr (i r // courrier mou) rr rr // mourrai - rr r // erreur r r // rien + rr r _) radio (@P5 radio // group r: English section _) real _^_en rese _^_en rst (_ _^_en + _) rule _^_en .group s @@ -1023,7 +1053,6 @@ mou) rr rr // mourrai sch S // schéma dé) sh (A z // déshabiller sh S // shérif - CA) sh (_ _^_en // punish ss s // assez ai) s (em s // vraisemblable @@ -1036,13 +1065,14 @@ mou) rr rr // mourrai A) s (A z // baiser A) s (oft s // microsoft A) s (ol_ s // tournesol - _anti) s (A s // antisocial _) socio (@P5 sosio _) super (@@P5 sypEr _) super (_ sypEr _) supra (@P5 sypra batro) s (_ s océro) s (_ s + scien (t si-A~ // conscient scientifique + sql (_S3 EskyEl _u) s (_ s @@ -1050,6 +1080,7 @@ mou) rr rr // mourrai Abu) s (_ s _Abu) s (_ mbu) s (_ s + _cACpu) s (_ s Acu) s (_ s écu) s (_ asu) s (_ s @@ -1095,6 +1126,7 @@ _tou) s (_Cos_ _tou) s (_leurs_ // group s: English section + CA) sh (_ _^_en // punish sh (_ _^_en sh (Ap _^_en // shop, ship sh (At _^_en // shut, shot @@ -1230,9 +1262,9 @@ A) t (- t2 g) ueill Wj // orgueilleux g) ueil (_ Wj // orgueil - C) u (bX W // hub, club C) u (gX W // bug, mug + _n) u (rse W2 // nurse r) u (nX W // run, autorun um (_ Om // album f) um (_ W~ // parfum @@ -1242,10 +1274,7 @@ A) t (- t2 CC) un (_ W~ // brun uc) un (_ W~n2 // aucun un (_ W~n2 // un avion - _f) un @n // fun - _g) un @n // gun - _r) un @n // run - _s) un @n // sun, sunday + _h) un (_ W~ // hun fl) ux (_ y // flux, reflux g) u (A // fatigue @@ -1259,6 +1288,8 @@ A) t (- t2 ump (_ _^_en unch _^_en under _^_en // under, understand, thunder + _C) un (_ _^_en + _C) un (n _^_en _) up (C _^_en // upper, update up (_ _^_en // setup urn (X _^_en // burn, turn @@ -1275,8 +1306,10 @@ A) t (- t2 .group v v v vers (_ vErz2 + _) view (X vju + _) view (A vjuv -// goup v: English section +// group v: English section voice (X _^_en void (_ _^_en vy (_ _^_en @@ -1287,7 +1320,7 @@ A) t (- t2 w (agon v // wagon // group w: English section - A) w _^_en + e) w _^_en wa (Ce_ _^_en // hardware software wave _) wan _^_en wr _^_en // write @@ -1301,6 +1334,7 @@ A) t (- t2 .group x x ks _) x (A gz // xylophone + _) x (CP1 iks // xylophone xml (_S3 _!iksEmEl e) x (A gz // exagérer exemple L03e) x (A ks // annexe, vexer @@ -1331,9 +1365,9 @@ A) t (- t2 y i // cryogénique myope _) y (A j // yak, yacht _) yacht _^_en // yacht, yachtman - _) y (eu i // yeux + _) y (eu i- // yeux - _) yahoo (P5 ia'u + _) yahoo (P5 i-a'u ym (b E~ // symbolique ym (p E~ // tympan ym (_ E~ // thym @@ -1382,4 +1416,3 @@ A) t (- t2 - diff --git a/dictsource/zh_list b/dictsource/zh_list index 40f96926..cef90475 100644 --- a/dictsource/zh_list +++ b/dictsource/zh_list @@ -81,7 +81,7 @@ z zi51 ㄩ y55 $textmode -// Most frequent pronunciations of the 3799 most common characters (from Unihan database ftp://ftp.unicode.org/Public/UNIDATA/Unihan.zip, kHanyuPinlu field) +// Most frequent pronunciations of the 3799 most common characters (from Unihan database ftp://ftp.unicode.org/Public/UNIDATA/Unihan.zip, kHanyuPinlu field with some corrections) 涉 she4 礦 kuang4 河 he2 @@ -380,7 +380,7 @@ $textmode 业 ye4 譬 pi4 觀 guan1 -勒 lei1 +勒 le4 牽 qian1 缎 duan4 抛 pao1 @@ -1104,7 +1104,7 @@ $textmode 搭 da1 簽 qian1 乱 luan4 -長 zhang3 +長 chang2 逐 zhu2 苇 wei3 鲸 jing1 @@ -1308,7 +1308,7 @@ $textmode 盤 pan2 鞏 gong3 袱 fu5 -甸 dian1 +甸 dian4 妻 qi1 晚 wan3 繪 hui4 @@ -1663,7 +1663,7 @@ $textmode 各 ge4 箱 xiang1 蘸 zhan4 -李 li5 +李 li3 肌 ji1 催 cui1 取 qu3 @@ -3049,7 +3049,7 @@ $textmode 額 e2 論 lun4 照 zhao4 -长 zhang3 +长 chang2 猪 zhu1 纷 fen1 虜 lu3 @@ -3331,7 +3331,7 @@ $textmode 络 luo4 怎 zen3 細 xi4 -干 gan4 +干 gan1 腸 chang2 說 shuo1 丽 li4 @@ -3394,7 +3394,7 @@ $textmode 台 tai2 侍 shi4 領 ling3 -煞 sha1 +煞 sha4 奮 fen4 礙 ai4 盜 dao4 diff --git a/phsource/compile_report b/phsource/compile_report index 4b2f2542..b01f3d89 100644 --- a/phsource/compile_report +++ b/phsource/compile_report @@ -1,7 +1,7 @@ -59 phoneme tables +60 phoneme tables new total base 103 103 - base2 24 122 + base2 26 124 en 50 149 en_n 32 149 en_us 37 150 @@ -15,8 +15,8 @@ eo 13 115 jbo 4 116 fi 40 134 - fr 55 141 - fr_ca 11 141 + fr 53 140 + fr_ca 11 140 hi 60 149 ta 17 152 hu 23 119 @@ -29,16 +29,16 @@ mk 3 141 sr 14 140 ru 39 134 - it 17 125 + it 17 127 la 21 121 - es 9 123 - es_la 1 123 - ca 11 125 - pt 28 139 - pt_pt 20 139 + es 9 125 + es_la 1 125 + ca 11 127 + pt 28 140 + pt_pt 20 140 ro 36 146 - el 8 122 - grc 12 127 + el 8 124 + grc 12 128 sv 25 125 no 28 129 is 33 129 @@ -47,18 +47,19 @@ zh 66 154 sw 14 112 tr 18 127 - ku 18 127 - id 15 124 + ku 18 128 + id 15 126 sq 35 127 hy 24 119 - rw 15 129 + rw 15 131 ml 13 151 kn 15 151 bn 59 155 ne 18 157 - mr 1 149 + mr 12 149 om 25 125 - eu 6 124 + eu 6 125 + da 21 118 Data file Used by b/b [b] base @@ -432,25 +433,22 @@ l/l_3 [l/] de l/l_4 [ll] sq l/la [(a)] base [a] fr - [a2] fr l/l_a [(a)] base [a] fr - [a2] fr [wA] fr [A~] fr l/le [(e)] base [E] fr [e] fr - [E2] fr l/l_e [(e)] base [E] fr - [E2] fr l/L_eL_af [&] af [&:] af l/l_front [L] sq l/l_front_ [l/4] sq l/li [(i)] base [i] fr + [i-] fr [i:] fr [l] zh l/l_i [(i)] base @@ -580,20 +578,15 @@ r3/r_ [r/] base [r/] af [r/] ru r3/r_@ [(@)] base - [@2] fr r3/r#_ [r#] is r3/r_2 [r/2] fr r3/r_a [(a)] base r3/r_e [(e)] base r3/r_i [(i)] base - [i] fr - [w^i] fr r3/r_n [r/] base [r/2] fr [r/] ru r3/r_o [(o)] base - [O] fr - [O2] fr r3/r_ru [R4] ru r3/r_ru2 [R4] ru r3/r_sr [r.] bn @@ -614,20 +607,22 @@ r3/r_trill2.wav [R] base r3/r_trill3.wav [R3] base [r] af [r] nl +r3/r_trill_short [r] fi r3/r_trill.wav [R2] base + [r] fi [R2] lv [R] pl [r*] sr [x] pt r3/r_u [(u)] base r3/r_uvl [r"] base + [R2] da r3/r_uvl.wav [r"] base + [R2] da r3/rx [*] base [r/] base [r/] af - [R] fr [r] fr - [r2] fr [r/2] fr [R] fr_ca [r/] ru @@ -640,6 +635,7 @@ r3/rz_cs [R^] sk r3/@tap [**] base r3/@tap2 [**] base r3/@tap_rfx [r.] base +r/a_ [r] da r/r [r] base [r-] base [r] en_sc @@ -650,7 +646,6 @@ r/_r [r] base r/r_ [r] base [r] en_sc [r] de - [r] fi [r2] nl [r] ru [r] ro @@ -664,7 +659,6 @@ r/ro [(o)] base r/rr [r/] base [r/] af [r] de - [r] fi [r2] nl [r] ru [r/] ru @@ -677,7 +671,6 @@ r/tr [r] base r/trr [r/] base [r/] af [r] de - [r] fi [r2] nl [r] ru [r/] ru @@ -690,18 +683,8 @@ r/xr [(@)] base [(i)] base [(o)] base [(u)] base - [@] fr [Y] fr - [e] fr - [i] fr - [o] fr - [u] fr - [y] fr - [a2] fr - [o2] fr - [i:] fr - [u:] fr - [wA] fr + [a] fr [A~] fr ufric/ch [C] base [J^] base @@ -801,6 +784,7 @@ ufric/x_sr [h] sr [x] sr ufric/xx [X] base [Q"] base + [R] da ustop/c [c] base ustop/c_ejc [c`] om ustop/k [k] base @@ -860,7 +844,6 @@ ustop/kr [k] base [k] base2 [k] en [k] fi - [k] fr [kh] hi [k] hu [k] lv @@ -1165,6 +1148,7 @@ vdiph/aau_3 [aU] hi [aU] kn [aU] bn [aU] ne + [aU] mr vdiph/aau_4 [aU] vi vdiph/ae [E:] fr_ca [aI] la @@ -1191,6 +1175,7 @@ vdiph/ai_6 [aI] en_rp vdiph/ai_7 [aI] en_sc [aI2] en_sc [aI] is + [aI] mr vdiph/aoo [aU] en_us vdiph/au [aU] en [aU] af @@ -1302,7 +1287,6 @@ vdiph/@u_en [oU] en [@U] id vdiph/ui [uI] base2 [uI] eo - [ui] fi [ui] lv [uI] vi [ui] zhy @@ -1311,6 +1295,7 @@ vdiph/u-i [yI] vi vdiph/ui_2 [uI] af vdiph/ui_3 [uI] cy [uY] cy +vdiph/ui_4 [ui] fi vdiph/Vi [VI] ne vdiph/Vu [@U] af [VU] ne @@ -1332,8 +1317,8 @@ vdiph/y#y_3 [Y:] nl vnasal/aa_n [a~] hi [a~] bn vnasal/aa_n2 [A~] en - [A~] fr vnasal/aa_n3 [A~] af +vnasal/aa_n4 [A~] fr vnasal/a#_n [&~] pt vnasal/a#u_n [&U~] pt [&U~] pt_pt @@ -1360,7 +1345,7 @@ vnasal/o_n [o~] hi [o~] pt [o~] bn vnasal/o_n2 [o~] af -vnasal/o_n3 [O~] fr + [O~] fr vnasal/oo_n [O~] en vnasal/oo_n2 [O~] hi [o] zh @@ -1391,6 +1376,7 @@ voc/Q_ [Q] base voc/Q_less [Q] nl [x2] pt voc/Q_ulv [Q"] base + [R] da voc/v [v] base [v] fi [v] fr @@ -1400,6 +1386,7 @@ voc/v [v] base [v;] ro [v] is [v] bn + [v] da voc/v_ [B] base [v] base [v] fi @@ -1411,6 +1398,7 @@ voc/v_ [B] base [v;] ro [v] is [v] bn + [v] da voc/v2 [v#] es voc/vj [v] base [v] fr @@ -1477,7 +1465,6 @@ vowel/@ [@] base [@] kn [@4] bn vowel/@- [@-] base - [@3] fr [r*] hr vowel/& [a] en_rp [&] fi @@ -1512,6 +1499,7 @@ vowel/@_3 [@] en_sc [@3] hi [@3] bn [@3] ne + [@] da vowel/3_2 [3:] en_n [@] zh vowel/3_3 [3:] en_rp @@ -1548,6 +1536,7 @@ vowel/a [a] en [a] it [a] zh [a] id + [a:] mr vowel/a# [a/] base2 [a2] en_sc [a2] en_wi @@ -1568,6 +1557,7 @@ vowel/a_2 [a] base2 [a] pt_pt [a] ro [a] rw + [a] da vowel/a#_2 [a#] pl [&] hr [a2] sv @@ -1585,6 +1575,7 @@ vowel/a_3 [a] en_sc [a] is [A] zh [a] sq + [A] da vowel/a#_3 [a2] en [a2] en_n [a2] en_us @@ -1601,6 +1592,7 @@ vowel/a#_3 [a2] en [a] ml [a] bn [a#] om + [3] da vowel/a_4 [a/] el [a] vi [a:] om @@ -1614,11 +1606,9 @@ vowel/a_5 [a:] ta [a:] kn [A] om vowel/a_6 [a] fr - [a2] fr [a] ca [a:] vi -vowel/aa [a] fi - [A] fr_ca +vowel/aa [A] fr_ca [A] no [A:] no [aa] zhy @@ -1643,7 +1633,8 @@ vowel/aa_6 [A] de vowel/aa_7 [A] nl vowel/aa_8 [0] en_us [A:] en_us -vowel/aa_9 [a:] hi +vowel/aa_9 [a] fi + [a:] hi [a:] bn [a] ne vowel/a_en [A] fr @@ -1682,6 +1673,7 @@ vowel/e [e] base2 [e:] ml [e:] kn [e] ne + [e] da vowel/e# [I] en_sc [I2] en_sc vowel/e_2 [eI] en_sc @@ -1697,7 +1689,8 @@ vowel/e_3 [i] en_n [e:] hu [e] ku vowel/e_5 [i] en_sc -vowel/e_6 [e] om +vowel/e_6 [e] mr + [e] om vowel/ee [E] en_n [E] sv vowel/e_e [E] en_sc @@ -1716,6 +1709,7 @@ vowel/ee_2 [E] en [E2] nl [E] zh [E#] ku + [&] da vowel/ee#_2 [E-] sv [E#] sq vowel/ee_3 [&] af @@ -1728,7 +1722,6 @@ vowel/ee_6 [&] sk [E] ku vowel/e_mid [E] en_rp [E] fr - [E2] fr [E] fr_ca [E] hi [E] hu @@ -1767,6 +1760,7 @@ vowel/e_mid2 [E] af [e] kn [E] om [E#] om + [E] da vowel/@_fnt [@] en_wi [@2] en_wi [@2] hr @@ -1802,11 +1796,12 @@ vowel/i [i] base2 vowel/i# [y:] cy vowel/i_2 [i2] de [i:] de + [i] fr + [i-] fr [i] nl [i:] la [i:] sv vowel/i_3 [i] af - [i] fr [i:] fr [i:] sk vowel/i_4 [i] fi @@ -1814,6 +1809,7 @@ vowel/i_4 [i] fi [I] it [i] is [i] vi + [i] da vowel/i_5 [i:] en_sc vowel/i#_5 [y] pt_pt [i/] pt_pt @@ -1828,6 +1824,7 @@ vowel/i_6 [i] hi [i] id [i] ml [i] kn + [I] mr vowel/i#_6 [i.] zh vowel/i_7 [i] pl [i] sq @@ -1838,6 +1835,7 @@ vowel/i_fnt [i:] en_wi [i:] hi [i] bn [i:] bn + [i:] mr vowel/ii [I] en_n [I2] en_n [I] en_rp @@ -1906,6 +1904,8 @@ vowel/@_low [3] en_rp [@2] bn [V] ne [@/] ne + [@] mr + [V] mr vowel/@_low2 [@/] en_us [@2] en_us vowel/o [o] base2 @@ -1932,6 +1932,7 @@ vowel/o [o] base2 [o] kn [o:] kn [o] bn + [o] mr vowel/o_2 [o:] cy [o2] fr [o:] hi @@ -1940,6 +1941,7 @@ vowel/o_2 [o:] cy [o:] no [o] vi [o:] bn + [o] da vowel/o-_2 [V] en_n [V] en_wm vowel/o_3 [oU] en_sc @@ -1947,18 +1949,22 @@ vowel/o_3 [oU] en_sc vowel/o-_3 [U] en_rp vowel/o-_4 [o] ro vowel/o_5 [O] nl + [O] da vowel/o_6 [O:] nl vowel/o_7 [o] ku vowel/oe [W] en [W] af [W] de [W] hy + [W] da vowel/oe_2 [W] no [W] tr vowel/oe_4 [W] sv vowel/o_mid [U@] en_rp [O] fr + [o] fr [O2] fr + [o2] fr [o] hu [o] tr [o] ne @@ -1994,6 +2000,7 @@ vowel/oo_1 [O:] en_n vowel/oo_2 [0] en_sc [O] cy [o] cs + [0] da vowel/oo_3 [O] af vowel/oo_4 [O] base2 [0] en_wm @@ -2055,10 +2062,10 @@ vowel/u_2 [u1] fi [u] tr vowel/u#_2 [u-] ta [u-] sv -vowel/u_3 [u] fr - [u:] fr +vowel/u_3 [u:] fr vowel/u#_3 [U] ta [U:] ta +vowel/u_4 [u] fr vowel/u#_4 [U] en_sc [u:] en_sc vowel/u_5 [u] sw @@ -2093,6 +2100,9 @@ vowel/u_bck [u] base2 [u#] rw [u:] bn [u] ne + [U] mr + [u:] mr + [u] da vowel/u_bck2 [u:] la vowel/u_fnt [u:] en_rp vowel/uu [U] en @@ -2128,9 +2138,13 @@ vowel/V_3 [V] en_rp [V] ta [V] bn vowel/V_4 [V] en_sc + [V] da vowel/V_6 [V] en_us [a#] lv -vowel/y [y:] en +vowel/V_7 [@] mr + [V] mr +vowel/y [y] base2 + [y:] en [y:] de [y] fi [y:] hu @@ -2138,7 +2152,9 @@ vowel/y [y:] en [y] la [yu] zhy [y] sq -vowel/y# [Y:] en + [y] da +vowel/y# [Y] base2 + [Y:] en [3:] en_wm [Y:] de [Y] fi @@ -2163,6 +2179,7 @@ vowel/y_5 [y:] sv [y] ku vowel/yy [y"] fr_ca [y] no + [Y] da vowel/yy_3 [y] sv vowel/yy_4 [y] de [y] hu @@ -2218,25 +2235,37 @@ vwl_en_us/oor [0] en_us vwl_en_us/or [o@] en_us [O:] en_sc vwl_en_us/ur [U@] en_us -vwl_fr/r_@ [W] fr +vwl_fr/r [r] fr + [r2] fr +vwl_fr/r_@ [@] fr + [Y] fr + [@2] fr [W2] fr + [W~] fr vwl_fr/@R [x] pt_pt +vwl_fr/r_@2 [W] fr vwl_fr/@R2 [R] fr_ca -vwl_fr/@R3 [R] fr - [r] fr - [Q2] hy -vwl_fr/@R4 [r2] fr - [Q2] hy -vwl_fr/@R5 [r] fr - [Q2] hy -vwl_fr/r_a [a] fr - [a2] fr - [wA] fr +vwl_fr/@R3 [Q2] hy +vwl_fr/@R4 [Q2] hy +vwl_fr/@R5 [Q2] hy +vwl_fr/r_a [wA] fr vwl_fr/r_e [E] fr - [E2] fr + [e] fr +vwl_fr/r_i [i] fr + [i:] fr + [w^i] fr +vwl_fr/r_o [O] fr + [o] fr + [O2] fr + [o2] fr + [O~] fr vwl_fr/r_u [u] fr + [u:] fr vwl_fr/r_y [y] fr +vwl_fr/tr [r] fr vwl_fr/w_a [wA] fr +vwl_fr/xr [a] fr + [A~] fr vwl_hi/l-voc [l-] jbo [l-] hi [l-] sk diff --git a/phsource/m/m_ b/phsource/m/m_ index fa43e5f1d46b8e73c52529798114063e5d70939f..52cfb80b2957631bf81a139cb8af4669f956d45d 100644 GIT binary patch delta 101 zcmbQjIfZjV0>1?d1E&nr14afQ_`|_4F<+UnVe);(3zL%>JwcM}SR{Wl`cJ;iBrBl8 Z!oZ3o%`};VSqZHB=43M#rO9e6c>oWL8P)&* delta 101 zcmbQjIfZjV0)Gfg1E&nr14afQ_`@MLF<+T+(d7G#7bYh&dg7A&&FD4xHj}IXnqKC~ T9L!2!-8Uzju_#SeW61*msF56i diff --git a/phsource/n/n_ b/phsource/n/n_ index 3c930c4d2f46a85cdb793a8421cbe96b3aa4a541..da3bafb5f53ac4840362637599d2db896914398a 100644 GIT binary patch delta 206 zcmdnNzJq;2n4JUH2L>4?1|Z;JcVNq4T*3%qzu{zHdBFGp%wEImzzkuVa4g`5v4M)D z8JH$9@0jev=%7lJDU&xciZem`|0_ZO delta 206 zcmdnNzJq;2m|Y6j2L>4?1|Z;JPh!hpT*3%qzu{zJdBFGp%wEHr#SCGaa4g_=fU<## zq^+1HG4Gh{!|0$&lqr)pGKw=n^fWPXOLbr`9IT601)~u`~Uy| diff --git a/phsource/ph_base2 b/phsource/ph_base2 index 38317c02..c70a8b28 100644 --- a/phsource/ph_base2 +++ b/phsource/ph_base2 @@ -70,6 +70,21 @@ phoneme U endphoneme +phoneme y + vowel starttype (i) endtype (i) + length 160 + formants vowel/y +endphoneme + + +phoneme Y + vowel starttype (@) endtype (@) + length 160 + formants vowel/y# +endphoneme + + + phoneme aU vowel starttype (a) endtype (u) length 270 diff --git a/phsource/ph_finnish b/phsource/ph_finnish index af54b063..0b5a03ff 100644 --- a/phsource/ph_finnish +++ b/phsource/ph_finnish @@ -44,8 +44,8 @@ endphoneme phoneme a vowel starttype (a) endtype (a) length 170 - formants vowel/aa - reduceto a2 1 + formants vowel/aa_9 +// reduceto a2 1 endphoneme phoneme a2 @@ -90,7 +90,7 @@ endphoneme phoneme y vowel starttype (u) endtype (u) - length 155 + length 150 formants vowel/y endphoneme @@ -139,7 +139,7 @@ phoneme ui vowel starttype (u) endtype (i) length 270 long - formants vdiph/ui + formants vdiph/ui_4 endphoneme phoneme yi @@ -236,17 +236,13 @@ endphoneme //=========== - -phoneme r - liquid starttype #r endtype #r - length 100 - lengthmod 7 - beforenotvowel r/ +phoneme r // this is [R2] but shorter + liquid + vowelin f1=0 f2=1700 -300 300 f3=-300 80 + vowelout f1=2 f2=1700 -300 300 f3=-300 80 brk + formants r3/r_trill_short+r3/r_trill.wav%50 trill - formants r/rr - after _ r/rr - after t r/trr p r/trr k r/trr - before _ r/r_ + lengthmod 6 endphoneme diff --git a/phsource/ph_french b/phsource/ph_french index cb24050f..866634ee 100644 --- a/phsource/ph_french +++ b/phsource/ph_french @@ -2,18 +2,24 @@ // French //==================================================== +phoneme (l) virtual +// Used for l and l/ +endphoneme + phoneme : // Lengthen previous vowel by "length" virtual length 40 // shorter than for fr-ca endphoneme +// Vowels +//======= phoneme @ vowel starttype (@) endtype (@) length 190 formants vowel/@_hgh before l/ DFT+l/l_@ - before (r) DFT+r/xr + before (r) DFT+vwl_fr/r_@ endphoneme @@ -21,16 +27,7 @@ phoneme @2 vowel starttype (@) endtype (@) length 170 formants vowel/@_fr - before (r) DFT+r3/r_@ -endphoneme - - -phoneme @3 // Mute at end of word - vowel nonsyllabic - starttype (@) endtype _ - formants vowel/@- - unstressed - length 40 + before (r) DFT-10+vwl_fr/r_@ endphoneme @@ -40,19 +37,8 @@ phoneme a formants vowel/a_6 after l l/la-15 before l/ DFT+l/l_a - before r/2 DFT-40+vwl_fr/r_a - reduceto a2 1 -endphoneme - - -phoneme a2 - vowel starttype (a) endtype (a) - length 190 - formants vowel/a_6 - after l l/la-15 - before l/ DFT+l/l_a - before (r) DFT+r/xr - before r/2 DFT+vwl_fr/r_a + before (r) DFT-10+vwl_fr/xr + before r/2 DFT+r/xr endphoneme @@ -60,9 +46,9 @@ phoneme e vowel starttype (e) endtype (e) length 190 formants vowel/e - after l l/le-15 + after (l) l/le-15 before l/ DFT-20+l/xl - before (r) DFT+r/xr + before (r) DFT-10+vwl_fr/r_e endphoneme @@ -70,32 +56,31 @@ phoneme E vowel starttype (e) endtype (e) length 190 formants vowel/e_mid - after l l/le-15 + after (l) l/le-15 before l/ DFT+l/l_e - before r/2 DFT+vwl_fr/r_e - reduceto E2 1 -endphoneme - - -phoneme E2 - vowel starttype (e) endtype (e) - length 190 - formants vowel/e_mid - after l l/le-15 - before l/ DFT+l/l_e - before r/2 DFT-20+vwl_fr/r_e + before (r) DFT-10+vwl_fr/r_e + before r/2 DFT-10+vwl_fr/r_e endphoneme phoneme i vowel starttype (i) endtype (i) - length 170 - formants vowel/i_3 + length 180 + formants vowel/i_2 linkout ; - after l l/li-15 + after (l) l/li-15 before l/ DFT+l/l_i - before (r) DFT+r/xr - before r/2 DFT+r3/r_i + before (r) DFT-20+vwl_fr/r_i + before r/2 DFT+vwl_fr/r_i +endphoneme + + +phoneme i- // shorter + vowel starttype (i) endtype (i) + length 120 + formants vowel/i_2 + linkout ; + after (l) l/li-15 endphoneme @@ -104,9 +89,10 @@ phoneme i: // longer than i length 250 formants vowel/i_3 linkout ; - after l l/li-15 + after (l) l/li-15 before l/ DFT+l/l_i - before r/2 DFT-20+r/xr-25 + before (r) DFT-20+vwl_fr/r_i + before r/2 DFT-20+vwl_fr/r_i endphoneme @@ -114,9 +100,10 @@ phoneme o vowel starttype (o) endtype (o) length 190 formants vowel/o_3 - after l l/lo-10 + after (l) l/lo-10 before l/ DFT+l/l_o - before (r) DFT+r/xr + before (r) DFT+vwl_fr/r_o + before r/2 vowel/o_mid+vwl_fr/r_o reduceto o2 1 endphoneme @@ -125,9 +112,10 @@ phoneme o2 vowel starttype (o) endtype (o) length 190 formants vowel/o_2 - after l l/lo-10 - before l/ DFT+l/l_o - before (r) DFT+r/xr + after (l) l/lo-10 + before l/ vowel/o_mid+l/l_o + before (r) DFT+vwl_fr/r_o + before r/2 vowel/o_mid+vwl_fr/r_o endphoneme @@ -135,10 +123,10 @@ phoneme O vowel starttype (o) endtype (o) length 190 formants vowel/o_mid - after l l/lo-10 + after (l) l/lo-10 before l/ DFT+l/l_o - before r/2 DFT+r3/r_o - reduceto o 1 + before r/2 DFT+vwl_fr/r_o + reduceto o2 1 endphoneme @@ -146,20 +134,22 @@ phoneme O2 // Like O but no reduceto vowel starttype (o) endtype (o) length 190 formants vowel/o_mid - after l l/lo-10 + after (l) l/lo-10 before l/ DFT+l/l_o - before r/2 DFT+r3/r_o + before (r) DFT+vwl_fr/r_o + before r/2 DFT+vwl_fr/r_o endphoneme phoneme u vowel starttype (u) endtype (u) length 190 - formants vowel/u_3 + formants vowel/u_4 after l l/lu-20 before l/ DFT-20+l/l_u - before (r) DFT+r/xr + before (r) DFT+vwl_fr/r_u before r/2 DFT+vwl_fr/r_u + before i DFT-50 endphoneme @@ -170,7 +160,7 @@ phoneme u: // slitely longer than u after l l/lu-20 before l/ DFT-20+l/l_u before l/ DFT-20+l/l_u - before r/2 DFT+r/xr-40 + before r/2 DFT+vwl_fr/r_u endphoneme @@ -180,8 +170,9 @@ phoneme y formants vowel/y_2 after l l/lu-20 before l/ DFT-30+l/l_y - before (r) DFT+r/xr + before (r) DFT+vwl_fr/r_y before r/2 DFT+vwl_fr/r_y + before E~ DFT-50 endphoneme @@ -189,9 +180,9 @@ phoneme Y vowel starttype (@) endtype (@) length 190 formants vowel/y# - after l l/l@-20 + after (l) l/l@-20 before l/ DFT-20+l/l_@ - before (r) DFT+r/xr + before (r) DFT+vwl_fr/r_@ before r/2 DFT+r/xr-40 endphoneme @@ -200,9 +191,10 @@ phoneme W vowel starttype (@) endtype (@) length 200 formants vowel/@_5 - after l l/l@-20 + after (l) l/l@-20 before l/ DFT-20+l/l_@ - before r/2 DFT+vwl_fr/r_@ + before (r) DFT+vwl_fr/r_@2 + before r/2 DFT+vwl_fr/r_@2 reduceto Y 1 endphoneme @@ -211,19 +203,20 @@ phoneme W2 // same as W but don't reduce vowel starttype (@) endtype (@) length 200 formants vowel/@_3 - after l l/l@-20 + after (l) l/l@-20 before l/ DFT-20+l/l_@ + before (r) DFT+vwl_fr/r_@ before r/2 DFT+vwl_fr/r_@ endphoneme phoneme wA vowel starttype (o) endtype (a) - length 240 + length 220 formants vwl_fr/w_a - after l l/lo-10 + after (l) l/lo-10 before l/ DFT-10+l/l_a - before (r) DFT+r/xr + before (r) DFT+vwl_fr/r_a before r/2 DFT+vwl_fr/r_a endphoneme @@ -234,16 +227,18 @@ phoneme w^i formants vdiph/yi_fr after l l/lu-20 before l/ DFT+l/l_i - before r/2 DFT+r3/r_i + before (r) DFT+vwl_fr/r_i + before r/2 DFT+vwl_fr/r_i endphoneme phoneme A~ vowel starttype (a) endtype (a) length 210 - formants vnasal/aa_n2 - before r/2 DFT+r/xr-40 + formants vnasal/aa_n4 before l/ DFT+l/l_a + before (r) DFT+vwl_fr/xr + before r/2 DFT+r/xr-40 endphoneme @@ -258,8 +253,8 @@ endphoneme phoneme O~ vowel starttype (o) endtype (o) length 210 - formants vnasal/o_n3 -// before n2 vowel/o_mid + formants vnasal/o_n2 + before (r) DFT+vwl_fr/r_o endphoneme @@ -267,6 +262,7 @@ phoneme W~ vowel starttype (@) endtype (@) length 210 formants vnasal/W_n + before (r) DFT+vwl_fr/r_@ endphoneme @@ -318,7 +314,7 @@ phoneme b formants b/b+x/b%70 before _ b/b_+x/b_ before l/ b/b_+x/b_ - before R b/b_+x/b_ + before (r) b/b_+x/b_%80 after _ NULL after @ b/xb%50 lengthmod 5 @@ -331,7 +327,7 @@ phoneme d vowelout f1=0 f2=1700 -300 300 f3=-100 80 formants d/d+x/d%40 before _ d/d_+x/d_%50 - before R d/dr+x/d%50 + before (r) d/dr+x/d%50 before r/2 d/dr+x/d%50 after _ d/d+x/d%50 after (@) d/xd @@ -346,8 +342,9 @@ phoneme g vowelout f1=2 f2=2300 250 300 f3=-300 80 brk formants g/g+x/g2%30 before _ g/g_+x/g_ + before (r) g/g+x/g2%50 after _ NULL - after @ g/xg%30 + after (@) g/xg%30 lengthmod 5 switchvoicing k endphoneme @@ -360,8 +357,8 @@ phoneme k lengthmod 2 wave ustop/k%40 // reduce strength of noise burst before _ ustop/k_ - before R ustop/kr%45 - before r/2 ustop/kr%45 + before (r) ustop/k%60 + before r/2 ustop/k%60 before l ustop/kl%45 before l/ ustop/kl%45 before (i) ustop/ki%45 @@ -370,7 +367,7 @@ endphoneme phoneme l - liquid + liquid starttype (l) endtype (l) vowelout f1=1 f2=1600 -300 300 f3=100 80 brk length 100 lengthmod 7 @@ -383,7 +380,7 @@ endphoneme phoneme l/ // used for [l] when not before a vowel - liquid + liquid starttype (l) endtype (l) length 100 lengthmod 7 formants l/l_ @@ -406,12 +403,12 @@ endphoneme phoneme p vls blb stop vowelin f1=0 f2=1000 -50 -100 f3=-200 80 amp=11 - vowelout f1=0 f2=1000 -500 -350 f3=-300 80 + vowelout f1=0 f2=1000 -500 -350 f3=-300 80 rms=22 lengthmod 2 wave ustop/p%50 after _ ustop/p%70 before _ ustop/p_%70 - before R ustop/pr%30 + before (r) ustop/pr%35 before @- ustop/p_unasp%60 before l ustop/pl%30 before l/ ustop/pl%30 @@ -431,49 +428,46 @@ endphoneme phoneme r - liquid rfx starttype (r) endtype (r) - vowelin f1=0 f2=1800 -200 200 f3=-200 80 - vowelout f1=1 f2=1800 -200 200 f3=-200 80 brk + liquid starttype (r) endtype (r) + vowelin f1=0 f2=1800 10 10 f3=-200 100 + vowelout f1=1 f2=1800 10 10 f3=-200 100 length 100 lengthmod 7 beforenotvowel r/2 - formants vwl_fr/@R3+r3/rx%30 - after @2 vwl_fr/@R5+r3/rx%40 - after (e) vwl_fr/@R5+r3/rx%25 - after (u) vwl_fr/@R5+r3/rx%30 + formants vwl_fr/r + after b vwl_fr/tr+r3/rx%25 + after g vwl_fr/tr+r3/rx%25 + after k vwl_fr/tr+r3/rx%35 + after (l) vwl_fr/r+r3/rx%30 + after m vwl_fr/tr+r3/rx%25 + after n vwl_fr/tr+r3/rx%25 + after p vwl_fr/tr+r3/rx%35 + after s vwl_fr/tr+r3/rx%30 + after S vwl_fr/tr+r3/rx%45 + after t vwl_fr/tr+r3/rx%15 + after v vwl_fr/tr+r3/rx%30 + after z vwl_fr/tr+r3/rx%30 + after Z vwl_fr/tr+r3/rx%30 endphoneme phoneme r2 // silent unless followed by vowel - liquid rfx starttype (r) endtype (r) - vowelin f1=0 f2=1000 -200 200 f3=-200 80 len=40 - vowelout f1=0 f2=1200 -200 200 f3=-200 80 len=20 + liquid starttype (r) endtype (r) + vowelin f1=0 f2=1000 10 10 f3=-200 100 + vowelout f1=0 f2=1200 10 10 f3=-200 100 length 100 lengthmod 7 beforenotvowel NULL - formants vwl_fr/@R4+r3/rx%20 -endphoneme - - -phoneme R // After consonnants - liquid starttype (r) endtype (r) - vowelin f1=0 f2=1800 -200 200 f3=-200 80 - length 100 - lengthmod 7 - beforenotvowel r/2 - formants vwl_fr/@R3+r3/rx%30 - after b vwl_fr/@R3+r3/rx%60 - after p vwl_fr/@R3+r3/rx%60 - after t vwl_fr/@R3+r3/rx%60 + formants vwl_fr/r endphoneme phoneme r/2 // variant of [r] when not preceding a vowel liquid - vowelout f1=2 f2=1800 -200 200 f3=-200 80 brk + vowelout f1=2 f2=1800 10 10 f3=-200 100 length 100 lengthmod 2 - formants r3/r_2+r3/rx%20 + formants r3/r_2+r3/rx%25 before n r3/r_n beforevowel r endphoneme @@ -512,7 +506,7 @@ phoneme t lengthmod 2 wave ustop/t_short%40 before _ ustop/t_%40 - before R ustop/t_short%50 + before (r) ustop/t_short%60 before r/2 ustop/t_short%50 switchvoicing d endphoneme @@ -543,11 +537,11 @@ endphoneme phoneme v vcd lbd frc - vowelin f1=0 f2=1000 -300 -200 f3=-300 100 - vowelout f1=0 f2=1000 -500 -300 f3=-300 60 len=50 + vowelin f1=0 f2=1000 -100 -100 f3=-300 100 + vowelout f1=0 f2=1000 -100 -100 f3=-300 100 lengthmod 6 formants voc/v+vocw/v%75 - before R voc/vj+vocw/v%75 + before (r) voc/vj+vocw/v%75 before _ voc/v_+vocw/v switchvoicing f endphoneme @@ -587,3 +581,4 @@ endphoneme + diff --git a/phsource/phonemes b/phsource/phonemes index c9b0b50b..780aeb00 100644 --- a/phsource/phonemes +++ b/phsource/phonemes @@ -1357,10 +1357,14 @@ phonemetable ne hi include ph_nepali phonemetable mr hi -include ph_mathari +include ph_marathi phonemetable om base include ph_oromo phonemetable eu base2 include ph_basque + +phonemetable da base +include ph_danish + diff --git a/phsource/r/a_ b/phsource/r/a_ new file mode 100644 index 0000000000000000000000000000000000000000..c13212fd9e4182ee17d3b49d3612f5715f0c60b5 GIT binary patch literal 5202 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 WGFJH?90~dqM!7HlBHxpLlK%s#Mv$!l literal 0 HcmV?d00001 diff --git a/phsource/vdiph2/ie b/phsource/vdiph2/ie index ef371624d1605f23f7f9fa8adb0f3e0f65821a71..e99cee42734d1ebf6e3fd91ca90093fb09814580 100644 GIT binary patch delta 234 zcmdnRzl(oD60d{M1I7o83_!rb-7qmW;%%g delta 234 zcmdnRzl(oD5^sUf1I7o83_!rbJ!4|NxTF9lOkjaj0t<{?A*VKR{!6%OBMw5UCm&_p z&$wW6E0d$)34WL>GSDIAG!qQa_krY@kh(zcbxnV)-!nBC{|f!{n#Tx{Mx^ qg;|t&1(2Py*_nlvk@3T1PgX<83Ralz1Q`$u;vt|(nTI%~Wdu delta 308 zcmX?Scg}8u9xvmx$%(9@v0)4#uz}$b(|)F7Oi7HP4C##1#D6n>VcgBE&QQxN!FPc1 z8e^as-*|I>`4jdJ7d7BsV z9%NxW0k+5)XpIBMDuzCer9g{X8Fw>0U%3{Kh%$y-?!E}vLj&mKuY)%dy zkRkJU-Z3QcM00`IYX#P@+~-RITMBY8yYvsJMGOoTa%P*a3b`_c8gMQG8r{ygn&BOz zo|pvC=m-`Mh6H8?5jUXGe>h$+Ea5Bx8~u;ljxmB~G1zD){_RXR_%z{03rX{`Li_+S LT7PrC=zUHAhqzZ( diff --git a/phsource/vowel/ee_2 b/phsource/vowel/ee_2 index 7dd29f23b55526f2e132b14095335042c595cf98..f2fa860756933e26adcef0d16321cbcaa3d703ba 100644 GIT binary patch delta 324 zcmbQhIe~M6S2zPB14kNj8Z!eBv@$vHMKE1p0Bz}Om zffL5w$?w1pV=KruFu~Xratsp}9+w6h&5ba+K^V#C$qSjpRULR?8g}wCaKYF>gP37# yutC!%hcX#b&#+=-F5^MCjA8PAW^vU94u}ih{ReuH4dxmJSq4-uP6Yt!{YOXu delta 324 zcmbQhIe~M6S9k#90geqUGE59W(8`p+7r}G^%wEYBA$Wl)0?fX_d4cBv;{!&JnghHW zIAQFa{1NOhwt{Q}6O3IUr#5lnap?%g25yAW9l{8s3nnjQ5?A%$g=yHyufYXlE6C1Z zhOxm0O`9CbWJo>3ikU%%tzbvEtbqsNGL6amnZ;FSa6nw}?*C5y3^tf+6l4uhy*L#B DN#sq) diff --git a/phsource/vwl_fr/@R3 b/phsource/vwl_fr/@R3 index 2e067ec8edd19cbcbab7c3df5df470cda11ef3b3..45bea114109b90bdfac1a430ef6d4036c3e03401 100755 GIT binary patch delta 100 zcmZ3^yPS7IsH6rH1N#@oFO0@4feZ|+49sdwYE07HnT!P+^FA}fWf?#KDhpy3Oy0x# LdU7hO9ex!68^;tV delta 100 zcmZ3^yPS7IsH6lF1N#@oFO0@4febfT7?{%ceAbrngOxUlxrme%t9-^MQ{su z32HDSEM#CnSjfPDu+WghK^|hcn|P;Gs=_T*LoH+7dwM?li}iSQcWOP@9Ka#UEIMFc3^mX I=Qdyl0D;6*EdT%j delta 2304 zcmZuzdvr}#8b5n~kG=1???i%|l1lVSBpwkujUveqr5%GriC{d2X-m<;q!GrQMys{7 z!H`*AEt6@xyqXHFtf@qcm6p~Bld8AIs|3~5GL(AEPBhX#+_Uz*zq8Ih-|ySMZ+*Y- zo{7BlSTJi)M(-h68H2&HthCH-Wc4uM*Pk@Hl7DJRiHZtY*7$}8yUlmD%$B2t5Tk`< zT@%;D1e`17p8NYxhk5XHm}QmAa%owe_3Vg7oL`pLx)EDe zTlm?Jy6P z!XZe)g?Jtxr##w7Rdk9@(?P1Bx6S?UDVl0=J&r{$egs)?PL7q;;-r`%ugd-~3l_r) z_yEp9fBXuE(n%W0|KW~mw%V$Wstc+{?Np0G>KS!|mvIliN(bm1C75Jds~sv|r#slL zu(O@}oRO~fF6An52AzMk_c-DlTlE}0P3M{GPr9cDyrSK0p3cc{}Sc&^_GmgiT5MuaHd?A~ok1DAL=kjz;<}$jA8viR( z#X#W^H^l^)j}r-bxRE@QUA&R{n~+G|jgWgua*%uS03N|Fa6T{OwY-Z@a2;Pag{b5O z=4drEm%5Tg7w`mD8RGeddIZihcTa_=gakjqzccH9G@Cxd^>9)wl~`%nQbFegZ& ztL7|w%=S9`0S{pb7MK8|aSG1G#aM`WI0W0_&+rXwH}$Q618@a=*cFFit|{F=O@Y?o z8eD|=rcfCeM1j??3Ua^)yJTpV>?eE4aq>NRU1q?1^ZH5n!Cc3o6efWiHpwD+M5e$S zP!3;1HSB=3umoO*zd&=r_U$BnY}9lG4E5vv>))Z=*1ZmYY;g8KdS?R_}h zGQsLQltfKLnnCqg%IFr>FBtlS2TC_20p5IT=DsC0(8L$>E52>C!D{5|X0Njv`MP_G zAMkzRkAo&Y%WC4YtR}uB9Uj;+6}v#F#+ujQKxwq2?%f9TX>CozuQ4y!_F8lUE)v=r zZBPf@sKZ60V51JTeD6VC(N21xLuc>#2YIE1oe&SnE4)FVro{S}nZ%NHXYi)pTDkB< z19=*iKau%RyBtonVmRHm%M?4$O8Lbi54-z{!|wZbSs!Af!HvaO<889VCcBK(53|cN z&GG|*m=4vK?RLbDjJ_4P7C9|^vai;i?>g%0?J4yh@U8L(!k!Lm z7q-s7*SE-vo@uV7&Ku5quIuiVp39z_o`ar6o+Qss_fYq3*E(04YooKyj<@q2w{@}Z zt+%Obe4a`%8RLvO#;Yoou3yzFbb;=!D~-YA@>vQM(?a7X8*vJBlM(nLW$_tKQUla) zl}~NqF1(G3iMg16qc*5(%4hudxcWf7sq)kxR8N(m)~akB<=F3d$-ZO1>^$hSU0&B& z=R3|EXQI>Zyl(HdXW7l{)sAGxF}+-m(owofy{<;6v1*yRtey(#mHMduS=Z?j-ATW! z-shia1wBte+Gnhw7@hPPmGCB2r~@WMwGQecHO1Its``+RP#9gov2=`LxEr_OJM=B> zq4z0^KE{184B{}{_CC>82=mo)&3X#w|pag>%I3pQ#^OvtKBK?O|DDMQ+AQ#Q7u(_)kSx8 zeD4@x&$TDp0egX?LT^@i{H&oWrxl!|E~$PxSI;$TfWE1oQ-!>ME@FTN(B%*wfdt6G zc$!A9(Jsp1YEDoAHH*{f7|g*9G?}k(mRhCCRf!6zeyWwa$=f-L51HT@>{4YaUT5n* z`bVS6cRZ1OeB5YOW=5yr!Tb*I=OetCvw0r{C<8O$897i6gpPRDOn{FmR6!vlN`{%F zYh{$N%3Q3$SR>HW)QyNf!9n;rw1mO(o+y$5+Vq~>!16?2v9)%!038T#DT?-{p08Z#AbId@EfbsAO%xMGTAO#}ehWuQv WG>%;gW6W4+LAP-RJ_jC|0RIP6K{xyW diff --git a/phsource/vwl_fr/r_@ b/phsource/vwl_fr/r_@ index 50806b97a3a0e8250c247b32c929ddac1f93e299..1c46393976c0e24c9893c1ff4e31d9de9ffd7765 100755 GIT binary patch delta 396 zcmey!*3T&r9N_9466_kt%)r1<6z{+?Q9!1ibsCTZ0uHSI7l0WIPC&{Y%q(GG;GD-K z22#)PfRRBcf(b|hfesskund%4!pXqGNA~j2aF*0 zf7S+J87P~Z(}DK^BSd@;4+A%hy@j8F9mbB3ZeW42E9BHBE|@0qdxvKy$S4K}*8dB@ z3Fo5rBQ(FL_vg6R#P8q}^5Rt6qLD4U0afs+}^HsfYsg}CS4{{mhH oW4b85!q2qxXhi<#d50JI4^g8%>k diff --git a/phsource/vwl_fr/r_a b/phsource/vwl_fr/r_a index 6cbcb98a6a44e9044e01fcc619682eeb91d6b766..938f44745a1eb157187df1a5fc6c67cb48ab1b44 100755 GIT binary patch delta 340 zcmcb~b(3p?xFiD{II!MMfN&gG7jPI%G>{C}VPxQa!NkN25>8-dkV#_7VFIy5SREuE zFv@`0O#)DI=s zhIjw**f3d-`4Ys6RZP0!B@7H)^O(fI-r!|o5RPDiICmi{gMbW_{epvm6XwJ{JPc5$ dzx!Xp2V(<+K$?LWrUvK@WJ}aHYqRJv0sx`OM&SSe delta 340 zcmcb~b(3p?xTO7`{@`N_AmG4yI|0l9vYHqeCK^bFdoVKadN3bg1_{q)wvdfrn!*HP zYp{NhT*3%p_i(Kce8BjC5hPx~tH29kn{e#s^WcDqE6512z}OXXY7-Z%VfpjAqHA&h zqkd=u7tDrYW*IS<4K}P5!VjP}+~5p>n##a%fhT|qV$!?+8GJJAFjEs`elWqyg`P61;(zBV_<@@HIx}9u35nHyH#$-{Gs+Ku`zJHhuU|KgMk~S{}>Mg)Q)%mEBF&QVB!Wc49qY#&^|^#pp77R1MLH{ zC)+X~hS<4^NjIZ_k%9FAqYhZ!fQftG`$5%d@9KfiXLB4(O z{u5~**zU>p%m*R1u42;75MylM@L)c`4DwkZbB;g+(-g3eeONc~2te5$oU7r!3E&an mfcW6uec$xGbZf_B zOXA?uEqooO`>q#-53S6-+uE;LF9I)iW7lk24%Izp&oTP5PkGLrvwkC>lId4ff`L1b zzvTOMyj^$K&J3n<{i2E7)L)oMb&JznVo`C52Ylc?@AL+5dC46vs5h@%Q1>Fs++c%y ztf*eo+S6Q5pE}D4ra8t0A%~O!HCyW(k#|^Ys5PW6zebgD$`lo4shTV#5(VjSPr zs=nd+_t(u&<|orFe6&@{i!$}g8_MY^<0SfPW^wW-%qD3oj&fW%Lq|Lw@tnJCDxa~# zO|CMlPMel;nx?WXj^{=Cil{DgPP>!J4of0?nKN?cH9aXlp^XZjYRwYyMXMrS0VVB? zE=rXsXr?G)zTKH>e8bk)jNzPy>3I9|p49Ki3gG^e(;mv{E92yeLt*4B+7sAualWx_ z^&1Z||4RvXkmEFC4PN1GN0Q?-|#xoT`T+Eb@fZudjr`mcgr=+ONT?d&L_v{U6-Ln*SG$M0>!S= zwf;`f2ogQxe+kK_{7qk_${LPH=~Jyydl?;1$of!8y&Qlr>Gy zGs_$+++tq!iq59?ntIo1jxo*{BSZ`-143JeIVkUd&PZp(u>6ogisZ>E@=~EDBbr1~ zfue|S>!3d2>i6g6kLD}W$h@~z%Il*RqEn#pQqep zRr!Q_EOMDiO)5+%$0;i-;&@i1FNx|bXVe{6)|nC6i=2`(rR`DiiEI?`R6|R|7p;PL z1?1Elot4Uw(N0#xeA}67e8bk)j^UhynRt8qp49Ki?qOBw({8J4DSPoF$K0Z6d(-MJ z&Q~_9e&Ipt@8sCOT@UoAU3)Wo@kWG~Xzd>9?`)P~+ugP|xmHc||3vn-B^!z3wSgbz t|3Vek+%-#NIRhoPWc6g;P)>g5^&r)~I0{n@ol;*Lvgy7dYxKWP_9sN_o@M|5 literal 0 HcmV?d00001 diff --git a/phsource/vwl_fr/r_u b/phsource/vwl_fr/r_u index c24b0e39c7bd4bcda704b32e329a818272adf5f1..a2522045aa788058c2601f79776d163892d6bace 100755 GIT binary patch literal 1369 zcmd^+a~#xs!vtO9toQu5fpDlMn{I1ir92E&t zo((P!5oZ0(adH`NR9?Cn*J~+Ha*_+oXr15zA9&9@J;7UEaEEg`n^x3ydY(D1v&22- zm9J`VX|APro#q%5j5A8ikRqaF^Du|h8_^zXj~Q0KM3F&4@>-#&q?1vd#G*)Rkih1m zKH=JrSCvop>o@(6HiMjHwBPHf(^B-3e|OeP{>IrDRjtDuRn%z6$77yzmu1B|kGR1V zrgTzeQZYeAQI*HDGJQ!_=QyM4xT3+V%wFV_I@6jSlb_hG0X*fBH4@0yfP6(1R2$BV z3iz7I%UED5lTF{a4K!msr^}ppd-I;?PiFVDD)nu5RJ9eoCmLH~R~d+nV|S literal 2021 zcmZvc3s98T702&A-}l|!Z|`GyF0WnOU0%yWS_4G!g($?BR;m$!Gz}(IC-Iq-BnBs~ zQZ2?%3}^@%tPiG!pdm$y5piODG_6rFB<$@D_n!%dN$BmJ3pzqiiX+!=Q2TI6X zKOZ5)tbhtApic4(C82leT{=^XBTX6!DuNoYo0mzfNq86SqA4zmNe8FO?DIL>XFKM|Ig4gTlJoCx4 zt0^t<#h%w(|BRaAY;mm}7vM?tzU^J-eZzCVJ3l(v`S*y{u$Iul;Od}~z-<9t_B{JX zYOx}!K`xX+o)cTeV`9Acnt#am@a230@3*zt*4n1qthP($QM19^h1zExK-HTS=2A1= z9I^i1T50`}HQgFy?YCU89Jah-dE7GIGRRJ|o$Lix%<@<+%VyJ921{T8?3Qub*lCm) z1;#vMu~B7o7?M56*062tSFDzmv(>DC&1Cnp`_QuS?4xWcTftVcr`RI4kUfOHsi>Lk zdl>fwTh5+gC1@)!>M`8U!(2HSll6_JW8En%6LV#-bW{eLh^xtd&jgmlyeyIhGApBO z*tl(cY1}k=jBdYrkZ+-S(c6c6Lk3|s7S0kenUER()0s>B-X=mUyMgJY z^f37@5ZhC9AHAt3lK1q@Y9I0?YX^PMO3cwt8?YroJ|}FH>+IKHhrHK~S=Q!=#&5f^ zG@4+_cj#nLzJJK9BM_1^f&<&vvgx(2h z2$>%8hu|r}^+CgdKL~syzzit2d+e9hJ8G|bO;xH5>IL<*TA@~}QuUJBt{T)qbx5_U zw^Y5VQJd6SwMs2f#p;KuP%Th%)hv~vVwGJD$S!$Cw#s^0BP-?0vI55{xm8xnEx0O| zKbK{4y<8`MD%Z*qxl9(z`7%dNl*!U9!(|}8GE*9o$N|wUJ{9N1QL$gti7K&4l!+I` z8u1gcTr3gA;t`QA=8L&vw#X9cB0+=;n;7Od`89r-e}eDxEI-NH_ra4{oH*#kYWjJ`;h;oq;1_ED#iOq>QG@emK^%oMaSuC<+IwKhVEpa`}E z9MiW15b`d(3#0k_BLBl$l@^@3%dWe00AYV>x^q4(-Ljl0I^JAWNt zWuyMAUamLm9r_1)n_i{=SkKg>bW^{h^=e((X{|w9uPxBxv;p`K4#FPT3BQJBI0`4= z6#Nd3An$`6uoblnTA>rVfoTz1tmZ?-;~a)WWn7EmRBFTw08l zsC`FE$Gz!Vjy6Zj!+Hg%e54$0qLzShpxuPaa2`%VJG_HB3~gww&;<3c4a#68EQD#0 z070O^Anm8O=`f{W0Ral^Ai)F*1M~*{ly=hN^dSB*cGEqyf&P}Bq#x7I@q`B4ANMuw zrB~@E^c+1!+v#uUURq7d=<}#@3C9Ome8qkH}PB7}qEEL3r zxKMBv0^(L&y2y8ME4azRg{xV0r9wRK%{<42UqGD8o%g%v-VAwX^3vH@TixocZ5jaX z?L0EEL-_M*Szmfl-7-i1O^Jzine`>9Jpt^YKGa3wYslZ$0?9!Nxj>KjTN>^}n`mO@ ztE;$~?s>>6{nkDhia!M~71ygZUGN-^;53#Phj9b%@D^|Q4PN6hwsDfZMP{AdQ&`3Y zY~mVLxt`;_&AB!|bqotAV?PS;v4`oxlj{uf)b{f3^X_AYx`!OH$iQY~NFF-{c6<^y zK!sakacgUUFqOw z6Glz1Nqs2`D1J%q>RsyLbnF6SeJp35%+BmCyC8^kq!&Rzib_#1>Tm2dw%B_`j3t)D-b?Ha3o4@6yV#== zd#q?Qn&0wkA}X_hs!LL9)Ead&UxOh@IVcC&F8b2B91n9V$Nt`>c#Hj8`<)KUD-3pIPKi#H zoR&IXtdQ$4*FM&I!mg%yy;0G-8FnlA{4Om-H}QMglvfe!#bGg8yyA`d1NM;(#!*BskhNq28AN)J zE)d;GUy??~l9^-~$s}9IR+2@Qlc^+?v?Fy$1o0+L#7qo?6GmuBure%@_xL4#g74v* z_!2&gPvH~zI6j7t;Dh)8-h+4IZFmdbjI+yP6W)k7;B|O4UXB;wS$Gm2i-+ShJQxpx zk%oui?_p*f9uM&&9)m~X?_j<^?v19nL5_W|dcNngKonYRC6)fQw=nr%nZ9-E}57Y#rJDP~rqg;6J z&bS^t&vZN=MjG5F99!@^n16`=jc%bUaMlsD8*N3KVeA2%i!P$;=qBvDg?>Xf0AEFy z(XTLj9-V_YTN3Bc1#}7Jp*!e5=oxy2icrFvqk(xgqDcQYW=hg0W_rn)l2;iso8d81 zGvK_9nVK?P*2Q88g$(!%6yQX2ywfX2zxbPt5cWNDsIe*dRC~WNK($=(y0O zAvJ?%25$8~==*c!3tkUB?A^P%-l{alxn9Lcr&z~^75Y2Ovp;NoZV9#wxBJc9%A9Xn zY-(w8F+DJDHl`V)jc@c_`XD_-|5MARo$XaQ+umltKq7n zTC6-&&MMoLh06CzC#9|urc_e6@=81q*TpX)M{E&m#3C_Mj29!sK+#>a6^%q~5iNp* zyRa7qfkYuM;E(w4{4&qw2l!T=!I$tkd@}!mkKn1iAMe3C@wU7LZ^Y~I+Po%@;Z=DE z_v2pNg*$K~=lmmk&GOj;cAH&e7uac7OGjA_+rzf8jchGj!4|UFY$_YiMzi6t#s;ze ztRL$O(GSpolIX|!u%4_d>&V)&R;)Q|%)Vy-g0)zO)n-X7o>gbDtQw1C;j9V^VL>dg zB!U2ku?W}`$7-?!mI$Ld92Laen2CL$f6*KC6x~fT>2f-c&Y+X&I69V&rlTOn(g`rL zfUct1bT2(l&(h2E8pI_)KhpzrJI$gQbS0d*6k<7`44BzQ_t9hYG#r&jf1|hQEqW8s zHJb1?XJm32GqBmFkx*;e0~B?8kiK26qA@0KfT7QSSk9~ zh?!yEhV%?P=-0!iz4vs_Tker=<6Vw9|Lx@F*xF&YwXUV2oxiz{>5{Rb@rvF-f2^fx zSes`EGMrL-sz!CM(p9l2N5lZ(DX#G8ye`-Hb(X~@!P{-mT0pdicRQN>#5S;l>UxvF$)t6F$qFum=PEfdq-c;NAL@uh2MKEokfSyjgZgnz(&aXZkry0|v31)~nG4+_|{^ZGZ)YqbOQ8kKiUaew*jp~8E7raLc7o@bPuUG4pedzeuTZrH)J~5O|Fxt zq=-U7at z?OVp<>Y(M(xEe$xt_n{bh<&gpXm~>5l$J-zn7L_!dnuyn{pOaUFS7a9C3C=DWh$DA zTFNfcY*}(BmW$|VweunC}VEmZcL;M}&X8?1)DpmiN#Wz>hc8W6QW>sqo-tT!9T z2E*tBN7>d+L%3El9FtHM@o?W#C5!@5T`M->e%!;TAz|kONBC^>wDauc{oZ$HU}R|L@PNp^)#R9*m=Q7l z(I+DZg|`aX>wnXmxes^lR^ge&+gzwO*Q^F_b%dfS`$RwCD)RVY$iCe~k(j1nwUzp# zIt3WoM;)zRQPT{~v_^UZW3=g`X|cJ`>}*$PUTFSciZV4YHqjetjScP9@0INWi-BC` z$Jt4y^GV!8oEF0sUo}^44ZIK3x@x1eVOnd=L%U??Ysgodt80`y!YUf@mCT>n_+SPm zH3nw4XN`bQ713?9ZR!}@v$41P`tthL6lGJXK}kiuR6zABwl5@4#W!1Lr#f z_k(9UgsPz<@_TtADnyMy!`Fe@u7GUN4wTmqd~Q{o08bE)13=OL0~&q_zK0tq=rFt# z-1iOq7CVp-xN<_#y3rF#7?;R4v{_Pu$~Rv!GXZuaicid(ARmyX0yFJVvFt!1r7OV9 z{=iH(WwR7h#>^Gk)6dMzHg6*TA7+k?GFMv`eId4SjR)}~lMKmebq3U3T5o;5-gRH6 z%&nCfpBeYC+T@7EVSb@4g6jqug2o1=25$*rRT_r14VS7~tBwc{4yzUVIw(D0p5F(b zgO%raCwOi3cjv6v~hs3pRs>Q3^7hK?l%%s zcT=9Jk@=)K+HSQSwlud)w#>JrT0AW2cJIu!%s-k=8@-HkbZ7mjHc{)Lb=Fd~x!Qj1 zzGl#a^*VYxy}v$6pA3P>6C*>=#o-GvOdE zfwQO$RoXVt#z0`eIhq4L>?SRyKA@s~*hJ9VY<2)t`ZBx2p0M}K$h~v_cr56JRaOkJ3fpr<0tuB z9wz#WZ1GT7l`2ZK5~vuI-^Du7O*n}|aP&=3@bi!bo+LN#$i3i1Q)vV04N7|&YRMs_G1QT+L?JKmRh$Lu zD*)d?t5HJHp?+=3n3*-JT{$UB=f241w%WYhXHJqgN|S(@w%WWksVlWEtIgkwN78#y zS`8H&;^kt{Oj~VU%d`hZc@19fGbO3qXG+p1pIP9a6L2snI&^JVVbxhtXJayJ%uBpd z`*KQh9ha2pwI0Nei_3}nHSBHB0Kd83mpul#2fBafUf|x#& zl_Pyd`gHNRSvk+Uhu1QXd2an&5}aL}j1}DMn_G^WzcWoWe$;dI(|W${VQgnyV|-)$ z#&q7)zmAL|{B`;0G*nn?opFvh6C5$7~Tt7d4WrYQ@=F;00e(4hn1|1&_HjzW&V zNPht|1>V;?vVgddS-1$Y(puz=GqF1v4;j*(wxHkB`A{{a!*(3)4|z0^22&Sm2YJv$ zD+2xs7_t!jLlJPK4QShHsF^MTd;emuSTW;JSy>@8{sEYCo^6Nz#E;;a`@{Hw&1aig zF1ybtuL2C;&7Gm2p(~S>S4y(lSM8>Ts%Mpk%1QB+xXWkrhTIN3c{(`q6z0ox$nCf2 zVY-5jpiQYiEh0a|Ge?nMp>p4a?#NYTXLJDhf=`}|Cqlo#4W9!C>kRI=6S&ohltLBv zfc=YSaV(mMdE%7#OGrvW(Y4;cm9mg++!0ZV$R9orO3@e0Y*8|IUwR}~pkg#eo*?DQ zJz4?3dfe)g6}D*n@F`j+|3 z1mW*pii7#2cx0;<3tepVvL_V4sz~@&1JYyMpS3j12Xw;#H+(Xijj~z&?J(-iB4bmN*_>-0WJfJyEWcYkt#z$U ztqE46^{Az-<==K4?QWZUnRW9;(@xWN(;?G2(-qTcQ+*JOAj>To@Sd3TdD@fS}9SJUu^0|CGUkn`x4jMf{Y!xTO5s@xB3teRJP`(X3 zN)BxZd4CzyL~)R%qv4(dp;F2w$H*CSitHqFVUIhx3Qv{_F5^6QC0)s4vY#Zp8+UJI zDGOP4P-$K-`B*yl1v9_Y%wFgwaUD9Ei`XVQkL<%0;1^#CxzOg?7sDIRgihoHs3p&m^Wd^(kfe#sx}`n z=nGcH{t&+K-v|DO;0UNVYeK{V3Wix1>{!x6bb`L2H{`1-P>IHZ+e(J+pso6D3DF!- zGSsPl&}&5a8M+PKzN2U#=*uqX5blAo1Gu;f%|&BTU(^ECM1IJEFe;Q^$*<*ivWz&= zkP(@Xjua%LxAGJDclm;RSl%jU$SdS@d7ZpnJ}O_5@531w8A^`(C>O~08d+kH~lALRp3Tm=Hk)@=ch@lo!Y|^Aql;QC;lKKB#<3)M&2kGRYehSbR|?I J|02(l{|mPv{0sm9 diff --git a/phsource/vwl_fr/w_a b/phsource/vwl_fr/w_a index 41cb354a4f3be420c24f3901b3f143e6c9eebc20..c267041f1998251f5f55a9af17ec894cda3993ea 100755 GIT binary patch delta 305 zcmca`G8S|$(E~`p^58&0LY+v-q#ETybQb`_IyDNW&?hh#aSE*G7NCb WD&!b8+wt$DmBFpdo6n1Ju>b&r*Gr!O delta 305 zcmcab(@g;4YW diff --git a/platforms/windows/windows_dll/espeak.dsp b/platforms/windows/windows_dll/espeak.dsp index 32f86c59..d175a459 100755 --- a/platforms/windows/windows_dll/espeak.dsp +++ b/platforms/windows/windows_dll/espeak.dsp @@ -105,6 +105,10 @@ SOURCE=.\src\intonation.cpp # End Source File # Begin Source File +SOURCE=.\src\klatt.cpp +# End Source File +# Begin Source File + SOURCE=.\src\numbers.cpp # End Source File # Begin Source File @@ -142,10 +146,6 @@ SOURCE=.\src\synthesize.cpp # End Source File # Begin Source File -SOURCE=.\src\tr_english.cpp -# End Source File -# Begin Source File - SOURCE=.\src\tr_languages.cpp # End Source File # Begin Source File @@ -170,6 +170,10 @@ SOURCE=.\espeak.h # End Source File # Begin Source File +SOURCE=.\src\klatt.h +# End Source File +# Begin Source File + SOURCE=.\src\phoneme.h # End Source File # Begin Source File diff --git a/src/compiledata.cpp b/src/compiledata.cpp index aef8cb01..b0e827ae 100755 --- a/src/compiledata.cpp +++ b/src/compiledata.cpp @@ -635,8 +635,15 @@ int Compile::LoadSpect(const char *path, int control) } spectseq->Load(stream); - if(spectseq->synthesizer_type == 1) - klatt_flag = FRFLAG_KLATT; + // do we need additional klatt data ? + for(frame=0; frame < spectseq->numframes; frame++) + { + for(ix=5; ixframes[frame]->klatt_param[ix] != 0) + klatt_flag = FRFLAG_KLATT; + } + } displ = ftell(f_phdata); @@ -716,53 +723,69 @@ for(ix=0; ix<8; ix++) // write: peak data count_frames++; - for(peak=0; peakffreq[peak] = fr->peaks[peak].pkfreq; + if(peak < 7) + fr_out->ffreq[peak] = fr->peaks[peak].pkfreq; - if(klatt_flag) - { - pkheight = fr->peaks[peak].pkheight / 128; - } - else - { - pkheight = spectseq->amplitude * fr->amp_adjust * fr->peaks[peak].pkheight; - pkheight = pkheight/640000; - if(pkheight > 255) pkheight = 255; - } + pkheight = spectseq->amplitude * fr->amp_adjust * fr->peaks[peak].pkheight; + pkheight = pkheight/640000; + if(pkheight > 255) pkheight = 255; fr_out->fheight[peak] = int(pkheight); if(peak < 6) { - x = fr->peaks[peak].pkwidth/2; - x2 = fr->peaks[peak].pkright; - if(klatt_flag == 0) - { - x /= 2; - x2 /= 4; - } + x = fr->peaks[peak].pkwidth/4; if(x > 255) x = 255; fr_out->fwidth[peak] = x; - if(x2 > 255) x2 = 255; - fr_out->fright[peak] = x2; + if(peak < 3) + { + x2 = fr->peaks[peak].pkright/4; + if(x2 > 255) x2 = 255; + fr_out->fright[peak] = x2; + } } + + if(peak < 4) + { + x = fr->peaks[peak].klt_bw / 2; + if(x > 255) x = 255; + fr_out->bw[peak] = x; + } + } + + for(ix=0; ix<5; ix++) + { + fr_out->klattp[ix] = fr->klatt_param[ix]; + + fr_out->klattp[KLATT_FNZ] = fr->klatt_param[KLATT_FNZ] / 2; } if(klatt_flag) { - if(fr->klatt_param[KLATT_Kopen] == 0) + // additional klatt parameters + for(ix=0; ix<5; ix++) { - Error("Klatt_Kopen has value 0"); + fr_out->klattp2[ix] = fr->klatt_param[ix+5]; } - // additional fields - for(ix=0; ixklattp[ix] = fr->klatt_param[ix]; + fr_out->klatt_ap[ix] = fr->peaks[peak].klt_ap; + + x = fr->peaks[peak].klt_bp / 2; + if(x > 255) x = 255; + fr_out->klatt_bp[ix] = x; } - fr_out->fwidth6 = fr->peaks[6].pkwidth/2; - fr_out->fright6 = fr->peaks[6].pkright; + } + + if(fr_out->bw[1] == 0) + { + fr_out->bw[0] = 89 / 2; + fr_out->bw[1] = 90 / 2; + fr_out->bw[2] = 140 / 2; + fr_out->bw[3] = 260 / 2; } n_frames++; diff --git a/src/espeakedit.cpp b/src/espeakedit.cpp index e9f43eeb..850bf847 100755 --- a/src/espeakedit.cpp +++ b/src/espeakedit.cpp @@ -232,9 +232,9 @@ wxSashLayoutWindow *win; // Another window to the left of the client window win = new wxSashLayoutWindow(this, ID_WINDOW_LEFT2, - wxDefaultPosition, wxSize(200, 30), + wxDefaultPosition, wxSize(298, 30), wxNO_BORDER | wxSW_3D | wxCLIP_CHILDREN); - win->SetDefaultSize(wxSize(212, 1000)); + win->SetDefaultSize(wxSize(310, 1000)); win->SetOrientation(wxLAYOUT_VERTICAL); win->SetAlignment(wxLAYOUT_LEFT); // win->SetBackgroundColour(wxColour(0, 255, 255)); diff --git a/src/formantdlg.cpp b/src/formantdlg.cpp index 3b686ae1..3f07c66c 100755 --- a/src/formantdlg.cpp +++ b/src/formantdlg.cpp @@ -102,57 +102,90 @@ FormantDlg::FormantDlg(wxWindow *parent) : wxPanel(parent,-1,wxDefaultPosition,w xplace = 28; id = 201; new wxStaticText(this,-1,_T("Formants"),wxPoint(4,5)); - t_lab[4] = new wxStaticText(this,-1,_T(" BW BWp Ap"),wxPoint(78,5),wxSize(300,20)); + new wxStaticText(this,-1,_T(" Ht Width (Klatt)"),wxPoint(78,5),wxSize(300,20)); + new wxStaticText(this,-1,_T("Bw Ap Bp"),wxPoint(188,29),wxSize(300,20)); - for(ix=0; ix5) t_pkwidth[ix]->Hide(); + wxPoint(xplace+46,y+24*ix),wxSize(36,20), + wxTE_CENTRE); + + if(ix < 6) + { + t_pkwidth[ix] = new wxTextCtrl(this,id++,_T(""), + wxPoint(xplace+84,y+24*ix),wxSize(60,20), + wxTE_CENTRE); + } + + if((ix == 0) || (ix > 6)) continue; + + if(ix < 4) + { + t_klt_bw[ix] = new wxTextCtrl(this,id++,_T(""), + wxPoint(xplace+150,y+24*ix),wxSize(40,20), + wxTE_CENTRE); + } + t_klt_ap[ix] = new wxTextCtrl(this,id++,_T(""), + wxPoint(xplace+192,y+24*ix),wxSize(36,20), + wxTE_CENTRE); + t_klt_bp[ix] = new wxTextCtrl(this,id++,_T(""), + wxPoint(xplace+230,y+24*ix),wxSize(40,20), + wxTE_CENTRE); } - y=240; + y=224; t_timeframe = new wxSpinCtrl(this,T_TIMEFRAME,_T(""), wxPoint(6,y+0), wxSize(52,24), wxTE_CENTRE,0,500); - t_orig_frame = new wxStaticText(this,-1,_T("mS"),wxPoint(57,y+8)); - t_ampframe = new wxSpinCtrl(this,T_AMPFRAME,_T(""), wxPoint(100,y+0), wxSize(52,24), wxTE_CENTRE,0,500); - t_lab[3] = new wxStaticText(this,-1,_T("% amp - Frame"),wxPoint(151,y+8)); + t_orig_frame = new wxStaticText(this,-1,_T("mS"),wxPoint(61,y+8)); + t_ampframe = new wxSpinCtrl(this,T_AMPFRAME,_T(""), wxPoint(104,y+0), wxSize(52,24), wxTE_CENTRE,0,500); + t_lab[3] = new wxStaticText(this,-1,_T("% amp - Frame"),wxPoint(159,y+8)); - s_klatt[KLATT_AV] = new wxSpinCtrl(this,T_AV,_T(""), wxPoint(6,y+32), wxSize(52,24), wxTE_CENTRE,0,500); - t_klatt[KLATT_AV] = new wxStaticText(this,-1,_T("AV"),wxPoint(61,y+36)); - s_klatt[KLATT_AVp] = new wxSpinCtrl(this,T_AVP,_T(""), wxPoint(100,y+32), wxSize(52,24), wxTE_CENTRE,0,500); - t_klatt[KLATT_AVp] = new wxStaticText(this,-1,_T("AVp"),wxPoint(155,y+36)); + y += 40; + s_klatt[KLATT_AV] = new wxSpinCtrl(this,T_AV,_T(""), wxPoint(6,y), wxSize(52,24), wxTE_CENTRE,0,500); + t_klatt[KLATT_AV] = new wxStaticText(this,-1,_T("AV"),wxPoint(61,y+4)); - s_klatt[KLATT_Fric] = new wxSpinCtrl(this,T_FRIC,_T(""), wxPoint(6,y+60), wxSize(52,24), wxTE_CENTRE,0,500); - t_klatt[KLATT_Fric] = new wxStaticText(this,-1,_T("Fric"),wxPoint(61,y+64)); - s_klatt[KLATT_FricBP] = new wxSpinCtrl(this,T_FRICBP,_T(""), wxPoint(100,y+60), wxSize(52,24), wxTE_CENTRE,0,500); - t_klatt[KLATT_FricBP] = new wxStaticText(this,-1,_T("FricBP"),wxPoint(155,y+64)); + s_klatt[KLATT_FNZ] = new wxSpinCtrl(this,T_FNZ,_T(""), wxPoint(104,y), wxSize(52,24), wxTE_CENTRE,0,500); + t_klatt[KLATT_FNZ] = new wxStaticText(this,-1,_T("FNZ"),wxPoint(159,y+4)); - s_klatt[KLATT_Aspr] = new wxSpinCtrl(this,T_ASPR,_T(""), wxPoint(6,y+88), wxSize(52,24), wxTE_CENTRE,0,500); - t_klatt[KLATT_Aspr] = new wxStaticText(this,-1,_T("Aspr"),wxPoint(61,y+92)); - s_klatt[KLATT_Turb] = new wxSpinCtrl(this,T_TURB,_T(""), wxPoint(100,y+88), wxSize(52,24), wxTE_CENTRE,0,500); - t_klatt[KLATT_Turb] = new wxStaticText(this,-1,_T("Turb"),wxPoint(155,y+92)); - s_klatt[KLATT_Skew] = new wxSpinCtrl(this,T_SKEW,_T(""), wxPoint(6,y+116), wxSize(52,24), wxTE_CENTRE,0,500); - t_klatt[KLATT_Skew] = new wxStaticText(this,-1,_T("Skew"),wxPoint(61,y+120)); - s_klatt[KLATT_Tilt] = new wxSpinCtrl(this,T_TILT,_T(""), wxPoint(100,y+116), wxSize(52,24), wxTE_CENTRE,0,500); - t_klatt[KLATT_Tilt] = new wxStaticText(this,-1,_T("Tilt"),wxPoint(155,y+120)); + y += 28; + s_klatt[KLATT_Tilt] = new wxSpinCtrl(this,T_TILT,_T(""), wxPoint(6,y), wxSize(52,24), wxTE_CENTRE,0,500); + t_klatt[KLATT_Tilt] = new wxStaticText(this,-1,_T("Tilt"),wxPoint(61,y+4)); + + s_klatt[KLATT_Aspr] = new wxSpinCtrl(this,T_ASPR,_T(""), wxPoint(104,y), wxSize(52,24), wxTE_CENTRE,0,500); + t_klatt[KLATT_Aspr] = new wxStaticText(this,-1,_T("Aspr"),wxPoint(159,y+4)); + + s_klatt[KLATT_Skew] = new wxSpinCtrl(this,T_SKEW,_T(""), wxPoint(202,y), wxSize(52,24), wxTE_CENTRE,0,500); + t_klatt[KLATT_Skew] = new wxStaticText(this,-1,_T("Skew"),wxPoint(257,y+4)); + + y += 28; + s_klatt[KLATT_AVp] = new wxSpinCtrl(this,T_AVP,_T(""), wxPoint(6,y), wxSize(52,24), wxTE_CENTRE,0,500); + t_klatt[KLATT_AVp] = new wxStaticText(this,-1,_T("AVp"),wxPoint(61,y+4)); + + s_klatt[KLATT_Fric] = new wxSpinCtrl(this,T_FRIC,_T(""), wxPoint(104,y), wxSize(52,24), wxTE_CENTRE,0,500); + t_klatt[KLATT_Fric] = new wxStaticText(this,-1,_T("Fric"),wxPoint(159,y+4)); + + s_klatt[KLATT_FricBP] = new wxSpinCtrl(this,T_FRICBP,_T(""), wxPoint(202,y), wxSize(52,24), wxTE_CENTRE,0,500); + t_klatt[KLATT_FricBP] = new wxStaticText(this,-1,_T("FricBP"),wxPoint(257,y+4)); + + y += 28; + s_klatt[KLATT_Kopen] = new wxSpinCtrl(this,T_KOPEN,_T(""), wxPoint(6,y), wxSize(52,24), wxTE_CENTRE,0,500); + t_klatt[KLATT_Kopen] = new wxStaticText(this,-1,_T("kopen"),wxPoint(61,y+4)); + + s_klatt[KLATT_Turb] = new wxSpinCtrl(this,T_TURB,_T(""), wxPoint(104,y), wxSize(52,24), wxTE_CENTRE,0,500); + t_klatt[KLATT_Turb] = new wxStaticText(this,-1,_T("Turb"),wxPoint(159,y+4)); - s_klatt[KLATT_Kopen] = new wxSpinCtrl(this,T_KOPEN,_T(""), wxPoint(6,y+144), wxSize(52,24), wxTE_CENTRE,0,500); - t_klatt[KLATT_Kopen] = new wxStaticText(this,-1,_T("kopen"),wxPoint(61,y+148)); t_zoomout = new wxButton(this,T_ZOOMOUT,_T("Zoom-"),wxPoint(16,420)); @@ -168,8 +201,6 @@ FormantDlg::FormantDlg(wxWindow *parent) : wxPanel(parent,-1,wxDefaultPosition,w t_pitch = new wxStaticText(this,-1,_T(""),wxPoint(4,520),wxSize(192,24)); - HideFields(0); - pitchgraph = new ByteGraph(this,wxPoint(0,538),wxSize(200,140)); pitchgraph->SetData(128,env_fall); pitchgraph->ShowSpectrum(1); @@ -177,62 +208,71 @@ FormantDlg::FormantDlg(wxWindow *parent) : wxPanel(parent,-1,wxDefaultPosition,w } -void FormantDlg::HideFields(int synth_type) -{//======================================= + +void FormantDlg::GetValues(SpectSeq *spectseq, int frame) +{//====================================================== int ix; - static int prev_synth_type = -1; + wxString value; + long num; + SpectFrame *sf; - if(synth_type == prev_synth_type) - return; // no change + if(spectseq->frames == NULL) + return; + sf = spectseq->frames[frame]; - if(synth_type == 0) + for(ix=0; ix < 8; ix++) { - for(ix=0; ix<9; ix++) + if(ix < 7) { - s_klatt[ix]->Hide(); - t_klatt[ix]->Hide(); + num = 0; + value = t_pkfreq[ix]->GetValue(); + value.ToLong(&num); + sf->peaks[ix].pkfreq = num; } - for(ix=6; ix<9; ix++) + + num = 0; + value = t_pkheight[ix]->GetValue(); + value.ToLong(&num); + sf->peaks[ix].pkheight = num << 6; + + if(ix < 6) { - t_pkfreq[ix]->Show(); - t_pkheight[ix]->Show(); - t_pkwidth[ix]->Hide(); - t_pkright[ix]->Hide(); + num = 0; + value = t_pkwidth[ix]->GetValue(); + value.ToLong(&num); + sf->peaks[ix].pkwidth = sf->peaks[ix].pkright = num*2; + + if((ix < 3) && ((value = value.AfterFirst('/')) != wxEmptyString)) + { + num = 0; + value.ToLong(&num); + sf->peaks[ix].pkright = num*2; + } } - t_ampframe->Show(); - t_amplitude->Show(); - t_lab[2]->Show(); - t_lab[3]->Show(); - t_labpk[7]->Show(); - t_labpk[8]->Show(); - t_lab[4]->Hide(); } - else + + for(ix=1; ix < 6; ix++) { - for(ix=0; ix<9; ix++) + if(ix < 3) { - s_klatt[ix]->Show(); - t_klatt[ix]->Show(); + num = 0; + value = t_klt_bw[ix]->GetValue(); + value.ToLong(&num); + sf->peaks[ix].klt_bw = num; } - for(ix=7; ix<9; ix++) - { - t_pkfreq[ix]->Hide(); - t_pkheight[ix]->Hide(); - t_pkwidth[ix]->Hide(); - t_pkright[ix]->Hide(); - } - t_pkwidth[6]->Show(1); - t_pkright[6]->Show(1); - t_ampframe->Hide(); - t_amplitude->Hide(); - t_lab[2]->Hide(); - t_lab[3]->Hide(); - t_labpk[7]->Hide(); - t_labpk[8]->Hide(); - t_lab[4]->Show(); + + num = 0; + value = t_klt_ap[ix]->GetValue(); + value.ToLong(&num); + sf->peaks[ix].klt_ap = num; + + num = 0; + value = t_klt_bp[ix]->GetValue(); + value.ToLong(&num); + sf->peaks[ix].klt_bp = num; } - prev_synth_type = synth_type; -} +} // end of FormantDlg::GetValues + void FormantDlg::ShowFrame(SpectSeq *spectseq, int frame, int pk, int field) @@ -241,20 +281,19 @@ void FormantDlg::ShowFrame(SpectSeq *spectseq, int frame, int pk, int field) SpectFrame *sf; wxString value; int original_mS; + peak_t *peak; if(spectseq->frames == NULL) return; sf = spectseq->frames[frame]; - HideFields(spectseq->synthesizer_type); - if(field == 0xff) { // indicate the selected peak // t_select_peak[pk]->SetValue(TRUE); } - for(ix=0; ixSetLabel(value); } - if(field & 1) + peak = &(sf->peaks[ix]); + + if((field & 1) && (ix < 7)) { value.Printf(_T("%4d"),sf->peaks[ix].pkfreq); t_pkfreq[ix]->SetValue(value); @@ -278,12 +319,34 @@ void FormantDlg::ShowFrame(SpectSeq *spectseq, int frame, int pk, int field) value.Printf(_T("%3d"),sf->peaks[ix].pkheight >> 6); t_pkheight[ix]->SetValue(value); } - if(field & 4) + if((field & 4) && (ix < 6)) { - value.Printf(_T("%3d"),sf->peaks[ix].pkwidth/2); + if(sf->peaks[ix].pkwidth == sf->peaks[ix].pkright) + value.Printf(_T("%3d"),sf->peaks[ix].pkwidth/2); + else + value.Printf(_T("%3d/%3d"),sf->peaks[ix].pkwidth/2, sf->peaks[ix].pkright/2); t_pkwidth[ix]->SetValue(value); - value.Printf(_T("%3d"),sf->peaks[ix].pkright/2); - t_pkright[ix]->SetValue(value); + } + + if((ix > 0) && (ix < 7)) + { + if((field & 8) && (ix < 4)) + { + value.Printf(_T("%3d"),peak->klt_bw); + t_klt_bw[ix]->SetValue(value); + } + + if(field & 16) + { + value.Printf(_T("%3d"),peak->klt_ap); + t_klt_ap[ix]->SetValue(value); + } + + if(field & 32) + { + value.Printf(_T("%3d"),peak->klt_bp); + t_klt_bp[ix]->SetValue(value); + } } } @@ -294,15 +357,11 @@ void FormantDlg::ShowFrame(SpectSeq *spectseq, int frame, int pk, int field) value.Printf(_T("%3d"),sf->amp_adjust); t_ampframe->SetValue(value); - if(spectseq->synthesizer_type == 1) + for(ix=0; ixklatt_param[ix]); - } + SetSpinCtrl(s_klatt[ix], sf->klatt_param[ix]); } - } // end of FormantDlg::ShowFrame diff --git a/src/klatt.cpp b/src/klatt.cpp index 9f73a8f0..a10d00ea 100644 --- a/src/klatt.cpp +++ b/src/klatt.cpp @@ -30,10 +30,10 @@ #include #include #include -#include "klatt.h" #include "speak_lib.h" #include "speech.h" +#include "klatt.h" #include "phoneme.h" #include "synthesize.h" #include "voice.h" @@ -967,7 +967,7 @@ static double DBtoLIN(long dB) extern voice_t *wvoice; -static wavegen_peaks_t peaks[N_PEAKS]; +static klatt_peaks_t peaks[N_PEAKS]; static int end_wave; static int klattp[N_KLATTP]; static double klattp1[N_KLATTP]; @@ -992,20 +992,20 @@ int Wavegen_Klatt(int resume) { kt_frame.F0hz10 = (wdata.pitch * 10) / 4096; - kt_frame.Fhz[F_NP] = peaks[0].freq; - kt_frame.Fhz[F_NZ] = peaks[0].left; - // formants F6,F7,F8 are fixed values for cascade resonators, set in KlattInit() // but F6 is used for parallel resonator - for(ix=1; ix<=6; ix++) + // F0 is used for the nasal zero + for(ix=0; ix < 6; ix++) { - if(ix < 6) + kt_frame.Fhz[ix] = peaks[ix].freq; + if(ix < 4) { - kt_frame.Fhz[ix] = peaks[ix].freq; - kt_frame.Bhz[ix] = peaks[ix].height; + kt_frame.Bhz[ix] = peaks[ix].bw; } - kt_frame.Bphz[ix] = peaks[ix].left; - kt_frame.Ap[ix] = peaks[ix].right; + } + for(ix=1; ix < 7; ix++) + { + kt_frame.Ap[ix] = 0; } kt_frame.AVdb = klattp[KLATT_AV]; @@ -1023,27 +1023,30 @@ int Wavegen_Klatt(int resume) { peaks[pk].freq1 += peaks[pk].freq_inc; peaks[pk].freq = (int)peaks[pk].freq1; - peaks[pk].height1 += peaks[pk].height_inc; - peaks[pk].height = (int)peaks[pk].height1; - peaks[pk].left1 += peaks[pk].left_inc; - peaks[pk].left = (int)peaks[pk].left1; - peaks[pk].right1 += peaks[pk].right_inc; - peaks[pk].right = (int)peaks[pk].right1; + peaks[pk].bw1 += peaks[pk].bw_inc; + peaks[pk].bw = (int)peaks[pk].bw1; + peaks[pk].bp1 += peaks[pk].bp_inc; + peaks[pk].bp = (int)peaks[pk].bp1; + peaks[pk].ap1 += peaks[pk].ap_inc; + peaks[pk].ap = (int)peaks[pk].ap1; } - for(ix=1; ix<=6; ix++) - { - kt_frame.Fhz_next[ix] = peaks[ix].freq; - kt_frame.Bhz_next[ix] = peaks[ix].height; - } - kt_frame.Fhz_next[F_NZ] = peaks[0].left; - + // advance other parameters for(ix=0; ix < N_KLATTP; ix++) { klattp1[ix] += klattp_inc[ix]; klattp[ix] = int(klattp1[ix]); } + for(ix=0; ix<=6; ix++) + { + kt_frame.Fhz_next[ix] = peaks[ix].freq; + if(ix < 4) + { + kt_frame.Bhz_next[ix] = peaks[ix].bw; + } + } + // advance the pitch wdata.pitch_ix += wdata.pitch_inc; if((ix = wdata.pitch_ix>>8) > 127) ix = 127; @@ -1163,48 +1166,66 @@ void SetSynth_Klatt(int length, int modn, frame_t *fr1, frame_t *fr2, voice_t *v for(ix=0; ixklattp[ix]; - klattp_inc[ix] = double((fr2->klattp[ix] - klattp[ix]) * STEPSIZE)/length; + if((ix >= 5) && ((fr1->frflags & FRFLAG_KLATT) == 0)) + { + klattp1[ix] = klattp[ix] = 0; + klattp_inc[ix] = 0; + } + else + { + klattp1[ix] = klattp[ix] = fr1->klattp[ix]; + klattp_inc[ix] = double((fr2->klattp[ix] - klattp[ix]) * STEPSIZE)/length; + } - if((ix>0) && (ix < KLATT_AVp)) - klattp1[ix] = klattp[ix] = (klattp[ix] + wvoice->klattv[ix]); + // get klatt parameter adjustments for the voice +// if((ix>0) && (ix < KLATT_AVp)) +// klattp1[ix] = klattp[ix] = (klattp[ix] + wvoice->klattv[ix]); } nsamples = length; - for(ix=0; ixffreq[ix] * v->freq[ix] / 256.0) + v->freqadd[ix]; peaks[ix].freq = int(peaks[ix].freq1); next = (fr2->ffreq[ix] * v->freq[ix] / 256.0) + v->freqadd[ix]; - peaks[ix].freq_inc = ((next - peaks[ix].freq1) * STEPSIZE) / length; // lower headroom for fixed point math + peaks[ix].freq_inc = ((next - peaks[ix].freq1) * STEPSIZE) / length; - peaks[ix].height1 = fr1->fheight[ix] * 2; - peaks[ix].height = int(peaks[ix].height1); - next = fr2->fheight[ix] * 2; - peaks[ix].height_inc = ((next - peaks[ix].height1) * STEPSIZE) / length; - - if(ix < 6) + if(ix < 4) { - peaks[ix].left1 = fr1->fwidth[ix] * 2; - peaks[ix].left = int(peaks[ix].left1); - next = fr2->fwidth[ix] * 2; - peaks[ix].left_inc = ((next - peaks[ix].left1) * STEPSIZE) / length; - - peaks[ix].right1 = fr1->fright[ix]; - peaks[ix].right = int(peaks[ix].right1); - next = fr2->fright[ix]; - peaks[ix].right_inc = ((next - peaks[ix].right1) * STEPSIZE) / length; + // klatt bandwidth for f1, f2, f3 (others are fixed) + peaks[ix].bw1 = fr1->bw[ix] * 2; + peaks[ix].bw = int(peaks[ix].bw1); + next = fr2->bw[ix] * 2; + peaks[ix].bw_inc = ((next - peaks[ix].bw1) * STEPSIZE) / length; } - peaks[6].left1 = fr1->fwidth6 * 2; - peaks[6].left = int(peaks[6].left1); - next = fr2->fwidth6 * 2; - peaks[6].left_inc = ((next - peaks[6].left1) * STEPSIZE) / length; + } - peaks[6].right1 = fr1->fright6; - peaks[6].right = int(peaks[6].right1); - next = fr2->fright6; - peaks[6].right_inc = ((next - peaks[6].right1) * STEPSIZE) / length; + // nasal zero frequency + peaks[0].freq1 = fr1->klattp[KLATT_FNZ] * 2; + peaks[0].freq = int(peaks[0].freq1); + next = fr2->klattp[KLATT_FNZ] * 2; + peaks[0].freq_inc = ((next - peaks[0].freq1) * STEPSIZE) / length; + + peaks[0].bw1 = 89; + peaks[0].bw = 89; + peaks[0].bw_inc = 0; + + if(fr1->frflags & FRFLAG_KLATT) + { + // the frame contains additional parameters for parallel resonators + for(ix=1; ix < 7; ix++) + { + peaks[ix].bp1 = fr1->klatt_bp[ix] * 4; // parallel bandwidth + peaks[ix].bp = int(peaks[ix].bp1); + next = fr2->klatt_bp[ix] * 2; + peaks[ix].bp_inc = ((next - peaks[ix].bp1) * STEPSIZE) / length; + + peaks[ix].ap1 = fr1->klatt_ap[ix]; // parallal amplitude + peaks[ix].ap = int(peaks[ix].ap1); + next = fr2->klatt_ap[ix] * 2; + peaks[ix].ap_inc = ((next - peaks[ix].ap1) * STEPSIZE) / length; + } } } // end of SetSynth_Klatt @@ -1276,7 +1297,7 @@ void KlattInit() kt_frame.Kskew = 0; kt_frame.AB = 0; kt_frame.AVpdb = 0; - kt_frame.Gain0 = 62; + kt_frame.Gain0 = 60; // 62 } // end of KlattInit #endif // INCLUDE_KLATT diff --git a/src/klatt.h b/src/klatt.h index 812385e6..5583b178 100644 --- a/src/klatt.h +++ b/src/klatt.h @@ -99,14 +99,14 @@ typedef struct /* Structure for Klatt Parameters */ -#define F_NP 0 // nasal zero formant +#define F_NZ 0 // nasal zero formant #define F1 1 #define F2 2 #define F3 3 #define F4 4 #define F5 5 #define F6 6 -#define F_NZ 9 // nasal pole formant +#define F_NP 9 // nasal pole formant typedef struct @@ -135,4 +135,19 @@ typedef struct } klatt_frame_t, *klatt_frame_ptr; +typedef struct { + int freq; // Hz + int bw; // klatt bandwidth + int ap; // parallel amplitude + int bp; // parallel bandwidth + DOUBLEX freq1; // floating point versions of the above + DOUBLEX bw1; + DOUBLEX ap1; + DOUBLEX bp1; + DOUBLEX freq_inc; // increment by this every 64 samples + DOUBLEX bw_inc; + DOUBLEX ap_inc; + DOUBLEX bp_inc; +} klatt_peaks_t; + diff --git a/src/numbers.cpp b/src/numbers.cpp index 37719193..9c74eaca 100644 --- a/src/numbers.cpp +++ b/src/numbers.cpp @@ -1248,7 +1248,7 @@ static int TranslateNumber_1(Translator *tr, char *word, char *ph_out, unsigned value = this_value = atoi(word); ph_ordinal2[0] = 0; - if((tr->langopts.numbers & 0x10000) && (word[ix] == '.')) + if((tr->langopts.numbers & 0x10000) && (word[ix] == '.') && !isdigit(word[ix+2])) { // ordinal number is indicated by dot after the number ordinal = 2; diff --git a/src/speak.cpp b/src/speak.cpp index 0b908864..8ad86ca7 100755 --- a/src/speak.cpp +++ b/src/speak.cpp @@ -445,7 +445,7 @@ static void StopSpeak(int unused) }; int optind; static int optional_argument; - static const char *arg_opts = "afklpsvw"; // which options have arguments + static const char *arg_opts = "abfgklpsvw"; // which options have arguments static char *opt_string=""; #define no_argument 0 #define required_argument 1 @@ -568,7 +568,7 @@ int main (int argc, char **argv) #else while(true) { - c = getopt_long (argc, argv, "a:b:f:g:hk:l:p:qs:v:w:xXmz", + c = getopt_long (argc, argv, "a:b:f:g:hk:l:p:qs:v:w:xXmz", // NOTE: also change arg_opts to indicate which commands have a numeric value long_options, &option_index); /* Detect the end of the options. */ diff --git a/src/speak_lib.cpp b/src/speak_lib.cpp index 6d775ed0..42381056 100644 --- a/src/speak_lib.cpp +++ b/src/speak_lib.cpp @@ -523,7 +523,7 @@ void MarkerEvent(int type, unsigned int char_position, int value, unsigned char ep->type = (espeak_EVENT_TYPE)type; ep->unique_identifier = my_unique_identifier; ep->user_data = my_user_data; - ep->text_position = char_position & 0xffff; + ep->text_position = char_position & 0xffffff; ep->length = char_position >> 24; time = (double(count_samples + mbrola_delay + (out_ptr - out_start)/2)*1000.0)/samplerate; diff --git a/src/spect.cpp b/src/spect.cpp index e8f48edc..f55a6d1a 100755 --- a/src/spect.cpp +++ b/src/spect.cpp @@ -61,7 +61,8 @@ static int default_freq[N_PEAKS] = {200,500,1200,3000,3500,4000,6900,7800,9000}; static int default_width[N_PEAKS] = {750,500,550,550,600,700,700,700,700}; - +static int default_klt_bw[N_PEAKS] = + {89,90,140,260,260,260,500,500,500}; float SpectTilt(int value, int freq) {//================================= @@ -113,8 +114,15 @@ SpectFrame::SpectFrame(SpectFrame *copy) peaks[ix].pkheight = 0; peaks[ix].pkwidth = default_width[ix]; peaks[ix].pkright = default_width[ix]; + peaks[ix].klt_bw = default_klt_bw[ix]; + peaks[ix].klt_ap = 0; + peaks[ix].klt_bp = default_klt_bw[ix]; } + memset(klatt_param, 0, sizeof(klatt_param)); + klatt_param[KLATT_AV] = 59; + klatt_param[KLATT_Kopen] = 40; + if(copy != NULL) { *this = *copy; @@ -133,11 +141,11 @@ SpectFrame::~SpectFrame() int SpectFrame::Import(wxInputStream& stream1) {//========================================== +// Import Pratt analysis data int ix; double x; unsigned short *spect_data; - synthesizer_type = 0; wxTextInputStream stream(stream1); stream >> time; @@ -274,13 +282,13 @@ int SpectFrame::ImportSPC2(wxInputStream& stream, float &time_acc) -int SpectFrame::Load(wxInputStream& stream, int synth_type) -{//======================================================== +int SpectFrame::Load(wxInputStream& stream, int file_format_type) +{//============================================================== int ix; int x; unsigned short *spect_data; - synthesizer_type = synth_type; + file_format = file_format_type; wxDataInputStream s(stream); time = s.ReadDouble(); @@ -291,6 +299,12 @@ int SpectFrame::Load(wxInputStream& stream, int synth_type) markers = s.Read16(); amp_adjust = s.Read16(); + if(file_format == 2) + { + s.Read16(); // spare + s.Read16(); // spare + } + for(ix=0; ix 0) { - for(ix=0; ix 0) { - for(ix=0; ixpkfreq == 0) || (pk->pkheight==0)) continue; - if(synthesizer_type==1) - { - if(peak==0) continue; - - height = pk->pkheight + (64 * 64); - height = (500000/height) * 100; - pkright = pkwidth = pk->pkheight / 16; - } - else - { - height = pk->pkheight; - pkright = pk->pkright; - pkwidth = pk->pkwidth; - } + height = pk->pkheight; + pkright = pk->pkright; + pkwidth = pk->pkwidth; x1 = (int)(pk->pkfreq*scale_x); x2 = (int)((pk->pkfreq + pkright)*scale_x); @@ -678,8 +701,6 @@ void SpectFrame::KlattDefaults() int bw; int bw3; - synthesizer_type = 1; - klatt_param[KLATT_AV] = 59; klatt_param[KLATT_AVp] = 0; klatt_param[KLATT_Fric] = 0; @@ -689,7 +710,7 @@ void SpectFrame::KlattDefaults() klatt_param[KLATT_Skew] = 0; klatt_param[KLATT_Tilt] = 0; klatt_param[KLATT_Kopen] = 40; - klatt_param[KLATT_spare1] = 0; + klatt_param[KLATT_FNZ] = 280; bw = 60; if(peaks[1].pkfreq < 400) diff --git a/src/spect.h b/src/spect.h index 85b71837..2b31a113 100755 --- a/src/spect.h +++ b/src/spect.h @@ -48,11 +48,13 @@ #define T_SKEW 318 #define T_TILT 319 #define T_KOPEN 320 +#define T_FNZ 321 #define FILEID1_SPECTSEQ 0x43455053 #define FILEID2_SPECTSEQ 0x51455354 // for eSpeak sequence #define FILEID2_SPECTSEK 0x4b455354 // for Klatt sequence +#define FILEID2_SPECTSQ2 0x32515354 // with Klatt data #define FILEID1_SPC2 0x32435053 // an old format for spectrum files @@ -72,10 +74,20 @@ typedef struct { } PitchEnvelope; typedef struct { - short freq; - short bandw; + short freq; + short bandw; } formant_t; +typedef struct { + short pkfreq; + short pkheight; + short pkwidth; + short pkright; + short klt_bw; + short klt_ap; + short klt_bp; +} peak_t; + //=============================================================================================== // Old "SPC2" format @@ -122,7 +134,7 @@ public: ~SpectFrame(); int Import(wxInputStream &stream); int ImportSPC2(wxInputStream &stream, float &time_acc); - int Load(wxInputStream &stream, int synthesizer_type); + int Load(wxInputStream &stream, int file_format_type); int Save(wxOutputStream &stream); void Draw(wxDC &dc, int offy, int frame_width, double scalex, double scaley); @@ -149,10 +161,10 @@ public: int nx; int markers; int max_y; - int synthesizer_type; // 0=eSpeak, 1=Klatt + int file_format; // 0=eSpeak, 1=Klatt, 2=eSpeak+Klatt USHORT *spect; // sqrt of harmonic amplitudes, 1-nx at 'pitch' - short klatt_param[N_KLATTP]; + short klatt_param[N_KLATTP2]; formant_t formants[N_PEAKS]; // this is just the estimate given by Praat peak_t peaks[N_PEAKS]; @@ -187,7 +199,6 @@ public: float GetKeyedLength(); void SetFrameLengths(); void ConstructVowel(void); - void SetKlattDefaults(void); int numframes; int amplitude; @@ -203,7 +214,7 @@ public: int bass_reduction; int max_x; int max_y; - int synthesizer_type; + int file_format; private: @@ -281,6 +292,7 @@ class FormantDlg : public wxPanel public: FormantDlg(wxWindow *parent); void ShowFrame(SpectSeq *spectseq, int frame, int pk, int field); + void GetValues(SpectSeq *spectseq, int frame); void OnCommand(wxCommandEvent& event); void OnSpin(wxSpinEvent& event); void HideFields(int synth_type); @@ -304,7 +316,9 @@ class FormantDlg : public wxPanel wxTextCtrl *t_pkfreq[N_PEAKS]; wxTextCtrl *t_pkheight[N_PEAKS]; wxTextCtrl *t_pkwidth[N_PEAKS]; - wxTextCtrl *t_pkright[N_PEAKS]; + wxTextCtrl *t_klt_bw[N_PEAKS]; + wxTextCtrl *t_klt_ap[N_PEAKS]; + wxTextCtrl *t_klt_bp[N_PEAKS]; wxRadioButton *t_select_peak[N_PEAKS]; wxButton *t_zoomout; diff --git a/src/spectdisplay.cpp b/src/spectdisplay.cpp index 897038ee..b535fc1f 100755 --- a/src/spectdisplay.cpp +++ b/src/spectdisplay.cpp @@ -253,7 +253,7 @@ void SpectDisplay::RefreshDialogValues(int type) sf->amp_adjust = formantdlg->t_ampframe->GetValue(); sf->length_adjust = formantdlg->t_timeframe->GetValue() - spectseq->GetFrameLength(sframe,0,NULL); - for(ix=0; ix<9; ix++) + for(ix=0; ix < N_KLATTP; ix++) { sf->klatt_param[ix] = formantdlg->s_klatt[ix]->GetValue(); } @@ -550,6 +550,7 @@ void SpectDisplay::OnKey(wxKeyEvent& event) case WXK_NEXT: if(sframe < spectseq->numframes-1) { + formantdlg->GetValues(spectseq, sframe); spectseq->SelectAll(0); sframe++; spectseq->frames[sframe]->selected = 1; @@ -560,6 +561,7 @@ void SpectDisplay::OnKey(wxKeyEvent& event) case WXK_PRIOR: if(sframe > 0) { + formantdlg->GetValues(spectseq, sframe); spectseq->SelectAll(0); sframe--; spectseq->frames[sframe]->selected = 1; @@ -633,14 +635,15 @@ void SpectDisplay::OnKey(wxKeyEvent& event) if(event.ControlDown()) { // CTRL, rotate, make right slope steeper - if(spectseq->synthesizer_type==0) + if(pk_num < 3) + { pk->pkright-= 5; - pk->pkwidth += 5; + pk->pkwidth += 5; + } } else { - if(spectseq->synthesizer_type==0) - pk->pkright -= 10; + pk->pkright -= 10; pk->pkwidth -= 10; if(pk->pkright < 0) pk->pkright = 0; @@ -655,14 +658,15 @@ void SpectDisplay::OnKey(wxKeyEvent& event) if(event.ControlDown()) { // CTRL: rotate, make left slope steeper - if(spectseq->synthesizer_type==0) + if(pk_num < 3) + { pk->pkright += 5; - pk->pkwidth -= 5; + pk->pkwidth -= 5; + } } else { - if(spectseq->synthesizer_type==0) - pk->pkright += 10; + pk->pkright += 10; pk->pkwidth += 10; } field = 4; @@ -670,8 +674,7 @@ void SpectDisplay::OnKey(wxKeyEvent& event) break; case '<': // width-- - if(spectseq->synthesizer_type==0) - pk->pkright -= 2; + pk->pkright -= 2; pk->pkwidth -= 2; if(pk->pkwidth < 0) pk->pkwidth = 0; @@ -680,8 +683,7 @@ void SpectDisplay::OnKey(wxKeyEvent& event) break; case '>': // width++ - if(spectseq->synthesizer_type==0) - pk->pkright += 2; + pk->pkright += 2; pk->pkwidth += 2; display = 1; field = 4; @@ -744,8 +746,8 @@ void SpectDisplay::OnKey(wxKeyEvent& event) break; case 0x104b: // CTRL-K - spectseq->SetKlattDefaults(); - display = 3; +// spectseq->SetKlattDefaults(); +// display = 3; break; case 0x104d: // CTRL-M @@ -865,28 +867,25 @@ void SpectDisplay::OnKey(wxKeyEvent& event) sf = spectseq->frames[sframe]; pk = &sf->peaks[pk_num]; - if(spectseq->synthesizer_type==0) - { - if(pk->pkwidth < 50) pk->pkwidth = 50; // min. width - if(pk->pkright < 50) pk->pkright = 50; + if(pk->pkwidth < 50) pk->pkwidth = 50; // min. width + if(pk->pkright < 50) pk->pkright = 50; - // ensure minimum separation between peaks & prevent crossover - if(direction > 0) + // ensure minimum separation between peaks & prevent crossover + if(direction > 0) + { + for(i=pk_num+1; ipeaks[i].pkfreq < sf->peaks[i-1].pkfreq + 100) - sf->peaks[i].pkfreq = sf->peaks[i-1].pkfreq + 100; - } + if(sf->peaks[i].pkfreq < sf->peaks[i-1].pkfreq + 100) + sf->peaks[i].pkfreq = sf->peaks[i-1].pkfreq + 100; } - else - if(direction < 0) + } + else + if(direction < 0) + { + for(i=pk_num-1; i>=0; i--) { - for(i=pk_num-1; i>=0; i--) - { - if(sf->peaks[i].pkfreq > sf->peaks[i+1].pkfreq - 100) - sf->peaks[i].pkfreq = sf->peaks[i+1].pkfreq - 100; - } + if(sf->peaks[i].pkfreq > sf->peaks[i+1].pkfreq - 100) + sf->peaks[i].pkfreq = sf->peaks[i+1].pkfreq - 100; } } @@ -957,6 +956,7 @@ void SpectDisplay::OnMouse(wxMouseEvent& event) if(frame < spectseq->numframes) { + formantdlg->GetValues(spectseq,sframe); if(sframe != frame) formantdlg->ShowFrame(spectseq,frame,pk_num,0xff); diff --git a/src/spectseq.cpp b/src/spectseq.cpp index 27f7f9e2..b597fbd4 100755 --- a/src/spectseq.cpp +++ b/src/spectseq.cpp @@ -147,7 +147,7 @@ SpectSeq::SpectSeq(int n) max_x = 3000; max_y = 1; - synthesizer_type = 0; + file_format = 0; } SpectSeq::~SpectSeq() @@ -391,7 +391,7 @@ void SpectSeq::Load2(wxInputStream& stream, int import, int n) } else { - if(frame->Load(stream, synthesizer_type) != 0) break; + if(frame->Load(stream, file_format) != 0) break; } frames[numframes++] = frame; @@ -424,6 +424,7 @@ else int SpectSeq::Import(wxInputStream& stream) {//======================================== +// Import data from Pratt analysis int n = 0; @@ -509,12 +510,17 @@ int SpectSeq::Load(wxInputStream & stream) else if((id1 == FILEID1_SPECTSEQ) && (id2 == FILEID2_SPECTSEQ)) { - synthesizer_type = 0; // eSpeak formants + file_format = 0; // eSpeak formants } else if((id1 == FILEID1_SPECTSEQ) && (id2 == FILEID2_SPECTSEK)) { - synthesizer_type = 1; // formants for Klatt synthesizer + file_format = 1; // formants for Klatt synthesizer + } + else + if((id1 == FILEID1_SPECTSEQ) && (id2 == FILEID2_SPECTSQ2)) + { + file_format = 2; // formants for Klatt synthesizer } else { @@ -554,7 +560,9 @@ int SpectSeq::Save(wxOutputStream &stream, int selection) wxDataOutputStream s(stream); s.Write32(FILEID1_SPECTSEQ); - if(synthesizer_type == 1) + if(file_format == 2) + s.Write32(FILEID2_SPECTSQ2); + if(file_format == 1) s.Write32(FILEID2_SPECTSEK); else s.Write32(FILEID2_SPECTSEQ); @@ -576,24 +584,6 @@ int SpectSeq::Save(wxOutputStream &stream, int selection) -void SpectSeq::SetKlattDefaults(void) -{//================================== - int ix; - - synthesizer_type = 1; - - for(ix=0; ixkeyframe) - { - frames[ix]->KlattDefaults(); - } - frames[ix]->synthesizer_type = 1; - } -} - - - void SpectSeq::ConstructVowel(void) {//================================ @@ -924,13 +914,10 @@ void SpectSeq::ApplyAmp_adjust(SpectFrame *sp, peak_t *peaks) memcpy(peaks,sp->peaks,sizeof(*peaks)*N_PEAKS); - if(synthesizer_type == 0) + for(ix=0; ixamp_adjust * amplitude; - peaks[ix].pkheight = y / 10000; - } + y = peaks[ix].pkheight * sp->amp_adjust * amplitude; + peaks[ix].pkheight = y / 10000; } } // end of ApplyAmp_adjust @@ -939,44 +926,26 @@ void SpectSeq::ApplyAmp_adjust(SpectFrame *sp, peak_t *peaks) void PeaksToFrame(SpectFrame *sp1, peak_t *pks, frame_t *fr) {//========================================================= int ix; - int x, x2; + int x; - for(ix=0; ixffreq[ix] = pks[ix].pkfreq; - - if(sp1->synthesizer_type==0) - { - x = pks[ix].pkheight >> 6; - } - else - { - x = pks[ix].pkheight >> 7; - fr->fwidth6 = pks[6].pkwidth >> 1; - fr->fright6 = pks[6].pkright; - } - - if(x > 255) - x = 255; - fr->fheight[ix] = x; + if(ix < 7) + fr->ffreq[ix] = pks[ix].pkfreq; + fr->fheight[ix] = pks[ix].pkheight >> 6; if(ix < 6) { - x = pks[ix].pkwidth/2; - x2 = pks[ix].pkright; - - if(sp1->synthesizer_type == 0) - { - x /= 2; - x2 /= 4; - } - if(x > 255) + if((x = (pks[ix].pkwidth >> 2)) > 255) x = 255; fr->fwidth[ix] = x; - if(x2 > 255) - x2 = 255; - fr->fright[ix] = x2; + if(ix < 3) + { + if((x = (pks[ix].pkright >> 2)) > 255) + x = 255; + fr->fright[ix] = x; + } } } @@ -994,11 +963,7 @@ static void SetSynth_mS(int length_mS, SpectFrame *sp1, SpectFrame *sp2, peak_t PeaksToFrame(sp2,pks2,&fr2); #ifdef KLATT_TEST - if(sp1->synthesizer_type == 1) - { - SetSynth_Klatt((length_mS * samplerate) / 1000, 0, &fr1, &fr2, voice, control); // convert mS to samples - } - else +// SetSynth_Klatt((length_mS * samplerate) / 1000, 0, &fr1, &fr2, voice, control); // convert mS to samples #endif { SetSynth((length_mS * samplerate) / 1000, 0, &fr1, &fr2, voice); // convert mS to samples @@ -1025,6 +990,7 @@ void SpectSeq::MakeWave(int start, int end, PitchEnvelope &pitch) peak_t peaks0[N_PEAKS]; peak_t peaks1[N_PEAKS]; peak_t peaks2[N_PEAKS]; + int synthesizer_type = 0; #ifdef KLATT_TEST KlattInit(); @@ -1158,6 +1124,7 @@ void SpectFrame::MakeWaveF(int control, PitchEnvelope &pitche, int amplitude, in int ipitch; int pbase; char *fname_speech; + int synthesizer_type = 0; #ifdef KLATT_TEST KlattInit(); diff --git a/src/speech.h b/src/speech.h index 423e573d..3a0007a5 100755 --- a/src/speech.h +++ b/src/speech.h @@ -21,7 +21,7 @@ #include // conditional compilation options -//#define INCLUDE_KLATT +#define INCLUDE_KLATT #if defined(BYTE_ORDER) && BYTE_ORDER == BIG_ENDIAN #define ARCH_BIG diff --git a/src/synthdata.cpp b/src/synthdata.cpp index fa835268..629da885 100755 --- a/src/synthdata.cpp +++ b/src/synthdata.cpp @@ -35,8 +35,8 @@ #include "translate.h" #include "wave.h" -const char *version_string = "1.40.13 5.Apr.09"; -const int version_phdata = 0x014000; +const char *version_string = "1.40.21 29.May.09"; +const int version_phdata = 0x014015; int option_device_number = -1; diff --git a/src/synthesize.cpp b/src/synthesize.cpp index 4382d609..3709d834 100755 --- a/src/synthesize.cpp +++ b/src/synthesize.cpp @@ -353,7 +353,7 @@ static void set_frame_rms(frame_t *fr, int new_rms) 849,851,853,856,858,861,863,865,868,870,872,875,877,879,882,884, 886,889,891,893,896,898,900,902}; - if(fr->frflags & FRFLAG_KLATT) + if(voice->klattv[0]) { if(new_rms == -1) { @@ -368,7 +368,7 @@ static void set_frame_rms(frame_t *fr, int new_rms) x = sqrt_tab[x]; // sqrt(new_rms/fr->rms)*0x200; - for(ix=0; ixfheight[ix] * x; fr->fheight[ix] = h/0x200; @@ -383,10 +383,10 @@ static void formants_reduce_hf(frame_t *fr, int level) int ix; int x; - if(fr->frflags & FRFLAG_KLATT) + if(voice->klattv[0]) return; - for(ix=2; ixfheight[ix] * level; fr->fheight[ix] = x/100; @@ -551,7 +551,7 @@ static short vcolouring[N_VCOLOUR][5] = { next_rms = seq[1].frame->rms; -if(fr->frflags & FRFLAG_KLATT) +if(voice->klattv[0]) { fr->klattp[KLATT_AV] = 53; // reduce the amplituide of the start of a vowel } @@ -676,9 +676,6 @@ static void SmoothSpect(void) q = wcmdq[syllable_centre]; frame_centre = (frame_t *)q[2]; -//if(frame_centre->frflags & FRFLAG_KLATT) -// return; // TESTING - // backwards ix = syllable_centre -1; frame = frame2 = frame_centre; @@ -911,7 +908,7 @@ if(which==1) frame1 = frames[0].frame; frame1_length = frames[0].length; - if(frame1->frflags & FRFLAG_KLATT) + if(voice->klattv[0]) wcmd_spect = WCMD_KLATT; if(wavefile_ix == 0) @@ -920,14 +917,14 @@ if(which==1) { // cancel any wavefile that was playing previously wcmd_spect = WCMD_SPECT2; - if(frame1->frflags & FRFLAG_KLATT) + if(voice->klattv[0]) wcmd_spect = WCMD_KLATT2; wave_flag = 0; } else { wcmd_spect = WCMD_SPECT; - if(frame1->frflags & FRFLAG_KLATT) + if(voice->klattv[0]) wcmd_spect = WCMD_KLATT; } } @@ -944,9 +941,10 @@ if(which==1) { // but flag indicates keep HF peaks in last segment fr = CopyFrame(frame1,1); - for(ix=3; ixffreq[ix] = last_frame->ffreq[ix]; + if(ix < 7) + fr->ffreq[ix] = last_frame->ffreq[ix]; fr->fheight[ix] = last_frame->fheight[ix]; } wcmdq[last_wcmdq][3] = (long)fr; diff --git a/src/synthesize.h b/src/synthesize.h index d13466b7..193b9329 100755 --- a/src/synthesize.h +++ b/src/synthesize.h @@ -70,25 +70,52 @@ extern int embedded_default[N_EMBEDDED_VALUES]; #define N_PEAKS 9 #define N_MARKERS 8 -typedef struct { - short pkfreq; - short pkheight; - short pkwidth; - short pkright; -} peak_t; - #define N_KLATTP 10 // this affects the phoneme data file format +#define N_KLATTP2 14 // used in vowel files, with extra parameters for future extensions + #define KLATT_AV 0 -#define KLATT_Kopen 1 -#define KLATT_Skew 2 -#define KLATT_Tilt 3 -#define KLATT_Turb 4 -#define KLATT_Aspr 5 -#define KLATT_AVp 6 // this is after the parameters which can be change by the Voice +#define KLATT_FNZ 1 // nasal zero freq +#define KLATT_Tilt 2 +#define KLATT_Aspr 3 +#define KLATT_Skew 4 + +#define KLATT_Kopen 5 +#define KLATT_AVp 6 #define KLATT_Fric 7 #define KLATT_FricBP 8 -#define KLATT_spare1 9 +#define KLATT_Turb 9 + + +typedef struct { // 44 bytes + short frflags; + short ffreq[7]; + unsigned char length; + unsigned char rms; + unsigned char fheight[8]; + unsigned char fwidth[6]; // width/4 f0-5 + unsigned char fright[3]; // width/4 f0-2 + unsigned char bw[4]; // Klatt bandwidth BNZ /2, f1,f2,f3 + unsigned char klattp[5]; // AV, FNZ, Tilt, Aspr, Skew + unsigned char klattp2[5]; // continuation of klattp[], Avp, Fric, FricBP, Turb + unsigned char klatt_ap[7]; // Klatt parallel amplitude + unsigned char klatt_bp[7]; // Klatt parallel bandwidth /2 +} frame_t; // with extra Klatt parameters for parallel resonators + +typedef struct { // 44 bytes + short frflags; + short ffreq[7]; + unsigned char length; + unsigned char rms; + unsigned char fheight[8]; + unsigned char fwidth[6]; // width/4 f0-5 + unsigned char fright[3]; // width/4 f0-2 + unsigned char bw[4]; // Klatt bandwidth BNZ /2, f1,f2,f3 + unsigned char klattp[5]; // AV, FNZ, Tilt, Aspr, Skew +} frame_t2; // TESTING + + +#ifdef deleted typedef struct { short frflags; unsigned char length; @@ -110,19 +137,7 @@ typedef struct { // 43 bytes unsigned char fwidth[6]; // width/4 unsigned char fright[6]; // width/4 } frame_t2; // the original, without Klatt additions, used for file "phondata" - - -typedef struct { // 44 bytes - short frflags; - short ffreq[7]; - unsigned char length; - unsigned char rms; - unsigned char fheight[8]; - unsigned char fwidth[6]; // width/4 f0-5 - unsigned char fright[3]; // width/4 f0-2 - unsigned char bw[4]; // Klatt bandwidth BNZ, f1,f2,f3 - unsigned char klattp[5]; // AV, FNZ, Tilt, spare, spare (Aspr, Skew ?) -} frame_t3; // TESTING +#endif diff --git a/src/tr_languages.cpp b/src/tr_languages.cpp index f254d26b..092595a2 100644 --- a/src/tr_languages.cpp +++ b/src/tr_languages.cpp @@ -39,6 +39,7 @@ #define L_qa 0x716100 #define L_grc 0x677263 // grc Ancient Greek #define L_jbo 0x6a626f // jbo Lojban +#define L_pap 0x706170 // pap Papiamento #define L_zhy 0x7a6879 // zhy // start of unicode pages for character sets @@ -318,7 +319,7 @@ Translator *SelectTranslator(const char *name) tr->langopts.stress_rule = 0; SetLetterVowel(tr,'y'); -// tr->langopts.numbers = 0x11849; + tr->langopts.numbers = 0x10c59; } break; @@ -415,6 +416,7 @@ Translator *SelectTranslator(const char *name) case L('e','s'): // Spanish case L('c','a'): // Catalan + case L_pap: // Papiamento { static const short stress_lengths_es[8] = {180, 210, 190, 190, 0, 0, 230, 260}; // static const short stress_lengths_es[8] = {170, 200, 180, 180, 0, 0, 220, 250}; @@ -440,6 +442,11 @@ Translator *SelectTranslator(const char *name) tr->punct_within_word = ca_punct_within_word; tr->langopts.stress_flags = 0x200 | 0x6 | 0x30; // stress last syllable unless word ends with a vowel } + else + if(name2 == L_pap) + { + tr->langopts.stress_flags = 0x100 | 0x6 | 0x30; // stress last syllable unless word ends with a vowel + } } break; @@ -467,9 +474,9 @@ Translator *SelectTranslator(const char *name) tr->langopts.param[LOPT_IT_DOUBLING] = 1; tr->langopts.long_stop = 130; - tr->langopts.numbers = 0x1809; + tr->langopts.numbers = 0x1009; SetLetterVowel(tr,'y'); - tr->langopts.max_initial_consonants = 2; +// tr->langopts.max_initial_consonants = 2; // BUT foreign words may have 3 tr->langopts.spelling_stress = 1; tr->langopts.intonation_group = 3; // less intonation, don't raise pitch at comma } diff --git a/src/transldlg.cpp b/src/transldlg.cpp index 899fc4bc..4ee2370d 100755 --- a/src/transldlg.cpp +++ b/src/transldlg.cpp @@ -278,9 +278,9 @@ TranslDlg::TranslDlg(wxWindow *parent) : wxPanel(parent) {//===================================================== t_source = new wxTextCtrl(this,T_SOURCE,_T(""),wxPoint(0,4), - wxSize(204,250),wxTE_MULTILINE); + wxSize(298,250),wxTE_MULTILINE); t_phonetic = new wxTextCtrl(this,T_PHONETIC,_T(""),wxPoint(0,262), - wxSize(204,350),wxTE_MULTILINE); + wxSize(298,350),wxTE_MULTILINE); t_translate = new wxButton(this,T_TRANSLATE,_T("Translate"),wxPoint(4,620)); t_translate = new wxButton(this,T_RULES,_T("Show Rules"),wxPoint(4,652)); diff --git a/src/voices.cpp b/src/voices.cpp index 65b564d0..6b0620d8 100755 --- a/src/voices.cpp +++ b/src/voices.cpp @@ -366,7 +366,7 @@ void VoiceReset(int tone_only) // Set voice to the default values int pk; - static unsigned char default_heights[N_PEAKS] = {255,255,240,240,220,220,255,255,255}; + static unsigned char default_heights[N_PEAKS] = {128,128,120,120,110,110,128,128,128}; static unsigned char default_widths[N_PEAKS] = {128,128,128,160,171,171,128,128,128}; static int breath_widths[N_PEAKS] = {0,200,200,400,400,400,600,600,600}; @@ -400,7 +400,7 @@ void VoiceReset(int tone_only) for(pk=0; pkfreq[pk] = 256; - voice->height[pk] = default_heights[pk]; + voice->height[pk] = default_heights[pk]*2; voice->width[pk] = default_widths[pk]*2; voice->breath[pk] = 0; voice->breathw[pk] = breath_widths[pk]; // default breath formant woidths @@ -839,7 +839,7 @@ voice_t *LoadVoice(const char *vname, int control) case V_TONE: { - int tone_data[10]; + int tone_data[12]; ReadTonePoints(p,tone_data); SetToneAdjust(voice,tone_data); } @@ -880,6 +880,7 @@ voice_t *LoadVoice(const char *vname, int control) break; case V_KLATT: + voice->klattv[0] = 1; // default source: IMPULSIVE Read8Numbers(p,voice->klattv); voice->klattv[KLATT_Kopen] -= 40; break; diff --git a/src/wavegen.cpp b/src/wavegen.cpp index a5d7df7a..67235c34 100755 --- a/src/wavegen.cpp +++ b/src/wavegen.cpp @@ -988,14 +988,24 @@ static void AdvanceParameters() peaks[ix].height = 0; peaks[ix].left1 += peaks[ix].left_inc; peaks[ix].left = int(peaks[ix].left1); - peaks[ix].right1 += peaks[ix].right_inc; - peaks[ix].right = int(peaks[ix].right1); + if(ix < 3) + { + peaks[ix].right1 += peaks[ix].right_inc; + peaks[ix].right = int(peaks[ix].right1); + } + else + { + peaks[ix].right = peaks[ix].left; + } } - for(;ix < N_PEAKS; ix++) + for(;ix < 8; ix++) { // formants 6,7,8 don't have a width parameter - peaks[ix].freq1 += peaks[ix].freq_inc; - peaks[ix].freq = int(peaks[ix].freq1); + if(ix < 7) + { + peaks[ix].freq1 += peaks[ix].freq_inc; + peaks[ix].freq = int(peaks[ix].freq1); + } peaks[ix].height1 += peaks[ix].height_inc; if((peaks[ix].height = int(peaks[ix].height1)) < 0) peaks[ix].height = 0; @@ -1732,12 +1742,19 @@ if(option_log_frames) nsamples += length2; length4 = length2/4; - for(ix=0; ixfreq[7] + v->freqadd[7]*256) << 8; + peaks[8].freq = (9000 * v->freq[8] + v->freqadd[8]*256) << 8; + + for(ix=0; ix < 8; ix++) { - peaks[ix].freq1 = (fr1->ffreq[ix] * v->freq[ix] + v->freqadd[ix]*256) << 8; - peaks[ix].freq = int(peaks[ix].freq1); - next = (fr2->ffreq[ix] * v->freq[ix] + v->freqadd[ix]*256) << 8; - peaks[ix].freq_inc = ((next - peaks[ix].freq1) * (STEPSIZE/4)) / length4; // lower headroom for fixed point math + if(ix < 7) + { + peaks[ix].freq1 = (fr1->ffreq[ix] * v->freq[ix] + v->freqadd[ix]*256) << 8; + peaks[ix].freq = int(peaks[ix].freq1); + next = (fr2->ffreq[ix] * v->freq[ix] + v->freqadd[ix]*256) << 8; + peaks[ix].freq_inc = ((next - peaks[ix].freq1) * (STEPSIZE/4)) / length4; // lower headroom for fixed point math + } peaks[ix].height1 = (fr1->fheight[ix] * v->height[ix]) << 6; peaks[ix].height = int(peaks[ix].height1); @@ -1751,10 +1768,17 @@ if(option_log_frames) next = (fr2->fwidth[ix] * v->width[ix]) << 10; peaks[ix].left_inc = ((next - peaks[ix].left1) * STEPSIZE) / length2; - peaks[ix].right1 = (fr1->fright[ix] * v->width[ix]) << 10; - peaks[ix].right = int(peaks[ix].right1); - next = (fr2->fright[ix] * v->width[ix]) << 10; - peaks[ix].right_inc = ((next - peaks[ix].right1) * STEPSIZE) / length2; + if(ix < 3) + { + peaks[ix].right1 = (fr1->fright[ix] * v->width[ix]) << 10; + peaks[ix].right = int(peaks[ix].right1); + next = (fr2->fright[ix] * v->width[ix]) << 10; + peaks[ix].right_inc = ((next - peaks[ix].right1) * STEPSIZE) / length2; + } + else + { + peaks[ix].right = peaks[ix].left; + } } } } // end of SetSynth