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-fd96e6ae7743master
| @@ -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@ | |||
| @@ -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 _ | |||
| @@ -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 | |||
| @@ -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 | |||
| @@ -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 | |||
| @@ -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 | |||
| @@ -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 | |||
| @@ -24,7 +24,7 @@ | |||
| // 2006-11-18 Gilles Casse <[email protected]> | |||
| // | |||
| // Updated 2009-04-04 Michel Such <[email protected]> | |||
| // Updated 2009-05-14 Michel Such <[email protected]> | |||
| // | |||
| // * 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 | |||
| @@ -23,7 +23,7 @@ | |||
| // 2006-11-18 Gilles Casse <[email protected]> | |||
| // | |||
| // Updated: 2009-04-01 Michel Such <[email protected]> | |||
| // Updated: 2009-05-14 Michel Such <[email protected]> | |||
| // | |||
| // 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 | |||
| @@ -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 | |||
| @@ -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 | |||
| @@ -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 | |||
| @@ -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 | |||
| @@ -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 | |||
| before (r) DFT-10+vwl_fr/r_e | |||
| before r/2 DFT-10+vwl_fr/r_e | |||
| 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 | |||
| phoneme i | |||
| vowel starttype (i) endtype (i) | |||
| length 180 | |||
| formants vowel/i_2 | |||
| linkout ; | |||
| after (l) l/li-15 | |||
| before l/ DFT+l/l_i | |||
| before (r) DFT-20+vwl_fr/r_i | |||
| before r/2 DFT+vwl_fr/r_i | |||
| endphoneme | |||
| phoneme i | |||
| phoneme i- // shorter | |||
| vowel starttype (i) endtype (i) | |||
| length 170 | |||
| formants vowel/i_3 | |||
| length 120 | |||
| formants vowel/i_2 | |||
| linkout ; | |||
| after l l/li-15 | |||
| before l/ DFT+l/l_i | |||
| before (r) DFT+r/xr | |||
| before r/2 DFT+r3/r_i | |||
| 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 | |||
| @@ -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 | |||
| @@ -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 | |||
| @@ -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; ix<N_KLATTP2; ix++) | |||
| { | |||
| if(spectseq->frames[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; peak<N_PEAKS; peak++) | |||
| for(peak=0; peak < 8; peak++) | |||
| { | |||
| fr_out->ffreq[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; ix<N_KLATTP; ix++) | |||
| for(peak=0; peak<7; peak++) | |||
| { | |||
| fr_out->klattp[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++; | |||
| @@ -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)); | |||
| @@ -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; ix<N_PEAKS; ix++) | |||
| for(ix=0; ix < 8; ix++) | |||
| { | |||
| string.Printf(_T("%d"),ix); | |||
| t_labpk[ix] = new wxStaticText(this,id++,string, | |||
| wxPoint(xplace-22,y+1+24*ix)); | |||
| t_pkfreq[ix] = new wxTextCtrl(this,id++,_T(""), | |||
| wxPoint(xplace,y+24*ix),wxSize(48,20), | |||
| wxTE_CENTRE+wxTE_READONLY); | |||
| if(ix < 7) | |||
| { | |||
| t_pkfreq[ix] = new wxTextCtrl(this,id++,_T(""), | |||
| wxPoint(xplace,y+24*ix),wxSize(44,20), | |||
| wxTE_CENTRE); | |||
| } | |||
| t_pkheight[ix] = new wxTextCtrl(this,id++,_T(""), | |||
| wxPoint(xplace+50,y+24*ix),wxSize(36,20), | |||
| wxTE_CENTRE+wxTE_READONLY); | |||
| t_pkwidth[ix] = new wxTextCtrl(this,id++,_T(""), | |||
| wxPoint(xplace+88,y+24*ix),wxSize(48,20), | |||
| wxTE_CENTRE+wxTE_READONLY); | |||
| t_pkright[ix] = new wxTextCtrl(this,id++,_T(""), | |||
| wxPoint(xplace+138,y+24*ix),wxSize(36,20), | |||
| wxTE_CENTRE+wxTE_READONLY); | |||
| if(ix>5) 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)); | |||
| 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_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_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 += 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_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_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_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(202,y), wxSize(52,24), wxTE_CENTRE,0,500); | |||
| t_klatt[KLATT_Skew] = new wxStaticText(this,-1,_T("Skew"),wxPoint(257,y+4)); | |||
| 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_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; ix<N_PEAKS; ix++) | |||
| for(ix=0; ix < 8; ix++) | |||
| { | |||
| if(field != 0xff && pk!=ix) | |||
| continue; | |||
| @@ -268,7 +307,9 @@ void FormantDlg::ShowFrame(SpectSeq *spectseq, int frame, int pk, int field) | |||
| t_labpk[ix]->SetLabel(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; ix<N_KLATTP; ix++) | |||
| { | |||
| for(ix=0; ix<9; ix++) | |||
| { | |||
| SetSpinCtrl(s_klatt[ix], sf->klatt_param[ix]); | |||
| } | |||
| SetSpinCtrl(s_klatt[ix], sf->klatt_param[ix]); | |||
| } | |||
| } // end of FormantDlg::ShowFrame | |||
| @@ -30,10 +30,10 @@ | |||
| #include <stdlib.h> | |||
| #include <math.h> | |||
| #include <string.h> | |||
| #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; ix<N_KLATTP; ix++) | |||
| { | |||
| klattp1[ix] = klattp[ix] = fr1->klattp[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; ix<N_PEAKS; ix++) | |||
| for(ix=1; ix < 6; ix++) | |||
| { | |||
| peaks[ix].freq1 = (fr1->ffreq[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 < 4) | |||
| { | |||
| // 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; | |||
| } | |||
| } | |||
| if(ix < 6) | |||
| // 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].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; | |||
| 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; | |||
| } | |||
| 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; | |||
| } | |||
| } // 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 | |||
| @@ -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; | |||
| @@ -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; | |||
| @@ -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. */ | |||
| @@ -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; | |||
| @@ -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<N_PEAKS; ix++) | |||
| { | |||
| formants[ix].freq = s.Read16(); | |||
| @@ -300,11 +314,18 @@ int SpectFrame::Load(wxInputStream& stream, int synth_type) | |||
| keyframe = 1; | |||
| peaks[ix].pkwidth = s.Read16(); | |||
| peaks[ix].pkright = s.Read16(); | |||
| if(file_format == 2) | |||
| { | |||
| peaks[ix].klt_bw = s.Read16(); | |||
| peaks[ix].klt_ap = s.Read16(); | |||
| peaks[ix].klt_bp = s.Read16(); | |||
| } | |||
| } | |||
| if(synthesizer_type == 1) | |||
| if(file_format > 0) | |||
| { | |||
| for(ix=0; ix<N_KLATTP; ix++) | |||
| for(ix=0; ix<N_KLATTP2; ix++) | |||
| { | |||
| klatt_param[ix] = s.Read16(); | |||
| } | |||
| @@ -344,6 +365,12 @@ int SpectFrame::Save(wxOutputStream& stream) | |||
| s.Write16(markers); | |||
| s.Write16(amp_adjust); | |||
| if(file_format == 2) | |||
| { | |||
| s.Write16(0); // spare | |||
| s.Write16(0); // spare | |||
| } | |||
| for(ix=0; ix<N_PEAKS; ix++) | |||
| { | |||
| s.Write16(formants[ix].freq); | |||
| @@ -353,11 +380,18 @@ int SpectFrame::Save(wxOutputStream& stream) | |||
| s.Write16(keyframe ? peaks[ix].pkheight : 0); | |||
| s.Write16(peaks[ix].pkwidth); | |||
| s.Write16(peaks[ix].pkright); | |||
| if(file_format == 2) | |||
| { | |||
| s.Write16(peaks[ix].klt_bw); | |||
| s.Write16(peaks[ix].klt_ap); | |||
| s.Write16(peaks[ix].klt_bp); | |||
| } | |||
| } | |||
| if(synthesizer_type == 1) | |||
| if(file_format > 0) | |||
| { | |||
| for(ix=0; ix<N_KLATTP; ix++) | |||
| for(ix=0; ix<N_KLATTP2; ix++) | |||
| { | |||
| s.Write16(klatt_param[ix]); | |||
| } | |||
| @@ -481,20 +515,9 @@ void SpectFrame::DrawPeaks(wxDC *dc, int offy, int frame_width, int seq_amplitud | |||
| if((pk->pkfreq == 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) | |||
| @@ -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; | |||
| @@ -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; i<N_PEAKS; i++) | |||
| { | |||
| for(i=pk_num+1; i<N_PEAKS; 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; | |||
| } | |||
| 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); | |||
| @@ -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; ix<numframes; ix++) | |||
| { | |||
| if(frames[ix]->keyframe) | |||
| { | |||
| 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; ix<N_PEAKS; ix++) | |||
| { | |||
| for(ix=0; ix<N_PEAKS; ix++) | |||
| { | |||
| y = peaks[ix].pkheight * sp->amp_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; ix<N_PEAKS; ix++) | |||
| for(ix=0; ix < 8; ix++) | |||
| { | |||
| fr->ffreq[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(); | |||
| @@ -21,7 +21,7 @@ | |||
| #include <sys/types.h> | |||
| // conditional compilation options | |||
| //#define INCLUDE_KLATT | |||
| #define INCLUDE_KLATT | |||
| #if defined(BYTE_ORDER) && BYTE_ORDER == BIG_ENDIAN | |||
| #define ARCH_BIG | |||
| @@ -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; | |||
| @@ -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; ix<N_PEAKS; ix++) | |||
| for(ix=0; ix < 8; ix++) | |||
| { | |||
| h = fr->fheight[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; ix<N_PEAKS; ix++) | |||
| for(ix=2; ix < 8; ix++) | |||
| { | |||
| x = fr->fheight[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; ix<N_PEAKS; ix++) | |||
| for(ix=3; ix < 8; ix++) | |||
| { | |||
| fr->ffreq[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; | |||
| @@ -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 | |||
| @@ -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 | |||
| } | |||
| @@ -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)); | |||
| @@ -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; pk<N_PEAKS; pk++) | |||
| { | |||
| voice->freq[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; | |||
| @@ -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; ix<N_PEAKS; ix++) | |||
| peaks[7].freq = (7800 * v->freq[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 | |||