Browse Source

[1.40.21]

Fix: -g command option not working on Windows.
Fix: Text position value in events was limited to 16 bits.

[1.40.15]
espeakedit:  Change formant dialog to include Klatt parameters.
espeakedit:  Change the format of formant data to include Klatt parameters.
espeakedit:  Fix the frequency of F7,F8 at 7800Hz,9000Hz.


git-svn-id: https://espeak.svn.sourceforge.net/svnroot/espeak/trunk@220 d46cf337-b52f-0410-862d-fd96e6ae7743
master
jonsd 16 years ago
parent
commit
0fc12016fa

+ 29
- 7
dictsource/af_list View File

@@ -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@

+ 21
- 4
dictsource/af_rules View File

@@ -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&lt
@@ -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 _

+ 36
- 13
dictsource/dict_phonemes View File

@@ -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

+ 20
- 0
dictsource/en_list View File

@@ -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

+ 10
- 7
dictsource/en_rules View File

@@ -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

+ 6
- 6
dictsource/fi_list View File

@@ -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

+ 4
- 5
dictsource/fi_rules View File

@@ -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



+ 128
- 97
dictsource/fr_list View File

@@ -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





+ 93
- 60
dictsource/fr_rules View File

@@ -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





+ 8
- 8
dictsource/zh_list View File

@@ -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

+ 99
- 70
phsource/compile_report View File

@@ -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

BIN
phsource/m/m_ View File


BIN
phsource/n/n_ View File


+ 15
- 0
phsource/ph_base2 View File

@@ -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

+ 10
- 14
phsource/ph_finnish View File

@@ -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



+ 106
- 111
phsource/ph_french View File

@@ -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





+ 5
- 1
phsource/phonemes View File

@@ -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


BIN
phsource/r/a_ View File


BIN
phsource/vdiph2/ie View File


BIN
phsource/vdiph2/uo View File


BIN
phsource/vowel/ee_2 View File


BIN
phsource/vwl_fr/@R3 View File


BIN
phsource/vwl_fr/@R5 View File


BIN
phsource/vwl_fr/r_@ View File


BIN
phsource/vwl_fr/r_a View File


BIN
phsource/vwl_fr/r_e View File


BIN
phsource/vwl_fr/r_i View File


BIN
phsource/vwl_fr/r_o View File


BIN
phsource/vwl_fr/r_u View File


BIN
phsource/vwl_fr/r_y View File


BIN
phsource/vwl_fr/w_a View File


+ 8
- 4
platforms/windows/windows_dll/espeak.dsp View File

@@ -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

+ 53
- 30
src/compiledata.cpp View 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++;

+ 2
- 2
src/espeakedit.cpp View File

@@ -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));

+ 154
- 95
src/formantdlg.cpp View File

@@ -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



+ 75
- 54
src/klatt.cpp View File

@@ -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

+ 17
- 2
src/klatt.h View File

@@ -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;



+ 1
- 1
src/numbers.cpp View File

@@ -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;

+ 2
- 2
src/speak.cpp View File

@@ -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. */

+ 1
- 1
src/speak_lib.cpp View File

@@ -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;

+ 47
- 26
src/spect.cpp View File

@@ -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)

+ 22
- 8
src/spect.h View File

@@ -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;

+ 33
- 33
src/spectdisplay.cpp View File

@@ -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);


+ 31
- 64
src/spectseq.cpp View File

@@ -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();

+ 1
- 1
src/speech.h View File

@@ -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

+ 2
- 2
src/synthdata.cpp View File

@@ -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;


+ 11
- 13
src/synthesize.cpp View File

@@ -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;

+ 42
- 27
src/synthesize.h View File

@@ -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




+ 10
- 3
src/tr_languages.cpp View File

@@ -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
}

+ 2
- 2
src/transldlg.cpp View File

@@ -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));

+ 4
- 3
src/voices.cpp View File

@@ -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;

+ 38
- 14
src/wavegen.cpp View File

@@ -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

Loading…
Cancel
Save