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

// abbreviations // abbreviations
(http ://) hA:te@te@p'e@_ (http ://) hA:te@te@p'e@_
adv atfuk'A:t adv atfuk'A:t
atkv $abbrev
bpk b@p&rk bpk b@p&rk
bv beIf'o@rbe@lt $dot bv beIf'o@rbe@lt $dot
dr d'Okt@r $dot dr d'Okt@r $dot
e.a _:En_'and@r e.a _:En_'and@r
edms eI@ndOms edms eI@ndOms
ens Enso@fo@rts $dot ens Enso@fo@rts $dot
fak $abbrev
genl x2@n@rA:l genl x2@n@rA:l
insp InspEkt'Y@r $dot insp InspEkt'Y@r $dot
isbn $abbrev isbn $abbrev
bennett bEn@t bennett bEn@t
bertha b&rta bertha b&rta
bester b'Est@r bester b'Est@r
betsie bEtsi
beyers beI@rs beyers beI@rs
blignault blIx2n@Ut blignault blIx2n@Ut
blomerus blum'e@rWs blomerus blum'e@rWs
bouwer b@U@r bouwer b@U@r
brian _^_EN brian _^_EN
bredenkamp bre@d@nkamp bredenkamp bre@d@nkamp
breytenbach breIt@nbax2
bruwer bruw'&:r bruwer bruw'&:r
caesar siz@r caesar siz@r
carl kA:r@L carl kA:r@L
cronjé krOnj'e@ cronjé krOnj'e@
cynthia _^_EN cynthia _^_EN
dalene dal'e@n dalene dal'e@n
daniël d'A:ni:@l
#zzz
darwin _^_EN darwin _^_EN
david _^_EN david _^_EN
(da vinci) da||v'intSi (da vinci) da||v'intSi
emmarentia Emar'e~nSja emmarentia Emar'e~nSja
erasmus $2 erasmus $2
ernest _^_EN ernest _^_EN
eségiël is'e@x2i_@l
esegiël is'e@x2i:@l
estelle %ist&l estelle %ist&l
etienne Eti@n etienne Eti@n
eugene judZ'i:n eugene judZ'i:n
eugène yZ'En eugène yZ'En
farao fA:ro@ farao fA:ro@
ferreira f@r&:r@ ferreira f@r&:r@
filemon f'il@mOn
fischer fiS@r fischer fiS@r
fourie fur'i fourie fur'i
francina $2 francina $2
gertruida $2 gertruida $2
gloria glO:ria gloria glO:ria
grange x2rA:nsi grange x2rA:nsi
grové x2ruv'e@
gustav gustaf gustav gustaf
guy _^_EN guy _^_EN
hamlet _^_EN hamlet _^_EN
harry _^_EN
havenga hA:f@Nx2a havenga hA:f@Nx2a
haydn hAId@n haydn hAId@n
helen _^_EN helen _^_EN
liesbet lisbEt liesbet lisbEt
louis luI louis luI
louise luw'i:z louise luw'i:z
lukas l'ukas
mackintosh _^_EN mackintosh _^_EN
madelene mad@l'e@n
mbeki mbE:ki mbeki mbE:ki
magdalena $3 magdalena $3
malan mal'an malan mal'an
terblanche t@rblA:nS terblanche t@rblA:nS
theo tiu theo tiu
theron tr'On theron tr'On
timotheus t@m'o@tiWs
thys teIs thys teIs
toerien $2 toerien $2
totius to@SiWs totius to@SiWs
port pOrt $1 port pOrt $1
rover _^_EN rover _^_EN
sotho su:tu sotho su:tu
thessalonicense tEsalo@nis'Ens@
toyota $2 toyota $2
venda vEnda venda vEnda
volvo vOlvu volvo vOlvu
wimpy wImpi 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 // article


casino kas'i:n@U casino kas'i:n@U
cedille s@dIl@ cedille s@dIl@
charisma kar'Isma charisma kar'Isma
cliché kliS'eI:

clichés kliS'eI:s clichés kliS'eI:s
cliché kliS'eI:
crescendo kr@SEndu crescendo kr@SEndu


dadelik dA:d@lIk dadelik dA:d@lIk
garages g@rA:dZ@s garages g@rA:dZ@s
gee x2e@ gee x2e@
geen x2e@n geen x2e@n
gegewens x2@x2e@v@ns
geldelike x2&ld@l@k@ geldelike x2&ld@l@k@
genade $2 genade $2
genesis x2e@n@s@s genesis x2e@n@s@s
mercedes $2 mercedes $2
meregebied me@r@x2@bit meregebied me@r@x2@bit
merlot m&rl'o@ merlot m&rl'o@
miaau mi'aU:
midwinter mIdv@nt@r midwinter mIdv@nt@r
militêre mIl@t'&:r@ militêre mIl@t'&:r@
minister m@nIst@r minister m@nIst@r
oudsher @Utsh&r oudsher @Utsh&r


pandemonium pand@m'o@niWm pandemonium pand@m'o@niWm
papperel pap@r'&l
parate par'A:t@ parate par'A:t@
parke park@ parke park@
parkie $1 parkie $1
verweg f&:rv&x2 verweg f&:rv&x2
via via via via
volheid $1 volheid $1
volswanger $1
volte $1 volte $1
voluit fOl_Yyt voluit fOl_Yyt
voorgee fo@rx2e@ voorgee fo@rx2e@

+ 21
- 4
dictsource/af_rules View File

a A: a A:
AC) a (_ %a // short final a in words like: Eva/Pieta/(su)sara 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 %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 s) ate (l %at@ //satelliet and compounds
C) a (rina %a //unstressed short a in carina tarina etc. C) a (rina %a //unstressed short a in carina tarina etc.
&b) a (_ %a // short final a: mamba and compounds/marimba/hamba &b) a (_ %a // short final a: mamba and compounds/marimba/hamba
Cel) ary ar'eI // move default stress: bedelary/bottelary/dobbelary/huigelary/smokkelary... 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. @@@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 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 argen (tA %arx2@n // move default stress: Argentinië/Argentyns/-e
a (riA 'A: // akwarium/barium/estuarium/herbarium/seminaria a (riA 'A: // akwarium/barium/estuarium/herbarium/seminaria
a (ristokr %a // shorten 1st a: aristokrasie/-kraat/-krate/-kraties a (ristokr %a // shorten 1st a: aristokrasie/-kraat/-krate/-kraties
@C) a (tiewe %a // fix a sound: konserwatiewe/putatiewe and many similar @C) a (tiewe %a // fix a sound: konserwatiewe/putatiewe and many similar
_arC) ad (A 'A:d // Arcadia/arkadia/arkade/armada _arC) ad (A 'A:d // Arcadia/arkadia/arkade/armada
ai aI 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 (baster %al // move default stress: albaster and compounds
al (bino %al // move default stress: albino al (bino %al // move default stress: albino
alche (mis %alx2%e@ // move default stress: alchemis and derivatives alche (mis %alx2%e@ // move default stress: alchemis and derivatives


bibli (oC b@bl%i:% // biblioteek and compounds/biblioteke/bibliofiel/bibliografie... bibli (oC b@bl%i:% // biblioteek and compounds/biblioteke/bibliofiel/bibliografie...
bidd bId // biddag/aanbidding bidd bId // biddag/aanbidding
bid bIt_ // biduur/aanbid
_) bid bIt_ // biduur
_) bi (ga b%i // bigamie/-s/-e _) bi (ga b%i // bigamie/-s/-e
bikini b@kini // move default stress: bikini and compounds bikini b@kini // move default stress: bikini and compounds
bil (j b@l // move default stress: biljet/-te/biljart/biljoen and compounds bil (j b@l // move default stress: biljet/-te/biljart/biljoen and compounds
be (dr@ b@ // bedremmeld/bedrewe/bedrywig, etc. be (dr@ b@ // bedremmeld/bedrewe/bedrywig, etc.
bed (t bE // fix e and d sounds: bedtafeltjie/bedtyd bed (t bE // fix e and d sounds: bedtafeltjie/bedtyd
bedw (@ b@dw // bedwing and similar 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 @) bed (_ bEt // bruidsbed/dubbelbed; many compounds ending in bed
be (de_ be@ // bede/gebede be (de_ be@ // bede/gebede
bedes (_ be@d@s // bedes/seënbedes, etc. bedes (_ be@d@s // bedes/seënbedes, etc.
_) de (klass de@ // deklassifikasie/gedeklassifiseer _) de (klass de@ // deklassifikasie/gedeklassifiseer
de (klinA d%E // fix 1st e sound: deklinasie/deklineer/-nering and compounds 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 (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. kun) dele (K d@lE // fix e sounds: Aardryks-/wiskundeles/-se, etc.
onder) dele (@ de@l@_ // fix e sound: onderdelebedryf/-pakhuis, etc. onder) dele (@ de@l@_ // fix e sound: onderdelebedryf/-pakhuis, etc.
voor) dele (@ de@l@_ // fix e sound: voordelefonds and similar voor) dele (@ de@l@_ // fix e sound: voordelefonds and similar
deur (weeC d%y@r // move default stress: deurweef/deurweek/-te deur (weeC d%y@r // move default stress: deurweef/deurweek/-te
deur (winter d%y@r // move default stress: deurwinter/-de deur (winter d%y@r // move default stress: deurwinter/-de
dewe (tK d@vE // fix stress and vowel sounds: Groepsgebiedewet/Dewetsdorp/-hof 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 dia (C d%i%a // diabeet/diafragma/diagnose/dialek/dialoog/diamant
diaken d%iA:k@n // diaken and compounds diaken d%iA:k@n // diaken and compounds
diako (nie d%i%ak%u // fix stress and o sound: diakonie/-ë diako (nie d%i%ak%u // fix stress and o sound: diakonie/-ë
eedjie e@ici // kleedjie/tafelkleedjie/altaarkleedjie eedjie e@ici // kleedjie/tafelkleedjie/altaarkleedjie
eeu iu: eeu iu:
eeue iu:@ // fix e sound: leeueaandeel/eeuelang/eeueoud/skreeuerig eeue iu:@ // fix e sound: leeueaandeel/eeuelang/eeueoud/skreeuerig
ee (uu e@_ // split ee/uu, eu not diphthong: tweeuur and compounds
ei eI ei eI
ey eI ey eI
eu Y@ eu Y@
eufo (rie_N %Y@f%o@ // stress to end: euforie eufo (rie_N %Y@f%o@ // stress to end: euforie
C) e (uit @_ // fix e and ui sounds: akteuitmaker/druiweuitvoer/woedeuitbarsting and many similar C) e (uit @_ // fix e and ui sounds: akteuitmaker/druiweuitvoer/woedeuitbarsting and many similar
euntjie Y@iNci // seuntjie/reuntjie euntjie Y@iNci // seuntjie/reuntjie
&C) e (uu @_ // split e/uu, eu not diphthong: seweuur and similar
eë e@ // e deelteken-e eë e@ // e deelteken-e
&) e (_ @ &) e (_ @
m) e (nis @ // geheimenis(vol)/verdoemenis m) e (nis @ // geheimenis(vol)/verdoemenis
geër (_ x2e@@r // oorgeër/pasaangeër geër (_ x2e@@r // oorgeër/pasaangeër
gees (drift x2%e@s // move default stress: geesdriftig and derivatives gees (drift x2%e@s // move default stress: geesdriftig and derivatives
@) gegee =x2@x2e@ @) 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 gei (+ x2eI // geil and derivatives/geiser/geit/-e
ge (kskeer x2& // gekskeer/gekskeerder/gekskeerdery ge (kskeer x2& // gekskeer/gekskeerder/gekskeerdery
geld x2&lt geld x2&lt
narC) i (ssus 'I // move default stress: Nar(c/s)issus narC) i (ssus 'I // move default stress: Nar(c/s)issus
pub) is (_ @s // restore defaultstress: pubis, excep. to: AC) is (_ pub) is (_ @s // restore defaultstress: pubis, excep. to: AC) is (_
en) is (K @s // stress: beduidenis/bekentenis/gevangenis, etc. 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 pol) is (_ @s // polis and compounds
@ar) is (K =@s // but sekretaris/argivaris/kommissaris/inventarislys/sekretarisvoël/plagiaris @ar) is (K =@s // but sekretaris/argivaris/kommissaris/inventarislys/sekretarisvoël/plagiaris
litar) is (+ 'Is // but militaris litar) is (+ 'Is // but militaris
jonge jON@ // jongeling/jongeres jonge jON@ // jongeling/jongeres
jong (etjie jON // fix e sound: jongetjie/-s jong (etjie jON // fix e sound: jongetjie/-s
_) jorda (niA j%OrdA: // move default stress: Jordanië/Jordaniese _) jorda (niA j%OrdA: // move default stress: Jordanië/Jordaniese
joule dZu:l // (kilo)joules
junie juni junie juni
julie juli julie juli
ju (rid j%u // fix stress and u sound: juridies/-e ju (rid j%u // fix stress and u sound: juridies/-e
mane (wale m%an@ // fix stress and shorten a sound: manewale/-s and compounds 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 _) mango maNg%u // fix g and o sounds: mangoboord/-sap/-'s
man (haft m%an // move default stress: manhaftig/-e/-heid 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 manier m@ni:r //manier and compounds
manifes manifEs // fix vowel sounds: manifes and compounds/manifestasie/manifesteer manifes manifEs // fix vowel sounds: manifes and compounds/manifestasie/manifesteer
manipu m%an%ip%y // fix stress and a sound: manipuleer/manipulering/manipulasie manipu m%an%ip%y // fix stress and a sound: manipuleer/manipulering/manipulasie


CA) mme (C m@ CA) mme (C m@
CA) mme (tjie mi // lemmetjie/stemmetjie and similar CA) mme (tjie mi // lemmetjie/stemmetjie and similar
miaau m%iaU: // miaau/-end/-e
middagete m'Idax2_e@t@ // middagete/s middagete m'Idax2_e@t@ // middagete/s
midde (l mId@ // middellyf/middelpunt/middelste/bemiddelend midde (l mId@ // middellyf/middelpunt/middelste/bemiddelend
middel (jari m@d@l // move default stress: middeljarig and derivatives middel (jari m@d@l // move default stress: middeljarig and derivatives
pape (gaai p%ap@ //papegaai and compounds: stress, a and e sounds pape (gaai p%ap@ //papegaai and compounds: stress, a and e sounds
pa (niek p%a // paniek/paniekerig pa (niek p%a // paniek/paniekerig
pantser pants@r // fix e sound in compounds starting with pantser 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 (pier p%a // papier and compounds
pa (pirus p%a // move default stress: papirus and compounds pa (pirus p%a // move default stress: papirus and compounds
pappe (ry p%ap@ // move default stress: pappery/-e and compounds pappe (ry p%ap@ // move default stress: pappery/-e and compounds
spesialis spESal'Is spesialis spESal'Is
spesi (f sp%Es%I // spesifiek/spesifiseer spesi (f sp%Es%I // spesifiek/spesifiseer
stede (C ste@d@ // fix e sounds of many compounds and derivatives containing stede 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 %Cel) ste (r st& // fix e sound: dubbelster/-re
Cet) ste (rK st& // fix e sound: ballet-/kabaret-/krieketster/-re Cet) ste (rK st& // fix e sound: ballet-/kabaret-/krieketster/-re
dwaal) ste (r st& // fix e sound: dwaalster/-re dwaal) ste (r st& // fix e sound: dwaalster/-re
@) tele (gra t&l@ // fix e sound in compounds: riem-/spoedtelegram/veldtelegraaf, etc. @) tele (gra t&l@ // fix e sound in compounds: riem-/spoedtelegram/veldtelegraaf, etc.
teleks t&lEks // fix stress and vowel sounds: teleks and compounds 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. _) 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 (der tEn // fix e sound in compounds: regeringstenders and similar
@) ten (derwyK t@n // fix e sound: spottenderwys/-e/uitsluitenderwys/-e/verkortenderwys/-e @) ten (derwyK t@n // fix e sound: spottenderwys/-e/uitsluitenderwys/-e/verkortenderwys/-e
@C) te (nk t& ++ //tenk and friends @C) te (nk t& ++ //tenk and friends


.group y .group y
y eI y eI
%C) y (_ _^_EN // English: Betty/Eddy/Harry/Molly/Penny/Tommy
york j'O:k //new-yorkse and may be others york j'O:k //new-yorkse and may be others
ysterre (lin eIst@re@ // fix e sound: ysterreling/-s ysterre (lin eIst@re@ // fix e sound: ysterreling/-s


! _:eItrup_: ! _:eItrup_:
!) ! !) !
$ dOl@r $ dOl@r

__) - (_D minWs __) - (_D minWs
A_) - (_D _ A_) - (_D _
C_) - (_D _ C_) - (_D _

+ 36
- 13
dictsource/dict_phonemes View File



Dictionary fi_dict 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 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 : b d dZ f g h j
k l m n N n2 n^ p 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 Dictionary grc_dict
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 Dictionary sk_dict


& @- a a: e e: i i: & @- a a: e e: i i:
b c d f g h j k b c d f g h j k
l m n N p r s t l m n N p r s t
tS v w z 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

anemone a2nEn@mI anemone a2nEn@mI
anew a2nju: anew a2nju:
?3 anew a2nu: ?3 anew a2nu:
anime anImeI
anion aneI@n anion aneI@n
anniversary anIv'3:s@rI anniversary anIv'3:s@rI
anon a2n0n anon a2n0n
approximate a2pr0ksImeIt $verb approximate a2pr0ksImeIt $verb
arab ar@b arab ar@b
arabic $1 arabic $1
arable ara2b@L
arcade $2 arcade $2
arch A@tS arch A@tS
arches A@tSI2z arches A@tSI2z
charismatic karIsm'atIk charismatic karIsm'atIk
charit tSarIt // charitable charit tSarIt // charitable
chic Si:k chic Si:k
chimpanzee $3
chisel tSIz@L chisel tSIz@L
chocolate tS0kl@t chocolate tS0kl@t
cholera k0l@r@ cholera k0l@r@
contrast k0ntr'ast $verb contrast k0ntr'ast $verb
contrite k0ntr'aIt contrite k0ntr'aIt
conven k0nv'i:n // convened conven k0nv'i:n // convened
convent k0nv@nt
converse $1 $only converse $1 $only
converse $verb converse $verb
convict $1 $onlys convict $1 $onlys
détente deIt'0nt détente deIt'0nt
detritus dI2traIt@s detritus dI2traIt@s
deus deIUs deus deIUs
devotee dEvoUt'i:
di d,I di d,I
diabetes daI@b'i:ti:z diabetes daI@b'i:ti:z
diameter daI'amI2t3 diameter daI'amI2t3
driest draI|@st driest draI|@st
duet dju:'Et duet dju:'Et
dugout dVgaUt dugout dVgaUt
dungaree dVNga2r'i:
duvet du:veI duvet du:veI
d'ye dj@ d'ye dj@


entourage 0ntu:rA:Z entourage 0ntu:rA:Z
entrance $1 $onlys entrance $1 $onlys
entrance Entr'aans $verb entrance Entr'aans $verb
entree 0ntreI
envelope Env@loUp $only envelope Env@loUp $only
envelopes Env@loUps envelopes Env@loUps
envelope $verb envelope $verb
evildoers i:v@Ldu:3z evildoers i:v@Ldu:3z
ewe ju: ewe ju:
evening i:vnI2N evening i:vnI2N
every Iv3:t
evit EvI2t // inevitable evit EvI2t // inevitable
exalt Egz'0lt exalt Egz'0lt
execute EksI2kju:t // not $2 execute EksI2kju:t // not $2
fortune fO@tSu:n fortune fO@tSu:n
foyer fOIeI foyer fOIeI
freelance fri:laans freelance fri:laans
fricassee frIka2seI
frigate frIg@t frigate frIg@t
fringer frIndZ3 // infringer fringer frIndZ3 // infringer
fringing frIndZIN fringing frIndZIN
hazardous haz3d@s hazardous haz3d@s
hehe hi:h'i: hehe hi:h'i:
heifer hEf@ heifer hEf@
heist haIst
helium hi:li@m helium hi:li@m
helix hi:lIks helix hi:lIks
hello h@loU hello h@loU
henceforth hEnsfo@T henceforth hEnsfo@T
hercules h3:kjUli:z hercules h3:kjUli:z
heretical hI2rEtI2k@L
hereto hi@3'tu: hereto hi@3'tu:
hermaphrodite $2 hermaphrodite $2
hermes h3:mi:z hermes h3:mi:z
inventory Inv@ntrI inventory Inv@ntrI
interface $1 interface $1
intermin Int'3:mIn // interminable intermin Int'3:mIn // interminable
internee Int'3:ni:
internet Int3nEt internet Int3nEt
interrupt $1 $onlys interrupt $1 $onlys
interrupt $3 $verb interrupt $3 $verb
lukewarm lu:kwO@m lukewarm lu:kwO@m
lullaby lVl@baI lullaby lVl@baI
lunatic lu:n@tIk lunatic lu:n@tIk
lychee li:tSi:


macabre m@kA:br@ macabre m@kA:br@
machete ma2SEtI machete ma2SEtI
necktie nEktaI necktie nEktaI
negate nI2geIt negate nI2geIt
neglect nI2glEkt neglect nI2glEkt
negligee nEglIZeI
neon ni:0n neon ni:0n
nepenthe nI2pEnTI nepenthe nI2pEnTI
nescience nEsI@ns nescience nEsI@ns
paralysis p@ral@sIs paralysis p@ral@sIs
parameter p@ramI2t3 parameter p@ramI2t3
parasite par@saIt parasite par@saIt
paren pa2rEn // "parenthesis"
pariah p@raI@ pariah p@raI@
parole pa2r'oUl parole pa2r'oUl
passenger pasI2ndZ3 passenger pasI2ndZ3
preface prEf@s preface prEf@s
preferably prEf@-r@blI $verbf preferably prEf@-r@blI $verbf
prelude prElju:d prelude prElju:d
premier prEmI3
preparation prEp@r'eIS@n preparation prEp@r'eIS@n
prescience pri:si@ns prescience pri:si@ns
present prEz@nt $only present prEz@nt $only
snooker snu:k3 snooker snu:k3
society s@saI@tI society s@saI@tI
sofa soUf@ sofa soUf@
soiree swA:reI
soldier soUldZ3 soldier soUldZ3
solemn s0l@m solemn s0l@m
solicit s@lIsI2t // solicited,ing solicit s@lIsI2t // solicited,ing
tonne tVn tonne tVn
tornado tO@n'eIdoU tornado tO@n'eIdoU
touche tu:SeI $only touche tu:SeI $only
toupee tu:peI
transcript $1 $onlys transcript $1 $onlys
transfer $1 $onlys transfer $1 $onlys
transfer $verb transfer $verb
vegetable vEdZI2t@b@L vegetable vEdZI2t@b@L
vehicle vi@k@L vehicle vi@k@L
vegan vi:g@n vegan vi:g@n
veggy vEdZI
vengeance vEndZ@ns vengeance vEndZ@ns
venus vi:n@s venus vi:n@s
versus v3:sI2z versus v3:sI2z
Andromeda andr'0mId@ Andromeda andr'0mId@
Buchanan bju:k'an@n Buchanan bju:k'an@n
Campbell kamb@l Campbell kamb@l
Cthulhu k@-Tu:Lu:
Chrysler kraIzl3 Chrysler kraIzl3
Disney dIznI Disney dIznI
Patel pa2tEl Patel pa2tEl

+ 10
- 7
dictsource/en_rules View File

ar (ia_ 'e@ ar (ia_ 'e@
@) arily (_ 'Er@l%I @) arily (_ 'Er@l%I
ch) ar (it ar ch) ar (it ar
ph) ar (i ar
m) ar (i @r m) ar (i @r
m) ar (ig ar m) ar (ig ar
m) ar (inaC ar m) ar (inaC ar
ee (m 'i: ee (m 'i:
eer 'i@3 eer 'i@3
t) ee (n_ 'i: t) ee (n_ 'i:
ees (_ i:z
ch) eese i:z ch) eese i:z
d) e (fault i: d) e (fault i:
e (ffec %I e (ffec %I
h) ere (f ErI2 h) ere (f ErI2
h) ere (di I2rE h) ere (di I2rE
h) ere (s Er@ h) ere (s Er@
h) ere (t I2rE
h) ere (t Er@
@) er (ence_ r @) er (ence_ r
er (ent_ r er (ent_ r
adh) er (e 'i@3 adh) er (e 'i@3
st) ev (e i:v st) ev (e i:v
ever (_ Ev3 ever (_ Ev3
ever (c ,Ev3 ever (c ,Ev3
ever (g Ev3
_) ever Ev3
ever (l ,Ev3 ever (l ,Ev3
ever (m ,Ev3 ever (m ,Ev3
_) ever (s I2v3:
f) ever (+ i:v3 f) ever (+ i:v3
?!3 _l) ever i:v3 ?!3 _l) ever i:v3
cl) ever Ev3 cl) ever Ev3
K) hl L K) hl L
&) hold (_S4 hoUld &) hold (_S4 hoUld
holme hoUm holme hoUm
_) homeo hoUmi:oU
_) home (o hoUmi:
_) homo (s h,oUmoU _) homo (s h,oUmoU
_) homoeo hoUmi:oU _) homoeo hoUmi:oU
&) hood (_S4 hUd &) hood (_S4 hUd
house (_S5 haUs house (_S5 haUs
houses (_S6 haUzI2z houses (_S6 haUzI2z
_) hypo (@P4 h,aIpoU _) hypo (@P4 h,aIpoU
_) hypo (cr hIp0
hypo (de h,aIp@ hypo (de h,aIp@
hypo (thet h,aIp@ hypo (thet h,aIp@


_v) o (cA oU _v) o (cA oU
&%C) ock (_ @k &%C) ock (_ @k
l) o (com ,oU l) o (com ,oU
ocrates (_ '0kra2ti:z
o (cre_ 'oU o (cre_ 'oU
cr) o (cu oU cr) o (cu oU
_h) o (cu oU _h) o (cu oU
un (ani %ju:n un (ani %ju:n
_) under (@P5 ,Vnd3 // prefix _) under (@P5 ,Vnd3 // prefix
_) un (deP2 ,Vn _) un (deP2 ,Vn
_) un (dula Vn
_) un (enP2 ,Vn _) un (enP2 ,Vn
_) un (exP2 ,Vn _) un (exP2 ,Vn
_) un (ic ju:n _) un (ic ju:n
&) ysis (_ =@sIs &) ysis (_ =@sIs
yte (_ aIt yte (_ aIt
you' %ju: you' %ju:
yu ju:
yu (C% jV
yu (@ ju:
yeo (C joU yeo (C joU
y (er_ aI y (er_ aI
C) yes (_ aIz C) yes (_ aIz
nak) E (d I nak) E (d I
Ee (d i: Ee (d i:
EE (_ i: EE (_ i:
Ee (_ 'i:
Ee (_ i:
Eer (_ 'i@3 Eer (_ 'i@3
Ei (n_ i: Ei (n_ i:
Ei (_ aI Ei (_ aI

+ 6
- 6
dictsource/fi_list View File

_{ alkua:lto _{ alkua:lto
_} lop:ua:lto _} lop:ua:lto
_< p'ienempIk'uin _< p'ienempIk'uin
_> s'u:*empIk'uin
_> s'u:rempIk'uin
_- vi:va2 _- vi:va2
__ ala2vi:va2 __ ala2vi:va2
+ plus $max3 + plus $max3
* asteriski $max3 * asteriski $max3
= 'yht&k'uin $max3 = 'yht&k'uin $max3
% p@-*osent:I $max3
% prosent:I $max3
/ kaut:a2 / kaut:a2
\ keno \ keno
€ eu*o
€ euro
£ punta2 £ punta2
¤ valu:t:a2 ¤ valu:t:a2
& _et & _et
~ tilde ~ tilde


_acu 'aku:t:I _acu 'aku:t:I
_brv b@-*'eve
_brv br'eve
_ced s'edIljI _ced s'edIljI
_cir s'irkumfl,eksI _cir s'irkumfl,eksI
_dia 'umlaut _dia 'umlaut
_grv g@-*'avIs
_grv gr'avIs
_tld tilde _tld tilde


// numbers // numbers
_9X 'yhdeks&mk,ymment& _9X 'yhdeks&mk,ymment&
_0C s'ata:_ _0C s'ata:_
_1C s'ata _1C s'ata
_0M1 t'uhata:
_0M1 t'uhat:a
_1M1 t'uhat // no '1' before thousand _1M1 t'uhat // no '1' before thousand
_0M2 m'iljo:na: _0M2 m'iljo:na:
_1M2 m'iljo:na _1M2 m'iljo:na

+ 4
- 5
dictsource/fi_rules View File

c (i s c (i s
c (e s // Pronounce c as s. Mostly foreign words such as celcius, center, cervantes, cezanne. 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. 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. city siti // Pronounce foreign word city as siti. Include all inflections and compound words.
// eg. city, citystä, intercity. // eg. city, citystä, intercity.




.group r .group r
r r r r
A) r (A *
C) r (A @-*
rr *r




.group s .group s
s s s s
ss ss2 // [s2] is a continuation for [s] ss ss2 // [s2] is a continuation for [s]
K) sh S K) sh S
K) sch S // Schmitt


@) sti (_ sti_X1 // double the initial consonant of the next word @) sti (_ sti_X1 // double the initial consonant of the next word


.group u .group u
u u u u
uu u: uu u:
ui ui
ui wi
uo uo uo uo





+ 128
- 97
dictsource/fr_list View File



// 2006-11-18 Gilles Casse <[email protected]> // 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. // * Numbers, a few abbreviations and exceptions.
// //
_brv br'Ev _brv br'Ev
_ced sed'ij _ced sed'ij
_cir aksA~sirkO~fl'Eks _cir aksA~sirkO~fl'Eks
_dia tRem'a
_dia trem'a
_dot pwE~syskr'i _dot pwE~syskr'i
_grv aksA~gr'av _grv aksA~gr'av
_hac kar'O~ _hac kar'O~
_cap maZysk'yl _cap maZysk'yl
_?A l'Etr _?A l'Etr
_?? sE~b'Oll _?? sE~b'Oll
_#9 tabylasjO~
_#9 tabylasiO~
_#32 Espas _#32 Espas




_" gijmE _" gijmE
_# djEz _# djEz
_' a2postr'Of
_( 'uvR@-parA~t'Ez
_' apostr'Of

_( 'uvr@-parA~t'Ez
_) f'Erm parA~t'Ez _) f'Erm parA~t'Ez
_, virgyl _, virgyl
_- tirE _- tirE
_/ bar||oblik _/ bar||oblik
_: d'Y||pw'E~ _: d'Y||pw'E~
_; pwE~||virg'yl _; pwE~||virg'yl
_< E~ferjWr
_< E~feri-Wr
_= egal _= egal
_> syperjWr
_> syperi-Wr
_? pwE~||dE~terogasj'O~ _? pwE~||dE~terogasj'O~
_! pwE~||dEksklamasj'O~ _! pwE~||dEksklamasj'O~
_[ uvr@-_kroSE _[ uvr@-_kroSE
_\ b'aksl'aS _\ b'aksl'aS
_] f'E2rm_kroS'E
_] f'Erm_kroS'E
_^ sirkOnflEks _^ sirkOnflEks
__ sulin^e __ sulin^e
_` aks'A~_gr'av _` aks'A~_gr'av
_{ uvr_akOlad _{ uvr_akOlad
_| bar_vErtik'al _| bar_vErtik'al
_} f'E2rm_akOl'ad
_} f'Erm_akOl'ad
² pw^is'A~s||d'Y ² pw^is'A~s||d'Y
_« uvre||gijm'E _« uvre||gijm'E
_» fErme||gijm'E _» fErme||gijm'E
_’ a2postr'Of
_‘ a2postr'Of
_µ mikR'o
_’ apostr'Of
_‘ apostr'Of
_µ mikr'o
_§ sEksj'O~ _§ sEksj'O~


// symbols that are normally spoken when reading text // symbols that are normally spoken when reading text
@ _!arobaz @ _!arobaz
% pursA~ $max3 % pursA~ $max3
& e $u $brk & e $u $brk
_& _e_komErsj'al
_& _e_komErsi'al
* asterisk: $max3 * asterisk: $max3
+ plys $max3 + plys $max3
~ tilde ~ tilde
€ @ro € @ro
¢ sEnt ¢ sEnt
¥ jEn
¥ iEn
£ livr £ livr
± pl'yz_'u_mw'E~ ± pl'yz_'u_mw'E~
× myltipli:'e_p'ar × myltipli:'e_p'ar


// numeric // numeric


_0 zero
_0 zero $u+
_1 W~ _1 W~
_2 dYz2 _2 dYz2
_3 tRwAz2
_3 trwAz2
_4 katr _4 katr
_5 sE~k _5 sE~k
_6 siz3 _6 siz3
_10 diz3 _10 diz3
_11 _!O~z _11 _!O~z
_12 duz _12 duz
_13 tREz
_13 trEz
_14 katOrz _14 katOrz
_15 kE~z _15 kE~z
_16 sEz _16 sEz
_20 vE~ _20 vE~
_21 vE~te:W~ _21 vE~te:W~
_22 vE~tdYz2 _22 vE~tdYz2
_23 vE~t:tRwAz2
_23 vE~t:trwAz2
_24 vE~tkatr _24 vE~tkatr
_25 vE~tsE~k _25 vE~tsE~k
_26 vE~tsiz3 _26 vE~tsiz3
_27 vE~tsEt _27 vE~tsEt
_28 vE~tw^it3 _28 vE~tw^it3
_29 vE~tnWf _29 vE~tnWf
_3X tRA~t
_31 tRA~te:W~
_3X trA~t
_31 trA~te:W~
_4X karA~t _4X karA~t
_41 karA~te:W~ _41 karA~te:W~
_5X sE~kA~t _5X sE~kA~t
_6X swAsA~t: _6X swAsA~t:
_61 swAsA~te:W~ _61 swAsA~te:W~
_71 swAsA~te:O~z _71 swAsA~te:O~z
_8X katR@vE~:
_80 katR@vE~z2
_8X katr@vE~:
_80 katr@vE~z2
_0C sA~ _0C sA~
_1C0 sA~t2 _1C0 sA~t2
_0M1 mil _0M1 mil
//some numbers have special pronunciation in Belgium and Switzerland //some numbers have special pronunciation in Belgium and Switzerland
?2 _7X sEptA~t ?2 _7X sEptA~t
?2 _71 sEptA~te:W~ ?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 // ABBREVIATIONS
//************** //**************


(http ://) aSt,et,ep'e
abc $abbrev abc $abbrev
ac $abbrev ac $abbrev
adsl $abbrev
adn adeEn
adsl adeEsEl
alt _::alt alt _::alt
amd $abbrev
anpe $abbrev
amd aEmde
anpe aEnpe@
aol aoEl
api $abbrev api $abbrev
avg $abbrev
avh aveaS avh aveaS
bd boulevard $text bd boulevard $text
brltty $abbrev brltty $abbrev
cci $abbrev cci $abbrev
cia $abbrev
cio $abbrev cio $abbrev
ctrl _::kO~tRol
cpu $abbrev
ctrl _::kO~tro2l
dept depart@-mA~ dept depart@-mA~
edf $abbrev
etc etsetera
ghz ZigaE2rts
divx diviks
edf @deEf
etc Etsetera
ghz ZigaErts
hmm h@m hmm h@m
hz _!E2rts
ibm $abbrev
(http ://) aSt,et,ep'e_
hz _!Erts
ibm ibeEm
ide $abbrev ide $abbrev
ip $abbrev
jaws dZ'awz
ip ipe
irc i:_!Er:se
jaws _^_en
kbit kilobit kbit kilobit
kbits kilobit
kde $abbrev kde $abbrev
kg kilogram kg kilogram
khz kiloE2rts
khz kiloErts
km kilomètre $text km kilomètre $text
kw kilowat kw kilowat
kw kilowat
m. m@sjY
mbit mega2bit
mbits mega2bit
m. m@siY
mbit megabit
mbrola Embrola mbrola Embrola
mhz megaE2rts
mci $abbrev
mhz megaErts
mlle mademoiselle $text mlle mademoiselle $text
mme madame $text mme madame $text
mr m@sjY
(mp 3) _!Empetrwa
mr m@siY
nsi $abbrev nsi $abbrev
nsis $abbrev nsis $abbrev
nti $abbrev nti $abbrev
nvda $abbrev nvda $abbrev
ong $abbrev
ocr oseEr
oem $abbrev
ogm oZeEm
ong oEnZe
pci $abbrev pci $abbrev
pda $abbrev pda $abbrev
p.s postskriptOm p.s postskriptOm
ratp $abbrev ratp $abbrev
riscos rIskoEs
sap $abbrev
scsi $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 st s'E~t2
ste s'E~t 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 utf $abbrev
u.s y:Es
vip v,i||,aj||p'i
wma $abbrev wma $abbrev
xfce iksEfse@ xfce iksEfse@
xy $abbrev xy $abbrev


// articles // articles
le $nounf $u+ le $nounf $u+
le $verbextend $u
le $verb $verbextend $u
la $nounf $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+ un $nounf $u+
une $nounf $u+ une $nounf $u+


mais $u+ mais $u+
ou $u $brk ou $u $brk
eh $u $brk eh $u $brk
et $u $brk
et e $u $brk
ni $u $brk ni $u $brk
car $u $brk car $u $brk
car $noun car $noun
(parce que) parsk@ $u+ (parce que) parsk@ $u+
(parce qu'il) parskil $u+ (parce qu'il) parskil $u+
(parce qu'ils) parskilz2 $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+ (parce qu'on) parskO~n2 $u+
tant tA~t2 $u+ tant tA~t2 $u+
qui $verbf $u+ qui $verbf $u+
autour otur $u+ autour otur $u+
autre $u+ autre $u+
autres $u+ autres $u+
dans $u+
dans dA~z2 $u+
vers vEr $u+ vers vEr $u+
vers $noun vers $noun
en $u+ en $u+
durant $u+ durant $u+
avec $u+ avec $u+
sans $u+ sans $u+
trop $u+
trop trop2 $u+
assez $u+ assez $u+
beaucoup $u+
beaucoup bokup2 $u+
peu $u+ peu $u+
très $u
très $u+
près $u+
loin $u+


// negative // negative
ne $u $verbf ne $u $verbf
pas p'a2z2
pas p'az2 $u+
pas pa $noun pas pa $noun
plus $u+ plus $u+
guère $u+ guère $u+


// some common adjectives and adverbs // some common adjectives and adverbs


quel $u+
quelle $u+
quelles $u+
quelque $u+ quelque $u+
quelques $u+ quelques $u+
tel $u+ tel $u+
toute t'ut $u+ toute t'ut $u+
toutes t'utz2 $u+ toutes t'utz2 $u+
tous $u+ tous $u+
rien ri'E~n2 $u+
rien ri-'E~n2 $u+


// Letters which can be words // Letters which can be words
//=========================== //===========================
(n'est ce pas) n'Es@-||p'az2 (n'est ce pas) n'Es@-||p'az2
(qu'est ce que) kEsk@ $u (qu'est ce que) kEsk@ $u
absent absA~ absent absA~
adam adA~
adams adams
admin admin admin admin
adsltv $abbrev
airbus E2rbys
adsltv adeEs'El||tev'e
airbus Erbys
alan alan
auvent ovA~ auvent ovA~
bien bjE~n2 $u+
bien bi-E~n2 $u+
bis bis bis bis
bissus bisys bissus bisys
bus bys bus bys
bus by $verb bus by $verb
campus kA~pys
cancer kA~sEr cancer kA~sEr
canyon kanjO2n
(chef d'oeuvre) chédeuvre $text (chef d'oeuvre) chédeuvre $text
(chef d'oeuvres) chédeuvres $text (chef d'oeuvres) chédeuvres $text
choeur kWr choeur kWr
cocus koky cocus koky
couscous kuskus couscous kuskus
dernier dE2rnjer2
dernier dErnjer2
éloquent ElokA~t2 éloquent ElokA~t2
fan f'an
enfer A~fEr
faut fot2 $u+ faut fot2 $u+
fier fier $verb
fier fjer $verb
free fri:
fuel fjul fuel fjul
gars ga gars ga
gin dZin
gulf gWlf
gym Zim gym Zim
hélas elas $u+ hélas elas $u+
iris iris iris iris
mailto mEjltu_ mailto mEjltu_
mapper _^_en mapper _^_en
mars mars mars mars
mieux mjY $u+
merguez mErgEz
mieux mi-Y $u+
mrs _^_en mrs _^_en
ours urs ours urs
parangon parA~gO~
pataquès patakEs
phallus falys phallus falys
polder pOldEr polder pOldEr
premier pr@mjer2 premier pr@mjer2
program _^_en program _^_en
(program files) program||fajlz
quit _^_en quit _^_en
recorder ricordeur $text recorder ricordeur $text
scanner skaner2
scanner skaner2 $verb
scanner skanWr $noun scanner skanWr $noun
scanners skanWr
sir _^_EN sir _^_EN
souris suri souris suri
sus sys sus sys
sus sy $verb sus sy $verb
to _^_en
tuttiquanti tutikw'anti tuttiquanti tutikw'anti
vaut $u+ vaut $u+
vaux $u+ vaux $u+
scorbut skOrbyt scorbut skOrbyt
scout skut scout skut
stout staut stout staut
uppercut ypE2rkyt
uppercut ypErkyt
ut yt ut yt
zut zyt zut zyt


net nEt net nEt
offset OfsEt offset OfsEt
set sEt set sEt
soviet sOvjEt
soviet sOviEt


// urt (t is said) // urt (t is said)
kurt kurt kurt kurt
yaourt jaurt
yoghourt yogurt
yogourt yogurt
yaourt iaurt
yoghourt iogurt
yogourt iogurt


// ort (t said) // ort (t said)
short SOrt short SOrt
smart smart smart smart


// irt // irt
flirt flWrt
(sweat shirt) swEtSWrt (sweat shirt) swEtSWrt
(tee shirt) tiSWrt (tee shirt) tiSWrt


end _^_en end _^_en
epson EpsOn epson EpsOn
espeak @spi:k espeak @spi:k
ethernet etE2rnEt
ethernet etErnEt
exit egzit exit egzit
(file zilla) fa2jl||zija
(file zilla) fajl||zija
from frO2m $u+ from frO2m $u+
get _^_en get _^_en
google gu:gWl google gu:gWl
hot _^_en hot _^_en
in _^_en in _^_en
inside _^_en inside _^_en
(internet explorer) E~tErn'Et||Eksplo2r'Wr
(internet explorer) E~tErn'Et||Eksplor'Wr
klaxon klaksOn klaxon klaksOn
let _^_en let _^_en
lite _^_en lite _^_en
made _^_en made _^_en
media medja media medja
messenger mesEnZWr messenger mesEnZWr
my _^_en
my maj
nat nat
not _^_en not _^_en
null _^_en null _^_en
ok o2ke
open o2p'Wn
ok oke
open op'Wn
(open source) op,Wn||s'urs
outlook autlu:k outlook autlu:k
paint _^_en paint _^_en
paper _^_en paper _^_en
constations kO~statjO~z2 constations kO~statjO~z2
contentions kO~tA~tjO~z2 contentions kO~tA~tjO~z2
dations datjO~z2 dations datjO~z2
désertions dezE2rtjO~z2 $verb
désertions dezErtjO~z2 $verb
exploitions EksplwAtjO~z2 exploitions EksplwAtjO~z2
heurtions hWrtjO~z2 heurtions hWrtjO~z2
partions partjO~z2 partions partjO~z2
(burkina faso) burkina||faso (burkina faso) burkina||faso
burundi burundi burundi burundi
croatie kroasi croatie kroasi
groenland gRoEnlA~d
groenland groEnlA~d
guatemala gwAtemala guatemala gwAtemala
honduras _!O~dyras honduras _!O~dyras
kenya kenja kenya kenja
futuna futuna futuna futuna
zimbabwe zimbabwe zimbabwe zimbabwe






+ 93
- 60
dictsource/fr_rules View File



// 2006-11-18 Gilles Casse <[email protected]> // 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: // Letter classes:
.L01 d e l n r t u .L01 d e l n r t u
.L02 b c d f g h k p t v .L02 b c d f g h k p t v
.L03 d l m n s t v .L03 d l m n s t v
.L04 c d f g l m n v




.group a .group a
_) am (n am // amnistie _) am (n am // amnistie
am (n a // condamner am (n a // condamner


_L04) an (_ an
_h) an (_ an
_) anti (@@P4 A~ti
_) arché (@P5 arke // archéologue _) arché (@P5 arke // archéologue
_) archéo (@P6 arkeo // archéologue _) archéo (@P6 arkeo // archéologue
_) arch (aP4 ark // archange _) arch (aP4 ark // archange
or) ch (esC k // orchestre or) ch (esC k // orchestre
or) ch (iC k // orchidée or) ch (iC k // orchidée
_) ch (ao k // chaos, chaotique _) ch (ao k // chaos, chaotique
_) ch (or k // chorale
_) ch (orA k // chorale
_) ch (oriz S
_) ch (oro S
te) ch (_ k te) ch (_ k
ch (r k // chrétien ch (r k // chrétien
_) chrono (@P6 kro2no _) chrono (@P6 kro2no
ban) c (_ // banc ban) c (_ // banc
blan) c (_ // blan blan) c (_ // blan
Con) c (_ // tronc, jonc Con) c (_ // tronc, jonc
_don) c (_ k // tronc, jonc
_don) c (_ k // donc
cler) c (_ // leclerc cler) c (_ // leclerc
tchou) c (_ tchou) c (_
taba) c (_ taba) c (_
se) c (ond g // seconde secondaire se) c (ond g // seconde secondaire
c k // recoin donc c k // recoin donc


s) cien (t jA~ // conscient scientifique
cient (_ sit2 // ils appr�ient, remercient. cient (_ sit2 // ils appr�ient, remercient.
effi) cien (t sjA~ // coefficient effi) cien (t sjA~ // coefficient
défi) cien (t sjA~ // déficient défi) cien (t sjA~ // déficient
cast (_S4 kast // podcast cast (_S4 kast // podcast
casts (_S5 kast // podcasts casts (_S5 kast // podcasts
_) clown klun


// group c: English section // group c: English section
n) ch (_ _^_en // french n) ch (_ _^_en // french
lor) d (_ d lor) d (_ d
au) d (_ au) d (_
oi) d (_ oi) d (_
ou) d (_


dt (_ t // Schmidt dt (_ t // Schmidt
_ni) d (_ // nid _ni) d (_ // nid


// Define use of the final 'e' in french // Define use of the final 'e' in french
e (_ e (_
rch) e (_ =@3
rch) e (s_ =@3
elqu) e =@3
elqu) e =@
uisqu) e =@ uisqu) e =@
rsqu) e =@ rsqu) e =@
_C) e (_ @2 // je te _C) e (_ @2 // je te
-c) e (_ @- -c) e (_ @-
-j) e (_ @- -j) e (_ @-
C) e (- @- C) e (- @-
L02r) e (_ =@3
L02r) e (s_ =@3


e (Ce_ E e (Ce_ E
eau o // bateau cheveaux eau o // bateau cheveaux
g) ea (s_ a // mangeas g) ea (s_ a // mangeas
gh) e (tAX e // spagheti
j) e (a // Jean Jeanne j) e (a // Jean Jeanne
p) ect (_ E // suspect p) ect (_ E // suspect
ect (_ Ekt // direct ect (_ Ekt // direct
pi) ed (_ e // pied pi) ed (_ e // pied
_cl) ef (_ e // clef _cl) ef (_ e // clef
_) ein (K En // peindre
ein (K E~ // peindre ein (K E~ // peindre
CC) ein (_ E~n2 // plein emploi CC) ein (_ E~n2 // plein emploi
e (il E // vieille e (il E // vieille
-) est (_ Est // -est -) est (_ Est // -est


dg) et (_ Et // Bridget, gadget dg) et (_ Et // Bridget, gadget
Ack) et (_ Et
k) et (_ Et
tick) et (_ E
m) et (_ Et2 m) et (_ Et2


eu Y // eu eu Y // eu
e @ // menue e @ // menue
_) e (CA e _) e (CA e
_) e (xA E _) e (xA E
Cr) eam i:m
Cr) eamer i:mWr Cr) eamer i:mWr
Cl) eaner i:nWr Cl) eaner i:nWr
vert) e (rX W vert) e (rX W
eïn (_ 'Ein eïn (_ 'Ein
_y) en (_ En
iew) er (X er2




// group e: English section // group e: English section


.group è .group è


Z) ème iEm
Z) ème i-Em
è E è E




gg g // agglomérer gg g // agglomérer
ai) gni n^ // craignions châtaignier ai) gni n^ // craignions châtaignier
gn n^ // agneau gn n^ // agneau
gn (ie n // comagnie
_quatrevin) gts (_ z2 _quatrevin) gts (_ z2


vin) gt (_A t // liaison: vingt ans vin) gt (_A t // liaison: vingt ans


// group g: English section // group g: English section
_) game (X _^_en _) game (X _^_en
@@) gate (X _^_en
girl _^_en // girl girl _^_en // girl
gy (_ _^_en gy (_ _^_en


.group i .group i
i i // cri 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 (A i: _Cr) i (A i:
Cr) i (é i: Cr) i (é i:
Cr) i (er_ i: Cr) i (er_ i:
rr) i (er_ j
rr) i (er_ i-
C) ien (t_ 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 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 i (e_ i
_) ill ill // illégal _) ill ill // illégal
_) intra (neP5 E~tra _) intra (neP5 E~tra
_) intra (uP5 E~tra _) intra (uP5 E~tra
C) is (_ i C) is (_ i
fl) irt W2rt
otl) i (neX aj
onl) i (ne_ aj
offl) i (ne_ aj


// group i: English section // group i: English section
ibuter (X _^_en ibuter (X _^_en
iev _^_en iev _^_en
ife (_ _^_en ife (_ _^_en
igh _^_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 ize (X _^_en // realize
dr) i (ve _^_en
dr) i (veX _^_en
ram_f) i (le _^_en ram_f) i (le _^_en








// group k: English section // group k: English section
ke (X _^_en // basket, make, take
ke (rX _^_en // basket, make, take
ke (nX _^_en // basket, make, take


.group l .group l
l l // lit l l // lit
// group l: English section // group l: English section
less (_ _^_en // noiseless less (_ _^_en // noiseless
_) live _^_en _) live _^_en
@) loud (_ _^_en
ll (X _^_en




.group m .group m
m m // film m m // film
mm m // pomme 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 master (_S6 mastWr


// group m: English section // group m: English section
cr) oc (_ o // escroc cr) oc (_ o // escroc
o (ckK O2 o (ckK O2
o (CerA O2 o (CerA O2
n) od (_ o // Pernod
_) o (ff O2
o (lC O2 o (lC O2
o (ll O
o (C% O
o (C%eCA O2
om (merA O2 om (merA O2
_) on (l O2n
on (n O on (n O
ls) on (_ O2n
Cst) on (_ O2n
on (nerA O2 on (nerA O2
o (rC O2 o (rC O2
o (rX O2
_) os (_ Os _) os (_ Os
_v) os (gY o2
o (sC O2 o (sC O2
o (ss O
o (sseCA O2
s_) os (_ o s_) os (_ o
x_) os (_ o x_) os (_ o
C) o (se_ o2 C) o (se_ o2
C) o (ses_ o2 C) o (ses_ o2
o (C%ement_ O2
o (tC O2
o (Che@ O2 o (Che@ O2
o (Cement_ O2 o (Cement_ O2
o (t_ o o (t_ o
o (eC o // coefficient o (eC o // coefficient
_l) o (gi o2 _l) o (gi o2
_p) o (ten o2 _p) o (ten o2
_L02r) o (L02 o2
_L02r) o (L02C O
_L02r) o (t_ o
_C) o (teri O2 _C) o (teri O2
_) oi (gnon o // oignons _) oi (gnon o // oignons
oin (C wE~ oin (C wE~
oî wA // boîte oî wA // boîte
om (C O~ // bombe om (C O~ // bombe
om (m O // nommer om (m O // nommer
_) om (n O2m // omnibus
om (ni O2m // omnibus
n) om (X O~ // nom n) om (X O~ // nom
om (_ Om // www.web.com om (_ Om // www.web.com
s) om (n O2m

on (K O~ // mon on (K O~ // mon
on (t_ O~t2 // mont vont sont on (t_ O~t2 // mont vont sont
_m) ont (pAC O~ // Montpellier _m) ont (pAC O~ // Montpellier


_sir) op (_ o // sirop _sir) op (_ o // sirop


_tr) op (_ op2 // trop
v) ost (_ o // Prévost v) ost (_ o // Prévost
_C) oup (_ u // coup, loup _C) oup (_ u // coup, loup
uC) oup (_ up2 // beaucoup




ou u // hibou brouillard ou u // hibou brouillard
oû u // coûter oû u // coûter
oyes (_ wA // troyes oyes (_ wA // troyes
oy (A wAj // noyer voyelles oy (A wAj // noyer voyelles
_y) o (y o
oy wA // roy oy wA // roy
o (_ o // zorro allégro o (_ o // zorro allégro
o (z_ o // berlioz o (z_ o // berlioz
o O o O
_sC) ot O2t




// group o: English section // group o: English section
ook _^_en // book, cook ook _^_en // book, cook
C) oot _^_en // bootable football C) oot _^_en // bootable football
_) one _^_en _) one _^_en
_sC) ot _^_en
oun (C _^_en // bounce, found oun (C _^_en // bounce, found
_) over _^_en // over _) over _^_en // over
ow _^_en // cow, town, down ow _^_en // cow, town, down


.group p .group p
p p // pas p p // pas
_) para (CCP4 para
_) para (pCP4 para
_) photo (@P5 fo2to _) photo (@P5 fo2to
_) poly (@P4 poli _) poly (@P4 poli
_) post (KP4 pO2st _) post (KP4 pO2st
dé) qua kwA // adequate dé) qua kwA // adequate
_) qua (rtz kwA // quartz _) qua (rtz kwA // quartz
qu k // quatre qu k // quatre
_) que (_ k@ // que
_) que (_ k@2 // que
n) q (_ k // cinq cent n) q (_ k // cinq cent


// group q: English section // group q: English section




.group r .group r
L02) r R
_su) rr rr // surréaliste


_su) rr rr // surréaliste
cou) rr rr // courrai cou) rr rr // courrai
cou) rr (i r // courrier cou) rr (i r // courrier
mou) rr rr // mourrai mou) rr rr // mourrai
rr r // erreur
r r // rien r r // rien
rr r
_) radio (@P5 radio _) radio (@P5 radio


// group r: English section // group r: English section
_) real _^_en _) real _^_en
rese _^_en rese _^_en
rst (_ _^_en rst (_ _^_en
_) rule _^_en




.group s .group s
sch S // schéma sch S // schéma
dé) sh (A z // déshabiller dé) sh (A z // déshabiller
sh S // shérif sh S // shérif
CA) sh (_ _^_en // punish
ss s // assez ss s // assez


ai) s (em s // vraisemblable ai) s (em s // vraisemblable
A) s (A z // baiser A) s (A z // baiser
A) s (oft s // microsoft A) s (oft s // microsoft
A) s (ol_ s // tournesol A) s (ol_ s // tournesol
_anti) s (A s // antisocial
_) socio (@P5 sosio _) socio (@P5 sosio
_) super (@@P5 sypEr _) super (@@P5 sypEr
_) super (_ sypEr _) super (_ sypEr
_) supra (@P5 sypra _) supra (@P5 sypra
batro) s (_ s batro) s (_ s
océro) s (_ s océro) s (_ s
scien (t si-A~ // conscient scientifique
sql (_S3 EskyEl




_u) s (_ s _u) s (_ s
Abu) s (_ s Abu) s (_ s
_Abu) s (_ _Abu) s (_
mbu) s (_ s mbu) s (_ s
_cACpu) s (_ s
Acu) s (_ s Acu) s (_ s
écu) s (_ écu) s (_
asu) s (_ s asu) s (_ s
_tou) s (_leurs_ _tou) s (_leurs_


// group s: English section // group s: English section
CA) sh (_ _^_en // punish
sh (_ _^_en sh (_ _^_en
sh (Ap _^_en // shop, ship sh (Ap _^_en // shop, ship
sh (At _^_en // shut, shot sh (At _^_en // shut, shot
g) ueill Wj // orgueilleux g) ueill Wj // orgueilleux
g) ueil (_ Wj // orgueil g) ueil (_ Wj // orgueil



C) u (bX W // hub, club C) u (bX W // hub, club
C) u (gX W // bug, mug C) u (gX W // bug, mug
_n) u (rse W2 // nurse
r) u (nX W // run, autorun r) u (nX W // run, autorun
um (_ Om // album um (_ Om // album
f) um (_ W~ // parfum f) um (_ W~ // parfum
CC) un (_ W~ // brun CC) un (_ W~ // brun
uc) un (_ W~n2 // aucun uc) un (_ W~n2 // aucun
un (_ W~n2 // un avion 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 fl) ux (_ y // flux, reflux
g) u (A // fatigue g) u (A // fatigue
ump (_ _^_en ump (_ _^_en
unch _^_en unch _^_en
under _^_en // under, understand, thunder under _^_en // under, understand, thunder
_C) un (_ _^_en
_C) un (n _^_en
_) up (C _^_en // upper, update _) up (C _^_en // upper, update
up (_ _^_en // setup up (_ _^_en // setup
urn (X _^_en // burn, turn urn (X _^_en // burn, turn
.group v .group v
v v v v
vers (_ vErz2 vers (_ vErz2
_) view (X vju
_) view (A vjuv


// goup v: English section
// group v: English section
voice (X _^_en voice (X _^_en
void (_ _^_en void (_ _^_en
vy (_ _^_en vy (_ _^_en
w (agon v // wagon w (agon v // wagon


// group w: English section // group w: English section
A) w _^_en
e) w _^_en
wa (Ce_ _^_en // hardware software wave wa (Ce_ _^_en // hardware software wave
_) wan _^_en _) wan _^_en
wr _^_en // write wr _^_en // write
.group x .group x
x ks x ks
_) x (A gz // xylophone _) x (A gz // xylophone
_) x (CP1 iks // xylophone
xml (_S3 _!iksEmEl xml (_S3 _!iksEmEl
e) x (A gz // exagérer exemple e) x (A gz // exagérer exemple
L03e) x (A ks // annexe, vexer L03e) x (A ks // annexe, vexer
y i // cryogénique myope y i // cryogénique myope
_) y (A j // yak, yacht _) y (A j // yak, yacht
_) yacht _^_en // yacht, yachtman _) 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 (b E~ // symbolique
ym (p E~ // tympan ym (p E~ // tympan
ym (_ E~ // thym ym (_ E~ // thym








+ 8
- 8
dictsource/zh_list View File

ㄩ y55 ㄩ y55


$textmode $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 涉 she4
礦 kuang4 礦 kuang4
河 he2 河 he2
业 ye4 业 ye4
譬 pi4 譬 pi4
觀 guan1 觀 guan1
勒 lei1
勒 le4
牽 qian1 牽 qian1
缎 duan4 缎 duan4
抛 pao1 抛 pao1
搭 da1 搭 da1
簽 qian1 簽 qian1
乱 luan4 乱 luan4
zhang3
chang2
逐 zhu2 逐 zhu2
苇 wei3 苇 wei3
鲸 jing1 鲸 jing1
盤 pan2 盤 pan2
鞏 gong3 鞏 gong3
袱 fu5 袱 fu5
甸 dian1
甸 dian4
妻 qi1 妻 qi1
晚 wan3 晚 wan3
繪 hui4 繪 hui4
各 ge4 各 ge4
箱 xiang1 箱 xiang1
蘸 zhan4 蘸 zhan4
李 li5
李 li3
肌 ji1 肌 ji1
催 cui1 催 cui1
取 qu3 取 qu3
額 e2 額 e2
論 lun4 論 lun4
照 zhao4 照 zhao4
zhang3
chang2
猪 zhu1 猪 zhu1
纷 fen1 纷 fen1
虜 lu3 虜 lu3
络 luo4 络 luo4
怎 zen3 怎 zen3
細 xi4 細 xi4
干 gan4
干 gan1
腸 chang2 腸 chang2
說 shuo1 說 shuo1
丽 li4 丽 li4
台 tai2 台 tai2
侍 shi4 侍 shi4
領 ling3 領 ling3
煞 sha1
煞 sha4
奮 fen4 奮 fen4
礙 ai4 礙 ai4
盜 dao4 盜 dao4

+ 99
- 70
phsource/compile_report View File

59 phoneme tables
60 phoneme tables
new total new total
base 103 103 base 103 103
base2 24 122
base2 26 124
en 50 149 en 50 149
en_n 32 149 en_n 32 149
en_us 37 150 en_us 37 150
eo 13 115 eo 13 115
jbo 4 116 jbo 4 116
fi 40 134 fi 40 134
fr 55 141
fr_ca 11 141
fr 53 140
fr_ca 11 140
hi 60 149 hi 60 149
ta 17 152 ta 17 152
hu 23 119 hu 23 119
mk 3 141 mk 3 141
sr 14 140 sr 14 140
ru 39 134 ru 39 134
it 17 125
it 17 127
la 21 121 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 ro 36 146
el 8 122
grc 12 127
el 8 124
grc 12 128
sv 25 125 sv 25 125
no 28 129 no 28 129
is 33 129 is 33 129
zh 66 154 zh 66 154
sw 14 112 sw 14 112
tr 18 127 tr 18 127
ku 18 127
id 15 124
ku 18 128
id 15 126
sq 35 127 sq 35 127
hy 24 119 hy 24 119
rw 15 129
rw 15 131
ml 13 151 ml 13 151
kn 15 151 kn 15 151
bn 59 155 bn 59 155
ne 18 157 ne 18 157
mr 1 149
mr 12 149
om 25 125 om 25 125
eu 6 124
eu 6 125
da 21 118


Data file Used by Data file Used by
b/b [b] base b/b [b] base
l/l_4 [ll] sq l/l_4 [ll] sq
l/la [(a)] base l/la [(a)] base
[a] fr [a] fr
[a2] fr
l/l_a [(a)] base l/l_a [(a)] base
[a] fr [a] fr
[a2] fr
[wA] fr [wA] fr
[A~] fr [A~] fr
l/le [(e)] base l/le [(e)] base
[E] fr [E] fr
[e] fr [e] fr
[E2] fr
l/l_e [(e)] base l/l_e [(e)] base
[E] fr [E] fr
[E2] fr
l/L_eL_af [&] af l/L_eL_af [&] af
[&:] af [&:] af
l/l_front [L] sq l/l_front [L] sq
l/l_front_ [l/4] sq l/l_front_ [l/4] sq
l/li [(i)] base l/li [(i)] base
[i] fr [i] fr
[i-] fr
[i:] fr [i:] fr
[l] zh [l] zh
l/l_i [(i)] base l/l_i [(i)] base
[r/] af [r/] af
[r/] ru [r/] ru
r3/r_@ [(@)] base r3/r_@ [(@)] base
[@2] fr
r3/r#_ [r#] is r3/r#_ [r#] is
r3/r_2 [r/2] fr r3/r_2 [r/2] fr
r3/r_a [(a)] base r3/r_a [(a)] base
r3/r_e [(e)] base r3/r_e [(e)] base
r3/r_i [(i)] base r3/r_i [(i)] base
[i] fr
[w^i] fr
r3/r_n [r/] base r3/r_n [r/] base
[r/2] fr [r/2] fr
[r/] ru [r/] ru
r3/r_o [(o)] base r3/r_o [(o)] base
[O] fr
[O2] fr
r3/r_ru [R4] ru r3/r_ru [R4] ru
r3/r_ru2 [R4] ru r3/r_ru2 [R4] ru
r3/r_sr [r.] bn r3/r_sr [r.] bn
r3/r_trill3.wav [R3] base r3/r_trill3.wav [R3] base
[r] af [r] af
[r] nl [r] nl
r3/r_trill_short [r] fi
r3/r_trill.wav [R2] base r3/r_trill.wav [R2] base
[r] fi
[R2] lv [R2] lv
[R] pl [R] pl
[r*] sr [r*] sr
[x] pt [x] pt
r3/r_u [(u)] base r3/r_u [(u)] base
r3/r_uvl [r"] base r3/r_uvl [r"] base
[R2] da
r3/r_uvl.wav [r"] base r3/r_uvl.wav [r"] base
[R2] da
r3/rx [*] base r3/rx [*] base
[r/] base [r/] base
[r/] af [r/] af
[R] fr
[r] fr [r] fr
[r2] fr
[r/2] fr [r/2] fr
[R] fr_ca [R] fr_ca
[r/] ru [r/] ru
r3/@tap [**] base r3/@tap [**] base
r3/@tap2 [**] base r3/@tap2 [**] base
r3/@tap_rfx [r.] base r3/@tap_rfx [r.] base
r/a_ [r] da
r/r [r] base r/r [r] base
[r-] base [r-] base
[r] en_sc [r] en_sc
r/r_ [r] base r/r_ [r] base
[r] en_sc [r] en_sc
[r] de [r] de
[r] fi
[r2] nl [r2] nl
[r] ru [r] ru
[r] ro [r] ro
r/rr [r/] base r/rr [r/] base
[r/] af [r/] af
[r] de [r] de
[r] fi
[r2] nl [r2] nl
[r] ru [r] ru
[r/] ru [r/] ru
r/trr [r/] base r/trr [r/] base
[r/] af [r/] af
[r] de [r] de
[r] fi
[r2] nl [r2] nl
[r] ru [r] ru
[r/] ru [r/] ru
[(i)] base [(i)] base
[(o)] base [(o)] base
[(u)] base [(u)] base
[@] fr
[Y] 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 [A~] fr
ufric/ch [C] base ufric/ch [C] base
[J^] base [J^] base
[x] sr [x] sr
ufric/xx [X] base ufric/xx [X] base
[Q"] base [Q"] base
[R] da
ustop/c [c] base ustop/c [c] base
ustop/c_ejc [c`] om ustop/c_ejc [c`] om
ustop/k [k] base ustop/k [k] base
[k] base2 [k] base2
[k] en [k] en
[k] fi [k] fi
[k] fr
[kh] hi [kh] hi
[k] hu [k] hu
[k] lv [k] lv
[aU] kn [aU] kn
[aU] bn [aU] bn
[aU] ne [aU] ne
[aU] mr
vdiph/aau_4 [aU] vi vdiph/aau_4 [aU] vi
vdiph/ae [E:] fr_ca vdiph/ae [E:] fr_ca
[aI] la [aI] la
vdiph/ai_7 [aI] en_sc vdiph/ai_7 [aI] en_sc
[aI2] en_sc [aI2] en_sc
[aI] is [aI] is
[aI] mr
vdiph/aoo [aU] en_us vdiph/aoo [aU] en_us
vdiph/au [aU] en vdiph/au [aU] en
[aU] af [aU] af
[@U] id [@U] id
vdiph/ui [uI] base2 vdiph/ui [uI] base2
[uI] eo [uI] eo
[ui] fi
[ui] lv [ui] lv
[uI] vi [uI] vi
[ui] zhy [ui] zhy
vdiph/ui_2 [uI] af vdiph/ui_2 [uI] af
vdiph/ui_3 [uI] cy vdiph/ui_3 [uI] cy
[uY] cy [uY] cy
vdiph/ui_4 [ui] fi
vdiph/Vi [VI] ne vdiph/Vi [VI] ne
vdiph/Vu [@U] af vdiph/Vu [@U] af
[VU] ne [VU] ne
vnasal/aa_n [a~] hi vnasal/aa_n [a~] hi
[a~] bn [a~] bn
vnasal/aa_n2 [A~] en vnasal/aa_n2 [A~] en
[A~] fr
vnasal/aa_n3 [A~] af vnasal/aa_n3 [A~] af
vnasal/aa_n4 [A~] fr
vnasal/a#_n [&~] pt vnasal/a#_n [&~] pt
vnasal/a#u_n [&U~] pt vnasal/a#u_n [&U~] pt
[&U~] pt_pt [&U~] pt_pt
[o~] pt [o~] pt
[o~] bn [o~] bn
vnasal/o_n2 [o~] af vnasal/o_n2 [o~] af
vnasal/o_n3 [O~] fr
[O~] fr
vnasal/oo_n [O~] en vnasal/oo_n [O~] en
vnasal/oo_n2 [O~] hi vnasal/oo_n2 [O~] hi
[o] zh [o] zh
voc/Q_less [Q] nl voc/Q_less [Q] nl
[x2] pt [x2] pt
voc/Q_ulv [Q"] base voc/Q_ulv [Q"] base
[R] da
voc/v [v] base voc/v [v] base
[v] fi [v] fi
[v] fr [v] fr
[v;] ro [v;] ro
[v] is [v] is
[v] bn [v] bn
[v] da
voc/v_ [B] base voc/v_ [B] base
[v] base [v] base
[v] fi [v] fi
[v;] ro [v;] ro
[v] is [v] is
[v] bn [v] bn
[v] da
voc/v2 [v#] es voc/v2 [v#] es
voc/vj [v] base voc/vj [v] base
[v] fr [v] fr
[@] kn [@] kn
[@4] bn [@4] bn
vowel/@- [@-] base vowel/@- [@-] base
[@3] fr
[r*] hr [r*] hr
vowel/& [a] en_rp vowel/& [a] en_rp
[&] fi [&] fi
[@3] hi [@3] hi
[@3] bn [@3] bn
[@3] ne [@3] ne
[@] da
vowel/3_2 [3:] en_n vowel/3_2 [3:] en_n
[@] zh [@] zh
vowel/3_3 [3:] en_rp vowel/3_3 [3:] en_rp
[a] it [a] it
[a] zh [a] zh
[a] id [a] id
[a:] mr
vowel/a# [a/] base2 vowel/a# [a/] base2
[a2] en_sc [a2] en_sc
[a2] en_wi [a2] en_wi
[a] pt_pt [a] pt_pt
[a] ro [a] ro
[a] rw [a] rw
[a] da
vowel/a#_2 [a#] pl vowel/a#_2 [a#] pl
[&] hr [&] hr
[a2] sv [a2] sv
[a] is [a] is
[A] zh [A] zh
[a] sq [a] sq
[A] da
vowel/a#_3 [a2] en vowel/a#_3 [a2] en
[a2] en_n [a2] en_n
[a2] en_us [a2] en_us
[a] ml [a] ml
[a] bn [a] bn
[a#] om [a#] om
[3] da
vowel/a_4 [a/] el vowel/a_4 [a/] el
[a] vi [a] vi
[a:] om [a:] om
[a:] kn [a:] kn
[A] om [A] om
vowel/a_6 [a] fr vowel/a_6 [a] fr
[a2] fr
[a] ca [a] ca
[a:] vi [a:] vi
vowel/aa [a] fi
[A] fr_ca
vowel/aa [A] fr_ca
[A] no [A] no
[A:] no [A:] no
[aa] zhy [aa] zhy
vowel/aa_7 [A] nl vowel/aa_7 [A] nl
vowel/aa_8 [0] en_us vowel/aa_8 [0] en_us
[A:] en_us [A:] en_us
vowel/aa_9 [a:] hi
vowel/aa_9 [a] fi
[a:] hi
[a:] bn [a:] bn
[a] ne [a] ne
vowel/a_en [A] fr vowel/a_en [A] fr
[e:] ml [e:] ml
[e:] kn [e:] kn
[e] ne [e] ne
[e] da
vowel/e# [I] en_sc vowel/e# [I] en_sc
[I2] en_sc [I2] en_sc
vowel/e_2 [eI] en_sc vowel/e_2 [eI] en_sc
[e:] hu [e:] hu
[e] ku [e] ku
vowel/e_5 [i] en_sc vowel/e_5 [i] en_sc
vowel/e_6 [e] om
vowel/e_6 [e] mr
[e] om
vowel/ee [E] en_n vowel/ee [E] en_n
[E] sv [E] sv
vowel/e_e [E] en_sc vowel/e_e [E] en_sc
[E2] nl [E2] nl
[E] zh [E] zh
[E#] ku [E#] ku
[&] da
vowel/ee#_2 [E-] sv vowel/ee#_2 [E-] sv
[E#] sq [E#] sq
vowel/ee_3 [&] af vowel/ee_3 [&] af
[E] ku [E] ku
vowel/e_mid [E] en_rp vowel/e_mid [E] en_rp
[E] fr [E] fr
[E2] fr
[E] fr_ca [E] fr_ca
[E] hi [E] hi
[E] hu [E] hu
[e] kn [e] kn
[E] om [E] om
[E#] om [E#] om
[E] da
vowel/@_fnt [@] en_wi vowel/@_fnt [@] en_wi
[@2] en_wi [@2] en_wi
[@2] hr [@2] hr
vowel/i# [y:] cy vowel/i# [y:] cy
vowel/i_2 [i2] de vowel/i_2 [i2] de
[i:] de [i:] de
[i] fr
[i-] fr
[i] nl [i] nl
[i:] la [i:] la
[i:] sv [i:] sv
vowel/i_3 [i] af vowel/i_3 [i] af
[i] fr
[i:] fr [i:] fr
[i:] sk [i:] sk
vowel/i_4 [i] fi vowel/i_4 [i] fi
[I] it [I] it
[i] is [i] is
[i] vi [i] vi
[i] da
vowel/i_5 [i:] en_sc vowel/i_5 [i:] en_sc
vowel/i#_5 [y] pt_pt vowel/i#_5 [y] pt_pt
[i/] pt_pt [i/] pt_pt
[i] id [i] id
[i] ml [i] ml
[i] kn [i] kn
[I] mr
vowel/i#_6 [i.] zh vowel/i#_6 [i.] zh
vowel/i_7 [i] pl vowel/i_7 [i] pl
[i] sq [i] sq
[i:] hi [i:] hi
[i] bn [i] bn
[i:] bn [i:] bn
[i:] mr
vowel/ii [I] en_n vowel/ii [I] en_n
[I2] en_n [I2] en_n
[I] en_rp [I] en_rp
[@2] bn [@2] bn
[V] ne [V] ne
[@/] ne [@/] ne
[@] mr
[V] mr
vowel/@_low2 [@/] en_us vowel/@_low2 [@/] en_us
[@2] en_us [@2] en_us
vowel/o [o] base2 vowel/o [o] base2
[o] kn [o] kn
[o:] kn [o:] kn
[o] bn [o] bn
[o] mr
vowel/o_2 [o:] cy vowel/o_2 [o:] cy
[o2] fr [o2] fr
[o:] hi [o:] hi
[o:] no [o:] no
[o] vi [o] vi
[o:] bn [o:] bn
[o] da
vowel/o-_2 [V] en_n vowel/o-_2 [V] en_n
[V] en_wm [V] en_wm
vowel/o_3 [oU] en_sc vowel/o_3 [oU] en_sc
vowel/o-_3 [U] en_rp vowel/o-_3 [U] en_rp
vowel/o-_4 [o] ro vowel/o-_4 [o] ro
vowel/o_5 [O] nl vowel/o_5 [O] nl
[O] da
vowel/o_6 [O:] nl vowel/o_6 [O:] nl
vowel/o_7 [o] ku vowel/o_7 [o] ku
vowel/oe [W] en vowel/oe [W] en
[W] af [W] af
[W] de [W] de
[W] hy [W] hy
[W] da
vowel/oe_2 [W] no vowel/oe_2 [W] no
[W] tr [W] tr
vowel/oe_4 [W] sv vowel/oe_4 [W] sv
vowel/o_mid [U@] en_rp vowel/o_mid [U@] en_rp
[O] fr [O] fr
[o] fr
[O2] fr [O2] fr
[o2] fr
[o] hu [o] hu
[o] tr [o] tr
[o] ne [o] ne
vowel/oo_2 [0] en_sc vowel/oo_2 [0] en_sc
[O] cy [O] cy
[o] cs [o] cs
[0] da
vowel/oo_3 [O] af vowel/oo_3 [O] af
vowel/oo_4 [O] base2 vowel/oo_4 [O] base2
[0] en_wm [0] en_wm
[u] tr [u] tr
vowel/u#_2 [u-] ta vowel/u#_2 [u-] ta
[u-] sv [u-] sv
vowel/u_3 [u] fr
[u:] fr
vowel/u_3 [u:] fr
vowel/u#_3 [U] ta vowel/u#_3 [U] ta
[U:] ta [U:] ta
vowel/u_4 [u] fr
vowel/u#_4 [U] en_sc vowel/u#_4 [U] en_sc
[u:] en_sc [u:] en_sc
vowel/u_5 [u] sw vowel/u_5 [u] sw
[u#] rw [u#] rw
[u:] bn [u:] bn
[u] ne [u] ne
[U] mr
[u:] mr
[u] da
vowel/u_bck2 [u:] la vowel/u_bck2 [u:] la
vowel/u_fnt [u:] en_rp vowel/u_fnt [u:] en_rp
vowel/uu [U] en vowel/uu [U] en
[V] ta [V] ta
[V] bn [V] bn
vowel/V_4 [V] en_sc vowel/V_4 [V] en_sc
[V] da
vowel/V_6 [V] en_us vowel/V_6 [V] en_us
[a#] lv [a#] lv
vowel/y [y:] en
vowel/V_7 [@] mr
[V] mr
vowel/y [y] base2
[y:] en
[y:] de [y:] de
[y] fi [y] fi
[y:] hu [y:] hu
[y] la [y] la
[yu] zhy [yu] zhy
[y] sq [y] sq
vowel/y# [Y:] en
[y] da
vowel/y# [Y] base2
[Y:] en
[3:] en_wm [3:] en_wm
[Y:] de [Y:] de
[Y] fi [Y] fi
[y] ku [y] ku
vowel/yy [y"] fr_ca vowel/yy [y"] fr_ca
[y] no [y] no
[Y] da
vowel/yy_3 [y] sv vowel/yy_3 [y] sv
vowel/yy_4 [y] de vowel/yy_4 [y] de
[y] hu [y] hu
vwl_en_us/or [o@] en_us vwl_en_us/or [o@] en_us
[O:] en_sc [O:] en_sc
vwl_en_us/ur [U@] en_us 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 [W2] fr
[W~] fr
vwl_fr/@R [x] pt_pt vwl_fr/@R [x] pt_pt
vwl_fr/r_@2 [W] fr
vwl_fr/@R2 [R] fr_ca 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 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 vwl_fr/r_u [u] fr
[u:] fr
vwl_fr/r_y [y] fr vwl_fr/r_y [y] fr
vwl_fr/tr [r] fr
vwl_fr/w_a [wA] fr vwl_fr/w_a [wA] fr
vwl_fr/xr [a] fr
[A~] fr
vwl_hi/l-voc [l-] jbo vwl_hi/l-voc [l-] jbo
[l-] hi [l-] hi
[l-] sk [l-] sk

BIN
phsource/m/m_ View File


BIN
phsource/n/n_ View File


+ 15
- 0
phsource/ph_base2 View File

endphoneme 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 phoneme aU
vowel starttype (a) endtype (u) vowel starttype (a) endtype (u)
length 270 length 270

+ 10
- 14
phsource/ph_finnish View File

phoneme a phoneme a
vowel starttype (a) endtype (a) vowel starttype (a) endtype (a)
length 170 length 170
formants vowel/aa
reduceto a2 1
formants vowel/aa_9
// reduceto a2 1
endphoneme endphoneme


phoneme a2 phoneme a2


phoneme y phoneme y
vowel starttype (u) endtype (u) vowel starttype (u) endtype (u)
length 155
length 150
formants vowel/y formants vowel/y
endphoneme endphoneme


vowel starttype (u) endtype (i) vowel starttype (u) endtype (i)
length 270 length 270
long long
formants vdiph/ui
formants vdiph/ui_4
endphoneme endphoneme


phoneme yi phoneme yi
//=========== //===========





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 trill
formants r/rr
after _ r/rr
after t r/trr p r/trr k r/trr
before _ r/r_
lengthmod 6
endphoneme endphoneme





+ 106
- 111
phsource/ph_french View File

// French // French
//==================================================== //====================================================


phoneme (l) virtual
// Used for l and l/
endphoneme

phoneme : // Lengthen previous vowel by "length" phoneme : // Lengthen previous vowel by "length"
virtual virtual
length 40 // shorter than for fr-ca length 40 // shorter than for fr-ca
endphoneme endphoneme




// Vowels
//=======
phoneme @ phoneme @
vowel starttype (@) endtype (@) vowel starttype (@) endtype (@)
length 190 length 190
formants vowel/@_hgh formants vowel/@_hgh
before l/ DFT+l/l_@ before l/ DFT+l/l_@
before (r) DFT+r/xr
before (r) DFT+vwl_fr/r_@
endphoneme endphoneme




vowel starttype (@) endtype (@) vowel starttype (@) endtype (@)
length 170 length 170
formants vowel/@_fr 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 endphoneme




formants vowel/a_6 formants vowel/a_6
after l l/la-15 after l l/la-15
before l/ DFT+l/l_a 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 endphoneme




vowel starttype (e) endtype (e) vowel starttype (e) endtype (e)
length 190 length 190
formants vowel/e formants vowel/e
after l l/le-15
after (l) l/le-15
before l/ DFT-20+l/xl before l/ DFT-20+l/xl
before (r) DFT+r/xr
before (r) DFT-10+vwl_fr/r_e
endphoneme endphoneme




vowel starttype (e) endtype (e) vowel starttype (e) endtype (e)
length 190 length 190
formants vowel/e_mid formants vowel/e_mid
after l l/le-15
after (l) l/le-15
before l/ DFT+l/l_e 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 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 endphoneme




phoneme i
phoneme i- // shorter
vowel starttype (i) endtype (i) vowel starttype (i) endtype (i)
length 170
formants vowel/i_3
length 120
formants vowel/i_2
linkout ; 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 endphoneme




length 250 length 250
formants vowel/i_3 formants vowel/i_3
linkout ; linkout ;
after l l/li-15
after (l) l/li-15
before l/ DFT+l/l_i 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 endphoneme




vowel starttype (o) endtype (o) vowel starttype (o) endtype (o)
length 190 length 190
formants vowel/o_3 formants vowel/o_3
after l l/lo-10
after (l) l/lo-10
before l/ DFT+l/l_o 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 reduceto o2 1
endphoneme endphoneme


vowel starttype (o) endtype (o) vowel starttype (o) endtype (o)
length 190 length 190
formants vowel/o_2 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 endphoneme




vowel starttype (o) endtype (o) vowel starttype (o) endtype (o)
length 190 length 190
formants vowel/o_mid formants vowel/o_mid
after l l/lo-10
after (l) l/lo-10
before l/ DFT+l/l_o 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 endphoneme




vowel starttype (o) endtype (o) vowel starttype (o) endtype (o)
length 190 length 190
formants vowel/o_mid formants vowel/o_mid
after l l/lo-10
after (l) l/lo-10
before l/ DFT+l/l_o 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 endphoneme




phoneme u phoneme u
vowel starttype (u) endtype (u) vowel starttype (u) endtype (u)
length 190 length 190
formants vowel/u_3
formants vowel/u_4
after l l/lu-20 after l l/lu-20
before l/ DFT-20+l/l_u 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 r/2 DFT+vwl_fr/r_u
before i DFT-50
endphoneme endphoneme




after l l/lu-20 after l l/lu-20
before l/ DFT-20+l/l_u before l/ DFT-20+l/l_u
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 endphoneme




formants vowel/y_2 formants vowel/y_2
after l l/lu-20 after l l/lu-20
before l/ DFT-30+l/l_y 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 r/2 DFT+vwl_fr/r_y
before E~ DFT-50
endphoneme endphoneme




vowel starttype (@) endtype (@) vowel starttype (@) endtype (@)
length 190 length 190
formants vowel/y# formants vowel/y#
after l l/l@-20
after (l) l/l@-20
before l/ DFT-20+l/l_@ before l/ DFT-20+l/l_@
before (r) DFT+r/xr
before (r) DFT+vwl_fr/r_@
before r/2 DFT+r/xr-40 before r/2 DFT+r/xr-40
endphoneme endphoneme


vowel starttype (@) endtype (@) vowel starttype (@) endtype (@)
length 200 length 200
formants vowel/@_5 formants vowel/@_5
after l l/l@-20
after (l) l/l@-20
before l/ DFT-20+l/l_@ 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 reduceto Y 1
endphoneme endphoneme


vowel starttype (@) endtype (@) vowel starttype (@) endtype (@)
length 200 length 200
formants vowel/@_3 formants vowel/@_3
after l l/l@-20
after (l) l/l@-20
before l/ DFT-20+l/l_@ before l/ DFT-20+l/l_@
before (r) DFT+vwl_fr/r_@
before r/2 DFT+vwl_fr/r_@ before r/2 DFT+vwl_fr/r_@
endphoneme endphoneme




phoneme wA phoneme wA
vowel starttype (o) endtype (a) vowel starttype (o) endtype (a)
length 240
length 220
formants vwl_fr/w_a formants vwl_fr/w_a
after l l/lo-10
after (l) l/lo-10
before l/ DFT-10+l/l_a 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 before r/2 DFT+vwl_fr/r_a
endphoneme endphoneme


formants vdiph/yi_fr formants vdiph/yi_fr
after l l/lu-20 after l l/lu-20
before l/ DFT+l/l_i 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 endphoneme




phoneme A~ phoneme A~
vowel starttype (a) endtype (a) vowel starttype (a) endtype (a)
length 210 length 210
formants vnasal/aa_n2
before r/2 DFT+r/xr-40
formants vnasal/aa_n4
before l/ DFT+l/l_a before l/ DFT+l/l_a
before (r) DFT+vwl_fr/xr
before r/2 DFT+r/xr-40
endphoneme endphoneme




phoneme O~ phoneme O~
vowel starttype (o) endtype (o) vowel starttype (o) endtype (o)
length 210 length 210
formants vnasal/o_n3
// before n2 vowel/o_mid
formants vnasal/o_n2
before (r) DFT+vwl_fr/r_o
endphoneme endphoneme




vowel starttype (@) endtype (@) vowel starttype (@) endtype (@)
length 210 length 210
formants vnasal/W_n formants vnasal/W_n
before (r) DFT+vwl_fr/r_@
endphoneme endphoneme




formants b/b+x/b%70 formants b/b+x/b%70
before _ b/b_+x/b_ before _ b/b_+x/b_
before l/ 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 _ NULL
after @ b/xb%50 after @ b/xb%50
lengthmod 5 lengthmod 5
vowelout f1=0 f2=1700 -300 300 f3=-100 80 vowelout f1=0 f2=1700 -300 300 f3=-100 80
formants d/d+x/d%40 formants d/d+x/d%40
before _ d/d_+x/d_%50 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 before r/2 d/dr+x/d%50
after _ d/d+x/d%50 after _ d/d+x/d%50
after (@) d/xd after (@) d/xd
vowelout f1=2 f2=2300 250 300 f3=-300 80 brk vowelout f1=2 f2=2300 250 300 f3=-300 80 brk
formants g/g+x/g2%30 formants g/g+x/g2%30
before _ g/g_+x/g_ before _ g/g_+x/g_
before (r) g/g+x/g2%50
after _ NULL after _ NULL
after @ g/xg%30
after (@) g/xg%30
lengthmod 5 lengthmod 5
switchvoicing k switchvoicing k
endphoneme endphoneme
lengthmod 2 lengthmod 2
wave ustop/k%40 // reduce strength of noise burst wave ustop/k%40 // reduce strength of noise burst
before _ ustop/k_ 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 l/ ustop/kl%45 before l/ ustop/kl%45
before (i) ustop/ki%45 before (i) ustop/ki%45




phoneme l phoneme l
liquid
liquid starttype (l) endtype (l)
vowelout f1=1 f2=1600 -300 300 f3=100 80 brk vowelout f1=1 f2=1600 -300 300 f3=100 80 brk
length 100 length 100
lengthmod 7 lengthmod 7




phoneme l/ // used for [l] when not before a vowel phoneme l/ // used for [l] when not before a vowel
liquid
liquid starttype (l) endtype (l)
length 100 length 100
lengthmod 7 lengthmod 7
formants l/l_ formants l/l_
phoneme p phoneme p
vls blb stop vls blb stop
vowelin f1=0 f2=1000 -50 -100 f3=-200 80 amp=11 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 lengthmod 2
wave ustop/p%50 wave ustop/p%50
after _ ustop/p%70 after _ ustop/p%70
before _ ustop/p_%70 before _ ustop/p_%70
before R ustop/pr%30
before (r) ustop/pr%35
before @- ustop/p_unasp%60 before @- ustop/p_unasp%60
before l ustop/pl%30 before l ustop/pl%30
before l/ ustop/pl%30 before l/ ustop/pl%30




phoneme r 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 length 100
lengthmod 7 lengthmod 7
beforenotvowel r/2 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 endphoneme




phoneme r2 // silent unless followed by vowel 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 length 100
lengthmod 7 lengthmod 7
beforenotvowel NULL 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 endphoneme




phoneme r/2 // variant of [r] when not preceding a vowel phoneme r/2 // variant of [r] when not preceding a vowel
liquid liquid
vowelout f1=2 f2=1800 -200 200 f3=-200 80 brk
vowelout f1=2 f2=1800 10 10 f3=-200 100
length 100 length 100
lengthmod 2 lengthmod 2
formants r3/r_2+r3/rx%20
formants r3/r_2+r3/rx%25
before n r3/r_n before n r3/r_n
beforevowel r beforevowel r
endphoneme endphoneme
lengthmod 2 lengthmod 2
wave ustop/t_short%40 wave ustop/t_short%40
before _ ustop/t_%40 before _ ustop/t_%40
before R ustop/t_short%50
before (r) ustop/t_short%60
before r/2 ustop/t_short%50 before r/2 ustop/t_short%50
switchvoicing d switchvoicing d
endphoneme endphoneme


phoneme v phoneme v
vcd lbd frc 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 lengthmod 6
formants voc/v+vocw/v%75 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 before _ voc/v_+vocw/v
switchvoicing f switchvoicing f
endphoneme endphoneme








+ 5
- 1
phsource/phonemes View File

include ph_nepali include ph_nepali


phonemetable mr hi phonemetable mr hi
include ph_mathari
include ph_marathi


phonemetable om base phonemetable om base
include ph_oromo include ph_oromo


phonemetable eu base2 phonemetable eu base2
include ph_basque 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

# End Source File # End Source File
# Begin Source File # Begin Source File
SOURCE=.\src\klatt.cpp
# End Source File
# Begin Source File
SOURCE=.\src\numbers.cpp SOURCE=.\src\numbers.cpp
# End Source File # End Source File
# Begin Source File # Begin Source File
# End Source File # End Source File
# Begin Source File # Begin Source File
SOURCE=.\src\tr_english.cpp
# End Source File
# Begin Source File
SOURCE=.\src\tr_languages.cpp SOURCE=.\src\tr_languages.cpp
# End Source File # End Source File
# Begin Source File # Begin Source File
# End Source File # End Source File
# Begin Source File # Begin Source File
SOURCE=.\src\klatt.h
# End Source File
# Begin Source File
SOURCE=.\src\phoneme.h SOURCE=.\src\phoneme.h
# End Source File # End Source File
# Begin Source File # Begin Source File

+ 53
- 30
src/compiledata.cpp View File

} }
spectseq->Load(stream); 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); displ = ftell(f_phdata);




// write: peak data // write: peak data
count_frames++; 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); fr_out->fheight[peak] = int(pkheight);


if(peak < 6) 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; if(x > 255) x = 255;
fr_out->fwidth[peak] = x; 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(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++; n_frames++;

+ 2
- 2
src/espeakedit.cpp View File



// Another window to the left of the client window // Another window to the left of the client window
win = new wxSashLayoutWindow(this, ID_WINDOW_LEFT2, win = new wxSashLayoutWindow(this, ID_WINDOW_LEFT2,
wxDefaultPosition, wxSize(200, 30),
wxDefaultPosition, wxSize(298, 30),
wxNO_BORDER | wxSW_3D | wxCLIP_CHILDREN); wxNO_BORDER | wxSW_3D | wxCLIP_CHILDREN);
win->SetDefaultSize(wxSize(212, 1000));
win->SetDefaultSize(wxSize(310, 1000));
win->SetOrientation(wxLAYOUT_VERTICAL); win->SetOrientation(wxLAYOUT_VERTICAL);
win->SetAlignment(wxLAYOUT_LEFT); win->SetAlignment(wxLAYOUT_LEFT);
// win->SetBackgroundColour(wxColour(0, 255, 255)); // win->SetBackgroundColour(wxColour(0, 255, 255));

+ 154
- 95
src/formantdlg.cpp View File

xplace = 28; xplace = 28;
id = 201; id = 201;
new wxStaticText(this,-1,_T("Formants"),wxPoint(4,5)); 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); string.Printf(_T("%d"),ix);
t_labpk[ix] = new wxStaticText(this,id++,string, t_labpk[ix] = new wxStaticText(this,id++,string,
wxPoint(xplace-22,y+1+24*ix)); 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(""), 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_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)); t_zoomout = new wxButton(this,T_ZOOMOUT,_T("Zoom-"),wxPoint(16,420));


t_pitch = new wxStaticText(this,-1,_T(""),wxPoint(4,520),wxSize(192,24)); 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 = new ByteGraph(this,wxPoint(0,538),wxSize(200,140));
pitchgraph->SetData(128,env_fall); pitchgraph->SetData(128,env_fall);
pitchgraph->ShowSpectrum(1); pitchgraph->ShowSpectrum(1);
} }




void FormantDlg::HideFields(int synth_type)
{//=======================================

void FormantDlg::GetValues(SpectSeq *spectseq, int frame)
{//======================================================
int ix; 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) void FormantDlg::ShowFrame(SpectSeq *spectseq, int frame, int pk, int field)
SpectFrame *sf; SpectFrame *sf;
wxString value; wxString value;
int original_mS; int original_mS;
peak_t *peak;


if(spectseq->frames == NULL) if(spectseq->frames == NULL)
return; return;
sf = spectseq->frames[frame]; sf = spectseq->frames[frame];


HideFields(spectseq->synthesizer_type);

if(field == 0xff) if(field == 0xff)
{ {
// indicate the selected peak // indicate the selected peak
// t_select_peak[pk]->SetValue(TRUE); // t_select_peak[pk]->SetValue(TRUE);
} }


for(ix=0; ix<N_PEAKS; ix++)
for(ix=0; ix < 8; ix++)
{ {
if(field != 0xff && pk!=ix) if(field != 0xff && pk!=ix)
continue; continue;
t_labpk[ix]->SetLabel(value); 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); value.Printf(_T("%4d"),sf->peaks[ix].pkfreq);
t_pkfreq[ix]->SetValue(value); t_pkfreq[ix]->SetValue(value);
value.Printf(_T("%3d"),sf->peaks[ix].pkheight >> 6); value.Printf(_T("%3d"),sf->peaks[ix].pkheight >> 6);
t_pkheight[ix]->SetValue(value); 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); 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);
}
} }
} }


value.Printf(_T("%3d"),sf->amp_adjust); value.Printf(_T("%3d"),sf->amp_adjust);
t_ampframe->SetValue(value); 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 } // end of FormantDlg::ShowFrame





+ 75
- 54
src/klatt.cpp View File

#include <stdlib.h> #include <stdlib.h>
#include <math.h> #include <math.h>
#include <string.h> #include <string.h>
#include "klatt.h"


#include "speak_lib.h" #include "speak_lib.h"
#include "speech.h" #include "speech.h"
#include "klatt.h"
#include "phoneme.h" #include "phoneme.h"
#include "synthesize.h" #include "synthesize.h"
#include "voice.h" #include "voice.h"




extern voice_t *wvoice; extern voice_t *wvoice;
static wavegen_peaks_t peaks[N_PEAKS];
static klatt_peaks_t peaks[N_PEAKS];
static int end_wave; static int end_wave;
static int klattp[N_KLATTP]; static int klattp[N_KLATTP];
static double klattp1[N_KLATTP]; static double klattp1[N_KLATTP];
{ {
kt_frame.F0hz10 = (wdata.pitch * 10) / 4096; 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() // formants F6,F7,F8 are fixed values for cascade resonators, set in KlattInit()
// but F6 is used for parallel resonator // 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]; kt_frame.AVdb = klattp[KLATT_AV];
{ {
peaks[pk].freq1 += peaks[pk].freq_inc; peaks[pk].freq1 += peaks[pk].freq_inc;
peaks[pk].freq = (int)peaks[pk].freq1; 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++) for(ix=0; ix < N_KLATTP; ix++)
{ {
klattp1[ix] += klattp_inc[ix]; klattp1[ix] += klattp_inc[ix];
klattp[ix] = int(klattp1[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 // advance the pitch
wdata.pitch_ix += wdata.pitch_inc; wdata.pitch_ix += wdata.pitch_inc;
if((ix = wdata.pitch_ix>>8) > 127) ix = 127; if((ix = wdata.pitch_ix>>8) > 127) ix = 127;


for(ix=0; ix<N_KLATTP; ix++) 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; 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].freq1 = (fr1->ffreq[ix] * v->freq[ix] / 256.0) + v->freqadd[ix];
peaks[ix].freq = int(peaks[ix].freq1); peaks[ix].freq = int(peaks[ix].freq1);
next = (fr2->ffreq[ix] * v->freq[ix] / 256.0) + v->freqadd[ix]; 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 } // end of SetSynth_Klatt


kt_frame.Kskew = 0; kt_frame.Kskew = 0;
kt_frame.AB = 0; kt_frame.AB = 0;
kt_frame.AVpdb = 0; kt_frame.AVpdb = 0;
kt_frame.Gain0 = 62;
kt_frame.Gain0 = 60; // 62
} // end of KlattInit } // end of KlattInit


#endif // INCLUDE_KLATT #endif // INCLUDE_KLATT

+ 17
- 2
src/klatt.h View File

/* Structure for Klatt Parameters */ /* Structure for Klatt Parameters */


#define F_NP 0 // nasal zero formant
#define F_NZ 0 // nasal zero formant
#define F1 1 #define F1 1
#define F2 2 #define F2 2
#define F3 3 #define F3 3
#define F4 4 #define F4 4
#define F5 5 #define F5 5
#define F6 6 #define F6 6
#define F_NZ 9 // nasal pole formant
#define F_NP 9 // nasal pole formant




typedef struct typedef struct
} klatt_frame_t, *klatt_frame_ptr; } 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

value = this_value = atoi(word); value = this_value = atoi(word);


ph_ordinal2[0] = 0; 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 number is indicated by dot after the number
ordinal = 2; ordinal = 2;

+ 2
- 2
src/speak.cpp View File

}; };
int optind; int optind;
static int optional_argument; 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=""; static char *opt_string="";
#define no_argument 0 #define no_argument 0
#define required_argument 1 #define required_argument 1
#else #else
while(true) 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); long_options, &option_index);


/* Detect the end of the options. */ /* Detect the end of the options. */

+ 1
- 1
src/speak_lib.cpp View File

ep->type = (espeak_EVENT_TYPE)type; ep->type = (espeak_EVENT_TYPE)type;
ep->unique_identifier = my_unique_identifier; ep->unique_identifier = my_unique_identifier;
ep->user_data = my_user_data; ep->user_data = my_user_data;
ep->text_position = char_position & 0xffff;
ep->text_position = char_position & 0xffffff;
ep->length = char_position >> 24; ep->length = char_position >> 24;
time = (double(count_samples + mbrola_delay + (out_ptr - out_start)/2)*1000.0)/samplerate; time = (double(count_samples + mbrola_delay + (out_ptr - out_start)/2)*1000.0)/samplerate;

+ 47
- 26
src/spect.cpp View File

{200,500,1200,3000,3500,4000,6900,7800,9000}; {200,500,1200,3000,3500,4000,6900,7800,9000};
static int default_width[N_PEAKS] = static int default_width[N_PEAKS] =
{750,500,550,550,600,700,700,700,700}; {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) float SpectTilt(int value, int freq)
{//================================= {//=================================
peaks[ix].pkheight = 0; peaks[ix].pkheight = 0;
peaks[ix].pkwidth = default_width[ix]; peaks[ix].pkwidth = default_width[ix];
peaks[ix].pkright = 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) if(copy != NULL)
{ {
*this = *copy; *this = *copy;


int SpectFrame::Import(wxInputStream& stream1) int SpectFrame::Import(wxInputStream& stream1)
{//========================================== {//==========================================
// Import Pratt analysis data
int ix; int ix;
double x; double x;
unsigned short *spect_data; unsigned short *spect_data;


synthesizer_type = 0;
wxTextInputStream stream(stream1); wxTextInputStream stream(stream1);


stream >> time; stream >> time;






int SpectFrame::Load(wxInputStream& stream, int synth_type)
{//========================================================
int SpectFrame::Load(wxInputStream& stream, int file_format_type)
{//==============================================================
int ix; int ix;
int x; int x;
unsigned short *spect_data; unsigned short *spect_data;


synthesizer_type = synth_type;
file_format = file_format_type;
wxDataInputStream s(stream); wxDataInputStream s(stream);


time = s.ReadDouble(); time = s.ReadDouble();
markers = s.Read16(); markers = s.Read16();
amp_adjust = s.Read16(); amp_adjust = s.Read16();


if(file_format == 2)
{
s.Read16(); // spare
s.Read16(); // spare
}

for(ix=0; ix<N_PEAKS; ix++) for(ix=0; ix<N_PEAKS; ix++)
{ {
formants[ix].freq = s.Read16(); formants[ix].freq = s.Read16();
keyframe = 1; keyframe = 1;
peaks[ix].pkwidth = s.Read16(); peaks[ix].pkwidth = s.Read16();
peaks[ix].pkright = 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(); klatt_param[ix] = s.Read16();
} }
s.Write16(markers); s.Write16(markers);
s.Write16(amp_adjust); s.Write16(amp_adjust);


if(file_format == 2)
{
s.Write16(0); // spare
s.Write16(0); // spare
}

for(ix=0; ix<N_PEAKS; ix++) for(ix=0; ix<N_PEAKS; ix++)
{ {
s.Write16(formants[ix].freq); s.Write16(formants[ix].freq);
s.Write16(keyframe ? peaks[ix].pkheight : 0); s.Write16(keyframe ? peaks[ix].pkheight : 0);
s.Write16(peaks[ix].pkwidth); s.Write16(peaks[ix].pkwidth);
s.Write16(peaks[ix].pkright); 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]); s.Write16(klatt_param[ix]);
} }


if((pk->pkfreq == 0) || (pk->pkheight==0)) continue; 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); x1 = (int)(pk->pkfreq*scale_x);
x2 = (int)((pk->pkfreq + pkright)*scale_x); x2 = (int)((pk->pkfreq + pkright)*scale_x);
int bw; int bw;
int bw3; int bw3;


synthesizer_type = 1;

klatt_param[KLATT_AV] = 59; klatt_param[KLATT_AV] = 59;
klatt_param[KLATT_AVp] = 0; klatt_param[KLATT_AVp] = 0;
klatt_param[KLATT_Fric] = 0; klatt_param[KLATT_Fric] = 0;
klatt_param[KLATT_Skew] = 0; klatt_param[KLATT_Skew] = 0;
klatt_param[KLATT_Tilt] = 0; klatt_param[KLATT_Tilt] = 0;
klatt_param[KLATT_Kopen] = 40; klatt_param[KLATT_Kopen] = 40;
klatt_param[KLATT_spare1] = 0;
klatt_param[KLATT_FNZ] = 280;


bw = 60; bw = 60;
if(peaks[1].pkfreq < 400) if(peaks[1].pkfreq < 400)

+ 22
- 8
src/spect.h View File

#define T_SKEW 318 #define T_SKEW 318
#define T_TILT 319 #define T_TILT 319
#define T_KOPEN 320 #define T_KOPEN 320
#define T_FNZ 321




#define FILEID1_SPECTSEQ 0x43455053 #define FILEID1_SPECTSEQ 0x43455053
#define FILEID2_SPECTSEQ 0x51455354 // for eSpeak sequence #define FILEID2_SPECTSEQ 0x51455354 // for eSpeak sequence
#define FILEID2_SPECTSEK 0x4b455354 // for Klatt 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 #define FILEID1_SPC2 0x32435053 // an old format for spectrum files


} PitchEnvelope; } PitchEnvelope;


typedef struct { typedef struct {
short freq;
short bandw;
short freq;
short bandw;
} formant_t; } 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 // Old "SPC2" format
~SpectFrame(); ~SpectFrame();
int Import(wxInputStream &stream); int Import(wxInputStream &stream);
int ImportSPC2(wxInputStream &stream, float &time_acc); 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); int Save(wxOutputStream &stream);
void Draw(wxDC &dc, int offy, int frame_width, double scalex, double scaley); void Draw(wxDC &dc, int offy, int frame_width, double scalex, double scaley);


int nx; int nx;
int markers; int markers;
int max_y; 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' 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 formant_t formants[N_PEAKS]; // this is just the estimate given by Praat
peak_t peaks[N_PEAKS]; peak_t peaks[N_PEAKS];
float GetKeyedLength(); float GetKeyedLength();
void SetFrameLengths(); void SetFrameLengths();
void ConstructVowel(void); void ConstructVowel(void);
void SetKlattDefaults(void);


int numframes; int numframes;
int amplitude; int amplitude;
int bass_reduction; int bass_reduction;
int max_x; int max_x;
int max_y; int max_y;
int synthesizer_type;
int file_format;




private: private:
public: public:
FormantDlg(wxWindow *parent); FormantDlg(wxWindow *parent);
void ShowFrame(SpectSeq *spectseq, int frame, int pk, int field); void ShowFrame(SpectSeq *spectseq, int frame, int pk, int field);
void GetValues(SpectSeq *spectseq, int frame);
void OnCommand(wxCommandEvent& event); void OnCommand(wxCommandEvent& event);
void OnSpin(wxSpinEvent& event); void OnSpin(wxSpinEvent& event);
void HideFields(int synth_type); void HideFields(int synth_type);
wxTextCtrl *t_pkfreq[N_PEAKS]; wxTextCtrl *t_pkfreq[N_PEAKS];
wxTextCtrl *t_pkheight[N_PEAKS]; wxTextCtrl *t_pkheight[N_PEAKS];
wxTextCtrl *t_pkwidth[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]; wxRadioButton *t_select_peak[N_PEAKS];


wxButton *t_zoomout; wxButton *t_zoomout;

+ 33
- 33
src/spectdisplay.cpp View File

sf->amp_adjust = formantdlg->t_ampframe->GetValue(); sf->amp_adjust = formantdlg->t_ampframe->GetValue();
sf->length_adjust = formantdlg->t_timeframe->GetValue() - spectseq->GetFrameLength(sframe,0,NULL); 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(); sf->klatt_param[ix] = formantdlg->s_klatt[ix]->GetValue();
} }
case WXK_NEXT: case WXK_NEXT:
if(sframe < spectseq->numframes-1) if(sframe < spectseq->numframes-1)
{ {
formantdlg->GetValues(spectseq, sframe);
spectseq->SelectAll(0); spectseq->SelectAll(0);
sframe++; sframe++;
spectseq->frames[sframe]->selected = 1; spectseq->frames[sframe]->selected = 1;
case WXK_PRIOR: case WXK_PRIOR:
if(sframe > 0) if(sframe > 0)
{ {
formantdlg->GetValues(spectseq, sframe);
spectseq->SelectAll(0); spectseq->SelectAll(0);
sframe--; sframe--;
spectseq->frames[sframe]->selected = 1; spectseq->frames[sframe]->selected = 1;
if(event.ControlDown()) if(event.ControlDown())
{ {
// CTRL, rotate, make right slope steeper // CTRL, rotate, make right slope steeper
if(spectseq->synthesizer_type==0)
if(pk_num < 3)
{
pk->pkright-= 5; pk->pkright-= 5;
pk->pkwidth += 5;
pk->pkwidth += 5;
}
} }
else else
{ {
if(spectseq->synthesizer_type==0)
pk->pkright -= 10;
pk->pkright -= 10;
pk->pkwidth -= 10; pk->pkwidth -= 10;
if(pk->pkright < 0) if(pk->pkright < 0)
pk->pkright = 0; pk->pkright = 0;
if(event.ControlDown()) if(event.ControlDown())
{ {
// CTRL: rotate, make left slope steeper // CTRL: rotate, make left slope steeper
if(spectseq->synthesizer_type==0)
if(pk_num < 3)
{
pk->pkright += 5; pk->pkright += 5;
pk->pkwidth -= 5;
pk->pkwidth -= 5;
}
} }
else else
{ {
if(spectseq->synthesizer_type==0)
pk->pkright += 10;
pk->pkright += 10;
pk->pkwidth += 10; pk->pkwidth += 10;
} }
field = 4; field = 4;
break; break;


case '<': // width-- case '<': // width--
if(spectseq->synthesizer_type==0)
pk->pkright -= 2;
pk->pkright -= 2;
pk->pkwidth -= 2; pk->pkwidth -= 2;
if(pk->pkwidth < 0) if(pk->pkwidth < 0)
pk->pkwidth = 0; pk->pkwidth = 0;
break; break;


case '>': // width++ case '>': // width++
if(spectseq->synthesizer_type==0)
pk->pkright += 2;
pk->pkright += 2;
pk->pkwidth += 2; pk->pkwidth += 2;
display = 1; display = 1;
field = 4; field = 4;
break; break;


case 0x104b: // CTRL-K case 0x104b: // CTRL-K
spectseq->SetKlattDefaults();
display = 3;
// spectseq->SetKlattDefaults();
// display = 3;
break; break;


case 0x104d: // CTRL-M case 0x104d: // CTRL-M
sf = spectseq->frames[sframe]; sf = spectseq->frames[sframe];
pk = &sf->peaks[pk_num]; 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;
} }
} }




if(frame < spectseq->numframes) if(frame < spectseq->numframes)
{ {
formantdlg->GetValues(spectseq,sframe);
if(sframe != frame) if(sframe != frame)
formantdlg->ShowFrame(spectseq,frame,pk_num,0xff); formantdlg->ShowFrame(spectseq,frame,pk_num,0xff);



+ 31
- 64
src/spectseq.cpp View File



max_x = 3000; max_x = 3000;
max_y = 1; max_y = 1;
synthesizer_type = 0;
file_format = 0;
} }


SpectSeq::~SpectSeq() SpectSeq::~SpectSeq()
} }
else else
{ {
if(frame->Load(stream, synthesizer_type) != 0) break;
if(frame->Load(stream, file_format) != 0) break;
} }


frames[numframes++] = frame; frames[numframes++] = frame;


int SpectSeq::Import(wxInputStream& stream) int SpectSeq::Import(wxInputStream& stream)
{//======================================== {//========================================
// Import data from Pratt analysis
int n = 0; int n = 0;




else else
if((id1 == FILEID1_SPECTSEQ) && (id2 == FILEID2_SPECTSEQ)) if((id1 == FILEID1_SPECTSEQ) && (id2 == FILEID2_SPECTSEQ))
{ {
synthesizer_type = 0; // eSpeak formants
file_format = 0; // eSpeak formants
} }
else else
if((id1 == FILEID1_SPECTSEQ) && (id2 == FILEID2_SPECTSEK)) 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 else
{ {
wxDataOutputStream s(stream); wxDataOutputStream s(stream);


s.Write32(FILEID1_SPECTSEQ); s.Write32(FILEID1_SPECTSEQ);
if(synthesizer_type == 1)
if(file_format == 2)
s.Write32(FILEID2_SPECTSQ2);
if(file_format == 1)
s.Write32(FILEID2_SPECTSEK); s.Write32(FILEID2_SPECTSEK);
else else
s.Write32(FILEID2_SPECTSEQ); s.Write32(FILEID2_SPECTSEQ);






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) void SpectSeq::ConstructVowel(void)
{//================================ {//================================




memcpy(peaks,sp->peaks,sizeof(*peaks)*N_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 } // end of ApplyAmp_adjust


void PeaksToFrame(SpectFrame *sp1, peak_t *pks, frame_t *fr) void PeaksToFrame(SpectFrame *sp1, peak_t *pks, frame_t *fr)
{//========================================================= {//=========================================================
int ix; 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) 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; x = 255;
fr->fwidth[ix] = x; 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;
}
} }
} }


PeaksToFrame(sp2,pks2,&fr2); PeaksToFrame(sp2,pks2,&fr2);


#ifdef KLATT_TEST #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 #endif
{ {
SetSynth((length_mS * samplerate) / 1000, 0, &fr1, &fr2, voice); // convert mS to samples SetSynth((length_mS * samplerate) / 1000, 0, &fr1, &fr2, voice); // convert mS to samples
peak_t peaks0[N_PEAKS]; peak_t peaks0[N_PEAKS];
peak_t peaks1[N_PEAKS]; peak_t peaks1[N_PEAKS];
peak_t peaks2[N_PEAKS]; peak_t peaks2[N_PEAKS];
int synthesizer_type = 0;


#ifdef KLATT_TEST #ifdef KLATT_TEST
KlattInit(); KlattInit();
int ipitch; int ipitch;
int pbase; int pbase;
char *fname_speech; char *fname_speech;
int synthesizer_type = 0;


#ifdef KLATT_TEST #ifdef KLATT_TEST
KlattInit(); KlattInit();

+ 1
- 1
src/speech.h View File

#include <sys/types.h> #include <sys/types.h>


// conditional compilation options // conditional compilation options
//#define INCLUDE_KLATT
#define INCLUDE_KLATT


#if defined(BYTE_ORDER) && BYTE_ORDER == BIG_ENDIAN #if defined(BYTE_ORDER) && BYTE_ORDER == BIG_ENDIAN
#define ARCH_BIG #define ARCH_BIG

+ 2
- 2
src/synthdata.cpp View File

#include "translate.h" #include "translate.h"
#include "wave.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; int option_device_number = -1;



+ 11
- 13
src/synthesize.cpp View File

849,851,853,856,858,861,863,865,868,870,872,875,877,879,882,884, 849,851,853,856,858,861,863,865,868,870,872,875,877,879,882,884,
886,889,891,893,896,898,900,902}; 886,889,891,893,896,898,900,902};


if(fr->frflags & FRFLAG_KLATT)
if(voice->klattv[0])
{ {
if(new_rms == -1) if(new_rms == -1)
{ {


x = sqrt_tab[x]; // sqrt(new_rms/fr->rms)*0x200; 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; h = fr->fheight[ix] * x;
fr->fheight[ix] = h/0x200; fr->fheight[ix] = h/0x200;
int ix; int ix;
int x; int x;


if(fr->frflags & FRFLAG_KLATT)
if(voice->klattv[0])
return; return;
for(ix=2; ix<N_PEAKS; ix++)
for(ix=2; ix < 8; ix++)
{ {
x = fr->fheight[ix] * level; x = fr->fheight[ix] * level;
fr->fheight[ix] = x/100; fr->fheight[ix] = x/100;


next_rms = seq[1].frame->rms; 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 fr->klattp[KLATT_AV] = 53; // reduce the amplituide of the start of a vowel
} }
q = wcmdq[syllable_centre]; q = wcmdq[syllable_centre];
frame_centre = (frame_t *)q[2]; frame_centre = (frame_t *)q[2];


//if(frame_centre->frflags & FRFLAG_KLATT)
// return; // TESTING

// backwards // backwards
ix = syllable_centre -1; ix = syllable_centre -1;
frame = frame2 = frame_centre; frame = frame2 = frame_centre;


frame1 = frames[0].frame; frame1 = frames[0].frame;
frame1_length = frames[0].length; frame1_length = frames[0].length;
if(frame1->frflags & FRFLAG_KLATT)
if(voice->klattv[0])
wcmd_spect = WCMD_KLATT; wcmd_spect = WCMD_KLATT;


if(wavefile_ix == 0) if(wavefile_ix == 0)
{ {
// cancel any wavefile that was playing previously // cancel any wavefile that was playing previously
wcmd_spect = WCMD_SPECT2; wcmd_spect = WCMD_SPECT2;
if(frame1->frflags & FRFLAG_KLATT)
if(voice->klattv[0])
wcmd_spect = WCMD_KLATT2; wcmd_spect = WCMD_KLATT2;
wave_flag = 0; wave_flag = 0;
} }
else else
{ {
wcmd_spect = WCMD_SPECT; wcmd_spect = WCMD_SPECT;
if(frame1->frflags & FRFLAG_KLATT)
if(voice->klattv[0])
wcmd_spect = WCMD_KLATT; wcmd_spect = WCMD_KLATT;
} }
} }
{ {
// but flag indicates keep HF peaks in last segment // but flag indicates keep HF peaks in last segment
fr = CopyFrame(frame1,1); 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]; fr->fheight[ix] = last_frame->fheight[ix];
} }
wcmdq[last_wcmdq][3] = (long)fr; wcmdq[last_wcmdq][3] = (long)fr;

+ 42
- 27
src/synthesize.h View File

#define N_PEAKS 9 #define N_PEAKS 9
#define N_MARKERS 8 #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_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_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_Fric 7
#define KLATT_FricBP 8 #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 { typedef struct {
short frflags; short frflags;
unsigned char length; unsigned char length;
unsigned char fwidth[6]; // width/4 unsigned char fwidth[6]; // width/4
unsigned char fright[6]; // width/4 unsigned char fright[6]; // width/4
} frame_t2; // the original, without Klatt additions, used for file "phondata" } 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

#define L_qa 0x716100 #define L_qa 0x716100
#define L_grc 0x677263 // grc Ancient Greek #define L_grc 0x677263 // grc Ancient Greek
#define L_jbo 0x6a626f // jbo Lojban #define L_jbo 0x6a626f // jbo Lojban
#define L_pap 0x706170 // pap Papiamento
#define L_zhy 0x7a6879 // zhy #define L_zhy 0x7a6879 // zhy


// start of unicode pages for character sets // start of unicode pages for character sets


tr->langopts.stress_rule = 0; tr->langopts.stress_rule = 0;
SetLetterVowel(tr,'y'); SetLetterVowel(tr,'y');
// tr->langopts.numbers = 0x11849;
tr->langopts.numbers = 0x10c59;
} }
break; break;




case L('e','s'): // Spanish case L('e','s'): // Spanish
case L('c','a'): // Catalan 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] = {180, 210, 190, 190, 0, 0, 230, 260};
// static const short stress_lengths_es[8] = {170, 200, 180, 180, 0, 0, 220, 250}; // static const short stress_lengths_es[8] = {170, 200, 180, 180, 0, 0, 220, 250};
tr->punct_within_word = ca_punct_within_word; tr->punct_within_word = ca_punct_within_word;
tr->langopts.stress_flags = 0x200 | 0x6 | 0x30; // stress last syllable unless word ends with a vowel 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; break;


tr->langopts.param[LOPT_IT_DOUBLING] = 1; tr->langopts.param[LOPT_IT_DOUBLING] = 1;
tr->langopts.long_stop = 130; tr->langopts.long_stop = 130;


tr->langopts.numbers = 0x1809;
tr->langopts.numbers = 0x1009;
SetLetterVowel(tr,'y'); 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.spelling_stress = 1;
tr->langopts.intonation_group = 3; // less intonation, don't raise pitch at comma tr->langopts.intonation_group = 3; // less intonation, don't raise pitch at comma
} }

+ 2
- 2
src/transldlg.cpp View File

{//===================================================== {//=====================================================


t_source = new wxTextCtrl(this,T_SOURCE,_T(""),wxPoint(0,4), 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), 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_TRANSLATE,_T("Translate"),wxPoint(4,620));
t_translate = new wxButton(this,T_RULES,_T("Show Rules"),wxPoint(4,652)); t_translate = new wxButton(this,T_RULES,_T("Show Rules"),wxPoint(4,652));

+ 4
- 3
src/voices.cpp View File

// Set voice to the default values // Set voice to the default values


int pk; 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 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}; static int breath_widths[N_PEAKS] = {0,200,200,400,400,400,600,600,600};
for(pk=0; pk<N_PEAKS; pk++) for(pk=0; pk<N_PEAKS; pk++)
{ {
voice->freq[pk] = 256; 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->width[pk] = default_widths[pk]*2;
voice->breath[pk] = 0; voice->breath[pk] = 0;
voice->breathw[pk] = breath_widths[pk]; // default breath formant woidths voice->breathw[pk] = breath_widths[pk]; // default breath formant woidths


case V_TONE: case V_TONE:
{ {
int tone_data[10];
int tone_data[12];
ReadTonePoints(p,tone_data); ReadTonePoints(p,tone_data);
SetToneAdjust(voice,tone_data); SetToneAdjust(voice,tone_data);
} }
break; break;


case V_KLATT: case V_KLATT:
voice->klattv[0] = 1; // default source: IMPULSIVE
Read8Numbers(p,voice->klattv); Read8Numbers(p,voice->klattv);
voice->klattv[KLATT_Kopen] -= 40; voice->klattv[KLATT_Kopen] -= 40;
break; break;

+ 38
- 14
src/wavegen.cpp View File

peaks[ix].height = 0; peaks[ix].height = 0;
peaks[ix].left1 += peaks[ix].left_inc; peaks[ix].left1 += peaks[ix].left_inc;
peaks[ix].left = int(peaks[ix].left1); 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 // 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; peaks[ix].height1 += peaks[ix].height_inc;
if((peaks[ix].height = int(peaks[ix].height1)) < 0) if((peaks[ix].height = int(peaks[ix].height1)) < 0)
peaks[ix].height = 0; peaks[ix].height = 0;
nsamples += length2; nsamples += length2;


length4 = length2/4; 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].height1 = (fr1->fheight[ix] * v->height[ix]) << 6;
peaks[ix].height = int(peaks[ix].height1); peaks[ix].height = int(peaks[ix].height1);
next = (fr2->fwidth[ix] * v->width[ix]) << 10; next = (fr2->fwidth[ix] * v->width[ix]) << 10;
peaks[ix].left_inc = ((next - peaks[ix].left1) * STEPSIZE) / length2; 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 } // end of SetSynth

Loading…
Cancel
Save